@aws-amplify/api-graphql 4.0.1-api-v6-models.c1977f8.0 → 4.0.1-api-v6-models.891fe0d.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 (99) 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 -11
  11. package/lib/internals/generateModelsProperty.js +19 -302
  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/types.d.ts +8 -0
  27. package/lib/internals/v6.js +3 -3
  28. package/lib/tsconfig.tsbuildinfo +1 -1
  29. package/lib/types/index.d.ts +41 -4
  30. package/lib/types/index.js +3 -1
  31. package/lib/utils/ConnectionStateMonitor.js +51 -64
  32. package/lib/utils/ReachabilityMonitor/index.js +2 -2
  33. package/lib/utils/ReachabilityMonitor/index.native.js +4 -6
  34. package/lib/utils/ReconnectionMonitor.js +20 -24
  35. package/lib/utils/errors/APIError.js +7 -11
  36. package/lib/utils/errors/assertValidationError.js +4 -4
  37. package/lib/utils/errors/validation.js +5 -6
  38. package/lib/utils/findIndexByFields.js +4 -9
  39. package/lib/utils/resolveConfig.js +9 -10
  40. package/lib/utils/resolveLibraryOptions.js +4 -5
  41. package/lib/utils/resolveOwnerFields.js +10 -33
  42. package/lib/utils/resolvePKFields.js +2 -3
  43. package/lib-esm/GraphQLAPI.d.ts +1 -1
  44. package/lib-esm/GraphQLAPI.js +23 -29
  45. package/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.js +459 -575
  46. package/lib-esm/Providers/constants.js +10 -10
  47. package/lib-esm/internals/APIClient.d.ts +16 -1
  48. package/lib-esm/internals/APIClient.js +230 -205
  49. package/lib-esm/internals/InternalGraphQLAPI.d.ts +1 -1
  50. package/lib-esm/internals/InternalGraphQLAPI.js +201 -244
  51. package/lib-esm/internals/generateClient.js +12 -9
  52. package/lib-esm/internals/generateModelsProperty.js +19 -302
  53. package/lib-esm/internals/operations/get.d.ts +2 -0
  54. package/lib-esm/internals/operations/get.js +55 -0
  55. package/lib-esm/internals/operations/list.d.ts +2 -0
  56. package/lib-esm/internals/operations/list.js +67 -0
  57. package/lib-esm/internals/operations/observeQuery.d.ts +2 -0
  58. package/lib-esm/internals/operations/observeQuery.js +115 -0
  59. package/lib-esm/internals/operations/subscription.d.ts +1 -0
  60. package/lib-esm/internals/operations/subscription.js +23 -0
  61. package/lib-esm/internals/server/generateClient.d.ts +11 -0
  62. package/lib-esm/internals/server/generateClient.js +26 -0
  63. package/lib-esm/internals/server/generateModelsProperty.d.ts +3 -0
  64. package/lib-esm/internals/server/generateModelsProperty.js +41 -0
  65. package/lib-esm/internals/server/index.d.ts +1 -0
  66. package/lib-esm/internals/server/index.js +3 -0
  67. package/lib-esm/internals/types.d.ts +8 -0
  68. package/lib-esm/internals/v6.js +1 -1
  69. package/lib-esm/tsconfig.tsbuildinfo +1 -1
  70. package/lib-esm/types/index.d.ts +41 -4
  71. package/lib-esm/types/index.js +3 -1
  72. package/lib-esm/utils/ConnectionStateMonitor.js +49 -63
  73. package/lib-esm/utils/ReachabilityMonitor/index.js +1 -1
  74. package/lib-esm/utils/ReachabilityMonitor/index.native.js +1 -3
  75. package/lib-esm/utils/ReconnectionMonitor.js +19 -24
  76. package/lib-esm/utils/errors/APIError.js +6 -11
  77. package/lib-esm/utils/errors/assertValidationError.js +2 -2
  78. package/lib-esm/utils/errors/validation.js +5 -6
  79. package/lib-esm/utils/findIndexByFields.js +4 -9
  80. package/lib-esm/utils/resolveConfig.js +8 -9
  81. package/lib-esm/utils/resolveLibraryOptions.js +4 -5
  82. package/lib-esm/utils/resolveOwnerFields.js +10 -33
  83. package/lib-esm/utils/resolvePKFields.js +2 -3
  84. package/package.json +8 -7
  85. package/src/GraphQLAPI.ts +6 -2
  86. package/src/Providers/AWSAppSyncRealTimeProvider/index.ts +6 -5
  87. package/src/internals/APIClient.ts +123 -36
  88. package/src/internals/InternalGraphQLAPI.ts +35 -10
  89. package/src/internals/generateClient.ts +3 -2
  90. package/src/internals/generateModelsProperty.ts +28 -314
  91. package/src/internals/operations/get.ts +121 -0
  92. package/src/internals/operations/list.ts +111 -0
  93. package/src/internals/operations/observeQuery.ts +140 -0
  94. package/src/internals/operations/subscription.ts +59 -0
  95. package/src/internals/server/generateClient.ts +45 -0
  96. package/src/internals/server/generateModelsProperty.ts +70 -0
  97. package/src/internals/server/index.ts +4 -0
  98. package/src/internals/types.ts +9 -0
  99. package/src/types/index.ts +71 -9
