@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.
Files changed (172) hide show
  1. package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js +40 -31
  2. package/dist/cjs/Providers/AWSAppSyncRealTimeProvider/index.js.map +1 -1
  3. package/dist/cjs/internals/APIClient.js +145 -55
  4. package/dist/cjs/internals/APIClient.js.map +1 -1
  5. package/dist/cjs/internals/InternalGraphQLAPI.js +41 -42
  6. package/dist/cjs/internals/InternalGraphQLAPI.js.map +1 -1
  7. package/dist/cjs/internals/generateClient.js +15 -5
  8. package/dist/cjs/internals/generateClient.js.map +1 -1
  9. package/dist/cjs/internals/generateCustomOperationsProperty.js +50 -0
  10. package/dist/cjs/internals/generateCustomOperationsProperty.js.map +1 -0
  11. package/dist/cjs/internals/operations/custom.js +356 -0
  12. package/dist/cjs/internals/operations/custom.js.map +1 -0
  13. package/dist/cjs/internals/operations/get.js +1 -1
  14. package/dist/cjs/internals/operations/get.js.map +1 -1
  15. package/dist/cjs/internals/operations/indexQuery.js +1 -1
  16. package/dist/cjs/internals/operations/indexQuery.js.map +1 -1
  17. package/dist/cjs/internals/operations/list.js +2 -2
  18. package/dist/cjs/internals/operations/list.js.map +1 -1
  19. package/dist/cjs/internals/operations/subscription.js +1 -1
  20. package/dist/cjs/internals/operations/subscription.js.map +1 -1
  21. package/dist/cjs/internals/server/generateClientWithAmplifyInstance.js +12 -2
  22. package/dist/cjs/internals/server/generateClientWithAmplifyInstance.js.map +1 -1
  23. package/dist/cjs/internals/server/generateModelsProperty.js +1 -1
  24. package/dist/cjs/internals/server/generateModelsProperty.js.map +1 -1
  25. package/dist/cjs/internals/utils/clientProperties/generateEnumsProperty.js.map +1 -0
  26. package/dist/cjs/internals/utils/{generateModelsProperty.js → clientProperties/generateModelsProperty.js} +7 -7
  27. package/dist/cjs/internals/utils/clientProperties/generateModelsProperty.js.map +1 -0
  28. package/dist/cjs/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.js.map +1 -0
  29. package/dist/cjs/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.js.map +1 -0
  30. package/dist/cjs/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js +15 -0
  31. package/dist/cjs/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.js.map +1 -0
  32. package/dist/cjs/internals/v6.js +1 -3
  33. package/dist/cjs/internals/v6.js.map +1 -1
  34. package/dist/cjs/utils/errors/constants.js +47 -0
  35. package/dist/cjs/utils/errors/constants.js.map +1 -0
  36. package/dist/cjs/utils/errors/createGraphQLResultWithError.js +15 -0
  37. package/dist/cjs/utils/errors/createGraphQLResultWithError.js.map +1 -0
  38. package/dist/cjs/utils/errors/index.js +3 -1
  39. package/dist/cjs/utils/errors/index.js.map +1 -1
  40. package/dist/cjs/utils/errors/repackageAuthError.js +7 -7
  41. package/dist/cjs/utils/errors/repackageAuthError.js.map +1 -1
  42. package/dist/cjs/utils/resolveOwnerFields.js +6 -0
  43. package/dist/cjs/utils/resolveOwnerFields.js.map +1 -1
  44. package/dist/esm/GraphQLAPI.d.ts +2 -2
  45. package/dist/esm/GraphQLAPI.mjs.map +1 -1
  46. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.d.ts +8 -8
  47. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs +40 -31
  48. package/dist/esm/Providers/AWSAppSyncRealTimeProvider/index.mjs.map +1 -1
  49. package/dist/esm/internals/APIClient.d.ts +10 -9
  50. package/dist/esm/internals/APIClient.mjs +144 -55
  51. package/dist/esm/internals/APIClient.mjs.map +1 -1
  52. package/dist/esm/internals/InternalGraphQLAPI.d.ts +1 -1
  53. package/dist/esm/internals/InternalGraphQLAPI.mjs +45 -44
  54. package/dist/esm/internals/InternalGraphQLAPI.mjs.map +1 -1
  55. package/dist/esm/internals/generateClient.mjs +15 -5
  56. package/dist/esm/internals/generateClient.mjs.map +1 -1
  57. package/dist/esm/internals/generateCustomOperationsProperty.d.ts +9 -0
  58. package/dist/esm/internals/generateCustomOperationsProperty.mjs +45 -0
  59. package/dist/esm/internals/generateCustomOperationsProperty.mjs.map +1 -0
  60. package/dist/esm/internals/operations/custom.d.ts +63 -0
  61. package/dist/esm/internals/operations/custom.mjs +354 -0
  62. package/dist/esm/internals/operations/custom.mjs.map +1 -0
  63. package/dist/esm/internals/operations/get.d.ts +1 -1
  64. package/dist/esm/internals/operations/get.mjs +1 -1
  65. package/dist/esm/internals/operations/get.mjs.map +1 -1
  66. package/dist/esm/internals/operations/indexQuery.d.ts +3 -3
  67. package/dist/esm/internals/operations/indexQuery.mjs +1 -1
  68. package/dist/esm/internals/operations/indexQuery.mjs.map +1 -1
  69. package/dist/esm/internals/operations/list.d.ts +1 -1
  70. package/dist/esm/internals/operations/list.mjs +2 -2
  71. package/dist/esm/internals/operations/list.mjs.map +1 -1
  72. package/dist/esm/internals/operations/subscription.d.ts +1 -1
  73. package/dist/esm/internals/operations/subscription.mjs +1 -1
  74. package/dist/esm/internals/operations/subscription.mjs.map +1 -1
  75. package/dist/esm/internals/server/generateClientWithAmplifyInstance.d.ts +1 -1
  76. package/dist/esm/internals/server/generateClientWithAmplifyInstance.mjs +12 -2
  77. package/dist/esm/internals/server/generateClientWithAmplifyInstance.mjs.map +1 -1
  78. package/dist/esm/internals/server/generateModelsProperty.d.ts +3 -3
  79. package/dist/esm/internals/server/generateModelsProperty.mjs +1 -1
  80. package/dist/esm/internals/server/generateModelsProperty.mjs.map +1 -1
  81. package/dist/esm/internals/types.d.ts +2 -2
  82. package/dist/esm/internals/utils/clientProperties/generateEnumsProperty.mjs.map +1 -0
  83. package/dist/esm/internals/utils/{generateModelsProperty.d.ts → clientProperties/generateModelsProperty.d.ts} +2 -2
  84. package/dist/esm/internals/utils/{generateModelsProperty.mjs → clientProperties/generateModelsProperty.mjs} +7 -7
  85. package/dist/esm/internals/utils/clientProperties/generateModelsProperty.mjs.map +1 -0
  86. package/dist/esm/internals/utils/runtimeTypeGuards/isApiGraphQLProviderConfig.mjs.map +1 -0
  87. package/dist/esm/internals/utils/runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs.map +1 -0
  88. package/dist/esm/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.d.ts +2 -0
  89. package/dist/esm/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs +12 -0
  90. package/dist/esm/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.mjs.map +1 -0
  91. package/dist/esm/internals/v6.d.ts +1 -1
  92. package/dist/esm/internals/v6.mjs +1 -3
  93. package/dist/esm/internals/v6.mjs.map +1 -1
  94. package/dist/esm/types/index.d.ts +43 -35
  95. package/dist/esm/utils/ConnectionStateMonitor.d.ts +2 -2
  96. package/dist/esm/utils/ConnectionStateMonitor.mjs.map +1 -1
  97. package/dist/esm/utils/ReachabilityMonitor/index.native.mjs.map +1 -1
  98. package/dist/esm/utils/errors/constants.d.ts +7 -0
  99. package/dist/esm/utils/errors/constants.mjs +46 -0
  100. package/dist/esm/utils/errors/constants.mjs.map +1 -0
  101. package/dist/esm/utils/errors/createGraphQLResultWithError.d.ts +2 -0
  102. package/dist/esm/utils/errors/createGraphQLResultWithError.mjs +13 -0
  103. package/dist/esm/utils/errors/createGraphQLResultWithError.mjs.map +1 -0
  104. package/dist/esm/utils/errors/index.d.ts +1 -0
  105. package/dist/esm/utils/errors/index.mjs +1 -0
  106. package/dist/esm/utils/errors/index.mjs.map +1 -1
  107. package/dist/esm/utils/errors/repackageAuthError.d.ts +3 -7
  108. package/dist/esm/utils/errors/repackageAuthError.mjs +6 -6
  109. package/dist/esm/utils/errors/repackageAuthError.mjs.map +1 -1
  110. package/dist/esm/utils/findIndexByFields.d.ts +1 -1
  111. package/dist/esm/utils/resolveConfig.mjs +1 -0
  112. package/dist/esm/utils/resolveConfig.mjs.map +1 -1
  113. package/dist/esm/utils/resolveLibraryOptions.d.ts +4 -1
  114. package/dist/esm/utils/resolveOwnerFields.mjs +6 -0
  115. package/dist/esm/utils/resolveOwnerFields.mjs.map +1 -1
  116. package/package.json +8 -7
  117. package/src/GraphQLAPI.ts +6 -5
  118. package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +102 -82
  119. package/src/internals/APIClient.ts +248 -112
  120. package/src/internals/InternalGraphQLAPI.ts +66 -76
  121. package/src/internals/clientUtils.ts +1 -1
  122. package/src/internals/generateClient.ts +43 -6
  123. package/src/internals/generateCustomOperationsProperty.ts +112 -0
  124. package/src/internals/operations/custom.ts +492 -0
  125. package/src/internals/operations/get.ts +21 -20
  126. package/src/internals/operations/indexQuery.ts +13 -12
  127. package/src/internals/operations/list.ts +20 -24
  128. package/src/internals/operations/observeQuery.ts +3 -1
  129. package/src/internals/operations/subscription.ts +20 -16
  130. package/src/internals/server/generateClientWithAmplifyInstance.ts +27 -8
  131. package/src/internals/server/generateModelsProperty.ts +12 -6
  132. package/src/internals/types.ts +2 -2
  133. package/src/internals/utils/{generateEnumsProperty.ts → clientProperties/generateEnumsProperty.ts} +7 -6
  134. package/src/internals/utils/{generateModelsProperty.ts → clientProperties/generateModelsProperty.ts} +11 -10
  135. package/src/internals/utils/runtimeTypeGuards/isGraphQLResponseWithErrors.ts +15 -0
  136. package/src/internals/v6.ts +11 -9
  137. package/src/server/generateClient.ts +6 -3
  138. package/src/types/PubSub.ts +1 -0
  139. package/src/types/index.ts +102 -81
  140. package/src/utils/ConnectionStateMonitor.ts +14 -9
  141. package/src/utils/ReachabilityMonitor/index.native.ts +1 -1
  142. package/src/utils/ReachabilityMonitor/index.ts +1 -0
  143. package/src/utils/ReconnectionMonitor.ts +1 -0
  144. package/src/utils/errors/assertValidationError.ts +1 -1
  145. package/src/utils/errors/constants.ts +56 -0
  146. package/src/utils/errors/createGraphQLResultWithError.ts +15 -0
  147. package/src/utils/errors/index.ts +1 -0
  148. package/src/utils/errors/repackageAuthError.ts +11 -14
  149. package/src/utils/findIndexByFields.ts +3 -3
  150. package/src/utils/resolveConfig.ts +3 -2
  151. package/src/utils/resolveLibraryOptions.ts +1 -0
  152. package/src/utils/resolveOwnerFields.ts +20 -8
  153. package/src/utils/resolvePKFields.ts +1 -0
  154. package/dist/cjs/internals/utils/generateEnumsProperty.js.map +0 -1
  155. package/dist/cjs/internals/utils/generateModelsProperty.js.map +0 -1
  156. package/dist/cjs/internals/utils/isApiGraphQLProviderConfig.js.map +0 -1
  157. package/dist/cjs/internals/utils/isConfigureEventWithResourceConfig.js.map +0 -1
  158. package/dist/esm/internals/utils/generateEnumsProperty.mjs.map +0 -1
  159. package/dist/esm/internals/utils/generateModelsProperty.mjs.map +0 -1
  160. package/dist/esm/internals/utils/isApiGraphQLProviderConfig.mjs.map +0 -1
  161. package/dist/esm/internals/utils/isConfigureEventWithResourceConfig.mjs.map +0 -1
  162. /package/dist/cjs/internals/utils/{generateEnumsProperty.js → clientProperties/generateEnumsProperty.js} +0 -0
  163. /package/dist/cjs/internals/utils/{isApiGraphQLProviderConfig.js → runtimeTypeGuards/isApiGraphQLProviderConfig.js} +0 -0
  164. /package/dist/cjs/internals/utils/{isConfigureEventWithResourceConfig.js → runtimeTypeGuards/isConfigureEventWithResourceConfig.js} +0 -0
  165. /package/dist/esm/internals/utils/{generateEnumsProperty.d.ts → clientProperties/generateEnumsProperty.d.ts} +0 -0
  166. /package/dist/esm/internals/utils/{generateEnumsProperty.mjs → clientProperties/generateEnumsProperty.mjs} +0 -0
  167. /package/dist/esm/internals/utils/{isApiGraphQLProviderConfig.d.ts → runtimeTypeGuards/isApiGraphQLProviderConfig.d.ts} +0 -0
  168. /package/dist/esm/internals/utils/{isApiGraphQLProviderConfig.mjs → runtimeTypeGuards/isApiGraphQLProviderConfig.mjs} +0 -0
  169. /package/dist/esm/internals/utils/{isConfigureEventWithResourceConfig.d.ts → runtimeTypeGuards/isConfigureEventWithResourceConfig.d.ts} +0 -0
  170. /package/dist/esm/internals/utils/{isConfigureEventWithResourceConfig.mjs → runtimeTypeGuards/isConfigureEventWithResourceConfig.mjs} +0 -0
  171. /package/src/internals/utils/{isApiGraphQLProviderConfig.ts → runtimeTypeGuards/isApiGraphQLProviderConfig.ts} +0 -0
  172. /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
