@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.
- package/CHANGELOG.md +17 -12
- package/lib/graphql-model-transformer.d.ts +13 -9
- package/lib/graphql-model-transformer.d.ts.map +1 -1
- package/lib/graphql-model-transformer.js +51 -32
- package/lib/graphql-model-transformer.js.map +1 -1
- package/lib/graphql-types/mutation.d.ts.map +1 -1
- package/lib/graphql-types/mutation.js +2 -5
- package/lib/graphql-types/mutation.js.map +1 -1
- package/lib/graphql-types/query.js +1 -1
- package/lib/graphql-types/query.js.map +1 -1
- package/lib/wrappers/object-definition-wrapper.d.ts +2 -15
- package/lib/wrappers/object-definition-wrapper.d.ts.map +1 -1
- package/lib/wrappers/object-definition-wrapper.js +7 -43
- package/lib/wrappers/object-definition-wrapper.js.map +1 -1
- package/package.json +6 -6
- package/src/__tests__/__snapshots__/model-transformer.test.ts.snap +11 -11
- package/src/__tests__/model-transformer.test.ts +34 -1
- package/src/graphql-model-transformer.ts +86 -28
- package/src/graphql-types/mutation.ts +2 -4
- package/src/graphql-types/query.ts +1 -1
- package/src/wrappers/object-definition-wrapper.ts +2 -52
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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,
|
|
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
|
};
|