@aws-amplify/api-graphql 4.0.1 → 4.0.2-unstable.b778a9e.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.
Files changed (110) hide show
  1. package/dist/cjs/internals/APIClient.js +503 -0
  2. package/dist/cjs/internals/APIClient.js.map +1 -0
  3. package/dist/cjs/internals/InternalGraphQLAPI.js +1 -1
  4. package/dist/cjs/internals/InternalGraphQLAPI.js.map +1 -1
  5. package/dist/cjs/internals/generateClient.js +33 -0
  6. package/dist/cjs/internals/generateClient.js.map +1 -0
  7. package/dist/cjs/internals/generateModelsProperty.js +43 -0
  8. package/dist/cjs/internals/generateModelsProperty.js.map +1 -0
  9. package/dist/cjs/internals/index.js +3 -1
  10. package/dist/cjs/internals/index.js.map +1 -1
  11. package/dist/cjs/internals/operations/get.js +61 -0
  12. package/dist/cjs/internals/operations/get.js.map +1 -0
  13. package/dist/cjs/internals/operations/list.js +73 -0
  14. package/dist/cjs/internals/operations/list.js.map +1 -0
  15. package/dist/cjs/internals/operations/observeQuery.js +121 -0
  16. package/dist/cjs/internals/operations/observeQuery.js.map +1 -0
  17. package/dist/cjs/internals/operations/subscription.js +29 -0
  18. package/dist/cjs/internals/operations/subscription.js.map +1 -0
  19. package/dist/cjs/internals/server/generateClient.js +32 -0
  20. package/dist/cjs/internals/server/generateClient.js.map +1 -0
  21. package/dist/cjs/internals/server/generateModelsProperty.js +47 -0
  22. package/dist/cjs/internals/server/generateModelsProperty.js.map +1 -0
  23. package/dist/cjs/internals/server/index.js +9 -0
  24. package/dist/cjs/internals/server/index.js.map +1 -0
  25. package/dist/cjs/internals/types.js +4 -0
  26. package/dist/cjs/internals/types.js.map +1 -0
  27. package/dist/cjs/types/index.js +3 -1
  28. package/dist/cjs/types/index.js.map +1 -1
  29. package/dist/cjs/utils/findIndexByFields.js +25 -0
  30. package/dist/cjs/utils/findIndexByFields.js.map +1 -0
  31. package/dist/cjs/utils/index.js +5 -1
  32. package/dist/cjs/utils/index.js.map +1 -1
  33. package/dist/cjs/utils/resolveOwnerFields.js +42 -0
  34. package/dist/cjs/utils/resolveOwnerFields.js.map +1 -0
  35. package/dist/cjs/utils/resolvePKFields.js +17 -0
  36. package/dist/cjs/utils/resolvePKFields.js.map +1 -0
  37. package/dist/esm/index.mjs +1 -1
  38. package/dist/esm/internals/APIClient.d.ts +121 -0
  39. package/dist/esm/internals/APIClient.mjs +493 -0
  40. package/dist/esm/internals/APIClient.mjs.map +1 -0
  41. package/dist/esm/internals/InternalGraphQLAPI.mjs +1 -1
  42. package/dist/esm/internals/InternalGraphQLAPI.mjs.map +1 -1
  43. package/dist/esm/internals/generateClient.d.ts +12 -0
  44. package/dist/esm/internals/generateClient.mjs +31 -0
  45. package/dist/esm/internals/generateClient.mjs.map +1 -0
  46. package/dist/esm/internals/generateModelsProperty.d.ts +4 -0
  47. package/dist/esm/internals/generateModelsProperty.mjs +41 -0
  48. package/dist/esm/internals/generateModelsProperty.mjs.map +1 -0
  49. package/dist/esm/internals/index.d.ts +1 -0
  50. package/dist/esm/internals/index.mjs +1 -0
  51. package/dist/esm/internals/index.mjs.map +1 -1
  52. package/dist/esm/internals/operations/get.d.ts +2 -0
  53. package/dist/esm/internals/operations/get.mjs +59 -0
  54. package/dist/esm/internals/operations/get.mjs.map +1 -0
  55. package/dist/esm/internals/operations/list.d.ts +2 -0
  56. package/dist/esm/internals/operations/list.mjs +71 -0
  57. package/dist/esm/internals/operations/list.mjs.map +1 -0
  58. package/dist/esm/internals/operations/observeQuery.d.ts +2 -0
  59. package/dist/esm/internals/operations/observeQuery.mjs +122 -0
  60. package/dist/esm/internals/operations/observeQuery.mjs.map +1 -0
  61. package/dist/esm/internals/operations/subscription.d.ts +1 -0
  62. package/dist/esm/internals/operations/subscription.mjs +27 -0
  63. package/dist/esm/internals/operations/subscription.mjs.map +1 -0
  64. package/dist/esm/internals/server/generateClient.d.ts +11 -0
  65. package/dist/esm/internals/server/generateClient.mjs +34 -0
  66. package/dist/esm/internals/server/generateClient.mjs.map +1 -0
  67. package/dist/esm/internals/server/generateModelsProperty.d.ts +3 -0
  68. package/dist/esm/internals/server/generateModelsProperty.mjs +45 -0
  69. package/dist/esm/internals/server/generateModelsProperty.mjs.map +1 -0
  70. package/dist/esm/internals/server/index.d.ts +1 -0
  71. package/dist/esm/internals/server/index.mjs +2 -0
  72. package/dist/esm/internals/server/index.mjs.map +1 -0
  73. package/dist/esm/internals/types.d.ts +17 -0
  74. package/dist/esm/internals/types.mjs +2 -0
  75. package/dist/esm/internals/types.mjs.map +1 -0
  76. package/dist/esm/types/index.d.ts +22 -2
  77. package/dist/esm/types/index.mjs +3 -1
  78. package/dist/esm/types/index.mjs.map +1 -1
  79. package/dist/esm/utils/findIndexByFields.d.ts +9 -0
  80. package/dist/esm/utils/findIndexByFields.mjs +22 -0
  81. package/dist/esm/utils/findIndexByFields.mjs.map +1 -0
  82. package/dist/esm/utils/index.d.ts +2 -0
  83. package/dist/esm/utils/index.mjs +2 -0
  84. package/dist/esm/utils/index.mjs.map +1 -1
  85. package/dist/esm/utils/resolveOwnerFields.d.ts +12 -0
  86. package/dist/esm/utils/resolveOwnerFields.mjs +39 -0
  87. package/dist/esm/utils/resolveOwnerFields.mjs.map +1 -0
  88. package/dist/esm/utils/resolvePKFields.d.ts +13 -0
  89. package/dist/esm/utils/resolvePKFields.mjs +14 -0
  90. package/dist/esm/utils/resolvePKFields.mjs.map +1 -0
  91. package/internals/server/package.json +8 -0
  92. package/package.json +15 -9
  93. package/src/internals/APIClient.ts +724 -0
  94. package/src/internals/InternalGraphQLAPI.ts +1 -1
  95. package/src/internals/generateClient.ts +33 -0
  96. package/src/internals/generateModelsProperty.ts +70 -0
  97. package/src/internals/index.ts +1 -0
  98. package/src/internals/operations/get.ts +121 -0
  99. package/src/internals/operations/list.ts +111 -0
  100. package/src/internals/operations/observeQuery.ts +140 -0
  101. package/src/internals/operations/subscription.ts +59 -0
  102. package/src/internals/server/generateClient.ts +45 -0
  103. package/src/internals/server/generateModelsProperty.ts +70 -0
  104. package/src/internals/server/index.ts +4 -0
  105. package/src/internals/types.ts +21 -0
  106. package/src/types/index.ts +28 -2
  107. package/src/utils/findIndexByFields.ts +29 -0
  108. package/src/utils/index.ts +2 -0
  109. package/src/utils/resolveOwnerFields.ts +65 -0
  110. package/src/utils/resolvePKFields.ts +22 -0
