@aws-amplify/graphql-model-transformer 0.16.2-alpha.7 → 0.16.3-delta-table-improvements.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.
- package/CHANGELOG.md +16 -0
- package/lib/graphql-model-transformer.d.ts +3 -0
- package/lib/graphql-model-transformer.d.ts.map +1 -1
- package/lib/graphql-model-transformer.js +45 -4
- package/lib/graphql-model-transformer.js.map +1 -1
- package/lib/resolvers/mutation.d.ts +3 -3
- package/lib/resolvers/mutation.d.ts.map +1 -1
- package/lib/resolvers/mutation.js +15 -3
- package/lib/resolvers/mutation.js.map +1 -1
- package/lib/resolvers/query.d.ts +1 -1
- package/lib/resolvers/query.d.ts.map +1 -1
- package/lib/resolvers/query.js +30 -25
- package/lib/resolvers/query.js.map +1 -1
- package/package.json +6 -6
- package/src/__tests__/__snapshots__/model-transformer.test.ts.snap +4 -20
- package/src/__tests__/model-transformer.test.ts +26 -0
- package/src/graphql-model-transformer.ts +67 -4
- package/src/resolvers/mutation.ts +15 -3
- package/src/resolvers/query.ts +67 -46
- package/tsconfig.tsbuildinfo +1 -1
package/lib/resolvers/query.js
CHANGED
|
@@ -52,7 +52,7 @@ const generateListRequestTemplate = () => {
|
|
|
52
52
|
const indexNameVariable = 'ctx.stash.metadata.index';
|
|
53
53
|
const expression = (0, graphql_mapping_template_1.compoundExpression)([
|
|
54
54
|
graphql_transformer_common_1.setArgs,
|
|
55
|
-
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('limit'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)(
|
|
55
|
+
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('limit'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.defaultIfNull'), (0, graphql_mapping_template_1.ref)('args.limit'), (0, graphql_mapping_template_1.int)(100))),
|
|
56
56
|
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)(requestVariable), (0, graphql_mapping_template_1.obj)({
|
|
57
57
|
version: (0, graphql_mapping_template_1.str)('2018-05-29'),
|
|
58
58
|
limit: (0, graphql_mapping_template_1.ref)('limit'),
|
|
@@ -63,11 +63,11 @@ const generateListRequestTemplate = () => {
|
|
|
63
63
|
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('args.filter'))), (0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.obj)({ and: (0, graphql_mapping_template_1.list)([(0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('args.filter')]) }))),
|
|
64
64
|
]), (0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('args.filter'))), (0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('args.filter')))),
|
|
65
65
|
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('filter'))), (0, graphql_mapping_template_1.compoundExpression)([
|
|
66
|
-
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)(
|
|
66
|
+
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filterExpression'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.parseJson'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.transform.toDynamoDBFilterExpression'), (0, graphql_mapping_template_1.ref)('filter')))),
|
|
67
67
|
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('filterExpression')), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.error'), (0, graphql_mapping_template_1.str)('Unable to process the filter expression'), (0, graphql_mapping_template_1.str)('Unrecognized Filter'))),
|
|
68
68
|
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.isNullOrBlank'), (0, graphql_mapping_template_1.ref)('filterExpression.expression'))), (0, graphql_mapping_template_1.compoundExpression)([
|
|
69
69
|
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.equals)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('filterExpression.expressionValues.size')), (0, graphql_mapping_template_1.int)(0)), (0, graphql_mapping_template_1.qref)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('filterExpression.remove'), (0, graphql_mapping_template_1.str)('expressionValues')))),
|
|
70
|
-
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)(`${requestVariable}.filter`), (0, graphql_mapping_template_1.ref)(
|
|
70
|
+
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)(`${requestVariable}.filter`), (0, graphql_mapping_template_1.ref)('filterExpression')),
|
|
71
71
|
])),
|
|
72
72
|
])),
|
|
73
73
|
(0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.and)([
|
|
@@ -84,29 +84,34 @@ const generateListRequestTemplate = () => {
|
|
|
84
84
|
return (0, graphql_mapping_template_1.printBlock)('List Request')(expression);
|
|
85
85
|
};
|
|
86
86
|
exports.generateListRequestTemplate = generateListRequestTemplate;
|
|
87
|
-
const generateSyncRequestTemplate = () =>
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
(0, graphql_mapping_template_1.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
(0, graphql_mapping_template_1.
|
|
95
|
-
|
|
96
|
-
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.
|
|
97
|
-
|
|
98
|
-
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('filterExpression')),
|
|
99
|
-
])),
|
|
87
|
+
const generateSyncRequestTemplate = (hasCustomPrimaryKey, partitionKeyName) => (0, graphql_mapping_template_1.printBlock)('Sync Request template')((0, graphql_mapping_template_1.compoundExpression)([
|
|
88
|
+
graphql_transformer_common_1.setArgs,
|
|
89
|
+
(0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)(authFilter)), (0, graphql_mapping_template_1.compoundExpression)([
|
|
90
|
+
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), authFilter),
|
|
91
|
+
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('args.filter'))), (0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.obj)({ and: (0, graphql_mapping_template_1.list)([(0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('args.filter')]) }))),
|
|
92
|
+
]), (0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('args.filter'))), (0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('args.filter')))),
|
|
93
|
+
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.isNullOrEmpty)((0, graphql_mapping_template_1.ref)('filter'))), (0, graphql_mapping_template_1.compoundExpression)([
|
|
94
|
+
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filterExpression'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.parseJson'), (0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.transform.toDynamoDBFilterExpression'), (0, graphql_mapping_template_1.ref)('filter')))),
|
|
95
|
+
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.not)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('util.isNullOrBlank'), (0, graphql_mapping_template_1.ref)('filterExpression.expression'))), (0, graphql_mapping_template_1.compoundExpression)([
|
|
96
|
+
(0, graphql_mapping_template_1.iff)((0, graphql_mapping_template_1.equals)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('filterExpression.expressionValues.size')), (0, graphql_mapping_template_1.int)(0)), (0, graphql_mapping_template_1.qref)((0, graphql_mapping_template_1.methodCall)((0, graphql_mapping_template_1.ref)('filterExpression.remove'), (0, graphql_mapping_template_1.str)('expressionValues')))),
|
|
97
|
+
(0, graphql_mapping_template_1.set)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('filterExpression')),
|
|
100
98
|
])),
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
99
|
+
])),
|
|
100
|
+
(0, graphql_mapping_template_1.obj)({
|
|
101
|
+
version: (0, graphql_mapping_template_1.str)('2018-05-29'),
|
|
102
|
+
operation: (0, graphql_mapping_template_1.str)('Sync'),
|
|
103
|
+
filter: (0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.ref)('filter'), (0, graphql_mapping_template_1.ref)('util.toJson($filter)'), (0, graphql_mapping_template_1.nul)(), true),
|
|
104
|
+
limit: (0, graphql_mapping_template_1.ref)(`util.defaultIfNull($args.limit, ${graphql_transformer_common_1.ResourceConstants.DEFAULT_SYNC_QUERY_PAGE_LIMIT})`),
|
|
105
|
+
lastSync: (0, graphql_mapping_template_1.ref)('util.toJson($util.defaultIfNull($args.lastSync, null))'),
|
|
106
|
+
nextToken: (0, graphql_mapping_template_1.ref)('util.toJson($util.defaultIfNull($args.nextToken, null))'),
|
|
107
|
+
...(hasCustomPrimaryKey && {
|
|
108
|
+
basePartitionKey: (0, graphql_mapping_template_1.ifElse)((0, graphql_mapping_template_1.and)([
|
|
109
|
+
(0, graphql_mapping_template_1.ref)('filter'),
|
|
110
|
+
(0, graphql_mapping_template_1.ref)(`$filter.${partitionKeyName}`),
|
|
111
|
+
]), (0, graphql_mapping_template_1.raw)(`$filter.${partitionKeyName}.eq`), (0, graphql_mapping_template_1.nul)(), true),
|
|
112
|
+
deltaIndexName: (0, graphql_mapping_template_1.str)(graphql_transformer_common_1.SyncResourceIDs.syncGSIName),
|
|
108
113
|
}),
|
|
109
|
-
|
|
110
|
-
|
|
114
|
+
}),
|
|
115
|
+
]));
|
|
111
116
|
exports.generateSyncRequestTemplate = generateSyncRequestTemplate;
|
|
112
117
|
//# sourceMappingURL=query.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/resolvers/query.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/resolvers/query.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-amplify/graphql-model-transformer",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.3-delta-table-improvements.0",
|
|
4
4
|
"description": "Amplify graphql @model transformer",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"test-watch": "jest --watch"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@aws-amplify/graphql-transformer-core": "0.17.
|
|
32
|
-
"@aws-amplify/graphql-transformer-interfaces": "1.14.
|
|
31
|
+
"@aws-amplify/graphql-transformer-core": "0.17.15-delta-table-improvements.0",
|
|
32
|
+
"@aws-amplify/graphql-transformer-interfaces": "1.14.8",
|
|
33
33
|
"@aws-cdk/aws-applicationautoscaling": "^1.159.0",
|
|
34
34
|
"@aws-cdk/aws-appsync": "^1.159.0",
|
|
35
35
|
"@aws-cdk/aws-cloudwatch": "^1.159.0",
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
"@aws-cdk/region-info": "^1.159.0",
|
|
47
47
|
"constructs": "^3.3.125",
|
|
48
48
|
"graphql": "^14.5.8",
|
|
49
|
-
"graphql-mapping-template": "4.20.
|
|
50
|
-
"graphql-transformer-common": "4.24.1-
|
|
49
|
+
"graphql-mapping-template": "4.20.5",
|
|
50
|
+
"graphql-transformer-common": "4.24.1-delta-table-improvements.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"@aws-cdk/assert": "^1.159.0",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"overrides"
|
|
72
72
|
]
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "af79e075209f918ed101e2f2c8fb842c1f8e41c7"
|
|
75
75
|
}
|
|
@@ -1216,11 +1216,7 @@ $util.toJson({})
|
|
|
1216
1216
|
{
|
|
1217
1217
|
\\"version\\": \\"2018-05-29\\",
|
|
1218
1218
|
\\"operation\\": \\"Sync\\",
|
|
1219
|
-
\\"filter\\":
|
|
1220
|
-
$util.toJson($filter)
|
|
1221
|
-
#else
|
|
1222
|
-
null
|
|
1223
|
-
#end,
|
|
1219
|
+
\\"filter\\": #if( $filter ) $util.toJson($filter) #else null #end,
|
|
1224
1220
|
\\"limit\\": $util.defaultIfNull($args.limit, 100),
|
|
1225
1221
|
\\"lastSync\\": $util.toJson($util.defaultIfNull($args.lastSync, null)),
|
|
1226
1222
|
\\"nextToken\\": $util.toJson($util.defaultIfNull($args.nextToken, null))
|
|
@@ -1758,11 +1754,7 @@ $util.toJson({})
|
|
|
1758
1754
|
{
|
|
1759
1755
|
\\"version\\": \\"2018-05-29\\",
|
|
1760
1756
|
\\"operation\\": \\"Sync\\",
|
|
1761
|
-
\\"filter\\":
|
|
1762
|
-
$util.toJson($filter)
|
|
1763
|
-
#else
|
|
1764
|
-
null
|
|
1765
|
-
#end,
|
|
1757
|
+
\\"filter\\": #if( $filter ) $util.toJson($filter) #else null #end,
|
|
1766
1758
|
\\"limit\\": $util.defaultIfNull($args.limit, 100),
|
|
1767
1759
|
\\"lastSync\\": $util.toJson($util.defaultIfNull($args.lastSync, null)),
|
|
1768
1760
|
\\"nextToken\\": $util.toJson($util.defaultIfNull($args.nextToken, null))
|
|
@@ -2300,11 +2292,7 @@ $util.toJson({})
|
|
|
2300
2292
|
{
|
|
2301
2293
|
\\"version\\": \\"2018-05-29\\",
|
|
2302
2294
|
\\"operation\\": \\"Sync\\",
|
|
2303
|
-
\\"filter\\":
|
|
2304
|
-
$util.toJson($filter)
|
|
2305
|
-
#else
|
|
2306
|
-
null
|
|
2307
|
-
#end,
|
|
2295
|
+
\\"filter\\": #if( $filter ) $util.toJson($filter) #else null #end,
|
|
2308
2296
|
\\"limit\\": $util.defaultIfNull($args.limit, 100),
|
|
2309
2297
|
\\"lastSync\\": $util.toJson($util.defaultIfNull($args.lastSync, null)),
|
|
2310
2298
|
\\"nextToken\\": $util.toJson($util.defaultIfNull($args.nextToken, null))
|
|
@@ -4342,11 +4330,7 @@ exports[`ModelTransformer: the datastore table should be configured 1`] = `
|
|
|
4342
4330
|
{
|
|
4343
4331
|
\\"version\\": \\"2018-05-29\\",
|
|
4344
4332
|
\\"operation\\": \\"Sync\\",
|
|
4345
|
-
\\"filter\\":
|
|
4346
|
-
$util.toJson($filter)
|
|
4347
|
-
#else
|
|
4348
|
-
null
|
|
4349
|
-
#end,
|
|
4333
|
+
\\"filter\\": #if( $filter ) $util.toJson($filter) #else null #end,
|
|
4350
4334
|
\\"limit\\": $util.defaultIfNull($args.limit, 100),
|
|
4351
4335
|
\\"lastSync\\": $util.toJson($util.defaultIfNull($args.lastSync, null)),
|
|
4352
4336
|
\\"nextToken\\": $util.toJson($util.defaultIfNull($args.nextToken, null))
|
|
@@ -1143,8 +1143,34 @@ describe('ModelTransformer: ', () => {
|
|
|
1143
1143
|
AttributeName: 'ds_sk',
|
|
1144
1144
|
AttributeType: 'S',
|
|
1145
1145
|
},
|
|
1146
|
+
{
|
|
1147
|
+
AttributeName: 'gsi_ds_pk',
|
|
1148
|
+
AttributeType: 'S',
|
|
1149
|
+
},
|
|
1150
|
+
{
|
|
1151
|
+
AttributeName: 'gsi_ds_sk',
|
|
1152
|
+
AttributeType: 'S',
|
|
1153
|
+
}
|
|
1146
1154
|
],
|
|
1147
1155
|
BillingMode: 'PAY_PER_REQUEST',
|
|
1156
|
+
GlobalSecondaryIndexes: [
|
|
1157
|
+
{
|
|
1158
|
+
IndexName: "deltaSyncGSI",
|
|
1159
|
+
KeySchema: [
|
|
1160
|
+
{
|
|
1161
|
+
AttributeName: "gsi_ds_pk",
|
|
1162
|
+
KeyType: "HASH"
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
AttributeName: "gsi_ds_sk",
|
|
1166
|
+
KeyType: "RANGE"
|
|
1167
|
+
}
|
|
1168
|
+
],
|
|
1169
|
+
Projection: {
|
|
1170
|
+
ProjectionType: "ALL"
|
|
1171
|
+
}
|
|
1172
|
+
}
|
|
1173
|
+
],
|
|
1148
1174
|
StreamSpecification: {
|
|
1149
1175
|
StreamViewType: 'NEW_AND_OLD_IMAGES',
|
|
1150
1176
|
},
|
|
@@ -45,6 +45,7 @@ import {
|
|
|
45
45
|
FieldDefinitionNode,
|
|
46
46
|
InputObjectTypeDefinitionNode,
|
|
47
47
|
InputValueDefinitionNode,
|
|
48
|
+
ListValueNode,
|
|
48
49
|
ObjectTypeDefinitionNode,
|
|
49
50
|
} from 'graphql';
|
|
50
51
|
import {
|
|
@@ -143,6 +144,8 @@ type ModelTransformerOptions = {
|
|
|
143
144
|
SyncConfig?: SyncConfig;
|
|
144
145
|
};
|
|
145
146
|
|
|
147
|
+
const DEFAULT_ID_FIELD_NAME = 'id';
|
|
148
|
+
|
|
146
149
|
/**
|
|
147
150
|
* ModelTransformer
|
|
148
151
|
*/
|
|
@@ -504,13 +507,15 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
504
507
|
const dataSource = this.datasourceMap[type.name.value];
|
|
505
508
|
const resolverKey = `Update${generateResolverKey(typeName, fieldName)}`;
|
|
506
509
|
if (!this.resolverMap[resolverKey]) {
|
|
510
|
+
const hasCustomPrimaryKey = this.hasCustomPrimaryKey(type);
|
|
511
|
+
const partitionKey = this.getPartitionKey(type);
|
|
507
512
|
const resolver = ctx.resolvers.generateMutationResolver(
|
|
508
513
|
typeName,
|
|
509
514
|
fieldName,
|
|
510
515
|
resolverLogicalId,
|
|
511
516
|
dataSource,
|
|
512
517
|
MappingTemplate.s3MappingTemplateFromString(
|
|
513
|
-
generateUpdateRequestTemplate(typeName, isSyncEnabled),
|
|
518
|
+
generateUpdateRequestTemplate(typeName, isSyncEnabled, hasCustomPrimaryKey, partitionKey),
|
|
514
519
|
`${typeName}.${fieldName}.req.vtl`,
|
|
515
520
|
),
|
|
516
521
|
MappingTemplate.s3MappingTemplateFromString(
|
|
@@ -541,13 +546,15 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
541
546
|
const isSyncEnabled = ctx.isProjectUsingDataStore();
|
|
542
547
|
const dataSource = this.datasourceMap[type.name.value];
|
|
543
548
|
const resolverKey = `delete${generateResolverKey(typeName, fieldName)}`;
|
|
549
|
+
const hasCustomPrimaryKey = this.hasCustomPrimaryKey(type);
|
|
550
|
+
const partitionKey = this.getPartitionKey(type);
|
|
544
551
|
if (!this.resolverMap[resolverKey]) {
|
|
545
552
|
this.resolverMap[resolverKey] = ctx.resolvers.generateMutationResolver(
|
|
546
553
|
typeName,
|
|
547
554
|
fieldName,
|
|
548
555
|
resolverLogicalId,
|
|
549
556
|
dataSource,
|
|
550
|
-
MappingTemplate.s3MappingTemplateFromString(generateDeleteRequestTemplate(isSyncEnabled), `${typeName}.${fieldName}.req.vtl`),
|
|
557
|
+
MappingTemplate.s3MappingTemplateFromString(generateDeleteRequestTemplate(isSyncEnabled, hasCustomPrimaryKey, partitionKey), `${typeName}.${fieldName}.req.vtl`),
|
|
551
558
|
MappingTemplate.s3MappingTemplateFromString(
|
|
552
559
|
generateDefaultResponseMappingTemplate(isSyncEnabled, true),
|
|
553
560
|
`${typeName}.${fieldName}.res.vtl`,
|
|
@@ -625,12 +632,14 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
625
632
|
const dataSource = this.datasourceMap[type.name.value];
|
|
626
633
|
const resolverKey = `Sync${generateResolverKey(typeName, fieldName)}`;
|
|
627
634
|
if (!this.resolverMap[resolverKey]) {
|
|
635
|
+
const hasCustomPrimaryKey = this.hasCustomPrimaryKey(type);
|
|
636
|
+
const partitionKeyName = this.getPartitionKeyName(type);
|
|
628
637
|
this.resolverMap[resolverKey] = ctx.resolvers.generateQueryResolver(
|
|
629
638
|
typeName,
|
|
630
639
|
fieldName,
|
|
631
640
|
resolverLogicalId,
|
|
632
641
|
dataSource,
|
|
633
|
-
MappingTemplate.s3MappingTemplateFromString(generateSyncRequestTemplate(), `${typeName}.${fieldName}.req.vtl`),
|
|
642
|
+
MappingTemplate.s3MappingTemplateFromString(generateSyncRequestTemplate(hasCustomPrimaryKey, partitionKeyName), `${typeName}.${fieldName}.req.vtl`),
|
|
634
643
|
MappingTemplate.s3MappingTemplateFromString(
|
|
635
644
|
generateDefaultResponseMappingTemplate(isSyncEnabled),
|
|
636
645
|
`${typeName}.${fieldName}.res.vtl`,
|
|
@@ -879,12 +888,14 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
879
888
|
const resolverKey = `Create${generateResolverKey(typeName, fieldName)}`;
|
|
880
889
|
const modelIndexFields = type.fields!.filter(field => field.directives?.some(it => it.name.value === 'index')).map(it => it.name.value);
|
|
881
890
|
if (!this.resolverMap[resolverKey]) {
|
|
891
|
+
const hasCustomPrimaryKey = this.hasCustomPrimaryKey(type);
|
|
892
|
+
const partitionKey = this.getPartitionKey(type);
|
|
882
893
|
const resolver = ctx.resolvers.generateMutationResolver(
|
|
883
894
|
typeName,
|
|
884
895
|
fieldName,
|
|
885
896
|
resolverLogicalId,
|
|
886
897
|
dataSource,
|
|
887
|
-
MappingTemplate.s3MappingTemplateFromString(generateCreateRequestTemplate(type.name.value, modelIndexFields), `${typeName}.${fieldName}.req.vtl`),
|
|
898
|
+
MappingTemplate.s3MappingTemplateFromString(generateCreateRequestTemplate(type.name.value, modelIndexFields, hasCustomPrimaryKey, partitionKey), `${typeName}.${fieldName}.req.vtl`),
|
|
888
899
|
MappingTemplate.s3MappingTemplateFromString(
|
|
889
900
|
generateDefaultResponseMappingTemplate(isSyncEnabled, true),
|
|
890
901
|
`${typeName}.${fieldName}.res.vtl`,
|
|
@@ -1391,4 +1402,56 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
1391
1402
|
EnableDeletionProtection: false,
|
|
1392
1403
|
...options,
|
|
1393
1404
|
});
|
|
1405
|
+
|
|
1406
|
+
/**
|
|
1407
|
+
* Returns true if the model contains a custom primary key.
|
|
1408
|
+
* Custom Primary Key is a renamed partition key with at least one sort key.
|
|
1409
|
+
* @param obj ObjectTypeDefinitionNode
|
|
1410
|
+
* @returns a boolean
|
|
1411
|
+
*/
|
|
1412
|
+
private hasCustomPrimaryKey = (obj: ObjectTypeDefinitionNode): boolean => {
|
|
1413
|
+
const primaryKeyField = obj.fields?.find(field => field.directives?.find(directive => directive.name.value === 'primaryKey'));
|
|
1414
|
+
if (!primaryKeyField || primaryKeyField.name.value === DEFAULT_ID_FIELD_NAME) {
|
|
1415
|
+
return false;
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
|
|
1419
|
+
const primaryKeyDirective = primaryKeyField.directives?.find(directive => directive.name.value === 'primaryKey')!;
|
|
1420
|
+
const sortKeysArgument = primaryKeyDirective.arguments?.find(arg => arg.name.value === 'sortKeyFields');
|
|
1421
|
+
if (sortKeysArgument && sortKeysArgument.value?.kind == 'StringValue') {
|
|
1422
|
+
return true;
|
|
1423
|
+
}
|
|
1424
|
+
if (!sortKeysArgument || (sortKeysArgument.value as ListValueNode)?.values?.length === 0) {
|
|
1425
|
+
return false;
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
return true;
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1431
|
+
/**
|
|
1432
|
+
* Returns partition key of the type
|
|
1433
|
+
* Custom Primary Key is a renamed partition key with at least one sort key.
|
|
1434
|
+
* @param obj ObjectTypeDefinitionNode
|
|
1435
|
+
* @returns a string
|
|
1436
|
+
*/
|
|
1437
|
+
private getPartitionKey = (obj: ObjectTypeDefinitionNode): string => {
|
|
1438
|
+
const primaryKeyField = obj.fields?.find(field => field.directives?.find(directive => directive.name.value === 'primaryKey'));
|
|
1439
|
+
if (!primaryKeyField || primaryKeyField.name.value === DEFAULT_ID_FIELD_NAME) {
|
|
1440
|
+
return DEFAULT_ID_FIELD_NAME;
|
|
1441
|
+
}
|
|
1442
|
+
return primaryKeyField.name.value;
|
|
1443
|
+
}
|
|
1444
|
+
|
|
1445
|
+
/**
|
|
1446
|
+
* Returns the field name of the partition key.
|
|
1447
|
+
* @param obj ObjectTypeDefinitionNode
|
|
1448
|
+
* @returns a string
|
|
1449
|
+
*/
|
|
1450
|
+
private getPartitionKeyName = (obj: ObjectTypeDefinitionNode): string => {
|
|
1451
|
+
const primaryKeyField = obj.fields?.find(field => field.directives?.find(directive => directive.name.value === 'primaryKey'));
|
|
1452
|
+
if (!primaryKeyField) {
|
|
1453
|
+
return DEFAULT_ID_FIELD_NAME;
|
|
1454
|
+
}
|
|
1455
|
+
return primaryKeyField.name.value;
|
|
1456
|
+
}
|
|
1394
1457
|
}
|
|
@@ -26,7 +26,7 @@ import { generateConditionSlot } from './common';
|
|
|
26
26
|
* Generates VTL template in update mutation
|
|
27
27
|
* @param modelName Name of the model
|
|
28
28
|
*/
|
|
29
|
-
export const generateUpdateRequestTemplate = (modelName: string, isSyncEnabled: boolean): string => {
|
|
29
|
+
export const generateUpdateRequestTemplate = (modelName: string, isSyncEnabled: boolean, hasCustomPrimaryKey: boolean, partitionKey: string): string => {
|
|
30
30
|
const objectKeyVariable = 'ctx.stash.metadata.modelObjectKey';
|
|
31
31
|
const keyFields: StringNode[] = [str('id')];
|
|
32
32
|
if (isSyncEnabled) {
|
|
@@ -133,6 +133,10 @@ export const generateUpdateRequestTemplate = (modelName: string, isSyncEnabled:
|
|
|
133
133
|
operation: str('UpdateItem'),
|
|
134
134
|
key: ref('Key'),
|
|
135
135
|
update: ref('update'),
|
|
136
|
+
...(hasCustomPrimaryKey && {
|
|
137
|
+
customPartitionKey: str(`${partitionKey}`),
|
|
138
|
+
populateIndexFields: raw(`${hasCustomPrimaryKey}`),
|
|
139
|
+
}),
|
|
136
140
|
...(isSyncEnabled && { _version: ref('util.defaultIfNull($args.input["_version"], 0)') }),
|
|
137
141
|
}),
|
|
138
142
|
),
|
|
@@ -152,7 +156,7 @@ export const generateUpdateRequestTemplate = (modelName: string, isSyncEnabled:
|
|
|
152
156
|
* Generates VTL template in create mutation
|
|
153
157
|
* @param modelName Name of the model
|
|
154
158
|
*/
|
|
155
|
-
export const generateCreateRequestTemplate = (modelName: string, modelIndexFields: string[]): string => {
|
|
159
|
+
export const generateCreateRequestTemplate = (modelName: string, modelIndexFields: string[], hasCustomPrimaryKey: boolean, partitionKey: string): string => {
|
|
156
160
|
const statements: Expression[] = [
|
|
157
161
|
setArgs,
|
|
158
162
|
// Generate conditions
|
|
@@ -182,6 +186,10 @@ export const generateCreateRequestTemplate = (modelName: string, modelIndexField
|
|
|
182
186
|
operation: str('PutItem'),
|
|
183
187
|
attributeValues: methodCall(ref('util.dynamodb.toMapValues'), ref('mergedValues')),
|
|
184
188
|
condition: ref('condition'),
|
|
189
|
+
...(hasCustomPrimaryKey && {
|
|
190
|
+
customPartitionKey: str(`${partitionKey}`),
|
|
191
|
+
populateIndexFields: raw(`${hasCustomPrimaryKey}`),
|
|
192
|
+
}),
|
|
185
193
|
}),
|
|
186
194
|
),
|
|
187
195
|
|
|
@@ -256,7 +264,7 @@ export const generateCreateInitSlotTemplate = (modelConfig: ModelDirectiveConfig
|
|
|
256
264
|
* Generates VTL template in delete mutation
|
|
257
265
|
*
|
|
258
266
|
*/
|
|
259
|
-
export const generateDeleteRequestTemplate = (isSyncEnabled: boolean): string => {
|
|
267
|
+
export const generateDeleteRequestTemplate = (isSyncEnabled: boolean, hasCustomPrimaryKey: boolean, partitionKey: string): string => {
|
|
260
268
|
const statements: Expression[] = [
|
|
261
269
|
setArgs,
|
|
262
270
|
set(
|
|
@@ -264,6 +272,10 @@ export const generateDeleteRequestTemplate = (isSyncEnabled: boolean): string =>
|
|
|
264
272
|
obj({
|
|
265
273
|
version: str('2018-05-29'),
|
|
266
274
|
operation: str('DeleteItem'),
|
|
275
|
+
...(hasCustomPrimaryKey && {
|
|
276
|
+
customPartitionKey: str(`${partitionKey}`),
|
|
277
|
+
populateIndexFields: raw(`${hasCustomPrimaryKey}`),
|
|
278
|
+
}),
|
|
267
279
|
}),
|
|
268
280
|
),
|
|
269
281
|
ifElse(
|
package/src/resolvers/query.ts
CHANGED
|
@@ -20,12 +20,14 @@ import {
|
|
|
20
20
|
list,
|
|
21
21
|
forEach,
|
|
22
22
|
nul,
|
|
23
|
+
raw,
|
|
23
24
|
} from 'graphql-mapping-template';
|
|
24
|
-
import { ResourceConstants, setArgs } from 'graphql-transformer-common';
|
|
25
|
+
import { ResourceConstants, setArgs, SyncResourceIDs } from 'graphql-transformer-common';
|
|
26
|
+
|
|
25
27
|
const authFilter = ref('ctx.stash.authFilter');
|
|
26
28
|
|
|
27
29
|
/**
|
|
28
|
-
* Generate get query resolver template
|
|
30
|
+
* Generate get query resolver request template
|
|
29
31
|
*/
|
|
30
32
|
export const generateGetRequestTemplate = (): string => {
|
|
31
33
|
const statements: Expression[] = [
|
|
@@ -74,6 +76,9 @@ export const generateGetRequestTemplate = (): string => {
|
|
|
74
76
|
return printBlock('Get Request template')(compoundExpression(statements));
|
|
75
77
|
};
|
|
76
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Generates the Get query response template
|
|
81
|
+
*/
|
|
77
82
|
export const generateGetResponseTemplate = (isSyncEnabled: boolean): string => {
|
|
78
83
|
const statements = new Array<Expression>();
|
|
79
84
|
if (isSyncEnabled) {
|
|
@@ -96,13 +101,16 @@ export const generateGetResponseTemplate = (isSyncEnabled: boolean): string => {
|
|
|
96
101
|
return printBlock('Get Response template')(compoundExpression(statements));
|
|
97
102
|
};
|
|
98
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Generates the List query request template
|
|
106
|
+
*/
|
|
99
107
|
export const generateListRequestTemplate = (): string => {
|
|
100
108
|
const requestVariable = 'ListRequest';
|
|
101
109
|
const modelQueryObj = 'ctx.stash.modelQueryExpression';
|
|
102
110
|
const indexNameVariable = 'ctx.stash.metadata.index';
|
|
103
111
|
const expression = compoundExpression([
|
|
104
112
|
setArgs,
|
|
105
|
-
set(ref('limit'), methodCall(ref(
|
|
113
|
+
set(ref('limit'), methodCall(ref('util.defaultIfNull'), ref('args.limit'), int(100))),
|
|
106
114
|
set(
|
|
107
115
|
ref(requestVariable),
|
|
108
116
|
obj({
|
|
@@ -123,7 +131,7 @@ export const generateListRequestTemplate = (): string => {
|
|
|
123
131
|
not(isNullOrEmpty(ref('filter'))),
|
|
124
132
|
compoundExpression([
|
|
125
133
|
set(
|
|
126
|
-
ref(
|
|
134
|
+
ref('filterExpression'),
|
|
127
135
|
methodCall(ref('util.parseJson'), methodCall(ref('util.transform.toDynamoDBFilterExpression'), ref('filter'))),
|
|
128
136
|
),
|
|
129
137
|
iff(
|
|
@@ -137,7 +145,7 @@ export const generateListRequestTemplate = (): string => {
|
|
|
137
145
|
equals(methodCall(ref('filterExpression.expressionValues.size')), int(0)),
|
|
138
146
|
qref(methodCall(ref('filterExpression.remove'), str('expressionValues'))),
|
|
139
147
|
),
|
|
140
|
-
set(ref(`${requestVariable}.filter`), ref(
|
|
148
|
+
set(ref(`${requestVariable}.filter`), ref('filterExpression')),
|
|
141
149
|
]),
|
|
142
150
|
),
|
|
143
151
|
]),
|
|
@@ -164,45 +172,58 @@ export const generateListRequestTemplate = (): string => {
|
|
|
164
172
|
return printBlock('List Request')(expression);
|
|
165
173
|
};
|
|
166
174
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
iff(not(isNullOrEmpty(ref('args.filter'))), set(ref('filter'), ref('args.filter'))),
|
|
178
|
-
),
|
|
179
|
-
iff(
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
),
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
),
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
175
|
+
/**
|
|
176
|
+
* Generates the Sync query request template
|
|
177
|
+
*/
|
|
178
|
+
export const generateSyncRequestTemplate = (hasCustomPrimaryKey: boolean, partitionKeyName: string): string => printBlock('Sync Request template')(
|
|
179
|
+
compoundExpression([
|
|
180
|
+
setArgs,
|
|
181
|
+
ifElse(
|
|
182
|
+
not(isNullOrEmpty(authFilter)),
|
|
183
|
+
compoundExpression([
|
|
184
|
+
set(ref('filter'), authFilter),
|
|
185
|
+
iff(not(isNullOrEmpty(ref('args.filter'))), set(ref('filter'), obj({ and: list([ref('filter'), ref('args.filter')]) }))),
|
|
186
|
+
]),
|
|
187
|
+
iff(not(isNullOrEmpty(ref('args.filter'))), set(ref('filter'), ref('args.filter'))),
|
|
188
|
+
),
|
|
189
|
+
iff(
|
|
190
|
+
not(isNullOrEmpty(ref('filter'))),
|
|
191
|
+
compoundExpression([
|
|
192
|
+
set(
|
|
193
|
+
ref('filterExpression'),
|
|
194
|
+
methodCall(ref('util.parseJson'), methodCall(ref('util.transform.toDynamoDBFilterExpression'), ref('filter'))),
|
|
195
|
+
),
|
|
196
|
+
iff(
|
|
197
|
+
not(methodCall(ref('util.isNullOrBlank'), ref('filterExpression.expression'))),
|
|
198
|
+
compoundExpression([
|
|
199
|
+
iff(
|
|
200
|
+
equals(methodCall(ref('filterExpression.expressionValues.size')), int(0)),
|
|
201
|
+
qref(methodCall(ref('filterExpression.remove'), str('expressionValues'))),
|
|
202
|
+
),
|
|
203
|
+
set(ref('filter'), ref('filterExpression')),
|
|
204
|
+
]),
|
|
205
|
+
),
|
|
206
|
+
]),
|
|
207
|
+
),
|
|
208
|
+
obj({
|
|
209
|
+
version: str('2018-05-29'),
|
|
210
|
+
operation: str('Sync'),
|
|
211
|
+
filter: ifElse(ref('filter'), ref('util.toJson($filter)'), nul(), true),
|
|
212
|
+
limit: ref(`util.defaultIfNull($args.limit, ${ResourceConstants.DEFAULT_SYNC_QUERY_PAGE_LIMIT})`),
|
|
213
|
+
lastSync: ref('util.toJson($util.defaultIfNull($args.lastSync, null))'),
|
|
214
|
+
nextToken: ref('util.toJson($util.defaultIfNull($args.nextToken, null))'),
|
|
215
|
+
...(hasCustomPrimaryKey && {
|
|
216
|
+
basePartitionKey: ifElse(
|
|
217
|
+
and([
|
|
218
|
+
ref('filter'),
|
|
219
|
+
ref(`$filter.${partitionKeyName}`),
|
|
220
|
+
]),
|
|
221
|
+
raw(`$filter.${partitionKeyName}.eq`),
|
|
222
|
+
nul(),
|
|
223
|
+
true,
|
|
224
|
+
),
|
|
225
|
+
deltaIndexName: str(SyncResourceIDs.syncGSIName),
|
|
205
226
|
}),
|
|
206
|
-
|
|
207
|
-
)
|
|
208
|
-
|
|
227
|
+
}),
|
|
228
|
+
]),
|
|
229
|
+
);
|