Skip to content

Commit bfafca5

Browse files
authored
chore(vars-create-input): Adding Create Factories to Input types (#451)
* chore(vars-generator): Applying vars generation to input types * Adding codegen artifacts to e2e tests * Adding codegen artifacts to e2e tristate * Adding Unit Test
1 parent 44c3686 commit bfafca5

File tree

10 files changed

+134
-10
lines changed

10 files changed

+134
-10
lines changed

codegen/end_to_end_test/build.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ targets:
2525
gql_build|schema_builder:
2626
enabled: true
2727
options:
28+
vars_create_factories: true
2829
enum_fallbacks:
2930
LengthUnit: METER
3031
type_overrides:

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

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

codegen/end_to_end_test/test/schema/input_test.dart

+7
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@ void main() {
1313
..favorite_color.red = 225);
1414
});
1515

16+
test('can be instantiated via create factory', () {
17+
GReviewInput.create(
18+
stars: 4,
19+
commentary: "This was a great movie!",
20+
favorite_color: GColorInput.create(red: 255, green: 123, blue: 225));
21+
});
22+
1623
test('can be serialized and deserialized', () {
1724
final input = GReviewInput((b) => b
1825
..stars = 4

codegen/end_to_end_test_tristate/build.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ targets:
2525
gql_build|schema_builder:
2626
enabled: true
2727
options:
28+
vars_create_factories: true
2829
tristate_optionals: true
2930
enum_fallbacks:
3031
LengthUnit: METER

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

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

codegen/gql_build/lib/gql_build.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ Builder schemaBuilder(
5858
typeOverrideMap(options.config["type_overrides"]),
5959
enumFallbackConfig(options.config),
6060
generatePossibleTypesConfig(options.config),
61-
triStateOptionalsConfig(options.config));
61+
triStateOptionalsConfig(options.config),
62+
varsCreateFactoriesConfig(options.config));
6263

6364
/// Builds an aggregate Serlializers object for [built_value]s
6465
///

codegen/gql_build/lib/src/schema_builder.dart

+8-2
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,14 @@ class SchemaBuilder implements Builder {
1515
final EnumFallbackConfig enumFallbackConfig;
1616
final bool generatePossibleTypesMap;
1717
final TriStateValueConfig triStateValueConfig;
18+
final bool generateVarsCreateFactories;
1819

19-
SchemaBuilder(this.typeOverrides, this.enumFallbackConfig,
20-
this.generatePossibleTypesMap, this.triStateValueConfig);
20+
SchemaBuilder(
21+
this.typeOverrides,
22+
this.enumFallbackConfig,
23+
this.generatePossibleTypesMap,
24+
this.triStateValueConfig,
25+
this.generateVarsCreateFactories);
2126

2227
@override
2328
Map<String, List<String>> get buildExtensions => {
@@ -49,6 +54,7 @@ class SchemaBuilder implements Builder {
4954
generatePossibleTypesMap: generatePossibleTypesMap,
5055
allocator: allocator,
5156
triStateValueConfig: triStateValueConfig,
57+
generateVarsCreateFactories: generateVarsCreateFactories,
5258
);
5359

5460
return writeDocument(

codegen/gql_code_builder/lib/schema.dart

+9-3
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@ Library buildSchemaLibrary(SourceNode schemaSource, String partUrl,
1313
Map<String, Reference> typeOverrides, EnumFallbackConfig enumFallbackConfig,
1414
{bool generatePossibleTypesMap = false,
1515
Allocator? allocator,
16-
TriStateValueConfig triStateValueConfig = TriStateValueConfig.never}) {
17-
final lib = buildSchema(schemaSource, typeOverrides, enumFallbackConfig,
18-
allocator ?? Allocator(), triStateValueConfig) as Library;
16+
TriStateValueConfig triStateValueConfig = TriStateValueConfig.never,
17+
bool generateVarsCreateFactories = false}) {
18+
final lib = buildSchema(
19+
schemaSource,
20+
typeOverrides,
21+
enumFallbackConfig,
22+
allocator ?? Allocator(),
23+
triStateValueConfig,
24+
generateVarsCreateFactories) as Library;
1925

2026
final Code? possibleTypes;
2127
if (generatePossibleTypesMap && lib.body.isNotEmpty) {

codegen/gql_code_builder/lib/src/schema.dart

+13-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Spec? buildSchema(
1515
EnumFallbackConfig enumFallbackConfig,
1616
Allocator allocator,
1717
TriStateValueConfig triStateValueConfig,
18+
bool generateVarsCreateFactories,
1819
) =>
1920
schemaSource.document
2021
.accept(
@@ -24,6 +25,7 @@ Spec? buildSchema(
2425
enumFallbackConfig,
2526
allocator,
2627
triStateValueConfig,
28+
generateVarsCreateFactories,
2729
),
2830
)
2931
?.first;
@@ -36,8 +38,15 @@ class _SchemaBuilderVisitor extends SimpleVisitor<List<Spec>?> {
3638
final Allocator allocator;
3739
final TriStateValueConfig triStateValueConfig;
3840

39-
const _SchemaBuilderVisitor(this.schemaSource, this.typeOverrides,
40-
this.enumFallbackConfig, this.allocator, this.triStateValueConfig);
41+
final bool generateVarsCreateFactories;
42+
43+
const _SchemaBuilderVisitor(
44+
this.schemaSource,
45+
this.typeOverrides,
46+
this.enumFallbackConfig,
47+
this.allocator,
48+
this.triStateValueConfig,
49+
this.generateVarsCreateFactories);
4150

4251
@override
4352
List<Spec> visitDocumentNode(
@@ -57,8 +66,8 @@ class _SchemaBuilderVisitor extends SimpleVisitor<List<Spec>?> {
5766
List<Spec> visitInputObjectTypeDefinitionNode(
5867
InputObjectTypeDefinitionNode node,
5968
) {
60-
final inputClass =
61-
buildInputClass(node, schemaSource, typeOverrides, triStateValueConfig);
69+
final inputClass = buildInputClass(node, schemaSource, typeOverrides,
70+
triStateValueConfig, generateVarsCreateFactories);
6271

6372
return switch (triStateValueConfig) {
6473
TriStateValueConfig.never => [inputClass],

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

+21
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import "package:code_builder/code_builder.dart";
22
import "package:gql/ast.dart";
33
import "package:gql_code_builder/src/config/tristate_optionals_config.dart";
4+
import "package:gql_code_builder/src/required_vars_constructor.dart";
45
import "package:gql_code_builder/src/tristate_optionals.dart";
56

67
import "../../source.dart";
@@ -12,6 +13,7 @@ List<Class> buildInputClasses(
1213
Map<String, Reference> typeOverrides,
1314
Allocator allocator,
1415
TriStateValueConfig triStateValueConfig,
16+
bool generateVarsCreateFactories,
1517
) =>
1618
schemaSource.document.definitions
1719
.whereType<InputObjectTypeDefinitionNode>()
@@ -21,6 +23,7 @@ List<Class> buildInputClasses(
2123
schemaSource,
2224
typeOverrides,
2325
triStateValueConfig,
26+
generateVarsCreateFactories,
2427
);
2528
final serializer = nullAwareJsonSerializerClass(
2629
inputClass, allocator, schemaSource, typeOverrides);
@@ -32,6 +35,7 @@ Class buildInputClass(
3235
SourceNode schemaSource,
3336
Map<String, Reference> typeOverrides,
3437
TriStateValueConfig triStateValueConfig,
38+
bool generateVarsCreateFactories,
3539
) =>
3640
builtClass(
3741
name: node.name.value,
@@ -46,6 +50,23 @@ Class buildInputClass(
4650
),
4751
hasCustomSerializer:
4852
triStateValueConfig == TriStateValueConfig.onAllNullableFields,
53+
constructors: [
54+
if (generateVarsCreateFactories)
55+
builtCreateConstructor(
56+
name: node.name.value,
57+
getters: node.fields.map<Method>(
58+
(node) => buildOptionalGetter(
59+
nameNode: node.name,
60+
typeNode: node.type,
61+
schemaSource: schemaSource,
62+
typeOverrides: typeOverrides,
63+
useTriStateValueForNullableTypes: triStateValueConfig,
64+
),
65+
),
66+
schemaSource: schemaSource,
67+
typeOverrides: typeOverrides,
68+
),
69+
],
4970
initializers: {
5071
if (triStateValueConfig == TriStateValueConfig.onAllNullableFields)
5172
..._inputClassValueInitializers(node)

0 commit comments

Comments
 (0)