@aws-amplify/graphql-model-transformer 0.7.0-graphql-vnext-dev-preview.2 → 0.8.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,11 @@
1
- import { InvalidDirectiveError, MappingTemplate, SyncConfig, SyncUtils, TransformerModelBase } from '@aws-amplify/graphql-transformer-core';
1
+ import {
2
+ DirectiveWrapper,
3
+ InvalidDirectiveError,
4
+ MappingTemplate,
5
+ SyncConfig,
6
+ SyncUtils,
7
+ TransformerModelBase,
8
+ } from '@aws-amplify/graphql-transformer-core';
2
9
  import {
3
10
  AppSyncDataSourceType,
4
11
  DataSourceInstance,
@@ -37,6 +44,7 @@ import {
37
44
  makeValueNode,
38
45
  ModelResourceIDs,
39
46
  plurality,
47
+ ResolverResourceIDs,
40
48
  ResourceConstants,
41
49
  SyncResourceIDs,
42
50
  toCamelCase,
@@ -71,12 +79,7 @@ import {
71
79
  generateListRequestTemplate,
72
80
  generateSyncRequestTemplate,
73
81
  } from './resolvers/query';
74
- import {
75
- DirectiveWrapper,
76
- FieldWrapper,
77
- InputObjectDefinitionWrapper,
78
- ObjectDefinitionWrapper,
79
- } from './wrappers/object-definition-wrapper';
82
+ import { FieldWrapper, InputObjectDefinitionWrapper, ObjectDefinitionWrapper } from './wrappers/object-definition-wrapper';
80
83
  import { CfnRole } from '@aws-cdk/aws-iam';
81
84
  import md5 from 'md5';
82
85
 
@@ -241,8 +244,6 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
241
244
  this.addAutoGeneratableFields(ctx, type);
242
245
 
243
246
  if (ctx.isProjectUsingDataStore()) {
244
- SyncUtils.validateResolverConfigForType(ctx, def!.name.value);
245
- this.options.SyncConfig = SyncUtils.getSyncConfig(ctx, def!.name.value);
246
247
  this.addModelSyncFields(ctx, type);
247
248
  }
248
249
  }
@@ -262,13 +263,13 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
262
263
  let resolver;
263
264
  switch (query.type) {
264
265
  case QueryFieldType.GET:
265
- resolver = this.generateGetResolver(context, def!, query.typeName, query.fieldName);
266
+ resolver = this.generateGetResolver(context, def!, query.typeName, query.fieldName, query.resolverLogicalId);
266
267
  break;
267
268
  case QueryFieldType.LIST:
268
- resolver = this.generateListResolver(context, def!, query.typeName, query.fieldName);
269
+ resolver = this.generateListResolver(context, def!, query.typeName, query.fieldName, query.resolverLogicalId);
269
270
  break;
270
271
  case QueryFieldType.SYNC:
271
- resolver = this.generateSyncResolver(context, def!, query.typeName, query.fieldName);
272
+ resolver = this.generateSyncResolver(context, def!, query.typeName, query.fieldName, query.resolverLogicalId);
272
273
  break;
273
274
  default:
274
275
  throw new Error('Unknown query field type');
@@ -289,13 +290,13 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
289
290
  let resolver;
290
291
  switch (mutation.type) {
291
292
  case MutationFieldType.CREATE:
292
- resolver = this.generateCreateResolver(context, def!, mutation.typeName, mutation.fieldName);
293
+ resolver = this.generateCreateResolver(context, def!, mutation.typeName, mutation.fieldName, mutation.resolverLogicalId);
293
294
  break;
294
295
  case MutationFieldType.DELETE:
295
- resolver = this.generateDeleteResolver(context, def!, mutation.typeName, mutation.fieldName);
296
+ resolver = this.generateDeleteResolver(context, def!, mutation.typeName, mutation.fieldName, mutation.resolverLogicalId);
296
297
  break;
297
298
  case MutationFieldType.UPDATE:
298
- resolver = this.generateUpdateResolver(context, def!, mutation.typeName, mutation.fieldName);
299
+ resolver = this.generateUpdateResolver(context, def!, mutation.typeName, mutation.fieldName, mutation.resolverLogicalId);
299
300
  break;
300
301
  default:
301
302
  throw new Error('Unknown mutation field type');
@@ -319,13 +320,31 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
319
320
  let resolver;
320
321
  switch (subscription.type) {
321
322
  case SubscriptionFieldType.ON_CREATE:
322
- resolver = this.generateOnCreateResolver(context, def, subscription.typeName, subscription.fieldName);
323
+ resolver = this.generateOnCreateResolver(
324
+ context,
325
+ def,
326
+ subscription.typeName,
327
+ subscription.fieldName,
328
+ subscription.resolverLogicalId,
329
+ );
323
330
  break;
324
331
  case SubscriptionFieldType.ON_UPDATE:
325
- resolver = this.generateOnUpdateResolver(context, def, subscription.typeName, subscription.fieldName);
332
+ resolver = this.generateOnUpdateResolver(
333
+ context,
334
+ def,
335
+ subscription.typeName,
336
+ subscription.fieldName,
337
+ subscription.resolverLogicalId,
338
+ );
326
339
  break;
327
340
  case SubscriptionFieldType.ON_DELETE:
328
- resolver = this.generateOnDeleteResolver(context, def, subscription.typeName, subscription.fieldName);
341
+ resolver = this.generateOnDeleteResolver(
342
+ context,
343
+ def,
344
+ subscription.typeName,
345
+ subscription.fieldName,
346
+ subscription.resolverLogicalId,
347
+ );
329
348
  break;
330
349
  default:
331
350
  throw new Error('Unknown subscription field type');
@@ -349,6 +368,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
349
368
  type: ObjectTypeDefinitionNode,
350
369
  typeName: string,
351
370
  fieldName: string,
371
+ resolverLogicalId: string,
352
372
  ): TransformerResolverProvider => {
353
373
  const isSyncEnabled = ctx.isProjectUsingDataStore();
354
374
  const dataSource = this.datasourceMap[type.name.value];
@@ -357,6 +377,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
357
377
  this.resolverMap[resolverKey] = ctx.resolvers.generateQueryResolver(
358
378
  typeName,
359
379
  fieldName,
380
+ resolverLogicalId,
360
381
  dataSource,
361
382
  MappingTemplate.s3MappingTemplateFromString(generateGetRequestTemplate(), `${typeName}.${fieldName}.req.vtl`),
362
383
  MappingTemplate.s3MappingTemplateFromString(generateGetResponseTemplate(isSyncEnabled), `${typeName}.${fieldName}.res.vtl`),
@@ -370,6 +391,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
370
391
  type: ObjectTypeDefinitionNode,
371
392
  typeName: string,
372
393
  fieldName: string,
394
+ resolverLogicalId: string,
373
395
  ): TransformerResolverProvider => {
374
396
  const isSyncEnabled = ctx.isProjectUsingDataStore();
375
397
  const dataSource = this.datasourceMap[type.name.value];
@@ -378,6 +400,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
378
400
  this.resolverMap[resolverKey] = ctx.resolvers.generateQueryResolver(
379
401
  typeName,
380
402
  fieldName,
403
+ resolverLogicalId,
381
404
  dataSource,
382
405
  MappingTemplate.s3MappingTemplateFromString(generateListRequestTemplate(), `${typeName}.${fieldName}.req.vtl`),
383
406
  MappingTemplate.s3MappingTemplateFromString(
@@ -394,6 +417,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
394
417
  type: ObjectTypeDefinitionNode,
395
418
  typeName: string,
396
419
  fieldName: string,
420
+ resolverLogicalId: string,
397
421
  ): TransformerResolverProvider => {
398
422
  const isSyncEnabled = ctx.isProjectUsingDataStore();
399
423
  const dataSource = this.datasourceMap[type.name.value];
@@ -402,6 +426,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
402
426
  const resolver = ctx.resolvers.generateMutationResolver(
403
427
  typeName,
404
428
  fieldName,
429
+ resolverLogicalId,
405
430
  dataSource,
406
431
  MappingTemplate.s3MappingTemplateFromString(
407
432
  generateUpdateRequestTemplate(typeName, isSyncEnabled),
@@ -429,6 +454,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
429
454
  type: ObjectTypeDefinitionNode,
430
455
  typeName: string,
431
456
  fieldName: string,
457
+ resolverLogicalId: string,
432
458
  ): TransformerResolverProvider => {
433
459
  const isSyncEnabled = ctx.isProjectUsingDataStore();
434
460
  const dataSource = this.datasourceMap[type.name.value];
@@ -437,6 +463,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
437
463
  this.resolverMap[resolverKey] = ctx.resolvers.generateMutationResolver(
438
464
  typeName,
439
465
  fieldName,
466
+ resolverLogicalId,
440
467
  dataSource,
441
468
  MappingTemplate.s3MappingTemplateFromString(generateDeleteRequestTemplate(isSyncEnabled), `${typeName}.${fieldName}.req.vtl`),
442
469
  MappingTemplate.s3MappingTemplateFromString(
@@ -453,12 +480,14 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
453
480
  type: ObjectTypeDefinitionNode,
454
481
  typeName: string,
455
482
  fieldName: string,
483
+ resolverLogicalId: string,
456
484
  ): TransformerResolverProvider => {
457
485
  const resolverKey = `OnCreate${generateResolverKey(typeName, fieldName)}`;
458
486
  if (!this.resolverMap[resolverKey]) {
459
487
  this.resolverMap[resolverKey] = ctx.resolvers.generateSubscriptionResolver(
460
488
  typeName,
461
489
  fieldName,
490
+ resolverLogicalId,
462
491
  MappingTemplate.s3MappingTemplateFromString(generateSubscriptionRequestTemplate(), `${typeName}.${fieldName}.req.vtl`),
463
492
  MappingTemplate.s3MappingTemplateFromString(generateSubscriptionResponseTemplate(), `${typeName}.${fieldName}.res.vtl`),
464
493
  );
@@ -470,12 +499,14 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
470
499
  type: ObjectTypeDefinitionNode,
471
500
  typeName: string,
472
501
  fieldName: string,
502
+ resolverLogicalId: string,
473
503
  ): TransformerResolverProvider => {
474
504
  const resolverKey = `OnUpdate${generateResolverKey(typeName, fieldName)}`;
475
505
  if (!this.resolverMap[resolverKey]) {
476
506
  this.resolverMap[resolverKey] = ctx.resolvers.generateSubscriptionResolver(
477
507
  typeName,
478
508
  fieldName,
509
+ resolverLogicalId,
479
510
  MappingTemplate.s3MappingTemplateFromString(generateSubscriptionRequestTemplate(), `${typeName}.${fieldName}.req.vtl`),
480
511
  MappingTemplate.s3MappingTemplateFromString(generateSubscriptionResponseTemplate(), `${typeName}.${fieldName}.res.vtl`),
481
512
  );
@@ -487,12 +518,14 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
487
518
  type: ObjectTypeDefinitionNode,
488
519
  typeName: string,
489
520
  fieldName: string,
521
+ resolverLogicalId: string,
490
522
  ): TransformerResolverProvider => {
491
523
  const resolverKey = `OnDelete${generateResolverKey(typeName, fieldName)}`;
492
524
  if (!this.resolverMap[resolverKey]) {
493
525
  this.resolverMap[resolverKey] = ctx.resolvers.generateSubscriptionResolver(
494
526
  typeName,
495
527
  fieldName,
528
+ resolverLogicalId,
496
529
  MappingTemplate.s3MappingTemplateFromString(generateSubscriptionRequestTemplate(), `${typeName}.${fieldName}.req.vtl`),
497
530
  MappingTemplate.s3MappingTemplateFromString(generateSubscriptionResponseTemplate(), `${typeName}.${fieldName}.res.vtl`),
498
531
  );
@@ -504,6 +537,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
504
537
  type: ObjectTypeDefinitionNode,
505
538
  typeName: string,
506
539
  fieldName: string,
540
+ resolverLogicalId: string,
507
541
  ): TransformerResolverProvider => {
508
542
  const isSyncEnabled = ctx.isProjectUsingDataStore();
509
543
  const dataSource = this.datasourceMap[type.name.value];
@@ -512,6 +546,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
512
546
  this.resolverMap[resolverKey] = ctx.resolvers.generateQueryResolver(
513
547
  typeName,
514
548
  fieldName,
549
+ resolverLogicalId,
515
550
  dataSource,
516
551
  MappingTemplate.s3MappingTemplateFromString(generateSyncRequestTemplate(), `${typeName}.${fieldName}.req.vtl`),
517
552
  MappingTemplate.s3MappingTemplateFromString(
@@ -526,15 +561,16 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
526
561
  getQueryFieldNames = (
527
562
  ctx: TransformerTransformSchemaStepContextProvider,
528
563
  type: ObjectTypeDefinitionNode,
529
- ): Set<{ fieldName: string; typeName: string; type: QueryFieldType }> => {
564
+ ): Set<{ fieldName: string; typeName: string; type: QueryFieldType; resolverLogicalId: string }> => {
530
565
  const typeName = type.name.value;
531
- const fields: Set<{ fieldName: string; typeName: string; type: QueryFieldType }> = new Set();
566
+ const fields: Set<{ fieldName: string; typeName: string; type: QueryFieldType; resolverLogicalId: string }> = new Set();
532
567
  const modelDirectiveConfig = this.modelDirectiveConfig.get(type.name.value);
533
568
  if (modelDirectiveConfig?.queries?.get) {
534
569
  fields.add({
535
570
  typeName: 'Query',
536
571
  fieldName: modelDirectiveConfig.queries.get || toCamelCase(['get', typeName]),
537
572
  type: QueryFieldType.GET,
573
+ resolverLogicalId: ResolverResourceIDs.DynamoDBGetResolverResourceID(typeName),
538
574
  });
539
575
  }
540
576
 
@@ -543,6 +579,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
543
579
  typeName: 'Query',
544
580
  fieldName: modelDirectiveConfig.queries.list || toCamelCase(['list', typeName]),
545
581
  type: QueryFieldType.LIST,
582
+ resolverLogicalId: ResolverResourceIDs.DynamoDBListResolverResourceID(typeName),
546
583
  });
547
584
  }
548
585
 
@@ -551,6 +588,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
551
588
  typeName: 'Query',
552
589
  fieldName: modelDirectiveConfig.queries.sync || toCamelCase(['sync', typeName]),
553
590
  type: QueryFieldType.SYNC,
591
+ resolverLogicalId: ResolverResourceIDs.SyncResolverResourceID(typeName),
554
592
  });
555
593
  }
556
594
 
@@ -560,7 +598,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
560
598
  getMutationFieldNames = (
561
599
  ctx: TransformerTransformSchemaStepContextProvider,
562
600
  type: ObjectTypeDefinitionNode,
563
- ): Set<{ fieldName: string; typeName: string; type: MutationFieldType }> => {
601
+ ): Set<{ fieldName: string; typeName: string; type: MutationFieldType; resolverLogicalId: string }> => {
564
602
  // Todo: get fields names from the directives
565
603
  const typeName = type.name.value;
566
604
  const modelDirectiveConfig = this.modelDirectiveConfig.get(typeName);
@@ -577,13 +615,27 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
577
615
  }
578
616
  };
579
617
 
580
- const fieldNames: Set<{ fieldName: string; typeName: string; type: MutationFieldType }> = new Set();
618
+ const getMutationResolverLogicalId = (type: string): string => {
619
+ switch (type) {
620
+ case 'create':
621
+ return ResolverResourceIDs.DynamoDBCreateResolverResourceID(typeName);
622
+ case 'update':
623
+ return ResolverResourceIDs.DynamoDBUpdateResolverResourceID(typeName);
624
+ case 'delete':
625
+ return ResolverResourceIDs.DynamoDBDeleteResolverResourceID(typeName);
626
+ default:
627
+ throw new Error('Unknown mutation type');
628
+ }
629
+ };
630
+
631
+ const fieldNames: Set<{ fieldName: string; typeName: string; type: MutationFieldType; resolverLogicalId: string }> = new Set();
581
632
  for (let [mutationType, mutationName] of Object.entries(modelDirectiveConfig?.mutations || {})) {
582
633
  if (mutationName) {
583
634
  fieldNames.add({
584
635
  typeName: 'Mutation',
585
636
  fieldName: mutationName,
586
637
  type: getMutationType(mutationType),
638
+ resolverLogicalId: getMutationResolverLogicalId(mutationType),
587
639
  });
588
640
  }
589
641
  }
@@ -597,6 +649,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
597
649
  fieldName: string;
598
650
  typeName: string;
599
651
  type: MutationFieldType;
652
+ resolverLogicalId: string;
600
653
  }>,
601
654
  ): string => {
602
655
  const mutationToSubscriptionTypeMap = {
@@ -682,11 +735,13 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
682
735
  fieldName: string;
683
736
  typeName: string;
684
737
  type: SubscriptionFieldType;
738
+ resolverLogicalId: string;
685
739
  }> => {
686
740
  const fields: Set<{
687
741
  fieldName: string;
688
742
  typeName: string;
689
743
  type: SubscriptionFieldType;
744
+ resolverLogicalId: string;
690
745
  }> = new Set();
691
746
 
692
747
  const modelDirectiveConfig = this.modelDirectiveConfig.get(type.name.value);
@@ -697,6 +752,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
697
752
  typeName: 'Subscription',
698
753
  fieldName: fieldName,
699
754
  type: SubscriptionFieldType.ON_CREATE,
755
+ resolverLogicalId: ModelResourceIDs.ModelOnCreateSubscriptionName(type.name.value),
700
756
  });
701
757
  }
702
758
  }
@@ -707,6 +763,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
707
763
  typeName: 'Subscription',
708
764
  fieldName: fieldName,
709
765
  type: SubscriptionFieldType.ON_UPDATE,
766
+ resolverLogicalId: ModelResourceIDs.ModelOnUpdateSubscriptionName(type.name.value),
710
767
  });
711
768
  }
712
769
  }
@@ -717,6 +774,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
717
774
  typeName: 'Subscription',
718
775
  fieldName: fieldName,
719
776
  type: SubscriptionFieldType.ON_DELETE,
777
+ resolverLogicalId: ModelResourceIDs.ModelOnDeleteSubscriptionName(type.name.value),
720
778
  });