@@ -1,320 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateModelsProperty = void 0;
4
- var tslib_1 = require("tslib");
5
- var APIClient_1 = require("./APIClient");
6
- var utils_1 = require("../utils");
7
- var rxjs_1 = require("rxjs");
4
+ const APIClient_1 = require("./APIClient");
5
+ const list_1 = require("./operations/list");
6
+ const get_1 = require("./operations/get");
7
+ const subscription_1 = require("./operations/subscription");
8
+ const observeQuery_1 = require("./operations/observeQuery");
8
9
  function generateModelsProperty(client, params) {
9
- var e_1, _a;
10
- var _this = this;
11
- var _b, _c;
12
- var models = {};
13
- var config = params.amplify.getConfig();
14
- var modelIntrospection = (_c = (_b = config.API) === null || _b === void 0 ? void 0 : _b.GraphQL) === null || _c === void 0 ? void 0 : _c.modelIntrospection;
10
+ const models = {};
11
+ const config = params.amplify.getConfig();
12
+ const modelIntrospection = config.API?.GraphQL?.modelIntrospection;
15
13
  if (!modelIntrospection) {
16
14
  return {};
17
15
  }
18
- var _loop_1 = function (model) {
19
- var name_1 = model.name;
20
- models[name_1] = {};
21
- Object.entries(APIClient_1.graphQLOperationsInfo).forEach(function (_a) {
22
- var _b = tslib_1.__read(_a, 2), key = _b[0], operationPrefix = _b[1].operationPrefix;
23
- var operation = key;
16
+ const SUBSCRIPTION_OPS = ['ONCREATE', 'ONUPDATE', 'ONDELETE'];
17
+ for (const model of Object.values(modelIntrospection.models)) {
18
+ const { name } = model;
19
+ models[name] = {};
20
+ Object.entries(APIClient_1.graphQLOperationsInfo).forEach(([key, { operationPrefix }]) => {
21
+ const operation = key;
24
22
  if (operation === 'LIST') {
25
- models[name_1][operationPrefix] = function (args) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
26
- var query, variables, options, _a, data, extensions, _b, key_1, flattenedResult, initialized, error_1;
27
- return tslib_1.__generator(this, function (_c) {
28
- switch (_c.label) {
29
- case 0:
30
- query = (0, APIClient_1.generateGraphQLDocument)(modelIntrospection.models, name_1, 'LIST', args);
31
- variables = (0, APIClient_1.buildGraphQLVariables)(model, 'LIST', args, modelIntrospection);
32
- _c.label = 1;
33
- case 1:
34
- _c.trys.push([1, 3, , 4]);
35
- options = {};
36
- if (args === null || args === void 0 ? void 0 : args.authMode)
37
- options.authMode = args === null || args === void 0 ? void 0 : args.authMode;
38
- if (args === null || args === void 0 ? void 0 : args.authToken)
39
- options.authToken = args === null || args === void 0 ? void 0 : args.authToken;
40
- return [4 /*yield*/, client.graphql(tslib_1.__assign(tslib_1.__assign({}, options), { query: query, variables: variables }))];
41
- case 2:
42
- _a = (_c.sent()), data = _a.data, extensions = _a.extensions;
43
- // flatten response
44
- if (data !== undefined) {
45
- _b = tslib_1.__read(Object.keys(data), 1), key_1 = _b[0];
46
- if (data[key_1].items) {
47
- flattenedResult = (0, APIClient_1.flattenItems)(data)[key_1];
48
- // don't init if custom selection set
49
- if (args === null || args === void 0 ? void 0 : args.selectionSet) {
50
- return [2 /*return*/, {
51
- data: flattenedResult,
52
- nextToken: data[key_1].nextToken,
53
- extensions: extensions,
54
- }];
55
- }
56
- else {
57
- initialized = (0, APIClient_1.initializeModel)(client, name_1, flattenedResult, modelIntrospection, options.authMode, options.authToken);
58
- return [2 /*return*/, {
59
- data: initialized,
60
- nextToken: data[key_1].nextToken,
61
- extensions: extensions,
62
- }];
63
- }
64
- }
65
- return [2 /*return*/, {
66
- data: data[key_1],
67
- nextToken: data[key_1].nextToken,
68
- extensions: extensions,
69
- }];
70
- }
71
- return [3 /*break*/, 4];
72
- case 3:
73
- error_1 = _c.sent();
74
- if (error_1.errors) {
75
- // graphql errors pass through
76
- return [2 /*return*/, error_1];
77
- }
78
- else {
79
- // non-graphql errors re re-thrown
80
- throw error_1;
81
- }
82
- return [3 /*break*/, 4];
83
- case 4: return [2 /*return*/];
84
- }
85
- });
86
- }); };
23
+ models[name][operationPrefix] = (0, list_1.listFactory)(client, modelIntrospection, model);
87
24
  }
88
- else if (['ONCREATE', 'ONUPDATE', 'ONDELETE'].includes(operation)) {
89
- models[name_1][operationPrefix] = function (args) {
90
- var query = (0, APIClient_1.generateGraphQLDocument)(modelIntrospection.models, name_1, operation);
91
- var variables = (0, APIClient_1.buildGraphQLVariables)(model, operation, args, modelIntrospection);
92
- var options = {};
93
- if (args === null || args === void 0 ? void 0 : args.authMode)
94
- options.authMode = args === null || args === void 0 ? void 0 : args.authMode;
95
- if (args === null || args === void 0 ? void 0 : args.authToken)
96
- options.authToken = args === null || args === void 0 ? void 0 : args.authToken;
97
- var observable = client.graphql(tslib_1.__assign(tslib_1.__assign({}, options), { query: query, variables: variables }));
98
- return observable.pipe((0, rxjs_1.map)(function (value) {
99
- var _a = tslib_1.__read(Object.keys(value.data), 1), key = _a[0];
100
- var _b = tslib_1.__read((0, APIClient_1.initializeModel)(client, name_1, [value.data[key]], modelIntrospection, options === null || options === void 0 ? void 0 : options.authMode, options === null || options === void 0 ? void 0 : options.authToken), 1), initialized = _b[0];
101
- return initialized;
102
- }));
103
- };
25
+ else if (SUBSCRIPTION_OPS.includes(operation)) {
26
+ models[name][operationPrefix] = (0, subscription_1.subscriptionFactory)(client, modelIntrospection, model, operation);
104
27
  }
105
28
  else if (operation === 'OBSERVE_QUERY') {
106
- models[name_1][operationPrefix] = function (arg) {
107
- return new rxjs_1.Observable(function (subscriber) {
108
- // what we'll be sending to our subscribers
109
- var items = [];
110
- // To enqueue subscription messages while we collect our initial
111
- // result set.
112
- var messageQueue = [];
113
- // operation to take when message(s) arrive.
114
- // this operation will be swapped out once initial "sync" is complete
115
- // to immediately ingest messsages.
116
- var receiveMessages = function () {
117
- var messages = [];
118
- for (var _i = 0; _i < arguments.length; _i++) {
119
- messages[_i] = arguments[_i];
120
- }
121
- return messageQueue.push.apply(messageQueue, tslib_1.__spreadArray([], tslib_1.__read(messages), false));
122
- };
123
- // start subscriptions
124
- var onCreateSub = models[name_1].onCreate(arg).subscribe({
125
- next: function (item) {
126
- receiveMessages({ item: item, type: 'create' });
127
- },
128
- error: function (error) {
129
- subscriber.error({ type: 'onCreate', error: error });
130
- },
131
- });
132
- var onUpdateSub = models[name_1].onUpdate(arg).subscribe({
133
- next: function (item) {
134
- receiveMessages({ item: item, type: 'update' });
135
- },
136
- error: function (error) {
137
- subscriber.error({ type: 'onUpdate', error: error });
138
- },
139
- });
140
- var onDeleteSub = models[name_1].onDelete(arg).subscribe({
141
- next: function (item) {
142
- receiveMessages({ item: item, type: 'delete' });
143
- },
144
- error: function (error) {
145
- subscriber.error({ type: 'onDelete', error: error });
146
- },
147
- });
148
- // consumes a list of messages and sends a snapshot
149
- function ingestMessages(messages) {
150
- var e_2, _a;
151
- try {
152
- for (var messages_1 = tslib_1.__values(messages), messages_1_1 = messages_1.next(); !messages_1_1.done; messages_1_1 = messages_1.next()) {
153
- var message = messages_1_1.value;
154
- var idx = (0, utils_1.findIndexByFields)(message.item, items, pkFields);
155
- switch (message.type) {
156
- case 'create':
157
- if (idx < 0)
158
- items.push(message.item);
159
- break;
160
- case 'update':
161
- if (idx >= 0)
162
- items[idx] = message.item;
163
- break;
164
- case 'delete':
165
- if (idx >= 0)
166
- items.splice(idx, 1);
167
- break;
168
- default:
169
- console.error('Unrecognized message in observeQuery.', message);
170
- }
171
- }
172
- }
173
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
174
- finally {
175
- try {
176
- if (messages_1_1 && !messages_1_1.done && (_a = messages_1.return)) _a.call(messages_1);
177
- }
178
- finally { if (e_2) throw e_2.error; }
179
- }
180
- subscriber.next({
181
- items: items,
182
- isSynced: true,
183
- });
184
- }
185
- var pkFields = (0, utils_1.resolvePKFields)(model);
186
- // initial results
187
- (function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
188
- var firstPage, nextToken, _a, page, errors, _nextToken, isSynced, errors_1, errors_1_1, error;
189
- var e_3, _b;
190
- return tslib_1.__generator(this, function (_c) {
191
- switch (_c.label) {
192
- case 0:
193
- firstPage = true;
194
- nextToken = null;
195
- _c.label = 1;
196
- case 1:
197
- if (!(!subscriber.closed && (firstPage || nextToken))) return [3 /*break*/, 3];
198
- firstPage = false;
199
- return [4 /*yield*/, models[name_1].list(tslib_1.__assign(tslib_1.__assign({}, arg), { nextToken: nextToken }))];
200
- case 2:
201
- _a = _c.sent(), page = _a.data, errors = _a.errors, _nextToken = _a.nextToken;
202
- nextToken = _nextToken;
203
- items.push.apply(items, tslib_1.__spreadArray([], tslib_1.__read(page), false));
204
- isSynced = messageQueue.length === 0 &&
205
- (nextToken === null || nextToken === undefined);
206
- subscriber.next({
207
- items: items,
208
- isSynced: isSynced,
209
- });
210
- if (Array.isArray(errors)) {
211
- try {
212
- for (errors_1 = (e_3 = void 0, tslib_1.__values(errors)), errors_1_1 = errors_1.next(); !errors_1_1.done; errors_1_1 = errors_1.next()) {
213
- error = errors_1_1.value;
214
- subscriber.error(error);
215
- }
216
- }
217
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
218
- finally {
219
- try {
220
- if (errors_1_1 && !errors_1_1.done && (_b = errors_1.return)) _b.call(errors_1);
221
- }
222
- finally { if (e_3) throw e_3.error; }
223
- }
224
- }
225
- return [3 /*break*/, 1];
226
- case 3:
227
- // play through the queue
228
- if (messageQueue.length > 0) {
229
- ingestMessages(messageQueue);
230
- }
231
- // switch the queue to write directly to the items collection
232
- receiveMessages = function () {
233
- var messages = [];
234
- for (var _i = 0; _i < arguments.length; _i++) {
235
- messages[_i] = arguments[_i];
236
- }
237
- ingestMessages(messages);
238
- return items.length;
239
- };
240
- return [2 /*return*/];
241
- }
242
- });
243
- }); })();
244
- // when subscriber unsubscribes, tear down internal subs
245
- return function () {
246
- // 1. tear down internal subs
247
- onCreateSub.unsubscribe();
248
- onUpdateSub.unsubscribe();
249
- onDeleteSub.unsubscribe();
250
- // 2. there is no need to explicitly stop paging. instead, we
251
- // just check `subscriber.closed` above before fetching each page.
252
- };
253
- });
254
- };
29
+ models[name][operationPrefix] = (0, observeQuery_1.observeQueryFactory)(models, model);
255
30
  }
256
31
  else {
257
- models[name_1][operationPrefix] = function (arg, options) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
258
- var query, variables, _a, data, extensions, _b, key_2, flattenedResult, _c, initialized, error_2;
259
- return tslib_1.__generator(this, function (_d) {
260
- switch (_d.label) {
261
- case 0:
262
- query = (0, APIClient_1.generateGraphQLDocument)(modelIntrospection.models, name_1, operation, options);
263
- variables = (0, APIClient_1.buildGraphQLVariables)(model, operation, arg, modelIntrospection);
264
- _d.label = 1;
265
- case 1:
266
- _d.trys.push([1, 3, , 4]);
267
- return [4 /*yield*/, client.graphql(tslib_1.__assign(tslib_1.__assign({}, options), { query: query, variables: variables }))];
268
- case 2:
269
- _a = (_d.sent()), data = _a.data, extensions = _a.extensions;
270
- // flatten response
271
- if (data !== undefined) {
272
- _b = tslib_1.__read(Object.keys(data), 1), key_2 = _b[0];
273
- flattenedResult = (0, APIClient_1.flattenItems)(data)[key_2];
274
- if (options === null || options === void 0 ? void 0 : options.selectionSet) {
275
- return [2 /*return*/, { data: flattenedResult, extensions: extensions }];
276
- }
277
- else {
278
- _c = tslib_1.__read((0, APIClient_1.initializeModel)(client, name_1, [flattenedResult], modelIntrospection, options === null || options === void 0 ? void 0 : options.authMode, options === null || options === void 0 ? void 0 : options.authToken), 1), initialized = _c[0];
279
- return [2 /*return*/, { data: initialized, extensions: extensions }];
280
- }
281
- }
282
- else {
283
- return [2 /*return*/, { data: null, extensions: extensions }];
284
- }
285
- return [3 /*break*/, 4];
286
- case 3:
287
- error_2 = _d.sent();
288
- if (error_2.errors) {
289
- // graphql errors pass through
290
- return [2 /*return*/, error_2];
291
- }
292
- else {
293
- // non-graphql errors re re-thrown
294
- throw error_2;
295
- }
296
- return [3 /*break*/, 4];
297
- case 4: return [2 /*return*/];
298
- }
299
- });
300
- }); };
32
+ models[name][operationPrefix] = (0, get_1.getFactory)(client, modelIntrospection, model, operation);
301
33
  }