@@ -0,0 +1,503 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ 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");
8
+ const types_1 = require("../types");
9
+ const connectionType = {
10
+ HAS_ONE: 'HAS_ONE',
11
+ HAS_MANY: 'HAS_MANY',
12
+ BELONGS_TO: 'BELONGS_TO',
13
+ };
14
+ /**
15
+ *
16
+ * @param GraphQL response object
17
+ * @returns response object with `items` properties flattened
18
+ */
19
+ const flattenItems = (obj) => {
20
+ const res = {};
21
+ Object.entries(obj).forEach(([prop, value]) => {
22
+ if (typeof value === 'object' && value !== null) {
23
+ if (value.items !== undefined) {
24
+ res[prop] = value.items.map((item) => (0, exports.flattenItems)(item));
25
+ return;
26
+ }
27
+ res[prop] = (0, exports.flattenItems)(value);
28
+ return;
29
+ }
30
+ res[prop] = value;
31
+ });
32
+ return res;
33
+ };
34
+ exports.flattenItems = flattenItems;
35
+ // TODO: this should accept single result to support CRUD methods; create helper for array/list
36
+ function initializeModel(client, modelName, result, modelIntrospection, authMode, authToken, context = false) {
37
+ const introModel = modelIntrospection.models[modelName];
38
+ const introModelFields = introModel.fields;
39
+ const modelFields = Object.entries(introModelFields)
40
+ .filter(([_, field]) => field?.type?.model !== undefined)
41
+ .map(([fieldName]) => fieldName);
42
+ return result.map(record => {
43
+ const initializedRelationalFields = {};
44
+ for (const field of modelFields) {
45
+ const relatedModelName = introModelFields[field].type.model;
46
+ const relatedModel = modelIntrospection.models[relatedModelName];
47
+ const relatedModelPKFieldName = relatedModel.primaryKeyInfo.primaryKeyFieldName;
48
+ const relatedModelSKFieldNames = relatedModel.primaryKeyInfo.sortKeyFieldNames;
49
+ const relationType = introModelFields[field].association.connectionType;
50
+ const connectionFields = introModelFields[field].association.associatedWith;
51
+ const targetNames = introModelFields[field].association?.targetNames || [];
52
+ switch (relationType) {
53
+ case connectionType.HAS_ONE:
54
+ case connectionType.BELONGS_TO:
55
+ const sortKeyValues = relatedModelSKFieldNames.reduce((acc, curVal) => {
56
+ if (record[curVal]) {
57
+ return (acc[curVal] = record[curVal]);
58
+ }
59
+ }, {});
60
+ if (context) {
61
+ initializedRelationalFields[field] = (contextSpec, options) => {
62
+ if (record[targetNames[0]]) {
63
+ return client.models[relatedModelName].get(contextSpec, {
64
+ [relatedModelPKFieldName]: record[targetNames[0]],
65
+ ...sortKeyValues,
66
+ }, {
67
+ authMode: options?.authMode || authMode,
68
+ authToken: options?.authToken || authToken,
69
+ });
70
+ }
71
+ return undefined;
72
+ };
73
+ }
74
+ else {
75
+ initializedRelationalFields[field] = (options) => {
76
+ if (record[targetNames[0]]) {
77
+ return client.models[relatedModelName].get({
78
+ [relatedModelPKFieldName]: record[targetNames[0]],
79
+ ...sortKeyValues,
80
+ }, {
81
+ authMode: options?.authMode || authMode,
82
+ authToken: options?.authToken || authToken,
83
+ });
84
+ }
85
+ return undefined;
86
+ };
87
+ }
88
+ break;
89
+ case connectionType.HAS_MANY:
90
+ const parentPk = introModel.primaryKeyInfo.primaryKeyFieldName;
91
+ const parentSK = introModel.primaryKeyInfo.sortKeyFieldNames;
92
+ // M:N check - TODO: refactor
93
+ if (relatedModel.fields[connectionFields[0]]?.type.model) {
94
+ const relatedTargetNames = relatedModel.fields[connectionFields[0]].association.targetNames;
95
+ const hasManyFilter = relatedTargetNames.map((field, idx) => {
96
+ if (idx === 0) {
97
+ return { [field]: { eq: record[parentPk] } };
98
+ }
99
+ return { [field]: { eq: record[parentSK[idx - 1]] } };
100
+ });
101
+ if (context) {
102
+ initializedRelationalFields[field] = (contextSpec, options) => {
103
+ if (record[parentPk]) {
104
+ return client.models[relatedModelName].list(contextSpec, {
105
+ filter: { and: hasManyFilter },
106
+ limit: options?.limit,
107
+ nextToken: options?.nextToken,
108
+ authMode: options?.authMode || authMode,
109
+ authToken: options?.authToken || authToken,
110
+ });
111
+ }
112
+ return [];
113
+ };
114
+ }
115
+ else {
116
+ initializedRelationalFields[field] = (options) => {
117
+ if (record[parentPk]) {
118
+ return client.models[relatedModelName].list({
119
+ filter: { and: hasManyFilter },
120
+ limit: options?.limit,
121
+ nextToken: options?.nextToken,
122
+ authMode: options?.authMode || authMode,
123
+ authToken: options?.authToken || authToken,
124
+ });
125
+ }
126
+ return [];
127
+ };
128
+ }
129
+ break;
130
+ }
131
+ const hasManyFilter = connectionFields.map((field, idx) => {
132
+ if (idx === 0) {
133
+ return { [field]: { eq: record[parentPk] } };
134
+ }
135
+ return { [field]: { eq: record[parentSK[idx - 1]] } };
136
+ });
137
+ if (context) {
138
+ initializedRelationalFields[field] = (contextSpec, options) => {
139
+ if (record[parentPk]) {
140
+ return client.models[relatedModelName].list(contextSpec, {
141
+ filter: { and: hasManyFilter },
142
+ limit: options?.limit,
143
+ nextToken: options?.nextToken,
144
+ authMode: options?.authMode || authMode,
145
+ authToken: options?.authToken || authToken,
146
+ });
147
+ }
148
+ return [];
149
+ };
150
+ }
151
+ else {
152
+ initializedRelationalFields[field] = (options) => {
153
+ if (record[parentPk]) {
154
+ return client.models[relatedModelName].list({
155
+ filter: { and: hasManyFilter },
156
+ limit: options?.limit,
157
+ nextToken: options?.nextToken,
158
+ authMode: options?.authMode || authMode,
159
+ authToken: options?.authToken || authToken,
160
+ });
161
+ }
162
+ return [];
163
+ };
164
+ }
165
+ break;
166
+ }
167
+ }
168
+ return { ...record, ...initializedRelationalFields };
169
+ });
170
+ }
171
+ exports.initializeModel = initializeModel;
172
+ exports.graphQLOperationsInfo = {
173
+ CREATE: { operationPrefix: 'create', usePlural: false },
174
+ READ: { operationPrefix: 'get', usePlural: false },
175
+ UPDATE: { operationPrefix: 'update', usePlural: false },
176
+ DELETE: { operationPrefix: 'delete', usePlural: false },
177
+ LIST: { operationPrefix: 'list', usePlural: true },
178
+ ONCREATE: { operationPrefix: 'onCreate', usePlural: false },
179
+ ONUPDATE: { operationPrefix: 'onUpdate', usePlural: false },
180
+ ONDELETE: { operationPrefix: 'onDelete', usePlural: false },
181
+ OBSERVE_QUERY: { operationPrefix: 'observeQuery', usePlural: false },
182
+ };
183
+ const graphQLDocumentsCache = new Map();
184
+ const SELECTION_SET_WILDCARD = '*';
185
+ function defaultSelectionSetForModel(modelDefinition) {
186
+ // fields that are explicitly part of the graphql schema; not
187
+ // inferred from owner auth rules.
188
+ const { fields } = modelDefinition;
189
+ const explicitFields = Object.values(fields)
190
+ .map(({ type, name }) => typeof type === 'string' && name) // Default selection set omits model fields
191
+ .filter(Boolean);
192
+ // fields used for owner auth rules that may or may not also
193
+ // be explicit on the model.
194
+ const ownerFields = (0, resolveOwnerFields_1.resolveOwnerFields)(modelDefinition);
195
+ return Array.from(new Set(explicitFields.concat(ownerFields)));
196
+ }
197
+ const FIELD_IR = '';
198
+ /**
199
+ * Generates nested Custom Selection Set IR from path
200
+ *
201
+ * @param modelIntrospection
202
+ * @param modelName
203
+ * @param selectionSet - array of object paths
204
+ * @example
205
+ * ### Given
206
+ * `selectionSet = ['id', 'comments.post.id']`
207
+ * ### Returns
208
+ * ```ts
209
+ * {
210
+ * id: '',
211
+ * comments: {
212
+ * items: { post: { id: '' } }
213
+ * }
214
+ * }
215
+ * ```
216
+ */
217
+ function customSelectionSetToIR(modelIntrospection, modelName, selectionSet) {
218
+ const modelDefinition = modelIntrospection[modelName];
219
+ const { fields: modelFields } = modelDefinition;
220
+ return selectionSet.reduce((resultObj, path) => {
221
+ const [fieldName, nested, ...rest] = path.split('.');
222
+ if (nested) {
223
+ const relatedModel = modelFields[fieldName]?.type?.model;
224
+ if (!relatedModel) {
225
+ // TODO: may need to change this to support custom types
226
+ throw Error(`${fieldName} is not a model field`);
227
+ }
228
+ const relatedModelDefinition = modelIntrospection[relatedModel];
229
+ const selectionSet = nested === SELECTION_SET_WILDCARD
230
+ ? defaultSelectionSetIR(relatedModelDefinition)
231
+ : // if we have a path like 'field.anotherField' recursively build up selection set IR
232
+ customSelectionSetToIR(modelIntrospection, relatedModel, [
233
+ [nested, ...rest].join('.'),
234
+ ]);
235
+ if (modelFields[fieldName]?.isArray) {
236
+ const existing = resultObj[fieldName] || {
237
+ items: {},
238
+ };
239
+ const merged = { ...existing.items, ...selectionSet };
240
+ resultObj[fieldName] = { items: merged };
241
+ return resultObj;
242
+ }
243
+ const existingItems = resultObj[fieldName] || {};
244
+ const merged = { ...existingItems, ...selectionSet };
245
+ resultObj[fieldName] = merged;
246
+ return resultObj;
247
+ }
248
+ const exists = Boolean(modelFields[fieldName]);
249
+ if (!exists) {
250
+ throw Error(`${fieldName} is not a field of model ${modelName}`);
251
+ }
252
+ resultObj[fieldName] = FIELD_IR;
253
+ return resultObj;
254
+ }, {});
255
+ }
256
+ exports.customSelectionSetToIR = customSelectionSetToIR;
257
+ const defaultSelectionSetIR = relatedModelDefinition => {
258
+ const defaultSelectionSet = defaultSelectionSetForModel(relatedModelDefinition);
259
+ const reduced = defaultSelectionSet.reduce((acc, curVal) => {
260
+ acc[curVal] = FIELD_IR;
261
+ return acc;
262
+ }, {});
263
+ return reduced;
264
+ };
265
+ /**
266
+ * Stringifies selection set IR
267
+ * * @example
268
+ * ### Given
269
+ * ```ts
270
+ * {
271
+ * id: '',
272
+ * comments: {
273
+ * items: { post: { id: '' } }
274
+ * }
275
+ * }
276
+ * ```
277
+ * ### Returns
278
+ * `'id comments { items { post { id } } }'`
279
+ */
280
+ function selectionSetIRToString(obj) {
281
+ const res = [];
282
+ Object.entries(obj).forEach(([fieldName, value]) => {
283
+ if (value === FIELD_IR) {
284
+ res.push(fieldName);
285
+ }
286
+ else if (typeof value === 'object' && value !== null) {
287
+ if (value?.items) {
288
+ res.push(fieldName, '{', 'items', '{', selectionSetIRToString(value.items), '}', '}');
289
+ }
290
+ else {
291
+ res.push(fieldName, '{', selectionSetIRToString(value), '}');
292
+ }
293
+ }
294
+ });
295
+ return res.join(' ');
296
+ }
297
+ exports.selectionSetIRToString = selectionSetIRToString;
298
+ function generateSelectionSet(modelIntrospection, modelName, selectionSet) {
299
+ const modelDefinition = modelIntrospection[modelName];
300
+ if (!selectionSet) {
301
+ return defaultSelectionSetForModel(modelDefinition).join(' ');
302
+ }
303
+ const selSetIr = customSelectionSetToIR(modelIntrospection, modelName, selectionSet);
304
+ const selSetString = selectionSetIRToString(selSetIr);
305
+ return selSetString;
306
+ }
307
+ exports.generateSelectionSet = generateSelectionSet;
308
+ function generateGraphQLDocument(modelIntrospection, modelName, modelOperation, listArgs) {
309
+ const modelDefinition = modelIntrospection[modelName];
310
+ const { name, pluralName, fields, primaryKeyInfo: { isCustomPrimaryKey, primaryKeyFieldName, sortKeyFieldNames, }, } = modelDefinition;
311
+ const { operationPrefix, usePlural } = exports.graphQLOperationsInfo[modelOperation];
312
+ const { selectionSet } = listArgs || {};
313
+ const fromCache = graphQLDocumentsCache.get(name)?.get(modelOperation);
314
+ if (fromCache !== undefined) {
315
+ return fromCache;
316
+ }
317
+ if (!graphQLDocumentsCache.has(name)) {
318
+ graphQLDocumentsCache.set(name, new Map());
319
+ }
320
+ const graphQLFieldName = `${operationPrefix}${usePlural ? pluralName : name}`;
321
+ let graphQLOperationType;
322
+ let graphQLSelectionSet;
323
+ let graphQLArguments;
324
+ const selectionSetFields = generateSelectionSet(modelIntrospection, modelName, selectionSet);
325
+ switch (modelOperation) {
326
+ case 'CREATE':
327
+ case 'UPDATE':
328
+ case 'DELETE':
329
+ graphQLArguments ??
330
+ (graphQLArguments = {
331
+ input: `${operationPrefix.charAt(0).toLocaleUpperCase() +
332
+ operationPrefix.slice(1)}${name}Input!`,
333
+ });
334
+ graphQLOperationType ?? (graphQLOperationType = 'mutation');
335
+ case 'READ':
336
+ graphQLArguments ??
337
+ (graphQLArguments = isCustomPrimaryKey
338
+ ? [primaryKeyFieldName, ...sortKeyFieldNames].reduce((acc, fieldName) => {
339
+ acc[fieldName] = fields[fieldName].type;
340
+ return acc;
341
+ }, {})
342
+ : {
343
+ [primaryKeyFieldName]: `${fields[primaryKeyFieldName].type}!`,
344
+ });
345
+ graphQLSelectionSet ?? (graphQLSelectionSet = selectionSetFields);
346
+ case 'LIST':
347
+ graphQLArguments ??
348
+ (graphQLArguments = {
349
+ filter: `Model${name}FilterInput`,
350
+ limit: 'Int',
351
+ nextToken: 'String',
352
+ });
353
+ graphQLOperationType ?? (graphQLOperationType = 'query');
354
+ graphQLSelectionSet ??
355
+ (graphQLSelectionSet = `items { ${selectionSetFields} } nextToken __typename`);
356
+ case 'ONCREATE':
357
+ case 'ONUPDATE':
358
+ case 'ONDELETE':
359
+ graphQLArguments ??
360
+ (graphQLArguments = {
361
+ filter: `ModelSubscription${name}FilterInput`,
362
+ });
363
+ graphQLOperationType ?? (graphQLOperationType = 'subscription');
364
+ graphQLSelectionSet ?? (graphQLSelectionSet = selectionSetFields);
365
+ break;
366
+ case 'OBSERVE_QUERY':
367
+ default:
368
+ throw new Error('Internal error: Attempted to generate graphql document for observeQuery. Please report this error.');
369
+ }
370
+ const graphQLDocument = `${graphQLOperationType}${graphQLArguments
371
+ ? `(${Object.entries(graphQLArguments).map(([fieldName, type]) => `\$${fieldName}: ${type}`)})`
372
+ : ''} { ${graphQLFieldName}${graphQLArguments
373
+ ? `(${Object.keys(graphQLArguments).map(fieldName => `${fieldName}: \$${fieldName}`)})`
374
+ : ''} { ${graphQLSelectionSet} } }`;
375
+ graphQLDocumentsCache.get(name)?.set(modelOperation, graphQLDocument);
376
+ return graphQLDocument;
377
+ }
378
+ exports.generateGraphQLDocument = generateGraphQLDocument;
379
+ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospection) {
380
+ const { fields, primaryKeyInfo: { isCustomPrimaryKey, primaryKeyFieldName, sortKeyFieldNames, }, } = modelDefinition;
381
+ let variables = {};
382
+ // TODO: process input
383
+ switch (operation) {
384
+ case 'CREATE':
385
+ variables = {
386
+ input: normalizeMutationInput(arg, modelDefinition, modelIntrospection),
387
+ };
388
+ break;
389
+ case 'UPDATE':
390
+ // readonly fields are not updated
391
+ variables = {
392
+ input: Object.fromEntries(Object.entries(normalizeMutationInput(arg, modelDefinition, modelIntrospection)).filter(([fieldName]) => {
393
+ const { isReadOnly } = fields[fieldName];
394
+ return !isReadOnly;
395
+ })),
396
+ };
397
+ break;
398
+ case 'READ':
399
+ case 'DELETE':
400
+ // only identifiers are sent
401
+ variables = isCustomPrimaryKey
402
+ ? [primaryKeyFieldName, ...sortKeyFieldNames].reduce((acc, fieldName) => {
403
+ acc[fieldName] = arg[fieldName];
404
+ return acc;
405
+ }, {})
406
+ : { [primaryKeyFieldName]: arg[primaryKeyFieldName] };
407
+ if (operation === 'DELETE') {
408
+ variables = { input: variables };
409
+ }
410
+ break;
411
+ case 'LIST':
412
+ if (arg?.filter) {
413
+ variables.filter = arg.filter;
414
+ }
415
+ if (arg?.nextToken) {
416
+ variables.nextToken = arg.nextToken;
417
+ }
418
+ if (arg?.limit) {
419
+ variables.limit = arg.limit;
420
+ }
421
+ break;
422
+ case 'ONCREATE':
423
+ case 'ONUPDATE':
424
+ case 'ONDELETE':
425
+ if (arg?.filter) {
426
+ variables = { filter: arg.filter };
427
+ }
428
+ break;
429
+ case 'OBSERVE_QUERY':
430
+ throw new Error('Internal error: Attempted to build variables for observeQuery. Please report this error.');
431
+ default:
432
+ const exhaustiveCheck = operation;
433
+ throw new Error(`Unhandled operation case: ${exhaustiveCheck}`);
434
+ }
435
+ return variables;
436
+ }
437
+ exports.buildGraphQLVariables = buildGraphQLVariables;
438
+ /**
439
+ * Iterates over mutation input values and resolves any model inputs to their corresponding join fields/values
440
+ *
441
+ * @example
442
+ * ### Usage
443
+ * ```ts
444
+ * const result = normalizeMutationInput({ post: post }, model, modelDefinition);
445
+ * ```
446
+ * ### Result
447
+ * ```ts
448
+ * { postId: "abc123" }
449
+ * ```
450
+ *
451
+ */
452
+ function normalizeMutationInput(mutationInput, model, modelDefinition) {
453
+ const { fields } = model;
454
+ const normalized = {};
455
+ Object.entries(mutationInput).forEach(([inputFieldName, inputValue]) => {
456
+ const relatedModelName = fields[inputFieldName]?.type?.model;
457
+ if (relatedModelName) {
458
+ const association = fields[inputFieldName]?.association;
459
+ const relatedModelDef = modelDefinition.models[relatedModelName];
460
+ const relatedModelPkInfo = relatedModelDef.primaryKeyInfo;
461
+ if (association.connectionType === connectionType.HAS_ONE) {
462
+ association.targetNames.forEach((targetName, idx) => {
463
+ const associatedFieldName = association.associatedWith[idx];
464
+ normalized[targetName] = inputValue[associatedFieldName];
465
+ });
466
+ }
467
+ if (association.connectionType === connectionType.BELONGS_TO) {
468
+ association.targetNames.forEach((targetName, idx) => {
469
+ if (idx === 0) {
470
+ const associatedFieldName = relatedModelPkInfo.primaryKeyFieldName;
471
+ normalized[targetName] = inputValue[associatedFieldName];
472
+ }
473
+ else {
474
+ const associatedFieldName = relatedModelPkInfo.sortKeyFieldNames[idx - 1];
475
+ normalized[targetName] = inputValue[associatedFieldName];
476
+ }
477
+ });
478
+ }
479
+ }
480
+ else {
481
+ normalized[inputFieldName] = inputValue;
482
+ }
483
+ });
484
+ return normalized;
485
+ }
486
+ exports.normalizeMutationInput = normalizeMutationInput;
487
+ /**
488
+ * Produces a parameter object that can contains auth mode/token overrides
489
+ * only if present in either `options` (first) or configured on the `client`
490
+ * as a fallback.
491
+ *
492
+ * @param client Configured client from `generateClient`
493
+ * @param options Args/Options obect from call site.
494
+ * @returns
495
+ */
496
+ function authModeParams(client, options = {}) {
497
+ return {
498
+ authMode: options.authMode || client[types_1.__authMode],
499
+ authToken: options.authToken || client[types_1.__authToken],
500
+ };
501
+ }
502
+ exports.authModeParams = authModeParams;
503
+ //# sourceMappingURL=APIClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"APIClient.js","sources":["../../../src/internals/APIClient.ts"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.authModeParams = exports.normalizeMutationInput = exports.buildGraphQLVariables = exports.generateGraphQLDocument = exports.generateSelectionSet = exports.selectionSetIRToString = exports.customSelectionSetToIR = exports.graphQLOperationsInfo = exports.initializeModel = exports.flattenItems = void 0;\n// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nconst resolveOwnerFields_1 = require(\"../utils/resolveOwnerFields\");\nconst types_1 = require(\"../types\");\nconst connectionType = {\n HAS_ONE: 'HAS_ONE',\n HAS_MANY: 'HAS_MANY',\n BELONGS_TO: 'BELONGS_TO',\n};\n/**\n *\n * @param GraphQL response object\n * @returns response object with `items` properties flattened\n */\nconst flattenItems = (obj) => {\n const res = {};\n Object.entries(obj).forEach(([prop, value]) => {\n if (typeof value === 'object' && value !== null) {\n if (value.items !== undefined) {\n res[prop] = value.items.map((item) => (0, exports.flattenItems)(item));\n return;\n }\n res[prop] = (0, exports.flattenItems)(value);\n return;\n }\n res[prop] = value;\n });\n return res;\n};\nexports.flattenItems = flattenItems;\n// TODO: this should accept single result to support CRUD methods; create helper for array/list\nfunction initializeModel(client, modelName, result, modelIntrospection, authMode, authToken, context = false) {\n const introModel = modelIntrospection.models[modelName];\n const introModelFields = introModel.fields;\n const modelFields = Object.entries(introModelFields)\n .filter(([_, field]) => field?.type?.model !== undefined)\n .map(([fieldName]) => fieldName);\n return result.map(record => {\n const initializedRelationalFields = {};\n for (const field of modelFields) {\n const relatedModelName = introModelFields[field].type.model;\n const relatedModel = modelIntrospection.models[relatedModelName];\n const relatedModelPKFieldName = relatedModel.primaryKeyInfo.primaryKeyFieldName;\n const relatedModelSKFieldNames = relatedModel.primaryKeyInfo.sortKeyFieldNames;\n const relationType = introModelFields[field].association.connectionType;\n const connectionFields = introModelFields[field].association.associatedWith;\n const targetNames = introModelFields[field].association?.targetNames || [];\n switch (relationType) {\n case connectionType.HAS_ONE:\n case connectionType.BELONGS_TO:\n const sortKeyValues = relatedModelSKFieldNames.reduce((acc, curVal) => {\n if (record[curVal]) {\n return (acc[curVal] = record[curVal]);\n }\n }, {});\n if (context) {\n initializedRelationalFields[field] = (contextSpec, options) => {\n if (record[targetNames[0]]) {\n return client.models[relatedModelName].get(contextSpec, {\n [relatedModelPKFieldName]: record[targetNames[0]],\n ...sortKeyValues,\n }, {\n authMode: options?.authMode || authMode,\n authToken: options?.authToken || authToken,\n });\n }\n return undefined;\n };\n }\n else {\n initializedRelationalFields[field] = (options) => {\n if (record[targetNames[0]]) {\n return client.models[relatedModelName].get({\n [relatedModelPKFieldName]: record[targetNames[0]],\n ...sortKeyValues,\n }, {\n authMode: options?.authMode || authMode,\n authToken: options?.authToken || authToken,\n });\n }\n return undefined;\n };\n }\n break;\n case connectionType.HAS_MANY:\n const parentPk = introModel.primaryKeyInfo.primaryKeyFieldName;\n const parentSK = introModel.primaryKeyInfo.sortKeyFieldNames;\n // M:N check - TODO: refactor\n if (relatedModel.fields[connectionFields[0]]?.type.model) {\n const relatedTargetNames = relatedModel.fields[connectionFields[0]].association.targetNames;\n const hasManyFilter = relatedTargetNames.map((field, idx) => {\n if (idx === 0) {\n return { [field]: { eq: record[parentPk] } };\n }\n return { [field]: { eq: record[parentSK[idx - 1]] } };\n });\n if (context) {\n initializedRelationalFields[field] = (contextSpec, options) => {\n if (record[parentPk]) {\n return client.models[relatedModelName].list(contextSpec, {\n filter: { and: hasManyFilter },\n limit: options?.limit,\n nextToken: options?.nextToken,\n authMode: options?.authMode || authMode,\n authToken: options?.authToken || authToken,\n });\n }\n return [];\n };\n }\n else {\n initializedRelationalFields[field] = (options) => {\n if (record[parentPk]) {\n return client.models[relatedModelName].list({\n filter: { and: hasManyFilter },\n limit: options?.limit,\n nextToken: options?.nextToken,\n authMode: options?.authMode || authMode,\n authToken: options?.authToken || authToken,\n });\n }\n return [];\n };\n }\n break;\n }\n const hasManyFilter = connectionFields.map((field, idx) => {\n if (idx === 0) {\n return { [field]: { eq: record[parentPk] } };\n }\n return { [field]: { eq: record[parentSK[idx - 1]] } };\n });\n if (context) {\n initializedRelationalFields[field] = (contextSpec, options) => {\n if (record[parentPk]) {\n return client.models[relatedModelName].list(contextSpec, {\n filter: { and: hasManyFilter },\n limit: options?.limit,\n nextToken: options?.nextToken,\n authMode: options?.authMode || authMode,\n authToken: options?.authToken || authToken,\n });\n }\n return [];\n };\n }\n else {\n initializedRelationalFields[field] = (options) => {\n if (record[parentPk]) {\n return client.models[relatedModelName].list({\n filter: { and: hasManyFilter },\n limit: options?.limit,\n nextToken: options?.nextToken,\n authMode: options?.authMode || authMode,\n authToken: options?.authToken || authToken,\n });\n }\n return [];\n };\n }\n break;\n default:\n break;\n }\n }\n return { ...record, ...initializedRelationalFields };\n });\n}\nexports.initializeModel = initializeModel;\nexports.graphQLOperationsInfo = {\n CREATE: { operationPrefix: 'create', usePlural: false },\n READ: { operationPrefix: 'get', usePlural: false },\n UPDATE: { operationPrefix: 'update', usePlural: false },\n DELETE: { operationPrefix: 'delete', usePlural: false },\n LIST: { operationPrefix: 'list', usePlural: true },\n ONCREATE: { operationPrefix: 'onCreate', usePlural: false },\n ONUPDATE: { operationPrefix: 'onUpdate', usePlural: false },\n ONDELETE: { operationPrefix: 'onDelete', usePlural: false },\n OBSERVE_QUERY: { operationPrefix: 'observeQuery', usePlural: false },\n};\nconst graphQLDocumentsCache = new Map();\nconst SELECTION_SET_WILDCARD = '*';\nfunction defaultSelectionSetForModel(modelDefinition) {\n // fields that are explicitly part of the graphql schema; not\n // inferred from owner auth rules.\n const { fields } = modelDefinition;\n const explicitFields = Object.values(fields)\n .map(({ type, name }) => typeof type === 'string' && name) // Default selection set omits model fields\n .filter(Boolean);\n // fields used for owner auth rules that may or may not also\n // be explicit on the model.\n const ownerFields = (0, resolveOwnerFields_1.resolveOwnerFields)(modelDefinition);\n return Array.from(new Set(explicitFields.concat(ownerFields)));\n}\nconst FIELD_IR = '';\n/**\n * Generates nested Custom Selection Set IR from path\n *\n * @param modelIntrospection\n * @param modelName\n * @param selectionSet - array of object paths\n * @example\n * ### Given\n * `selectionSet = ['id', 'comments.post.id']`\n * ### Returns\n * ```ts\n * {\n * id: '',\n * comments: {\n * items: { post: { id: '' } }\n * }\n * }\n * ```\n */\nfunction customSelectionSetToIR(modelIntrospection, modelName, selectionSet) {\n const modelDefinition = modelIntrospection[modelName];\n const { fields: modelFields } = modelDefinition;\n return selectionSet.reduce((resultObj, path) => {\n const [fieldName, nested, ...rest] = path.split('.');\n if (nested) {\n const relatedModel = modelFields[fieldName]?.type?.model;\n if (!relatedModel) {\n // TODO: may need to change this to support custom types\n throw Error(`${fieldName} is not a model field`);\n }\n const relatedModelDefinition = modelIntrospection[relatedModel];\n const selectionSet = nested === SELECTION_SET_WILDCARD\n ? defaultSelectionSetIR(relatedModelDefinition)\n : // if we have a path like 'field.anotherField' recursively build up selection set IR\n customSelectionSetToIR(modelIntrospection, relatedModel, [\n [nested, ...rest].join('.'),\n ]);\n if (modelFields[fieldName]?.isArray) {\n const existing = resultObj[fieldName] || {\n items: {},\n };\n const merged = { ...existing.items, ...selectionSet };\n resultObj[fieldName] = { items: merged };\n return resultObj;\n }\n const existingItems = resultObj[fieldName] || {};\n const merged = { ...existingItems, ...selectionSet };\n resultObj[fieldName] = merged;\n return resultObj;\n }\n const exists = Boolean(modelFields[fieldName]);\n if (!exists) {\n throw Error(`${fieldName} is not a field of model ${modelName}`);\n }\n resultObj[fieldName] = FIELD_IR;\n return resultObj;\n }, {});\n}\nexports.customSelectionSetToIR = customSelectionSetToIR;\nconst defaultSelectionSetIR = relatedModelDefinition => {\n const defaultSelectionSet = defaultSelectionSetForModel(relatedModelDefinition);\n const reduced = defaultSelectionSet.reduce((acc, curVal) => {\n acc[curVal] = FIELD_IR;\n return acc;\n }, {});\n return reduced;\n};\n/**\n * Stringifies selection set IR\n * * @example\n * ### Given\n * ```ts\n * {\n * id: '',\n * comments: {\n * items: { post: { id: '' } }\n * }\n * }\n * ```\n * ### Returns\n * `'id comments { items { post { id } } }'`\n */\nfunction selectionSetIRToString(obj) {\n const res = [];\n Object.entries(obj).forEach(([fieldName, value]) => {\n if (value === FIELD_IR) {\n res.push(fieldName);\n }\n else if (typeof value === 'object' && value !== null) {\n if (value?.items) {\n res.push(fieldName, '{', 'items', '{', selectionSetIRToString(value.items), '}', '}');\n }\n else {\n res.push(fieldName, '{', selectionSetIRToString(value), '}');\n }\n }\n });\n return res.join(' ');\n}\nexports.selectionSetIRToString = selectionSetIRToString;\nfunction generateSelectionSet(modelIntrospection, modelName, selectionSet) {\n const modelDefinition = modelIntrospection[modelName];\n if (!selectionSet) {\n return defaultSelectionSetForModel(modelDefinition).join(' ');\n }\n const selSetIr = customSelectionSetToIR(modelIntrospection, modelName, selectionSet);\n const selSetString = selectionSetIRToString(selSetIr);\n return selSetString;\n}\nexports.generateSelectionSet = generateSelectionSet;\nfunction generateGraphQLDocument(modelIntrospection, modelName, modelOperation, listArgs) {\n const modelDefinition = modelIntrospection[modelName];\n const { name, pluralName, fields, primaryKeyInfo: { isCustomPrimaryKey, primaryKeyFieldName, sortKeyFieldNames, }, } = modelDefinition;\n const { operationPrefix, usePlural } = exports.graphQLOperationsInfo[modelOperation];\n const { selectionSet } = listArgs || {};\n const fromCache = graphQLDocumentsCache.get(name)?.get(modelOperation);\n if (fromCache !== undefined) {\n return fromCache;\n }\n if (!graphQLDocumentsCache.has(name)) {\n graphQLDocumentsCache.set(name, new Map());\n }\n const graphQLFieldName = `${operationPrefix}${usePlural ? pluralName : name}`;\n let graphQLOperationType;\n let graphQLSelectionSet;\n let graphQLArguments;\n const selectionSetFields = generateSelectionSet(modelIntrospection, modelName, selectionSet);\n switch (modelOperation) {\n case 'CREATE':\n case 'UPDATE':\n case 'DELETE':\n graphQLArguments ??\n (graphQLArguments = {\n input: `${operationPrefix.charAt(0).toLocaleUpperCase() +\n operationPrefix.slice(1)}${name}Input!`,\n });\n graphQLOperationType ?? (graphQLOperationType = 'mutation');\n case 'READ':\n graphQLArguments ??\n (graphQLArguments = isCustomPrimaryKey\n ? [primaryKeyFieldName, ...sortKeyFieldNames].reduce((acc, fieldName) => {\n acc[fieldName] = fields[fieldName].type;\n return acc;\n }, {})\n : {\n [primaryKeyFieldName]: `${fields[primaryKeyFieldName].type}!`,\n });\n graphQLSelectionSet ?? (graphQLSelectionSet = selectionSetFields);\n case 'LIST':\n graphQLArguments ??\n (graphQLArguments = {\n filter: `Model${name}FilterInput`,\n limit: 'Int',\n nextToken: 'String',\n });\n graphQLOperationType ?? (graphQLOperationType = 'query');\n graphQLSelectionSet ??\n (graphQLSelectionSet = `items { ${selectionSetFields} } nextToken __typename`);\n case 'ONCREATE':\n case 'ONUPDATE':\n case 'ONDELETE':\n graphQLArguments ??\n (graphQLArguments = {\n filter: `ModelSubscription${name}FilterInput`,\n });\n graphQLOperationType ?? (graphQLOperationType = 'subscription');\n graphQLSelectionSet ?? (graphQLSelectionSet = selectionSetFields);\n break;\n case 'OBSERVE_QUERY':\n default:\n throw new Error('Internal error: Attempted to generate graphql document for observeQuery. Please report this error.');\n }\n const graphQLDocument = `${graphQLOperationType}${graphQLArguments\n ? `(${Object.entries(graphQLArguments).map(([fieldName, type]) => `\\$${fieldName}: ${type}`)})`\n : ''} { ${graphQLFieldName}${graphQLArguments\n ? `(${Object.keys(graphQLArguments).map(fieldName => `${fieldName}: \\$${fieldName}`)})`\n : ''} { ${graphQLSelectionSet} } }`;\n graphQLDocumentsCache.get(name)?.set(modelOperation, graphQLDocument);\n return graphQLDocument;\n}\nexports.generateGraphQLDocument = generateGraphQLDocument;\nfunction buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospection) {\n const { fields, primaryKeyInfo: { isCustomPrimaryKey, primaryKeyFieldName, sortKeyFieldNames, }, } = modelDefinition;\n let variables = {};\n // TODO: process input\n switch (operation) {\n case 'CREATE':\n variables = {\n input: normalizeMutationInput(arg, modelDefinition, modelIntrospection),\n };\n break;\n case 'UPDATE':\n // readonly fields are not updated\n variables = {\n input: Object.fromEntries(Object.entries(normalizeMutationInput(arg, modelDefinition, modelIntrospection)).filter(([fieldName]) => {\n const { isReadOnly } = fields[fieldName];\n return !isReadOnly;\n })),\n };\n break;\n case 'READ':\n case 'DELETE':\n // only identifiers are sent\n variables = isCustomPrimaryKey\n ? [primaryKeyFieldName, ...sortKeyFieldNames].reduce((acc, fieldName) => {\n acc[fieldName] = arg[fieldName];\n return acc;\n }, {})\n : { [primaryKeyFieldName]: arg[primaryKeyFieldName] };\n if (operation === 'DELETE') {\n variables = { input: variables };\n }\n break;\n case 'LIST':\n if (arg?.filter) {\n variables.filter = arg.filter;\n }\n if (arg?.nextToken) {\n variables.nextToken = arg.nextToken;\n }\n if (arg?.limit) {\n variables.limit = arg.limit;\n }\n break;\n case 'ONCREATE':\n case 'ONUPDATE':\n case 'ONDELETE':\n if (arg?.filter) {\n variables = { filter: arg.filter };\n }\n break;\n case 'OBSERVE_QUERY':\n throw new Error('Internal error: Attempted to build variables for observeQuery. Please report this error.');\n break;\n default:\n const exhaustiveCheck = operation;\n throw new Error(`Unhandled operation case: ${exhaustiveCheck}`);\n }\n return variables;\n}\nexports.buildGraphQLVariables = buildGraphQLVariables;\n/**\n * Iterates over mutation input values and resolves any model inputs to their corresponding join fields/values\n *\n * @example\n * ### Usage\n * ```ts\n * const result = normalizeMutationInput({ post: post }, model, modelDefinition);\n * ```\n * ### Result\n * ```ts\n * { postId: \"abc123\" }\n * ```\n *\n */\nfunction normalizeMutationInput(mutationInput, model, modelDefinition) {\n const { fields } = model;\n const normalized = {};\n Object.entries(mutationInput).forEach(([inputFieldName, inputValue]) => {\n const relatedModelName = fields[inputFieldName]?.type?.model;\n if (relatedModelName) {\n const association = fields[inputFieldName]?.association;\n const relatedModelDef = modelDefinition.models[relatedModelName];\n const relatedModelPkInfo = relatedModelDef.primaryKeyInfo;\n if (association.connectionType === connectionType.HAS_ONE) {\n association.targetNames.forEach((targetName, idx) => {\n const associatedFieldName = association.associatedWith[idx];\n normalized[targetName] = inputValue[associatedFieldName];\n });\n }\n if (association.connectionType === connectionType.BELONGS_TO) {\n association.targetNames.forEach((targetName, idx) => {\n if (idx === 0) {\n const associatedFieldName = relatedModelPkInfo.primaryKeyFieldName;\n normalized[targetName] = inputValue[associatedFieldName];\n }\n else {\n const associatedFieldName = relatedModelPkInfo.sortKeyFieldNames[idx - 1];\n normalized[targetName] = inputValue[associatedFieldName];\n }\n });\n }\n }\n else {\n normalized[inputFieldName] = inputValue;\n }\n });\n return normalized;\n}\nexports.normalizeMutationInput = normalizeMutationInput;\n/**\n * Produces a parameter object that can contains auth mode/token overrides\n * only if present in either `options` (first) or configured on the `client`\n * as a fallback.\n *\n * @param client Configured client from `generateClient`\n * @param options Args/Options obect from call site.\n * @returns\n */\nfunction authModeParams(client, options = {}) {\n return {\n authMode: options.authMode || client[types_1.__authMode],\n authToken: options.authToken || client[types_1.__authToken],\n };\n}\nexports.authModeParams = authModeParams;\n"],"names":[],"mappings":"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"}
@@ -263,7 +263,7 @@ class InternalGraphQLAPIClass {
263
263
  variables,
264
264
  appSyncGraphqlEndpoint: config?.endpoint,
265
265
  region: config?.region,
266
- authenticationType: authMode ?? config?.defaultAuthMode,
266
+ authenticationType: authMode || config?.defaultAuthMode,
267
267
  apiKey: config?.apiKey,
268
268
  additionalHeaders,
269
269
  }, customUserAgentDetails);