@aws-amplify/graphql-model-transformer 1.3.7 → 1.3.8
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 +4 -0
- package/lib/definitions.d.ts.map +1 -1
- package/lib/definitions.js +28 -2
- package/lib/definitions.js.map +1 -1
- package/lib/graphql-model-transformer.d.ts.map +1 -1
- package/lib/graphql-model-transformer.js +37 -35
- package/lib/graphql-model-transformer.js.map +1 -1
- package/lib/graphql-types/common.d.ts.map +1 -1
- package/lib/graphql-types/common.js +16 -18
- package/lib/graphql-types/common.js.map +1 -1
- package/lib/graphql-types/mutation.js +12 -12
- package/lib/graphql-types/mutation.js.map +1 -1
- package/lib/rds-lambda.zip +0 -0
- package/lib/resolvers/common.d.ts.map +1 -1
- package/lib/resolvers/common.js.map +1 -1
- package/lib/resolvers/dynamodb/mutation.d.ts.map +1 -1
- package/lib/resolvers/dynamodb/mutation.js +10 -8
- package/lib/resolvers/dynamodb/mutation.js.map +1 -1
- package/lib/resolvers/dynamodb/query.d.ts.map +1 -1
- package/lib/resolvers/dynamodb/query.js +1 -4
- package/lib/resolvers/dynamodb/query.js.map +1 -1
- package/lib/resolvers/dynamodb/subscriptions.d.ts.map +1 -1
- package/lib/resolvers/dynamodb/subscriptions.js.map +1 -1
- package/lib/resolvers/generators/rds-vtl-generator.d.ts.map +1 -1
- package/lib/resolvers/generators/rds-vtl-generator.js.map +1 -1
- package/lib/resolvers/generators/vtl-generator.d.ts.map +1 -1
- package/lib/resolvers/index.d.ts.map +1 -1
- package/lib/resolvers/index.js.map +1 -1
- package/lib/resolvers/rds/mutation.d.ts.map +1 -1
- package/lib/resolvers/rds/mutation.js.map +1 -1
- package/lib/resolvers/rds/query.d.ts.map +1 -1
- package/lib/resolvers/rds/query.js.map +1 -1
- package/lib/resolvers/rds/resolver.d.ts.map +1 -1
- package/lib/resolvers/rds/resolver.js +1 -1
- package/lib/resolvers/rds/resolver.js.map +1 -1
- package/lib/resources/dynamo-model-resource-generator.d.ts.map +1 -1
- package/lib/resources/dynamo-model-resource-generator.js.map +1 -1
- package/lib/resources/model-resource-generator.d.ts.map +1 -1
- package/lib/resources/model-resource-generator.js +12 -4
- package/lib/resources/model-resource-generator.js.map +1 -1
- package/lib/resources/rds-model-resource-generator.d.ts.map +1 -1
- package/lib/resources/rds-model-resource-generator.js +1 -1
- package/lib/resources/rds-model-resource-generator.js.map +1 -1
- package/package.json +6 -6
- package/rds-lambda/node_modules/.package-lock.json +209 -221
- package/rds-lambda/node_modules/@aws-sdk/client-ssm/package.json +17 -18
- package/rds-lambda/node_modules/@aws-sdk/client-sso/package.json +14 -15
- package/rds-lambda/node_modules/@aws-sdk/client-sso-oidc/package.json +14 -15
- package/rds-lambda/node_modules/@aws-sdk/client-sts/package.json +17 -18
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-ini/package.json +6 -6
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
- package/rds-lambda/node_modules/@aws-sdk/credential-provider-web-identity/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/middleware-host-header/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/middleware-logger/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/middleware-recursion-detection/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/middleware-sdk-sts/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/middleware-signing/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/middleware-user-agent/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/token-providers/package.json +3 -3
- package/rds-lambda/node_modules/@aws-sdk/types/package.json +2 -1
- package/rds-lambda/node_modules/@aws-sdk/util-endpoints/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/util-user-agent-browser/package.json +2 -2
- package/rds-lambda/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
- package/rds-lambda/node_modules/@babel/compat-data/data/plugin-bugfixes.json +2 -0
- package/rds-lambda/node_modules/@babel/compat-data/data/plugins.json +8 -0
- package/rds-lambda/node_modules/@babel/compat-data/package.json +1 -1
- package/rds-lambda/node_modules/@babel/core/package.json +7 -7
- package/rds-lambda/node_modules/@babel/generator/package.json +2 -2
- package/rds-lambda/node_modules/@babel/helper-compilation-targets/package.json +5 -5
- package/rds-lambda/node_modules/@babel/helper-module-transforms/README.md +1 -1
- package/rds-lambda/node_modules/@babel/helper-module-transforms/package.json +10 -6
- package/rds-lambda/node_modules/@types/jest/README.md +1 -1
- package/rds-lambda/node_modules/@types/jest/package.json +2 -2
- package/rds-lambda/node_modules/@types/node/README.md +1 -1
- package/rds-lambda/node_modules/@types/node/package.json +2 -2
- package/rds-lambda/node_modules/caniuse-lite/package.json +1 -1
- package/rds-lambda/node_modules/commander/Readme.md +7 -2
- package/rds-lambda/node_modules/commander/package.json +17 -17
- package/rds-lambda/node_modules/electron-to-chromium/full-chromium-versions.json +1 -1
- package/rds-lambda/node_modules/electron-to-chromium/full-versions.json +1 -1
- package/rds-lambda/node_modules/electron-to-chromium/package.json +1 -1
- package/rds-lambda/node_modules/electron-to-chromium/versions.json +1 -1
- package/rds-lambda/node_modules/knex/CHANGELOG.md +63 -21
- package/rds-lambda/node_modules/knex/CONTRIBUTING.md +1 -1
- package/rds-lambda/node_modules/knex/LICENSE +22 -22
- package/rds-lambda/node_modules/knex/README.md +32 -31
- package/rds-lambda/node_modules/knex/UPGRADING.md +94 -82
- package/rds-lambda/node_modules/knex/knex.mjs +11 -0
- package/rds-lambda/node_modules/knex/lib/dialects/oracle/DEAD_CODE.md +3 -3
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/cjs.stub +15 -15
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/coffee.stub +13 -13
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/eg.stub +14 -14
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/js-schema.stub +22 -22
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/js.stub +22 -22
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/knexfile-coffee.stub +34 -34
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/knexfile-eg.stub +43 -43
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/knexfile-js.stub +47 -47
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/knexfile-ls.stub +35 -35
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/knexfile-ts.stub +47 -47
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/ls.stub +14 -14
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/mjs.stub +23 -23
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/ts-schema.stub +21 -21
- package/rds-lambda/node_modules/knex/lib/migrations/migrate/stub/ts.stub +21 -21
- package/rds-lambda/node_modules/knex/lib/migrations/seed/stub/coffee.stub +9 -9
- package/rds-lambda/node_modules/knex/lib/migrations/seed/stub/eg.stub +11 -11
- package/rds-lambda/node_modules/knex/lib/migrations/seed/stub/js.stub +13 -13
- package/rds-lambda/node_modules/knex/lib/migrations/seed/stub/ls.stub +11 -11
- package/rds-lambda/node_modules/knex/lib/migrations/seed/stub/mjs.stub +12 -12
- package/rds-lambda/node_modules/knex/lib/migrations/seed/stub/ts.stub +13 -13
- package/rds-lambda/node_modules/knex/package.json +21 -18
- package/rds-lambda/node_modules/knex/scripts/docker-compose.yml +2 -2
- package/rds-lambda/node_modules/knex/scripts/next-release-howto.md +1 -1
- package/rds-lambda/node_modules/knex/scripts/oracledb-install-driver-libs.sh +82 -82
- package/rds-lambda/node_modules/knex/scripts/release.sh +36 -34
- package/rds-lambda/node_modules/knex/scripts/stress-test/README.txt +18 -18
- package/rds-lambda/node_modules/knex/scripts/stress-test/docker-compose.yml +16 -16
- package/rds-lambda/node_modules/pg-connection-string/package.json +2 -2
- package/rds-lambda/node_modules/semver/package.json +19 -9
- package/rds-lambda/package-lock.json +209 -221
- package/src/__tests__/model-transformer.test.ts +130 -139
- package/src/__tests__/test-utils/helpers.ts +1 -1
- package/src/__tests__/test-utils/rds_utils.test.ts +29 -68
- package/src/definitions.ts +28 -2
- package/src/graphql-model-transformer.ts +72 -74
- package/src/graphql-types/common.ts +41 -41
- package/src/graphql-types/mutation.ts +12 -12
- package/src/resolvers/common.ts +1 -12
- package/src/resolvers/dynamodb/mutation.ts +16 -13
- package/src/resolvers/dynamodb/query.ts +6 -12
- package/src/resolvers/dynamodb/subscriptions.ts +1 -3
- package/src/resolvers/generators/rds-vtl-generator.ts +1 -4
- package/src/resolvers/generators/vtl-generator.ts +5 -5
- package/src/resolvers/index.ts +1 -3
- package/src/resolvers/rds/mutation.ts +17 -6
- package/src/resolvers/rds/query.ts +4 -12
- package/src/resolvers/rds/resolver.ts +8 -13
- package/src/resources/dynamo-model-resource-generator.ts +12 -22
- package/src/resources/model-resource-generator.ts +54 -24
- package/src/resources/rds-model-resource-generator.ts +9 -23
- package/tsconfig.json +4 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/rds-lambda/node_modules/@nicolo-ribaudo/semver-v6/CHANGELOG.md +0 -70
- package/rds-lambda/node_modules/@nicolo-ribaudo/semver-v6/LICENSE +0 -15
- package/rds-lambda/node_modules/@nicolo-ribaudo/semver-v6/README.md +0 -454
- package/rds-lambda/node_modules/@nicolo-ribaudo/semver-v6/package.json +0 -28
- package/rds-lambda/node_modules/@nicolo-ribaudo/semver-v6/range.bnf +0 -16
- package/rds-lambda/node_modules/pg/node_modules/pg-connection-string/LICENSE +0 -21
- package/rds-lambda/node_modules/pg/node_modules/pg-connection-string/README.md +0 -77
- package/rds-lambda/node_modules/pg/node_modules/pg-connection-string/package.json +0 -40
- package/rds-lambda/node_modules/semver/CHANGELOG.md +0 -70
package/src/definitions.ts
CHANGED
|
@@ -5,8 +5,34 @@ export const FLOAT_CONDITIONS = ['ne', 'eq', 'le', 'lt', 'ge', 'gt', 'between'];
|
|
|
5
5
|
export const BOOLEAN_CONDITIONS = ['ne', 'eq'];
|
|
6
6
|
export const SIZE_CONDITIONS = ['ne', 'eq', 'le', 'lt', 'ge', 'gt', 'between'];
|
|
7
7
|
|
|
8
|
-
export const SUBSCRIPTION_STRING_CONDITIONS = [
|
|
9
|
-
|
|
8
|
+
export const SUBSCRIPTION_STRING_CONDITIONS = [
|
|
9
|
+
'ne',
|
|
10
|
+
'eq',
|
|
11
|
+
'le',
|
|
12
|
+
'lt',
|
|
13
|
+
'ge',
|
|
14
|
+
'gt',
|
|
15
|
+
'contains',
|
|
16
|
+
'notContains',
|
|
17
|
+
'between',
|
|
18
|
+
'beginsWith',
|
|
19
|
+
'in',
|
|
20
|
+
'notIn',
|
|
21
|
+
];
|
|
22
|
+
export const SUBSCRIPTION_ID_CONDITIONS = [
|
|
23
|
+
'ne',
|
|
24
|
+
'eq',
|
|
25
|
+
'le',
|
|
26
|
+
'lt',
|
|
27
|
+
'ge',
|
|
28
|
+
'gt',
|
|
29
|
+
'contains',
|
|
30
|
+
'notContains',
|
|
31
|
+
'between',
|
|
32
|
+
'beginsWith',
|
|
33
|
+
'in',
|
|
34
|
+
'notIn',
|
|
35
|
+
];
|
|
10
36
|
export const SUBSCRIPTION_INT_CONDITIONS = ['ne', 'eq', 'le', 'lt', 'ge', 'gt', 'between', 'in', 'notIn'];
|
|
11
37
|
export const SUBSCRIPTION_FLOAT_CONDITIONS = ['ne', 'eq', 'le', 'lt', 'ge', 'gt', 'between', 'in', 'notIn'];
|
|
12
38
|
export const SUBSCRIPTION_BOOLEAN_CONDITIONS = ['ne', 'eq'];
|
|
@@ -28,12 +28,7 @@ import {
|
|
|
28
28
|
TransformerTransformSchemaStepContextProvider,
|
|
29
29
|
TransformerValidationStepContextProvider,
|
|
30
30
|
} from '@aws-amplify/graphql-transformer-interfaces';
|
|
31
|
-
import {
|
|
32
|
-
ITable,
|
|
33
|
-
StreamViewType,
|
|
34
|
-
Table,
|
|
35
|
-
TableEncryption,
|
|
36
|
-
} from 'aws-cdk-lib/aws-dynamodb';
|
|
31
|
+
import { ITable, StreamViewType, Table, TableEncryption } from 'aws-cdk-lib/aws-dynamodb';
|
|
37
32
|
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
38
33
|
import * as cdk from 'aws-cdk-lib';
|
|
39
34
|
import {
|
|
@@ -128,7 +123,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
128
123
|
private resolverMap: Record<string, TransformerResolverProvider> = {};
|
|
129
124
|
private typesWithModelDirective: Set<string> = new Set();
|
|
130
125
|
private resourceGeneratorMap: Map<string, ModelResourceGenerator> = new Map<string, ModelResourceGenerator>();
|
|
131
|
-
private modelToDatasourceMap: Map<string, DatasourceType> = new Map<string, DatasourceType>()
|
|
126
|
+
private modelToDatasourceMap: Map<string, DatasourceType> = new Map<string, DatasourceType>();
|
|
132
127
|
/**
|
|
133
128
|
* A Map to hold the directive configuration
|
|
134
129
|
*/
|
|
@@ -162,9 +157,10 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
162
157
|
};
|
|
163
158
|
|
|
164
159
|
object = (definition: ObjectTypeDefinitionNode, directive: DirectiveNode, ctx: TransformerSchemaVisitStepContextProvider): void => {
|
|
165
|
-
const isTypeNameReserved =
|
|
166
|
-
|
|
167
|
-
|
|
160
|
+
const isTypeNameReserved =
|
|
161
|
+
definition.name.value === ctx.output.getQueryTypeName() ||
|
|
162
|
+
definition.name.value === ctx.output.getMutationTypeName() ||
|
|
163
|
+
definition.name.value === ctx.output.getSubscriptionTypeName();
|
|
168
164
|
|
|
169
165
|
const isDynamoDB = (ctx.modelToDatasourceMap.get(definition.name.value) ?? DDB_DATASOURCE_TYPE).dbType === DDB_DB_TYPE;
|
|
170
166
|
if (isTypeNameReserved) {
|
|
@@ -180,31 +176,36 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
180
176
|
}
|
|
181
177
|
|
|
182
178
|
const directiveWrapped: DirectiveWrapper = new DirectiveWrapper(directive);
|
|
183
|
-
const options = directiveWrapped.getArguments(
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
179
|
+
const options = directiveWrapped.getArguments(
|
|
180
|
+
{
|
|
181
|
+
queries: {
|
|
182
|
+
get: getFieldNameFor('get', typeName),
|
|
183
|
+
list: getFieldNameFor('list', typeName),
|
|
184
|
+
...(ctx.isProjectUsingDataStore() ? { sync: getFieldNameFor('sync', typeName) } : undefined),
|
|
185
|
+
},
|
|
186
|
+
mutations: {
|
|
187
|
+
create: getFieldNameFor('create', typeName),
|
|
188
|
+
update: getFieldNameFor('update', typeName),
|
|
189
|
+
delete: getFieldNameFor('delete', typeName),
|
|
190
|
+
},
|
|
191
|
+
subscriptions: {
|
|
192
|
+
level: SubscriptionLevel.on,
|
|
193
|
+
onCreate: [getFieldNameFor('onCreate', typeName)],
|
|
194
|
+
onDelete: [getFieldNameFor('onDelete', typeName)],
|
|
195
|
+
onUpdate: [getFieldNameFor('onUpdate', typeName)],
|
|
196
|
+
},
|
|
197
|
+
timestamps: isDynamoDB
|
|
198
|
+
? {
|
|
199
|
+
createdAt: 'createdAt',
|
|
200
|
+
updatedAt: 'updatedAt',
|
|
201
|
+
}
|
|
202
|
+
: {
|
|
203
|
+
createdAt: undefined,
|
|
204
|
+
updatedAt: undefined,
|
|
205
|
+
},
|
|
206
206
|
},
|
|
207
|
-
|
|
207
|
+
generateGetArgumentsInput(ctx.transformParameters),
|
|
208
|
+
);
|
|
208
209
|
|
|
209
210
|
// This property override is specifically to address parity between V1 and V2 when the FF is disabled
|
|
210
211
|
// If one subscription is defined, just let the others go to null without FF. But if public and none defined, default all subs
|
|
@@ -224,8 +225,10 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
224
225
|
},
|
|
225
226
|
generateGetArgumentsInput(ctx.transformParameters),
|
|
226
227
|
);
|
|
227
|
-
if (
|
|
228
|
-
|
|
228
|
+
if (
|
|
229
|
+
baseArgs?.subscriptions?.level === SubscriptionLevel.public &&
|
|
230
|
+
!(baseArgs?.subscriptions?.onCreate || baseArgs?.subscriptions?.onDelete || baseArgs?.subscriptions?.onUpdate)
|
|
231
|
+
) {
|
|
229
232
|
options.subscriptions = { level: SubscriptionLevel.public, ...publicSubscriptionDefaults };
|
|
230
233
|
}
|
|
231
234
|
}
|
|
@@ -255,7 +258,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
255
258
|
};
|
|
256
259
|
|
|
257
260
|
prepare = (context: TransformerPrepareStepContextProvider): void => {
|
|
258
|
-
this.typesWithModelDirective.forEach(modelTypeName => {
|
|
261
|
+
this.typesWithModelDirective.forEach((modelTypeName) => {
|
|
259
262
|
const type = context.output.getObject(modelTypeName);
|
|
260
263
|
context.providerRegistry.registerDataSourceProvider(type!, this);
|
|
261
264
|
});
|
|
@@ -266,9 +269,9 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
266
269
|
addModelConditionInputs(ctx);
|
|
267
270
|
|
|
268
271
|
this.ensureModelSortDirectionEnum(ctx);
|
|
269
|
-
this.typesWithModelDirective.forEach(type => {
|
|
272
|
+
this.typesWithModelDirective.forEach((type) => {
|
|
270
273
|
const def = ctx.output.getObject(type)!;
|
|
271
|
-
const hasAuth = def.directives!.some(dir => dir.name.value === 'auth');
|
|
274
|
+
const hasAuth = def.directives!.some((dir) => dir.name.value === 'auth');
|
|
272
275
|
|
|
273
276
|
// add Non Model type inputs
|
|
274
277
|
this.createNonModelInputs(ctx, def);
|
|
@@ -295,15 +298,15 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
295
298
|
const apiKeyDirArray = [makeDirective(API_KEY_DIRECTIVE, [])];
|
|
296
299
|
extendTypeWithDirectives(ctx, def.name.value, apiKeyDirArray);
|
|
297
300
|
propagateApiKeyToNestedTypes(ctx as TransformerContextProvider, def, new Set<string>());
|
|
298
|
-
queryFields.forEach(operationField => {
|
|
301
|
+
queryFields.forEach((operationField) => {
|
|
299
302
|
const operationName = operationField.name.value;
|
|
300
303
|
addDirectivesToOperation(ctx, ctx.output.getQueryTypeName()!, operationName, apiKeyDirArray);
|
|
301
304
|
});
|
|
302
|
-
mutationFields.forEach(operationField => {
|
|
305
|
+
mutationFields.forEach((operationField) => {
|
|
303
306
|
const operationName = operationField.name.value;
|
|
304
307
|
addDirectivesToOperation(ctx, ctx.output.getMutationTypeName()!, operationName, apiKeyDirArray);
|
|
305
308
|
});
|
|
306
|
-
subscriptionsFields.forEach(operationField => {
|
|
309
|
+
subscriptionsFields.forEach((operationField) => {
|
|
307
310
|
const operationName = operationField.name.value;
|
|
308
311
|
addDirectivesToOperation(ctx, ctx.output.getSubscriptionTypeName()!, operationName, apiKeyDirArray);
|
|
309
312
|
});
|
|
@@ -373,14 +376,9 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
373
376
|
const dbInfo = ctx.modelToDatasourceMap.get(type.name.value) ?? DDB_DATASOURCE_TYPE;
|
|
374
377
|
if (dbInfo?.dbType && this.resourceGeneratorMap.has(dbInfo.dbType)) {
|
|
375
378
|
// Coercing this into being defined as we're running a check on it first
|
|
376
|
-
return this.resourceGeneratorMap
|
|
377
|
-
|
|
378
|
-
type,
|
|
379
|
-
modelDirectiveConfig,
|
|
380
|
-
typeName,
|
|
381
|
-
fieldName,
|
|
382
|
-
resolverLogicalId,
|
|
383
|
-
);
|
|
379
|
+
return this.resourceGeneratorMap
|
|
380
|
+
.get(dbInfo.dbType)!
|
|
381
|
+
.generateUpdateResolver(ctx, type, modelDirectiveConfig, typeName, fieldName, resolverLogicalId);
|
|
384
382
|
}
|
|
385
383
|
throw new Error(`DB Type undefined or resource generator not provided for ${type.name.value}`);
|
|
386
384
|
};
|
|
@@ -468,7 +466,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
468
466
|
[SubscriptionFieldType.ON_UPDATE]: MutationFieldType.UPDATE,
|
|
469
467
|
[SubscriptionFieldType.ON_DELETE]: MutationFieldType.DELETE,
|
|
470
468
|
};
|
|
471
|
-
const mutation = Array.from(mutationMap).find(m => m.type === mutationToSubscriptionTypeMap[subscriptionType]);
|
|
469
|
+
const mutation = Array.from(mutationMap).find((m) => m.type === mutationToSubscriptionTypeMap[subscriptionType]);
|
|
472
470
|
if (mutation) {
|
|
473
471
|
return mutation.fieldName;
|
|
474
472
|
}
|
|
@@ -478,7 +476,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
478
476
|
private createQueryFields = (ctx: TransformerValidationStepContextProvider, def: ObjectTypeDefinitionNode): FieldDefinitionNode[] => {
|
|
479
477
|
const queryFields: FieldDefinitionNode[] = [];
|
|
480
478
|
const queryFieldNames = this.getQueryFieldNames(def!);
|
|
481
|
-
queryFieldNames.forEach(queryField => {
|
|
479
|
+
queryFieldNames.forEach((queryField) => {
|
|
482
480
|
const outputType = this.getOutputType(ctx, def, queryField);
|
|
483
481
|
const args = this.getInputs(ctx, def!, {
|
|
484
482
|
fieldName: queryField.fieldName,
|
|
@@ -494,7 +492,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
494
492
|
private createMutationFields = (ctx: TransformerValidationStepContextProvider, def: ObjectTypeDefinitionNode): FieldDefinitionNode[] => {
|
|
495
493
|
const mutationFields: FieldDefinitionNode[] = [];
|
|
496
494
|
const mutationFieldNames = this.getMutationFieldNames(def!);
|
|
497
|
-
mutationFieldNames.forEach(mutationField => {
|
|
495
|
+
mutationFieldNames.forEach((mutationField) => {
|
|
498
496
|
const args = this.getInputs(ctx, def!, {
|
|
499
497
|
fieldName: mutationField.fieldName,
|
|
500
498
|
typeName: mutationField.typeName,
|
|
@@ -516,19 +514,21 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
516
514
|
|
|
517
515
|
const subscriptionFields: FieldDefinitionNode[] = [];
|
|
518
516
|
|
|
519
|
-
Object.keys(subscriptionToMutationsMap).forEach(subscriptionFieldName => {
|
|
517
|
+
Object.keys(subscriptionToMutationsMap).forEach((subscriptionFieldName) => {
|
|
520
518
|
const maps = subscriptionToMutationsMap[subscriptionFieldName];
|
|
521
519
|
|
|
522
520
|
const args: InputValueDefinitionNode[] = [];
|
|
523
|
-
maps.map(it =>
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
521
|
+
maps.map((it) =>
|
|
522
|
+
args.push(
|
|
523
|
+
...this.getInputs(ctx, def!, {
|
|
524
|
+
fieldName: it.fieldName,
|
|
525
|
+
typeName: it.typeName,
|
|
526
|
+
type: it.type,
|
|
527
|
+
}),
|
|
528
|
+
),
|
|
529
|
+
);
|
|
530
530
|
|
|
531
|
-
const mutationNames = maps.map(it => this.getMutationName(it.type, mutationFields));
|
|
531
|
+
const mutationNames = maps.map((it) => this.getMutationName(it.type, mutationFields));
|
|
532
532
|
|
|
533
533
|
// Todo use directive wrapper to build the directive node
|
|
534
534
|
const directive = makeDirective('aws_subscribe', [makeArgument('mutations', makeValueNode(mutationNames))]);
|
|
@@ -601,7 +601,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
601
601
|
const filterInputs = createEnumModelFilters(ctx, type);
|
|
602
602
|
conditionInput = makeMutationConditionInput(ctx, conditionTypeName, type);
|
|
603
603
|
filterInputs.push(conditionInput);
|
|
604
|
-
filterInputs.forEach(input => {
|
|
604
|
+
filterInputs.forEach((input) => {
|
|
605
605
|
const conditionInputName = input.name.value;
|
|
606
606
|
if (!ctx.output.getType(conditionInputName)) {
|
|
607
607
|
ctx.output.addInput(input);
|
|
@@ -616,7 +616,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
616
616
|
const filterInputName = toPascalCase(['Model', type.name.value, 'FilterInput']);
|
|
617
617
|
const filterInputs = createEnumModelFilters(ctx, type);
|
|
618
618
|
filterInputs.push(makeListQueryFilterInput(ctx, filterInputName, type));
|
|
619
|
-
filterInputs.forEach(input => {
|
|
619
|
+
filterInputs.forEach((input) => {
|
|
620
620
|
const conditionInputName = input.name.value;
|
|
621
621
|
if (!ctx.output.getType(conditionInputName)) {
|
|
622
622
|
ctx.output.addInput(input);
|
|
@@ -694,16 +694,14 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
694
694
|
const filterInputName = toPascalCase(['ModelSubscription', type.name.value, 'FilterInput']);
|
|
695
695
|
const filterInputs = createEnumModelFilters(ctx, type);
|
|
696
696
|
filterInputs.push(makeSubscriptionQueryFilterInput(ctx, filterInputName, type));
|
|
697
|
-
filterInputs.forEach(input => {
|
|
697
|
+
filterInputs.forEach((input) => {
|
|
698
698
|
const conditionInputName = input.name.value;
|
|
699
699
|
if (!ctx.output.getType(conditionInputName)) {
|
|
700
700
|
ctx.output.addInput(input);
|
|
701
701
|
}
|
|
702
702
|
});
|
|
703
703
|
|
|
704
|
-
return [
|
|
705
|
-
makeInputValueDefinition('filter', makeNamedType(filterInputName)),
|
|
706
|
-
];
|
|
704
|
+
return [makeInputValueDefinition('filter', makeNamedType(filterInputName))];
|
|
707
705
|
|
|
708
706
|
default:
|
|
709
707
|
throw new Error('Unknown operation type');
|
|
@@ -752,10 +750,10 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
752
750
|
createIAMRole = (context: TransformerContextProvider, def: ObjectTypeDefinitionNode, stack: cdk.Stack, tableName: string): iam.Role => {
|
|
753
751
|
const ddbGenerator = this.resourceGeneratorMap.get(DDB_DB_TYPE) as DynamoModelResourceGenerator;
|
|
754
752
|
return ddbGenerator.createIAMRole(context, def, stack, tableName);
|
|
755
|
-
}
|
|
753
|
+
};
|
|
756
754
|
|
|
757
755
|
private createNonModelInputs = (ctx: TransformerTransformSchemaStepContextProvider, obj: ObjectTypeDefinitionNode): void => {
|
|
758
|
-
(obj.fields ?? []).forEach(field => {
|
|
756
|
+
(obj.fields ?? []).forEach((field) => {
|
|
759
757
|
if (!isScalar(field.type)) {
|
|
760
758
|
const def = ctx.output.getType(getBaseType(field.type));
|
|
761
759
|
if (def && def.kind === 'ObjectTypeDefinition' && !this.isModelField(def.name.value)) {
|
|
@@ -770,7 +768,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
770
768
|
});
|
|
771
769
|
};
|
|
772
770
|
|
|
773
|
-
private isModelField = (name: string): boolean =>
|
|
771
|
+
private isModelField = (name: string): boolean => !!this.typesWithModelDirective.has(name);
|
|
774
772
|
|
|
775
773
|
private getNonModelInputObjectName = (name: string): string => `${toUpper(name)}Input`;
|
|
776
774
|
|
|
@@ -803,7 +801,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
803
801
|
}
|
|
804
802
|
}
|
|
805
803
|
|
|
806
|
-
timestamps.forEach(fieldName => {
|
|
804
|
+
timestamps.forEach((fieldName) => {
|
|
807
805
|
if (typeWrapper.hasField(fieldName)) {
|
|
808
806
|
const field = typeWrapper.getField(fieldName);
|
|
809
807
|
if (!['String', 'AWSDateTime'].includes(field.getTypeName())) {
|
|
@@ -838,7 +836,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
838
836
|
const subscriptionToMutationsMap: { [subField: string]: { fieldName: string; typeName: string; type: SubscriptionFieldType }[] } = {};
|
|
839
837
|
const subscriptionFieldNames = this.getSubscriptionFieldNames(def);
|
|
840
838
|
|
|
841
|
-
subscriptionFieldNames.forEach(subscriptionFieldName => {
|
|
839
|
+
subscriptionFieldNames.forEach((subscriptionFieldName) => {
|
|
842
840
|
if (!subscriptionToMutationsMap[subscriptionFieldName.fieldName]) {
|
|
843
841
|
subscriptionToMutationsMap[subscriptionFieldName.fieldName] = [];
|
|
844
842
|
}
|
|
@@ -854,7 +852,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
854
852
|
|
|
855
853
|
ctx.output.addEnum(modelSortDirection);
|
|
856
854
|
}
|
|
857
|
-
}
|
|
855
|
+
};
|
|
858
856
|
|
|
859
857
|
private getOptions = (options: ModelTransformerOptions): ModelTransformerOptions => ({
|
|
860
858
|
EnableDeletionProtection: false,
|
|
@@ -64,11 +64,11 @@ export const makeConditionFilterInput = (
|
|
|
64
64
|
object: ObjectTypeDefinitionNode,
|
|
65
65
|
): InputObjectDefinitionWrapper => {
|
|
66
66
|
const input = InputObjectDefinitionWrapper.create(name);
|
|
67
|
-
|
|
68
|
-
addSimpleFieldsConditionsForListing(input, object, ctx)
|
|
67
|
+
|
|
68
|
+
addSimpleFieldsConditionsForListing(input, object, ctx);
|
|
69
69
|
addListTypeConditions(input, name);
|
|
70
|
-
addNonListTypeConditions(input, name)
|
|
71
|
-
addDatastoreConditions(input, ctx)
|
|
70
|
+
addNonListTypeConditions(input, name);
|
|
71
|
+
addDatastoreConditions(input, ctx);
|
|
72
72
|
|
|
73
73
|
return input;
|
|
74
74
|
};
|
|
@@ -91,7 +91,7 @@ export const makeSubscriptionFilterInput = (
|
|
|
91
91
|
const conditionTypeName = ModelResourceIDs.ModelFilterScalarInputTypeName(
|
|
92
92
|
isEnumType ? 'String' : field.getTypeName(),
|
|
93
93
|
!supportsConditions,
|
|
94
|
-
true
|
|
94
|
+
true,
|
|
95
95
|
);
|
|
96
96
|
const inputField = InputFieldWrapper.create(field.name, conditionTypeName, true);
|
|
97
97
|
input.addField(inputField);
|
|
@@ -99,7 +99,7 @@ export const makeSubscriptionFilterInput = (
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
addListTypeConditions(input, name);
|
|
102
|
-
addDatastoreConditions(input, ctx)
|
|
102
|
+
addDatastoreConditions(input, ctx);
|
|
103
103
|
|
|
104
104
|
return input;
|
|
105
105
|
};
|
|
@@ -113,7 +113,7 @@ export const makeSubscriptionFilterInput = (
|
|
|
113
113
|
const addSimpleFieldsConditionsForListing = (
|
|
114
114
|
input: InputObjectDefinitionWrapper,
|
|
115
115
|
object: ObjectTypeDefinitionNode,
|
|
116
|
-
ctx: TransformerTransformSchemaStepContextProvider
|
|
116
|
+
ctx: TransformerTransformSchemaStepContextProvider,
|
|
117
117
|
) => {
|
|
118
118
|
const supportsConditions = true;
|
|
119
119
|
const wrappedObject = new ObjectDefinitionWrapper(object);
|
|
@@ -121,16 +121,17 @@ const addSimpleFieldsConditionsForListing = (
|
|
|
121
121
|
for (const field of wrappedObject.fields) {
|
|
122
122
|
const fieldType = ctx.output.getType(field.getTypeName());
|
|
123
123
|
const isEnumType = fieldType && fieldType.kind === Kind.ENUM_TYPE_DEFINITION;
|
|
124
|
-
|
|
124
|
+
|
|
125
125
|
if (field.isScalar() || isEnumType) {
|
|
126
|
-
const conditionTypeName =
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
const conditionTypeName =
|
|
127
|
+
isEnumType && field.isList()
|
|
128
|
+
? ModelResourceIDs.ModelFilterListInputTypeName(field.getTypeName(), !supportsConditions)
|
|
129
|
+
: ModelResourceIDs.ModelFilterScalarInputTypeName(field.getTypeName(), !supportsConditions);
|
|
129
130
|
const inputField = InputFieldWrapper.create(field.name, conditionTypeName, true);
|
|
130
131
|
input.addField(inputField);
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
|
-
}
|
|
134
|
+
};
|
|
134
135
|
|
|
135
136
|
/**
|
|
136
137
|
* Make additional conditions of non-list type
|
|
@@ -139,10 +140,10 @@ const addSimpleFieldsConditionsForListing = (
|
|
|
139
140
|
*/
|
|
140
141
|
const addNonListTypeConditions = (input: InputObjectDefinitionWrapper, name: string) => {
|
|
141
142
|
for (const additionalField of ['not']) {
|
|
142
|
-
const inputField = InputFieldWrapper.create(additionalField, name, true, false);
|
|
143
|
-
input.addField(inputField);
|
|
143
|
+
const inputField = InputFieldWrapper.create(additionalField, name, true, false);
|
|
144
|
+
input.addField(inputField);
|
|
144
145
|
}
|
|
145
|
-
}
|
|
146
|
+
};
|
|
146
147
|
|
|
147
148
|
/**
|
|
148
149
|
* Make additional conditions of list type
|
|
@@ -154,29 +155,24 @@ const addListTypeConditions = (input: InputObjectDefinitionWrapper, name: string
|
|
|
154
155
|
const inputField = InputFieldWrapper.create(additionalField, name, true, true);
|
|
155
156
|
input.addField(inputField);
|
|
156
157
|
}
|
|
157
|
-
}
|
|
158
|
+
};
|
|
158
159
|
|
|
159
160
|
/**
|
|
160
161
|
* Make additional conditions for datastore-enabled apps
|
|
161
162
|
* @param input output object
|
|
162
163
|
* @param ctx TransformerContext
|
|
163
164
|
*/
|
|
164
|
-
const addDatastoreConditions = (
|
|
165
|
-
input: InputObjectDefinitionWrapper,
|
|
166
|
-
ctx: TransformerTransformSchemaStepContextProvider
|
|
167
|
-
) => {
|
|
165
|
+
const addDatastoreConditions = (input: InputObjectDefinitionWrapper, ctx: TransformerTransformSchemaStepContextProvider) => {
|
|
168
166
|
if (ctx.isProjectUsingDataStore()) {
|
|
169
|
-
const datastoreFields = [
|
|
170
|
-
{fieldName: '_deleted', typeName: STANDARD_SCALARS.Boolean}
|
|
171
|
-
]
|
|
167
|
+
const datastoreFields = [{ fieldName: '_deleted', typeName: STANDARD_SCALARS.Boolean }];
|
|
172
168
|
|
|
173
|
-
for (const {fieldName, typeName} of datastoreFields) {
|
|
174
|
-
const type = ModelResourceIDs.ModelScalarFilterInputTypeName(typeName, false)
|
|
169
|
+
for (const { fieldName, typeName } of datastoreFields) {
|
|
170
|
+
const type = ModelResourceIDs.ModelScalarFilterInputTypeName(typeName, false);
|
|
175
171
|
const inputField = InputFieldWrapper.create(fieldName, type, true, false);
|
|
176
172
|
input.addField(inputField);
|
|
177
173
|
}
|
|
178
174
|
}
|
|
179
|
-
}
|
|
175
|
+
};
|
|
180
176
|
|
|
181
177
|
/**
|
|
182
178
|
* Generates the Subscription filter input type name
|
|
@@ -198,7 +194,7 @@ export const removeSubscriptionFilterInputAttribute = (
|
|
|
198
194
|
}
|
|
199
195
|
const newFilterType: InputObjectTypeDefinitionNode = {
|
|
200
196
|
...filterType,
|
|
201
|
-
fields: filterType.fields?.filter(field => field.name.value !== fieldName),
|
|
197
|
+
fields: filterType.fields?.filter((field) => field.name.value !== fieldName),
|
|
202
198
|
};
|
|
203
199
|
ctx.output.putType(newFilterType);
|
|
204
200
|
};
|
|
@@ -207,11 +203,15 @@ export const removeSubscriptionFilterInputAttribute = (
|
|
|
207
203
|
* Generates model condition input type
|
|
208
204
|
*/
|
|
209
205
|
export const addModelConditionInputs = (ctx: TransformerTransformSchemaStepContextProvider): void => {
|
|
210
|
-
const conditionsInput: TypeDefinitionNode[] = ['String', 'Int', 'Float', 'Boolean', 'ID'].map(scalarName =>
|
|
211
|
-
|
|
206
|
+
const conditionsInput: TypeDefinitionNode[] = ['String', 'Int', 'Float', 'Boolean', 'ID'].map((scalarName) =>
|
|
207
|
+
makeModelScalarFilterInputObject(scalarName, true),
|
|
208
|
+
);
|
|
209
|
+
['String', 'Int', 'Float', 'Boolean', 'ID'].map((scalarName) =>
|
|
210
|
+
conditionsInput.push(makeModelScalarFilterInputObject(scalarName, true, true)),
|
|
211
|
+
);
|
|
212
212
|
conditionsInput.push(makeAttributeTypeEnum());
|
|
213
213
|
conditionsInput.push(makeSizeInputType());
|
|
214
|
-
conditionsInput.forEach(input => {
|
|
214
|
+
conditionsInput.forEach((input) => {
|
|
215
215
|
const inputName = input.name.value;
|
|
216
216
|
if (!ctx.output.getType(inputName)) {
|
|
217
217
|
ctx.output.addType(input);
|
|
@@ -241,13 +241,13 @@ export const createEnumModelFilters = (
|
|
|
241
241
|
): InputObjectTypeDefinitionNode[] => {
|
|
242
242
|
// add enum type if present
|
|
243
243
|
const typeWrapper = new ObjectDefinitionWrapper(type);
|
|
244
|
-
const enumFields = typeWrapper.fields.filter(field => {
|
|
244
|
+
const enumFields = typeWrapper.fields.filter((field) => {
|
|
245
245
|
const typeName = field.getTypeName();
|
|
246
246
|
const typeObj = ctx.output.getType(typeName);
|
|
247
247
|
return typeObj && typeObj.kind === 'EnumTypeDefinition';
|
|
248
248
|
});
|
|
249
249
|
|
|
250
|
-
return enumFields.map(field => makeEnumFilterInput(field));
|
|
250
|
+
return enumFields.map((field) => makeEnumFilterInput(field));
|
|
251
251
|
};
|
|
252
252
|
|
|
253
253
|
/**
|
|
@@ -281,7 +281,7 @@ export function makeModelScalarFilterInputObject(
|
|
|
281
281
|
}
|
|
282
282
|
|
|
283
283
|
if (!isSubscriptionFilter) {
|
|
284
|
-
makeFunctionInputFields(type).map(f => scalarConditionInput.addField(f));
|
|
284
|
+
makeFunctionInputFields(type).map((f) => scalarConditionInput.addField(f));
|
|
285
285
|
}
|
|
286
286
|
|
|
287
287
|
return scalarConditionInput.serialize();
|
|
@@ -398,13 +398,13 @@ export function makeEnumFilterInput(fieldWrapper: FieldWrapper): InputObjectType
|
|
|
398
398
|
: ModelResourceIDs.ModelFilterScalarInputTypeName(fieldWrapper.getTypeName(), !supportsConditions);
|
|
399
399
|
|
|
400
400
|
const input = InputObjectDefinitionWrapper.create(conditionTypeName);
|
|
401
|
-
['eq', 'ne'].forEach(fieldName => {
|
|
401
|
+
['eq', 'ne'].forEach((fieldName) => {
|
|
402
402
|
const field = InputFieldWrapper.create(fieldName, fieldWrapper.getTypeName(), true, fieldWrapper.isList());
|
|
403
403
|
input.addField(field);
|
|
404
404
|
});
|
|
405
405
|
|
|
406
406
|
if (fieldWrapper.isList()) {
|
|
407
|
-
['contains', 'notContains'].forEach(fieldName => {
|
|
407
|
+
['contains', 'notContains'].forEach((fieldName) => {
|
|
408
408
|
const field = InputFieldWrapper.create(fieldName, fieldWrapper.getTypeName(), true);
|
|
409
409
|
input.addField(field);
|
|
410
410
|
});
|
|
@@ -423,9 +423,9 @@ export const addDirectivesToField = (
|
|
|
423
423
|
): void => {
|
|
424
424
|
const type = ctx.output.getType(typeName) as ObjectTypeDefinitionNode;
|
|
425
425
|
if (type) {
|
|
426
|
-
const field = type.fields?.find(f => f.name.value === fieldName);
|
|
426
|
+
const field = type.fields?.find((f) => f.name.value === fieldName);
|
|
427
427
|
if (field) {
|
|
428
|
-
const newFields = [...type.fields!.filter(f => f.name.value !== field.name.value), extendFieldWithDirectives(field, directives)];
|
|
428
|
+
const newFields = [...type.fields!.filter((f) => f.name.value !== field.name.value), extendFieldWithDirectives(field, directives)];
|
|
429
429
|
|
|
430
430
|
const newType = {
|
|
431
431
|
...type,
|
|
@@ -452,7 +452,7 @@ export const addDirectivesToOperation = (
|
|
|
452
452
|
// add the directives to the result type of the operation
|
|
453
453
|
const type = ctx.output.getType(typeName) as ObjectTypeDefinitionNode;
|
|
454
454
|
if (type) {
|
|
455
|
-
const field = type.fields!.find(f => f.name.value === operationName);
|
|
455
|
+
const field = type.fields!.find((f) => f.name.value === operationName);
|
|
456
456
|
|
|
457
457
|
if (field) {
|
|
458
458
|
const returnFieldType = field.type as NamedTypeNode;
|
|
@@ -501,18 +501,18 @@ export const propagateApiKeyToNestedTypes = (
|
|
|
501
501
|
if (fieldType.kind !== 'ObjectTypeDefinition') {
|
|
502
502
|
return undefined;
|
|
503
503
|
}
|
|
504
|
-
const typeModel = fieldType.directives!.find(dir => dir.name.value === 'model');
|
|
504
|
+
const typeModel = fieldType.directives!.find((dir) => dir.name.value === 'model');
|
|
505
505
|
return typeModel !== undefined ? undefined : fieldType;
|
|
506
506
|
}
|
|
507
507
|
return fieldType;
|
|
508
508
|
};
|
|
509
509
|
const nonModelFieldTypes = def
|
|
510
|
-
.fields!.map(f => ctx.output.getType(getBaseType(f.type)) as TypeDefinitionNode)
|
|
510
|
+
.fields!.map((f) => ctx.output.getType(getBaseType(f.type)) as TypeDefinitionNode)
|
|
511
511
|
.filter(nonModelTypePredicate);
|
|
512
512
|
for (const nonModelFieldType of nonModelFieldTypes) {
|
|
513
513
|
const nonModelName = nonModelFieldType.name.value;
|
|
514
514
|
const hasSeenType = seenNonModelTypes.has(nonModelName);
|
|
515
|
-
const hasApiKey = nonModelFieldType.directives?.some(dir => dir.name.value === API_KEY_DIRECTIVE) ?? false;
|
|
515
|
+
const hasApiKey = nonModelFieldType.directives?.some((dir) => dir.name.value === API_KEY_DIRECTIVE) ?? false;
|
|
516
516
|
if (!hasSeenType && !hasApiKey) {
|
|
517
517
|
seenNonModelTypes.add(nonModelName);
|
|
518
518
|
extendTypeWithDirectives(ctx, nonModelName, [makeDirective(API_KEY_DIRECTIVE, [])]);
|
|
@@ -24,36 +24,36 @@ export const makeUpdateInputField = (
|
|
|
24
24
|
const name = toPascalCase(['Update', typeName, 'Input']);
|
|
25
25
|
const hasIdField = objectWrapped.hasField('id');
|
|
26
26
|
const fieldsToRemove = objectWrapped
|
|
27
|
-
.fields!.filter(field => {
|
|
27
|
+
.fields!.filter((field) => {
|
|
28
28
|
if (knownModelTypes.has(field.getTypeName())) {
|
|
29
29
|
return true;
|
|
30
30
|
}
|
|
31
31
|
return false;
|
|
32
32
|
})
|
|
33
|
-
.map(field => field.name);
|
|
33
|
+
.map((field) => field.name);
|
|
34
34
|
|
|
35
35
|
const objectTypeDefinition: ObjectTypeDefinitionNode = {
|
|
36
36
|
...obj,
|
|
37
|
-
fields: obj.fields?.filter(f => !fieldsToRemove.includes(f.name.value)),
|
|
37
|
+
fields: obj.fields?.filter((f) => !fieldsToRemove.includes(f.name.value)),
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
const input = InputObjectDefinitionWrapper.fromObject(name, objectTypeDefinition, document);
|
|
41
41
|
|
|
42
42
|
// make all the fields optional
|
|
43
|
-
input.fields.forEach(f => f.makeNullable());
|
|
43
|
+
input.fields.forEach((f) => f.makeNullable());
|
|
44
44
|
|
|
45
45
|
if (!hasIdField) {
|
|
46
46
|
// Add id field and make it optional
|
|
47
47
|
input.addField(InputFieldWrapper.create('id', 'ID', false));
|
|
48
48
|
} else {
|
|
49
|
-
const idField = input.fields.find(f => f.name === 'id');
|
|
49
|
+
const idField = input.fields.find((f) => f.name === 'id');
|
|
50
50
|
if (idField) {
|
|
51
51
|
idField.makeNonNullable();
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
// Make createdAt and updatedAt field Optionals if present
|
|
56
|
-
Object.values(modelDirectiveConfig?.timestamps || {}).forEach(timeStampFieldName => {
|
|
56
|
+
Object.values(modelDirectiveConfig?.timestamps || {}).forEach((timeStampFieldName) => {
|
|
57
57
|
if (input.hasField(timeStampFieldName!)) {
|
|
58
58
|
const timestampField = input.getField(timeStampFieldName!);
|
|
59
59
|
if (['String', 'AWSDateTime'].includes(timestampField.getTypeName())) {
|
|
@@ -106,17 +106,17 @@ export const makeCreateInputField = (
|
|
|
106
106
|
|
|
107
107
|
const hasIdField = objectWrapped.hasField('id');
|
|
108
108
|
const fieldsToRemove = objectWrapped
|
|
109
|
-
.fields!.filter(field => {
|
|
109
|
+
.fields!.filter((field) => {
|
|
110
110
|
if (knownModelTypes.has(field.getTypeName())) {
|
|
111
111
|
return true;
|
|
112
112
|
}
|
|
113
113
|
return false;
|
|
114
114
|
})
|
|
115
|
-
.map(field => field.name);
|
|
115
|
+
.map((field) => field.name);
|
|
116
116
|
|
|
117
117
|
const objectTypeDefinition: ObjectTypeDefinitionNode = {
|
|
118
118
|
...obj,
|
|
119
|
-
fields: obj.fields?.filter(f => !fieldsToRemove.includes(f.name.value)),
|
|
119
|
+
fields: obj.fields?.filter((f) => !fieldsToRemove.includes(f.name.value)),
|
|
120
120
|
};
|
|
121
121
|
|
|
122
122
|
const input = InputObjectDefinitionWrapper.fromObject(name, objectTypeDefinition, document);
|
|
@@ -125,13 +125,13 @@ export const makeCreateInputField = (
|
|
|
125
125
|
if (!hasIdField) {
|
|
126
126
|
input.addField(InputFieldWrapper.create('id', 'ID', true));
|
|
127
127
|
} else {
|
|
128
|
-
const idField = input.fields.find(f => f.name === 'id');
|
|
128
|
+
const idField = input.fields.find((f) => f.name === 'id');
|
|
129
129
|
if (idField) {
|
|
130
130
|
idField.makeNullable();
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
// Make createdAt and updatedAt field Optionals if present
|
|
134
|
-
Object.values(modelDirectiveConfig?.timestamps || {}).forEach(timeStampFieldName => {
|
|
134
|
+
Object.values(modelDirectiveConfig?.timestamps || {}).forEach((timeStampFieldName) => {
|
|
135
135
|
if (input.hasField(timeStampFieldName!)) {
|
|
136
136
|
const timestampField = input.getField(timeStampFieldName!);
|
|
137
137
|
if (['String', 'AWSDateTime'].includes(timestampField.getTypeName())) {
|
|
@@ -156,7 +156,7 @@ export const makeMutationConditionInput = (
|
|
|
156
156
|
object: ObjectTypeDefinitionNode,
|
|
157
157
|
): InputObjectTypeDefinitionNode => {
|
|
158
158
|
const input = makeConditionFilterInput(ctx, name, object);
|
|
159
|
-
const idField = input.fields.find(f => f.name === 'id' && f.getTypeName() === 'ModelIDInput');
|
|
159
|
+
const idField = input.fields.find((f) => f.name === 'id' && f.getTypeName() === 'ModelIDInput');
|
|
160
160
|
if (idField) {
|
|
161
161
|
input.removeField(idField);
|
|
162
162
|
}
|