302
34
  });
303
- };
304
- try {
305
- // TODO: refactor this to use separate methods for each CRUDL.
306
- // Doesn't make sense to gen the methods dynamically given the different args and return values
307
- for (var _d = tslib_1.__values(Object.values(modelIntrospection.models)), _e = _d.next(); !_e.done; _e = _d.next()) {
308
- var model = _e.value;
309
- _loop_1(model);
310
- }
311
- }
312
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
313
- finally {
314
- try {
315
- if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
316
- }
317
- finally { if (e_1) throw e_1.error; }
318
35
  }
319
36
  return models;
320
37
  }
@@ -0,0 +1,2 @@
1
+ import { AmplifyServer } from '@aws-amplify/core/internals/adapter-core';
2
+ export declare function getFactory(client: any, modelIntrospection: any, model: any, operation: any, context?: boolean): (contextSpec: AmplifyServer.ContextSpec, arg?: any, options?: any) => Promise<any>;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFactory = void 0;
4
+ const APIClient_1 = require("../APIClient");
5
+ function getFactory(client, modelIntrospection, model, operation, context = false) {
6
+ const getWithContext = async (contextSpec, arg, options) => {
7
+ return _get(client, modelIntrospection, model, arg, options, operation, contextSpec);
8
+ };
9
+ const get = async (arg, options) => {
10
+ return _get(client, modelIntrospection, model, arg, options, operation, context);
11
+ };
12
+ return context ? getWithContext : get;
13
+ }
14
+ exports.getFactory = getFactory;
15
+ async function _get(client, modelIntrospection, model, arg, options, operation, context) {
16
+ const { name } = model;
17
+ const query = (0, APIClient_1.generateGraphQLDocument)(modelIntrospection.models, name, operation, options);
18
+ const variables = (0, APIClient_1.buildGraphQLVariables)(model, operation, arg, modelIntrospection);
19
+ try {
20
+ const auth = (0, APIClient_1.authModeParams)(client, options);
21
+ const { data, extensions } = context
22
+ ? (await client.graphql(context, {
23
+ ...auth,
24
+ query,
25
+ variables,
26
+ }))
27
+ : (await client.graphql({
28
+ ...auth,
29
+ query,
30
+ variables,
31
+ }));
32
+ // flatten response
33
+ if (data !== undefined) {
34
+ const [key] = Object.keys(data);
35
+ const flattenedResult = (0, APIClient_1.flattenItems)(data)[key];
36
+ if (options?.selectionSet) {
37
+ return { data: flattenedResult, extensions };
38
+ }
39
+ else {
40
+ // TODO: refactor to avoid destructuring here
41
+ const [initialized] = (0, APIClient_1.initializeModel)(client, name, [flattenedResult], modelIntrospection, auth.authMode, auth.authToken, context);
42
+ return { data: initialized, extensions };
43
+ }
44
+ }
45
+ else {
46
+ return { data: null, extensions };
47
+ }
48
+ }
49
+ catch (error) {
50
+ if (error.errors) {
51
+ // graphql errors pass through
52
+ return error;
53
+ }
54
+ else {
55
+ // non-graphql errors re re-thrown
56
+ throw error;
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,2 @@
1
+ import { AmplifyServer } from '@aws-amplify/core/internals/adapter-core';
2
+ export declare function listFactory(client: any, modelIntrospection: any, model: any, context?: boolean): (contextSpec: AmplifyServer.ContextSpec, args?: any) => Promise<any>;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listFactory = void 0;
4
+ const APIClient_1 = require("../APIClient");
5
+ function listFactory(client, modelIntrospection, model, context = false) {
6
+ const listWithContext = async (contextSpec, args) => {
7
+ return _list(client, modelIntrospection, model, args, contextSpec);
8
+ };
9
+ const list = async (args) => {
10
+ return _list(client, modelIntrospection, model, args, context);
11
+ };
12
+ return context ? listWithContext : list;
13
+ }
14
+ exports.listFactory = listFactory;
15
+ async function _list(client, modelIntrospection, model, args, context) {
16
+ const { name } = model;
17
+ const query = (0, APIClient_1.generateGraphQLDocument)(modelIntrospection.models, name, 'LIST', args);
18
+ const variables = (0, APIClient_1.buildGraphQLVariables)(model, 'LIST', args, modelIntrospection);
19
+ try {
20
+ const auth = (0, APIClient_1.authModeParams)(client, args);
21
+ const { data, extensions } = context
22
+ ? (await client.graphql(context, {
23
+ ...auth,
24
+ query,
25
+ variables,
26
+ }))
27
+ : (await client.graphql({
28
+ ...auth,
29
+ query,
30
+ variables,
31
+ }));
32
+ // flatten response
33
+ if (data !== undefined) {
34
+ const [key] = Object.keys(data);
35
+ if (data[key].items) {
36
+ const flattenedResult = (0, APIClient_1.flattenItems)(data)[key];
37
+ // don't init if custom selection set
38
+ if (args?.selectionSet) {
39
+ return {
40
+ data: flattenedResult,
41
+ nextToken: data[key].nextToken,
42
+ extensions,
43
+ };
44
+ }
45
+ else {
46
+ const initialized = (0, APIClient_1.initializeModel)(client, name, flattenedResult, modelIntrospection, auth.authMode, auth.authToken, context);
47
+ return {
48
+ data: initialized,
49
+ nextToken: data[key].nextToken,
50
+ extensions,
51
+ };
52
+ }
53
+ }
54
+ return {
55
+ data: data[key],
56
+ nextToken: data[key].nextToken,
57
+ extensions,
58
+ };
59
+ }
60
+ }
61
+ catch (error) {
62
+ if (error.errors) {
63
+ // graphql errors pass through
64
+ return error;
65
+ }
66
+ else {
67
+ // non-graphql errors re re-thrown
68
+ throw error;
69
+ }
70
+ }
71
+ }
@@ -0,0 +1,2 @@
1
+ import { Observable } from 'rxjs';
2
+ export declare function observeQueryFactory(models: any, model: any): (arg?: any) => Observable<unknown>;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.observeQueryFactory = void 0;
6
+ const rxjs_1 = require("rxjs");
7
+ const utils_1 = require("../../utils");
8
+ function observeQueryFactory(models, model) {
9
+ const { name } = model;
10
+ const observeQuery = (arg) => new rxjs_1.Observable(subscriber => {
11
+ // what we'll be sending to our subscribers
12
+ const items = [];
13
+ // To enqueue subscription messages while we collect our initial
14
+ // result set.
15
+ const messageQueue = [];
16
+ // operation to take when message(s) arrive.
17
+ // this operation will be swapped out once initial "sync" is complete
18
+ // to immediately ingest messsages.
19
+ let receiveMessages = (...messages) => {
20
+ return messageQueue.push(...messages);
21
+ };
22
+ // start subscriptions
23
+ const onCreateSub = models[name].onCreate(arg).subscribe({
24
+ next(item) {
25
+ receiveMessages({ item, type: 'create' });
26
+ },
27
+ error(error) {
28
+ subscriber.error({ type: 'onCreate', error });
29
+ },
30
+ });
31
+ const onUpdateSub = models[name].onUpdate(arg).subscribe({
32
+ next(item) {
33
+ receiveMessages({ item, type: 'update' });
34
+ },
35
+ error(error) {
36
+ subscriber.error({ type: 'onUpdate', error });
37
+ },
38
+ });
39
+ const onDeleteSub = models[name].onDelete(arg).subscribe({
40
+ next(item) {
41
+ receiveMessages({ item, type: 'delete' });
42
+ },
43
+ error(error) {
44
+ subscriber.error({ type: 'onDelete', error });
45
+ },
46
+ });
47
+ // consumes a list of messages and sends a snapshot
48
+ function ingestMessages(messages) {
49
+ for (const message of messages) {
50
+ const idx = (0, utils_1.findIndexByFields)(message.item, items, pkFields);
51
+ switch (message.type) {
52
+ case 'create':
53
+ if (idx < 0)
54
+ items.push(message.item);
55
+ break;
56
+ case 'update':
57
+ if (idx >= 0)
58
+ items[idx] = message.item;
59
+ break;
60
+ case 'delete':
61
+ if (idx >= 0)
62
+ items.splice(idx, 1);
63
+ break;
64
+ default:
65
+ console.error('Unrecognized message in observeQuery.', message);
66
+ }
67
+ }
68
+ subscriber.next({
69
+ items,
70
+ isSynced: true,
71
+ });
72
+ }
73
+ const pkFields = (0, utils_1.resolvePKFields)(model);
74
+ // initial results
75
+ (async () => {
76
+ let firstPage = true;
77
+ let nextToken = null;
78
+ while (!subscriber.closed && (firstPage || nextToken)) {
79
+ firstPage = false;
80
+ const { data: page, errors, nextToken: _nextToken, } = await models[name].list({ ...arg, nextToken });
81
+ nextToken = _nextToken;
82
+ items.push(...page);
83
+ // if there are no more pages and no items we already know about
84
+ // that need to be merged in from sub, we're "synced"
85
+ const isSynced = messageQueue.length === 0 &&
86
+ (nextToken === null || nextToken === undefined);
87
+ subscriber.next({
88
+ items,
89
+ isSynced,
90
+ });
91
+ if (Array.isArray(errors)) {
92
+ for (const error of errors) {
93
+ subscriber.error(error);
94
+ }
95
+ }
96
+ }
97
+ // play through the queue
98
+ if (messageQueue.length > 0) {
99
+ ingestMessages(messageQueue);
100
+ }
101
+ // switch the queue to write directly to the items collection
102
+ receiveMessages = (...messages) => {
103
+ ingestMessages(messages);
104
+ return items.length;
105
+ };
106
+ })();
107
+ // when subscriber unsubscribes, tear down internal subs
108
+ return () => {
109
+ // 1. tear down internal subs
110
+ onCreateSub.unsubscribe();
111
+ onUpdateSub.unsubscribe();
112
+ onDeleteSub.unsubscribe();
113
+ // 2. there is no need to explicitly stop paging. instead, we
114
+ // just check `subscriber.closed` above before fetching each page.
115
+ };
116
+ });
117
+ return observeQuery;
118
+ }
119
+ exports.observeQueryFactory = observeQueryFactory;
@@ -0,0 +1 @@
1
+ export declare function subscriptionFactory(client: any, modelIntrospection: any, model: any, operation: any): (args?: any) => import("rxjs").Observable<any>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.subscriptionFactory = void 0;
6
+ const rxjs_1 = require("rxjs");
7
+ const APIClient_1 = require("../APIClient");
8
+ function subscriptionFactory(client, modelIntrospection, model, operation) {
9
+ const { name } = model;
10
+ const subscription = (args) => {
11
+ const query = (0, APIClient_1.generateGraphQLDocument)(modelIntrospection.models, name, operation);
12
+ const variables = (0, APIClient_1.buildGraphQLVariables)(model, operation, args, modelIntrospection);
13
+ const auth = (0, APIClient_1.authModeParams)(client, args);
14
+ const observable = client.graphql({
15
+ ...auth,
16
+ query,
17
+ variables,
18
+ });
19
+ return observable.pipe((0, rxjs_1.map)(value => {
20
+ const [key] = Object.keys(value.data);
21
+ const [initialized] = (0, APIClient_1.initializeModel)(client, name, [value.data[key]], modelIntrospection, auth.authMode, auth.authToken);
22
+ return initialized;
23
+ }));
24
+ };
25
+ return subscription;
26
+ }
27
+ exports.subscriptionFactory = subscriptionFactory;
@@ -0,0 +1,11 @@
1
+ import { V6ClientSSRRequest, V6ClientSSRCookies, ServerClientGenerationParams, CommonPublicClientOptions } from '../../types';
2
+ /**
3
+ * @private
4
+ *
5
+ * Creates a client that can be used to make GraphQL requests, using a provided `AmplifyClassV6`
6
+ * compatible context object for config and auth fetching.
7
+ *
8
+ * @param params
9
+ * @returns
10
+ */
11
+ export declare function generateClient<T extends Record<any, any> = never, ClientType extends V6ClientSSRRequest<T> | V6ClientSSRCookies<T> = V6ClientSSRCookies<T>>(params: ServerClientGenerationParams & CommonPublicClientOptions): ClientType;