@aws-amplify/graphql-model-transformer 0.11.0-beta.0 → 0.13.0-beta.0

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.
@@ -1261,4 +1261,106 @@ describe('ModelTransformer: ', () => {
1261
1261
  expect(field.directives!.some(dir => dir.name.value === 'aws_api_key')).toEqual(true);
1262
1262
  }
1263
1263
  });
1264
+
1265
+ it('maps model resolvers to specified stack', () => {
1266
+ const inputSchema = /* GraphQL */ `
1267
+ type Blog @model {
1268
+ id: ID!
1269
+ name: String!
1270
+ }
1271
+ `;
1272
+ const transformer = new GraphQLTransform({
1273
+ transformers: [new ModelTransformer()],
1274
+ stackMapping: {
1275
+ CreateBlogResolver: 'myCustomStack1',
1276
+ UpdateBlogResolver: 'myCustomStack2',
1277
+ },
1278
+ });
1279
+
1280
+ const result = transformer.transform(inputSchema);
1281
+ expect(Object.keys(result.stacks.myCustomStack1.Resources!).includes('CreateBlogResolver')).toBe(true);
1282
+ expect(Object.keys(result.stacks.myCustomStack2.Resources!).includes('UpdateBlogResolver')).toBe(true);
1283
+
1284
+ expect(Object.keys(result.stacks.Blog.Resources!).includes('CreateBlogResolver')).toBe(false);
1285
+ expect(Object.keys(result.stacks.Blog.Resources!).includes('UpdateBlogResolver')).toBe(false);
1286
+ });
1287
+
1288
+ it('allow aws_lambda to pass through', () => {
1289
+ const validSchema = `
1290
+ type Todo @aws_lambda {
1291
+ id: ID!
1292
+ name: String!
1293
+ description: String
1294
+ }
1295
+
1296
+ schema {
1297
+ query: Query
1298
+ }
1299
+
1300
+ type Query {
1301
+ todo: Todo @aws_lambda
1302
+ }`;
1303
+ const transformer = new GraphQLTransform({
1304
+ transformers: [new ModelTransformer()],
1305
+ });
1306
+ const out = transformer.transform(validSchema);
1307
+ expect(out).toBeDefined();
1308
+
1309
+ const schema = parse(out.schema);
1310
+ validateModelSchema(schema);
1311
+ });
1312
+
1313
+ it('handles custom subscriptions passed as strings', () => {
1314
+ const validSchema = `type Post @model(subscriptions: {
1315
+ onCreate: "onFeedCreated",
1316
+ onUpdate: "onFeedUpdated",
1317
+ onDelete: "onFeedDeleted"
1318
+ }) {
1319
+ id: ID!
1320
+ }
1321
+ `;
1322
+ const transformer = new GraphQLTransform({
1323
+ transformers: [new ModelTransformer()],
1324
+ featureFlags,
1325
+ });
1326
+ const out = transformer.transform(validSchema);
1327
+ expect(out).toBeDefined();
1328
+ const definition = out.schema;
1329
+ expect(definition).toBeDefined();
1330
+ const parsed = parse(definition);
1331
+ validateModelSchema(parsed);
1332
+
1333
+ const subscriptionType = getObjectType(parsed, 'Subscription');
1334
+ expect(subscriptionType).toBeDefined();
1335
+ expect(subscriptionType!.fields!.length).toEqual(3);
1336
+ expectFields(subscriptionType!, ['onFeedCreated', 'onFeedUpdated', 'onFeedDeleted']);
1337
+ });
1338
+
1339
+ it('should generate id for the update input object', async () => {
1340
+ const validSchema = `
1341
+ type Todo @model {
1342
+ uid: String!
1343
+ username: String
1344
+ }
1345
+ `;
1346
+
1347
+ const transformer = new GraphQLTransform({
1348
+ transformers: [new ModelTransformer()],
1349
+ featureFlags,
1350
+ });
1351
+ const out = transformer.transform(validSchema);
1352
+ expect(out).toBeDefined();
1353
+ const definition = out.schema;
1354
+ expect(definition).toBeDefined();
1355
+
1356
+ const parsed = parse(definition);
1357
+ validateModelSchema(parsed);
1358
+
1359
+ const updateTodoInput = getInputType(parsed, 'UpdateTodoInput');
1360
+ expect(updateTodoInput).toBeDefined();
1361
+
1362
+ expectFieldsOnInputType(updateTodoInput!, ['id']);
1363
+ const updateTodoIdField = getFieldOnInputType(updateTodoInput!, 'id');
1364
+ expect(updateTodoIdField.type.kind).toBe('NonNullType');
1365
+ });
1264
1366
  });