- let targetNames = [];
55
+ const targetNames = [];
58
56
  if (modelField.association && 'targetNames' in modelField.association) {
59
- targetNames = modelField.association.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((acc, curVal) => {
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
- case connectionType.HAS_MANY:
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 }) => (typeof type === 'string' ||
207
- (typeof type === 'object' && typeof type?.enum === 'string')) &&
208
- name)
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(modelDefinitions, modelName, selectionSet) {
236
- const dotNotationToObject = (path, modelName) => {
270
+ function customSelectionSetToIR(modelIntrospection, modelName, selectionSet) {
271
+ const dotNotationToObject = (path, modelOrNonModelName) => {
237
272
  const [fieldName, ...rest] = path.split('.');
238
- let result = {};
239
- if (rest.length === 0) {
240
- result = { [fieldName]: FIELD_IR };
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
- const nested = rest[0];
244
- const modelDefinition = modelDefinitions[modelName];
245
- const modelFields = modelDefinition.fields;
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 relatedModelDefinition = modelDefinitions[relatedModel];
309
+ const nestedRelatedModelDefinition = modelIntrospection.models[relatedModel];
254
310
  result = {
255
- [fieldName]: defaultSelectionSetIR(relatedModelDefinition),
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 (modelFields[fieldName]?.isArray) {
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 defaultSelectionSetIR = (relatedModelDefinition) => {
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 (!source.hasOwnProperty(key))
402
+ if (!Object.prototype.hasOwnProperty.call(source, key))
334
403
  continue;
335
- if (target.hasOwnProperty(key) && isObject(target[key])) {
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(modelDefinitions, modelName, selectionSet) {
345
- const modelDefinition = modelDefinitions[modelName];
346
- if (!selectionSet) {
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(modelDefinitions, modelName, modelOperation, listArgs, indexMeta) {
355
- const modelDefinition = modelDefinitions[modelName];
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(modelDefinitions, modelName, selectionSet);
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]) => `\$${fieldName}: ${type}`)})`
523
+ ? `(${Object.entries(graphQLArguments).map(([fieldName, type]) => `$${fieldName}: ${type}`)})`
443
524
  : ''} { ${graphQLFieldName}${graphQLArguments
444
- ? `(${Object.keys(graphQLArguments).map(fieldName => `${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 obect from call site.
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 {client} V6Client | V6ClientSSRRequest | V6ClientSSRCookies - for extracting client headers
601
- * @param {requestHeaders} [CustomHeaders] - request headers
602
- * @returns {CustomHeaders} - custom headers
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] || {};