Skip to content

Commit

Permalink
Merge branch 'feat/serialize-vars-in-request' of https://github.com/g…
Browse files Browse the repository at this point in the history
…ql-dart/ferry into feat/serialize-vars-in-request
  • Loading branch information
knaeckeKami committed Nov 11, 2023
2 parents 598ddec + 0c008c0 commit cf9e72d
Show file tree
Hide file tree
Showing 43 changed files with 206 additions and 460 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline

Packages with breaking changes:


- [`ferry_exec` - `v0.4.0`](#ferry_exec---v040)

Packages with other changes:
Expand All @@ -36,6 +37,13 @@ Packages with dependency updates only:
#### `ferry_exec` - `v0.4.0`

- **BREAKING** **FEAT**(ferry_exec): add `varToJson()` method to OperationRequest and FragmentRequest in order to make the cache work without casts to dynamic.
- `ferry_flutter` - `v0.8.1-dev.4`

---

#### `ferry_cache` - `v0.7.1-dev.4`

- **FEAT**(ferry_generator): add option to reuse data classes for fragments with a single inline fragment spread as selection (#530).


## 2023-08-13
Expand Down
2 changes: 1 addition & 1 deletion examples/auth_token_with_isolate/client/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ dependencies:

# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
ferry: ^0.15.0-dev.3
ferry: ^0.15.0-dev.4
hive:
ferry_hive_store:
path_provider:
Expand Down
2 changes: 2 additions & 0 deletions examples/pokemon_explorer/lib/src/client_isolate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ Future<Client> _initClientIsolate(

final box = await Hive.openBox<Map<String, dynamic>>("graphql");

/// This deletes all cached content. useful for an example, not so much for a real-world app
/// Remove this line when you copy this code for your app.
await box.clear();

final store = HiveStore(box);
Expand Down
4 changes: 2 additions & 2 deletions examples/pokemon_explorer/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ environment:
dependencies:
gql_link: '>=0.5.0 <2.0.0'
gql_http_link: '>=0.4.0 <2.0.0'
ferry: ^0.15.0-dev.3
ferry: ^0.15.0-dev.4
ferry_hive_store: ^0.5.1
ferry_flutter: ^0.8.1-dev.3
ferry_flutter: ^0.8.1-dev.4
hive: ^2.0.0
hive_flutter: ^1.1.0
get_it: ^7.1.3
Expand Down
4 changes: 4 additions & 0 deletions packages/ferry/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.15.0-dev.4

- Update a dependency to the latest release.

## 0.15.0-dev.3

- Update a dependency to the latest release.
Expand Down
2 changes: 1 addition & 1 deletion packages/ferry/lib/src/isolate/isolate_commands.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import 'package:meta/meta.dart';
import 'package:rxdart/transformers.dart';

@internal
abstract class IsolateCommand {
abstract interface class IsolateCommand {
SendPort sendPort;

IsolateCommand(this.sendPort);
Expand Down
4 changes: 2 additions & 2 deletions packages/ferry/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: ferry
version: 0.15.0-dev.3
version: 0.15.0-dev.4
homepage: https://ferrygraphql.com/
description: Ferry is a simple, powerful GraphQL Client for Flutter and Dart.
repository: https://github.com/gql-dart/ferry
Expand All @@ -16,7 +16,7 @@ dependencies:
built_value: ^8.0.4
ferry_exec: ^0.4.0
normalize: ^0.9.0-dev.2
ferry_cache: ^0.7.1-dev.3
ferry_cache: ^0.7.1-dev.4
dev_dependencies:
test: ^1.16.8
mockito: ^5.3.1
Expand Down
4 changes: 4 additions & 0 deletions packages/ferry_cache/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.7.1-dev.4

- **FEAT**(ferry_generator): add option to reuse data classes for fragments with a single inline fragment spread as selection (#530).

## 0.7.1-dev.3

- **FIX**(normalize): When there are dangling references in child objects of a list, by default do not treat the whole entity as partial data, but remove it from the list. This can be configured using the allowDanglingReference parameter.
Expand Down
12 changes: 6 additions & 6 deletions packages/ferry_cache/lib/src/cache.dart
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ class Cache {
document: request.operation.document,
addTypename: addTypename,
operationName: request.operation.operationName,
variables: request.varsToJson,
variables: request.varsToJson(),
typePolicies: typePolicies,
dataIdFromObject: dataIdFromObject,
possibleTypes: possibleTypes,
Expand All @@ -146,7 +146,7 @@ class Cache {
document: request.document,
idFields: request.idFields,
fragmentName: request.fragmentName,
variables: request.varsToJson,
variables: request.varsToJson(),
typePolicies: typePolicies,
addTypename: addTypename,
dataIdFromObject: dataIdFromObject,
Expand Down Expand Up @@ -177,8 +177,8 @@ class Cache {
),
document: request.operation.document,
operationName: request.operation.operationName,
variables: request.varsToJson,
data: (data as dynamic)?.toJson(),
variables: request.varsToJson(),
data: request.dataToJson(data),
typePolicies: typePolicies,
addTypename: addTypename,
dataIdFromObject: dataIdFromObject,
Expand Down Expand Up @@ -209,8 +209,8 @@ class Cache {
document: request.document,
idFields: request.idFields,
fragmentName: request.fragmentName,
variables: request.varsToJson,
data: (data as dynamic)?.toJson(),
variables: request.varsToJson(),
data: request.dataToJson(data),
typePolicies: typePolicies,
addTypename: addTypename,
dataIdFromObject: dataIdFromObject,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Stream<Set<String>> fragmentDataChangeStream<TData, TVars>(
idFields: request.idFields,
fragmentName: request.fragmentName,
document: request.document,
variables: request.varsToJson,
variables: request.varsToJson(),
typePolicies: typePolicies,
addTypename: addTypename,
returnPartialData: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ Stream<Set<String>> operationDataChangeStream<TData, TVars>(
},
document: request.operation.document,
operationName: request.operation.operationName,
variables: request.varsToJson,
variables: request.varsToJson(),
typePolicies: typePolicies,
addTypename: addTypename,
returnPartialData: true,
Expand Down
5 changes: 3 additions & 2 deletions packages/ferry_cache/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: ferry_cache
version: 0.7.1-dev.3
version: 0.7.1-dev.4
homepage: https://ferrygraphql.com/
description: A normalized, strongly typed, optimistic cache for GraphQL Operations and Fragments
repository: https://github.com/gql-dart/ferry
Expand All @@ -15,4 +15,5 @@ dependencies:
pedantic: ^1.11.0
dev_dependencies:
test: ^1.16.8
ferry_test_graphql2: ^0.2.4-dev.0
ferry_test_graphql2: ^0.2.4-dev.0
gql_exec: ^1.0.0
81 changes: 81 additions & 0 deletions packages/ferry_cache/test/sync_operations_test.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import 'package:ferry_exec/ferry_exec.dart';
import 'package:ferry_test_graphql2/schema/__generated__/schema.schema.gql.dart';
import 'package:test/test.dart';
import 'package:ferry_cache/ferry_cache.dart';

import 'package:gql_exec/gql_exec.dart' show Operation;

import 'package:gql/language.dart' as gql;

import 'package:ferry_test_graphql2/queries/__generated__/reviews.req.gql.dart';
import 'package:ferry_test_graphql2/queries/__generated__/reviews.data.gql.dart';
import 'package:ferry_test_graphql2/fragments/__generated__/review_fragment.req.gql.dart';
Expand Down Expand Up @@ -58,6 +64,81 @@ void main() {
expect(cache.readFragment(reviewFragmentReq), equals(reviewFragmentData));
});

test('can read json operation request', () {
final cache = Cache();
addTearDown(cache.dispose);
cache.writeQuery(
reviewsReq.rebuild((b) => b.vars
..first = 1
..offset = 0
..episode = GEpisode.EMPIRE),
reviewsData);

final jsonReq = JsonOperationRequest(
fetchPolicy: FetchPolicy.CacheFirst,
operation: Operation(
document: gql.parseString(r'''
query Reviews {
reviews(episode: $episode, first: $first, offset: $offset) {
id
stars
}
}
'''),
operationName: 'Reviews',
),
vars: {
'episode': 'EMPIRE',
'first': 1,
'offset': 0,
},
);

final data = cache.readQuery(jsonReq);

expect(data, {
'__typename': 'Query',
'reviews': [
{'__typename': 'Review', 'id': '123', 'stars': 4}
]
});
});

test('json operation request read null if not in cache', () {
final cache = Cache();
addTearDown(cache.dispose);
cache.writeQuery(
reviewsReq.rebuild((b) => b.vars
..first = 1
..offset = 0
..episode = GEpisode.EMPIRE),
reviewsData);

final jsonReq = JsonOperationRequest(
fetchPolicy: FetchPolicy.CacheFirst,
operation: Operation(
document: gql.parseString(r'''
query Reviews {
reviews(episode: $episode, first: $first, offset: $offset) {
id
stars
}
}
'''),
operationName: 'Reviews',
),
vars: {
'episode': 'NEWHOPE',
'first': 1,
'offset': 0,
},
);

final data = cache.readQuery(jsonReq);

expect(data, null);
});

test('can clear cache', () {
final cache = Cache();

Expand Down
1 change: 1 addition & 0 deletions packages/ferry_exec/lib/ferry_exec.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ export 'package:ferry_exec/src/operation_request.dart';
export 'package:ferry_exec/src/operation_response.dart';
export 'package:ferry_exec/src/typed_link.dart';
export 'package:ferry_exec/src/exceptions.dart';
export 'package:ferry_exec/src/json_operation_request.dart';
2 changes: 2 additions & 0 deletions packages/ferry_exec/lib/src/fragment_request.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ abstract interface class FragmentRequest<TData, TVars> {
TData? parseData(Map<String, dynamic> json);

Map<String, dynamic> varsToJson();

Map<String, dynamic> dataToJson(TData data);
}
5 changes: 4 additions & 1 deletion packages/ferry_exec/lib/src/json_operation_request.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class JsonOperationRequest
JsonOperationRequest(
{required this.operation,
required this.fetchPolicy,
required this.requestId,
this.requestId,
this.updateCacheHandlerKey,
this.updateCacheHandlerContext,
this.executeOnListen = true,
Expand All @@ -55,6 +55,9 @@ class JsonOperationRequest
@override
Map<String, dynamic> varsToJson() => vars;

@override
Map<String, dynamic> dataToJson(Map<String, dynamic> data) => data;

@override
bool operator ==(Object o) {
if (identical(this, o)) return true;
Expand Down
6 changes: 6 additions & 0 deletions packages/ferry_exec/lib/src/operation_request.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,11 @@ abstract interface class OperationRequest<TData, TVars> {
/// This is a simple wrapper on the static fromJson method on the generated class.
TData? parseData(Map<String, dynamic> json);

/// Serializes data into a JSON object
/// This is a simple wrapper on the `toJson` method on the data class
Map<String, dynamic> dataToJson(TData data);

/// Serializes variables into a JSON object
/// This is a simple wrapper on the `toJson` method on the variables class
Map<String, dynamic> varsToJson();
}
1 change: 1 addition & 0 deletions packages/ferry_exec/test/json_operation_request_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

4 changes: 4 additions & 0 deletions packages/ferry_flutter/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.8.1-dev.4

- Update a dependency to the latest release.

## 0.8.1-dev.3

- Update a dependency to the latest release.
Expand Down
4 changes: 2 additions & 2 deletions packages/ferry_flutter/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
name: ferry_flutter
version: 0.8.1-dev.3
version: 0.8.1-dev.4
homepage: https://ferrygraphql.com/
description: Flutter widgets for the Ferry GraphQL client
repository: https://github.com/gql-dart/ferry
environment:
sdk: '>=2.12.0 <3.0.0'
dependencies:
ferry: ^0.15.0-dev.3
ferry: ^0.15.0-dev.4
gql_exec: '>=0.4.0 <2.0.0'
ferry_exec: ^0.4.0
flutter:
Expand Down
13 changes: 13 additions & 0 deletions packages/ferry_generator/lib/src/codegen/fragment_req.dart
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,19 @@ Class _buildFragmentReqClass(
..lambda = true
..body = refer('vars').property('toJson').call([]).code,
),
Method(
(b) => b
..annotations.add(refer('override'))
..returns = refer('Map<String, dynamic>')
..name = 'dataToJson'
..requiredParameters.add(Parameter(
(b) => b
..type = dataTypeRef
..name = 'data',
))
..lambda = true
..body = (refer('data').property('toJson').call([])).code,
)
],
initializers: {
'document': refer('document', '#ast'),
Expand Down
15 changes: 13 additions & 2 deletions packages/ferry_generator/lib/src/codegen/operation_req.dart
Original file line number Diff line number Diff line change
Expand Up @@ -159,13 +159,24 @@ Class _buildOperationReqClass(
..lambda = true
..body = dataTypeRef.property('fromJson').call([refer('json')]).code,
),
Method((b) => b
..annotations.add(refer('override'))
..returns = refer('Map<String, dynamic>')
..name = 'varsToJson'
..lambda = true
..body = (refer('vars').property('toJson').call([])).code),
Method(
(b) => b
..annotations.add(refer('override'))
..returns = refer('Map<String, dynamic>')
..name = 'varsToJson'
..name = 'dataToJson'
..requiredParameters.add(Parameter(
(b) => b
..type = dataTypeRef
..name = 'data',
))
..lambda = true
..body = (refer('vars').property('toJson').call([])).code,
..body = (refer('data').property('toJson').call([])).code,
),
],
initializers: {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit cf9e72d

Please sign in to comment.