@@ -9,6 +9,7 @@ import {
9
9
  FieldWrapper,
10
10
  InputObjectDefinitionWrapper,
11
11
  ObjectDefinitionWrapper,
12
+ getFieldNameFor,
12
13
  } from '@aws-amplify/graphql-transformer-core';
13
14
  import {
14
15
  AppSyncDataSourceType,
@@ -48,7 +49,6 @@ import {
48
49
  makeNonNullType,
49
50
  makeValueNode,
50
51
  ModelResourceIDs,
51
- plurality,
52
52
  ResolverResourceIDs,
53
53
  ResourceConstants,
54
54
  SyncResourceIDs,
@@ -227,26 +227,39 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
227
227
  const directiveWrapped: DirectiveWrapper = new DirectiveWrapper(directive);
228
228
  const options = directiveWrapped.getArguments({
229
229
  queries: {
230
- get: toCamelCase(['get', typeName]),
231
- list: toCamelCase(['list', plurality(typeName, true)]),
232
- ...(ctx.isProjectUsingDataStore() ? { sync: toCamelCase(['sync', plurality(typeName, true)]) } : undefined),
230
+ get: getFieldNameFor('get', typeName),
231
+ list: getFieldNameFor('list', typeName),
232
+ ...(ctx.isProjectUsingDataStore() ? { sync: getFieldNameFor('sync', typeName) } : undefined),
233
233
  },
234
234
  mutations: {
235
- create: toCamelCase(['create', typeName]),
236
- update: toCamelCase(['update', typeName]),
237
- delete: toCamelCase(['delete', typeName]),
235
+ create: getFieldNameFor('create', typeName),
236
+ update: getFieldNameFor('update', typeName),
237
+ delete: getFieldNameFor('delete', typeName),
238
238
  },
239
239
  subscriptions: {
240
240
  level: SubscriptionLevel.on,
241
- onCreate: [this.ensureValidSubscriptionName(toCamelCase(['onCreate', typeName]))],
242
- onDelete: [this.ensureValidSubscriptionName(toCamelCase(['onDelete', typeName]))],
243
- onUpdate: [this.ensureValidSubscriptionName(toCamelCase(['onUpdate', typeName]))],
241
+ onCreate: [getFieldNameFor('onCreate', typeName)],
242
+ onDelete: [getFieldNameFor('onDelete', typeName)],
243
+ onUpdate: [getFieldNameFor('onUpdate', typeName)],
244
244
  },
245
245
  timestamps: {
246
246
  createdAt: 'createdAt',
247
247
  updatedAt: 'updatedAt',
248
248
  },
249
249
  });
250
+
251
+ if (options.subscriptions?.onCreate && !Array.isArray(options.subscriptions.onCreate)) {
252
+ options.subscriptions.onCreate = [options.subscriptions.onCreate];
253
+ }
254
+
255
+ if (options.subscriptions?.onDelete && !Array.isArray(options.subscriptions.onDelete)) {
256
+ options.subscriptions.onDelete = [options.subscriptions.onDelete];
257
+ }
258
+
259
+ if (options.subscriptions?.onUpdate && !Array.isArray(options.subscriptions.onUpdate)) {
260
+ options.subscriptions.onUpdate = [options.subscriptions.onUpdate];
261
+ }
262
+
250
263
  this.modelDirectiveConfig.set(typeName, options);
251
264
  this.typesWithModelDirective.add(typeName);
252
265
  };
@@ -311,8 +324,9 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
311
324
  for (let type of this.typesWithModelDirective) {
312
325
  const def = context.output.getObject(type)!;
313
326
  // This name is used by the mock functionality. Changing this can break mock.
314
- const tableLogicalName = `${def!.name.value}Table`;
315
- const stack = context.stackManager.getStackFor(tableLogicalName, def!.name.value);
327
+ const tableBaseName = context.resourceHelper.getModelNameMapping(def!.name.value);
328
+ const tableLogicalName = ModelResourceIDs.ModelTableResourceID(tableBaseName);
329
+ const stack = context.stackManager.getStackFor(tableLogicalName, tableBaseName);
316
330
 
317
331
  this.createModelTable(stack, def!, context);
318
332
 
@@ -341,7 +355,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
341
355
  `${query.typeName}.${query.fieldName}.{slotName}.{slotIndex}.req.vtl`,
342
356
  ),
343
357
  );
