@aws-amplify/datastore 3.14.0 → 3.14.1-unstable.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/aws-amplify-datastore.js +2799 -1459
  2. package/dist/aws-amplify-datastore.js.map +1 -1
  3. package/dist/aws-amplify-datastore.min.js +10 -10
  4. package/dist/aws-amplify-datastore.min.js.map +1 -1
  5. package/lib/authModeStrategies/multiAuthStrategy.js +11 -0
  6. package/lib/authModeStrategies/multiAuthStrategy.js.map +1 -1
  7. package/lib/datastore/datastore.js +524 -323
  8. package/lib/datastore/datastore.js.map +1 -1
  9. package/lib/storage/adapter/IndexedDBAdapter.js +76 -25
  10. package/lib/storage/adapter/IndexedDBAdapter.js.map +1 -1
  11. package/lib/storage/storage.js +2 -2
  12. package/lib/storage/storage.js.map +1 -1
  13. package/lib/sync/datastoreConnectivity.js +45 -0
  14. package/lib/sync/datastoreConnectivity.js.map +1 -1
  15. package/lib/sync/index.js +518 -395
  16. package/lib/sync/index.js.map +1 -1
  17. package/lib/sync/merger.js +6 -0
  18. package/lib/sync/merger.js.map +1 -1
  19. package/lib/sync/outbox.js +66 -62
  20. package/lib/sync/outbox.js.map +1 -1
  21. package/lib/sync/processors/mutation.js +207 -165
  22. package/lib/sync/processors/mutation.js.map +1 -1
  23. package/lib/sync/processors/subscription.js +210 -175
  24. package/lib/sync/processors/subscription.js.map +1 -1
  25. package/lib/sync/processors/sync.js +95 -72
  26. package/lib/sync/processors/sync.js.map +1 -1
  27. package/lib/sync/utils.js +1 -3
  28. package/lib/sync/utils.js.map +1 -1
  29. package/lib/util.js +89 -0
  30. package/lib/util.js.map +1 -1
  31. package/lib-esm/authModeStrategies/multiAuthStrategy.d.ts +11 -0
  32. package/lib-esm/authModeStrategies/multiAuthStrategy.js +11 -0
  33. package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +1 -1
  34. package/lib-esm/datastore/datastore.d.ts +95 -2
  35. package/lib-esm/datastore/datastore.js +524 -323
  36. package/lib-esm/datastore/datastore.js.map +1 -1
  37. package/lib-esm/storage/adapter/IndexedDBAdapter.d.ts +21 -0
  38. package/lib-esm/storage/adapter/IndexedDBAdapter.js +77 -26
  39. package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +1 -1
  40. package/lib-esm/storage/storage.js +2 -2
  41. package/lib-esm/storage/storage.js.map +1 -1
  42. package/lib-esm/sync/datastoreConnectivity.d.ts +1 -0
  43. package/lib-esm/sync/datastoreConnectivity.js +45 -0
  44. package/lib-esm/sync/datastoreConnectivity.js.map +1 -1
  45. package/lib-esm/sync/index.d.ts +9 -1
  46. package/lib-esm/sync/index.js +519 -396
  47. package/lib-esm/sync/index.js.map +1 -1
  48. package/lib-esm/sync/merger.d.ts +6 -0
  49. package/lib-esm/sync/merger.js +6 -0
  50. package/lib-esm/sync/merger.js.map +1 -1
  51. package/lib-esm/sync/outbox.js +66 -62
  52. package/lib-esm/sync/outbox.js.map +1 -1
  53. package/lib-esm/sync/processors/mutation.d.ts +2 -0
  54. package/lib-esm/sync/processors/mutation.js +208 -166
  55. package/lib-esm/sync/processors/mutation.js.map +1 -1
  56. package/lib-esm/sync/processors/subscription.d.ts +2 -0
  57. package/lib-esm/sync/processors/subscription.js +211 -176
  58. package/lib-esm/sync/processors/subscription.js.map +1 -1
  59. package/lib-esm/sync/processors/sync.d.ts +2 -0
  60. package/lib-esm/sync/processors/sync.js +96 -73
  61. package/lib-esm/sync/processors/sync.js.map +1 -1
  62. package/lib-esm/sync/utils.js +1 -3
  63. package/lib-esm/sync/utils.js.map +1 -1
  64. package/lib-esm/util.d.ts +11 -0
  65. package/lib-esm/util.js +89 -0
  66. package/lib-esm/util.js.map +1 -1
  67. package/package.json +7 -7
  68. package/src/authModeStrategies/multiAuthStrategy.ts +11 -0
  69. package/src/datastore/datastore.ts +572 -366
  70. package/src/storage/adapter/IndexedDBAdapter.ts +50 -9
  71. package/src/storage/storage.ts +2 -2
  72. package/src/sync/datastoreConnectivity.ts +6 -0
  73. package/src/sync/index.ts +492 -400
  74. package/src/sync/merger.ts +6 -0
  75. package/src/sync/outbox.ts +1 -1
  76. package/src/sync/processors/mutation.ts +139 -104
  77. package/src/sync/processors/subscription.ts +287 -250
  78. package/src/sync/processors/sync.ts +88 -60
  79. package/src/sync/utils.ts +1 -3
  80. package/src/util.ts +92 -2
  81. package/lib/authModeStrategies/defaultAuthStrategy.d.ts +0 -2
  82. package/lib/authModeStrategies/index.d.ts +0 -2
  83. package/lib/authModeStrategies/multiAuthStrategy.d.ts +0 -2
  84. package/lib/datastore/datastore.d.ts +0 -63
  85. package/lib/index.d.ts +0 -15
  86. package/lib/predicates/index.d.ts +0 -16
  87. package/lib/predicates/sort.d.ts +0 -8
  88. package/lib/ssr/index.d.ts +0 -3
  89. package/lib/storage/adapter/AsyncStorageAdapter.d.ts +0 -41
  90. package/lib/storage/adapter/AsyncStorageDatabase.d.ts +0 -39
  91. package/lib/storage/adapter/InMemoryStore.d.ts +0 -11
  92. package/lib/storage/adapter/InMemoryStore.native.d.ts +0 -1
  93. package/lib/storage/adapter/IndexedDBAdapter.d.ts +0 -38
  94. package/lib/storage/adapter/getDefaultAdapter/index.d.ts +0 -3
  95. package/lib/storage/adapter/getDefaultAdapter/index.native.d.ts +0 -3
  96. package/lib/storage/adapter/index.d.ts +0 -9
  97. package/lib/storage/storage.d.ts +0 -49
  98. package/lib/sync/datastoreConnectivity.d.ts +0 -15
  99. package/lib/sync/datastoreReachability/index.d.ts +0 -3
  100. package/lib/sync/datastoreReachability/index.native.d.ts +0 -3
  101. package/lib/sync/index.d.ts +0 -81
  102. package/lib/sync/merger.d.ts +0 -11
  103. package/lib/sync/outbox.d.ts +0 -27
  104. package/lib/sync/processors/errorMaps.d.ts +0 -17
  105. package/lib/sync/processors/mutation.d.ts +0 -56
  106. package/lib/sync/processors/subscription.d.ts +0 -31
  107. package/lib/sync/processors/sync.d.ts +0 -26
  108. package/lib/sync/utils.d.ts +0 -42
  109. package/lib/types.d.ts +0 -501
  110. package/lib/util.d.ts +0 -145