721
779
  }
722
780
  }
@@ -739,6 +797,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
739
797
  type: ObjectTypeDefinitionNode,
740
798
  typeName: string,
741
799
  fieldName: string,
800
+ resolverLogicalId: string,
742
801
  ): TransformerResolverProvider => {
743
802
  const isSyncEnabled = ctx.isProjectUsingDataStore();
744
803
  const dataSource = this.datasourceMap[type.name.value];
@@ -747,6 +806,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
747
806
  const resolver = ctx.resolvers.generateMutationResolver(
748
807
  typeName,
749
808
  fieldName,
809
+ resolverLogicalId,
750
810
  dataSource,
751
811
  MappingTemplate.s3MappingTemplateFromString(generateCreateRequestTemplate(type.name.value), `${typeName}.${fieldName}.req.vtl`),
752
812
  MappingTemplate.s3MappingTemplateFromString(
@@ -1133,6 +1193,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
1133
1193
 
1134
1194
  const cfnDataSource = dataSource.node.defaultChild as CfnDataSource;
1135
1195
  cfnDataSource.addDependsOn(role.node.defaultChild as CfnRole);
1196
+ cfnDataSource.overrideLogicalId(datasourceRoleLogicalID);
1136
1197
 
1137
1198
  if (context.isProjectUsingDataStore()) {
1138
1199
  const datasourceDynamoDb = cfnDataSource.dynamoDbConfig as any;
@@ -1207,13 +1268,10 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
1207
1268
  }),
1208
1269
  );
1209
1270
 
1210
- if (this.options.SyncConfig && SyncUtils.isLambdaSyncConfig(this.options.SyncConfig)) {
1271
+ const syncConfig = SyncUtils.getSyncConfig(context, def!.name.value);
1272
+ if (syncConfig && SyncUtils.isLambdaSyncConfig(syncConfig)) {
1211
1273
  role.attachInlinePolicy(
1212
- SyncUtils.createSyncLambdaIAMPolicy(
1213
- stack,
1214
- this.options.SyncConfig.LambdaConflictHandler.name,
1215
- this.options.SyncConfig.LambdaConflictHandler.region,
1216
- ),
1274
+ SyncUtils.createSyncLambdaIAMPolicy(stack, syncConfig.LambdaConflictHandler.name, syncConfig.LambdaConflictHandler.region),
1217
1275
  );
1218
1276
  }
1219
1277
  return role;
@@ -45,9 +45,7 @@ export const makeUpdateInputField = (
45
45
  input.fields.forEach(f => f.makeNullable());
46
46
 
47
47
  // Add id field and make it optional
48
- if (!hasIdField) {
49
- input.addField(InputFieldWrapper.create('id', 'ID', false));
50
- } else {
48
+ if (hasIdField) {
51
49
  const idField = input.fields.find(f => f.name === 'id');
52
50
  if (idField) {
53
51
  idField.makeNonNullable();
@@ -127,7 +125,7 @@ export const makeCreateInputField = (
127
125
 
128
126
  // Add id field and make it optional
129
127
  if (!hasIdField) {
130
- input.addField(InputFieldWrapper.create('id', 'ID'));
128
+ input.addField(InputFieldWrapper.create('id', 'ID', true));
131
129
  } else {
132
130
  const idField = input.fields.find(f => f.name === 'id');
133
131
  if (idField) {
@@ -13,7 +13,7 @@ export const makeListQueryFilterInput = (
13
13
  export const makeListQueryModel = (type: ObjectTypeDefinitionNode, modelName: string, isSyncEnabled: boolean): ObjectTypeDefinitionNode => {
14
14
  const outputType = ObjectDefinitionWrapper.create(modelName);
15
15
 
16
- outputType.addField(FieldWrapper.create('items', type.name.value, true, true));
16
+ outputType.addField(FieldWrapper.create('items', type.name.value, false, true));
17
17
  outputType.addField(FieldWrapper.create('nextToken', 'String', true, false));
18
18
 
19
19
  if (isSyncEnabled) {
@@ -1,5 +1,5 @@
1
+ import { DirectiveWrapper } from '@aws-amplify/graphql-transformer-core';
1
2
  import {
2
- ArgumentNode,
3
3
  DirectiveNode,
4
4
  DocumentNode,
5
5
  EnumTypeDefinitionNode,
@@ -11,13 +11,10 @@ import {
11
11
  ListTypeNode,
12
12
  Location,
13
13
  NamedTypeNode,
14
- NameNode,
15
14
  NonNullTypeNode,
16
15
  ObjectTypeDefinitionNode,
17
16
  StringValueNode,
18
17
  TypeNode,
19
- valueFromASTUntyped,
20
- ValueNode,
21
18
  } from 'graphql';
22
19
  import {
23
20
  DEFAULT_SCALARS,
@@ -29,53 +26,6 @@ import {
29
26
  withNamedNodeNamed,
30
27
  } from 'graphql-transformer-common';
31
28
 
32
- // Todo: to be moved to core later. context.output.getObject would return wrapper type so its easier to manipulate
33
- // objects
34
-
35
- export class ArgumentWrapper {
36
- public readonly name: NameNode;
37
- public readonly value: ValueNode;
38
- constructor(argument: ArgumentNode) {
39
- this.name = argument.name;
40
- this.value = argument.value;
41
- }
42
- serialize = (): ArgumentNode => {
43
- return {
44
- kind: 'Argument',
45
- name: this.name,
46
- value: this.value,
47
- };
48
- };
49
- }
50
-
51
- export class DirectiveWrapper {
52
- private arguments: ArgumentWrapper[] = [];
53
- private name: NameNode;
54
- private location?: Location;
55
- constructor(node: DirectiveNode) {
56
- this.name = node.name;
57
- this.arguments = (node.arguments || []).map(arg => new ArgumentWrapper(arg));
58
- this.location = this.location;
59
- }
60
- public serialize = (): DirectiveNode => {
61
- return {
62
- kind: 'Directive',
63
- name: this.name,
64
- arguments: this.arguments.map(arg => arg.serialize()),
65
- };
66
- };
67
- public getArguments = <T>(defaultValue: Required<T>): Required<T> => {
68
- const argValues = this.arguments.reduce(
69
- (acc: Record<string, any>, arg: ArgumentWrapper) => ({
70
- ...acc,
71
- [arg.name.value]: valueFromASTUntyped(arg.value),
72
- }),
73
- {},
74
- );
75
- return Object.assign(defaultValue, argValues);
76
- };
77
- }
78
-
79
29
  export class GenericFieldWrapper {
80
30
  protected type: TypeNode;
81
31
  public readonly directives: DirectiveWrapper[];
@@ -295,7 +245,7 @@ export class FieldWrapper extends GenericFieldWrapper {
295
245
  field.makeNonNullable();
296
246
  }
297
247
  if (isList) {
298
- field.wrapListType();
248
+ field.wrapListType().makeNonNullable();
299
249
  }
300
250
  return field;
301
251
  };