Skip to content

Commit 78a1eb3

Browse files
authored
extract serializers to seperate package (#457)
* extract serializers to seperate package * clean pubspec * compat with new dio version, return uint8list in test mocks instead of list<int>
1 parent 2dad214 commit 78a1eb3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+653
-441
lines changed

codegen/end_to_end_test/lib/fragments/__generated__/hero_with_interface_subtyped_fragments.data.gql.dart

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test/lib/graphql/__generated__/schema.schema.gql.dart

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test/lib/graphql/__generated__/serializers.gql.dart

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test/lib/interfaces/__generated__/hero_for_episode.data.gql.dart

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test/pubspec.yaml

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ dependencies:
99
built_collection: ^5.0.0
1010
built_value: ^8.0.6
1111
gql_exec: ^1.0.0
12-
gql_build: ^0.8.0
13-
gql_code_builder: ^0.7.1
12+
gql_code_builder_serializers: ^0.1.0
1413
dev_dependencies:
1514
build: ^2.0.0
1615
build_runner: ^2.0.0
1716
test: ^1.16.8
17+
gql_code_builder: ^0.7.1
18+
gql_build: ^0.8.0

codegen/end_to_end_test_tristate/lib/fragments/__generated__/hero_with_interface_subtyped_fragments.data.gql.dart

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test_tristate/lib/graphql/__generated__/schema.schema.gql.dart

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test_tristate/lib/graphql/__generated__/serializers.gql.dart

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test_tristate/lib/interfaces/__generated__/hero_for_episode.data.gql.dart

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test_tristate/pubspec.yaml

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ dependencies:
99
built_collection: ^5.0.0
1010
built_value: ^8.0.6
1111
gql_exec: ^1.0.0
12-
gql_build: ^0.8.0
13-
gql_code_builder: ^0.7.1
12+
gql_code_builder_serializers: ^0.1.0
1413
dev_dependencies:
1514
build: ^2.0.0
1615
build_runner: ^2.0.0
1716
test: ^1.16.8
1817
gql_tristate_value: ^1.0.0
18+
gql_build: ^0.8.0
19+
gql_code_builder: ^0.7.1

codegen/gql_build/lib/src/serializer_builder.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class SerializerBuilder implements Builder {
9393
// GraphQL Operation serializer
9494
refer(
9595
"OperationSerializer",
96-
"package:gql_code_builder/src/serializers/operation_serializer.dart",
96+
"package:gql_code_builder_serializers/gql_code_builder_serializers.dart",
9797
).call([]),
9898
// User-defined custom serializers
9999
...customSerializers.map((ref) => ref.call([])),

codegen/gql_build/pubspec.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ dependencies:
1414
dart_style: ^2.2.4
1515
glob: ^2.0.0
1616
gql: ^1.0.0
17-
gql_code_builder: ^0.10.0
17+
gql_code_builder: ^0.11.0
18+
gql_code_builder_serializers: ^0.1.0
1819
path: ^1.8.0
1920
yaml: ^3.1.0
2021
gql_tristate_value: ^1.0.0

codegen/gql_code_builder/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 0.12.0
2+
3+
- Moving built-in Serializers to gql_code_builder_serializers package, so
4+
so don't have to depend on gql_code_builder in dependencies, and can keep
5+
it as dev-dependency (#456)
6+
17
## 0.11.0
28

39
- Adding option to create factory initializers with required parameters also for inputs (#585)

codegen/gql_code_builder/lib/src/inline_fragment_classes.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ List<Method> _inlineFragmentRootSerializationMethods({
131131
..body = TypeReference((b) => b
132132
..symbol = "InlineFragmentSerializer"
133133
..url =
134-
"package:gql_code_builder/src/serializers/inline_fragment_serializer.dart"
134+
"package:gql_code_builder_serializers/gql_code_builder_serializers.dart"
135135
..types.add(refer(name))).call([
136136
literalString(name),
137137
refer("${name}__base"),

codegen/gql_code_builder/lib/src/schema/scalar.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ ListBuilder<Method> _buildMethods(
9797
..body = TypeReference((b) => b
9898
..symbol = "DefaultScalarSerializer"
9999
..url =
100-
"package:gql_code_builder/src/serializers/default_scalar_serializer.dart"
100+
"package:gql_code_builder_serializers/gql_code_builder_serializers.dart"
101101
..types.add(refer(scalarName))).call([
102102
Method(
103103
(b) => b
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,7 @@
1-
import "package:built_value/serializer.dart";
2-
3-
class DefaultScalarSerializer<T> implements PrimitiveSerializer<T> {
4-
final T Function(Object serialized) _deserialize;
5-
6-
DefaultScalarSerializer(this._deserialize);
7-
8-
@override
9-
final types = <Type>[T];
10-
@override
11-
final wireName = T.toString();
12-
13-
@override
14-
Object serialize(Serializers serializers, T scalar,
15-
{FullType specifiedType = FullType.unspecified}) =>
16-
(scalar as dynamic).value as Object;
17-
18-
@override
19-
T deserialize(Serializers serializers, Object serialized,
20-
{FullType specifiedType = FullType.unspecified}) =>
21-
_deserialize(serialized);
22-
}
1+
// serializers have been implemented in this files originally,
2+
// but moved to a separate package later to avoid
3+
// direct dependencies on gql_code_builder in application code.
4+
// This file is kept for backwards compatibility and should be removed in
5+
// the next major version of gql_code_builder.
6+
export "package:gql_code_builder_serializers/gql_code_builder_serializers.dart"
7+
show DefaultScalarSerializer;
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,7 @@
1-
import "package:built_value/serializer.dart";
2-
import "package:built_value/standard_json_plugin.dart";
3-
4-
/// Deserializes a GraphQL selection with inline fragments into it's
5-
/// appropriate concrete data class based on its `__typename` field.
6-
///
7-
/// If no `__typename` is found, it will simply return a base data class that
8-
/// only includes the common fields.
9-
class InlineFragmentSerializer<T> implements StructuredSerializer<T> {
10-
final String rootName;
11-
final Type baseClass;
12-
final Map<String, Type> asTypeClasses;
13-
14-
InlineFragmentSerializer(
15-
this.rootName,
16-
this.baseClass,
17-
this.asTypeClasses,
18-
);
19-
20-
Type _typeForTypename(String name) => asTypeClasses[name] ?? baseClass;
21-
22-
@override
23-
T deserialize(
24-
Serializers serializers,
25-
Iterable serialized, {
26-
FullType specifiedType = FullType.unspecified,
27-
}) {
28-
try {
29-
// Get JSON representation of object
30-
final json = StandardJsonPlugin()
31-
.afterSerialize(serialized, specifiedType) as Map<String, dynamic>;
32-
final typeName = (json["__typename"] ?? "") as String;
33-
final type = _typeForTypename(typeName);
34-
final serializer =
35-
serializers.serializerForType(type) as StructuredSerializer;
36-
return serializer.deserialize(serializers, serialized,
37-
specifiedType: specifiedType) as T;
38-
} catch (e) {
39-
rethrow;
40-
}
41-
}
42-
43-
@override
44-
Iterable<Object?> serialize(
45-
Serializers serializers,
46-
T object, {
47-
FullType specifiedType = FullType.unspecified,
48-
}) {
49-
try {
50-
final typeName = (object as dynamic).G__typename as String;
51-
final type = _typeForTypename(typeName);
52-
final serializer =
53-
serializers.serializerForType(type) as StructuredSerializer;
54-
return serializer.serialize(serializers, object,
55-
specifiedType: specifiedType);
56-
} catch (e) {
57-
rethrow;
58-
}
59-
}
60-
61-
@override
62-
Iterable<Type> get types => [T];
63-
64-
@override
65-
String get wireName => rootName;
66-
}
1+
// serializers have been implemented in this files originally,
2+
// but moved to a separate package later to avoid
3+
// direct dependencies on gql_code_builder in application code.
4+
// This file is kept for backwards compatibility and should be removed in
5+
// the next major version of gql_code_builder.
6+
export "package:gql_code_builder_serializers/gql_code_builder_serializers.dart"
7+
show InlineFragmentSerializer;
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,7 @@
1-
import "package:built_value/serializer.dart";
2-
import "package:built_value/standard_json_plugin.dart";
3-
4-
/// A serializer which can be implemented to easily build a Json Serializer
5-
abstract class JsonSerializer<T> implements StructuredSerializer<T> {
6-
final _jsonPlugin = StandardJsonPlugin();
7-
8-
T fromJson(Map<String, dynamic> json);
9-
10-
Map<String, dynamic> toJson(T object);
11-
12-
@override
13-
T deserialize(
14-
Serializers serializers,
15-
Iterable serialized, {
16-
FullType specifiedType = FullType.unspecified,
17-
}) {
18-
final json = _jsonPlugin.afterSerialize(serialized, specifiedType)
19-
as Map<String, dynamic>;
20-
return fromJson(json);
21-
}
22-
23-
@override
24-
Iterable<Object?> serialize(
25-
Serializers serializers,
26-
T object, {
27-
FullType specifiedType = FullType.unspecified,
28-
}) {
29-
final json = toJson(object);
30-
final serialized = _jsonPlugin.beforeDeserialize(json, FullType(T));
31-
return serialized is Iterable ? serialized : [serialized];
32-
}
33-
34-
@override
35-
Iterable<Type> get types => [T];
36-
37-
@override
38-
String get wireName => T.toString();
39-
}
1+
// serializers have been implemented in this files originally,
2+
// but moved to a separate package later to avoid
3+
// direct dependencies on gql_code_builder in application code.
4+
// This file is kept for backwards compatibility and should be removed in
5+
// the next major version of gql_code_builder.
6+
export "package:gql_code_builder_serializers/gql_code_builder_serializers.dart"
7+
show JsonSerializer;
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,7 @@
1-
import "package:gql/language.dart";
2-
import "package:gql_exec/gql_exec.dart";
3-
4-
import "./json_serializer.dart";
5-
6-
class OperationSerializer extends JsonSerializer<Operation> {
7-
@override
8-
Operation fromJson(Map<String, dynamic> json) => Operation(
9-
document: parseString(json["document"] as String),
10-
operationName: json["operationName"] as String?,
11-
);
12-
13-
@override
14-
Map<String, dynamic> toJson(Operation operation) => <String, dynamic>{
15-
"document": printNode(operation.document),
16-
if (operation.operationName != null)
17-
"operationName": operation.operationName,
18-
};
19-
}
1+
// serializers have been implemented in this files originally,
2+
// but moved to a separate package later to avoid
3+
// direct dependencies on gql_code_builder in application code.
4+
// This file is kept for backwards compatibility and should be removed in
5+
// the next major version of gql_code_builder.
6+
export "package:gql_code_builder_serializers/gql_code_builder_serializers.dart"
7+
show OperationSerializer;

codegen/gql_code_builder/pubspec.yaml

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: gql_code_builder
2-
version: 0.11.0
2+
version: 0.12.0
33
description: Dart code builders taking *.graphql documents and SDL to build useful classes.
44
repository: https://github.com/gql-dart/gql
55
environment:
@@ -14,6 +14,7 @@ dependencies:
1414
gql_exec: ^1.0.0
1515
path: ^1.8.0
1616
gql_tristate_value: ^1.0.0
17+
gql_code_builder_serializers: ^0.1.0
1718
dev_dependencies:
1819
build_runner: ^2.1.0
1920
gql_pedantic: ^1.0.2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# https://dart.dev/guides/libraries/private-files
2+
# Created by `dart pub`
3+
.dart_tool/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
## 0.1.0
2+
3+
- Initial version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2018-present, GQL Dart
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# gql_code_builder_serializers
2+
3+
Common Serializers for `gql_code_builder`.
4+
This package should be added as a dependency for packages
5+
that generate code using `gql_code_builder`.
6+

0 commit comments

Comments
 (0)