@aws-amplify/api-graphql 4.0.1-api-v6-models.9493d4d.0 → 4.0.1-api-v6-models.01b2bb8.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.
@@ -42,6 +42,10 @@ export declare const graphQLOperationsInfo: {
42
42
  operationPrefix: "onDelete";
43
43
  usePlural: boolean;
44
44
  };
45
+ OBSERVE_QUERY: {
46
+ operationPrefix: "observeQuery";
47
+ usePlural: boolean;
48
+ };
45
49
  };
46
50
  export type ModelOperation = keyof typeof graphQLOperationsInfo;
47
51
  /**
@@ -145,6 +145,7 @@ exports.graphQLOperationsInfo = {
145
145
  ONCREATE: { operationPrefix: 'onCreate', usePlural: false },
146
146
  ONUPDATE: { operationPrefix: 'onUpdate', usePlural: false },
147
147
  ONDELETE: { operationPrefix: 'onDelete', usePlural: false },
148
+ OBSERVE_QUERY: { operationPrefix: 'observeQuery', usePlural: false },
148
149
  };
149
150
  var graphQLDocumentsCache = new Map();
150
151
  var SELECTION_SET_WILDCARD = '*';
@@ -317,9 +318,11 @@ function generateGraphQLDocument(modelIntrospection, modelName, modelOperation,
317
318
  case 'LIST':
318
319
  graphQLArguments !== null && graphQLArguments !== void 0 ? graphQLArguments : (graphQLArguments = {
319
320
  filter: "Model".concat(name, "FilterInput"),
321
+ limit: 'Int',
322
+ nextToken: 'String',
320
323
  });
321
324
  graphQLOperationType !== null && graphQLOperationType !== void 0 ? graphQLOperationType : (graphQLOperationType = 'query');
322
- graphQLSelectionSet !== null && graphQLSelectionSet !== void 0 ? graphQLSelectionSet : (graphQLSelectionSet = "items { ".concat(selectionSetFields, " }"));
325
+ graphQLSelectionSet !== null && graphQLSelectionSet !== void 0 ? graphQLSelectionSet : (graphQLSelectionSet = "items { ".concat(selectionSetFields, " } nextToken __typename"));
323
326
  case 'ONCREATE':
324
327
  case 'ONUPDATE':
325
328
  case 'ONDELETE':
@@ -328,6 +331,10 @@ function generateGraphQLDocument(modelIntrospection, modelName, modelOperation,
328
331
  });
329
332
  graphQLOperationType !== null && graphQLOperationType !== void 0 ? graphQLOperationType : (graphQLOperationType = 'subscription');
330
333
  graphQLSelectionSet !== null && graphQLSelectionSet !== void 0 ? graphQLSelectionSet : (graphQLSelectionSet = selectionSetFields);
334
+ break;
335
+ case 'OBSERVE_QUERY':
336
+ default:
337
+ throw new Error('Internal error: Attempted to generate graphql document for observeQuery. Please report this error.');
331
338
  }
332
339
  var graphQLDocument = "".concat(graphQLOperationType).concat(graphQLArguments
333
340
  ? "(".concat(Object.entries(graphQLArguments).map(function (_a) {
@@ -376,6 +383,13 @@ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospecti
376
383
  }
377
384
  break;
378
385
  case 'LIST':
386
+ if (arg === null || arg === void 0 ? void 0 : arg.filter) {
387
+ variables.filter = arg.filter;
388
+ }
389
+ if (arg === null || arg === void 0 ? void 0 : arg.nextToken) {
390
+ variables.nextToken = arg.nextToken;
391
+ }
392
+ break;
379
393
  case 'ONCREATE':
380
394
  case 'ONUPDATE':
381
395
  case 'ONDELETE':
@@ -383,6 +397,9 @@ function buildGraphQLVariables(modelDefinition, operation, arg, modelIntrospecti
383
397
  variables = { filter: arg.filter };
384
398
  }
385
399
  break;
400
+ case 'OBSERVE_QUERY':
401
+ throw new Error('Internal error: Attempted to build variables for observeQuery. Please report this error.');
402
+ break;
386
403
  default:
387
404
  var exhaustiveCheck = operation;
388
405
  throw new Error("Unhandled operation case: ".concat(exhaustiveCheck));
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateModelsProperty = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var APIClient_1 = require("./APIClient");
6
+ var utils_1 = require("../utils");
6
7
  var rxjs_1 = require("rxjs");
7
8
  function generateModelsProperty(client, params) {
8
9
  var e_1, _a;
@@ -22,7 +23,7 @@ function generateModelsProperty(client, params) {
22
23
  var operation = key;
23
24
  if (operation === 'LIST') {
24
25
  models[name_1][operationPrefix] = function (args) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
25
- var query, variables, _a, data, nextToken, extensions, _b, key_1, flattenedResult, initialized, error_1;
26
+ var query, variables, _a, data, extensions, _b, key_1, flattenedResult, initialized, error_1;
26
27
  return tslib_1.__generator(this, function (_c) {
27
28
  switch (_c.label) {
28
29
  case 0:
@@ -36,7 +37,7 @@ function generateModelsProperty(client, params) {
36
37
  variables: variables,
37
38
  })];
38
39
  case 2:
39
- _a = (_c.sent()), data = _a.data, nextToken = _a.nextToken, extensions = _a.extensions;
40
+ _a = (_c.sent()), data = _a.data, extensions = _a.extensions;
40
41
  // flatten response
41
42
  if (data !== undefined) {
42
43
  _b = tslib_1.__read(Object.keys(data), 1), key_1 = _b[0];
@@ -46,7 +47,7 @@ function generateModelsProperty(client, params) {
46
47
  if (args === null || args === void 0 ? void 0 : args.selectionSet) {
47
48
  return [2 /*return*/, {
48
49
  data: flattenedResult,
49
- nextToken: nextToken,
50
+ nextToken: data[key_1].nextToken,
50
51
  extensions: extensions,
51
52
  }];
