@aws-amplify/graphql-model-transformer 0.13.4-pkg-npm-install.0 → 0.13.5-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 +23 -1
- package/lib/directive.d.ts +28 -0
- package/lib/directive.d.ts.map +1 -0
- package/lib/directive.js +10 -0
- package/lib/directive.js.map +1 -0
- package/lib/graphql-model-transformer.d.ts +12 -40
- package/lib/graphql-model-transformer.d.ts.map +1 -1
- package/lib/graphql-model-transformer.js +158 -177
- package/lib/graphql-model-transformer.js.map +1 -1
- package/lib/graphql-types/mutation.d.ts +1 -1
- package/lib/graphql-types/mutation.d.ts.map +1 -1
- package/lib/graphql-types/mutation.js +7 -11
- package/lib/graphql-types/mutation.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -2
- package/lib/index.js.map +1 -1
- package/lib/resolvers/mutation.d.ts +5 -5
- package/lib/resolvers/mutation.d.ts.map +1 -1
- package/lib/resolvers/mutation.js +20 -14
- package/lib/resolvers/mutation.js.map +1 -1
- package/package.json +4 -4
- package/src/directive.ts +37 -0
- package/src/graphql-model-transformer.ts +135 -172
- package/src/graphql-types/mutation.ts +11 -12
- package/src/index.ts +2 -1
- package/src/resolvers/mutation.ts +29 -19
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -18,11 +18,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
18
18
|
__setModuleDefault(result, mod);
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
-
};
|
|
24
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.ModelTransformer = exports.directiveDefinition =
|
|
22
|
+
exports.ModelTransformer = exports.directiveDefinition = void 0;
|
|
26
23
|
const graphql_transformer_core_1 = require("@aws-amplify/graphql-transformer-core");
|
|
27
24
|
const graphql_transformer_interfaces_1 = require("@aws-amplify/graphql-transformer-interfaces");
|
|
28
25
|
const aws_dynamodb_1 = require("@aws-cdk/aws-dynamodb");
|
|
@@ -32,14 +29,8 @@ const graphql_transformer_common_1 = require("graphql-transformer-common");
|
|
|
32
29
|
const graphql_types_1 = require("./graphql-types");
|
|
33
30
|
const resolvers_1 = require("./resolvers");
|
|
34
31
|
const query_1 = require("./resolvers/query");
|
|
35
|
-
const md5_1 = __importDefault(require("md5"));
|
|
36
32
|
const definitions_1 = require("./definitions");
|
|
37
|
-
|
|
38
|
-
(function (SubscriptionLevel) {
|
|
39
|
-
SubscriptionLevel["off"] = "off";
|
|
40
|
-
SubscriptionLevel["public"] = "public";
|
|
41
|
-
SubscriptionLevel["on"] = "on";
|
|
42
|
-
})(SubscriptionLevel = exports.SubscriptionLevel || (exports.SubscriptionLevel = {}));
|
|
33
|
+
const directive_1 = require("./directive");
|
|
43
34
|
exports.directiveDefinition = `
|
|
44
35
|
directive @model(
|
|
45
36
|
queries: ModelQueryMap
|
|
@@ -111,9 +102,9 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
111
102
|
};
|
|
112
103
|
this.object = (definition, directive, ctx) => {
|
|
113
104
|
var _a, _b, _c;
|
|
114
|
-
const isTypeNameReserved = definition.name.value === ctx.output.getQueryTypeName()
|
|
115
|
-
definition.name.value === ctx.output.getMutationTypeName()
|
|
116
|
-
definition.name.value === ctx.output.getSubscriptionTypeName();
|
|
105
|
+
const isTypeNameReserved = definition.name.value === ctx.output.getQueryTypeName()
|
|
106
|
+
|| definition.name.value === ctx.output.getMutationTypeName()
|
|
107
|
+
|| definition.name.value === ctx.output.getSubscriptionTypeName();
|
|
117
108
|
if (isTypeNameReserved) {
|
|
118
109
|
throw new graphql_transformer_core_1.InvalidDirectiveError(`'${definition.name.value}' is a reserved type name and currently in use within the default schema element.`);
|
|
119
110
|
}
|
|
@@ -134,7 +125,7 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
134
125
|
delete: (0, graphql_transformer_core_1.getFieldNameFor)('delete', typeName),
|
|
135
126
|
},
|
|
136
127
|
subscriptions: {
|
|
137
|
-
level: SubscriptionLevel.on,
|
|
128
|
+
level: directive_1.SubscriptionLevel.on,
|
|
138
129
|
onCreate: [(0, graphql_transformer_core_1.getFieldNameFor)('onCreate', typeName)],
|
|
139
130
|
onDelete: [(0, graphql_transformer_core_1.getFieldNameFor)('onDelete', typeName)],
|
|
140
131
|
onUpdate: [(0, graphql_transformer_core_1.getFieldNameFor)('onUpdate', typeName)],
|
|
@@ -156,17 +147,16 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
156
147
|
this.modelDirectiveConfig.set(typeName, options);
|
|
157
148
|
this.typesWithModelDirective.add(typeName);
|
|
158
149
|
};
|
|
159
|
-
this.validate = () => { };
|
|
160
150
|
this.prepare = (context) => {
|
|
161
|
-
|
|
151
|
+
this.typesWithModelDirective.forEach(modelTypeName => {
|
|
162
152
|
const type = context.output.getObject(modelTypeName);
|
|
163
153
|
context.providerRegistry.registerDataSourceProvider(type, this);
|
|
164
|
-
}
|
|
154
|
+
});
|
|
165
155
|
};
|
|
166
156
|
this.transformSchema = (ctx) => {
|
|
167
157
|
(0, graphql_types_1.addModelConditionInputs)(ctx);
|
|
168
158
|
this.ensureModelSortDirectionEnum(ctx);
|
|
169
|
-
|
|
159
|
+
this.typesWithModelDirective.forEach(type => {
|
|
170
160
|
const def = ctx.output.getObject(type);
|
|
171
161
|
const hasAuth = def.directives.some(dir => dir.name.value === 'auth');
|
|
172
162
|
this.createNonModelInputs(ctx, def);
|
|
@@ -184,31 +174,31 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
184
174
|
const apiKeyDirArray = [(0, graphql_transformer_common_1.makeDirective)(definitions_1.API_KEY_DIRECTIVE, [])];
|
|
185
175
|
(0, graphql_types_1.extendTypeWithDirectives)(ctx, def.name.value, apiKeyDirArray);
|
|
186
176
|
(0, graphql_types_1.propagateApiKeyToNestedTypes)(ctx, def, new Set());
|
|
187
|
-
|
|
177
|
+
queryFields.forEach(operationField => {
|
|
188
178
|
const operationName = operationField.name.value;
|
|
189
179
|
(0, graphql_types_1.addDirectivesToOperation)(ctx, ctx.output.getQueryTypeName(), operationName, apiKeyDirArray);
|
|
190
|
-
}
|
|
191
|
-
|
|
180
|
+
});
|
|
181
|
+
mutationFields.forEach(operationField => {
|
|
192
182
|
const operationName = operationField.name.value;
|
|
193
183
|
(0, graphql_types_1.addDirectivesToOperation)(ctx, ctx.output.getMutationTypeName(), operationName, apiKeyDirArray);
|
|
194
|
-
}
|
|
195
|
-
|
|
184
|
+
});
|
|
185
|
+
subscriptionsFields.forEach(operationField => {
|
|
196
186
|
const operationName = operationField.name.value;
|
|
197
187
|
(0, graphql_types_1.addDirectivesToOperation)(ctx, ctx.output.getSubscriptionTypeName(), operationName, apiKeyDirArray);
|
|
198
|
-
}
|
|
188
|
+
});
|
|
199
189
|
}
|
|
200
|
-
}
|
|
190
|
+
});
|
|
201
191
|
};
|
|
202
192
|
this.generateResolvers = (context) => {
|
|
203
|
-
|
|
204
|
-
|
|
193
|
+
this.typesWithModelDirective.forEach(type => {
|
|
194
|
+
var _a, _b;
|
|
205
195
|
const def = context.output.getObject(type);
|
|
206
196
|
const tableBaseName = context.resourceHelper.getModelNameMapping(def.name.value);
|
|
207
197
|
const tableLogicalName = graphql_transformer_common_1.ModelResourceIDs.ModelTableResourceID(tableBaseName);
|
|
208
198
|
const stack = context.stackManager.getStackFor(tableLogicalName, tableBaseName);
|
|
209
199
|
this.createModelTable(stack, def, context);
|
|
210
|
-
const queryFields = this.getQueryFieldNames(
|
|
211
|
-
|
|
200
|
+
const queryFields = this.getQueryFieldNames(def);
|
|
201
|
+
queryFields.forEach(query => {
|
|
212
202
|
let resolver;
|
|
213
203
|
switch (query.type) {
|
|
214
204
|
case graphql_transformer_interfaces_1.QueryFieldType.GET:
|
|
@@ -226,9 +216,9 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
226
216
|
resolver.addToSlot('postAuth', graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateAuthExpressionForSandboxMode)(context.sandboxModeEnabled), `${query.typeName}.${query.fieldName}.{slotName}.{slotIndex}.req.vtl`));
|
|
227
217
|
resolver.mapToStack(context.stackManager.getStackFor(query.resolverLogicalId, def.name.value));
|
|
228
218
|
context.resolvers.addResolver(query.typeName, query.fieldName, resolver);
|
|
229
|
-
}
|
|
230
|
-
const mutationFields = this.getMutationFieldNames(
|
|
231
|
-
|
|
219
|
+
});
|
|
220
|
+
const mutationFields = this.getMutationFieldNames(def);
|
|
221
|
+
mutationFields.forEach(mutation => {
|
|
232
222
|
let resolver;
|
|
233
223
|
switch (mutation.type) {
|
|
234
224
|
case graphql_transformer_interfaces_1.MutationFieldType.CREATE:
|
|
@@ -246,21 +236,21 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
246
236
|
resolver.addToSlot('postAuth', graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateAuthExpressionForSandboxMode)(context.sandboxModeEnabled), `${mutation.typeName}.${mutation.fieldName}.{slotName}.{slotIndex}.req.vtl`));
|
|
247
237
|
resolver.mapToStack(context.stackManager.getStackFor(mutation.resolverLogicalId, def.name.value));
|
|
248
238
|
context.resolvers.addResolver(mutation.typeName, mutation.fieldName, resolver);
|
|
249
|
-
}
|
|
239
|
+
});
|
|
250
240
|
const subscriptionLevel = (_b = (_a = this.modelDirectiveConfig.get(def.name.value)) === null || _a === void 0 ? void 0 : _a.subscriptions) === null || _b === void 0 ? void 0 : _b.level;
|
|
251
|
-
if (subscriptionLevel === SubscriptionLevel.on) {
|
|
252
|
-
const subscriptionFields = this.getSubscriptionFieldNames(
|
|
253
|
-
|
|
241
|
+
if (subscriptionLevel === directive_1.SubscriptionLevel.on) {
|
|
242
|
+
const subscriptionFields = this.getSubscriptionFieldNames(def);
|
|
243
|
+
subscriptionFields.forEach(subscription => {
|
|
254
244
|
let resolver;
|
|
255
245
|
switch (subscription.type) {
|
|
256
246
|
case graphql_transformer_interfaces_1.SubscriptionFieldType.ON_CREATE:
|
|
257
|
-
resolver = this.generateOnCreateResolver(context,
|
|
247
|
+
resolver = this.generateOnCreateResolver(context, subscription.typeName, subscription.fieldName, subscription.resolverLogicalId);
|
|
258
248
|
break;
|
|
259
249
|
case graphql_transformer_interfaces_1.SubscriptionFieldType.ON_UPDATE:
|
|
260
|
-
resolver = this.generateOnUpdateResolver(context,
|
|
250
|
+
resolver = this.generateOnUpdateResolver(context, subscription.typeName, subscription.fieldName, subscription.resolverLogicalId);
|
|
261
251
|
break;
|
|
262
252
|
case graphql_transformer_interfaces_1.SubscriptionFieldType.ON_DELETE:
|
|
263
|
-
resolver = this.generateOnDeleteResolver(context,
|
|
253
|
+
resolver = this.generateOnDeleteResolver(context, subscription.typeName, subscription.fieldName, subscription.resolverLogicalId);
|
|
264
254
|
break;
|
|
265
255
|
default:
|
|
266
256
|
throw new Error('Unknown subscription field type');
|
|
@@ -268,9 +258,9 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
268
258
|
resolver.addToSlot('postAuth', graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateAuthExpressionForSandboxMode)(context.sandboxModeEnabled), `${subscription.typeName}.${subscription.fieldName}.{slotName}.{slotIndex}.req.vtl`));
|
|
269
259
|
resolver.mapToStack(context.stackManager.getStackFor(subscription.resolverLogicalId, def.name.value));
|
|
270
260
|
context.resolvers.addResolver(subscription.typeName, subscription.fieldName, resolver);
|
|
271
|
-
}
|
|
261
|
+
});
|
|
272
262
|
}
|
|
273
|
-
}
|
|
263
|
+
});
|
|
274
264
|
};
|
|
275
265
|
this.generateGetResolver = (ctx, type, typeName, fieldName, resolverLogicalId) => {
|
|
276
266
|
const isSyncEnabled = ctx.isProjectUsingDataStore();
|
|
@@ -296,7 +286,7 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
296
286
|
const resolverKey = `Update${(0, resolvers_1.generateResolverKey)(typeName, fieldName)}`;
|
|
297
287
|
if (!this.resolverMap[resolverKey]) {
|
|
298
288
|
const resolver = ctx.resolvers.generateMutationResolver(typeName, fieldName, resolverLogicalId, dataSource, graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateUpdateRequestTemplate)(typeName, isSyncEnabled), `${typeName}.${fieldName}.req.vtl`), graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateDefaultResponseMappingTemplate)(isSyncEnabled, true), `${typeName}.${fieldName}.res.vtl`));
|
|
299
|
-
resolver.addToSlot('init', graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateUpdateInitSlotTemplate)(
|
|
289
|
+
resolver.addToSlot('init', graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateUpdateInitSlotTemplate)(this.modelDirectiveConfig.get(type.name.value)), `${typeName}.${fieldName}.{slotName}.{slotIndex}.req.vtl`));
|
|
300
290
|
this.resolverMap[resolverKey] = resolver;
|
|
301
291
|
}
|
|
302
292
|
return this.resolverMap[resolverKey];
|
|
@@ -310,21 +300,21 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
310
300
|
}
|
|
311
301
|
return this.resolverMap[resolverKey];
|
|
312
302
|
};
|
|
313
|
-
this.generateOnCreateResolver = (ctx,
|
|
303
|
+
this.generateOnCreateResolver = (ctx, typeName, fieldName, resolverLogicalId) => {
|
|
314
304
|
const resolverKey = `OnCreate${(0, resolvers_1.generateResolverKey)(typeName, fieldName)}`;
|
|
315
305
|
if (!this.resolverMap[resolverKey]) {
|
|
316
306
|
this.resolverMap[resolverKey] = ctx.resolvers.generateSubscriptionResolver(typeName, fieldName, resolverLogicalId, graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateSubscriptionRequestTemplate)(), `${typeName}.${fieldName}.req.vtl`), graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateSubscriptionResponseTemplate)(), `${typeName}.${fieldName}.res.vtl`));
|
|
317
307
|
}
|
|
318
308
|
return this.resolverMap[resolverKey];
|
|
319
309
|
};
|
|
320
|
-
this.generateOnUpdateResolver = (ctx,
|
|
310
|
+
this.generateOnUpdateResolver = (ctx, typeName, fieldName, resolverLogicalId) => {
|
|
321
311
|
const resolverKey = `OnUpdate${(0, resolvers_1.generateResolverKey)(typeName, fieldName)}`;
|
|
322
312
|
if (!this.resolverMap[resolverKey]) {
|
|
323
313
|
this.resolverMap[resolverKey] = ctx.resolvers.generateSubscriptionResolver(typeName, fieldName, resolverLogicalId, graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateSubscriptionRequestTemplate)(), `${typeName}.${fieldName}.req.vtl`), graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateSubscriptionResponseTemplate)(), `${typeName}.${fieldName}.res.vtl`));
|
|
324
314
|
}
|
|
325
315
|
return this.resolverMap[resolverKey];
|
|
326
316
|
};
|
|
327
|
-
this.generateOnDeleteResolver = (ctx,
|
|
317
|
+
this.generateOnDeleteResolver = (ctx, typeName, fieldName, resolverLogicalId) => {
|
|
328
318
|
const resolverKey = `OnDelete${(0, resolvers_1.generateResolverKey)(typeName, fieldName)}`;
|
|
329
319
|
if (!this.resolverMap[resolverKey]) {
|
|
330
320
|
this.resolverMap[resolverKey] = ctx.resolvers.generateSubscriptionResolver(typeName, fieldName, resolverLogicalId, graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateSubscriptionRequestTemplate)(), `${typeName}.${fieldName}.req.vtl`), graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateSubscriptionResponseTemplate)(), `${typeName}.${fieldName}.res.vtl`));
|
|
@@ -340,7 +330,7 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
340
330
|
}
|
|
341
331
|
return this.resolverMap[resolverKey];
|
|
342
332
|
};
|
|
343
|
-
this.getQueryFieldNames = (
|
|
333
|
+
this.getQueryFieldNames = (type) => {
|
|
344
334
|
var _a, _b, _c;
|
|
345
335
|
const typeName = type.name.value;
|
|
346
336
|
const fields = new Set();
|
|
@@ -371,11 +361,11 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
371
361
|
}
|
|
372
362
|
return fields;
|
|
373
363
|
};
|
|
374
|
-
this.getMutationFieldNames = (
|
|
364
|
+
this.getMutationFieldNames = (type) => {
|
|
375
365
|
const typeName = type.name.value;
|
|
376
366
|
const modelDirectiveConfig = this.modelDirectiveConfig.get(typeName);
|
|
377
|
-
const getMutationType = (
|
|
378
|
-
switch (
|
|
367
|
+
const getMutationType = (mutationType) => {
|
|
368
|
+
switch (mutationType) {
|
|
379
369
|
case 'create':
|
|
380
370
|
return graphql_transformer_interfaces_1.MutationFieldType.CREATE;
|
|
381
371
|
case 'update':
|
|
@@ -386,8 +376,8 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
386
376
|
throw new Error('Unknown mutation type');
|
|
387
377
|
}
|
|
388
378
|
};
|
|
389
|
-
const getMutationResolverLogicalId = (
|
|
390
|
-
switch (
|
|
379
|
+
const getMutationResolverLogicalId = (mutationType) => {
|
|
380
|
+
switch (mutationType) {
|
|
391
381
|
case 'create':
|
|
392
382
|
return graphql_transformer_common_1.ResolverResourceIDs.DynamoDBCreateResolverResourceID(typeName);
|
|
393
383
|
case 'update':
|
|
@@ -399,7 +389,7 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
399
389
|
}
|
|
400
390
|
};
|
|
401
391
|
const fieldNames = new Set();
|
|
402
|
-
|
|
392
|
+
Object.entries((modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.mutations) || {}).forEach(([mutationType, mutationName]) => {
|
|
403
393
|
if (mutationName) {
|
|
404
394
|
fieldNames.add({
|
|
405
395
|
typeName: 'Mutation',
|
|
@@ -408,7 +398,7 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
408
398
|
resolverLogicalId: getMutationResolverLogicalId(mutationType),
|
|
409
399
|
});
|
|
410
400
|
}
|
|
411
|
-
}
|
|
401
|
+
});
|
|
412
402
|
return fieldNames;
|
|
413
403
|
};
|
|
414
404
|
this.getMutationName = (subscriptionType, mutationMap) => {
|
|
@@ -417,7 +407,7 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
417
407
|
[graphql_transformer_interfaces_1.SubscriptionFieldType.ON_UPDATE]: graphql_transformer_interfaces_1.MutationFieldType.UPDATE,
|
|
418
408
|
[graphql_transformer_interfaces_1.SubscriptionFieldType.ON_DELETE]: graphql_transformer_interfaces_1.MutationFieldType.DELETE,
|
|
419
409
|
};
|
|
420
|
-
const mutation = Array.from(mutationMap).find(m => m.type
|
|
410
|
+
const mutation = Array.from(mutationMap).find(m => m.type === mutationToSubscriptionTypeMap[subscriptionType]);
|
|
421
411
|
if (mutation) {
|
|
422
412
|
return mutation.fieldName;
|
|
423
413
|
}
|
|
@@ -425,8 +415,8 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
425
415
|
};
|
|
426
416
|
this.createQueryFields = (ctx, def) => {
|
|
427
417
|
const queryFields = [];
|
|
428
|
-
const queryFieldNames = this.getQueryFieldNames(
|
|
429
|
-
|
|
418
|
+
const queryFieldNames = this.getQueryFieldNames(def);
|
|
419
|
+
queryFieldNames.forEach(queryField => {
|
|
430
420
|
const outputType = this.getOutputType(ctx, def, queryField);
|
|
431
421
|
const args = this.getInputs(ctx, def, {
|
|
432
422
|
fieldName: queryField.fieldName,
|
|
@@ -434,27 +424,27 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
434
424
|
type: queryField.type,
|
|
435
425
|
});
|
|
436
426
|
queryFields.push((0, graphql_transformer_common_1.makeField)(queryField.fieldName, args, (0, graphql_transformer_common_1.makeNamedType)(outputType.name.value)));
|
|
437
|
-
}
|
|
427
|
+
});
|
|
438
428
|
return queryFields;
|
|
439
429
|
};
|
|
440
430
|
this.createMutationFields = (ctx, def) => {
|
|
441
431
|
const mutationFields = [];
|
|
442
|
-
const mutationFieldNames = this.getMutationFieldNames(
|
|
443
|
-
|
|
432
|
+
const mutationFieldNames = this.getMutationFieldNames(def);
|
|
433
|
+
mutationFieldNames.forEach(mutationField => {
|
|
444
434
|
const args = this.getInputs(ctx, def, {
|
|
445
435
|
fieldName: mutationField.fieldName,
|
|
446
436
|
typeName: mutationField.typeName,
|
|
447
437
|
type: mutationField.type,
|
|
448
438
|
});
|
|
449
439
|
mutationFields.push((0, graphql_transformer_common_1.makeField)(mutationField.fieldName, args, (0, graphql_transformer_common_1.makeNamedType)(def.name.value)));
|
|
450
|
-
}
|
|
440
|
+
});
|
|
451
441
|
return mutationFields;
|
|
452
442
|
};
|
|
453
443
|
this.createSubscriptionFields = (ctx, def) => {
|
|
454
|
-
const subscriptionToMutationsMap = this.getSubscriptionToMutationsReverseMap(
|
|
455
|
-
const mutationFields = this.getMutationFieldNames(
|
|
444
|
+
const subscriptionToMutationsMap = this.getSubscriptionToMutationsReverseMap(def);
|
|
445
|
+
const mutationFields = this.getMutationFieldNames(def);
|
|
456
446
|
const subscriptionFields = [];
|
|
457
|
-
|
|
447
|
+
Object.keys(subscriptionToMutationsMap).forEach(subscriptionFieldName => {
|
|
458
448
|
const maps = subscriptionToMutationsMap[subscriptionFieldName];
|
|
459
449
|
const args = [];
|
|
460
450
|
maps.map(it => args.concat(this.getInputs(ctx, def, {
|
|
@@ -466,61 +456,58 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
466
456
|
const directive = (0, graphql_transformer_common_1.makeDirective)('aws_subscribe', [(0, graphql_transformer_common_1.makeArgument)('mutations', (0, graphql_transformer_common_1.makeValueNode)(mutationNames))]);
|
|
467
457
|
const field = (0, graphql_transformer_common_1.makeField)(subscriptionFieldName, args, (0, graphql_transformer_common_1.makeNamedType)(def.name.value), [directive]);
|
|
468
458
|
subscriptionFields.push(field);
|
|
469
|
-
}
|
|
459
|
+
});
|
|
470
460
|
return subscriptionFields;
|
|
471
461
|
};
|
|
472
|
-
this.getSubscriptionFieldNames = (
|
|
462
|
+
this.getSubscriptionFieldNames = (type) => {
|
|
473
463
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
474
464
|
const fields = new Set();
|
|
475
465
|
const modelDirectiveConfig = this.modelDirectiveConfig.get(type.name.value);
|
|
476
|
-
if (((_a = modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.subscriptions) === null || _a === void 0 ? void 0 : _a.level) !== SubscriptionLevel.off) {
|
|
466
|
+
if (((_a = modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.subscriptions) === null || _a === void 0 ? void 0 : _a.level) !== directive_1.SubscriptionLevel.off) {
|
|
477
467
|
if (((_b = modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.subscriptions) === null || _b === void 0 ? void 0 : _b.onCreate) && ((_c = modelDirectiveConfig.mutations) === null || _c === void 0 ? void 0 : _c.create)) {
|
|
478
|
-
|
|
468
|
+
modelDirectiveConfig.subscriptions.onCreate.forEach((fieldName) => {
|
|
479
469
|
fields.add({
|
|
480
470
|
typeName: 'Subscription',
|
|
481
|
-
fieldName
|
|
471
|
+
fieldName,
|
|
482
472
|
type: graphql_transformer_interfaces_1.SubscriptionFieldType.ON_CREATE,
|
|
483
473
|
resolverLogicalId: graphql_transformer_common_1.ResolverResourceIDs.ResolverResourceID('Subscription', fieldName),
|
|
484
474
|
});
|
|
485
|
-
}
|
|
475
|
+
});
|
|
486
476
|
}
|
|
487
477
|
if (((_d = modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.subscriptions) === null || _d === void 0 ? void 0 : _d.onUpdate) && ((_e = modelDirectiveConfig.mutations) === null || _e === void 0 ? void 0 : _e.update)) {
|
|
488
|
-
|
|
478
|
+
modelDirectiveConfig.subscriptions.onUpdate.forEach((fieldName) => {
|
|
489
479
|
fields.add({
|
|
490
480
|
typeName: 'Subscription',
|
|
491
|
-
fieldName
|
|
481
|
+
fieldName,
|
|
492
482
|
type: graphql_transformer_interfaces_1.SubscriptionFieldType.ON_UPDATE,
|
|
493
483
|
resolverLogicalId: graphql_transformer_common_1.ResolverResourceIDs.ResolverResourceID('Subscription', fieldName),
|
|
494
484
|
});
|
|
495
|
-
}
|
|
485
|
+
});
|
|
496
486
|
}
|
|
497
487
|
if (((_f = modelDirectiveConfig === null || modelDirectiveConfig === void 0 ? void 0 : modelDirectiveConfig.subscriptions) === null || _f === void 0 ? void 0 : _f.onDelete) && ((_g = modelDirectiveConfig.mutations) === null || _g === void 0 ? void 0 : _g.delete)) {
|
|
498
|
-
|
|
488
|
+
modelDirectiveConfig.subscriptions.onDelete.forEach((fieldName) => {
|
|
499
489
|
fields.add({
|
|
500
490
|
typeName: 'Subscription',
|
|
501
|
-
fieldName
|
|
491
|
+
fieldName,
|
|
502
492
|
type: graphql_transformer_interfaces_1.SubscriptionFieldType.ON_DELETE,
|
|
503
493
|
resolverLogicalId: graphql_transformer_common_1.ResolverResourceIDs.ResolverResourceID('Subscription', fieldName),
|
|
504
494
|
});
|
|
505
|
-
}
|
|
495
|
+
});
|
|
506
496
|
}
|
|
507
497
|
}
|
|
508
498
|
return fields;
|
|
509
499
|
};
|
|
510
|
-
this.getDataSourceResource = (
|
|
511
|
-
|
|
512
|
-
};
|
|
513
|
-
this.getDataSourceType = () => {
|
|
514
|
-
return graphql_transformer_interfaces_1.AppSyncDataSourceType.AMAZON_DYNAMODB;
|
|
515
|
-
};
|
|
500
|
+
this.getDataSourceResource = (type) => this.ddbTableMap[type.name.value];
|
|
501
|
+
this.getDataSourceType = () => graphql_transformer_interfaces_1.AppSyncDataSourceType.AMAZON_DYNAMODB;
|
|
516
502
|
this.generateCreateResolver = (ctx, type, typeName, fieldName, resolverLogicalId) => {
|
|
517
503
|
const isSyncEnabled = ctx.isProjectUsingDataStore();
|
|
518
504
|
const dataSource = this.datasourceMap[type.name.value];
|
|
519
505
|
const resolverKey = `Create${(0, resolvers_1.generateResolverKey)(typeName, fieldName)}`;
|
|
506
|
+
const modelIndexFields = type.fields.filter(field => { var _a; return (_a = field.directives) === null || _a === void 0 ? void 0 : _a.some(it => it.name.value === 'index'); }).map(it => it.name.value);
|
|
520
507
|
if (!this.resolverMap[resolverKey]) {
|
|
521
|
-
const resolver = ctx.resolvers.generateMutationResolver(typeName, fieldName, resolverLogicalId, dataSource, graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateCreateRequestTemplate)(type.name.value), `${typeName}.${fieldName}.req.vtl`), graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateDefaultResponseMappingTemplate)(isSyncEnabled, true), `${typeName}.${fieldName}.res.vtl`));
|
|
508
|
+
const resolver = ctx.resolvers.generateMutationResolver(typeName, fieldName, resolverLogicalId, dataSource, graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateCreateRequestTemplate)(type.name.value, modelIndexFields), `${typeName}.${fieldName}.req.vtl`), graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateDefaultResponseMappingTemplate)(isSyncEnabled, true), `${typeName}.${fieldName}.res.vtl`));
|
|
522
509
|
this.resolverMap[resolverKey] = resolver;
|
|
523
|
-
resolver.addToSlot('init', graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateCreateInitSlotTemplate)(
|
|
510
|
+
resolver.addToSlot('init', graphql_transformer_core_1.MappingTemplate.s3MappingTemplateFromString((0, resolvers_1.generateCreateInitSlotTemplate)(this.modelDirectiveConfig.get(type.name.value)), `${typeName}.${fieldName}.{slotName}.{slotIndex}.req.vtl`));
|
|
524
511
|
}
|
|
525
512
|
return this.resolverMap[resolverKey];
|
|
526
513
|
};
|
|
@@ -533,32 +520,33 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
533
520
|
const filterInputs = (0, graphql_types_1.createEnumModelFilters)(ctx, type);
|
|
534
521
|
conditionInput = (0, graphql_types_1.makeMutationConditionInput)(ctx, conditionTypeName, type);
|
|
535
522
|
filterInputs.push(conditionInput);
|
|
536
|
-
|
|
523
|
+
filterInputs.forEach(input => {
|
|
537
524
|
const conditionInputName = input.name.value;
|
|
538
525
|
if (!ctx.output.getType(conditionInputName)) {
|
|
539
526
|
ctx.output.addInput(input);
|
|
540
527
|
}
|
|
541
|
-
}
|
|
528
|
+
});
|
|
542
529
|
}
|
|
543
530
|
switch (operation.type) {
|
|
544
531
|
case graphql_transformer_interfaces_1.QueryFieldType.GET:
|
|
545
532
|
return [(0, graphql_transformer_common_1.makeInputValueDefinition)('id', (0, graphql_transformer_common_1.makeNonNullType)((0, graphql_transformer_common_1.makeNamedType)('ID')))];
|
|
546
|
-
case graphql_transformer_interfaces_1.QueryFieldType.LIST:
|
|
533
|
+
case graphql_transformer_interfaces_1.QueryFieldType.LIST: {
|
|
547
534
|
const filterInputName = (0, graphql_transformer_common_1.toPascalCase)(['Model', type.name.value, 'FilterInput']);
|
|
548
535
|
const filterInputs = (0, graphql_types_1.createEnumModelFilters)(ctx, type);
|
|
549
536
|
filterInputs.push((0, graphql_types_1.makeListQueryFilterInput)(ctx, filterInputName, type));
|
|
550
|
-
|
|
537
|
+
filterInputs.forEach(input => {
|
|
551
538
|
const conditionInputName = input.name.value;
|
|
552
539
|
if (!ctx.output.getType(conditionInputName)) {
|
|
553
540
|
ctx.output.addInput(input);
|
|
554
541
|
}
|
|
555
|
-
}
|
|
542
|
+
});
|
|
556
543
|
return [
|
|
557
544
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('filter', (0, graphql_transformer_common_1.makeNamedType)(filterInputName)),
|
|
558
545
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('limit', (0, graphql_transformer_common_1.makeNamedType)('Int')),
|
|
559
546
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('nextToken', (0, graphql_transformer_common_1.makeNamedType)('String')),
|
|
560
547
|
];
|
|
561
|
-
|
|
548
|
+
}
|
|
549
|
+
case graphql_transformer_interfaces_1.QueryFieldType.SYNC: {
|
|
562
550
|
const syncFilterInputName = (0, graphql_transformer_common_1.toPascalCase)(['Model', type.name.value, 'FilterInput']);
|
|
563
551
|
const syncFilterInputs = (0, graphql_types_1.makeListQueryFilterInput)(ctx, syncFilterInputName, type);
|
|
564
552
|
const conditionInputName = syncFilterInputs.name.value;
|
|
@@ -571,7 +559,8 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
571
559
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('nextToken', (0, graphql_transformer_common_1.makeNamedType)('String')),
|
|
572
560
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('lastSync', (0, graphql_transformer_common_1.makeNamedType)('AWSTimestamp')),
|
|
573
561
|
];
|
|
574
|
-
|
|
562
|
+
}
|
|
563
|
+
case graphql_transformer_interfaces_1.MutationFieldType.CREATE: {
|
|
575
564
|
const createInputField = (0, graphql_types_1.makeCreateInputField)(type, this.modelDirectiveConfig.get(type.name.value), knownModels, ctx.inputDocument, isSyncEnabled);
|
|
576
565
|
const createInputTypeName = createInputField.name.value;
|
|
577
566
|
if (!ctx.output.getType(createInputField.name.value)) {
|
|
@@ -581,7 +570,8 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
581
570
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('input', (0, graphql_transformer_common_1.makeNonNullType)((0, graphql_transformer_common_1.makeNamedType)(createInputTypeName))),
|
|
582
571
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('condition', (0, graphql_transformer_common_1.makeNamedType)(conditionInput.name.value)),
|
|
583
572
|
];
|
|
584
|
-
|
|
573
|
+
}
|
|
574
|
+
case graphql_transformer_interfaces_1.MutationFieldType.DELETE: {
|
|
585
575
|
const deleteInputField = (0, graphql_types_1.makeDeleteInputField)(type, isSyncEnabled);
|
|
586
576
|
const deleteInputTypeName = deleteInputField.name.value;
|
|
587
577
|
if (!ctx.output.getType(deleteInputField.name.value)) {
|
|
@@ -591,7 +581,8 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
591
581
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('input', (0, graphql_transformer_common_1.makeNonNullType)((0, graphql_transformer_common_1.makeNamedType)(deleteInputTypeName))),
|
|
592
582
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('condition', (0, graphql_transformer_common_1.makeNamedType)(conditionInput.name.value)),
|
|
593
583
|
];
|
|
594
|
-
|
|
584
|
+
}
|
|
585
|
+
case graphql_transformer_interfaces_1.MutationFieldType.UPDATE: {
|
|
595
586
|
const updateInputField = (0, graphql_types_1.makeUpdateInputField)(type, this.modelDirectiveConfig.get(type.name.value), knownModels, ctx.inputDocument, isSyncEnabled);
|
|
596
587
|
const updateInputTypeName = updateInputField.name.value;
|
|
597
588
|
if (!ctx.output.getType(updateInputField.name.value)) {
|
|
@@ -601,15 +592,14 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
601
592
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('input', (0, graphql_transformer_common_1.makeNonNullType)((0, graphql_transformer_common_1.makeNamedType)(updateInputTypeName))),
|
|
602
593
|
(0, graphql_transformer_common_1.makeInputValueDefinition)('condition', (0, graphql_transformer_common_1.makeNamedType)(conditionInput.name.value)),
|
|
603
594
|
];
|
|
595
|
+
}
|
|
604
596
|
case graphql_transformer_interfaces_1.SubscriptionFieldType.ON_CREATE:
|
|
605
597
|
case graphql_transformer_interfaces_1.SubscriptionFieldType.ON_DELETE:
|
|
606
598
|
case graphql_transformer_interfaces_1.SubscriptionFieldType.ON_UPDATE:
|
|
607
599
|
return [];
|
|
608
|
-
break;
|
|
609
600
|
default:
|
|
610
601
|
throw new Error('Unknown operation type');
|
|
611
602
|
}
|
|
612
|
-
return [];
|
|
613
603
|
};
|
|
614
604
|
this.getOutputType = (ctx, type, operation) => {
|
|
615
605
|
let outputType;
|
|
@@ -624,11 +614,12 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
624
614
|
outputType = type;
|
|
625
615
|
break;
|
|
626
616
|
case graphql_transformer_interfaces_1.QueryFieldType.SYNC:
|
|
627
|
-
case graphql_transformer_interfaces_1.QueryFieldType.LIST:
|
|
617
|
+
case graphql_transformer_interfaces_1.QueryFieldType.LIST: {
|
|
628
618
|
const isSyncEnabled = ctx.isProjectUsingDataStore();
|
|
629
619
|
const connectionFieldName = (0, graphql_transformer_common_1.toPascalCase)(['Model', type.name.value, 'Connection']);
|
|
630
620
|
outputType = (0, graphql_types_1.makeListQueryModel)(type, connectionFieldName, isSyncEnabled);
|
|
631
621
|
break;
|
|
622
|
+
}
|
|
632
623
|
default:
|
|
633
624
|
throw new Error(`${operation.type} not supported for ${type.name.value}`);
|
|
634
625
|
}
|
|
@@ -638,10 +629,11 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
638
629
|
return outputType;
|
|
639
630
|
};
|
|
640
631
|
this.createNonModelInputs = (ctx, obj) => {
|
|
641
|
-
|
|
632
|
+
var _a;
|
|
633
|
+
((_a = obj.fields) !== null && _a !== void 0 ? _a : []).forEach(field => {
|
|
642
634
|
if (!(0, graphql_transformer_common_1.isScalar)(field.type)) {
|
|
643
635
|
const def = ctx.output.getType((0, graphql_transformer_common_1.getBaseType)(field.type));
|
|
644
|
-
if (def && def.kind
|
|
636
|
+
if (def && def.kind === 'ObjectTypeDefinition' && !this.isModelField(def.name.value)) {
|
|
645
637
|
const name = this.getNonModelInputObjectName(def.name.value);
|
|
646
638
|
if (!ctx.output.getType(name)) {
|
|
647
639
|
const inputObj = graphql_transformer_core_1.InputObjectDefinitionWrapper.fromObject(name, def, ctx.inputDocument);
|
|
@@ -650,14 +642,10 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
650
642
|
}
|
|
651
643
|
}
|
|
652
644
|
}
|
|
653
|
-
}
|
|
654
|
-
};
|
|
655
|
-
this.isModelField = (name) => {
|
|
656
|
-
return this.typesWithModelDirective.has(name) ? true : false;
|
|
657
|
-
};
|
|
658
|
-
this.getNonModelInputObjectName = (name) => {
|
|
659
|
-
return `${name}Input`;
|
|
645
|
+
});
|
|
660
646
|
};
|
|
647
|
+
this.isModelField = (name) => (!!this.typesWithModelDirective.has(name));
|
|
648
|
+
this.getNonModelInputObjectName = (name) => `${name}Input`;
|
|
661
649
|
this.addAutoGeneratableFields = (ctx, name) => {
|
|
662
650
|
var _a, _b;
|
|
663
651
|
const modelDirectiveConfig = this.modelDirectiveConfig.get(name);
|
|
@@ -679,7 +667,7 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
679
667
|
timestamps.push((_b = modelDirectiveConfig.timestamps.updatedAt) !== null && _b !== void 0 ? _b : 'updatedAt');
|
|
680
668
|
}
|
|
681
669
|
}
|
|
682
|
-
|
|
670
|
+
timestamps.forEach(fieldName => {
|
|
683
671
|
if (typeWrapper.hasField(fieldName)) {
|
|
684
672
|
const field = typeWrapper.getField(fieldName);
|
|
685
673
|
if (!['String', 'AWSDateTime'].includes(field.getTypeName())) {
|
|
@@ -690,7 +678,7 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
690
678
|
const field = graphql_transformer_core_1.FieldWrapper.create(fieldName, 'AWSDateTime');
|
|
691
679
|
typeWrapper.addField(field);
|
|
692
680
|
}
|
|
693
|
-
}
|
|
681
|
+
});
|
|
694
682
|
ctx.output.updateObject(typeWrapper.serialize());
|
|
695
683
|
};
|
|
696
684
|
this.addModelSyncFields = (ctx, name) => {
|
|
@@ -704,28 +692,75 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
704
692
|
typeWrapper.addField(graphql_transformer_core_1.FieldWrapper.create('_lastChangedAt', 'AWSTimestamp'));
|
|
705
693
|
ctx.output.updateObject(typeWrapper.serialize());
|
|
706
694
|
};
|
|
707
|
-
this.getSubscriptionToMutationsReverseMap = (
|
|
695
|
+
this.getSubscriptionToMutationsReverseMap = (def) => {
|
|
708
696
|
const subscriptionToMutationsMap = {};
|
|
709
|
-
const subscriptionFieldNames = this.getSubscriptionFieldNames(
|
|
710
|
-
|
|
697
|
+
const subscriptionFieldNames = this.getSubscriptionFieldNames(def);
|
|
698
|
+
subscriptionFieldNames.forEach(subscriptionFieldName => {
|
|
711
699
|
if (!subscriptionToMutationsMap[subscriptionFieldName.fieldName]) {
|
|
712
700
|
subscriptionToMutationsMap[subscriptionFieldName.fieldName] = [];
|
|
713
701
|
}
|
|
714
702
|
subscriptionToMutationsMap[subscriptionFieldName.fieldName].push(subscriptionFieldName);
|
|
715
|
-
}
|
|
703
|
+
});
|
|
716
704
|
return subscriptionToMutationsMap;
|
|
717
705
|
};
|
|
718
|
-
this.
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
706
|
+
this.createIAMRole = (context, def, stack, tableName) => {
|
|
707
|
+
const roleName = context.resourceHelper.generateIAMRoleName(graphql_transformer_common_1.ModelResourceIDs.ModelTableIAMRoleID(def.name.value));
|
|
708
|
+
const role = new iam.Role(stack, graphql_transformer_common_1.ModelResourceIDs.ModelTableIAMRoleID(def.name.value), {
|
|
709
|
+
roleName,
|
|
710
|
+
assumedBy: new iam.ServicePrincipal('appsync.amazonaws.com'),
|
|
711
|
+
});
|
|
712
|
+
const amplifyDataStoreTableName = context.resourceHelper.generateTableName(graphql_transformer_common_1.SyncResourceIDs.syncTableName);
|
|
713
|
+
role.attachInlinePolicy(new iam.Policy(stack, 'DynamoDBAccess', {
|
|
714
|
+
statements: [
|
|
715
|
+
new iam.PolicyStatement({
|
|
716
|
+
effect: iam.Effect.ALLOW,
|
|
717
|
+
actions: [
|
|
718
|
+
'dynamodb:BatchGetItem',
|
|
719
|
+
'dynamodb:BatchWriteItem',
|
|
720
|
+
'dynamodb:PutItem',
|
|
721
|
+
'dynamodb:DeleteItem',
|
|
722
|
+
'dynamodb:GetItem',
|
|
723
|
+
'dynamodb:Scan',
|
|
724
|
+
'dynamodb:Query',
|
|
725
|
+
'dynamodb:UpdateItem',
|
|
726
|
+
],
|
|
727
|
+
resources: [
|
|
728
|
+
cdk.Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}', {
|
|
729
|
+
tablename: tableName,
|
|
730
|
+
}),
|
|
731
|
+
cdk.Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*', {
|
|
732
|
+
tablename: tableName,
|
|
733
|
+
}),
|
|
734
|
+
...(context.isProjectUsingDataStore()
|
|
735
|
+
? [
|
|
736
|
+
cdk.Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}', {
|
|
737
|
+
tablename: amplifyDataStoreTableName,
|
|
738
|
+
}),
|
|
739
|
+
cdk.Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*', {
|
|
740
|
+
tablename: amplifyDataStoreTableName,
|
|
741
|
+
}),
|
|
742
|
+
]
|
|
743
|
+
: []),
|
|
744
|
+
],
|
|
745
|
+
}),
|
|
746
|
+
],
|
|
747
|
+
}));
|
|
748
|
+
const syncConfig = graphql_transformer_core_1.SyncUtils.getSyncConfig(context, def.name.value);
|
|
749
|
+
if (syncConfig && graphql_transformer_core_1.SyncUtils.isLambdaSyncConfig(syncConfig)) {
|
|
750
|
+
role.attachInlinePolicy(graphql_transformer_core_1.SyncUtils.createSyncLambdaIAMPolicy(stack, syncConfig.LambdaConflictHandler.name, syncConfig.LambdaConflictHandler.region));
|
|
751
|
+
}
|
|
752
|
+
return role;
|
|
753
|
+
};
|
|
754
|
+
this.ensureModelSortDirectionEnum = (ctx) => {
|
|
755
|
+
if (!ctx.output.hasType('ModelSortDirection')) {
|
|
756
|
+
const modelSortDirection = (0, graphql_types_1.makeModelSortDirectionEnumObject)();
|
|
757
|
+
ctx.output.addEnum(modelSortDirection);
|
|
758
|
+
}
|
|
759
|
+
};
|
|
760
|
+
this.getOptions = (options) => ({
|
|
761
|
+
EnableDeletionProtection: false,
|
|
762
|
+
...options,
|
|
763
|
+
});
|
|
729
764
|
this.options = this.getOptions(options);
|
|
730
765
|
}
|
|
731
766
|
createModelTable(stack, def, context) {
|
|
@@ -786,7 +821,7 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
786
821
|
},
|
|
787
822
|
stream: aws_dynamodb_1.StreamViewType.NEW_AND_OLD_IMAGES,
|
|
788
823
|
encryption: aws_dynamodb_1.TableEncryption.DEFAULT,
|
|
789
|
-
removalPolicy
|
|
824
|
+
removalPolicy,
|
|
790
825
|
...(context.isProjectUsingDataStore() ? { timeToLiveAttribute: '_ttl' } : undefined),
|
|
791
826
|
});
|
|
792
827
|
const cfnTable = table.node.defaultChild;
|
|
@@ -838,60 +873,6 @@ class ModelTransformer extends graphql_transformer_core_1.TransformerModelBase {
|
|
|
838
873
|
context.dataSources.add(def, dataSource);
|
|
839
874
|
this.datasourceMap[def.name.value] = dataSource;
|
|
840
875
|
}
|
|
841
|
-
createIAMRole(context, def, stack, tableName) {
|
|
842
|
-
const roleName = context.resourceHelper.generateIAMRoleName(graphql_transformer_common_1.ModelResourceIDs.ModelTableIAMRoleID(def.name.value));
|
|
843
|
-
const role = new iam.Role(stack, graphql_transformer_common_1.ModelResourceIDs.ModelTableIAMRoleID(def.name.value), {
|
|
844
|
-
roleName: roleName,
|
|
845
|
-
assumedBy: new iam.ServicePrincipal('appsync.amazonaws.com'),
|
|
846
|
-
});
|
|
847
|
-
const amplifyDataStoreTableName = context.resourceHelper.generateTableName(graphql_transformer_common_1.SyncResourceIDs.syncTableName);
|
|
848
|
-
role.attachInlinePolicy(new iam.Policy(stack, 'DynamoDBAccess', {
|
|
849
|
-
statements: [
|
|
850
|
-
new iam.PolicyStatement({
|
|
851
|
-
effect: iam.Effect.ALLOW,
|
|
852
|
-
actions: [
|
|
853
|
-
'dynamodb:BatchGetItem',
|
|
854
|
-
'dynamodb:BatchWriteItem',
|
|
855
|
-
'dynamodb:PutItem',
|
|
856
|
-
'dynamodb:DeleteItem',
|
|
857
|
-
'dynamodb:GetItem',
|
|
858
|
-
'dynamodb:Scan',
|
|
859
|
-
'dynamodb:Query',
|
|
860
|
-
'dynamodb:UpdateItem',
|
|
861
|
-
],
|
|
862
|
-
resources: [
|
|
863
|
-
cdk.Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}', {
|
|
864
|
-
tablename: tableName,
|
|
865
|
-
}),
|
|
866
|
-
cdk.Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*', {
|
|
867
|
-
tablename: tableName,
|
|
868
|
-
}),
|
|
869
|
-
...(context.isProjectUsingDataStore()
|
|
870
|
-
? [
|
|
871
|
-
cdk.Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}', {
|
|
872
|
-
tablename: amplifyDataStoreTableName,
|
|
873
|
-
}),
|
|
874
|
-
cdk.Fn.sub('arn:aws:dynamodb:${AWS::Region}:${AWS::AccountId}:table/${tablename}/*', {
|
|
875
|
-
tablename: amplifyDataStoreTableName,
|
|
876
|
-
}),
|
|
877
|
-
]
|
|
878
|
-
: []),
|
|
879
|
-
],
|
|
880
|
-
}),
|
|
881
|
-
],
|
|
882
|
-
}));
|
|
883
|
-
const syncConfig = graphql_transformer_core_1.SyncUtils.getSyncConfig(context, def.name.value);
|
|
884
|
-
if (syncConfig && graphql_transformer_core_1.SyncUtils.isLambdaSyncConfig(syncConfig)) {
|
|
885
|
-
role.attachInlinePolicy(graphql_transformer_core_1.SyncUtils.createSyncLambdaIAMPolicy(stack, syncConfig.LambdaConflictHandler.name, syncConfig.LambdaConflictHandler.region));
|
|
886
|
-
}
|
|
887
|
-
return role;
|
|
888
|
-
}
|
|
889
|
-
ensureModelSortDirectionEnum(ctx) {
|
|
890
|
-
if (!ctx.output.hasType('ModelSortDirection')) {
|
|
891
|
-
const modelSortDirection = (0, graphql_types_1.makeModelSortDirectionEnumObject)();
|
|
892
|
-
ctx.output.addEnum(modelSortDirection);
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
876
|
}
|
|
896
877
|
exports.ModelTransformer = ModelTransformer;
|
|
897
878
|
//# sourceMappingURL=graphql-model-transformer.js.map
|