344
- resolver.mapToStack(stack);
358
+ resolver.mapToStack(context.stackManager.getStackFor(query.resolverLogicalId, def!.name.value));
345
359
  context.resolvers.addResolver(query.typeName, query.fieldName, resolver);
346
360
  }
347
361
 
@@ -368,7 +382,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
368
382
  `${mutation.typeName}.${mutation.fieldName}.{slotName}.{slotIndex}.req.vtl`,
369
383
  ),
370
384
  );
371
- resolver.mapToStack(stack);
385
+ resolver.mapToStack(context.stackManager.getStackFor(mutation.resolverLogicalId, def!.name.value));
372
386
  context.resolvers.addResolver(mutation.typeName, mutation.fieldName, resolver);
373
387
  }
374
388
 
@@ -416,7 +430,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
416
430
  `${subscription.typeName}.${subscription.fieldName}.{slotName}.{slotIndex}.req.vtl`,
417
431
  ),
418
432
  );
419
- resolver.mapToStack(stack);
433
+ resolver.mapToStack(context.stackManager.getStackFor(subscription.resolverLogicalId, def!.name.value));
420
434
  context.resolvers.addResolver(subscription.typeName, subscription.fieldName, resolver);
421
435
  }
422
436
  }
@@ -1136,8 +1150,8 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
1136
1150
  };
1137
1151
 
1138
1152
  private createModelTable(stack: cdk.Stack, def: ObjectTypeDefinitionNode, context: TransformerContextProvider) {
1139
- const tableLogicalName = `${def!.name.value}Table`;
1140
- const tableName = context.resourceHelper.generateResourceName(def!.name.value);
1153
+ const tableLogicalName = ModelResourceIDs.ModelTableResourceID(def!.name.value);
1154
+ const tableName = context.resourceHelper.generateTableName(def!.name.value);
1141
1155
 
1142
1156
  // Add parameters.
1143
1157
  const env = context.stackManager.getParameter(ResourceConstants.PARAMETERS.Env) as cdk.CfnParameter;
@@ -1244,7 +1258,8 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
1244
1258
  });
1245
1259
 
1246
1260
  const role = this.createIAMRole(context, def, stack, tableName);
1247
- this.createModelTableDataSource(def, context, table, stack, role);
1261
+ const tableDataSourceLogicalName = `${def!.name.value}Table`;
1262
+ this.createModelTableDataSource(def, context, table, stack, role, tableDataSourceLogicalName);
1248
1263
  }
1249
1264
 
1250
1265
  private createModelTableDataSource(
@@ -1253,13 +1268,13 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
1253
1268
  table: Table,
1254
1269
  stack: cdk.Stack,
1255
1270
  role: iam.Role,
1271
+ dataSourceLogicalName: string,
1256
1272
  ) {
1257
- const tableLogicalName = `${def!.name.value}Table`;
1258
1273
  const datasourceRoleLogicalID = ModelResourceIDs.ModelTableDataSourceID(def!.name.value);
1259
1274
  const dataSource = context.api.host.addDynamoDbDataSource(
1260
1275
  datasourceRoleLogicalID,
1261
1276
  table,
1262
- { name: tableLogicalName, serviceRole: role },
1277
+ { name: dataSourceLogicalName, serviceRole: role },
1263
1278
  stack,
1264
1279
  );
1265
1280
 
@@ -1269,7 +1284,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
1269
1284
  if (context.isProjectUsingDataStore()) {
1270
1285
  const datasourceDynamoDb = cfnDataSource.dynamoDbConfig as any;
1271
1286
  datasourceDynamoDb.deltaSyncConfig = {
1272
- deltaSyncTableName: context.resourceHelper.generateResourceName(SyncResourceIDs.syncTableName),
1287
+ deltaSyncTableName: context.resourceHelper.generateTableName(SyncResourceIDs.syncTableName),
1273
1288
  deltaSyncTableTtl: '30',
1274
1289
  baseTableTtl: '43200',
1275
1290
  };
@@ -1296,7 +1311,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
1296
1311
  assumedBy: new iam.ServicePrincipal('appsync.amazonaws.com'),
1297
1312
  });
