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