@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.
- package/dist/aws-amplify-datastore.js +2799 -1459
- package/dist/aws-amplify-datastore.js.map +1 -1
- package/dist/aws-amplify-datastore.min.js +10 -10
- package/dist/aws-amplify-datastore.min.js.map +1 -1
- package/lib/authModeStrategies/multiAuthStrategy.js +11 -0
- package/lib/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib/datastore/datastore.js +524 -323
- package/lib/datastore/datastore.js.map +1 -1
- package/lib/storage/adapter/IndexedDBAdapter.js +76 -25
- package/lib/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib/storage/storage.js +2 -2
- package/lib/storage/storage.js.map +1 -1
- package/lib/sync/datastoreConnectivity.js +45 -0
- package/lib/sync/datastoreConnectivity.js.map +1 -1
- package/lib/sync/index.js +518 -395
- package/lib/sync/index.js.map +1 -1
- package/lib/sync/merger.js +6 -0
- package/lib/sync/merger.js.map +1 -1
- package/lib/sync/outbox.js +66 -62
- package/lib/sync/outbox.js.map +1 -1
- package/lib/sync/processors/mutation.js +207 -165
- package/lib/sync/processors/mutation.js.map +1 -1
- package/lib/sync/processors/subscription.js +210 -175
- package/lib/sync/processors/subscription.js.map +1 -1
- package/lib/sync/processors/sync.js +95 -72
- package/lib/sync/processors/sync.js.map +1 -1
- package/lib/sync/utils.js +1 -3
- package/lib/sync/utils.js.map +1 -1
- package/lib/util.js +89 -0
- package/lib/util.js.map +1 -1
- package/lib-esm/authModeStrategies/multiAuthStrategy.d.ts +11 -0
- package/lib-esm/authModeStrategies/multiAuthStrategy.js +11 -0
- package/lib-esm/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/lib-esm/datastore/datastore.d.ts +95 -2
- package/lib-esm/datastore/datastore.js +524 -323
- package/lib-esm/datastore/datastore.js.map +1 -1
- package/lib-esm/storage/adapter/IndexedDBAdapter.d.ts +21 -0
- package/lib-esm/storage/adapter/IndexedDBAdapter.js +77 -26
- package/lib-esm/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/lib-esm/storage/storage.js +2 -2
- package/lib-esm/storage/storage.js.map +1 -1
- package/lib-esm/sync/datastoreConnectivity.d.ts +1 -0
- package/lib-esm/sync/datastoreConnectivity.js +45 -0
- package/lib-esm/sync/datastoreConnectivity.js.map +1 -1
- package/lib-esm/sync/index.d.ts +9 -1
- package/lib-esm/sync/index.js +519 -396
- package/lib-esm/sync/index.js.map +1 -1
- package/lib-esm/sync/merger.d.ts +6 -0
- package/lib-esm/sync/merger.js +6 -0
- package/lib-esm/sync/merger.js.map +1 -1
- package/lib-esm/sync/outbox.js +66 -62
- package/lib-esm/sync/outbox.js.map +1 -1
- package/lib-esm/sync/processors/mutation.d.ts +2 -0
- package/lib-esm/sync/processors/mutation.js +208 -166
- package/lib-esm/sync/processors/mutation.js.map +1 -1
- package/lib-esm/sync/processors/subscription.d.ts +2 -0
- package/lib-esm/sync/processors/subscription.js +211 -176
- package/lib-esm/sync/processors/subscription.js.map +1 -1
- package/lib-esm/sync/processors/sync.d.ts +2 -0
- package/lib-esm/sync/processors/sync.js +96 -73
- package/lib-esm/sync/processors/sync.js.map +1 -1
- package/lib-esm/sync/utils.js +1 -3
- package/lib-esm/sync/utils.js.map +1 -1
- package/lib-esm/util.d.ts +11 -0
- package/lib-esm/util.js +89 -0
- package/lib-esm/util.js.map +1 -1
- package/package.json +7 -7
- package/src/authModeStrategies/multiAuthStrategy.ts +11 -0
- package/src/datastore/datastore.ts +572 -366
- package/src/storage/adapter/IndexedDBAdapter.ts +50 -9
- package/src/storage/storage.ts +2 -2
- package/src/sync/datastoreConnectivity.ts +6 -0
- package/src/sync/index.ts +492 -400
- package/src/sync/merger.ts +6 -0
- package/src/sync/outbox.ts +1 -1
- package/src/sync/processors/mutation.ts +139 -104
- package/src/sync/processors/subscription.ts +287 -250
- package/src/sync/processors/sync.ts +88 -60
- package/src/sync/utils.ts +1 -3
- package/src/util.ts +92 -2
- package/lib/authModeStrategies/defaultAuthStrategy.d.ts +0 -2
- package/lib/authModeStrategies/index.d.ts +0 -2
- package/lib/authModeStrategies/multiAuthStrategy.d.ts +0 -2
- package/lib/datastore/datastore.d.ts +0 -63
- package/lib/index.d.ts +0 -15
- package/lib/predicates/index.d.ts +0 -16
- package/lib/predicates/sort.d.ts +0 -8
- package/lib/ssr/index.d.ts +0 -3
- package/lib/storage/adapter/AsyncStorageAdapter.d.ts +0 -41
- package/lib/storage/adapter/AsyncStorageDatabase.d.ts +0 -39
- package/lib/storage/adapter/InMemoryStore.d.ts +0 -11
- package/lib/storage/adapter/InMemoryStore.native.d.ts +0 -1
- package/lib/storage/adapter/IndexedDBAdapter.d.ts +0 -38
- package/lib/storage/adapter/getDefaultAdapter/index.d.ts +0 -3
- package/lib/storage/adapter/getDefaultAdapter/index.native.d.ts +0 -3
- package/lib/storage/adapter/index.d.ts +0 -9
- package/lib/storage/storage.d.ts +0 -49
- package/lib/sync/datastoreConnectivity.d.ts +0 -15
- package/lib/sync/datastoreReachability/index.d.ts +0 -3
- package/lib/sync/datastoreReachability/index.native.d.ts +0 -3
- package/lib/sync/index.d.ts +0 -81
- package/lib/sync/merger.d.ts +0 -11
- package/lib/sync/outbox.d.ts +0 -27
- package/lib/sync/processors/errorMaps.d.ts +0 -17
- package/lib/sync/processors/mutation.d.ts +0 -56
- package/lib/sync/processors/subscription.d.ts +0 -31
- package/lib/sync/processors/sync.d.ts +0 -26
- package/lib/sync/utils.d.ts +0 -42
- package/lib/types.d.ts +0 -501
- 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(
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
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
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
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
|
-
|
|
369
|
-
|
|
389
|
+
res();
|
|
390
|
+
});
|
|
370
391
|
|
|
371
|
-
|
|
392
|
+
parentPromises.set(
|
|
393
|
+
`${namespace}_${modelDefinition.name}`,
|
|
394
|
+
promise
|
|
395
|
+
);
|
|
372
396
|
|
|
373
|
-
|
|
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,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
|
-
}
|
package/lib/predicates/sort.d.ts
DELETED
|
@@ -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
|
-
}
|
package/lib/ssr/index.d.ts
DELETED
|
@@ -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,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
|
-
}
|