1298
1313
 
1299
- const amplifyDataStoreTableName = context.resourceHelper.generateResourceName(SyncResourceIDs.syncTableName);
1314
+ const amplifyDataStoreTableName = context.resourceHelper.generateTableName(SyncResourceIDs.syncTableName);
1300
1315
  role.attachInlinePolicy(
1301
1316
  new iam.Policy(stack, 'DynamoDBAccess', {
1302
1317
  statements: [
@@ -44,8 +44,10 @@ export const makeUpdateInputField = (
44
44
  // make all the fields optional
45
45
  input.fields.forEach(f => f.makeNullable());
46
46
 
47
- // Add id field and make it optional
48
- if (hasIdField) {
47
+ if (!hasIdField) {
48
+ // Add id field and make it optional
49
+ input.addField(InputFieldWrapper.create('id', 'ID', false));
50
+ } else {
49
51
  const idField = input.fields.find(f => f.name === 'id');
50
52
  if (idField) {
51
53
  idField.makeNonNullable();
@@ -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, false, true));
16
+ outputType.addField(FieldWrapper.create('items', type.name.value, true, true));
17
17
  outputType.addField(FieldWrapper.create('nextToken', 'String', true, false));
18
18
 
19
19
  if (isSyncEnabled) {
@@ -18,6 +18,7 @@ import {
18
18
  toJson,
19
19
  printBlock,
20
20
  } from 'graphql-mapping-template';
21
+ import { setArgs } from 'graphql-transformer-common';
21
22
  import { ModelDirectiveConfiguration } from '../graphql-model-transformer';
22
23
  import { generateConditionSlot } from './common';
23
24
 
@@ -34,10 +35,11 @@ export const generateUpdateRequestTemplate = (modelName: string, isSyncEnabled:
34
35
  keyFields.push(str('_lastChangedAt'));
35
36
  }
36
37
  const statements: Expression[] = [
38
+ setArgs,
37
39
  comment('Set the default values to put request'),
38
40
  set(ref('mergedValues'), methodCall(ref('util.defaultIfNull'), ref('ctx.stash.defaultValues'), obj({}))),
39
41
  comment('copy the values from input'),
40
- qref(methodCall(ref('mergedValues.putAll'), methodCall(ref('util.defaultIfNull'), ref('ctx.args.input'), obj({})))),
42
+ qref(methodCall(ref('mergedValues.putAll'), methodCall(ref('util.defaultIfNull'), ref('args.input'), obj({})))),
41
43
  comment('set the typename'),
42
44
  // Initialize object as placeholder for expressions
43
45
  comment('Initialize the vars for creating ddb expression'),
@@ -50,7 +52,7 @@ export const generateUpdateRequestTemplate = (modelName: string, isSyncEnabled:
50
52
  ifElse(
51
53
  ref(objectKeyVariable),
52
54
  set(ref('Key'), ref(objectKeyVariable)),
53
- set(ref('Key'), obj({ id: methodCall(ref('util.dynamodb.toDynamoDB'), ref('ctx.args.input.id')) })),
55
+ set(ref('Key'), obj({ id: methodCall(ref('util.dynamodb.toDynamoDB'), ref('args.input.id')) })),
54
56
  ),
55
57
  comment('Model key'),
56
58
  ifElse(
@@ -121,7 +123,7 @@ export const generateUpdateRequestTemplate = (modelName: string, isSyncEnabled:
121
123
  // add conditions
122
124
  // set key the condition
123
125
  ...generateKeyConditionTemplate(true),
124
- iff(ref('context.args.condition'), qref(methodCall(ref('ctx.stash.conditions.add'), ref('context.args.condition')))),
126
+ iff(ref('args.condition'), qref(methodCall(ref('ctx.stash.conditions.add'), ref('args.condition')))),
125
127
  // Generate conditions
126
128
  generateConditionSlot('ctx.stash.conditions', 'Conditions'),
127
129
  set(
@@ -131,7 +133,7 @@ export const generateUpdateRequestTemplate = (modelName: string, isSyncEnabled:
131
133
  operation: str('UpdateItem'),
132
134
  key: ref('Key'),
133
135
  update: ref('update'),
134
- ...(isSyncEnabled && { _version: ref('util.defaultIfNull($ctx.args.input["_version"], "0")') }),
136
+ ...(isSyncEnabled && { _version: ref('util.defaultIfNull($args.input["_version"], 0)') }),
135
137
  }),
136
138
  ),
137
139
  iff(
@@ -152,11 +154,12 @@ export const generateUpdateRequestTemplate = (modelName: string, isSyncEnabled:
152
154
  */
153
155
  export const generateCreateRequestTemplate = (modelName: string): string => {
154
156
  const statements: Expression[] = [
157
+ setArgs,
155
158
  // Generate conditions
156
159
  comment('Set the default values to put request'),
157
160
  set(ref('mergedValues'), methodCall(ref('util.defaultIfNull'), ref('ctx.stash.defaultValues'), obj({}))),
158
161
  comment('copy the values from input'),
159
- qref(methodCall(ref('mergedValues.putAll'), methodCall(ref('util.defaultIfNull'), ref('ctx.args.input'), obj({})))),
162
+ qref(methodCall(ref('mergedValues.putAll'), methodCall(ref('util.defaultIfNull'), ref('args.input'), obj({})))),
160
163
  comment('set the typename'),
161
164
  qref(methodCall(ref('mergedValues.put'), str('__typename'), str(modelName))),
162
165
 
@@ -172,7 +175,7 @@ export const generateCreateRequestTemplate = (modelName: string): string => {
172
175
  ),
173
176
 
174
177
  // add conditions
175
- iff(ref('context.args.condition'), qref(methodCall(ref('ctx.stash.conditions.add'), ref('context.args.condition')))),
178
+ iff(ref('args.condition'), qref(methodCall(ref('ctx.stash.conditions.add'), ref('args.condition')))),
176
179
  // key conditions
177
180
  ...generateKeyConditionTemplate(false),
178
181
  // Generate conditions
@@ -245,6 +248,7 @@ export const generateCreateInitSlotTemplate = (name: string, modelConfig: ModelD
245
248
  */
246
249
  export const generateDeleteRequestTemplate = (isSyncEnabled: boolean): string => {
247
250
  const statements: Expression[] = [
251
+ setArgs,
248
252
  set(
249
253
  ref('DeleteRequest'),
250
254
  obj({
@@ -255,11 +259,11 @@ export const generateDeleteRequestTemplate = (isSyncEnabled: boolean): string =>
255
259
  ifElse(
256
260
  ref('ctx.stash.metadata.modelObjectKey'),
257
261
  set(ref('Key'), ref('ctx.stash.metadata.modelObjectKey')),
258
- set(ref('Key'), obj({ id: methodCall(ref('util.dynamodb.toDynamoDB'), ref('ctx.args.input.id')) })),
262
+ set(ref('Key'), obj({ id: methodCall(ref('util.dynamodb.toDynamoDB'), ref('args.input.id')) })),
259
263
  ),
260
264
  qref(methodCall(ref('DeleteRequest.put'), str('key'), ref('Key'))),
261
265
  ...generateKeyConditionTemplate(true),
262
- iff(ref('context.args.condition'), qref(methodCall(ref('ctx.stash.conditions.add'), ref('context.args.condition')))),
266
+ iff(ref('args.condition'), qref(methodCall(ref('ctx.stash.conditions.add'), ref('args.condition')))),
263
267
  // Generate conditions
264
268
  generateConditionSlot('ctx.stash.conditions', 'Conditions'),
265
269
  iff(
@@ -271,9 +275,7 @@ export const generateDeleteRequestTemplate = (isSyncEnabled: boolean): string =>
271
275
  ),
272
276
  ];
273
277
  if (isSyncEnabled) {
274
- statements.push(
275
- qref(methodCall(ref('DeleteRequest.put'), str('_version'), ref('util.defaultIfNull($ctx.args.input["_version"], "0")'))),
276
- );
278
+ statements.push(qref(methodCall(ref('DeleteRequest.put'), str('_version'), ref('util.defaultIfNull($args.input["_version"], 0)'))));
277
279
  }
278
280
 
279
281
  statements.push(toJson(ref('DeleteRequest')));
@@ -21,7 +21,7 @@ import {
21
21
  forEach,
22
22
  nul,
23
23
  } from 'graphql-mapping-template';
24
- import { ResourceConstants } from 'graphql-transformer-common';
24
+ import { ResourceConstants, setArgs } from 'graphql-transformer-common';
25
25
  const authFilter = ref('ctx.stash.authFilter');
26
26
 
27
27
  /**
@@ -101,7 +101,8 @@ export const generateListRequestTemplate = (): string => {
101
101
  const modelQueryObj = 'ctx.stash.modelQueryExpression';
102
102
  const indexNameVariable = 'ctx.stash.metadata.index';
103
103
  const expression = compoundExpression([
104
- set(ref('limit'), methodCall(ref(`util.defaultIfNull`), ref('context.args.limit'), int(100))),
104
+ setArgs,
105
+ set(ref('limit'), methodCall(ref(`util.defaultIfNull`), ref('args.limit'), int(100))),
105
106
  set(
106
107
  ref(requestVariable),
107
108
  obj({
@@ -109,14 +110,14 @@ export const generateListRequestTemplate = (): string => {
109
110
  limit: ref('limit'),
110
111
  }),
111
112
  ),
112
- iff(ref('context.args.nextToken'), set(ref(`${requestVariable}.nextToken`), ref('context.args.nextToken'))),
113
+ iff(ref('args.nextToken'), set(ref(`${requestVariable}.nextToken`), ref('args.nextToken'))),
113
114
  ifElse(
114
115
  not(isNullOrEmpty(authFilter)),
115
116
  compoundExpression([
116
117
  set(ref('filter'), authFilter),
117
- iff(not(isNullOrEmpty(ref('ctx.args.filter'))), set(ref('filter'), obj({ and: list([ref('filter'), ref('ctx.args.filter')]) }))),
118
+ iff(not(isNullOrEmpty(ref('args.filter'))), set(ref('filter'), obj({ and: list([ref('filter'), ref('args.filter')]) }))),
118
119
  ]),
119
- iff(not(isNullOrEmpty(ref('ctx.args.filter'))), set(ref('filter'), ref('ctx.args.filter'))),
120
+ iff(not(isNullOrEmpty(ref('args.filter'))), set(ref('filter'), ref('args.filter'))),
120
121
  ),
121
122
  iff(
122
123
  not(isNullOrEmpty(ref('filter'))),
@@ -129,8 +130,8 @@ export const generateListRequestTemplate = (): string => {
129
130
  not(methodCall(ref('util.isNullOrBlank'), ref('filterExpression.expression'))),
130
131
  compoundExpression([
131
132
  iff(
132
- equals(methodCall(ref('filterEpression.expressionValues.size')), int(0)),
133
- qref(methodCall(ref('filterEpression.remove'), str('expressionValues'))),
133
+ equals(methodCall(ref('filterExpression.expressionValues.size')), int(0)),
134
+ qref(methodCall(ref('filterExpression.remove'), str('expressionValues'))),
134
135
  ),
135
136
  set(ref(`${requestVariable}.filter`), ref(`filterExpression`)),
136
137
  ]),
@@ -146,7 +147,7 @@ export const generateListRequestTemplate = (): string => {
146
147
  qref(methodCall(ref(`${requestVariable}.put`), str('operation'), str('Query'))),
147
148
  qref(methodCall(ref(`${requestVariable}.put`), str('query'), ref(modelQueryObj))),
148
149
  ifElse(
149
- and([not(methodCall(ref('util.isNull'), ref('ctx.args.sortDirection'))), equals(ref('ctx.args.sortDirection'), str('DESC'))]),
150
+ and([not(methodCall(ref('util.isNull'), ref('args.sortDirection'))), equals(ref('args.sortDirection'), str('DESC'))]),
150
151
  set(ref(`${requestVariable}.scanIndexForward`), bool(false)),
151
152
  set(ref(`${requestVariable}.scanIndexForward`), bool(true)),
152
153
  ),
@@ -162,13 +163,14 @@ export const generateListRequestTemplate = (): string => {
162
163
  export const generateSyncRequestTemplate = (): string => {
163
164
  return printBlock('Sync Request template')(
164
165
  compoundExpression([
166
+ setArgs,
165
167
  ifElse(
166
168
  not(isNullOrEmpty(authFilter)),
167
169
  compoundExpression([
168
170
  set(ref('filter'), authFilter),
169
- iff(not(isNullOrEmpty(ref('ctx.args.filter'))), set(ref('filter'), obj({ and: list([ref('filter'), ref('ctx.args.filter')]) }))),
171
+ iff(not(isNullOrEmpty(ref('args.filter'))), set(ref('filter'), obj({ and: list([ref('filter'), ref('args.filter')]) }))),
170
172
  ]),
171
- iff(not(isNullOrEmpty(ref('ctx.args.filter'))), set(ref('filter'), ref('ctx.args.filter'))),
173
+ iff(not(isNullOrEmpty(ref('args.filter'))), set(ref('filter'), ref('args.filter'))),
172
174
  ),
173
175
  iff(
174
176
  not(isNullOrEmpty(ref('filter'))),
@@ -181,8 +183,8 @@ export const generateSyncRequestTemplate = (): string => {
181
183
  not(methodCall(ref('util.isNullOrBlank'), ref('filterExpression.expression'))),
182
184
  compoundExpression([
183
185
  iff(
184
- equals(methodCall(ref('filterEpression.expressionValues.size')), int(0)),
185
- qref(methodCall(ref('filterEpression.remove'), str('expressionValues'))),
186
+ equals(methodCall(ref('filterExpression.expressionValues.size')), int(0)),
187
+ qref(methodCall(ref('filterExpression.remove'), str('expressionValues'))),
186
188
  ),
187
189
  set(ref('filter'), ref('filterExpression')),
188
190
  ]),
@@ -193,9 +195,9 @@ export const generateSyncRequestTemplate = (): string => {
193
195
  version: str('2018-05-29'),
194
196
  operation: str('Sync'),
195
197
  filter: ifElse(ref('filter'), ref('util.toJson($filter)'), nul()),
196
- limit: ref(`util.defaultIfNull($ctx.args.limit, ${ResourceConstants.DEFAULT_SYNC_QUERY_PAGE_LIMIT})`),
197
- lastSync: ref('util.toJson($util.defaultIfNull($ctx.args.lastSync, null))'),
198
- nextToken: ref('util.toJson($util.defaultIfNull($ctx.args.nextToken, null))'),
198
+ limit: ref(`util.defaultIfNull($args.limit, ${ResourceConstants.DEFAULT_SYNC_QUERY_PAGE_LIMIT})`),
199
+ lastSync: ref('util.toJson($util.defaultIfNull($args.lastSync, null))'),
200
+ nextToken: ref('util.toJson($util.defaultIfNull($args.nextToken, null))'),
199
201
  }),
200
202
  ]),
201
203
  );
package/tsconfig.json CHANGED
@@ -6,6 +6,8 @@
6
6
  },
7
7
  "references": [
8
8
  {"path": "../amplify-graphql-transformer-interfaces"},
9
- {"path": "../graphql-mapping-template"}
9
+ {"path": "../graphql-mapping-template"},
10
+ {"path": "../amplify-graphql-transformer-core"},
11
+ {"path": "../graphql-transformer-common"},
10
12
  ]
11
13
  }