@@ -26,6 +26,7 @@ import {
26
26
  ConsoleLogger as Logger,
27
27
  Hub,
28
28
  NonRetryableError,
29
+ BackgroundProcessManager,
29
30
  } from '@aws-amplify/core';
30
31
  import { ModelPredicateCreator } from '../../predicates';
31
32
  import { getSyncErrorType } from './errorMaps';
@@ -40,6 +41,8 @@ const logger = new Logger('DataStore');
40
41
  class SyncProcessor {
41
42
  private readonly typeQuery = new WeakMap<SchemaModel, [string, string]>();
42
43
 
44
+ private runningProcesses = new BackgroundProcessManager();
45
+
43
46
  constructor(
44
47
  private readonly schema: InternalSchema,
45
48
  private readonly syncPredicates: WeakMap<SchemaModel, ModelPredicate<any>>,
@@ -90,7 +93,8 @@ class SyncProcessor {
90
93
  lastSync: number,
91
94
  nextToken: string,
92
95
  limit: number = null,
93
- filter: GraphQLFilter
96
+ filter: GraphQLFilter,
97
+ onTerminate: Promise<void>
94
98
  ): Promise<{ nextToken: string; startedAt: number; items: T[] }> {
95
99
  const [opName, query] = this.typeQuery.get(modelDefinition);
96
100
 
@@ -113,6 +117,12 @@ class SyncProcessor {
113
117
 
114
118
  let authModeAttempts = 0;
115
119
  const authModeRetry = async () => {
120
+ if (!this.runningProcesses.isOpen) {
121
+ throw new Error(
122
+ 'sync.retreievePage termination was requested. Exiting.'
123
+ );
124
+ }
125
+
116
126
  try {
117
127
  logger.debug(
118
128
  `Attempting sync with authMode: ${readAuthModes[authModeAttempts]}`
@@ -123,6 +133,7 @@ class SyncProcessor {
123
133
  opName,
124
134
  modelDefinition,
125
135
  authMode: readAuthModes[authModeAttempts],
136
+ onTerminate,
126
137
  });
127
138
  logger.debug(
128
139
  `Sync successful with authMode: ${readAuthModes[authModeAttempts]}`
@@ -175,12 +186,14 @@ class SyncProcessor {
175
186
  opName,
176
187
  modelDefinition,
177
188
  authMode,
189
+ onTerminate,
178
190
  }: {
179
191
  query: string;
180
192
  variables: { limit: number; lastSync: number; nextToken: string };
181
193
  opName: string;
182
194
  modelDefinition: SchemaModel;
183
195
  authMode: GRAPHQL_AUTH_MODE;
196
+ onTerminate: Promise<void>;
184
197
  }): Promise<
185
198
  GraphQLResult<{
186
199
  [opName: string]: {
@@ -205,6 +218,8 @@ class SyncProcessor {
205
218
  authToken,
206
219
  userAgentSuffix: USER_AGENT_SUFFIX_DATASTORE,
207
220
  });
221
+
222
+ // TODO: onTerminate.then(() => API.cancel(...))
208
223
  } catch (error) {
209
224
  // Catch client-side (GraphQLAuthError) & 401/403 errors here so that we don't continue to retry
210
225
  const clientOrForbiddenErrorMessage =
@@ -288,14 +303,15 @@ class SyncProcessor {
288
303
  throw error;
289
304
  }
290
305
  },
291
- [query, variables]
306
+ [query, variables],
307
+ undefined,
308
+ onTerminate
292
309
  );
293
310
  }
294
311
 
295
312
  start(
296
313
  typesLastSync: Map<SchemaModel, [string, number]>
297
314
  ): Observable<SyncModelPage> {
298
- let processing = true;
299
315
  const { maxRecordsToSync, syncPageSize } = this.amplifyConfig;
300
316
  const parentPromises = new Map<string, Promise<void>>();
301
317
  const observable = new Observable<SyncModelPage>(observer => {
@@ -314,76 +330,88 @@ class SyncProcessor {
314
330
 
315
331
  const allModelsReady = Array.from(sortedTypesLastSyncs.entries())
316
332
  .filter(([{ syncable }]) => syncable)
317
- .map(async ([modelDefinition, [namespace, lastSync]]) => {
318
- let done = false;
319
- let nextToken: string = null;
320
- let startedAt: number = null;
321
- let items: ModelInstanceMetadata[] = null;
322
-
323
- let recordsReceived = 0;
324
- const filter = this.graphqlFilterFromPredicate(modelDefinition);
325
-
326
- const parents = this.schema.namespaces[
327
- namespace
328
- ].modelTopologicalOrdering.get(modelDefinition.name);
329
- const promises = parents.map(parent =>
330
- parentPromises.get(`${namespace}_${parent}`)
331
- );
332
-
333
- const promise = new Promise<void>(async res => {
334
- await Promise.all(promises);
335
-
336
- do {
337
- if (!processing) {
338
- return;
339
- }
340
-
341
- const limit = Math.min(
342
- maxRecordsToSync - recordsReceived,
343
- syncPageSize
333
+ .map(
334
+ ([modelDefinition, [namespace, lastSync]]) =>
335
+ this.runningProcesses.isOpen &&
336
+ this.runningProcesses.add(async onTerminate => {
337
+ let done = false;
338
+ let nextToken: string = null;
339
+ let startedAt: number = null;
340
+ let items: ModelInstanceMetadata[] = null;
341
+
342
+ let recordsReceived = 0;
343
+ const filter = this.graphqlFilterFromPredicate(modelDefinition);
344
+
345
+ const parents = this.schema.namespaces[
346
+ namespace
347
+ ].modelTopologicalOrdering.get(modelDefinition.name);
348
+ const promises = parents.map(parent =>
349
+ parentPromises.get(`${namespace}_${parent}`)
344
350
  );
345
351
 
346
- ({ items, nextToken, startedAt } = await this.retrievePage(
347
- modelDefinition,
348
- lastSync,
349
- nextToken,
350
- limit,
351
- filter
352
- ));
353
-
354
- recordsReceived += items.length;
355
-
356
- done = nextToken === null || recordsReceived >= maxRecordsToSync;
357
-
358
- observer.next({
359
- namespace,
360
- modelDefinition,
361
- items,
362
- done,
363
- startedAt,
364
- isFullSync: !lastSync,
365
- });
366
- } while (!done);
352
+ const promise = new Promise<void>(async res => {
353
+ await Promise.all(promises);
354
+
355
+ do {
356
+ if (!this.runningProcesses.isOpen) {
357
+ return;
358
+ }
359
+
360
+ const limit = Math.min(
361
+ maxRecordsToSync - recordsReceived,
362
+ syncPageSize
363
+ );
364
+
365
+ ({ items, nextToken, startedAt } = await this.retrievePage(
366
+ modelDefinition,
367
+ lastSync,
368
+ nextToken,
369
+ limit,
370
+ filter,
371
+ onTerminate
372
+ ));
373
+
374
+ recordsReceived += items.length;
375
+
376
+ done =
377
+ nextToken === null || recordsReceived >= maxRecordsToSync;
378
+
379
+ observer.next({
380
+ namespace,
381
+ modelDefinition,
382
+ items,
383
+ done,
384
+ startedAt,
385
+ isFullSync: !lastSync,
386
+ });
387
+ } while (!done);
367
388
 
368
- res();
369
- });
389
+ res();
390
+ });
370
391
 
371
- parentPromises.set(`${namespace}_${modelDefinition.name}`, promise);
392
+ parentPromises.set(
393
+ `${namespace}_${modelDefinition.name}`,
394
+ promise
395
+ );
372
396
 
373
- await promise;
374
- });
397
+ await promise;
398
+ }, `adding model ${modelDefinition.name}`)
399
+ );
375
400
 
376
401
  Promise.all(allModelsReady).then(() => {
377
402
  observer.complete();
378
403
  });
379
-
380
- return () => {
381
- processing = false;
382
- };
383
404
  });
384
405
 
385
406
  return observable;
386
407
  }
408
+
409
+ async stop() {
410
+ logger.debug('stopping sync processor');
411
+ await this.runningProcesses.close();
412
+ await this.runningProcesses.open();
413
+ logger.debug('sync processor stopped');
414
+ }
387
415
  }
388
416
 
389
417
  export type SyncModelPage = {
package/src/sync/utils.ts CHANGED
@@ -661,9 +661,7 @@ export function getIdentifierValue(
661
661
  ): string {
662
662
  const pkFieldNames = extractPrimaryKeyFieldNames(modelDefinition);
663
663
 
664
- const idOrPk = pkFieldNames
665
- .map(f => model[f])
666
- .join(IDENTIFIER_KEY_SEPARATOR);
664
+ const idOrPk = pkFieldNames.map(f => model[f]).join(IDENTIFIER_KEY_SEPARATOR);
667
665
 
668
666
  return idOrPk;
669
667
  }
package/src/util.ts CHANGED
@@ -39,13 +39,13 @@ export const ID = 'id';
39
39
  * Used by the Async Storage Adapter to concatenate key values
40
40
  * for a record. For instance, if a model has the following keys:
41
41
  * `customId: ID! @primaryKey(sortKeyFields: ["createdAt"])`,
42
- * we concatenate the `customId` and `createdAt` as:
42
+ * we concatenate the `customId` and `createdAt` as:
43
43
  * `12-234-5#2022-09-28T00:00:00.000Z`
44
44
  */
45
45
  export const DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR = '#';
46
46
 
47
47
  /**
48
- * Used for generating spinal-cased index name from an array of
48
+ * Used for generating spinal-cased index name from an array of
49
49
  * key field names.
50
50
  * E.g. for keys `[id, title]` => 'id-title'
51
51
  */
@@ -417,6 +417,96 @@ export const isPrivateMode = () => {
417
417
  });
418
418
  };
419
419
 
420
+ let safariCompatabilityModeResult;
421
+
422
+ /**
423
+ * Whether the browser's implementation of IndexedDB breaks on array lookups
424
+ * against composite indexes whose keypath contains a single column.
425
+ *
426
+ * E.g., Whether `store.createIndex(indexName, ['id'])` followed by
427
+ * `store.index(indexName).get([1])` will *ever* return records.
428
+ *
429
+ * In all known, modern Safari browsers as of Q4 2022, the query against an index like
430
+ * this will *always* return `undefined`. So, the index needs to be created as a scalar.
431
+ */
432
+ export const isSafariCompatabilityMode: () => Promise<boolean> = async () => {
433
+ try {
434
+ const dbName = uuid();
435
+ const storeName = 'indexedDBFeatureProbeStore';
436
+ const indexName = 'idx';
437
+
438
+ if (indexedDB === null) return false;
439
+
440
+ if (safariCompatabilityModeResult !== undefined) {
441
+ return safariCompatabilityModeResult;
442
+ }
443
+
444
+ const db: IDBDatabase | false = await new Promise(resolve => {
445
+ const dbOpenRequest = indexedDB.open(dbName);
446
+ dbOpenRequest.onerror = () => resolve(false);
447
+
448
+ dbOpenRequest.onsuccess = () => {
449
+ const db = dbOpenRequest.result;
450
+ resolve(db);
451
+ };
452
+
453
+ dbOpenRequest.onupgradeneeded = (event: any) => {
454
+ const db = event?.target?.result;
455
+
456
+ db.onerror = () => resolve(false);
457
+
458
+ const store = db.createObjectStore(storeName, {
459
+ autoIncrement: true,
460
+ });
461
+
462
+ store.createIndex(indexName, ['id']);
463
+ };
464
+ });
465
+
466
+ if (!db) {
467
+ throw new Error('Could not open probe DB');
468
+ }
469
+
470
+ const rwTx = db.transaction(storeName, 'readwrite');
471
+ const rwStore = rwTx.objectStore(storeName);
472
+ rwStore.add({
473
+ id: 1,
474
+ });
475
+
476
+ (rwTx as any).commit();
477
+
478
+ const result = await new Promise(resolve => {
479
+ const tx = db.transaction(storeName, 'readonly');
480
+ const store = tx.objectStore(storeName);
481
+ const index = store.index(indexName);
482
+
483
+ const getRequest = index.get([1]);
484
+
485
+ getRequest.onerror = () => resolve(false);
486
+
487
+ getRequest.onsuccess = (event: any) => {
488
+ resolve(event?.target?.result);
489
+ };
490
+ });
491
+
492
+ if (db && typeof db.close === 'function') {
493
+ await db.close();
494
+ }
495
+
496
+ await indexedDB.deleteDatabase(dbName);
497
+
498
+ if (result === undefined) {
499
+ safariCompatabilityModeResult = true;
500
+ } else {
501
+ safariCompatabilityModeResult = false;
502
+ }
503
+ } catch (error) {
504
+ safariCompatabilityModeResult = false;
505
+ }
506
+
507
+ return safariCompatabilityModeResult;
508
+ };
509
+
420
510
  const randomBytes = (nBytes: number): Buffer => {
421
511
  return Buffer.from(new WordArray().random(nBytes).toString(), 'hex');
422
512
  };
@@ -1,2 +0,0 @@
1
- import { AuthModeStrategy } from '../types';
2
- export declare const defaultAuthStrategy: AuthModeStrategy;
@@ -1,2 +0,0 @@
1
- export { defaultAuthStrategy } from './defaultAuthStrategy';
2
- export { multiAuthStrategy } from './multiAuthStrategy';
@@ -1,2 +0,0 @@
1
- import { AuthModeStrategy, AmplifyContext } from '../types';
2
- export declare const multiAuthStrategy: (amplifyContext: AmplifyContext) => AuthModeStrategy;
@@ -1,63 +0,0 @@
1
- import Observable from 'zen-observable-ts';
2
- import { PredicateAll } from '../predicates';
3
- import { ConflictHandler, DataStoreConfig, NonModelTypeConstructor, ProducerPaginationInput, PersistentModel, PersistentModelConstructor, ProducerModelPredicate, Schema, SubscriptionMessage, DataStoreSnapshot, TypeConstructorMap, ErrorHandler, ObserveQueryOptions, PersistentModelMetaData, IdentifierFieldOrIdentifierObject } from '../types';
4
- export declare let syncClasses: TypeConstructorMap;
5
- declare const initSchema: (userSchema: Schema) => Record<string, PersistentModelConstructor<any> | NonModelTypeConstructor<unknown>>;
6
- export declare type ModelInstanceCreator = typeof modelInstanceCreator;
7
- declare function modelInstanceCreator<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, init: Partial<T>): T;
8
- declare class DataStore {
9
- private Auth;
10
- private API;
11
- private Cache;
12
- private amplifyConfig;
13
- private authModeStrategy;
14
- private conflictHandler;
15
- private errorHandler;
16
- private fullSyncInterval;
17
- private initialized?;
18
- private initReject;
19
- private initResolve;
20
- private maxRecordsToSync;
21
- private storage?;
22
- private sync?;
23
- private syncPageSize;
24
- private syncExpressions;
25
- private syncPredicates;
26
- private sessionId;
27
- private storageAdapter;
28
- private amplifyContext;
29
- getModuleName(): string;
30
- start: () => Promise<void>;
31
- query: {
32
- <T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, identifier: IdentifierFieldOrIdentifierObject<T, PersistentModelMetaData<T>>): Promise<T | undefined>;
33
- <T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, criteria?: ProducerModelPredicate<T> | typeof PredicateAll, paginationProducer?: ProducerPaginationInput<T>): Promise<T[]>;
34
- };
35
- save: <T extends Readonly<Record<string, any>>>(model: T, condition?: ProducerModelPredicate<T>) => Promise<T>;
36
- setConflictHandler: (config: DataStoreConfig) => ConflictHandler;
37
- setErrorHandler: (config: DataStoreConfig) => ErrorHandler;
38
- delete: {
39
- <T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, identifier: IdentifierFieldOrIdentifierObject<T, PersistentModelMetaData<T>>): Promise<T[]>;
40
- <T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, condition: ProducerModelPredicate<T> | typeof PredicateAll): Promise<T[]>;
41
- <T extends PersistentModel>(model: T, condition?: ProducerModelPredicate<T>): Promise<T>;
42
- };
43
- observe: {
44
- (): Observable<SubscriptionMessage<PersistentModel>>;
45
- <T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, identifier: string): Observable<SubscriptionMessage<T>>;
46
- <T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, criteria?: ProducerModelPredicate<T> | typeof PredicateAll): Observable<SubscriptionMessage<T>>;
47
- <T extends PersistentModel>(model: T): Observable<SubscriptionMessage<T>>;
48
- };
49
- observeQuery: {
50
- <T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, criteria?: ProducerModelPredicate<T> | typeof PredicateAll, paginationProducer?: ObserveQueryOptions<T>): Observable<DataStoreSnapshot<T>>;
51
- };
52
- configure: (config?: DataStoreConfig) => void;
53
- clear: () => Promise<void>;
54
- stop: (this: DataStore) => Promise<void>;
55
- private processPagination;
56
- private processSyncExpressions;
57
- private createFromCondition;
58
- private unwrapPromise;
59
- private weakMapFromEntries;
60
- private retrieveSessionId;
61
- }
62
- declare const instance: DataStore;
63
- export { DataStore as DataStoreClass, initSchema, instance as DataStore };
package/lib/index.d.ts DELETED
@@ -1,15 +0,0 @@
1
- export { DataStore, DataStoreClass, initSchema, ModelInstanceCreator, } from './datastore/datastore';
2
- export { Predicates, ModelPredicateCreator, ModelSortPredicateCreator, } from './predicates';
3
- export { Adapter as StorageAdapter } from './storage/adapter';
4
- export declare const utils: {
5
- USER: import("./util").NAMESPACES;
6
- traverseModel: <T extends Readonly<Record<string, any>>>(srcModelName: string, instance: T, namespace: import("./types").SchemaNamespace, modelInstanceCreator: <T_1 extends Readonly<Record<string, any>>>(modelConstructor: import("./types").PersistentModelConstructor<T_1>, init: Partial<T_1>) => T_1, getModelConstructorByModelName: (namsespaceName: string, modelName: string) => import("./types").PersistentModelConstructor<any>) => {
7
- modelName: string;
8
- item: T;
9
- instance: T;
10
- }[];
11
- validatePredicate: <T_2 extends Readonly<Record<string, any>>>(model: T_2, groupType: "and" | "or" | "not", predicatesOrGroups: (import("./types").PredicateObject<T_2> | import("./types").PredicatesGroup<T_2>)[]) => any;
12
- isNonModelConstructor: (obj: any) => obj is import("./types").NonModelTypeConstructor<any>;
13
- isModelConstructor: <T_3 extends Readonly<Record<string, any>>>(obj: any) => obj is import("./types").PersistentModelConstructor<T_3>;
14
- };
15
- export * from './types';
@@ -1,16 +0,0 @@
1
- import { ModelPredicate, PersistentModel, PredicatesGroup, ProducerModelPredicate, SchemaModel } from '../types';
2
- export { ModelSortPredicateCreator } from './sort';
3
- export declare function isPredicatesAll(predicate: any): predicate is typeof PredicateAll;
4
- export declare const PredicateAll: unique symbol;
5
- export declare class Predicates {
6
- static get ALL(): typeof PredicateAll;
7
- }
8
- export declare class ModelPredicateCreator {
9
- private static predicateGroupsMap;
10
- private static createPredicateBuilder;
11
- static isValidPredicate<T extends PersistentModel>(predicate: any): predicate is ModelPredicate<T>;
12
- static getPredicates<T extends PersistentModel>(predicate: ModelPredicate<T>, throwOnInvalid?: boolean): PredicatesGroup<any>;
13
- static createFromExisting<T extends PersistentModel>(modelDefinition: SchemaModel, existing?: ProducerModelPredicate<T>): ModelPredicate<T>;
14
- static createForSingleField<T extends PersistentModel>(modelDefinition: SchemaModel, fieldName: string, value: string): ModelPredicate<T>;
15
- static createForPk<T extends PersistentModel>(modelDefinition: SchemaModel, model: T): ModelPredicate<T>;
16
- }
@@ -1,8 +0,0 @@
1
- import { PersistentModel, SchemaModel, SortPredicate, ProducerSortPredicate, SortPredicatesGroup } from '../types';
2
- export declare class ModelSortPredicateCreator {
3
- private static sortPredicateGroupsMap;
4
- private static createPredicateBuilder;
5
- static isValidPredicate<T extends PersistentModel>(predicate: any): predicate is SortPredicate<T>;
6
- static getPredicates<T extends PersistentModel>(predicate: SortPredicate<T>, throwOnInvalid?: boolean): SortPredicatesGroup<T>;
7
- static createFromExisting<T extends PersistentModel>(modelDefinition: SchemaModel, existing: ProducerSortPredicate<T>): SortPredicate<T>;
8
- }
@@ -1,3 +0,0 @@
1
- import { PersistentModel, PersistentModelConstructor } from '@aws-amplify/datastore';
2
- export declare function deserializeModel<T extends PersistentModel>(Model: PersistentModelConstructor<T>, init: T | T[]): any;
3
- export declare function serializeModel<T extends PersistentModel>(model: T | T[]): JSON;
@@ -1,41 +0,0 @@
1
- import { Adapter } from './index';
2
- import { ModelInstanceCreator } from '../../datastore/datastore';
3
- import { InternalSchema, ModelInstanceMetadata, ModelPredicate, NamespaceResolver, OpType, PaginationInput, PersistentModel, PersistentModelConstructor, QueryOne } from '../../types';
4
- export declare class AsyncStorageAdapter implements Adapter {
5
- private schema;
6
- private namespaceResolver;
7
- private modelInstanceCreator;
8
- private getModelConstructorByModelName;
9
- private db;
10
- private initPromise;
11
- private resolve;
12
- private reject;
13
- private getStorenameForModel;
14
- private getIndexKeyValuesFromModel;
15
- private getIndexKeyValuesPath;
16
- setUp(theSchema: InternalSchema, namespaceResolver: NamespaceResolver, modelInstanceCreator: ModelInstanceCreator, getModelConstructorByModelName: (namsespaceName: string, modelName: string) => PersistentModelConstructor<any>): Promise<void>;
17
- save<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>): Promise<[T, OpType.INSERT | OpType.UPDATE][]>;
18
- private load;
19
- query<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, predicate?: ModelPredicate<T>, pagination?: PaginationInput<T>): Promise<T[]>;
20
- private getByKey;
21
- private getAll;
22
- private keyValueFromPredicate;
23
- private filterOnPredicate;
24
- private inMemoryPagination;
25
- queryOne<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, firstOrLast?: QueryOne): Promise<T | undefined>;
26
- delete<T extends PersistentModel>(modelOrModelConstructor: T | PersistentModelConstructor<T>, condition?: ModelPredicate<T>): Promise<[T[], T[]]>;
27
- private deleteItem;
28
- /**
29
- * Populates the delete Queue with all the items to delete
30
- * @param relations
31
- * @param models
32
- * @param srcModel
33
- * @param nameSpace
34
- * @param deleteQueue
35
- */
36
- private deleteTraverse;
37
- clear(): Promise<void>;
38
- batchSave<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<any>, items: ModelInstanceMetadata[]): Promise<[T, OpType][]>;
39
- }
40
- declare const _default: AsyncStorageAdapter;
41
- export default _default;
@@ -1,39 +0,0 @@
1
- import { ModelInstanceMetadata, OpType, PaginationInput, PersistentModel, QueryOne } from '../../types';
2
- declare class AsyncStorageDatabase {
3
- /**
4
- * Maps storeNames to a map of ulid->id
5
- */
6
- private _collectionInMemoryIndex;
7
- private storage;
8
- /**
9
- * Collection index is map of stores (i.e. sync, metadata, mutation event, and data)
10
- * @param storeName {string} - Name of the store
11
- * @returns Map of ulid->id
12
- */
13
- private getCollectionIndex;
14
- /**
15
- * Return ULID for store if it exists, otherwise create a new one
16
- * @param storeName {string} - Name of the store
17
- * @returns ulid
18
- */
19
- private getMonotonicFactory;
20
- init(): Promise<void>;
21
- save<T extends PersistentModel>(item: T, storeName: string, keys: string[], keyValuesPath: string): Promise<void>;
22
- batchSave<T extends PersistentModel>(storeName: string, items: ModelInstanceMetadata[], keys: string[]): Promise<[T, OpType][]>;
23
- get<T extends PersistentModel>(keyValuePath: string, storeName: string): Promise<T>;
24
- getOne(firstOrLast: QueryOne, storeName: string): Promise<any>;
25
- /**
26
- * This function gets all the records stored in async storage for a particular storeName
27
- * It then loads all the records for that filtered set of keys using multiGet()
28
- */
29
- getAll<T extends PersistentModel>(storeName: string, pagination?: PaginationInput<T>): Promise<T[]>;
30
- delete(key: string, storeName: string): Promise<void>;
31
- /**
32
- * Clear the AsyncStorage of all DataStore entries
33
- */
34
- clear(): Promise<void>;
35
- private getKeyForItem;
36
- private getLegacyKeyForItem;
37
- private getKeyPrefixForStoreItems;
38
- }
39
- export default AsyncStorageDatabase;
@@ -1,11 +0,0 @@
1
- export declare class InMemoryStore {
2
- db: Map<string, string>;
3
- getAllKeys: () => Promise<string[]>;
4
- multiGet: (keys: string[]) => Promise<any[]>;
5
- multiRemove: (keys: string[], callback?: any) => Promise<void>;
6
- multiSet: (entries: string[][], callback?: any) => Promise<void>;
7
- setItem: (key: string, value: string) => Promise<Map<string, string>>;
8
- removeItem: (key: string) => Promise<boolean>;
9
- getItem: (key: string) => Promise<string>;
10
- }
11
- export declare function createInMemoryStore(): InMemoryStore;
@@ -1 +0,0 @@
1
- export declare function createInMemoryStore(): AsyncStorage;
@@ -1,38 +0,0 @@
1
- import { ModelInstanceCreator } from '../../datastore/datastore';
2
- import { InternalSchema, ModelInstanceMetadata, ModelPredicate, NamespaceResolver, OpType, PaginationInput, PersistentModel, PersistentModelConstructor, QueryOne } from '../../types';
3
- import { Adapter } from './index';
4
- declare class IndexedDBAdapter implements Adapter {
5
- private schema;
6
- private namespaceResolver;
7
- private modelInstanceCreator;
8
- private getModelConstructorByModelName;
9
- private db;
10
- private initPromise;
11
- private resolve;
12
- private reject;
13
- private dbName;
14
- private getStorenameForModel;
15
- private getIndexKeyValuesFromModel;
16
- private checkPrivate;
17
- private getNamespaceAndModelFromStorename;
18
- setUp(theSchema: InternalSchema, namespaceResolver: NamespaceResolver, modelInstanceCreator: ModelInstanceCreator, getModelConstructorByModelName: (namsespaceName: string, modelName: string) => PersistentModelConstructor<any>, sessionId?: string): Promise<void>;
19
- private _get;
20
- save<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>): Promise<[T, OpType.INSERT | OpType.UPDATE][]>;
21
- private load;
22
- query<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, predicate?: ModelPredicate<T>, pagination?: PaginationInput<T>): Promise<T[]>;
23
- private getByKey;
24
- private getAll;
25
- private keyValueFromPredicate;
26
- private filterOnPredicate;
27
- private inMemoryPagination;
28
- private enginePagination;
29
- queryOne<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, firstOrLast?: QueryOne): Promise<T | undefined>;
30
- delete<T extends PersistentModel>(modelOrModelConstructor: T | PersistentModelConstructor<T>, condition?: ModelPredicate<T>): Promise<[T[], T[]]>;
31
- private deleteItem;
32
- private deleteTraverse;
33
- clear(): Promise<void>;
34
- batchSave<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<any>, items: ModelInstanceMetadata[]): Promise<[T, OpType][]>;
35
- private createObjectStoreForModel;
36
- }
37
- declare const _default: IndexedDBAdapter;
38
- export default _default;
@@ -1,3 +0,0 @@
1
- import { Adapter } from '..';
2
- declare const getDefaultAdapter: () => Adapter;
3
- export default getDefaultAdapter;
@@ -1,3 +0,0 @@
1
- import { Adapter } from '..';
2
- declare const getDefaultAdapter: () => Adapter;
3
- export default getDefaultAdapter;
@@ -1,9 +0,0 @@
1
- import { ModelInstanceMetadata, ModelPredicate, OpType, PaginationInput, PersistentModel, PersistentModelConstructor, QueryOne, SystemComponent } from '../../types';
2
- export interface Adapter extends SystemComponent {
3
- clear(): Promise<void>;
4
- save<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>): Promise<[T, OpType.INSERT | OpType.UPDATE][]>;
5
- delete: <T extends PersistentModel>(modelOrModelConstructor: T | PersistentModelConstructor<T>, condition?: ModelPredicate<T>) => Promise<[T[], T[]]>;
6
- query<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, predicate?: ModelPredicate<T>, pagination?: PaginationInput<T>): Promise<T[]>;
7
- queryOne<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, firstOrLast: QueryOne): Promise<T | undefined>;
8
- batchSave<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, items: ModelInstanceMetadata[]): Promise<[T, OpType][]>;
9
- }