@aws-amplify/api-graphql 4.0.17-unstable.e316a2e.0 → 4.0.18-experimental-lerna-test.d2b0b08.55
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/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js +40 -31
- package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
- package/dist/cjs/internals/APIClient.js +145 -55
- package/dist/cjs/internals/APIClient.js.map +1 -1
- package/dist/cjs/internals/InternalGraphQLAPI.js +41 -42
- package/dist/cjs/internals/InternalGraphQLAPI.js.map +1 -1
- package/dist/cjs/internals/generateClient.js +15 -5
- package/dist/cjs/internals/generateClient.js.map +1 -1
- package/dist/cjs/internals/generateCustomOperationsProperty.js +50 -0
- package/dist/cjs/internals/generateCustomOperationsProperty.js.map +1 -0
- package/dist/cjs/internals/operations/custom.js +356 -0
- package/dist/cjs/internals/operations/custom.js.map +1 -0
- package/dist/cjs/internals/operations/get.js +1 -1
- package/dist/cjs/internals/operations/get.js.map +1 -1
- package/dist/cjs/internals/operations/indexQuery.js +1 -1
- package/dist/cjs/internals/operations/indexQuery.js.map +1 -1
- package/dist/cjs/internals/operations/list.js +2 -2
- package/dist/cjs/internals/operations/list.js.map +1 -1
- package/dist/cjs/internals/operations/subscription.js +1 -1
- package/dist/cjs/internals/operations/subscription.js.map +1 -1
- package/dist/cjs/internals/server/generateClientWithAmplifyInstance.js +12 -2
- package/dist/cjs/internals/server/generateClientWithAmplifyInstance.js.map +1 -1
- package/dist/cjs/internals/server/generateModelsProperty.js +1 -1
- package/dist/cjs/internals/server/generateModelsProperty.js.map +1 -1
- package/dist/cjs/internals/utils/clientProperties/generateEnumsProperty.js.map +1 -0
- package/dist/cjs/internals/utils/{generateModelsProperty.js → clientProperties/generateModelsProperty.js} +7 -7
- package/dist/cjs/internals/utils/clientProperties/generateModelsProperty.js.map +1 -0
- package/dist/cjs/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js.map +1 -0
- package/dist/cjs/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js.map +1 -0
- package/dist/cjs/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js +15 -0
- package/dist/cjs/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js.map +1 -0
- package/dist/cjs/internals/v6.js +1 -3
- package/dist/cjs/internals/v6.js.map +1 -1
- package/dist/cjs/utils/errors/constants.js +47 -0
- package/dist/cjs/utils/errors/constants.js.map +1 -0
- package/dist/cjs/utils/errors/createGraphQLResultWithError.js +15 -0
- package/dist/cjs/utils/errors/createGraphQLResultWithError.js.map +1 -0
- package/dist/cjs/utils/errors/index.js +3 -1
- package/dist/cjs/utils/errors/index.js.map +1 -1
- package/dist/cjs/utils/errors/repackageAuthError.js +7 -7
- package/dist/cjs/utils/errors/repackageAuthError.js.map +1 -1
- package/dist/cjs/utils/resolveOwnerFields.js +6 -0
- package/dist/cjs/utils/resolveOwnerFields.js.map +1 -1
- package/dist/esm/GraphQLAPI.d.ts +2 -2
- package/dist/esm/GraphQLAPI.mjs.map +1 -1
- package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +8 -8
- package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs +40 -31
- package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs.map +1 -1
- package/dist/esm/internals/APIClient.d.ts +10 -9
- package/dist/esm/internals/APIClient.mjs +144 -55
- package/dist/esm/internals/APIClient.mjs.map +1 -1
- package/dist/esm/internals/InternalGraphQLAPI.d.ts +1 -1
- package/dist/esm/internals/InternalGraphQLAPI.mjs +45 -44
- package/dist/esm/internals/InternalGraphQLAPI.mjs.map +1 -1
- package/dist/esm/internals/generateClient.mjs +15 -5
- package/dist/esm/internals/generateClient.mjs.map +1 -1
- package/dist/esm/internals/generateCustomOperationsProperty.d.ts +9 -0
- package/dist/esm/internals/generateCustomOperationsProperty.mjs +45 -0
- package/dist/esm/internals/generateCustomOperationsProperty.mjs.map +1 -0
- package/dist/esm/internals/operations/custom.d.ts +63 -0
- package/dist/esm/internals/operations/custom.mjs +354 -0
- package/dist/esm/internals/operations/custom.mjs.map +1 -0
- package/dist/esm/internals/operations/get.d.ts +1 -1
- package/dist/esm/internals/operations/get.mjs +1 -1
- package/dist/esm/internals/operations/get.mjs.map +1 -1
- package/dist/esm/internals/operations/indexQuery.d.ts +3 -3
- package/dist/esm/internals/operations/indexQuery.mjs +1 -1
- package/dist/esm/internals/operations/indexQuery.mjs.map +1 -1
- package/dist/esm/internals/operations/list.d.ts +1 -1
- package/dist/esm/internals/operations/list.mjs +2 -2
- package/dist/esm/internals/operations/list.mjs.map +1 -1
- package/dist/esm/internals/operations/subscription.d.ts +1 -1
- package/dist/esm/internals/operations/subscription.mjs +1 -1
- package/dist/esm/internals/operations/subscription.mjs.map +1 -1
- package/dist/esm/internals/server/generateClientWithAmplifyInstance.d.ts +1 -1
- package/dist/esm/internals/server/generateClientWithAmplifyInstance.mjs +12 -2
- package/dist/esm/internals/server/generateClientWithAmplifyInstance.mjs.map +1 -1
- package/dist/esm/internals/server/generateModelsProperty.d.ts +3 -3
- package/dist/esm/internals/server/generateModelsProperty.mjs +1 -1
- package/dist/esm/internals/server/generateModelsProperty.mjs.map +1 -1
- package/dist/esm/internals/types.d.ts +2 -2
- package/dist/esm/internals/utils/clientProperties/generateEnumsProperty.mjs.map +1 -0
- package/dist/esm/internals/utils/{generateModelsProperty.d.ts → clientProperties/generateModelsProperty.d.ts} +2 -2
- package/dist/esm/internals/utils/{generateModelsProperty.mjs → clientProperties/generateModelsProperty.mjs} +7 -7
- package/dist/esm/internals/utils/clientProperties/generateModelsProperty.mjs.map +1 -0
- package/dist/esm/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.mjs.map +1 -0
- package/dist/esm/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs.map +1 -0
- package/dist/esm/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.d.ts +2 -0
- package/dist/esm/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs +12 -0
- package/dist/esm/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs.map +1 -0
- package/dist/esm/internals/v6.d.ts +1 -1
- package/dist/esm/internals/v6.mjs +1 -3
- package/dist/esm/internals/v6.mjs.map +1 -1
- package/dist/esm/types/index.d.ts +43 -35
- package/dist/esm/utils/ConnectionStateMonitor.d.ts +2 -2
- package/dist/esm/utils/ConnectionStateMonitor.mjs.map +1 -1
- package/dist/esm/utils/ReachabilityMonitor/index.native.mjs.map +1 -1
- package/dist/esm/utils/errors/constants.d.ts +7 -0
- package/dist/esm/utils/errors/constants.mjs +46 -0
- package/dist/esm/utils/errors/constants.mjs.map +1 -0
- package/dist/esm/utils/errors/createGraphQLResultWithError.d.ts +2 -0
- package/dist/esm/utils/errors/createGraphQLResultWithError.mjs +13 -0
- package/dist/esm/utils/errors/createGraphQLResultWithError.mjs.map +1 -0
- package/dist/esm/utils/errors/index.d.ts +1 -0
- package/dist/esm/utils/errors/index.mjs +1 -0
- package/dist/esm/utils/errors/index.mjs.map +1 -1
- package/dist/esm/utils/errors/repackageAuthError.d.ts +3 -7
- package/dist/esm/utils/errors/repackageAuthError.mjs +6 -6
- package/dist/esm/utils/errors/repackageAuthError.mjs.map +1 -1
- package/dist/esm/utils/findIndexByFields.d.ts +1 -1
- package/dist/esm/utils/resolveConfig.mjs +1 -0
- package/dist/esm/utils/resolveConfig.mjs.map +1 -1
- package/dist/esm/utils/resolveLibraryOptions.d.ts +4 -1
- package/dist/esm/utils/resolveOwnerFields.mjs +6 -0
- package/dist/esm/utils/resolveOwnerFields.mjs.map +1 -1
- package/package.json +8 -7
- package/src/GraphQLAPI.ts +6 -5
- package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +102 -82
- package/src/internals/APIClient.ts +248 -112
- package/src/internals/InternalGraphQLAPI.ts +66 -76
- package/src/internals/clientUtils.ts +1 -1
- package/src/internals/generateClient.ts +43 -6
- package/src/internals/generateCustomOperationsProperty.ts +112 -0
- package/src/internals/operations/custom.ts +492 -0
- package/src/internals/operations/get.ts +21 -20
- package/src/internals/operations/indexQuery.ts +13 -12
- package/src/internals/operations/list.ts +20 -24
- package/src/internals/operations/observeQuery.ts +3 -1
- package/src/internals/operations/subscription.ts +20 -16
- package/src/internals/server/generateClientWithAmplifyInstance.ts +27 -8
- package/src/internals/server/generateModelsProperty.ts +12 -6
- package/src/internals/types.ts +2 -2
- package/src/internals/utils/{generateEnumsProperty.ts → clientProperties/generateEnumsProperty.ts} +7 -6
- package/src/internals/utils/{generateModelsProperty.ts → clientProperties/generateModelsProperty.ts} +11 -10
- package/src/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.ts +15 -0
- package/src/internals/v6.ts +11 -9
- package/src/server/generateClient.ts +6 -3
- package/src/types/PubSub.ts +1 -0
- package/src/types/index.ts +102 -81
- package/src/utils/ConnectionStateMonitor.ts +14 -9
- package/src/utils/ReachabilityMonitor/index.native.ts +1 -1
- package/src/utils/ReachabilityMonitor/index.ts +1 -0
- package/src/utils/ReconnectionMonitor.ts +1 -0
- package/src/utils/errors/assertValidationError.ts +1 -1
- package/src/utils/errors/constants.ts +56 -0
- package/src/utils/errors/createGraphQLResultWithError.ts +15 -0
- package/src/utils/errors/index.ts +1 -0
- package/src/utils/errors/repackageAuthError.ts +11 -14
- package/src/utils/findIndexByFields.ts +3 -3
- package/src/utils/resolveConfig.ts +3 -2
- package/src/utils/resolveLibraryOptions.ts +1 -0
- package/src/utils/resolveOwnerFields.ts +20 -8
- package/src/utils/resolvePKFields.ts +1 -0
- package/dist/cjs/internals/utils/generateEnumsProperty.js.map +0 -1
- package/dist/cjs/internals/utils/generateModelsProperty.js.map +0 -1
- package/dist/cjs/internals/utils/isApiGraphQLProviderConfig.js.map +0 -1
- package/dist/cjs/internals/utils/isConfigureEventWithResourceConfig.js.map +0 -1
- package/dist/esm/internals/utils/generateEnumsProperty.mjs.map +0 -1
- package/dist/esm/internals/utils/generateModelsProperty.mjs.map +0 -1
- package/dist/esm/internals/utils/isApiGraphQLProviderConfig.mjs.map +0 -1
- package/dist/esm/internals/utils/isConfigureEventWithResourceConfig.mjs.map +0 -1
- /package/dist/cjs/internals/utils/{generateEnumsProperty.js → clientProperties/generateEnumsProperty.js} +0 -0
- /package/dist/cjs/internals/utils/{isApiGraphQLProviderConfig.js → runtimeTypeGuards/isApiGraphQLProviderConfig.js} +0 -0
- /package/dist/cjs/internals/utils/{isConfigureEventWithResourceConfig.js → runtimeTypeGuards/isConfigureEventWithResourceConfig.js} +0 -0
- /package/dist/esm/internals/utils/{generateEnumsProperty.d.ts → clientProperties/generateEnumsProperty.d.ts} +0 -0
- /package/dist/esm/internals/utils/{generateEnumsProperty.mjs → clientProperties/generateEnumsProperty.mjs} +0 -0
- /package/dist/esm/internals/utils/{isApiGraphQLProviderConfig.d.ts → runtimeTypeGuards/isApiGraphQLProviderConfig.d.ts} +0 -0
- /package/dist/esm/internals/utils/{isApiGraphQLProviderConfig.mjs → runtimeTypeGuards/isApiGraphQLProviderConfig.mjs} +0 -0
- /package/dist/esm/internals/utils/{isConfigureEventWithResourceConfig.d.ts → runtimeTypeGuards/isConfigureEventWithResourceConfig.d.ts} +0 -0
- /package/dist/esm/internals/utils/{isConfigureEventWithResourceConfig.mjs → runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs} +0 -0
- /package/src/internals/utils/{isApiGraphQLProviderConfig.ts → runtimeTypeGuards/isApiGraphQLProviderConfig.ts} +0 -0
- /package/src/internals/utils/{isConfigureEventWithResourceConfig.ts → runtimeTypeGuards/isConfigureEventWithResourceConfig.ts} +0 -0
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.getCustomHeaders = exports.authModeParams = exports.normalizeMutationInput = exports.buildGraphQLVariables = exports.generateGraphQLDocument = exports.generateSelectionSet = exports.selectionSetIRToString = exports.customSelectionSetToIR = exports.graphQLOperationsInfo = exports.initializeModel = exports.flattenItems = void 0;
|
|
5
|
-
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
|
-
// SPDX-License-Identifier: Apache-2.0
|
|
7
|
-
const resolveOwnerFields_1 = require("../utils/resolveOwnerFields");
|
|
4
|
+
exports.getCustomHeaders = exports.authModeParams = exports.normalizeMutationInput = exports.buildGraphQLVariables = exports.generateGraphQLDocument = exports.generateSelectionSet = exports.selectionSetIRToString = exports.customSelectionSetToIR = exports.defaultSelectionSetForNonModelWithIR = exports.graphQLOperationsInfo = exports.initializeModel = exports.flattenItems = void 0;
|
|
8
5
|
const types_1 = require("../types");
|
|
6
|
+
const resolveOwnerFields_1 = require("../utils/resolveOwnerFields");
|
|
9
7
|
const connectionType = {
|
|
10
8
|
HAS_ONE: 'HAS_ONE',
|
|
11
9
|
HAS_MANY: 'HAS_MANY',
|
|
@@ -54,14 +52,17 @@ function initializeModel(client, modelName, result, modelIntrospection, authMode
|
|
|
54
52
|
'associatedWith' in modelField.association) {
|
|
55
53
|
connectionFields = modelField.association.associatedWith;
|
|
56
54
|
}
|
|
57
|
-
|
|
55
|
+
const targetNames = [];
|
|
58
56
|
if (modelField.association && 'targetNames' in modelField.association) {
|
|
59
|
-
targetNames
|
|
57
|
+
targetNames.push(...modelField.association.targetNames);
|
|
60
58
|
}
|
|
61
59
|
switch (relationType) {
|
|
62
60
|
case connectionType.HAS_ONE:
|
|
63
|
-
case connectionType.BELONGS_TO:
|
|
64
|
-
const sortKeyValues = relatedModelSKFieldNames.reduce(
|
|
61
|
+
case connectionType.BELONGS_TO: {
|
|
62
|
+
const sortKeyValues = relatedModelSKFieldNames.reduce(
|
|
63
|
+
// TODO(Eslint): is this implementation correct?
|
|
64
|
+
// eslint-disable-next-line array-callback-return
|
|
65
|
+
(acc, curVal) => {
|
|
65
66
|
if (record[curVal]) {
|
|
66
67
|
return (acc[curVal] = record[curVal]);
|
|
67
68
|
}
|
|
@@ -95,7 +96,8 @@ function initializeModel(client, modelName, result, modelIntrospection, authMode
|
|
|
95
96
|
};
|
|
96
97
|
}
|
|
97
98
|
break;
|
|
98
|
-
|
|
99
|
+
}
|
|
100
|
+
case connectionType.HAS_MANY: {
|
|
99
101
|
const parentPk = introModel.primaryKeyInfo.primaryKeyFieldName;
|
|
100
102
|
const parentSK = introModel.primaryKeyInfo.sortKeyFieldNames;
|
|
101
103
|
// M:N check - TODO: refactor
|
|
@@ -178,6 +180,7 @@ function initializeModel(client, modelName, result, modelIntrospection, authMode
|
|
|
178
180
|
};
|
|
179
181
|
}
|
|
180
182
|
break;
|
|
183
|
+
}
|
|
181
184
|
}
|
|
182
185
|
}
|
|
183
186
|
return { ...record, ...initializedRelationalFields };
|
|
@@ -197,15 +200,47 @@ exports.graphQLOperationsInfo = {
|
|
|
197
200
|
OBSERVE_QUERY: { operationPrefix: 'observeQuery', usePlural: false },
|
|
198
201
|
};
|
|
199
202
|
const SELECTION_SET_WILDCARD = '*';
|
|
203
|
+
function defaultSelectionSetForNonModelWithIR(nonModelDefinition, modelIntrospection) {
|
|
204
|
+
const { fields } = nonModelDefinition;
|
|
205
|
+
const mappedFields = Object.values(fields)
|
|
206
|
+
.map(({ type, name }) => {
|
|
207
|
+
if (typeof type.enum === 'string') {
|
|
208
|
+
return [name, FIELD_IR];
|
|
209
|
+
}
|
|
210
|
+
if (typeof type.nonModel === 'string') {
|
|
211
|
+
return [
|
|
212
|
+
name,
|
|
213
|
+
defaultSelectionSetForNonModelWithIR(modelIntrospection.nonModels[type.nonModel], modelIntrospection),
|
|
214
|
+
];
|
|
215
|
+
}
|
|
216
|
+
if (typeof type === 'string') {
|
|
217
|
+
return [name, FIELD_IR];
|
|
218
|
+
}
|
|
219
|
+
return undefined;
|
|
220
|
+
})
|
|
221
|
+
.filter((pair) => pair !== undefined);
|
|
222
|
+
return Object.fromEntries(mappedFields);
|
|
223
|
+
}
|
|
224
|
+
exports.defaultSelectionSetForNonModelWithIR = defaultSelectionSetForNonModelWithIR;
|
|
200
225
|
function defaultSelectionSetForModel(modelDefinition) {
|
|
201
226
|
// fields that are explicitly part of the graphql schema; not
|
|
202
227
|
// inferred from owner auth rules.
|
|
203
228
|
const { fields } = modelDefinition;
|
|
204
229
|
const explicitFields = Object.values(fields)
|
|
205
230
|
// Default selection set omits model fields
|
|
206
|
-
.map(({ type, name }) =>
|
|
207
|
-
(typeof type === '
|
|
208
|
-
|
|
231
|
+
.map(({ type, name }) => {
|
|
232
|
+
if (typeof type === 'string')
|
|
233
|
+
return name;
|
|
234
|
+
if (typeof type === 'object') {
|
|
235
|
+
if (typeof type?.enum === 'string') {
|
|
236
|
+
return name;
|
|
237
|
+
}
|
|
238
|
+
else if (typeof type?.nonModel === 'string') {
|
|
239
|
+
return `${name}.${SELECTION_SET_WILDCARD}`;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return undefined;
|
|
243
|
+
})
|
|
209
244
|
.filter(Boolean);
|
|
210
245
|
// fields used for owner auth rules that may or may not also
|
|
211
246
|
// be explicit on the model.
|
|
@@ -232,52 +267,86 @@ const FIELD_IR = '';
|
|
|
232
267
|
* }
|
|
233
268
|
* ```
|
|
234
269
|
*/
|
|
235
|
-
function customSelectionSetToIR(
|
|
236
|
-
const dotNotationToObject = (path,
|
|
270
|
+
function customSelectionSetToIR(modelIntrospection, modelName, selectionSet) {
|
|
271
|
+
const dotNotationToObject = (path, modelOrNonModelName) => {
|
|
237
272
|
const [fieldName, ...rest] = path.split('.');
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
273
|
+
const nested = rest[0];
|
|
274
|
+
const modelOrNonModelDefinition = modelIntrospection.models[modelOrNonModelName] ??
|
|
275
|
+
modelIntrospection.nonModels[modelOrNonModelName];
|
|
276
|
+
const modelOrNonModelFields = modelOrNonModelDefinition?.fields;
|
|
277
|
+
const relatedModel = modelOrNonModelFields?.[fieldName]?.type?.model;
|
|
278
|
+
const relatedModelDefinition = modelIntrospection.models[relatedModel];
|
|
279
|
+
const relatedNonModel = modelOrNonModelFields?.[fieldName]?.type?.nonModel;
|
|
280
|
+
const relatedNonModelDefinition = modelIntrospection.nonModels[relatedNonModel];
|
|
281
|
+
const isModelOrNonModelOrFieldType = relatedModelDefinition
|
|
282
|
+
? 'model'
|
|
283
|
+
: relatedNonModelDefinition
|
|
284
|
+
? 'nonModel'
|
|
285
|
+
: 'field';
|
|
286
|
+
if (isModelOrNonModelOrFieldType === 'nonModel') {
|
|
287
|
+
let result = {};
|
|
288
|
+
if (!nested) {
|
|
289
|
+
throw Error(`${fieldName} must declare a wildcard (*) or a field of custom type ${relatedNonModel}`);
|
|
290
|
+
}
|
|
291
|
+
if (nested === SELECTION_SET_WILDCARD) {
|
|
292
|
+
result = {
|
|
293
|
+
[fieldName]: defaultSelectionSetForNonModelWithIR(relatedNonModelDefinition, modelIntrospection),
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
result = {
|
|
298
|
+
[fieldName]: dotNotationToObject(rest.join('.'), relatedNonModel),
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
return result;
|
|
241
302
|
}
|
|
242
|
-
else {
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
const relatedModel = modelFields[fieldName]?.type
|
|
247
|
-
?.model;
|
|
248
|
-
if (!relatedModel) {
|
|
249
|
-
// TODO: may need to change this to support custom types
|
|
250
|
-
throw Error(`${fieldName} is not a model field`);
|
|
303
|
+
else if (isModelOrNonModelOrFieldType === 'model') {
|
|
304
|
+
let result = {};
|
|
305
|
+
if (!nested) {
|
|
306
|
+
throw Error(`${fieldName} must declare a wildcard (*) or a field of model ${relatedModel}`);
|
|
251
307
|
}
|
|
252
308
|
if (nested === SELECTION_SET_WILDCARD) {
|
|
253
|
-
const
|
|
309
|
+
const nestedRelatedModelDefinition = modelIntrospection.models[relatedModel];
|
|
254
310
|
result = {
|
|
255
|
-
[fieldName]:
|
|
311
|
+
[fieldName]: modelsDefaultSelectionSetIR(nestedRelatedModelDefinition),
|
|
256
312
|
};
|
|
257
313
|
}
|
|
258
314
|
else {
|
|
259
|
-
const exists = Boolean(modelFields[fieldName]);
|
|
260
|
-
if (!exists) {
|
|
261
|
-
throw Error(`${fieldName} is not a field of model ${modelName}`);
|
|
262
|
-
}
|
|
263
315
|
result = {
|
|
264
316
|
[fieldName]: dotNotationToObject(rest.join('.'), relatedModel),
|
|
265
317
|
};
|
|
266
318
|
}
|
|
267
|
-
if (
|
|
319
|
+
if (modelOrNonModelFields[fieldName]?.isArray) {
|
|
268
320
|
result = {
|
|
269
321
|
[fieldName]: {
|
|
270
322
|
items: result[fieldName],
|
|
271
323
|
},
|
|
272
324
|
};
|
|
273
325
|
}
|
|
326
|
+
return result;
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
const modelField = modelOrNonModelFields?.[fieldName];
|
|
330
|
+
const nonModelDefinition = modelIntrospection.nonModels[modelOrNonModelName];
|
|
331
|
+
const nonModelField = nonModelDefinition?.fields?.[fieldName];
|
|
332
|
+
if (!nonModelDefinition) {
|
|
333
|
+
const isOwnerField = (0, resolveOwnerFields_1.resolveOwnerFields)(modelOrNonModelDefinition).includes(fieldName);
|
|
334
|
+
if (!modelField && !isOwnerField) {
|
|
335
|
+
throw Error(`${fieldName} is not a field of model ${modelOrNonModelName}`);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
if (!nonModelField) {
|
|
340
|
+
throw Error(`${fieldName} is not a field of custom type ${modelOrNonModelName}`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return { [fieldName]: FIELD_IR };
|
|
274
344
|
}
|
|
275
|
-
return result;
|
|
276
345
|
};
|
|
277
346
|
return selectionSet.reduce((resultObj, path) => deepMergeSelectionSetObjects(dotNotationToObject(path, modelName), resultObj), {});
|
|
278
347
|
}
|
|
279
348
|
exports.customSelectionSetToIR = customSelectionSetToIR;
|
|
280
|
-
const
|
|
349
|
+
const modelsDefaultSelectionSetIR = (relatedModelDefinition) => {
|
|
281
350
|
const defaultSelectionSet = defaultSelectionSetForModel(relatedModelDefinition);
|
|
282
351
|
const reduced = defaultSelectionSet.reduce((acc, curVal) => {
|
|
283
352
|
acc[curVal] = FIELD_IR;
|
|
@@ -330,9 +399,10 @@ function deepMergeSelectionSetObjects(source, target) {
|
|
|
330
399
|
const isObject = (obj) => obj && typeof obj === 'object';
|
|
331
400
|
for (const key in source) {
|
|
332
401
|
// This verification avoids 'Prototype Pollution' issue
|
|
333
|
-
if (!
|
|
402
|
+
if (!Object.prototype.hasOwnProperty.call(source, key))
|
|
334
403
|
continue;
|
|
335
|
-
if (
|
|
404
|
+
if (Object.prototype.hasOwnProperty.call(target, key) &&
|
|
405
|
+
isObject(target[key])) {
|
|
336
406
|
deepMergeSelectionSetObjects(source[key], target[key]);
|
|
337
407
|
}
|
|
338
408
|
else {
|
|
@@ -341,18 +411,15 @@ function deepMergeSelectionSetObjects(source, target) {
|
|
|
341
411
|
}
|
|
342
412
|
return target;
|
|
343
413
|
}
|
|
344
|
-
function generateSelectionSet(
|
|
345
|
-
const modelDefinition =
|
|
346
|
-
|
|
347
|
-
return defaultSelectionSetForModel(modelDefinition).join(' ');
|
|
348
|
-
}
|
|
349
|
-
const selSetIr = customSelectionSetToIR(modelDefinitions, modelName, selectionSet);
|
|
414
|
+
function generateSelectionSet(modelIntrospection, modelName, selectionSet) {
|
|
415
|
+
const modelDefinition = modelIntrospection.models[modelName];
|
|
416
|
+
const selSetIr = customSelectionSetToIR(modelIntrospection, modelName, selectionSet ?? defaultSelectionSetForModel(modelDefinition));
|
|
350
417
|
const selSetString = selectionSetIRToString(selSetIr);
|
|
351
418
|
return selSetString;
|
|
352
419
|
}
|
|
353
420
|
exports.generateSelectionSet = generateSelectionSet;
|
|
354
|
-
function generateGraphQLDocument(
|
|
355
|
-
const modelDefinition =
|
|
421
|
+
function generateGraphQLDocument(modelIntrospection, modelName, modelOperation, listArgs, indexMeta) {
|
|
422
|
+
const modelDefinition = modelIntrospection.models[modelName];
|
|
356
423
|
const { name, pluralName, fields, primaryKeyInfo: { isCustomPrimaryKey, primaryKeyFieldName, sortKeyFieldNames, }, } = modelDefinition;
|
|
357
424
|
const { operationPrefix, usePlural } = exports.graphQLOperationsInfo[modelOperation];
|
|
358
425
|
const { selectionSet } = listArgs || {};
|
|
@@ -377,11 +444,10 @@ function generateGraphQLDocument(modelDefinitions, modelName, modelOperation, li
|
|
|
377
444
|
else {
|
|
378
445
|
throw new Error('Error generating GraphQL Document - invalid operation name');
|
|
379
446
|
}
|
|
380
|
-
console.log('indexQueryArgs', indexQueryArgs);
|
|
381
447
|
let graphQLOperationType;
|
|
382
448
|
let graphQLSelectionSet;
|
|
383
449
|
let graphQLArguments;
|
|
384
|
-
const selectionSetFields = generateSelectionSet(
|
|
450
|
+
const selectionSetFields = generateSelectionSet(modelIntrospection, modelName, selectionSet);
|
|
385
451
|
switch (modelOperation) {
|
|
386
452
|
case 'CREATE':
|
|
387
453
|
case 'UPDATE':
|
|
@@ -392,6 +458,8 @@ function generateGraphQLDocument(modelDefinitions, modelName, modelOperation, li
|
|
|
392
458
|
operationPrefix.slice(1)}${name}Input!`,
|
|
393
459
|
});
|
|
394
460
|
graphQLOperationType ?? (graphQLOperationType = 'mutation');
|
|
461
|
+
// TODO(Eslint): this this case clause correct without the break statement?
|
|
462
|
+
// eslint-disable-next-line no-fallthrough
|
|
395
463
|
case 'READ':
|
|
396
464
|
graphQLArguments ??
|
|
397
465
|
(graphQLArguments = isCustomPrimaryKey
|
|
@@ -403,27 +471,40 @@ function generateGraphQLDocument(modelDefinitions, modelName, modelOperation, li
|
|
|
403
471
|
[primaryKeyFieldName]: `${fields[primaryKeyFieldName].type}!`,
|
|
404
472
|
});
|
|
405
473
|
graphQLSelectionSet ?? (graphQLSelectionSet = selectionSetFields);
|
|
474
|
+
// TODO(Eslint): this this case clause correct without the break statement?
|
|
475
|
+
// eslint-disable-next-line no-fallthrough
|
|
406
476
|
case 'LIST':
|
|
407
477
|
graphQLArguments ??
|
|
408
478
|
(graphQLArguments = {
|
|
409
479
|
filter: `Model${name}FilterInput`,
|
|
480
|
+
...(sortKeyFieldNames.length > 0
|
|
481
|
+
? [primaryKeyFieldName, ...sortKeyFieldNames].reduce((acc, fieldName) => {
|
|
482
|
+
acc[fieldName] = `${fields[fieldName].type}`;
|
|
483
|
+
return acc;
|
|
484
|
+
}, { sortDirection: 'ModelSortDirection' })
|
|
485
|
+
: []),
|
|
410
486
|
limit: 'Int',
|
|
411
487
|
nextToken: 'String',
|
|
412
488
|
});
|
|
413
489
|
graphQLOperationType ?? (graphQLOperationType = 'query');
|
|
414
490
|
graphQLSelectionSet ??
|
|
415
491
|
(graphQLSelectionSet = `items { ${selectionSetFields} } nextToken __typename`);
|
|
492
|
+
// TODO(Eslint): this this case clause correct without the break statement?
|
|
493
|
+
// eslint-disable-next-line no-fallthrough
|
|
416
494
|
case 'INDEX_QUERY':
|
|
417
495
|
graphQLArguments ??
|
|
418
496
|
(graphQLArguments = {
|
|
419
497
|
...indexQueryArgs,
|
|
420
498
|
filter: `Model${name}FilterInput`,
|
|
499
|
+
sortDirection: 'ModelSortDirection',
|
|
421
500
|
limit: 'Int',
|
|
422
501
|
nextToken: 'String',
|
|
423
502
|
});
|
|
424
503
|
graphQLOperationType ?? (graphQLOperationType = 'query');
|
|
425
504
|
graphQLSelectionSet ??
|
|
426
505
|
(graphQLSelectionSet = `items { ${selectionSetFields} } nextToken __typename`);
|
|
506
|
+
// TODO(Eslint): this this case clause correct without the break statement?
|
|
507
|
+
// eslint-disable-next-line no-fallthrough
|
|
427
508
|
case 'ONCREATE':
|
|
428
509
|
case 'ONUPDATE':
|
|
429
510
|
case 'ONDELETE':
|
|
@@ -439,9 +520,9 @@ function generateGraphQLDocument(modelDefinitions, modelName, modelOperation, li
|
|
|
439
520
|
throw new Error('Internal error: Attempted to generate graphql document for observeQuery. Please report this error.');
|
|
440
521
|
}
|
|
441
522
|
const graphQLDocument = `${graphQLOperationType}${graphQLArguments
|
|
442
|
-
? `(${Object.entries(graphQLArguments).map(([fieldName, type]) =>
|
|
523
|
+
? `(${Object.entries(graphQLArguments).map(([fieldName, type]) => `$${fieldName}: ${type}`)})`
|
|
443
524
|
: ''} { ${graphQLFieldName}${graphQLArguments
|
|
444
|
-
? `(${Object.keys(graphQLArguments).map(fieldName => `${fieldName}:
|
|
525
|
+
? `(${Object.keys(graphQLArguments).map(fieldName => `${fieldName}: $${fieldName}`)})`
|
|
445
526
|
: ''} { ${graphQLSelectionSet} } }`;
|
|
446
527
|
return graphQLDocument;
|
|
447
528
|
}
|
|
@@ -488,6 +569,10 @@ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospecti
|
|
|
488
569
|
if (arg?.filter) {
|
|
489
570
|
variables.filter = arg.filter;
|
|
490
571
|
}
|
|
572
|
+
if (arg?.sortDirection) {
|
|
573
|
+
variables.sortDirection = arg.sortDirection;
|
|
574
|
+
variables[primaryKeyFieldName] = arg[primaryKeyFieldName];
|
|
575
|
+
}
|
|
491
576
|
if (arg?.nextToken) {
|
|
492
577
|
variables.nextToken = arg.nextToken;
|
|
493
578
|
}
|
|
@@ -495,7 +580,7 @@ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospecti
|
|
|
495
580
|
variables.limit = arg.limit;
|
|
496
581
|
}
|
|
497
582
|
break;
|
|
498
|
-
case 'INDEX_QUERY':
|
|
583
|
+
case 'INDEX_QUERY': {
|
|
499
584
|
const { pk, sk = [] } = indexMeta;
|
|
500
585
|
variables[pk] = arg[pk];
|
|
501
586
|
for (const skField of sk) {
|
|
@@ -504,6 +589,9 @@ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospecti
|
|
|
504
589
|
if (arg?.filter) {
|
|
505
590
|
variables.filter = arg.filter;
|
|
506
591
|
}
|
|
592
|
+
if (arg?.sortDirection) {
|
|
593
|
+
variables.sortDirection = arg.sortDirection;
|
|
594
|
+
}
|
|
507
595
|
if (arg?.nextToken) {
|
|
508
596
|
variables.nextToken = arg.nextToken;
|
|
509
597
|
}
|
|
@@ -511,6 +599,7 @@ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospecti
|
|
|
511
599
|
variables.limit = arg.limit;
|
|
512
600
|
}
|
|
513
601
|
break;
|
|
602
|
+
}
|
|
514
603
|
case 'ONCREATE':
|
|
515
604
|
case 'ONUPDATE':
|
|
516
605
|
case 'ONDELETE':
|
|
@@ -520,9 +609,10 @@ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospecti
|
|
|
520
609
|
break;
|
|
521
610
|
case 'OBSERVE_QUERY':
|
|
522
611
|
throw new Error('Internal error: Attempted to build variables for observeQuery. Please report this error.');
|
|
523
|
-
default:
|
|
612
|
+
default: {
|
|
524
613
|
const exhaustiveCheck = operation;
|
|
525
614
|
throw new Error(`Unhandled operation case: ${exhaustiveCheck}`);
|
|
615
|
+
}
|
|
526
616
|
}
|
|
527
617
|
return variables;
|
|
528
618
|
}
|
|
@@ -585,7 +675,7 @@ exports.normalizeMutationInput = normalizeMutationInput;
|
|
|
585
675
|
* as a fallback.
|
|
586
676
|
*
|
|
587
677
|
* @param client Configured client from `generateClient`
|
|
588
|
-
* @param options Args/Options
|
|
678
|
+
* @param options Args/Options object from call site.
|
|
589
679
|
* @returns
|
|
590
680
|
*/
|
|
591
681
|
function authModeParams(client, options = {}) {
|
|
@@ -597,9 +687,9 @@ function authModeParams(client, options = {}) {
|
|
|
597
687
|
exports.authModeParams = authModeParams;
|
|
598
688
|
/**
|
|
599
689
|
* Retrieves custom headers from either the client or request options.
|
|
600
|
-
* @param
|
|
601
|
-
* @param
|
|
602
|
-
* @returns {CustomHeaders}
|
|
690
|
+
* @param client V6Client | V6ClientSSRRequest | V6ClientSSRCookies - for extracting client headers
|
|
691
|
+
* @param requestHeaders {@link CustomHeaders} - request headers
|
|
692
|
+
* @returns custom headers as {@link CustomHeaders}
|
|
603
693
|
*/
|
|
604
694
|
function getCustomHeaders(client, requestHeaders) {
|
|
605
695
|
let headers = client[types_1.__headers] || {};
|