@aws-amplify/datastore 5.0.32 → 5.0.33-s-auth.30d0cd2.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.
- package/dist/cjs/authModeStrategies/multiAuthStrategy.js +1 -1
- package/dist/cjs/authModeStrategies/multiAuthStrategy.js.map +1 -1
- package/dist/cjs/datastore/datastore.js +46 -41
- package/dist/cjs/datastore/datastore.js.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/predicates/index.js +1 -0
- package/dist/cjs/predicates/index.js.map +1 -1
- package/dist/cjs/predicates/next.js +13 -12
- package/dist/cjs/predicates/next.js.map +1 -1
- package/dist/cjs/predicates/sort.js +2 -2
- package/dist/cjs/predicates/sort.js.map +1 -1
- package/dist/cjs/storage/adapter/AsyncStorageAdapter.js +21 -18
- package/dist/cjs/storage/adapter/AsyncStorageAdapter.js.map +1 -1
- package/dist/cjs/storage/adapter/AsyncStorageDatabase.js +10 -9
- package/dist/cjs/storage/adapter/AsyncStorageDatabase.js.map +1 -1
- package/dist/cjs/storage/adapter/InMemoryStore.js +4 -1
- package/dist/cjs/storage/adapter/InMemoryStore.js.map +1 -1
- package/dist/cjs/storage/adapter/IndexedDBAdapter.js +21 -23
- package/dist/cjs/storage/adapter/IndexedDBAdapter.js.map +1 -1
- package/dist/cjs/storage/adapter/StorageAdapterBase.js +7 -7
- package/dist/cjs/storage/adapter/StorageAdapterBase.js.map +1 -1
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.js +4 -1
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.js.map +1 -1
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js +1 -0
- package/dist/cjs/storage/adapter/getDefaultAdapter/index.native.js.map +1 -1
- package/dist/cjs/storage/relationship.js +1 -0
- package/dist/cjs/storage/relationship.js.map +1 -1
- package/dist/cjs/storage/storage.js +14 -14
- package/dist/cjs/storage/storage.js.map +1 -1
- package/dist/cjs/sync/datastoreConnectivity.js +0 -3
- package/dist/cjs/sync/datastoreConnectivity.js.map +1 -1
- package/dist/cjs/sync/index.js +47 -43
- package/dist/cjs/sync/index.js.map +1 -1
- package/dist/cjs/sync/merger.js +1 -1
- package/dist/cjs/sync/merger.js.map +1 -1
- package/dist/cjs/sync/outbox.js +19 -17
- package/dist/cjs/sync/outbox.js.map +1 -1
- package/dist/cjs/sync/processors/errorMaps.js.map +1 -1
- package/dist/cjs/sync/processors/mutation.js +31 -28
- package/dist/cjs/sync/processors/mutation.js.map +1 -1
- package/dist/cjs/sync/processors/subscription.js +21 -12
- package/dist/cjs/sync/processors/subscription.js.map +1 -1
- package/dist/cjs/sync/processors/sync.js +25 -21
- package/dist/cjs/sync/processors/sync.js.map +1 -1
- package/dist/cjs/sync/utils.js +20 -21
- package/dist/cjs/sync/utils.js.map +1 -1
- package/dist/cjs/types.js +1 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/util.js +46 -25
- package/dist/cjs/util.js.map +1 -1
- package/dist/esm/authModeStrategies/multiAuthStrategy.d.ts +1 -1
- package/dist/esm/authModeStrategies/multiAuthStrategy.mjs +1 -1
- package/dist/esm/authModeStrategies/multiAuthStrategy.mjs.map +1 -1
- package/dist/esm/datastore/datastore.d.ts +4 -6
- package/dist/esm/datastore/datastore.mjs +42 -34
- package/dist/esm/datastore/datastore.mjs.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/predicates/index.mjs +1 -0
- package/dist/esm/predicates/index.mjs.map +1 -1
- package/dist/esm/predicates/next.d.ts +7 -7
- package/dist/esm/predicates/next.mjs +13 -12
- package/dist/esm/predicates/next.mjs.map +1 -1
- package/dist/esm/predicates/sort.d.ts +1 -1
- package/dist/esm/predicates/sort.mjs +2 -2
- package/dist/esm/predicates/sort.mjs.map +1 -1
- package/dist/esm/storage/adapter/AsyncStorageAdapter.d.ts +1 -1
- package/dist/esm/storage/adapter/AsyncStorageAdapter.mjs +21 -18
- package/dist/esm/storage/adapter/AsyncStorageAdapter.mjs.map +1 -1
- package/dist/esm/storage/adapter/AsyncStorageDatabase.mjs +10 -9
- package/dist/esm/storage/adapter/AsyncStorageDatabase.mjs.map +1 -1
- package/dist/esm/storage/adapter/InMemoryStore.mjs +4 -1
- package/dist/esm/storage/adapter/InMemoryStore.mjs.map +1 -1
- package/dist/esm/storage/adapter/IndexedDBAdapter.mjs +21 -23
- package/dist/esm/storage/adapter/IndexedDBAdapter.mjs.map +1 -1
- package/dist/esm/storage/adapter/StorageAdapterBase.d.ts +2 -2
- package/dist/esm/storage/adapter/StorageAdapterBase.mjs +7 -7
- package/dist/esm/storage/adapter/StorageAdapterBase.mjs.map +1 -1
- package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs +3 -1
- package/dist/esm/storage/adapter/getDefaultAdapter/index.mjs.map +1 -1
- package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs +1 -0
- package/dist/esm/storage/adapter/getDefaultAdapter/index.native.mjs.map +1 -1
- package/dist/esm/storage/adapter/index.d.ts +1 -1
- package/dist/esm/storage/relationship.mjs +1 -0
- package/dist/esm/storage/relationship.mjs.map +1 -1
- package/dist/esm/storage/storage.d.ts +11 -11
- package/dist/esm/storage/storage.mjs +10 -10
- package/dist/esm/storage/storage.mjs.map +1 -1
- package/dist/esm/sync/datastoreConnectivity.d.ts +2 -2
- package/dist/esm/sync/datastoreConnectivity.mjs +0 -3
- package/dist/esm/sync/datastoreConnectivity.mjs.map +1 -1
- package/dist/esm/sync/index.d.ts +3 -3
- package/dist/esm/sync/index.mjs +47 -43
- package/dist/esm/sync/index.mjs.map +1 -1
- package/dist/esm/sync/merger.d.ts +1 -1
- package/dist/esm/sync/merger.mjs +1 -1
- package/dist/esm/sync/merger.mjs.map +1 -1
- package/dist/esm/sync/outbox.d.ts +4 -4
- package/dist/esm/sync/outbox.mjs +19 -17
- package/dist/esm/sync/outbox.mjs.map +1 -1
- package/dist/esm/sync/processors/errorMaps.mjs.map +1 -1
- package/dist/esm/sync/processors/mutation.d.ts +5 -5
- package/dist/esm/sync/processors/mutation.mjs +31 -28
- package/dist/esm/sync/processors/mutation.mjs.map +1 -1
- package/dist/esm/sync/processors/subscription.d.ts +1 -1
- package/dist/esm/sync/processors/subscription.mjs +21 -12
- package/dist/esm/sync/processors/subscription.mjs.map +1 -1
- package/dist/esm/sync/processors/sync.d.ts +3 -3
- package/dist/esm/sync/processors/sync.mjs +13 -9
- package/dist/esm/sync/processors/sync.mjs.map +1 -1
- package/dist/esm/sync/utils.d.ts +11 -13
- package/dist/esm/sync/utils.mjs +20 -21
- package/dist/esm/sync/utils.mjs.map +1 -1
- package/dist/esm/types.d.ts +121 -131
- package/dist/esm/types.mjs +3 -2
- package/dist/esm/types.mjs.map +1 -1
- package/dist/esm/util.d.ts +5 -5
- package/dist/esm/util.mjs +46 -25
- package/dist/esm/util.mjs.map +1 -1
- package/package.json +74 -73
- package/src/authModeStrategies/multiAuthStrategy.ts +8 -4
- package/src/datastore/datastore.ts +145 -123
- package/src/index.ts +10 -8
- package/src/predicates/index.ts +10 -2
- package/src/predicates/next.ts +39 -28
- package/src/predicates/sort.ts +23 -26
- package/src/storage/adapter/AsyncStorageAdapter.ts +43 -25
- package/src/storage/adapter/AsyncStorageDatabase.ts +18 -10
- package/src/storage/adapter/InMemoryStore.ts +5 -1
- package/src/storage/adapter/IndexedDBAdapter.ts +50 -37
- package/src/storage/adapter/StorageAdapterBase.ts +24 -18
- package/src/storage/adapter/getDefaultAdapter/index.native.ts +1 -0
- package/src/storage/adapter/getDefaultAdapter/index.ts +4 -1
- package/src/storage/adapter/index.ts +2 -2
- package/src/storage/relationship.ts +5 -1
- package/src/storage/storage.ts +38 -30
- package/src/sync/datastoreConnectivity.ts +4 -6
- package/src/sync/index.ts +228 -230
- package/src/sync/merger.ts +4 -3
- package/src/sync/outbox.ts +26 -24
- package/src/sync/processors/errorMaps.ts +5 -0
- package/src/sync/processors/mutation.ts +80 -72
- package/src/sync/processors/subscription.ts +69 -53
- package/src/sync/processors/sync.ts +49 -37
- package/src/sync/utils.ts +60 -41
- package/src/types.ts +165 -165
- package/src/util.ts +89 -53
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
import AsyncStorageDatabase from './AsyncStorageDatabase.mjs';
|
|
2
1
|
import { OpType, QueryOne } from '../../types.mjs';
|
|
3
2
|
import { getIndexKeys, traverseModel, keysEqual, DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR, validatePredicate, inMemoryPagination, getStorename } from '../../util.mjs';
|
|
3
|
+
import AsyncStorageDatabase from './AsyncStorageDatabase.mjs';
|
|
4
4
|
import { StorageAdapterBase } from './StorageAdapterBase.mjs';
|
|
5
5
|
|
|
6
6
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
7
|
// SPDX-License-Identifier: Apache-2.0
|
|
8
8
|
class AsyncStorageAdapter extends StorageAdapterBase {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
async preSetUpChecks() {
|
|
10
|
+
// no-ops for AsyncStorageAdapter
|
|
11
|
+
}
|
|
12
|
+
async preOpCheck() {
|
|
13
|
+
// no-ops for AsyncStorageAdapter
|
|
14
|
+
}
|
|
12
15
|
/**
|
|
13
16
|
* Open AsyncStorage database
|
|
14
17
|
* Create new DB if one doesn't exist
|
|
@@ -40,17 +43,17 @@ class AsyncStorageAdapter extends StorageAdapterBase {
|
|
|
40
43
|
const model = this.modelInstanceCreator(modelConstructor, item);
|
|
41
44
|
const connectedModels = traverseModel(modelName, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
42
45
|
const keyValuesPath = this.getIndexKeyValuesPath(model);
|
|
43
|
-
const { instance } = connectedModels.find(({ instance }) => {
|
|
44
|
-
const instanceKeyValuesPath = this.getIndexKeyValuesPath(
|
|
46
|
+
const { instance } = connectedModels.find(({ instance: connectedModelInstance }) => {
|
|
47
|
+
const instanceKeyValuesPath = this.getIndexKeyValuesPath(connectedModelInstance);
|
|
45
48
|
return keysEqual([instanceKeyValuesPath], [keyValuesPath]);
|
|
46
49
|
});
|
|
47
50
|
batch.push(instance);
|
|
48
51
|
}
|
|
49
|
-
return
|
|
52
|
+
return this.db.batchSave(storeName, batch, keys);
|
|
50
53
|
}
|
|
51
54
|
async _get(storeName, keyArr) {
|
|
52
55
|
const itemKeyValuesPath = keyArr.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);
|
|
53
|
-
return await this.db.get(itemKeyValuesPath, storeName);
|
|
56
|
+
return (await this.db.get(itemKeyValuesPath, storeName));
|
|
54
57
|
}
|
|
55
58
|
async save(model, condition) {
|
|
56
59
|
const { storeName, connectionStoreNames, modelKeyValues } = this.saveMetadata(model);
|
|
@@ -58,13 +61,13 @@ class AsyncStorageAdapter extends StorageAdapterBase {
|
|
|
58
61
|
this.validateSaveCondition(condition, fromDB);
|
|
59
62
|
const result = [];
|
|
60
63
|
for await (const resItem of connectionStoreNames) {
|
|
61
|
-
const { storeName, item, instance, keys } = resItem;
|
|
64
|
+
const { storeName: storeNameForRestItem, item, instance, keys } = resItem;
|
|
62
65
|
const itemKeyValues = keys.map(key => item[key]);
|
|
63
|
-
const
|
|
64
|
-
const opType =
|
|
66
|
+
const fromDBForRestItem = (await this._get(storeNameForRestItem, itemKeyValues));
|
|
67
|
+
const opType = fromDBForRestItem ? OpType.UPDATE : OpType.INSERT;
|
|
65
68
|
if (keysEqual(itemKeyValues, modelKeyValues) ||
|
|
66
69
|
opType === OpType.INSERT) {
|
|
67
|
-
await this.db.save(item,
|
|
70
|
+
await this.db.save(item, storeNameForRestItem, keys, itemKeyValues.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR));
|
|
68
71
|
result.push([instance, opType]);
|
|
69
72
|
}
|
|
70
73
|
}
|
|
@@ -88,17 +91,17 @@ class AsyncStorageAdapter extends StorageAdapterBase {
|
|
|
88
91
|
}
|
|
89
92
|
return this.getAll(storeName);
|
|
90
93
|
})());
|
|
91
|
-
return
|
|
94
|
+
return this.load(namespaceName, modelConstructor.name, records);
|
|
92
95
|
}
|
|
93
96
|
async getByKey(storeName, keyValuePath) {
|
|
94
|
-
return await this.db.get(keyValuePath, storeName);
|
|
97
|
+
return (await this.db.get(keyValuePath, storeName));
|
|
95
98
|
}
|
|
96
99
|
async getAll(storeName) {
|
|
97
|
-
return
|
|
100
|
+
return this.db.getAll(storeName);
|
|
98
101
|
}
|
|
99
102
|
async filterOnPredicate(storeName, predicates) {
|
|
100
103
|
const { predicates: predicateObjs, type } = predicates;
|
|
101
|
-
const all = await this.getAll(storeName);
|
|
104
|
+
const all = (await this.getAll(storeName));
|
|
102
105
|
const filtered = predicateObjs
|
|
103
106
|
? all.filter(m => validatePredicate(m, type, predicateObjs))
|
|
104
107
|
: all;
|
|
@@ -109,7 +112,7 @@ class AsyncStorageAdapter extends StorageAdapterBase {
|
|
|
109
112
|
}
|
|
110
113
|
async queryOne(modelConstructor, firstOrLast = QueryOne.FIRST) {
|
|
111
114
|
const storeName = this.getStorenameForModel(modelConstructor);
|
|
112
|
-
const result = await this.db.getOne(firstOrLast, storeName);
|
|
115
|
+
const result = (await this.db.getOne(firstOrLast, storeName));
|
|
113
116
|
return result && this.modelInstanceCreator(modelConstructor, result);
|
|
114
117
|
}
|
|
115
118
|
async deleteItem(deleteQueue) {
|
|
@@ -125,7 +128,7 @@ class AsyncStorageAdapter extends StorageAdapterBase {
|
|
|
125
128
|
}
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
|
-
|
|
131
|
+
// #region platform-specific helper methods
|
|
129
132
|
/**
|
|
130
133
|
* Retrieves concatenated primary key values from a model
|
|
131
134
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncStorageAdapter.mjs","sources":["../../../../src/storage/adapter/AsyncStorageAdapter.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport AsyncStorageDatabase from './AsyncStorageDatabase';\nimport { OpType, QueryOne, } from '../../types';\nimport { DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR, traverseModel, validatePredicate, inMemoryPagination, keysEqual, getStorename, getIndexKeys, } from '../../util';\nimport { StorageAdapterBase } from './StorageAdapterBase';\nexport class AsyncStorageAdapter extends StorageAdapterBase {\n // no-ops for this adapter\n async preSetUpChecks() { }\n async preOpCheck() { }\n /**\n * Open AsyncStorage database\n * Create new DB if one doesn't exist\n *\n * Called by `StorageAdapterBase.setUp()`\n *\n * @returns AsyncStorageDatabase instance\n */\n async initDb() {\n const db = new AsyncStorageDatabase();\n await db.init();\n return db;\n }\n async clear() {\n await this.db.clear();\n this.db = undefined;\n this.initPromise = undefined;\n }\n async batchSave(modelConstructor, items) {\n if (items.length === 0) {\n return [];\n }\n const modelName = modelConstructor.name;\n const namespaceName = this.namespaceResolver(modelConstructor);\n const storeName = getStorename(namespaceName, modelName);\n const keys = getIndexKeys(this.schema.namespaces[namespaceName], modelName);\n const batch = [];\n for (const item of items) {\n const model = this.modelInstanceCreator(modelConstructor, item);\n const connectedModels = traverseModel(modelName, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);\n const keyValuesPath = this.getIndexKeyValuesPath(model);\n const { instance } = connectedModels.find(({ instance }) => {\n const instanceKeyValuesPath = this.getIndexKeyValuesPath(instance);\n return keysEqual([instanceKeyValuesPath], [keyValuesPath]);\n });\n batch.push(instance);\n }\n return await this.db.batchSave(storeName, batch, keys);\n }\n async _get(storeName, keyArr) {\n const itemKeyValuesPath = keyArr.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n return await this.db.get(itemKeyValuesPath, storeName);\n }\n async save(model, condition) {\n const { storeName, connectionStoreNames, modelKeyValues } = this.saveMetadata(model);\n const fromDB = await this._get(storeName, modelKeyValues);\n this.validateSaveCondition(condition, fromDB);\n const result = [];\n for await (const resItem of connectionStoreNames) {\n const { storeName, item, instance, keys } = resItem;\n const itemKeyValues = keys.map(key => item[key]);\n const fromDB = await this._get(storeName, itemKeyValues);\n const opType = fromDB ? OpType.UPDATE : OpType.INSERT;\n if (keysEqual(itemKeyValues, modelKeyValues) ||\n opType === OpType.INSERT) {\n await this.db.save(item, storeName, keys, itemKeyValues.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR));\n result.push([instance, opType]);\n }\n }\n return result;\n }\n async query(modelConstructor, predicate, pagination) {\n const { storeName, namespaceName, queryByKey, predicates, hasSort, hasPagination, } = this.queryMetadata(modelConstructor, predicate, pagination);\n const records = (await (async () => {\n if (queryByKey) {\n const keyValues = queryByKey.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n const record = await this.getByKey(storeName, keyValues);\n return record ? [record] : [];\n }\n if (predicates) {\n const filtered = await this.filterOnPredicate(storeName, predicates);\n return this.inMemoryPagination(filtered, pagination);\n }\n if (hasSort || hasPagination) {\n const all = await this.getAll(storeName);\n return this.inMemoryPagination(all, pagination);\n }\n return this.getAll(storeName);\n })());\n return await this.load(namespaceName, modelConstructor.name, records);\n }\n async getByKey(storeName, keyValuePath) {\n return await this.db.get(keyValuePath, storeName);\n }\n async getAll(storeName) {\n return await this.db.getAll(storeName);\n }\n async filterOnPredicate(storeName, predicates) {\n const { predicates: predicateObjs, type } = predicates;\n const all = await this.getAll(storeName);\n const filtered = predicateObjs\n ? all.filter(m => validatePredicate(m, type, predicateObjs))\n : all;\n return filtered;\n }\n inMemoryPagination(records, pagination) {\n return inMemoryPagination(records, pagination);\n }\n async queryOne(modelConstructor, firstOrLast = QueryOne.FIRST) {\n const storeName = this.getStorenameForModel(modelConstructor);\n const result = await this.db.getOne(firstOrLast, storeName);\n return result && this.modelInstanceCreator(modelConstructor, result);\n }\n async deleteItem(deleteQueue) {\n for await (const deleteItem of deleteQueue) {\n const { storeName, items } = deleteItem;\n for await (const item of items) {\n if (item) {\n if (typeof item === 'object') {\n const keyValuesPath = this.getIndexKeyValuesPath(item);\n await this.db.delete(keyValuesPath, storeName);\n }\n }\n }\n }\n }\n //#region platform-specific helper methods\n /**\n * Retrieves concatenated primary key values from a model\n *\n * @param model\n * @returns\n */\n getIndexKeyValuesPath(model) {\n return this.getIndexKeyValuesFromModel(model).join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n }\n}\nexport default new AsyncStorageAdapter();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AsyncStorageAdapter.mjs","sources":["../../../../src/storage/adapter/AsyncStorageAdapter.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { OpType, QueryOne, } from '../../types';\nimport { DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR, getIndexKeys, getStorename, inMemoryPagination, keysEqual, traverseModel, validatePredicate, } from '../../util';\nimport AsyncStorageDatabase from './AsyncStorageDatabase';\nimport { StorageAdapterBase } from './StorageAdapterBase';\nexport class AsyncStorageAdapter extends StorageAdapterBase {\n async preSetUpChecks() {\n // no-ops for AsyncStorageAdapter\n }\n async preOpCheck() {\n // no-ops for AsyncStorageAdapter\n }\n /**\n * Open AsyncStorage database\n * Create new DB if one doesn't exist\n *\n * Called by `StorageAdapterBase.setUp()`\n *\n * @returns AsyncStorageDatabase instance\n */\n async initDb() {\n const db = new AsyncStorageDatabase();\n await db.init();\n return db;\n }\n async clear() {\n await this.db.clear();\n this.db = undefined;\n this.initPromise = undefined;\n }\n async batchSave(modelConstructor, items) {\n if (items.length === 0) {\n return [];\n }\n const modelName = modelConstructor.name;\n const namespaceName = this.namespaceResolver(modelConstructor);\n const storeName = getStorename(namespaceName, modelName);\n const keys = getIndexKeys(this.schema.namespaces[namespaceName], modelName);\n const batch = [];\n for (const item of items) {\n const model = this.modelInstanceCreator(modelConstructor, item);\n const connectedModels = traverseModel(modelName, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);\n const keyValuesPath = this.getIndexKeyValuesPath(model);\n const { instance } = connectedModels.find(({ instance: connectedModelInstance }) => {\n const instanceKeyValuesPath = this.getIndexKeyValuesPath(connectedModelInstance);\n return keysEqual([instanceKeyValuesPath], [keyValuesPath]);\n });\n batch.push(instance);\n }\n return this.db.batchSave(storeName, batch, keys);\n }\n async _get(storeName, keyArr) {\n const itemKeyValuesPath = keyArr.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n return (await this.db.get(itemKeyValuesPath, storeName));\n }\n async save(model, condition) {\n const { storeName, connectionStoreNames, modelKeyValues } = this.saveMetadata(model);\n const fromDB = await this._get(storeName, modelKeyValues);\n this.validateSaveCondition(condition, fromDB);\n const result = [];\n for await (const resItem of connectionStoreNames) {\n const { storeName: storeNameForRestItem, item, instance, keys } = resItem;\n const itemKeyValues = keys.map(key => item[key]);\n const fromDBForRestItem = (await this._get(storeNameForRestItem, itemKeyValues));\n const opType = fromDBForRestItem ? OpType.UPDATE : OpType.INSERT;\n if (keysEqual(itemKeyValues, modelKeyValues) ||\n opType === OpType.INSERT) {\n await this.db.save(item, storeNameForRestItem, keys, itemKeyValues.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR));\n result.push([instance, opType]);\n }\n }\n return result;\n }\n async query(modelConstructor, predicate, pagination) {\n const { storeName, namespaceName, queryByKey, predicates, hasSort, hasPagination, } = this.queryMetadata(modelConstructor, predicate, pagination);\n const records = (await (async () => {\n if (queryByKey) {\n const keyValues = queryByKey.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n const record = await this.getByKey(storeName, keyValues);\n return record ? [record] : [];\n }\n if (predicates) {\n const filtered = await this.filterOnPredicate(storeName, predicates);\n return this.inMemoryPagination(filtered, pagination);\n }\n if (hasSort || hasPagination) {\n const all = await this.getAll(storeName);\n return this.inMemoryPagination(all, pagination);\n }\n return this.getAll(storeName);\n })());\n return this.load(namespaceName, modelConstructor.name, records);\n }\n async getByKey(storeName, keyValuePath) {\n return (await this.db.get(keyValuePath, storeName));\n }\n async getAll(storeName) {\n return this.db.getAll(storeName);\n }\n async filterOnPredicate(storeName, predicates) {\n const { predicates: predicateObjs, type } = predicates;\n const all = (await this.getAll(storeName));\n const filtered = predicateObjs\n ? all.filter(m => validatePredicate(m, type, predicateObjs))\n : all;\n return filtered;\n }\n inMemoryPagination(records, pagination) {\n return inMemoryPagination(records, pagination);\n }\n async queryOne(modelConstructor, firstOrLast = QueryOne.FIRST) {\n const storeName = this.getStorenameForModel(modelConstructor);\n const result = (await this.db.getOne(firstOrLast, storeName));\n return result && this.modelInstanceCreator(modelConstructor, result);\n }\n async deleteItem(deleteQueue) {\n for await (const deleteItem of deleteQueue) {\n const { storeName, items } = deleteItem;\n for await (const item of items) {\n if (item) {\n if (typeof item === 'object') {\n const keyValuesPath = this.getIndexKeyValuesPath(item);\n await this.db.delete(keyValuesPath, storeName);\n }\n }\n }\n }\n }\n // #region platform-specific helper methods\n /**\n * Retrieves concatenated primary key values from a model\n *\n * @param model\n * @returns\n */\n getIndexKeyValuesPath(model) {\n return this.getIndexKeyValuesFromModel(model).join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n }\n}\nexport default new AsyncStorageAdapter();\n"],"names":[],"mappings":"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"}
|
|
@@ -47,10 +47,10 @@ class AsyncStorageDatabase {
|
|
|
47
47
|
let ulid;
|
|
48
48
|
if (id === undefined) {
|
|
49
49
|
// It is an old entry (without ulid). Need to migrate to new key format
|
|
50
|
-
const
|
|
50
|
+
const resolvedId = ulidOrId;
|
|
51
51
|
const newUlid = this.getMonotonicFactory(storeName)();
|
|
52
|
-
const oldKey = this.getLegacyKeyForItem(storeName,
|
|
53
|
-
const newKey = this.getKeyForItem(storeName,
|
|
52
|
+
const oldKey = this.getLegacyKeyForItem(storeName, resolvedId);
|
|
53
|
+
const newKey = this.getKeyForItem(storeName, resolvedId, newUlid);
|
|
54
54
|
const item = await this.storage.getItem(oldKey);
|
|
55
55
|
await this.storage.setItem(newKey, item);
|
|
56
56
|
await this.storage.removeItem(oldKey);
|
|
@@ -189,16 +189,17 @@ class AsyncStorageDatabase {
|
|
|
189
189
|
const collection = this.getCollectionIndex(storeName);
|
|
190
190
|
const [itemId, ulid] = firstOrLast === QueryOne.FIRST
|
|
191
191
|
? (() => {
|
|
192
|
-
let
|
|
193
|
-
|
|
192
|
+
let resolvedId, resolvedUlid;
|
|
193
|
+
// eslint-disable-next-line no-unreachable-loop
|
|
194
|
+
for ([resolvedId, resolvedUlid] of collection)
|
|
194
195
|
break; // Get first element of the set
|
|
195
|
-
return [
|
|
196
|
+
return [resolvedId, resolvedUlid];
|
|
196
197
|
})()
|
|
197
198
|
: (() => {
|
|
198
|
-
let
|
|
199
|
-
for ([
|
|
199
|
+
let resolvedId, resolvedUlid;
|
|
200
|
+
for ([resolvedId, resolvedUlid] of collection)
|
|
200
201
|
; // Get last element of the set
|
|
201
|
-
return [
|
|
202
|
+
return [resolvedId, resolvedUlid];
|
|
202
203
|
})();
|
|
203
204
|
const itemKey = this.getKeyForItem(storeName, itemId, ulid);
|
|
204
205
|
const itemString = itemKey && (await this.storage.getItem(itemKey));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AsyncStorageDatabase.mjs","sources":["../../../../src/storage/adapter/AsyncStorageDatabase.ts"],"sourcesContent":["import { OpType, QueryOne, } from '../../types';\nimport { DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR, indexNameFromKeys, monotonicUlidFactory, } from '../../util';\nimport { createInMemoryStore } from './InMemoryStore';\nconst DB_NAME = '@AmplifyDatastore';\nconst COLLECTION = 'Collection';\nconst DATA = 'Data';\nconst monotonicFactoriesMap = new Map();\nclass AsyncStorageDatabase {\n constructor() {\n /**\n * Maps storeNames to a map of ulid->id\n */\n this._collectionInMemoryIndex = new Map();\n this.storage = createInMemoryStore();\n }\n /**\n * Collection index is map of stores (i.e. sync, metadata, mutation event, and data)\n * @param storeName {string} - Name of the store\n * @returns Map of ulid->id\n */\n getCollectionIndex(storeName) {\n if (!this._collectionInMemoryIndex.has(storeName)) {\n this._collectionInMemoryIndex.set(storeName, new Map());\n }\n return this._collectionInMemoryIndex.get(storeName);\n }\n /**\n * Return ULID for store if it exists, otherwise create a new one\n * @param storeName {string} - Name of the store\n * @returns ulid\n */\n getMonotonicFactory(storeName) {\n if (!monotonicFactoriesMap.has(storeName)) {\n monotonicFactoriesMap.set(storeName, monotonicUlidFactory());\n }\n return monotonicFactoriesMap.get(storeName);\n }\n async init() {\n this._collectionInMemoryIndex.clear();\n const allKeys = await this.storage.getAllKeys();\n const keysForCollectionEntries = [];\n for (const key of allKeys) {\n const [dbName, storeName, recordType, ulidOrId, id] = key.split('::');\n if (dbName === DB_NAME) {\n if (recordType === DATA) {\n let ulid;\n if (id === undefined) {\n // It is an old entry (without ulid). Need to migrate to new key format\n const id = ulidOrId;\n const newUlid = this.getMonotonicFactory(storeName)();\n const oldKey = this.getLegacyKeyForItem(storeName, id);\n const newKey = this.getKeyForItem(storeName, id, newUlid);\n const item = await this.storage.getItem(oldKey);\n await this.storage.setItem(newKey, item);\n await this.storage.removeItem(oldKey);\n ulid = newUlid;\n }\n else {\n ulid = ulidOrId;\n }\n this.getCollectionIndex(storeName).set(id, ulid);\n }\n else if (recordType === COLLECTION) {\n keysForCollectionEntries.push(key);\n }\n }\n }\n if (keysForCollectionEntries.length > 0) {\n await this.storage.multiRemove(keysForCollectionEntries);\n }\n }\n async save(item, storeName, keys, keyValuesPath) {\n const idxName = indexNameFromKeys(keys);\n const ulid = this.getCollectionIndex(storeName)?.get(idxName) ||\n this.getMonotonicFactory(storeName)();\n // Retrieve db key for item\n const itemKey = this.getKeyForItem(storeName, keyValuesPath, ulid);\n // Set key in collection index\n this.getCollectionIndex(storeName)?.set(keyValuesPath, ulid);\n // Save item in db\n await this.storage.setItem(itemKey, JSON.stringify(item));\n }\n async batchSave(storeName, items, keys) {\n if (items.length === 0) {\n return [];\n }\n const result = [];\n const collection = this.getCollectionIndex(storeName);\n const keysToDelete = new Set();\n const keysToSave = new Set();\n const allItemsKeys = [];\n const itemsMap = {};\n /* Populate allItemKeys, keysToDelete, and keysToSave */\n for (const item of items) {\n // Extract keys from concatenated key path, map to item values\n const keyValues = keys.map(field => item[field]);\n const { _deleted } = item;\n // If id is in the store, retrieve, otherwise generate new ULID\n const ulid = collection.get(keyValues.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR)) ||\n this.getMonotonicFactory(storeName)();\n // Generate the \"longer key\" for the item\n const key = this.getKeyForItem(storeName, keyValues.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR), ulid);\n allItemsKeys.push(key);\n itemsMap[key] = { ulid, model: item };\n if (_deleted) {\n keysToDelete.add(key);\n }\n else {\n keysToSave.add(key);\n }\n }\n const existingRecordsMap = await this.storage.multiGet(allItemsKeys);\n const existingRecordsKeys = existingRecordsMap\n .filter(([, v]) => !!v)\n .reduce((set, [k]) => set.add(k), new Set());\n // Delete\n await new Promise((resolve, reject) => {\n if (keysToDelete.size === 0) {\n resolve();\n return;\n }\n const keysToDeleteArray = Array.from(keysToDelete);\n keysToDeleteArray.forEach(key => {\n // key: full db key\n // keys: PK and/or SK keys\n const primaryKeyValues = keys\n .map(field => itemsMap[key].model[field])\n .join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n collection.delete(primaryKeyValues);\n });\n this.storage.multiRemove(keysToDeleteArray, (errors) => {\n if (errors && errors.length > 0) {\n reject(errors);\n }\n else {\n resolve();\n }\n });\n });\n // Save\n await new Promise((resolve, reject) => {\n if (keysToSave.size === 0) {\n resolve();\n return;\n }\n const entriesToSet = Array.from(keysToSave).map(key => [\n key,\n JSON.stringify(itemsMap[key].model),\n ]);\n keysToSave.forEach(key => {\n const { model, ulid } = itemsMap[key];\n // Retrieve values from model, use as key for collection index\n const keyValues = keys\n .map(field => model[field])\n .join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n collection.set(keyValues, ulid);\n });\n this.storage.multiSet(entriesToSet, (errors) => {\n if (errors && errors.length > 0) {\n reject(errors);\n }\n else {\n resolve();\n }\n });\n });\n for (const key of allItemsKeys) {\n if (keysToDelete.has(key) && existingRecordsKeys.has(key)) {\n result.push([itemsMap[key].model, OpType.DELETE]);\n }\n else if (keysToSave.has(key)) {\n result.push([\n itemsMap[key].model,\n existingRecordsKeys.has(key) ? OpType.UPDATE : OpType.INSERT,\n ]);\n }\n }\n return result;\n }\n async get(keyValuePath, storeName) {\n const ulid = this.getCollectionIndex(storeName).get(keyValuePath);\n const itemKey = this.getKeyForItem(storeName, keyValuePath, ulid);\n const recordAsString = await this.storage.getItem(itemKey);\n const record = recordAsString && JSON.parse(recordAsString);\n return record;\n }\n async getOne(firstOrLast, storeName) {\n const collection = this.getCollectionIndex(storeName);\n const [itemId, ulid] = firstOrLast === QueryOne.FIRST\n ? (() => {\n let id, ulid;\n for ([id, ulid] of collection)\n break; // Get first element of the set\n return [id, ulid];\n })()\n : (() => {\n let id, ulid;\n for ([id, ulid] of collection)\n ; // Get last element of the set\n return [id, ulid];\n })();\n const itemKey = this.getKeyForItem(storeName, itemId, ulid);\n const itemString = itemKey && (await this.storage.getItem(itemKey));\n const result = itemString ? JSON.parse(itemString) || undefined : undefined;\n return result;\n }\n /**\n * This function gets all the records stored in async storage for a particular storeName\n * It then loads all the records for that filtered set of keys using multiGet()\n */\n async getAll(storeName, pagination) {\n const collection = this.getCollectionIndex(storeName);\n const { page = 0, limit = 0 } = pagination || {};\n const start = Math.max(0, page * limit) || 0;\n const end = limit > 0 ? start + limit : undefined;\n const keysForStore = [];\n let count = 0;\n for (const [id, ulid] of collection) {\n count++;\n if (count <= start) {\n continue;\n }\n keysForStore.push(this.getKeyForItem(storeName, id, ulid));\n if (count === end) {\n break;\n }\n }\n const storeRecordStrings = await this.storage.multiGet(keysForStore);\n const records = storeRecordStrings\n .filter(([, value]) => value)\n .map(([, value]) => JSON.parse(value));\n return records;\n }\n async delete(key, storeName) {\n const ulid = this.getCollectionIndex(storeName).get(key);\n const itemKey = this.getKeyForItem(storeName, key, ulid);\n this.getCollectionIndex(storeName).delete(key);\n await this.storage.removeItem(itemKey);\n }\n /**\n * Clear the AsyncStorage of all DataStore entries\n */\n async clear() {\n const allKeys = await this.storage.getAllKeys();\n const allDataStoreKeys = allKeys.filter(key => key.startsWith(DB_NAME));\n await this.storage.multiRemove(allDataStoreKeys);\n this._collectionInMemoryIndex.clear();\n }\n getKeyForItem(storeName, id, ulid) {\n return `${this.getKeyPrefixForStoreItems(storeName)}::${ulid}::${id}`;\n }\n getLegacyKeyForItem(storeName, id) {\n return `${this.getKeyPrefixForStoreItems(storeName)}::${id}`;\n }\n getKeyPrefixForStoreItems(storeName) {\n return `${DB_NAME}::${storeName}::${DATA}`;\n }\n}\nexport default AsyncStorageDatabase;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AsyncStorageDatabase.mjs","sources":["../../../../src/storage/adapter/AsyncStorageDatabase.ts"],"sourcesContent":["import { OpType, QueryOne, } from '../../types';\nimport { DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR, indexNameFromKeys, monotonicUlidFactory, } from '../../util';\nimport { createInMemoryStore } from './InMemoryStore';\nconst DB_NAME = '@AmplifyDatastore';\nconst COLLECTION = 'Collection';\nconst DATA = 'Data';\nconst monotonicFactoriesMap = new Map();\nclass AsyncStorageDatabase {\n constructor() {\n /**\n * Maps storeNames to a map of ulid->id\n */\n this._collectionInMemoryIndex = new Map();\n this.storage = createInMemoryStore();\n }\n /**\n * Collection index is map of stores (i.e. sync, metadata, mutation event, and data)\n * @param storeName {string} - Name of the store\n * @returns Map of ulid->id\n */\n getCollectionIndex(storeName) {\n if (!this._collectionInMemoryIndex.has(storeName)) {\n this._collectionInMemoryIndex.set(storeName, new Map());\n }\n return this._collectionInMemoryIndex.get(storeName);\n }\n /**\n * Return ULID for store if it exists, otherwise create a new one\n * @param storeName {string} - Name of the store\n * @returns ulid\n */\n getMonotonicFactory(storeName) {\n if (!monotonicFactoriesMap.has(storeName)) {\n monotonicFactoriesMap.set(storeName, monotonicUlidFactory());\n }\n return monotonicFactoriesMap.get(storeName);\n }\n async init() {\n this._collectionInMemoryIndex.clear();\n const allKeys = await this.storage.getAllKeys();\n const keysForCollectionEntries = [];\n for (const key of allKeys) {\n const [dbName, storeName, recordType, ulidOrId, id] = key.split('::');\n if (dbName === DB_NAME) {\n if (recordType === DATA) {\n let ulid;\n if (id === undefined) {\n // It is an old entry (without ulid). Need to migrate to new key format\n const resolvedId = ulidOrId;\n const newUlid = this.getMonotonicFactory(storeName)();\n const oldKey = this.getLegacyKeyForItem(storeName, resolvedId);\n const newKey = this.getKeyForItem(storeName, resolvedId, newUlid);\n const item = await this.storage.getItem(oldKey);\n await this.storage.setItem(newKey, item);\n await this.storage.removeItem(oldKey);\n ulid = newUlid;\n }\n else {\n ulid = ulidOrId;\n }\n this.getCollectionIndex(storeName).set(id, ulid);\n }\n else if (recordType === COLLECTION) {\n keysForCollectionEntries.push(key);\n }\n }\n }\n if (keysForCollectionEntries.length > 0) {\n await this.storage.multiRemove(keysForCollectionEntries);\n }\n }\n async save(item, storeName, keys, keyValuesPath) {\n const idxName = indexNameFromKeys(keys);\n const ulid = this.getCollectionIndex(storeName)?.get(idxName) ||\n this.getMonotonicFactory(storeName)();\n // Retrieve db key for item\n const itemKey = this.getKeyForItem(storeName, keyValuesPath, ulid);\n // Set key in collection index\n this.getCollectionIndex(storeName)?.set(keyValuesPath, ulid);\n // Save item in db\n await this.storage.setItem(itemKey, JSON.stringify(item));\n }\n async batchSave(storeName, items, keys) {\n if (items.length === 0) {\n return [];\n }\n const result = [];\n const collection = this.getCollectionIndex(storeName);\n const keysToDelete = new Set();\n const keysToSave = new Set();\n const allItemsKeys = [];\n const itemsMap = {};\n /* Populate allItemKeys, keysToDelete, and keysToSave */\n for (const item of items) {\n // Extract keys from concatenated key path, map to item values\n const keyValues = keys.map(field => item[field]);\n const { _deleted } = item;\n // If id is in the store, retrieve, otherwise generate new ULID\n const ulid = collection.get(keyValues.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR)) ||\n this.getMonotonicFactory(storeName)();\n // Generate the \"longer key\" for the item\n const key = this.getKeyForItem(storeName, keyValues.join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR), ulid);\n allItemsKeys.push(key);\n itemsMap[key] = { ulid, model: item };\n if (_deleted) {\n keysToDelete.add(key);\n }\n else {\n keysToSave.add(key);\n }\n }\n const existingRecordsMap = await this.storage.multiGet(allItemsKeys);\n const existingRecordsKeys = existingRecordsMap\n .filter(([, v]) => !!v)\n .reduce((set, [k]) => set.add(k), new Set());\n // Delete\n await new Promise((resolve, reject) => {\n if (keysToDelete.size === 0) {\n resolve();\n return;\n }\n const keysToDeleteArray = Array.from(keysToDelete);\n keysToDeleteArray.forEach(key => {\n // key: full db key\n // keys: PK and/or SK keys\n const primaryKeyValues = keys\n .map(field => itemsMap[key].model[field])\n .join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n collection.delete(primaryKeyValues);\n });\n this.storage.multiRemove(keysToDeleteArray, (errors) => {\n if (errors && errors.length > 0) {\n reject(errors);\n }\n else {\n resolve();\n }\n });\n });\n // Save\n await new Promise((resolve, reject) => {\n if (keysToSave.size === 0) {\n resolve();\n return;\n }\n const entriesToSet = Array.from(keysToSave).map(key => [\n key,\n JSON.stringify(itemsMap[key].model),\n ]);\n keysToSave.forEach(key => {\n const { model, ulid } = itemsMap[key];\n // Retrieve values from model, use as key for collection index\n const keyValues = keys\n .map(field => model[field])\n .join(DEFAULT_PRIMARY_KEY_VALUE_SEPARATOR);\n collection.set(keyValues, ulid);\n });\n this.storage.multiSet(entriesToSet, (errors) => {\n if (errors && errors.length > 0) {\n reject(errors);\n }\n else {\n resolve();\n }\n });\n });\n for (const key of allItemsKeys) {\n if (keysToDelete.has(key) && existingRecordsKeys.has(key)) {\n result.push([itemsMap[key].model, OpType.DELETE]);\n }\n else if (keysToSave.has(key)) {\n result.push([\n itemsMap[key].model,\n existingRecordsKeys.has(key) ? OpType.UPDATE : OpType.INSERT,\n ]);\n }\n }\n return result;\n }\n async get(keyValuePath, storeName) {\n const ulid = this.getCollectionIndex(storeName).get(keyValuePath);\n const itemKey = this.getKeyForItem(storeName, keyValuePath, ulid);\n const recordAsString = await this.storage.getItem(itemKey);\n const record = recordAsString && JSON.parse(recordAsString);\n return record;\n }\n async getOne(firstOrLast, storeName) {\n const collection = this.getCollectionIndex(storeName);\n const [itemId, ulid] = firstOrLast === QueryOne.FIRST\n ? (() => {\n let resolvedId, resolvedUlid;\n // eslint-disable-next-line no-unreachable-loop\n for ([resolvedId, resolvedUlid] of collection)\n break; // Get first element of the set\n return [resolvedId, resolvedUlid];\n })()\n : (() => {\n let resolvedId, resolvedUlid;\n for ([resolvedId, resolvedUlid] of collection)\n ; // Get last element of the set\n return [resolvedId, resolvedUlid];\n })();\n const itemKey = this.getKeyForItem(storeName, itemId, ulid);\n const itemString = itemKey && (await this.storage.getItem(itemKey));\n const result = itemString ? JSON.parse(itemString) || undefined : undefined;\n return result;\n }\n /**\n * This function gets all the records stored in async storage for a particular storeName\n * It then loads all the records for that filtered set of keys using multiGet()\n */\n async getAll(storeName, pagination) {\n const collection = this.getCollectionIndex(storeName);\n const { page = 0, limit = 0 } = pagination || {};\n const start = Math.max(0, page * limit) || 0;\n const end = limit > 0 ? start + limit : undefined;\n const keysForStore = [];\n let count = 0;\n for (const [id, ulid] of collection) {\n count++;\n if (count <= start) {\n continue;\n }\n keysForStore.push(this.getKeyForItem(storeName, id, ulid));\n if (count === end) {\n break;\n }\n }\n const storeRecordStrings = await this.storage.multiGet(keysForStore);\n const records = storeRecordStrings\n .filter(([, value]) => value)\n .map(([, value]) => JSON.parse(value));\n return records;\n }\n async delete(key, storeName) {\n const ulid = this.getCollectionIndex(storeName).get(key);\n const itemKey = this.getKeyForItem(storeName, key, ulid);\n this.getCollectionIndex(storeName).delete(key);\n await this.storage.removeItem(itemKey);\n }\n /**\n * Clear the AsyncStorage of all DataStore entries\n */\n async clear() {\n const allKeys = await this.storage.getAllKeys();\n const allDataStoreKeys = allKeys.filter(key => key.startsWith(DB_NAME));\n await this.storage.multiRemove(allDataStoreKeys);\n this._collectionInMemoryIndex.clear();\n }\n getKeyForItem(storeName, id, ulid) {\n return `${this.getKeyPrefixForStoreItems(storeName)}::${ulid}::${id}`;\n }\n getLegacyKeyForItem(storeName, id) {\n return `${this.getKeyPrefixForStoreItems(storeName)}::${id}`;\n }\n getKeyPrefixForStoreItems(storeName) {\n return `${DB_NAME}::${storeName}::${DATA}`;\n }\n}\nexport default AsyncStorageDatabase;\n"],"names":[],"mappings":";;;;AAGA,MAAM,OAAO,GAAG,mBAAmB,CAAC;AACpC,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,IAAI,GAAG,MAAM,CAAC;AACpB,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC;AACxC,MAAM,oBAAoB,CAAC;AAC3B,IAAI,WAAW,GAAG;AAClB;AACA;AACA;AACA,QAAQ,IAAI,CAAC,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;AAClD,QAAQ,IAAI,CAAC,OAAO,GAAG,mBAAmB,EAAE,CAAC;AAC7C,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,SAAS,EAAE;AAClC,QAAQ,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC3D,YAAY,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACpE,SAAS;AACT,QAAQ,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC5D,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,SAAS,EAAE;AACnC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACnD,YAAY,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,oBAAoB,EAAE,CAAC,CAAC;AACzE,SAAS;AACT,QAAQ,OAAO,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACpD,KAAK;AACL,IAAI,MAAM,IAAI,GAAG;AACjB,QAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;AAC9C,QAAQ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AACxD,QAAQ,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAC5C,QAAQ,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;AACnC,YAAY,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAClF,YAAY,IAAI,MAAM,KAAK,OAAO,EAAE;AACpC,gBAAgB,IAAI,UAAU,KAAK,IAAI,EAAE;AACzC,oBAAoB,IAAI,IAAI,CAAC;AAC7B,oBAAoB,IAAI,EAAE,KAAK,SAAS,EAAE;AAC1C;AACA,wBAAwB,MAAM,UAAU,GAAG,QAAQ,CAAC;AACpD,wBAAwB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;AAC9E,wBAAwB,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AACvF,wBAAwB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAC1F,wBAAwB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxE,wBAAwB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACjE,wBAAwB,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC9D,wBAAwB,IAAI,GAAG,OAAO,CAAC;AACvC,qBAAqB;AACrB,yBAAyB;AACzB,wBAAwB,IAAI,GAAG,QAAQ,CAAC;AACxC,qBAAqB;AACrB,oBAAoB,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACrE,iBAAiB;AACjB,qBAAqB,IAAI,UAAU,KAAK,UAAU,EAAE;AACpD,oBAAoB,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,wBAAwB,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,YAAY,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC;AACrE,SAAS;AACT,KAAK;AACL,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE;AACrD,QAAQ,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;AAChD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;AACrE,YAAY,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;AAClD;AACA,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;AAC3E;AACA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AACrE;AACA,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAClE,KAAK;AACL,IAAI,MAAM,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AAC5C,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAY,OAAO,EAAE,CAAC;AACtB,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC;AAC1B,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC9D,QAAQ,MAAM,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;AACvC,QAAQ,MAAM,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AACrC,QAAQ,MAAM,YAAY,GAAG,EAAE,CAAC;AAChC,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;AAC5B;AACA,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAClC;AACA,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,YAAY,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;AACtC;AACA,YAAY,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;AAC5F,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;AACtD;AACA,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,mCAAmC,CAAC,EAAE,IAAI,CAAC,CAAC;AACjH,YAAY,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnC,YAAY,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAClD,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtC,aAAa;AACb,iBAAiB;AACjB,gBAAgB,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,aAAa;AACb,SAAS;AACT,QAAQ,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC7E,QAAQ,MAAM,mBAAmB,GAAG,kBAAkB;AACtD,aAAa,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,aAAa,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACzD;AACA,QAAQ,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC/C,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE;AACzC,gBAAgB,OAAO,EAAE,CAAC;AAC1B,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC/D,YAAY,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI;AAC7C;AACA;AACA,gBAAgB,MAAM,gBAAgB,GAAG,IAAI;AAC7C,qBAAqB,GAAG,CAAC,KAAK,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7D,qBAAqB,IAAI,CAAC,mCAAmC,CAAC,CAAC;AAC/D,gBAAgB,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACpD,aAAa,CAAC,CAAC;AACf,YAAY,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,MAAM,KAAK;AACpE,gBAAgB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,oBAAoB,MAAM,CAAC,MAAM,CAAC,CAAC;AACnC,iBAAiB;AACjB,qBAAqB;AACrB,oBAAoB,OAAO,EAAE,CAAC;AAC9B,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC/C,YAAY,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;AACvC,gBAAgB,OAAO,EAAE,CAAC;AAC1B,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;AACnE,gBAAgB,GAAG;AACnB,gBAAgB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;AACnD,aAAa,CAAC,CAAC;AACf,YAAY,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI;AACtC,gBAAgB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AACtD;AACA,gBAAgB,MAAM,SAAS,GAAG,IAAI;AACtC,qBAAqB,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/C,qBAAqB,IAAI,CAAC,mCAAmC,CAAC,CAAC;AAC/D,gBAAgB,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AAChD,aAAa,CAAC,CAAC;AACf,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK;AAC5D,gBAAgB,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,oBAAoB,MAAM,CAAC,MAAM,CAAC,CAAC;AACnC,iBAAiB;AACjB,qBAAqB;AACrB,oBAAoB,OAAO,EAAE,CAAC;AAC9B,iBAAiB;AACjB,aAAa,CAAC,CAAC;AACf,SAAS,CAAC,CAAC;AACX,QAAQ,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;AACxC,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACvE,gBAAgB,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,aAAa;AACb,iBAAiB,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC1C,gBAAgB,MAAM,CAAC,IAAI,CAAC;AAC5B,oBAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK;AACvC,oBAAoB,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAChF,iBAAiB,CAAC,CAAC;AACnB,aAAa;AACb,SAAS;AACT,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,MAAM,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE;AACvC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC1E,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;AAC1E,QAAQ,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACnE,QAAQ,MAAM,MAAM,GAAG,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACpE,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL,IAAI,MAAM,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE;AACzC,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC9D,QAAQ,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,WAAW,KAAK,QAAQ,CAAC,KAAK;AAC7D,cAAc,CAAC,MAAM;AACrB,gBAAgB,IAAI,UAAU,EAAE,YAAY,CAAC;AAC7C;AACA,gBAAgB,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,UAAU;AAC7D,oBAAoB,MAAM;AAC1B,gBAAgB,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAClD,aAAa,GAAG;AAChB,cAAc,CAAC,MAAM;AACrB,gBAAgB,IAAI,UAAU,EAAE,YAAY,CAAC;AAC7C,gBAAgB,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,UAAU;AAC7D,oBAAoB,CAAC;AACrB,gBAAgB,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAClD,aAAa,GAAG,CAAC;AACjB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACpE,QAAQ,MAAM,UAAU,GAAG,OAAO,KAAK,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,QAAQ,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,SAAS,GAAG,SAAS,CAAC;AACpF,QAAQ,OAAO,MAAM,CAAC;AACtB,KAAK;AACL;AACA;AACA;AACA;AACA,IAAI,MAAM,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE;AACxC,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC9D,QAAQ,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,UAAU,IAAI,EAAE,CAAC;AACzD,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;AACrD,QAAQ,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AAC1D,QAAQ,MAAM,YAAY,GAAG,EAAE,CAAC;AAChC,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC;AACtB,QAAQ,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE;AAC7C,YAAY,KAAK,EAAE,CAAC;AACpB,YAAY,IAAI,KAAK,IAAI,KAAK,EAAE;AAChC,gBAAgB,SAAS;AACzB,aAAa;AACb,YAAY,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACvE,YAAY,IAAI,KAAK,KAAK,GAAG,EAAE;AAC/B,gBAAgB,MAAM;AACtB,aAAa;AACb,SAAS;AACT,QAAQ,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC7E,QAAQ,MAAM,OAAO,GAAG,kBAAkB;AAC1C,aAAa,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,CAAC;AACzC,aAAa,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,QAAQ,OAAO,OAAO,CAAC;AACvB,KAAK;AACL,IAAI,MAAM,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE;AACjC,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjE,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvD,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC/C,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,KAAK,GAAG;AAClB,QAAQ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;AACxD,QAAQ,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAChF,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;AACzD,QAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;AAC9C,KAAK;AACL,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE;AACvC,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9E,KAAK;AACL,IAAI,mBAAmB,CAAC,SAAS,EAAE,EAAE,EAAE;AACvC,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AACrE,KAAK;AACL,IAAI,yBAAyB,CAAC,SAAS,EAAE;AACzC,QAAQ,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACnD,KAAK;AACL;;;;"}
|
|
@@ -7,7 +7,10 @@ class InMemoryStore {
|
|
|
7
7
|
return Array.from(this.db.keys());
|
|
8
8
|
};
|
|
9
9
|
this.multiGet = async (keys) => {
|
|
10
|
-
return keys.reduce((res, k) =>
|
|
10
|
+
return keys.reduce((res, k) => {
|
|
11
|
+
res.push([k, this.db.get(k)]);
|
|
12
|
+
return res;
|
|
13
|
+
}, []);
|
|
11
14
|
};
|
|
12
15
|
this.multiRemove = async (keys, callback) => {
|
|
13
16
|
keys.forEach(k => this.db.delete(k));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InMemoryStore.mjs","sources":["../../../../src/storage/adapter/InMemoryStore.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport class InMemoryStore {\n constructor() {\n this.db = new Map();\n this.getAllKeys = async () => {\n return Array.from(this.db.keys());\n };\n this.multiGet = async (keys) => {\n return keys.reduce((res, k) =>
|
|
1
|
+
{"version":3,"file":"InMemoryStore.mjs","sources":["../../../../src/storage/adapter/InMemoryStore.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nexport class InMemoryStore {\n constructor() {\n this.db = new Map();\n this.getAllKeys = async () => {\n return Array.from(this.db.keys());\n };\n this.multiGet = async (keys) => {\n return keys.reduce((res, k) => {\n res.push([k, this.db.get(k)]);\n return res;\n }, []);\n };\n this.multiRemove = async (keys, callback) => {\n keys.forEach(k => this.db.delete(k));\n typeof callback === 'function' && callback();\n };\n this.multiSet = async (entries, callback) => {\n entries.forEach(([key, value]) => {\n this.setItem(key, value);\n });\n typeof callback === 'function' && callback();\n };\n this.setItem = async (key, value) => {\n return this.db.set(key, value);\n };\n this.removeItem = async (key) => {\n return this.db.delete(key);\n };\n this.getItem = async (key) => {\n return this.db.get(key);\n };\n }\n}\nexport function createInMemoryStore() {\n return new InMemoryStore();\n}\n"],"names":[],"mappings":"AAAA;AACA;AACO,MAAM,aAAa,CAAC;AAC3B,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,QAAQ,IAAI,CAAC,UAAU,GAAG,YAAY;AACtC,YAAY,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,KAAK;AACxC,YAAY,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK;AAC3C,gBAAgB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,gBAAgB,OAAO,GAAG,CAAC;AAC3B,aAAa,EAAE,EAAE,CAAC,CAAC;AACnB,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,WAAW,GAAG,OAAO,IAAI,EAAE,QAAQ,KAAK;AACrD,YAAY,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,YAAY,OAAO,QAAQ,KAAK,UAAU,IAAI,QAAQ,EAAE,CAAC;AACzD,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,QAAQ,GAAG,OAAO,OAAO,EAAE,QAAQ,KAAK;AACrD,YAAY,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AAC9C,gBAAgB,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACzC,aAAa,CAAC,CAAC;AACf,YAAY,OAAO,QAAQ,KAAK,UAAU,IAAI,QAAQ,EAAE,CAAC;AACzD,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,KAAK,KAAK;AAC7C,YAAY,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC3C,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,UAAU,GAAG,OAAO,GAAG,KAAK;AACzC,YAAY,OAAO,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACvC,SAAS,CAAC;AACV,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,GAAG,KAAK;AACtC,YAAY,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACpC,SAAS,CAAC;AACV,KAAK;AACL,CAAC;AACM,SAAS,mBAAmB,GAAG;AACtC,IAAI,OAAO,IAAI,aAAa,EAAE,CAAC;AAC/B;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as idb from 'idb';
|
|
2
|
+
import { ConsoleLogger } from '@aws-amplify/core';
|
|
2
3
|
import { OpType, QueryOne, isPredicateGroup, isPredicateObj } from '../../types.mjs';
|
|
3
4
|
import { getStorename, keysEqual, traverseModel, isPrivateMode, isSafariCompatabilityMode, validatePredicate, inMemoryPagination } from '../../util.mjs';
|
|
4
5
|
import { StorageAdapterBase } from './StorageAdapterBase.mjs';
|
|
5
|
-
import { ConsoleLogger } from '@aws-amplify/core';
|
|
6
6
|
|
|
7
7
|
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
8
8
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -49,7 +49,7 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
49
49
|
}
|
|
50
50
|
return keyArr;
|
|
51
51
|
};
|
|
52
|
-
|
|
52
|
+
// #endregion
|
|
53
53
|
}
|
|
54
54
|
// checks are called by StorageAdapterBase class
|
|
55
55
|
async preSetUpChecks() {
|
|
@@ -69,7 +69,7 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
69
69
|
* @returns IDB Database instance
|
|
70
70
|
*/
|
|
71
71
|
async initDb() {
|
|
72
|
-
return
|
|
72
|
+
return idb.openDB(this.dbName, DB_VERSION, {
|
|
73
73
|
upgrade: async (db, oldVersion, newVersion, txn) => {
|
|
74
74
|
// create new database
|
|
75
75
|
if (oldVersion === 0) {
|
|
@@ -132,7 +132,6 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
132
132
|
txn.abort();
|
|
133
133
|
throw error;
|
|
134
134
|
}
|
|
135
|
-
return;
|
|
136
135
|
}
|
|
137
136
|
},
|
|
138
137
|
});
|
|
@@ -166,17 +165,17 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
166
165
|
this.validateSaveCondition(condition, fromDB);
|
|
167
166
|
const result = [];
|
|
168
167
|
for await (const resItem of connectionStoreNames) {
|
|
169
|
-
const { storeName, item, instance, keys } = resItem;
|
|
170
|
-
const
|
|
168
|
+
const { storeName: storeNameForRestItem, item, instance, keys } = resItem;
|
|
169
|
+
const storeForRestItem = tx.objectStore(storeNameForRestItem);
|
|
171
170
|
const itemKeyValues = keys.map(key => item[key]);
|
|
172
|
-
const
|
|
173
|
-
const opType =
|
|
171
|
+
const fromDBForRestItem = (await this._get(storeForRestItem, itemKeyValues));
|
|
172
|
+
const opType = fromDBForRestItem ? OpType.UPDATE : OpType.INSERT;
|
|
174
173
|
if (keysEqual(itemKeyValues, modelKeyValues) ||
|
|
175
174
|
opType === OpType.INSERT) {
|
|
176
|
-
const key = await
|
|
175
|
+
const key = await storeForRestItem
|
|
177
176
|
.index('byPk')
|
|
178
177
|
.getKey(this.canonicalKeyPath(itemKeyValues));
|
|
179
|
-
await
|
|
178
|
+
await storeForRestItem.put(item, key);
|
|
180
179
|
result.push([instance, opType]);
|
|
181
180
|
}
|
|
182
181
|
}
|
|
@@ -215,7 +214,7 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
215
214
|
}
|
|
216
215
|
return this.getAll(storeName);
|
|
217
216
|
})());
|
|
218
|
-
return
|
|
217
|
+
return this.load(namespaceName, modelConstructor.name, records);
|
|
219
218
|
}
|
|
220
219
|
async queryOne(modelConstructor, firstOrLast = QueryOne.FIRST) {
|
|
221
220
|
await this.checkPrivate();
|
|
@@ -237,7 +236,7 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
237
236
|
const storeName = this.getStorenameForModel(modelConstructor);
|
|
238
237
|
const result = [];
|
|
239
238
|
const txn = this.db.transaction(storeName, 'readwrite');
|
|
240
|
-
const store = txn
|
|
239
|
+
const { store } = txn;
|
|
241
240
|
for (const item of items) {
|
|
242
241
|
const model = this.modelInstanceCreator(modelConstructor, item);
|
|
243
242
|
const connectedModels = traverseModel(modelName, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
@@ -246,8 +245,8 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
246
245
|
const index = store.index('byPk');
|
|
247
246
|
const key = await index.getKey(this.canonicalKeyPath(keyValues));
|
|
248
247
|
if (!_deleted) {
|
|
249
|
-
const { instance } = connectedModels.find(({ instance }) => {
|
|
250
|
-
const instanceKeyValues = this.getIndexKeyValuesFromModel(
|
|
248
|
+
const { instance } = connectedModels.find(({ instance: connectedModelInstance }) => {
|
|
249
|
+
const instanceKeyValues = this.getIndexKeyValuesFromModel(connectedModelInstance);
|
|
251
250
|
return keysEqual(instanceKeyValues, keyValues);
|
|
252
251
|
});
|
|
253
252
|
result.push([
|
|
@@ -294,13 +293,12 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
294
293
|
}
|
|
295
294
|
}
|
|
296
295
|
}
|
|
297
|
-
|
|
296
|
+
// #region platform-specific helper methods
|
|
298
297
|
async checkPrivate() {
|
|
299
|
-
const isPrivate = await isPrivateMode()
|
|
300
|
-
return isPrivate;
|
|
301
|
-
});
|
|
298
|
+
const isPrivate = await isPrivateMode();
|
|
302
299
|
if (isPrivate) {
|
|
303
300
|
logger.error("IndexedDB not supported in this browser's private mode");
|
|
301
|
+
// eslint-disable-next-line prefer-promise-reject-errors
|
|
304
302
|
return Promise.reject("IndexedDB not supported in this browser's private mode");
|
|
305
303
|
}
|
|
306
304
|
else {
|
|
@@ -341,10 +339,10 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
341
339
|
return store;
|
|
342
340
|
}
|
|
343
341
|
async getByKey(storeName, keyValue) {
|
|
344
|
-
return await this._get(storeName, keyValue);
|
|
342
|
+
return (await this._get(storeName, keyValue));
|
|
345
343
|
}
|
|
346
344
|
async getAll(storeName) {
|
|
347
|
-
return
|
|
345
|
+
return this.db.getAll(storeName);
|
|
348
346
|
}
|
|
349
347
|
/**
|
|
350
348
|
* Tries to generate an index fetcher for the given predicates. Assumes
|
|
@@ -399,7 +397,7 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
399
397
|
while (predicateObjs.length === 1 &&
|
|
400
398
|
isPredicateGroup(predicateObjs[0]) &&
|
|
401
399
|
predicateObjs[0].type !== 'not') {
|
|
402
|
-
type = predicateObjs[0]
|
|
400
|
+
({ type } = predicateObjs[0]);
|
|
403
401
|
predicateObjs = predicateObjs[0].predicates;
|
|
404
402
|
}
|
|
405
403
|
const fieldPredicates = predicateObjs.filter(p => isPredicateObj(p) && p.operator === 'eq');
|
|
@@ -503,7 +501,7 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
503
501
|
// nothing intelligent we can do with `not` groups unless or until we start
|
|
504
502
|
// smashing comparison operators against indexes -- at which point we could
|
|
505
503
|
// perform some reversal here.
|
|
506
|
-
candidateResults = await this.getAll(storeName);
|
|
504
|
+
candidateResults = (await this.getAll(storeName));
|
|
507
505
|
}
|
|
508
506
|
const filtered = predicateObjs
|
|
509
507
|
? candidateResults.filter(m => validatePredicate(m, type, predicateObjs))
|
|
@@ -537,7 +535,7 @@ class IndexedDBAdapter extends StorageAdapterBase {
|
|
|
537
535
|
result = pageResults;
|
|
538
536
|
}
|
|
539
537
|
else {
|
|
540
|
-
result = await this.db.getAll(storeName);
|
|
538
|
+
result = (await this.db.getAll(storeName));
|
|
541
539
|
}
|
|
542
540
|
return result;
|
|
543
541
|
}
|