52
53
  }
@@ -54,14 +55,14 @@ function generateModelsProperty(client, params) {
54
55
  initialized = (0, APIClient_1.initializeModel)(client, name_1, flattenedResult, modelIntrospection);
55
56
  return [2 /*return*/, {
56
57
  data: initialized,
57
- nextToken: nextToken,
58
+ nextToken: data[key_1].nextToken,
58
59
  extensions: extensions,
59
60
  }];
60
61
  }
61
62
  }
62
63
  return [2 /*return*/, {
63
64
  data: data[key_1],
64
- nextToken: nextToken,
65
+ nextToken: data[key_1].nextToken,
65
66
  extensions: extensions,
66
67
  }];
67
68
  }
@@ -96,6 +97,163 @@ function generateModelsProperty(client, params) {
96
97
  }));
97
98
  };
98
99
  }
100
+ else if (operation === 'OBSERVE_QUERY') {
101
+ models[name_1][operationPrefix] = function (arg, options) {
102
+ return new rxjs_1.Observable(function (subscriber) {
103
+ // what we'll be sending to our subscribers
104
+ var items = [];
105
+ // To enqueue subscription messages while we collect our initial
106
+ // result set.
107
+ var messageQueue = [];
108
+ // operation to take when message(s) arrive.
109
+ // this operation will be swapped out once initial "sync" is complete
110
+ // to immediately ingest messsages.
111
+ var receiveMessages = function () {
112
+ var messages = [];
113
+ for (var _i = 0; _i < arguments.length; _i++) {
114
+ messages[_i] = arguments[_i];
115
+ }
116
+ return messageQueue.push.apply(messageQueue, tslib_1.__spreadArray([], tslib_1.__read(messages), false));
117
+ };
118
+ // start subscriptions
119
+ var onCreateSub = models[name_1]
120
+ .onCreate(arg, options)
121
+ .subscribe({
122
+ next: function (item) {
123
+ receiveMessages({ item: item, type: 'create' });
124
+ },
125
+ error: function (error) {
126
+ subscriber.error({ type: 'onCreate', error: error });
127
+ },
128
+ });
129
+ var onUpdateSub = models[name_1]
130
+ .onUpdate(arg, options)
131
+ .subscribe({
132
+ next: function (item) {
133
+ receiveMessages({ item: item, type: 'update' });
134
+ },
135
+ error: function (error) {
136
+ subscriber.error({ type: 'onUpdate', error: error });
137
+ },
138
+ });
139
+ var onDeleteSub = models[name_1]
140
+ .onDelete(arg, options)
141
+ .subscribe({
142
+ next: function (item) {
143
+ receiveMessages({ item: item, type: 'delete' });
144
+ },
145
+ error: function (error) {
146
+ subscriber.error({ type: 'onDelete', error: error });
147
+ },
148
+ });
149
+ // consumes a list of messages and sends a snapshot
150
+ function ingestMessages(messages) {
151
+ var e_2, _a;
152
+ try {
153
+ for (var messages_1 = tslib_1.__values(messages), messages_1_1 = messages_1.next(); !messages_1_1.done; messages_1_1 = messages_1.next()) {
154
+ var message = messages_1_1.value;
155
+ var idx = (0, utils_1.findIndexByFields)(message.item, items, pkFields);
156
+ switch (message.type) {
157
+ case 'create':
158
+ if (idx < 0)
159
+ items.push(message.item);
160
+ break;
161
+ case 'update':
162
+ if (idx >= 0)
163
+ items[idx] = message.item;
164
+ break;
165
+ case 'delete':
166
+ if (idx >= 0)
167
+ items.splice(idx, 1);
168
+ break;
169
+ default:
170
+ console.error('Unrecognized message in observeQuery.', message);
171
+ }
172
+ }
173
+ }
174
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
175
+ finally {
176
+ try {
177
+ if (messages_1_1 && !messages_1_1.done && (_a = messages_1.return)) _a.call(messages_1);
178
+ }
179
+ finally { if (e_2) throw e_2.error; }
180
+ }
181
+ subscriber.next({
182
+ items: items,
183
+ isSynced: true,
184
+ });
185
+ }
186
+ var pkFields = (0, utils_1.resolvePKFields)(model);
187
+ // initial results
188
+ (function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
189
+ var firstPage, nextToken, _a, page, errors, _nextToken, isSynced, errors_1, errors_1_1, error;
190
+ var e_3, _b;
191
+ return tslib_1.__generator(this, function (_c) {
192
+ switch (_c.label) {
193
+ case 0:
194
+ firstPage = true;
195
+ nextToken = null;
196
+ _c.label = 1;
197
+ case 1:
198
+ if (!(!subscriber.closed && (firstPage || nextToken))) return [3 /*break*/, 3];
199
+ firstPage = false;
200
+ return [4 /*yield*/, models[name_1].list(tslib_1.__assign(tslib_1.__assign({}, arg), { nextToken: nextToken }), options)];
201
+ case 2:
202
+ _a = _c.sent(), page = _a.data, errors = _a.errors, _nextToken = _a.nextToken;
203
+ nextToken = _nextToken;
204
+ items.push.apply(items, tslib_1.__spreadArray([], tslib_1.__read(page), false));
205
+ isSynced = messageQueue.length === 0 &&
206
+ (nextToken === null || nextToken === undefined);
207
+ subscriber.next({
208
+ items: items,
209
+ isSynced: isSynced,
210
+ });
211
+ if (Array.isArray(errors)) {
212
+ try {
213
+ 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()) {
214
+ error = errors_1_1.value;
215
+ subscriber.error(error);
216
+ }
217
+ }
218
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
219
+ finally {
220
+ try {
221
+ if (errors_1_1 && !errors_1_1.done && (_b = errors_1.return)) _b.call(errors_1);
222
+ }
223
+ finally { if (e_3) throw e_3.error; }
224
+ }
225
+ }
226
+ return [3 /*break*/, 1];
227
+ case 3:
228
+ // play through the queue
229
+ if (messageQueue.length > 0) {
230
+ ingestMessages(messageQueue);
231
+ }
232
+ // switch the queue to write directly to the items collection
233
+ receiveMessages = function () {
234
+ var messages = [];
235
+ for (var _i = 0; _i < arguments.length; _i++) {
236
+ messages[_i] = arguments[_i];
237
+ }
238
+ ingestMessages(messages);
239
+ return items.length;
240
+ };
241
+ return [2 /*return*/];
242
+ }
243
+ });
244
+ }); })();
245
+ // when subscriber unsubscribes, tear down internal subs
246
+ return function () {
247
+ // 1. tear down internal subs
248
+ onCreateSub.unsubscribe();
249
+ onUpdateSub.unsubscribe();
250
+ onDeleteSub.unsubscribe();
251
+ // 2. there is no need to explicitly stop paging. instead, we
252
+ // just check `subscriber.closed` above before fetching each page.
253
+ };
254
+ });
255
+ };
256
+ }
99
257
  else {
100
258
  models[name_1][operationPrefix] = function (arg, options) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
101
259
  var query, variables, _a, data, extensions, _b, key_2, flattenedResult, _c, initialized, error_2;