@aws-amplify/graphql-model-transformer 1.4.0-rds.0 → 1.4.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 +31 -1
- 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 +38 -36
- 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.d.ts.map +1 -1
- package/lib/graphql-types/mutation.js +12 -12
- package/lib/graphql-types/mutation.js.map +1 -1
- package/lib/graphql-types/query.d.ts.map +1 -1
- package/lib/graphql-types/query.js.map +1 -1
- package/lib/rds-lambda.zip +0 -0
- package/lib/rds-notification-lambda.zip +0 -0
- package/lib/rds-patching-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/dynamodb-vtl-generator.d.ts.map +1 -1
- package/lib/resolvers/generators/dynamodb-vtl-generator.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 +2 -2
- package/lib/resolvers/rds/resolver.d.ts.map +1 -1
- package/lib/resolvers/rds/resolver.js +83 -83
- package/lib/resolvers/rds/resolver.js.map +1 -1
- package/lib/resources/dynamo-model-resource-generator.d.ts +1 -1
- package/lib/resources/dynamo-model-resource-generator.d.ts.map +1 -1
- package/lib/resources/dynamo-model-resource-generator.js +2 -2
- 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 +15 -7
- 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 +17 -8
- package/publish-notification-lambda/node_modules/.package-lock.json +13 -13
- package/publish-notification-lambda/node_modules/@smithy/protocol-http/package.json +3 -3
- package/publish-notification-lambda/node_modules/@smithy/types/package.json +2 -2
- package/publish-notification-lambda/node_modules/@types/node/README.md +1 -1
- package/publish-notification-lambda/node_modules/@types/node/package.json +2 -2
- package/publish-notification-lambda/node_modules/tslib/package.json +1 -1
- package/publish-notification-lambda/node_modules/tslib/tslib.es6.mjs +50 -1
- package/publish-notification-lambda/package-lock.json +13 -13
- package/publish-notification-lambda/src/index.ts +2 -2
- package/publish-notification-lambda/tsconfig.json +9 -9
- package/rds-lambda/handler.ts +17 -4
- package/rds-lambda/node_modules/.package-lock.json +376 -377
- package/rds-lambda/node_modules/@babel/compat-data/README.md +1 -1
- package/rds-lambda/node_modules/@babel/compat-data/data/corejs2-built-ins.json +146 -0
- package/rds-lambda/node_modules/@babel/compat-data/data/native-modules.json +1 -1
- package/rds-lambda/node_modules/@babel/compat-data/data/plugin-bugfixes.json +17 -0
- package/rds-lambda/node_modules/@babel/compat-data/data/plugins.json +76 -9
- package/rds-lambda/node_modules/@babel/compat-data/package.json +4 -4
- package/rds-lambda/node_modules/@babel/core/README.md +1 -1
- package/rds-lambda/node_modules/@babel/core/package.json +10 -10
- package/rds-lambda/node_modules/@babel/generator/README.md +1 -1
- package/rds-lambda/node_modules/@babel/generator/package.json +4 -3
- package/rds-lambda/node_modules/@babel/helper-compilation-targets/README.md +1 -1
- 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/@babel/helper-split-export-declaration/README.md +1 -1
- package/rds-lambda/node_modules/@babel/helper-split-export-declaration/package.json +1 -1
- package/rds-lambda/node_modules/@babel/helpers/README.md +1 -1
- package/rds-lambda/node_modules/@babel/helpers/package.json +3 -3
- package/rds-lambda/node_modules/@babel/parser/README.md +1 -1
- package/rds-lambda/node_modules/@babel/parser/package.json +2 -2
- package/rds-lambda/node_modules/@babel/traverse/README.md +1 -1
- package/rds-lambda/node_modules/@babel/traverse/package.json +4 -4
- package/rds-lambda/node_modules/@jest/console/package.json +6 -6
- package/rds-lambda/node_modules/@jest/core/package.json +21 -21
- package/rds-lambda/node_modules/@jest/environment/package.json +5 -5
- package/rds-lambda/node_modules/@jest/expect/package.json +6 -6
- package/rds-lambda/node_modules/@jest/expect-utils/package.json +5 -5
- package/rds-lambda/node_modules/@jest/fake-timers/package.json +7 -7
- package/rds-lambda/node_modules/@jest/globals/package.json +6 -6
- package/rds-lambda/node_modules/@jest/reporters/package.json +14 -14
- package/rds-lambda/node_modules/@jest/schemas/package.json +3 -3
- package/rds-lambda/node_modules/@jest/source-map/package.json +3 -3
- package/rds-lambda/node_modules/@jest/test-result/package.json +6 -6
- package/rds-lambda/node_modules/@jest/test-sequencer/package.json +5 -5
- package/rds-lambda/node_modules/@jest/transform/package.json +7 -7
- package/rds-lambda/node_modules/@jest/types/package.json +5 -5
- package/rds-lambda/node_modules/@sinclair/typebox/package.json +3 -8
- package/rds-lambda/node_modules/@sinclair/typebox/readme.md +487 -300
- package/rds-lambda/node_modules/@smithy/protocol-http/package.json +3 -3
- package/rds-lambda/node_modules/@smithy/types/package.json +2 -2
- 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/babel-jest/package.json +4 -4
- package/rds-lambda/node_modules/caniuse-lite/package.json +1 -1
- package/rds-lambda/node_modules/collect-v8-coverage/CHANGELOG.md +7 -0
- package/rds-lambda/node_modules/collect-v8-coverage/package.json +18 -20
- 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/expect/package.json +10 -9
- package/rds-lambda/node_modules/jest/package.json +7 -7
- package/rds-lambda/node_modules/jest-circus/package.json +15 -14
- package/rds-lambda/node_modules/jest-cli/package.json +10 -9
- package/rds-lambda/node_modules/jest-config/package.json +14 -14
- package/rds-lambda/node_modules/jest-diff/package.json +4 -4
- package/rds-lambda/node_modules/jest-each/package.json +5 -5
- package/rds-lambda/node_modules/jest-environment-node/package.json +8 -8
- package/rds-lambda/node_modules/jest-haste-map/package.json +5 -5
- package/rds-lambda/node_modules/jest-leak-detector/package.json +3 -3
- package/rds-lambda/node_modules/jest-matcher-utils/package.json +5 -5
- package/rds-lambda/node_modules/jest-message-util/package.json +4 -4
- package/rds-lambda/node_modules/jest-mock/package.json +6 -6
- package/rds-lambda/node_modules/jest-resolve/package.json +7 -7
- package/rds-lambda/node_modules/jest-resolve-dependencies/package.json +8 -8
- package/rds-lambda/node_modules/jest-runner/package.json +20 -20
- package/rds-lambda/node_modules/jest-runtime/package.json +17 -17
- package/rds-lambda/node_modules/jest-snapshot/node_modules/semver/README.md +3 -1
- package/rds-lambda/node_modules/jest-snapshot/node_modules/semver/package.json +3 -3
- package/rds-lambda/node_modules/jest-snapshot/package.json +15 -17
- package/rds-lambda/node_modules/jest-util/package.json +3 -3
- package/rds-lambda/node_modules/jest-validate/package.json +4 -4
- package/rds-lambda/node_modules/jest-watcher/package.json +5 -5
- package/rds-lambda/node_modules/jest-worker/package.json +6 -6
- 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/node-releases/data/processed/envs.json +1 -1
- package/rds-lambda/node_modules/node-releases/package.json +1 -1
- package/rds-lambda/node_modules/pg-connection-string/package.json +2 -2
- package/rds-lambda/node_modules/pretty-format/package.json +5 -5
- package/rds-lambda/node_modules/semver/package.json +19 -9
- package/rds-lambda/node_modules/ts-jest/.ts-jest-digest +1 -1
- package/rds-lambda/node_modules/ts-jest/CHANGELOG.md +9 -0
- package/rds-lambda/node_modules/ts-jest/node_modules/semver/README.md +3 -1
- package/rds-lambda/node_modules/ts-jest/node_modules/semver/package.json +3 -3
- package/rds-lambda/node_modules/ts-jest/package.json +12 -12
- package/rds-lambda/node_modules/tslib/package.json +1 -1
- package/rds-lambda/node_modules/tslib/tslib.es6.mjs +50 -1
- package/rds-lambda/package-lock.json +376 -377
- package/rds-patching-lambda/node_modules/.package-lock.json +13 -13
- package/rds-patching-lambda/node_modules/@smithy/protocol-http/package.json +3 -3
- package/rds-patching-lambda/node_modules/@smithy/types/package.json +2 -2
- package/rds-patching-lambda/node_modules/@types/node/README.md +1 -1
- package/rds-patching-lambda/node_modules/@types/node/package.json +2 -2
- package/rds-patching-lambda/node_modules/tslib/package.json +1 -1
- package/rds-patching-lambda/node_modules/tslib/tslib.es6.mjs +50 -1
- package/rds-patching-lambda/package-lock.json +13 -13
- package/rds-patching-lambda/src/index.ts +19 -6
- package/rds-patching-lambda/tsconfig.json +9 -9
- package/src/__tests__/model-transformer.test.ts +175 -145
- package/src/__tests__/test-utils/helpers.ts +1 -1
- package/src/definitions.ts +28 -2
- package/src/graphql-model-transformer.ts +81 -75
- package/src/graphql-types/common.ts +41 -41
- package/src/graphql-types/mutation.ts +13 -13
- package/src/graphql-types/query.ts +1 -0
- package/src/index.ts +1 -0
- package/src/resolvers/common.ts +1 -12
- package/src/resolvers/dynamodb/mutation.ts +16 -13
- package/src/resolvers/dynamodb/query.ts +7 -12
- package/src/resolvers/dynamodb/subscriptions.ts +1 -3
- package/src/resolvers/generators/dynamodb-vtl-generator.ts +18 -8
- package/src/resolvers/generators/rds-vtl-generator.ts +11 -4
- package/src/resolvers/generators/vtl-generator.ts +5 -5
- package/src/resolvers/index.ts +1 -3
- package/src/resolvers/rds/mutation.ts +76 -70
- package/src/resolvers/rds/query.ts +4 -12
- package/src/resolvers/rds/resolver.ts +125 -131
- package/src/resources/dynamo-model-resource-generator.ts +14 -28
- package/src/resources/model-resource-generator.ts +65 -27
- package/src/resources/rds-model-resource-generator.ts +5 -15
- package/tsconfig.json +4 -4
- package/tsconfig.tsbuildinfo +1 -1
- package/rds-lambda/node_modules/semver/CHANGELOG.md +0 -70
|
@@ -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 {
|
|
@@ -123,16 +118,24 @@ const DDB_DATASOURCE_TYPE = { dbType: DDB_DB_TYPE, provisioned: true };
|
|
|
123
118
|
*/
|
|
124
119
|
export class ModelTransformer extends TransformerModelBase implements TransformerModelProvider {
|
|
125
120
|
private options: ModelTransformerOptions;
|
|
121
|
+
|
|
126
122
|
private datasourceMap: Record<string, DataSourceProvider> = {};
|
|
123
|
+
|
|
127
124
|
private ddbTableMap: Record<string, ITable> = {};
|
|
125
|
+
|
|
128
126
|
private resolverMap: Record<string, TransformerResolverProvider> = {};
|
|
127
|
+
|
|
129
128
|
private typesWithModelDirective: Set<string> = new Set();
|
|
129
|
+
|
|
130
130
|
private resourceGeneratorMap: Map<string, ModelResourceGenerator> = new Map<string, ModelResourceGenerator>();
|
|
131
|
-
|
|
131
|
+
|
|
132
|
+
private modelToDatasourceMap: Map<string, DatasourceType> = new Map<string, DatasourceType>();
|
|
133
|
+
|
|
132
134
|
/**
|
|
133
135
|
* A Map to hold the directive configuration
|
|
134
136
|
*/
|
|
135
137
|
private modelDirectiveConfig: Map<string, ModelDirectiveConfiguration> = new Map();
|
|
138
|
+
|
|
136
139
|
constructor(options: ModelTransformerOptions = {}) {
|
|
137
140
|
super('amplify-model-transformer', directiveDefinition);
|
|
138
141
|
this.options = this.getOptions(options);
|
|
@@ -162,9 +165,10 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
162
165
|
};
|
|
163
166
|
|
|
164
167
|
object = (definition: ObjectTypeDefinitionNode, directive: DirectiveNode, ctx: TransformerSchemaVisitStepContextProvider): void => {
|
|
165
|
-
const isTypeNameReserved =
|
|
166
|
-
|
|
167
|
-
|
|
168
|
+
const isTypeNameReserved =
|
|
169
|
+
definition.name.value === ctx.output.getQueryTypeName() ||
|
|
170
|
+
definition.name.value === ctx.output.getMutationTypeName() ||
|
|
171
|
+
definition.name.value === ctx.output.getSubscriptionTypeName();
|
|
168
172
|
|
|
169
173
|
const isDynamoDB = (ctx.modelToDatasourceMap.get(definition.name.value) ?? DDB_DATASOURCE_TYPE).dbType === DDB_DB_TYPE;
|
|
170
174
|
if (isTypeNameReserved) {
|
|
@@ -180,31 +184,36 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
180
184
|
}
|
|
181
185
|
|
|
182
186
|
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
|
-
|
|
187
|
+
const options = directiveWrapped.getArguments(
|
|
188
|
+
{
|
|
189
|
+
queries: {
|
|
190
|
+
get: getFieldNameFor('get', typeName),
|
|
191
|
+
list: getFieldNameFor('list', typeName),
|
|
192
|
+
...(ctx.isProjectUsingDataStore() ? { sync: getFieldNameFor('sync', typeName) } : undefined),
|
|
193
|
+
},
|
|
194
|
+
mutations: {
|
|
195
|
+
create: getFieldNameFor('create', typeName),
|
|
196
|
+
update: getFieldNameFor('update', typeName),
|
|
197
|
+
delete: getFieldNameFor('delete', typeName),
|
|
198
|
+
},
|
|
199
|
+
subscriptions: {
|
|
200
|
+
level: SubscriptionLevel.on,
|
|
201
|
+
onCreate: [getFieldNameFor('onCreate', typeName)],
|
|
202
|
+
onDelete: [getFieldNameFor('onDelete', typeName)],
|
|
203
|
+
onUpdate: [getFieldNameFor('onUpdate', typeName)],
|
|
204
|
+
},
|
|
205
|
+
timestamps: isDynamoDB
|
|
206
|
+
? {
|
|
207
|
+
createdAt: 'createdAt',
|
|
208
|
+
updatedAt: 'updatedAt',
|
|
209
|
+
}
|
|
210
|
+
: {
|
|
211
|
+
createdAt: undefined,
|
|
212
|
+
updatedAt: undefined,
|
|
213
|
+
},
|
|
206
214
|
},
|
|
207
|
-
|
|
215
|
+
generateGetArgumentsInput(ctx.transformParameters),
|
|
216
|
+
);
|
|
208
217
|
|
|
209
218
|
// This property override is specifically to address parity between V1 and V2 when the FF is disabled
|
|
210
219
|
// 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 +233,10 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
224
233
|
},
|
|
225
234
|
generateGetArgumentsInput(ctx.transformParameters),
|
|
226
235
|
);
|
|
227
|
-
if (
|
|
228
|
-
|
|
236
|
+
if (
|
|
237
|
+
baseArgs?.subscriptions?.level === SubscriptionLevel.public &&
|
|
238
|
+
!(baseArgs?.subscriptions?.onCreate || baseArgs?.subscriptions?.onDelete || baseArgs?.subscriptions?.onUpdate)
|
|
239
|
+
) {
|
|
229
240
|
options.subscriptions = { level: SubscriptionLevel.public, ...publicSubscriptionDefaults };
|
|
230
241
|
}
|
|
231
242
|
}
|
|
@@ -255,7 +266,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
255
266
|
};
|
|
256
267
|
|
|
257
268
|
prepare = (context: TransformerPrepareStepContextProvider): void => {
|
|
258
|
-
this.typesWithModelDirective.forEach(modelTypeName => {
|
|
269
|
+
this.typesWithModelDirective.forEach((modelTypeName) => {
|
|
259
270
|
const type = context.output.getObject(modelTypeName);
|
|
260
271
|
context.providerRegistry.registerDataSourceProvider(type!, this);
|
|
261
272
|
});
|
|
@@ -266,9 +277,9 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
266
277
|
addModelConditionInputs(ctx);
|
|
267
278
|
|
|
268
279
|
this.ensureModelSortDirectionEnum(ctx);
|
|
269
|
-
this.typesWithModelDirective.forEach(type => {
|
|
280
|
+
this.typesWithModelDirective.forEach((type) => {
|
|
270
281
|
const def = ctx.output.getObject(type)!;
|
|
271
|
-
const hasAuth = def.directives!.some(dir => dir.name.value === 'auth');
|
|
282
|
+
const hasAuth = def.directives!.some((dir) => dir.name.value === 'auth');
|
|
272
283
|
|
|
273
284
|
// add Non Model type inputs
|
|
274
285
|
this.createNonModelInputs(ctx, def);
|
|
@@ -291,19 +302,19 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
291
302
|
}
|
|
292
303
|
}
|
|
293
304
|
// global auth check
|
|
294
|
-
if (!hasAuth && ctx.sandboxModeEnabled && ctx.authConfig.defaultAuthentication.authenticationType !== 'API_KEY') {
|
|
305
|
+
if (!hasAuth && ctx.transformParameters.sandboxModeEnabled && ctx.authConfig.defaultAuthentication.authenticationType !== 'API_KEY') {
|
|
295
306
|
const apiKeyDirArray = [makeDirective(API_KEY_DIRECTIVE, [])];
|
|
296
307
|
extendTypeWithDirectives(ctx, def.name.value, apiKeyDirArray);
|
|
297
308
|
propagateApiKeyToNestedTypes(ctx as TransformerContextProvider, def, new Set<string>());
|
|
298
|
-
queryFields.forEach(operationField => {
|
|
309
|
+
queryFields.forEach((operationField) => {
|
|
299
310
|
const operationName = operationField.name.value;
|
|
300
311
|
addDirectivesToOperation(ctx, ctx.output.getQueryTypeName()!, operationName, apiKeyDirArray);
|
|
301
312
|
});
|
|
302
|
-
mutationFields.forEach(operationField => {
|
|
313
|
+
mutationFields.forEach((operationField) => {
|
|
303
314
|
const operationName = operationField.name.value;
|
|
304
315
|
addDirectivesToOperation(ctx, ctx.output.getMutationTypeName()!, operationName, apiKeyDirArray);
|
|
305
316
|
});
|
|
306
|
-
subscriptionsFields.forEach(operationField => {
|
|
317
|
+
subscriptionsFields.forEach((operationField) => {
|
|
307
318
|
const operationName = operationField.name.value;
|
|
308
319
|
addDirectivesToOperation(ctx, ctx.output.getSubscriptionTypeName()!, operationName, apiKeyDirArray);
|
|
309
320
|
});
|
|
@@ -373,14 +384,9 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
373
384
|
const dbInfo = ctx.modelToDatasourceMap.get(type.name.value) ?? DDB_DATASOURCE_TYPE;
|
|
374
385
|
if (dbInfo?.dbType && this.resourceGeneratorMap.has(dbInfo.dbType)) {
|
|
375
386
|
// 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
|
-
);
|
|
387
|
+
return this.resourceGeneratorMap
|
|
388
|
+
.get(dbInfo.dbType)!
|
|
389
|
+
.generateUpdateResolver(ctx, type, modelDirectiveConfig, typeName, fieldName, resolverLogicalId);
|
|
384
390
|
}
|
|
385
391
|
throw new Error(`DB Type undefined or resource generator not provided for ${type.name.value}`);
|
|
386
392
|
};
|
|
@@ -468,7 +474,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
468
474
|
[SubscriptionFieldType.ON_UPDATE]: MutationFieldType.UPDATE,
|
|
469
475
|
[SubscriptionFieldType.ON_DELETE]: MutationFieldType.DELETE,
|
|
470
476
|
};
|
|
471
|
-
const mutation = Array.from(mutationMap).find(m => m.type === mutationToSubscriptionTypeMap[subscriptionType]);
|
|
477
|
+
const mutation = Array.from(mutationMap).find((m) => m.type === mutationToSubscriptionTypeMap[subscriptionType]);
|
|
472
478
|
if (mutation) {
|
|
473
479
|
return mutation.fieldName;
|
|
474
480
|
}
|
|
@@ -478,7 +484,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
478
484
|
private createQueryFields = (ctx: TransformerValidationStepContextProvider, def: ObjectTypeDefinitionNode): FieldDefinitionNode[] => {
|
|
479
485
|
const queryFields: FieldDefinitionNode[] = [];
|
|
480
486
|
const queryFieldNames = this.getQueryFieldNames(def!);
|
|
481
|
-
queryFieldNames.forEach(queryField => {
|
|
487
|
+
queryFieldNames.forEach((queryField) => {
|
|
482
488
|
const outputType = this.getOutputType(ctx, def, queryField);
|
|
483
489
|
const args = this.getInputs(ctx, def!, {
|
|
484
490
|
fieldName: queryField.fieldName,
|
|
@@ -494,7 +500,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
494
500
|
private createMutationFields = (ctx: TransformerValidationStepContextProvider, def: ObjectTypeDefinitionNode): FieldDefinitionNode[] => {
|
|
495
501
|
const mutationFields: FieldDefinitionNode[] = [];
|
|
496
502
|
const mutationFieldNames = this.getMutationFieldNames(def!);
|
|
497
|
-
mutationFieldNames.forEach(mutationField => {
|
|
503
|
+
mutationFieldNames.forEach((mutationField) => {
|
|
498
504
|
const args = this.getInputs(ctx, def!, {
|
|
499
505
|
fieldName: mutationField.fieldName,
|
|
500
506
|
typeName: mutationField.typeName,
|
|
@@ -516,19 +522,21 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
516
522
|
|
|
517
523
|
const subscriptionFields: FieldDefinitionNode[] = [];
|
|
518
524
|
|
|
519
|
-
Object.keys(subscriptionToMutationsMap).forEach(subscriptionFieldName => {
|
|
525
|
+
Object.keys(subscriptionToMutationsMap).forEach((subscriptionFieldName) => {
|
|
520
526
|
const maps = subscriptionToMutationsMap[subscriptionFieldName];
|
|
521
527
|
|
|
522
528
|
const args: InputValueDefinitionNode[] = [];
|
|
523
|
-
maps.map(it =>
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
529
|
+
maps.map((it) =>
|
|
530
|
+
args.push(
|
|
531
|
+
...this.getInputs(ctx, def!, {
|
|
532
|
+
fieldName: it.fieldName,
|
|
533
|
+
typeName: it.typeName,
|
|
534
|
+
type: it.type,
|
|
535
|
+
}),
|
|
536
|
+
),
|
|
537
|
+
);
|
|
530
538
|
|
|
531
|
-
const mutationNames = maps.map(it => this.getMutationName(it.type, mutationFields));
|
|
539
|
+
const mutationNames = maps.map((it) => this.getMutationName(it.type, mutationFields));
|
|
532
540
|
|
|
533
541
|
// Todo use directive wrapper to build the directive node
|
|
534
542
|
const directive = makeDirective('aws_subscribe', [makeArgument('mutations', makeValueNode(mutationNames))]);
|
|
@@ -601,7 +609,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
601
609
|
const filterInputs = createEnumModelFilters(ctx, type);
|
|
602
610
|
conditionInput = makeMutationConditionInput(ctx, conditionTypeName, type);
|
|
603
611
|
filterInputs.push(conditionInput);
|
|
604
|
-
filterInputs.forEach(input => {
|
|
612
|
+
filterInputs.forEach((input) => {
|
|
605
613
|
const conditionInputName = input.name.value;
|
|
606
614
|
if (!ctx.output.getType(conditionInputName)) {
|
|
607
615
|
ctx.output.addInput(input);
|
|
@@ -616,7 +624,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
616
624
|
const filterInputName = toPascalCase(['Model', type.name.value, 'FilterInput']);
|
|
617
625
|
const filterInputs = createEnumModelFilters(ctx, type);
|
|
618
626
|
filterInputs.push(makeListQueryFilterInput(ctx, filterInputName, type));
|
|
619
|
-
filterInputs.forEach(input => {
|
|
627
|
+
filterInputs.forEach((input) => {
|
|
620
628
|
const conditionInputName = input.name.value;
|
|
621
629
|
if (!ctx.output.getType(conditionInputName)) {
|
|
622
630
|
ctx.output.addInput(input);
|
|
@@ -694,16 +702,14 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
694
702
|
const filterInputName = toPascalCase(['ModelSubscription', type.name.value, 'FilterInput']);
|
|
695
703
|
const filterInputs = createEnumModelFilters(ctx, type);
|
|
696
704
|
filterInputs.push(makeSubscriptionQueryFilterInput(ctx, filterInputName, type));
|
|
697
|
-
filterInputs.forEach(input => {
|
|
705
|
+
filterInputs.forEach((input) => {
|
|
698
706
|
const conditionInputName = input.name.value;
|
|
699
707
|
if (!ctx.output.getType(conditionInputName)) {
|
|
700
708
|
ctx.output.addInput(input);
|
|
701
709
|
}
|
|
702
710
|
});
|
|
703
711
|
|
|
704
|
-
return [
|
|
705
|
-
makeInputValueDefinition('filter', makeNamedType(filterInputName)),
|
|
706
|
-
];
|
|
712
|
+
return [makeInputValueDefinition('filter', makeNamedType(filterInputName))];
|
|
707
713
|
|
|
708
714
|
default:
|
|
709
715
|
throw new Error('Unknown operation type');
|
|
@@ -752,10 +758,10 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
752
758
|
createIAMRole = (context: TransformerContextProvider, def: ObjectTypeDefinitionNode, stack: cdk.Stack, tableName: string): iam.Role => {
|
|
753
759
|
const ddbGenerator = this.resourceGeneratorMap.get(DDB_DB_TYPE) as DynamoModelResourceGenerator;
|
|
754
760
|
return ddbGenerator.createIAMRole(context, def, stack, tableName);
|
|
755
|
-
}
|
|
761
|
+
};
|
|
756
762
|
|
|
757
763
|
private createNonModelInputs = (ctx: TransformerTransformSchemaStepContextProvider, obj: ObjectTypeDefinitionNode): void => {
|
|
758
|
-
(obj.fields ?? []).forEach(field => {
|
|
764
|
+
(obj.fields ?? []).forEach((field) => {
|
|
759
765
|
if (!isScalar(field.type)) {
|
|
760
766
|
const def = ctx.output.getType(getBaseType(field.type));
|
|
761
767
|
if (def && def.kind === 'ObjectTypeDefinition' && !this.isModelField(def.name.value)) {
|
|
@@ -770,7 +776,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
770
776
|
});
|
|
771
777
|
};
|
|
772
778
|
|
|
773
|
-
private isModelField = (name: string): boolean =>
|
|
779
|
+
private isModelField = (name: string): boolean => !!this.typesWithModelDirective.has(name);
|
|
774
780
|
|
|
775
781
|
private getNonModelInputObjectName = (name: string): string => `${toUpper(name)}Input`;
|
|
776
782
|
|
|
@@ -803,7 +809,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
803
809
|
}
|
|
804
810
|
}
|
|
805
811
|
|
|
806
|
-
timestamps.forEach(fieldName => {
|
|
812
|
+
timestamps.forEach((fieldName) => {
|
|
807
813
|
if (typeWrapper.hasField(fieldName)) {
|
|
808
814
|
const field = typeWrapper.getField(fieldName);
|
|
809
815
|
if (!['String', 'AWSDateTime'].includes(field.getTypeName())) {
|
|
@@ -838,7 +844,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
838
844
|
const subscriptionToMutationsMap: { [subField: string]: { fieldName: string; typeName: string; type: SubscriptionFieldType }[] } = {};
|
|
839
845
|
const subscriptionFieldNames = this.getSubscriptionFieldNames(def);
|
|
840
846
|
|
|
841
|
-
subscriptionFieldNames.forEach(subscriptionFieldName => {
|
|
847
|
+
subscriptionFieldNames.forEach((subscriptionFieldName) => {
|
|
842
848
|
if (!subscriptionToMutationsMap[subscriptionFieldName.fieldName]) {
|
|
843
849
|
subscriptionToMutationsMap[subscriptionFieldName.fieldName] = [];
|
|
844
850
|
}
|
|
@@ -854,7 +860,7 @@ export class ModelTransformer extends TransformerModelBase implements Transforme
|
|
|
854
860
|
|
|
855
861
|
ctx.output.addEnum(modelSortDirection);
|
|
856
862
|
}
|
|
857
|
-
}
|
|
863
|
+
};
|
|
858
864
|
|
|
859
865
|
private getOptions = (options: ModelTransformerOptions): ModelTransformerOptions => ({
|
|
860
866
|
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, [])]);
|
|
@@ -2,8 +2,8 @@ import { TransformerTransformSchemaStepContextProvider } from '@aws-amplify/grap
|
|
|
2
2
|
import { DocumentNode, InputObjectTypeDefinitionNode, ObjectTypeDefinitionNode } from 'graphql';
|
|
3
3
|
import { ModelResourceIDs, toPascalCase } from 'graphql-transformer-common';
|
|
4
4
|
import { InputFieldWrapper, InputObjectDefinitionWrapper, ObjectDefinitionWrapper } from '@aws-amplify/graphql-transformer-core';
|
|
5
|
-
import { makeConditionFilterInput } from './common';
|
|
6
5
|
import { ModelDirectiveConfiguration } from '../directive';
|
|
6
|
+
import { makeConditionFilterInput } from './common';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Generate input used for update mutation
|
|
@@ -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
|
}
|
|
@@ -2,6 +2,7 @@ import { TransformerTransformSchemaStepContextProvider } from '@aws-amplify/grap
|
|
|
2
2
|
import { InputObjectTypeDefinitionNode, ObjectTypeDefinitionNode } from 'graphql';
|
|
3
3
|
import { FieldWrapper, ObjectDefinitionWrapper } from '@aws-amplify/graphql-transformer-core';
|
|
4
4
|
import { makeConditionFilterInput, makeSubscriptionFilterInput } from './common';
|
|
5
|
+
|
|
5
6
|
export const makeListQueryFilterInput = (
|
|
6
7
|
ctx: TransformerTransformSchemaStepContextProvider,
|
|
7
8
|
name: string,
|
package/src/index.ts
CHANGED