@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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IndexedDBAdapter.mjs","sources":["../../../../src/storage/adapter/IndexedDBAdapter.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport * as idb from 'idb';\nimport { isPredicateObj, isPredicateGroup, OpType, QueryOne, } from '../../types';\nimport { isPrivateMode, traverseModel, validatePredicate, inMemoryPagination, keysEqual, getStorename, isSafariCompatabilityMode, } from '../../util';\nimport { StorageAdapterBase } from './StorageAdapterBase';\nimport { ConsoleLogger } from '@aws-amplify/core';\nconst logger = new ConsoleLogger('DataStore');\n/**\n * The point after which queries composed of multiple simple OR conditions\n * should scan-and-filter instead of individual queries for each condition.\n *\n * At some point, this should be configurable and/or dynamic based on table\n * size and possibly even on observed average seek latency. For now, it's\n * based on an manual \"binary search\" for the breakpoint as measured in the\n * unit test suite. This isn't necessarily optimal. But, it's at least derived\n * empirically, rather than theoretically and without any verification!\n *\n * REMEMBER! If you run more realistic benchmarks and update this value, update\n * this comment so the validity and accuracy of future query tuning exercises\n * can be compared to the methods used to derive the current value. E.g.,\n *\n * 1. In browser benchmark > unit test benchmark\n * 2. Multi-browser benchmark > single browser benchmark\n * 3. Benchmarks of various table sizes > static table size benchmark\n *\n * etc...\n *\n */\nconst MULTI_OR_CONDITION_SCAN_BREAKPOINT = 7;\n//\nconst DB_VERSION = 3;\nclass IndexedDBAdapter extends StorageAdapterBase {\n constructor() {\n super(...arguments);\n this.safariCompatabilityMode = false;\n /**\n * Checks the given path against the browser's IndexedDB implementation for\n * necessary compatibility transformations, applying those transforms if needed.\n *\n * @param `keyArr` strings to compatibilize for browser-indexeddb index operations\n * @returns An array or string, depending on and given key,\n * that is ensured to be compatible with the IndexedDB implementation's nuances.\n */\n this.canonicalKeyPath = (keyArr) => {\n if (this.safariCompatabilityMode) {\n return keyArr.length > 1 ? keyArr : keyArr[0];\n }\n return keyArr;\n };\n //#endregion\n }\n // checks are called by StorageAdapterBase class\n async preSetUpChecks() {\n await this.checkPrivate();\n await this.setSafariCompatabilityMode();\n }\n async preOpCheck() {\n await this.checkPrivate();\n }\n /**\n * Initialize IndexedDB database\n * Create new DB if one doesn't exist\n * Upgrade outdated DB\n *\n * Called by `StorageAdapterBase.setUp()`\n *\n * @returns IDB Database instance\n */\n async initDb() {\n return await idb.openDB(this.dbName, DB_VERSION, {\n upgrade: async (db, oldVersion, newVersion, txn) => {\n // create new database\n if (oldVersion === 0) {\n Object.keys(this.schema.namespaces).forEach(namespaceName => {\n const namespace = this.schema.namespaces[namespaceName];\n Object.keys(namespace.models).forEach(modelName => {\n const storeName = getStorename(namespaceName, modelName);\n this.createObjectStoreForModel(db, namespaceName, storeName, modelName);\n });\n });\n return;\n }\n // migrate existing database to latest schema\n if ((oldVersion === 1 || oldVersion === 2) && newVersion === 3) {\n try {\n for (const storeName of txn.objectStoreNames) {\n const origStore = txn.objectStore(storeName);\n // rename original store\n const tmpName = `tmp_${storeName}`;\n origStore.name = tmpName;\n const { namespaceName, modelName } = this.getNamespaceAndModelFromStorename(storeName);\n const modelInCurrentSchema = modelName in this.schema.namespaces[namespaceName].models;\n if (!modelInCurrentSchema) {\n // delete original\n db.deleteObjectStore(tmpName);\n continue;\n }\n const newStore = this.createObjectStoreForModel(db, namespaceName, storeName, modelName);\n let cursor = await origStore.openCursor();\n let count = 0;\n // Copy data from original to new\n while (cursor && cursor.value) {\n // we don't pass key, since they are all new entries in the new store\n await newStore.put(cursor.value);\n cursor = await cursor.continue();\n count++;\n }\n // delete original\n db.deleteObjectStore(tmpName);\n logger.debug(`${count} ${storeName} records migrated`);\n }\n // add new models created after IndexedDB, but before migration\n // this case may happen when a user has not opened an app for\n // some time and a new model is added during that time\n Object.keys(this.schema.namespaces).forEach(namespaceName => {\n const namespace = this.schema.namespaces[namespaceName];\n const objectStoreNames = new Set(txn.objectStoreNames);\n Object.keys(namespace.models)\n .map(modelName => {\n return [modelName, getStorename(namespaceName, modelName)];\n })\n .filter(([, storeName]) => !objectStoreNames.has(storeName))\n .forEach(([modelName, storeName]) => {\n this.createObjectStoreForModel(db, namespaceName, storeName, modelName);\n });\n });\n }\n catch (error) {\n logger.error('Error migrating IndexedDB data', error);\n txn.abort();\n throw error;\n }\n return;\n }\n },\n });\n }\n async _get(storeOrStoreName, keyArr) {\n let index;\n if (typeof storeOrStoreName === 'string') {\n const storeName = storeOrStoreName;\n index = this.db.transaction(storeName, 'readonly').store.index('byPk');\n }\n else {\n const store = storeOrStoreName;\n index = store.index('byPk');\n }\n const result = await index.get(this.canonicalKeyPath(keyArr));\n return result;\n }\n async clear() {\n await this.checkPrivate();\n this.db?.close();\n await idb.deleteDB(this.dbName);\n this.db = undefined;\n this.initPromise = undefined;\n }\n async save(model, condition) {\n await this.checkPrivate();\n const { storeName, set, connectionStoreNames, modelKeyValues } = this.saveMetadata(model);\n const tx = this.db.transaction([storeName, ...Array.from(set.values())], 'readwrite');\n const store = tx.objectStore(storeName);\n const fromDB = await this._get(store, 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 store = tx.objectStore(storeName);\n const itemKeyValues = keys.map(key => item[key]);\n const fromDB = await this._get(store, itemKeyValues);\n const opType = fromDB ? OpType.UPDATE : OpType.INSERT;\n if (keysEqual(itemKeyValues, modelKeyValues) ||\n opType === OpType.INSERT) {\n const key = await store\n .index('byPk')\n .getKey(this.canonicalKeyPath(itemKeyValues));\n await store.put(item, key);\n result.push([instance, opType]);\n }\n }\n await tx.done;\n return result;\n }\n async query(modelConstructor, predicate, pagination) {\n await this.checkPrivate();\n const { storeName, namespaceName, queryByKey, predicates, hasSort, hasPagination, } = this.queryMetadata(modelConstructor, predicate, pagination);\n const records = (await (async () => {\n //\n // NOTE: @svidgen explored removing this and letting query() take care of automatic\n // index leveraging. This would eliminate some amount of very similar code.\n // But, getAll is slightly slower than get()\n //\n // On Chrome:\n // ~700ms vs ~1175ms per 10k reads.\n //\n // You can (and should) check my work here:\n // \thttps://gist.github.com/svidgen/74e55d573b19c3e5432b1b5bdf0f4d96\n //\n if (queryByKey) {\n const record = await this.getByKey(storeName, queryByKey);\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) {\n const all = await this.getAll(storeName);\n return this.inMemoryPagination(all, pagination);\n }\n if (hasPagination) {\n return this.enginePagination(storeName, pagination);\n }\n return this.getAll(storeName);\n })());\n return await this.load(namespaceName, modelConstructor.name, records);\n }\n async queryOne(modelConstructor, firstOrLast = QueryOne.FIRST) {\n await this.checkPrivate();\n const storeName = this.getStorenameForModel(modelConstructor);\n const cursor = await this.db\n .transaction([storeName], 'readonly')\n .objectStore(storeName)\n .openCursor(undefined, firstOrLast === QueryOne.FIRST ? 'next' : 'prev');\n const result = cursor ? cursor.value : undefined;\n return result && this.modelInstanceCreator(modelConstructor, result);\n }\n async batchSave(modelConstructor, items) {\n await this.checkPrivate();\n if (items.length === 0) {\n return [];\n }\n const modelName = modelConstructor.name;\n const namespaceName = this.namespaceResolver(modelConstructor);\n const storeName = this.getStorenameForModel(modelConstructor);\n const result = [];\n const txn = this.db.transaction(storeName, 'readwrite');\n const store = txn.store;\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 keyValues = this.getIndexKeyValuesFromModel(model);\n const { _deleted } = item;\n const index = store.index('byPk');\n const key = await index.getKey(this.canonicalKeyPath(keyValues));\n if (!_deleted) {\n const { instance } = connectedModels.find(({ instance }) => {\n const instanceKeyValues = this.getIndexKeyValuesFromModel(instance);\n return keysEqual(instanceKeyValues, keyValues);\n });\n result.push([\n instance,\n key ? OpType.UPDATE : OpType.INSERT,\n ]);\n await store.put(instance, key);\n }\n else {\n result.push([item, OpType.DELETE]);\n if (key) {\n await store.delete(key);\n }\n }\n }\n await txn.done;\n return result;\n }\n async deleteItem(deleteQueue) {\n const connectionStoreNames = deleteQueue.map(({ storeName }) => {\n return storeName;\n });\n const tx = this.db.transaction([...connectionStoreNames], 'readwrite');\n for await (const deleteItem of deleteQueue) {\n const { storeName, items } = deleteItem;\n const store = tx.objectStore(storeName);\n for await (const item of items) {\n if (item) {\n let key;\n if (typeof item === 'object') {\n const keyValues = this.getIndexKeyValuesFromModel(item);\n key = await store\n .index('byPk')\n .getKey(this.canonicalKeyPath(keyValues));\n }\n else {\n const itemKey = item.toString();\n key = await store.index('byPk').getKey(itemKey);\n }\n if (key !== undefined) {\n await store.delete(key);\n }\n }\n }\n }\n }\n //#region platform-specific helper methods\n async checkPrivate() {\n const isPrivate = await isPrivateMode().then(isPrivate => {\n return isPrivate;\n });\n if (isPrivate) {\n logger.error(\"IndexedDB not supported in this browser's private mode\");\n return Promise.reject(\"IndexedDB not supported in this browser's private mode\");\n }\n else {\n return Promise.resolve();\n }\n }\n /**\n * Whether the browser's implementation of IndexedDB is coercing single-field\n * indexes to a scalar key.\n *\n * If this returns `true`, we need to treat indexes containing a single field\n * as scalars.\n *\n * See PR description for reference:\n * https://github.com/aws-amplify/amplify-js/pull/10527\n */\n async setSafariCompatabilityMode() {\n this.safariCompatabilityMode = await isSafariCompatabilityMode();\n if (this.safariCompatabilityMode === true) {\n logger.debug('IndexedDB Adapter is running in Safari Compatability Mode');\n }\n }\n getNamespaceAndModelFromStorename(storeName) {\n const [namespaceName, ...modelNameArr] = storeName.split('_');\n return {\n namespaceName,\n modelName: modelNameArr.join('_'),\n };\n }\n createObjectStoreForModel(db, namespaceName, storeName, modelName) {\n const store = db.createObjectStore(storeName, {\n autoIncrement: true,\n });\n const { indexes } = this.schema.namespaces[namespaceName].relationships[modelName];\n indexes.forEach(([idxName, keyPath, options]) => {\n store.createIndex(idxName, keyPath, options);\n });\n return store;\n }\n async getByKey(storeName, keyValue) {\n return await this._get(storeName, keyValue);\n }\n async getAll(storeName) {\n return await this.db.getAll(storeName);\n }\n /**\n * Tries to generate an index fetcher for the given predicates. Assumes\n * that the given predicate conditions are contained by an AND group and\n * should therefore all match a single record.\n *\n * @param storeName The table to query.\n * @param predicates The predicates to try to AND together.\n * @param transaction\n */\n matchingIndexQueries(storeName, predicates, transaction) {\n // could be expanded later to include `exec()` and a `cardinality` estimate?\n const queries = [];\n const predicateIndex = new Map();\n for (const predicate of predicates) {\n predicateIndex.set(String(predicate.field), predicate);\n }\n const store = transaction.objectStore(storeName);\n for (const name of store.indexNames) {\n const idx = store.index(name);\n const keypath = Array.isArray(idx.keyPath) ? idx.keyPath : [idx.keyPath];\n const matchingPredicateValues = [];\n for (const field of keypath) {\n const p = predicateIndex.get(field);\n if (p && p.operand !== null && p.operand !== undefined) {\n matchingPredicateValues.push(p.operand);\n }\n else {\n break;\n }\n }\n // if we have a matching predicate field for each component of this index,\n // we can build a query for it. otherwise, we can't.\n if (matchingPredicateValues.length === keypath.length) {\n // re-create a transaction, because the transaction used to fetch the\n // indexes may no longer be active.\n queries.push(() => this.db\n .transaction(storeName)\n .objectStore(storeName)\n .index(name)\n .getAll(this.canonicalKeyPath(matchingPredicateValues)));\n }\n }\n return queries;\n }\n async baseQueryIndex(storeName, predicates, transaction) {\n let { predicates: predicateObjs, type } = predicates;\n // the predicate objects we care about tend to be nested at least\n // one level down: `{and: {or: {and: { <the predicates we want> }}}}`\n // so, we unpack and/or groups until we find a group with more than 1\n // child OR a child that is not a group (and is therefore a predicate \"object\").\n while (predicateObjs.length === 1 &&\n isPredicateGroup(predicateObjs[0]) &&\n predicateObjs[0].type !== 'not') {\n type = predicateObjs[0].type;\n predicateObjs = predicateObjs[0].predicates;\n }\n const fieldPredicates = predicateObjs.filter(p => isPredicateObj(p) && p.operator === 'eq');\n // several sub-queries could occur here. explicitly start a txn here to avoid\n // opening/closing multiple txns.\n const txn = transaction || this.db.transaction(storeName);\n let result = {};\n // `or` conditions, if usable, need to generate multiple queries. this is unlike\n // `and` conditions, which should just be combined.\n if (type === 'or') {\n /**\n * Base queries for each child group.\n *\n * For each child group, if it's an AND condition that results in a single\n * subordinate \"base query\", we can use it. if it's any more complicated\n * than that, it's not a simple join condition we want to use.\n */\n const groupQueries = await Promise.all(predicateObjs\n .filter(o => isPredicateGroup(o) && o.type === 'and')\n .map(o => this.baseQueryIndex(storeName, o, txn))).then(queries => queries\n .filter(q => q.indexedQueries.length === 1)\n .map(i => i.indexedQueries));\n /**\n * Base queries for each simple child \"object\" (field condition).\n */\n const objectQueries = predicateObjs\n .filter(o => isPredicateObj(o))\n .map(o => this.matchingIndexQueries(storeName, [o], txn));\n const indexedQueries = [...groupQueries, ...objectQueries]\n .map(q => q[0])\n .filter(i => i);\n // if, after hunting for base queries, we don't have exactly 1 base query\n // for each child group + object, stop trying to optimize. we're not dealing\n // with a simple query that fits the intended optimization path.\n if (predicateObjs.length > indexedQueries.length) {\n result = {\n groupType: null,\n indexedQueries: [],\n };\n }\n else {\n result = {\n groupType: 'or',\n indexedQueries,\n };\n }\n }\n else if (type === 'and') {\n // our potential indexes or lacks thereof.\n // note that we're only optimizing for `eq` right now.\n result = {\n groupType: type,\n indexedQueries: this.matchingIndexQueries(storeName, fieldPredicates, txn),\n };\n }\n else {\n result = {\n groupType: null,\n indexedQueries: [],\n };\n }\n // Explicitly wait for txns from index queries to complete before proceding.\n // This helps ensure IndexedDB is in a stable, ready state. Else, subseqeuent\n // qeuries can sometimes appear to deadlock (at least in FakeIndexedDB).\n // (Unless we were *given* the transaction -- we'll assume the parent handles it.)\n if (!transaction)\n await txn.done;\n return result;\n }\n async filterOnPredicate(storeName, predicates) {\n const { predicates: predicateObjs, type } = predicates;\n const { groupType, indexedQueries } = await this.baseQueryIndex(storeName, predicates);\n // where we'll accumulate candidate results, which will be filtered at the end.\n let candidateResults;\n // semi-naive implementation:\n if (groupType === 'and' && indexedQueries.length > 0) {\n // each condition must be satsified, we can form a base set with any\n // ONE of those conditions and then filter.\n candidateResults = await indexedQueries[0]();\n }\n else if (groupType === 'or' &&\n indexedQueries.length > 0 &&\n indexedQueries.length <= MULTI_OR_CONDITION_SCAN_BREAKPOINT) {\n // NOTE: each condition implies a potentially distinct set. we only benefit\n // from using indexes here if EVERY condition uses an index. if any one\n // index requires a table scan, we gain nothing from the indexes.\n // NOTE: results must be DISTINCT-ified if we leverage indexes.\n const distinctResults = new Map();\n for (const query of indexedQueries) {\n const resultGroup = await query();\n for (const item of resultGroup) {\n const distinctificationString = JSON.stringify(item);\n distinctResults.set(distinctificationString, item);\n }\n }\n // we could conceivably check for special conditions and return early here.\n // but, this is simpler and has not yet had a measurable performance impact.\n candidateResults = Array.from(distinctResults.values());\n }\n else {\n // nothing intelligent we can do with `not` groups unless or until we start\n // smashing comparison operators against indexes -- at which point we could\n // perform some reversal here.\n candidateResults = await this.getAll(storeName);\n }\n const filtered = predicateObjs\n ? candidateResults.filter(m => validatePredicate(m, type, predicateObjs))\n : candidateResults;\n return filtered;\n }\n inMemoryPagination(records, pagination) {\n return inMemoryPagination(records, pagination);\n }\n async enginePagination(storeName, pagination) {\n let result;\n if (pagination) {\n const { page = 0, limit = 0 } = pagination;\n const initialRecord = Math.max(0, page * limit) || 0;\n let cursor = await this.db\n .transaction(storeName)\n .objectStore(storeName)\n .openCursor();\n if (cursor && initialRecord > 0) {\n await cursor.advance(initialRecord);\n }\n const pageResults = [];\n const hasLimit = typeof limit === 'number' && limit > 0;\n while (cursor && cursor.value) {\n pageResults.push(cursor.value);\n if (hasLimit && pageResults.length === limit) {\n break;\n }\n cursor = await cursor.continue();\n }\n result = pageResults;\n }\n else {\n result = await this.db.getAll(storeName);\n }\n return result;\n }\n}\nexport default new IndexedDBAdapter();\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IndexedDBAdapter.mjs","sources":["../../../../src/storage/adapter/IndexedDBAdapter.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport * as idb from 'idb';\nimport { ConsoleLogger } from '@aws-amplify/core';\nimport { OpType, QueryOne, isPredicateGroup, isPredicateObj, } from '../../types';\nimport { getStorename, inMemoryPagination, isPrivateMode, isSafariCompatabilityMode, keysEqual, traverseModel, validatePredicate, } from '../../util';\nimport { StorageAdapterBase } from './StorageAdapterBase';\nconst logger = new ConsoleLogger('DataStore');\n/**\n * The point after which queries composed of multiple simple OR conditions\n * should scan-and-filter instead of individual queries for each condition.\n *\n * At some point, this should be configurable and/or dynamic based on table\n * size and possibly even on observed average seek latency. For now, it's\n * based on an manual \"binary search\" for the breakpoint as measured in the\n * unit test suite. This isn't necessarily optimal. But, it's at least derived\n * empirically, rather than theoretically and without any verification!\n *\n * REMEMBER! If you run more realistic benchmarks and update this value, update\n * this comment so the validity and accuracy of future query tuning exercises\n * can be compared to the methods used to derive the current value. E.g.,\n *\n * 1. In browser benchmark > unit test benchmark\n * 2. Multi-browser benchmark > single browser benchmark\n * 3. Benchmarks of various table sizes > static table size benchmark\n *\n * etc...\n *\n */\nconst MULTI_OR_CONDITION_SCAN_BREAKPOINT = 7;\n//\nconst DB_VERSION = 3;\nclass IndexedDBAdapter extends StorageAdapterBase {\n constructor() {\n super(...arguments);\n this.safariCompatabilityMode = false;\n /**\n * Checks the given path against the browser's IndexedDB implementation for\n * necessary compatibility transformations, applying those transforms if needed.\n *\n * @param `keyArr` strings to compatibilize for browser-indexeddb index operations\n * @returns An array or string, depending on and given key,\n * that is ensured to be compatible with the IndexedDB implementation's nuances.\n */\n this.canonicalKeyPath = (keyArr) => {\n if (this.safariCompatabilityMode) {\n return keyArr.length > 1 ? keyArr : keyArr[0];\n }\n return keyArr;\n };\n // #endregion\n }\n // checks are called by StorageAdapterBase class\n async preSetUpChecks() {\n await this.checkPrivate();\n await this.setSafariCompatabilityMode();\n }\n async preOpCheck() {\n await this.checkPrivate();\n }\n /**\n * Initialize IndexedDB database\n * Create new DB if one doesn't exist\n * Upgrade outdated DB\n *\n * Called by `StorageAdapterBase.setUp()`\n *\n * @returns IDB Database instance\n */\n async initDb() {\n return idb.openDB(this.dbName, DB_VERSION, {\n upgrade: async (db, oldVersion, newVersion, txn) => {\n // create new database\n if (oldVersion === 0) {\n Object.keys(this.schema.namespaces).forEach(namespaceName => {\n const namespace = this.schema.namespaces[namespaceName];\n Object.keys(namespace.models).forEach(modelName => {\n const storeName = getStorename(namespaceName, modelName);\n this.createObjectStoreForModel(db, namespaceName, storeName, modelName);\n });\n });\n return;\n }\n // migrate existing database to latest schema\n if ((oldVersion === 1 || oldVersion === 2) && newVersion === 3) {\n try {\n for (const storeName of txn.objectStoreNames) {\n const origStore = txn.objectStore(storeName);\n // rename original store\n const tmpName = `tmp_${storeName}`;\n origStore.name = tmpName;\n const { namespaceName, modelName } = this.getNamespaceAndModelFromStorename(storeName);\n const modelInCurrentSchema = modelName in this.schema.namespaces[namespaceName].models;\n if (!modelInCurrentSchema) {\n // delete original\n db.deleteObjectStore(tmpName);\n continue;\n }\n const newStore = this.createObjectStoreForModel(db, namespaceName, storeName, modelName);\n let cursor = await origStore.openCursor();\n let count = 0;\n // Copy data from original to new\n while (cursor && cursor.value) {\n // we don't pass key, since they are all new entries in the new store\n await newStore.put(cursor.value);\n cursor = await cursor.continue();\n count++;\n }\n // delete original\n db.deleteObjectStore(tmpName);\n logger.debug(`${count} ${storeName} records migrated`);\n }\n // add new models created after IndexedDB, but before migration\n // this case may happen when a user has not opened an app for\n // some time and a new model is added during that time\n Object.keys(this.schema.namespaces).forEach(namespaceName => {\n const namespace = this.schema.namespaces[namespaceName];\n const objectStoreNames = new Set(txn.objectStoreNames);\n Object.keys(namespace.models)\n .map(modelName => {\n return [modelName, getStorename(namespaceName, modelName)];\n })\n .filter(([, storeName]) => !objectStoreNames.has(storeName))\n .forEach(([modelName, storeName]) => {\n this.createObjectStoreForModel(db, namespaceName, storeName, modelName);\n });\n });\n }\n catch (error) {\n logger.error('Error migrating IndexedDB data', error);\n txn.abort();\n throw error;\n }\n }\n },\n });\n }\n async _get(storeOrStoreName, keyArr) {\n let index;\n if (typeof storeOrStoreName === 'string') {\n const storeName = storeOrStoreName;\n index = this.db.transaction(storeName, 'readonly').store.index('byPk');\n }\n else {\n const store = storeOrStoreName;\n index = store.index('byPk');\n }\n const result = await index.get(this.canonicalKeyPath(keyArr));\n return result;\n }\n async clear() {\n await this.checkPrivate();\n this.db?.close();\n await idb.deleteDB(this.dbName);\n this.db = undefined;\n this.initPromise = undefined;\n }\n async save(model, condition) {\n await this.checkPrivate();\n const { storeName, set, connectionStoreNames, modelKeyValues } = this.saveMetadata(model);\n const tx = this.db.transaction([storeName, ...Array.from(set.values())], 'readwrite');\n const store = tx.objectStore(storeName);\n const fromDB = await this._get(store, 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 storeForRestItem = tx.objectStore(storeNameForRestItem);\n const itemKeyValues = keys.map(key => item[key]);\n const fromDBForRestItem = (await this._get(storeForRestItem, itemKeyValues));\n const opType = fromDBForRestItem ? OpType.UPDATE : OpType.INSERT;\n if (keysEqual(itemKeyValues, modelKeyValues) ||\n opType === OpType.INSERT) {\n const key = await storeForRestItem\n .index('byPk')\n .getKey(this.canonicalKeyPath(itemKeyValues));\n await storeForRestItem.put(item, key);\n result.push([instance, opType]);\n }\n }\n await tx.done;\n return result;\n }\n async query(modelConstructor, predicate, pagination) {\n await this.checkPrivate();\n const { storeName, namespaceName, queryByKey, predicates, hasSort, hasPagination, } = this.queryMetadata(modelConstructor, predicate, pagination);\n const records = (await (async () => {\n //\n // NOTE: @svidgen explored removing this and letting query() take care of automatic\n // index leveraging. This would eliminate some amount of very similar code.\n // But, getAll is slightly slower than get()\n //\n // On Chrome:\n // ~700ms vs ~1175ms per 10k reads.\n //\n // You can (and should) check my work here:\n // \thttps://gist.github.com/svidgen/74e55d573b19c3e5432b1b5bdf0f4d96\n //\n if (queryByKey) {\n const record = await this.getByKey(storeName, queryByKey);\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) {\n const all = await this.getAll(storeName);\n return this.inMemoryPagination(all, pagination);\n }\n if (hasPagination) {\n return this.enginePagination(storeName, pagination);\n }\n return this.getAll(storeName);\n })());\n return this.load(namespaceName, modelConstructor.name, records);\n }\n async queryOne(modelConstructor, firstOrLast = QueryOne.FIRST) {\n await this.checkPrivate();\n const storeName = this.getStorenameForModel(modelConstructor);\n const cursor = await this.db\n .transaction([storeName], 'readonly')\n .objectStore(storeName)\n .openCursor(undefined, firstOrLast === QueryOne.FIRST ? 'next' : 'prev');\n const result = cursor ? cursor.value : undefined;\n return result && this.modelInstanceCreator(modelConstructor, result);\n }\n async batchSave(modelConstructor, items) {\n await this.checkPrivate();\n if (items.length === 0) {\n return [];\n }\n const modelName = modelConstructor.name;\n const namespaceName = this.namespaceResolver(modelConstructor);\n const storeName = this.getStorenameForModel(modelConstructor);\n const result = [];\n const txn = this.db.transaction(storeName, 'readwrite');\n const { store } = txn;\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 keyValues = this.getIndexKeyValuesFromModel(model);\n const { _deleted } = item;\n const index = store.index('byPk');\n const key = await index.getKey(this.canonicalKeyPath(keyValues));\n if (!_deleted) {\n const { instance } = connectedModels.find(({ instance: connectedModelInstance }) => {\n const instanceKeyValues = this.getIndexKeyValuesFromModel(connectedModelInstance);\n return keysEqual(instanceKeyValues, keyValues);\n });\n result.push([\n instance,\n key ? OpType.UPDATE : OpType.INSERT,\n ]);\n await store.put(instance, key);\n }\n else {\n result.push([item, OpType.DELETE]);\n if (key) {\n await store.delete(key);\n }\n }\n }\n await txn.done;\n return result;\n }\n async deleteItem(deleteQueue) {\n const connectionStoreNames = deleteQueue.map(({ storeName }) => {\n return storeName;\n });\n const tx = this.db.transaction([...connectionStoreNames], 'readwrite');\n for await (const deleteItem of deleteQueue) {\n const { storeName, items } = deleteItem;\n const store = tx.objectStore(storeName);\n for await (const item of items) {\n if (item) {\n let key;\n if (typeof item === 'object') {\n const keyValues = this.getIndexKeyValuesFromModel(item);\n key = await store\n .index('byPk')\n .getKey(this.canonicalKeyPath(keyValues));\n }\n else {\n const itemKey = item.toString();\n key = await store.index('byPk').getKey(itemKey);\n }\n if (key !== undefined) {\n await store.delete(key);\n }\n }\n }\n }\n }\n // #region platform-specific helper methods\n async checkPrivate() {\n const isPrivate = await isPrivateMode();\n if (isPrivate) {\n logger.error(\"IndexedDB not supported in this browser's private mode\");\n // eslint-disable-next-line prefer-promise-reject-errors\n return Promise.reject(\"IndexedDB not supported in this browser's private mode\");\n }\n else {\n return Promise.resolve();\n }\n }\n /**\n * Whether the browser's implementation of IndexedDB is coercing single-field\n * indexes to a scalar key.\n *\n * If this returns `true`, we need to treat indexes containing a single field\n * as scalars.\n *\n * See PR description for reference:\n * https://github.com/aws-amplify/amplify-js/pull/10527\n */\n async setSafariCompatabilityMode() {\n this.safariCompatabilityMode = await isSafariCompatabilityMode();\n if (this.safariCompatabilityMode === true) {\n logger.debug('IndexedDB Adapter is running in Safari Compatability Mode');\n }\n }\n getNamespaceAndModelFromStorename(storeName) {\n const [namespaceName, ...modelNameArr] = storeName.split('_');\n return {\n namespaceName,\n modelName: modelNameArr.join('_'),\n };\n }\n createObjectStoreForModel(db, namespaceName, storeName, modelName) {\n const store = db.createObjectStore(storeName, {\n autoIncrement: true,\n });\n const { indexes } = this.schema.namespaces[namespaceName].relationships[modelName];\n indexes.forEach(([idxName, keyPath, options]) => {\n store.createIndex(idxName, keyPath, options);\n });\n return store;\n }\n async getByKey(storeName, keyValue) {\n return (await this._get(storeName, keyValue));\n }\n async getAll(storeName) {\n return this.db.getAll(storeName);\n }\n /**\n * Tries to generate an index fetcher for the given predicates. Assumes\n * that the given predicate conditions are contained by an AND group and\n * should therefore all match a single record.\n *\n * @param storeName The table to query.\n * @param predicates The predicates to try to AND together.\n * @param transaction\n */\n matchingIndexQueries(storeName, predicates, transaction) {\n // could be expanded later to include `exec()` and a `cardinality` estimate?\n const queries = [];\n const predicateIndex = new Map();\n for (const predicate of predicates) {\n predicateIndex.set(String(predicate.field), predicate);\n }\n const store = transaction.objectStore(storeName);\n for (const name of store.indexNames) {\n const idx = store.index(name);\n const keypath = Array.isArray(idx.keyPath) ? idx.keyPath : [idx.keyPath];\n const matchingPredicateValues = [];\n for (const field of keypath) {\n const p = predicateIndex.get(field);\n if (p && p.operand !== null && p.operand !== undefined) {\n matchingPredicateValues.push(p.operand);\n }\n else {\n break;\n }\n }\n // if we have a matching predicate field for each component of this index,\n // we can build a query for it. otherwise, we can't.\n if (matchingPredicateValues.length === keypath.length) {\n // re-create a transaction, because the transaction used to fetch the\n // indexes may no longer be active.\n queries.push(() => this.db\n .transaction(storeName)\n .objectStore(storeName)\n .index(name)\n .getAll(this.canonicalKeyPath(matchingPredicateValues)));\n }\n }\n return queries;\n }\n async baseQueryIndex(storeName, predicates, transaction) {\n let { predicates: predicateObjs, type } = predicates;\n // the predicate objects we care about tend to be nested at least\n // one level down: `{and: {or: {and: { <the predicates we want> }}}}`\n // so, we unpack and/or groups until we find a group with more than 1\n // child OR a child that is not a group (and is therefore a predicate \"object\").\n while (predicateObjs.length === 1 &&\n isPredicateGroup(predicateObjs[0]) &&\n predicateObjs[0].type !== 'not') {\n ({ type } = predicateObjs[0]);\n predicateObjs = predicateObjs[0].predicates;\n }\n const fieldPredicates = predicateObjs.filter(p => isPredicateObj(p) && p.operator === 'eq');\n // several sub-queries could occur here. explicitly start a txn here to avoid\n // opening/closing multiple txns.\n const txn = transaction || this.db.transaction(storeName);\n let result = {};\n // `or` conditions, if usable, need to generate multiple queries. this is unlike\n // `and` conditions, which should just be combined.\n if (type === 'or') {\n /**\n * Base queries for each child group.\n *\n * For each child group, if it's an AND condition that results in a single\n * subordinate \"base query\", we can use it. if it's any more complicated\n * than that, it's not a simple join condition we want to use.\n */\n const groupQueries = await Promise.all(predicateObjs\n .filter(o => isPredicateGroup(o) && o.type === 'and')\n .map(o => this.baseQueryIndex(storeName, o, txn))).then(queries => queries\n .filter(q => q.indexedQueries.length === 1)\n .map(i => i.indexedQueries));\n /**\n * Base queries for each simple child \"object\" (field condition).\n */\n const objectQueries = predicateObjs\n .filter(o => isPredicateObj(o))\n .map(o => this.matchingIndexQueries(storeName, [o], txn));\n const indexedQueries = [...groupQueries, ...objectQueries]\n .map(q => q[0])\n .filter(i => i);\n // if, after hunting for base queries, we don't have exactly 1 base query\n // for each child group + object, stop trying to optimize. we're not dealing\n // with a simple query that fits the intended optimization path.\n if (predicateObjs.length > indexedQueries.length) {\n result = {\n groupType: null,\n indexedQueries: [],\n };\n }\n else {\n result = {\n groupType: 'or',\n indexedQueries,\n };\n }\n }\n else if (type === 'and') {\n // our potential indexes or lacks thereof.\n // note that we're only optimizing for `eq` right now.\n result = {\n groupType: type,\n indexedQueries: this.matchingIndexQueries(storeName, fieldPredicates, txn),\n };\n }\n else {\n result = {\n groupType: null,\n indexedQueries: [],\n };\n }\n // Explicitly wait for txns from index queries to complete before proceding.\n // This helps ensure IndexedDB is in a stable, ready state. Else, subseqeuent\n // qeuries can sometimes appear to deadlock (at least in FakeIndexedDB).\n // (Unless we were *given* the transaction -- we'll assume the parent handles it.)\n if (!transaction)\n await txn.done;\n return result;\n }\n async filterOnPredicate(storeName, predicates) {\n const { predicates: predicateObjs, type } = predicates;\n const { groupType, indexedQueries } = await this.baseQueryIndex(storeName, predicates);\n // where we'll accumulate candidate results, which will be filtered at the end.\n let candidateResults;\n // semi-naive implementation:\n if (groupType === 'and' && indexedQueries.length > 0) {\n // each condition must be satsified, we can form a base set with any\n // ONE of those conditions and then filter.\n candidateResults = await indexedQueries[0]();\n }\n else if (groupType === 'or' &&\n indexedQueries.length > 0 &&\n indexedQueries.length <= MULTI_OR_CONDITION_SCAN_BREAKPOINT) {\n // NOTE: each condition implies a potentially distinct set. we only benefit\n // from using indexes here if EVERY condition uses an index. if any one\n // index requires a table scan, we gain nothing from the indexes.\n // NOTE: results must be DISTINCT-ified if we leverage indexes.\n const distinctResults = new Map();\n for (const query of indexedQueries) {\n const resultGroup = await query();\n for (const item of resultGroup) {\n const distinctificationString = JSON.stringify(item);\n distinctResults.set(distinctificationString, item);\n }\n }\n // we could conceivably check for special conditions and return early here.\n // but, this is simpler and has not yet had a measurable performance impact.\n candidateResults = Array.from(distinctResults.values());\n }\n else {\n // nothing intelligent we can do with `not` groups unless or until we start\n // smashing comparison operators against indexes -- at which point we could\n // perform some reversal here.\n candidateResults = (await this.getAll(storeName));\n }\n const filtered = predicateObjs\n ? candidateResults.filter(m => validatePredicate(m, type, predicateObjs))\n : candidateResults;\n return filtered;\n }\n inMemoryPagination(records, pagination) {\n return inMemoryPagination(records, pagination);\n }\n async enginePagination(storeName, pagination) {\n let result;\n if (pagination) {\n const { page = 0, limit = 0 } = pagination;\n const initialRecord = Math.max(0, page * limit) || 0;\n let cursor = await this.db\n .transaction(storeName)\n .objectStore(storeName)\n .openCursor();\n if (cursor && initialRecord > 0) {\n await cursor.advance(initialRecord);\n }\n const pageResults = [];\n const hasLimit = typeof limit === 'number' && limit > 0;\n while (cursor && cursor.value) {\n pageResults.push(cursor.value);\n if (hasLimit && pageResults.length === limit) {\n break;\n }\n cursor = await cursor.continue();\n }\n result = pageResults;\n }\n else {\n result = (await this.db.getAll(storeName));\n }\n return result;\n }\n}\nexport default new IndexedDBAdapter();\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
2
2
|
import { ModelInstanceCreator } from '../../datastore/datastore';
|
|
3
3
|
import { InternalSchema, ModelInstanceMetadata, ModelPredicate, NamespaceResolver, OpType, PaginationInput, PersistentModel, PersistentModelConstructor, PredicatesGroup, QueryOne } from '../../types';
|
|
4
4
|
import { NAMESPACES } from '../../util';
|
|
5
|
-
import type { IDBPDatabase, IDBPObjectStore } from 'idb';
|
|
6
5
|
import type AsyncStorageDatabase from './AsyncStorageDatabase';
|
|
6
|
+
import { Adapter } from './index';
|
|
7
7
|
export declare abstract class StorageAdapterBase implements Adapter {
|
|
8
8
|
protected schema: InternalSchema;
|
|
9
9
|
protected namespaceResolver: NamespaceResolver;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { ConsoleLogger } from '@aws-amplify/core';
|
|
1
2
|
import { ModelPredicateCreator } from '../../predicates/index.mjs';
|
|
2
3
|
import { isPredicateObj } from '../../types.mjs';
|
|
3
4
|
import { getStorename, getIndexKeys, extractPrimaryKeyValues, traverseModel, validatePredicate, isModelConstructor, extractPrimaryKeyFieldNames } from '../../util.mjs';
|
|
4
5
|
import { ModelRelationship } from '../relationship.mjs';
|
|
5
|
-
import { ConsoleLogger } from '@aws-amplify/core';
|
|
6
6
|
|
|
7
7
|
const logger = new ConsoleLogger('DataStore');
|
|
8
8
|
const DB_NAME = 'amplify-datastore';
|
|
@@ -22,9 +22,9 @@ class StorageAdapterBase {
|
|
|
22
22
|
async setUp(theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName, sessionId) {
|
|
23
23
|
await this.preSetUpChecks();
|
|
24
24
|
if (!this.initPromise) {
|
|
25
|
-
this.initPromise = new Promise((
|
|
26
|
-
this.resolve =
|
|
27
|
-
this.reject =
|
|
25
|
+
this.initPromise = new Promise((resolve, reject) => {
|
|
26
|
+
this.resolve = resolve;
|
|
27
|
+
this.reject = reject;
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
else {
|
|
@@ -83,10 +83,10 @@ class StorageAdapterBase {
|
|
|
83
83
|
const connectedModels = traverseModel(modelConstructor.name, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);
|
|
84
84
|
const set = new Set();
|
|
85
85
|
const connectionStoreNames = Object.values(connectedModels).map(({ modelName, item, instance }) => {
|
|
86
|
-
const
|
|
87
|
-
set.add(
|
|
86
|
+
const resolvedStoreName = getStorename(namespaceName, modelName);
|
|
87
|
+
set.add(resolvedStoreName);
|
|
88
88
|
const keys = getIndexKeys(this.schema.namespaces[namespaceName], modelName);
|
|
89
|
-
return { storeName, item, instance, keys };
|
|
89
|
+
return { storeName: resolvedStoreName, item, instance, keys };
|
|
90
90
|
});
|
|
91
91
|
const modelKeyValues = this.getIndexKeyValuesFromModel(model);
|
|
92
92
|
return { storeName, set, connectionStoreNames, modelKeyValues };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAdapterBase.mjs","sources":["../../../../src/storage/adapter/StorageAdapterBase.ts"],"sourcesContent":["import { ModelPredicateCreator } from '../../predicates';\nimport { isPredicateObj, } from '../../types';\nimport { getStorename, getIndexKeys, extractPrimaryKeyValues, traverseModel, validatePredicate, isModelConstructor, extractPrimaryKeyFieldNames, } from '../../util';\nimport { ModelRelationship } from '../relationship';\nimport { ConsoleLogger } from '@aws-amplify/core';\nconst logger = new ConsoleLogger('DataStore');\nconst DB_NAME = 'amplify-datastore';\nexport class StorageAdapterBase {\n constructor() {\n this.dbName = DB_NAME;\n }\n /**\n * Initializes local DB\n *\n * @param theSchema\n * @param namespaceResolver\n * @param modelInstanceCreator\n * @param getModelConstructorByModelName\n * @param sessionId\n */\n async setUp(theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName, sessionId) {\n await this.preSetUpChecks();\n if (!this.initPromise) {\n this.initPromise = new Promise((res, rej) => {\n this.resolve = res;\n this.reject = rej;\n });\n }\n else {\n await this.initPromise;\n return;\n }\n if (sessionId) {\n this.dbName = `${DB_NAME}-${sessionId}`;\n }\n this.schema = theSchema;\n this.namespaceResolver = namespaceResolver;\n this.modelInstanceCreator = modelInstanceCreator;\n this.getModelConstructorByModelName = getModelConstructorByModelName;\n try {\n if (!this.db) {\n this.db = await this.initDb();\n this.resolve();\n }\n }\n catch (error) {\n this.reject(error);\n }\n }\n /**\n * @param modelConstructor\n * @returns local DB table name\n */\n getStorenameForModel(modelConstructor) {\n const namespace = this.namespaceResolver(modelConstructor);\n const { name: modelName } = modelConstructor;\n return getStorename(namespace, modelName);\n }\n /**\n *\n * @param model - instantiated model record\n * @returns the record's primary key values\n */\n getIndexKeyValuesFromModel(model) {\n const modelConstructor = Object.getPrototypeOf(model)\n .constructor;\n const namespaceName = this.namespaceResolver(modelConstructor);\n const keys = getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);\n return extractPrimaryKeyValues(model, keys);\n }\n /**\n * Common metadata for `save` operation\n * used by individual storage adapters\n *\n * @param model\n */\n saveMetadata(model) {\n const modelConstructor = Object.getPrototypeOf(model)\n .constructor;\n const storeName = this.getStorenameForModel(modelConstructor);\n const namespaceName = this.namespaceResolver(modelConstructor);\n const connectedModels = traverseModel(modelConstructor.name, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);\n const set = new Set();\n const connectionStoreNames = Object.values(connectedModels).map(({ modelName, item, instance }) => {\n const storeName = getStorename(namespaceName, modelName);\n set.add(storeName);\n const keys = getIndexKeys(this.schema.namespaces[namespaceName], modelName);\n return { storeName, item, instance, keys };\n });\n const modelKeyValues = this.getIndexKeyValuesFromModel(model);\n return { storeName, set, connectionStoreNames, modelKeyValues };\n }\n /**\n * Enforces conditional save. Throws if condition is not met.\n * used by individual storage adapters\n *\n * @param model\n */\n validateSaveCondition(condition, fromDB) {\n if (!(condition && fromDB)) {\n return;\n }\n const predicates = ModelPredicateCreator.getPredicates(condition);\n const { predicates: predicateObjs, type } = predicates;\n const isValid = validatePredicate(fromDB, type, predicateObjs);\n if (!isValid) {\n const msg = 'Conditional update failed';\n logger.error(msg, { model: fromDB, condition: predicateObjs });\n throw new Error(msg);\n }\n }\n /**\n * Instantiate models from POJO records returned from the database\n *\n * @param namespaceName - string model namespace\n * @param srcModelName - string model name\n * @param records - array of uninstantiated records\n * @returns\n */\n async load(namespaceName, srcModelName, records) {\n const namespace = this.schema.namespaces[namespaceName];\n const relations = namespace.relationships[srcModelName].relationTypes;\n const connectionStoreNames = relations.map(({ modelName }) => {\n return getStorename(namespaceName, modelName);\n });\n const modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);\n if (connectionStoreNames.length === 0) {\n return records.map(record => this.modelInstanceCreator(modelConstructor, record));\n }\n return records.map(record => this.modelInstanceCreator(modelConstructor, record));\n }\n /**\n * Extracts operands from a predicate group into an array of key values\n * Used in the query method\n *\n * @param predicates - predicate group\n * @param keyPath - string array of key names ['id', 'sortKey']\n * @returns string[] of key values\n *\n * @example\n * ```js\n * { and:[{ id: { eq: 'abc' }}, { sortKey: { eq: 'def' }}] }\n * ```\n * Becomes\n * ```\n * ['abc', 'def']\n * ```\n */\n keyValueFromPredicate(predicates, keyPath) {\n const { predicates: predicateObjs } = predicates;\n if (predicateObjs.length !== keyPath.length) {\n return;\n }\n const keyValues = [];\n for (const key of keyPath) {\n const predicateObj = predicateObjs.find(p => \n // it's a relevant predicate object only if it's an equality\n // operation for a key field from the key:\n isPredicateObj(p) &&\n p.field === key &&\n p.operator === 'eq' &&\n p.operand !== null &&\n p.operand !== undefined);\n predicateObj && keyValues.push(predicateObj.operand);\n }\n return keyValues.length === keyPath.length ? keyValues : undefined;\n }\n /**\n * Common metadata for `query` operation\n * used by individual storage adapters\n *\n * @param modelConstructor\n * @param predicate\n * @param pagination\n */\n queryMetadata(modelConstructor, predicate, pagination) {\n const storeName = this.getStorenameForModel(modelConstructor);\n const namespaceName = this.namespaceResolver(modelConstructor);\n const predicates = predicate && ModelPredicateCreator.getPredicates(predicate);\n const keyPath = getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);\n const queryByKey = predicates && this.keyValueFromPredicate(predicates, keyPath);\n const hasSort = pagination && pagination.sort;\n const hasPagination = pagination && pagination.limit;\n return {\n storeName,\n namespaceName,\n queryByKey,\n predicates,\n hasSort,\n hasPagination,\n };\n }\n /**\n * Delete record\n * Cascades to related records (for Has One and Has Many relationships)\n *\n * @param modelOrModelConstructor\n * @param condition\n * @returns\n */\n async delete(modelOrModelConstructor, condition) {\n await this.preOpCheck();\n const deleteQueue = [];\n if (isModelConstructor(modelOrModelConstructor)) {\n const modelConstructor = modelOrModelConstructor;\n const namespace = this.namespaceResolver(modelConstructor);\n const models = await this.query(modelConstructor, condition);\n if (condition !== undefined) {\n await this.deleteTraverse(models, modelConstructor, namespace, deleteQueue);\n await this.deleteItem(deleteQueue);\n const deletedModels = deleteQueue.reduce((acc, { items }) => acc.concat(items), []);\n return [models, deletedModels];\n }\n else {\n await this.deleteTraverse(models, modelConstructor, namespace, deleteQueue);\n await this.deleteItem(deleteQueue);\n const deletedModels = deleteQueue.reduce((acc, { items }) => acc.concat(items), []);\n return [models, deletedModels];\n }\n }\n else {\n const model = modelOrModelConstructor;\n const modelConstructor = Object.getPrototypeOf(model)\n .constructor;\n const namespaceName = this.namespaceResolver(modelConstructor);\n const storeName = this.getStorenameForModel(modelConstructor);\n if (condition) {\n const keyValues = this.getIndexKeyValuesFromModel(model);\n const fromDB = await this._get(storeName, keyValues);\n if (fromDB === undefined) {\n const msg = 'Model instance not found in storage';\n logger.warn(msg, { model });\n return [[model], []];\n }\n const predicates = ModelPredicateCreator.getPredicates(condition);\n const { predicates: predicateObjs, type } = predicates;\n const isValid = validatePredicate(fromDB, type, predicateObjs);\n if (!isValid) {\n const msg = 'Conditional update failed';\n logger.error(msg, { model: fromDB, condition: predicateObjs });\n throw new Error(msg);\n }\n await this.deleteTraverse([model], modelConstructor, namespaceName, deleteQueue);\n }\n else {\n await this.deleteTraverse([model], modelConstructor, namespaceName, deleteQueue);\n }\n await this.deleteItem(deleteQueue);\n const deletedModels = deleteQueue.reduce((acc, { items }) => acc.concat(items), []);\n return [[model], deletedModels];\n }\n }\n /**\n * Recursively traverse relationship graph and add\n * all Has One and Has Many relations to `deleteQueue` param\n *\n * Actual deletion of records added to `deleteQueue` occurs in the `delete` method\n *\n * @param models\n * @param modelConstructor\n * @param namespace\n * @param deleteQueue\n */\n async deleteTraverse(models, modelConstructor, namespace, deleteQueue) {\n const cascadingRelationTypes = ['HAS_ONE', 'HAS_MANY'];\n for await (const model of models) {\n const modelDefinition = this.schema.namespaces[namespace].models[modelConstructor.name];\n const modelMeta = {\n builder: modelConstructor,\n schema: modelDefinition,\n pkField: extractPrimaryKeyFieldNames(modelDefinition),\n };\n const relationships = ModelRelationship.allFrom(modelMeta).filter(r => cascadingRelationTypes.includes(r.type));\n for await (const r of relationships) {\n const queryObject = r.createRemoteQueryObject(model);\n if (queryObject !== null) {\n const relatedRecords = await this.query(r.remoteModelConstructor, ModelPredicateCreator.createFromFlatEqualities(r.remoteDefinition, queryObject));\n await this.deleteTraverse(relatedRecords, r.remoteModelConstructor, namespace, deleteQueue);\n }\n }\n }\n deleteQueue.push({\n storeName: getStorename(namespace, modelConstructor.name),\n items: models,\n });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StorageAdapterBase.mjs","sources":["../../../../src/storage/adapter/StorageAdapterBase.ts"],"sourcesContent":["import { ConsoleLogger } from '@aws-amplify/core';\nimport { ModelPredicateCreator } from '../../predicates';\nimport { isPredicateObj, } from '../../types';\nimport { extractPrimaryKeyFieldNames, extractPrimaryKeyValues, getIndexKeys, getStorename, isModelConstructor, traverseModel, validatePredicate, } from '../../util';\nimport { ModelRelationship } from '../relationship';\nconst logger = new ConsoleLogger('DataStore');\nconst DB_NAME = 'amplify-datastore';\nexport class StorageAdapterBase {\n constructor() {\n this.dbName = DB_NAME;\n }\n /**\n * Initializes local DB\n *\n * @param theSchema\n * @param namespaceResolver\n * @param modelInstanceCreator\n * @param getModelConstructorByModelName\n * @param sessionId\n */\n async setUp(theSchema, namespaceResolver, modelInstanceCreator, getModelConstructorByModelName, sessionId) {\n await this.preSetUpChecks();\n if (!this.initPromise) {\n this.initPromise = new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n });\n }\n else {\n await this.initPromise;\n return;\n }\n if (sessionId) {\n this.dbName = `${DB_NAME}-${sessionId}`;\n }\n this.schema = theSchema;\n this.namespaceResolver = namespaceResolver;\n this.modelInstanceCreator = modelInstanceCreator;\n this.getModelConstructorByModelName = getModelConstructorByModelName;\n try {\n if (!this.db) {\n this.db = await this.initDb();\n this.resolve();\n }\n }\n catch (error) {\n this.reject(error);\n }\n }\n /**\n * @param modelConstructor\n * @returns local DB table name\n */\n getStorenameForModel(modelConstructor) {\n const namespace = this.namespaceResolver(modelConstructor);\n const { name: modelName } = modelConstructor;\n return getStorename(namespace, modelName);\n }\n /**\n *\n * @param model - instantiated model record\n * @returns the record's primary key values\n */\n getIndexKeyValuesFromModel(model) {\n const modelConstructor = Object.getPrototypeOf(model)\n .constructor;\n const namespaceName = this.namespaceResolver(modelConstructor);\n const keys = getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);\n return extractPrimaryKeyValues(model, keys);\n }\n /**\n * Common metadata for `save` operation\n * used by individual storage adapters\n *\n * @param model\n */\n saveMetadata(model) {\n const modelConstructor = Object.getPrototypeOf(model)\n .constructor;\n const storeName = this.getStorenameForModel(modelConstructor);\n const namespaceName = this.namespaceResolver(modelConstructor);\n const connectedModels = traverseModel(modelConstructor.name, model, this.schema.namespaces[namespaceName], this.modelInstanceCreator, this.getModelConstructorByModelName);\n const set = new Set();\n const connectionStoreNames = Object.values(connectedModels).map(({ modelName, item, instance }) => {\n const resolvedStoreName = getStorename(namespaceName, modelName);\n set.add(resolvedStoreName);\n const keys = getIndexKeys(this.schema.namespaces[namespaceName], modelName);\n return { storeName: resolvedStoreName, item, instance, keys };\n });\n const modelKeyValues = this.getIndexKeyValuesFromModel(model);\n return { storeName, set, connectionStoreNames, modelKeyValues };\n }\n /**\n * Enforces conditional save. Throws if condition is not met.\n * used by individual storage adapters\n *\n * @param model\n */\n validateSaveCondition(condition, fromDB) {\n if (!(condition && fromDB)) {\n return;\n }\n const predicates = ModelPredicateCreator.getPredicates(condition);\n const { predicates: predicateObjs, type } = predicates;\n const isValid = validatePredicate(fromDB, type, predicateObjs);\n if (!isValid) {\n const msg = 'Conditional update failed';\n logger.error(msg, { model: fromDB, condition: predicateObjs });\n throw new Error(msg);\n }\n }\n /**\n * Instantiate models from POJO records returned from the database\n *\n * @param namespaceName - string model namespace\n * @param srcModelName - string model name\n * @param records - array of uninstantiated records\n * @returns\n */\n async load(namespaceName, srcModelName, records) {\n const namespace = this.schema.namespaces[namespaceName];\n const relations = namespace.relationships[srcModelName].relationTypes;\n const connectionStoreNames = relations.map(({ modelName }) => {\n return getStorename(namespaceName, modelName);\n });\n const modelConstructor = this.getModelConstructorByModelName(namespaceName, srcModelName);\n if (connectionStoreNames.length === 0) {\n return records.map(record => this.modelInstanceCreator(modelConstructor, record));\n }\n return records.map(record => this.modelInstanceCreator(modelConstructor, record));\n }\n /**\n * Extracts operands from a predicate group into an array of key values\n * Used in the query method\n *\n * @param predicates - predicate group\n * @param keyPath - string array of key names ['id', 'sortKey']\n * @returns string[] of key values\n *\n * @example\n * ```js\n * { and:[{ id: { eq: 'abc' }}, { sortKey: { eq: 'def' }}] }\n * ```\n * Becomes\n * ```\n * ['abc', 'def']\n * ```\n */\n keyValueFromPredicate(predicates, keyPath) {\n const { predicates: predicateObjs } = predicates;\n if (predicateObjs.length !== keyPath.length) {\n return;\n }\n const keyValues = [];\n for (const key of keyPath) {\n const predicateObj = predicateObjs.find(p => \n // it's a relevant predicate object only if it's an equality\n // operation for a key field from the key:\n isPredicateObj(p) &&\n p.field === key &&\n p.operator === 'eq' &&\n p.operand !== null &&\n p.operand !== undefined);\n predicateObj && keyValues.push(predicateObj.operand);\n }\n return keyValues.length === keyPath.length ? keyValues : undefined;\n }\n /**\n * Common metadata for `query` operation\n * used by individual storage adapters\n *\n * @param modelConstructor\n * @param predicate\n * @param pagination\n */\n queryMetadata(modelConstructor, predicate, pagination) {\n const storeName = this.getStorenameForModel(modelConstructor);\n const namespaceName = this.namespaceResolver(modelConstructor);\n const predicates = predicate && ModelPredicateCreator.getPredicates(predicate);\n const keyPath = getIndexKeys(this.schema.namespaces[namespaceName], modelConstructor.name);\n const queryByKey = predicates && this.keyValueFromPredicate(predicates, keyPath);\n const hasSort = pagination && pagination.sort;\n const hasPagination = pagination && pagination.limit;\n return {\n storeName,\n namespaceName,\n queryByKey,\n predicates,\n hasSort,\n hasPagination,\n };\n }\n /**\n * Delete record\n * Cascades to related records (for Has One and Has Many relationships)\n *\n * @param modelOrModelConstructor\n * @param condition\n * @returns\n */\n async delete(modelOrModelConstructor, condition) {\n await this.preOpCheck();\n const deleteQueue = [];\n if (isModelConstructor(modelOrModelConstructor)) {\n const modelConstructor = modelOrModelConstructor;\n const namespace = this.namespaceResolver(modelConstructor);\n const models = await this.query(modelConstructor, condition);\n if (condition !== undefined) {\n await this.deleteTraverse(models, modelConstructor, namespace, deleteQueue);\n await this.deleteItem(deleteQueue);\n const deletedModels = deleteQueue.reduce((acc, { items }) => acc.concat(items), []);\n return [models, deletedModels];\n }\n else {\n await this.deleteTraverse(models, modelConstructor, namespace, deleteQueue);\n await this.deleteItem(deleteQueue);\n const deletedModels = deleteQueue.reduce((acc, { items }) => acc.concat(items), []);\n return [models, deletedModels];\n }\n }\n else {\n const model = modelOrModelConstructor;\n const modelConstructor = Object.getPrototypeOf(model)\n .constructor;\n const namespaceName = this.namespaceResolver(modelConstructor);\n const storeName = this.getStorenameForModel(modelConstructor);\n if (condition) {\n const keyValues = this.getIndexKeyValuesFromModel(model);\n const fromDB = await this._get(storeName, keyValues);\n if (fromDB === undefined) {\n const msg = 'Model instance not found in storage';\n logger.warn(msg, { model });\n return [[model], []];\n }\n const predicates = ModelPredicateCreator.getPredicates(condition);\n const { predicates: predicateObjs, type } = predicates;\n const isValid = validatePredicate(fromDB, type, predicateObjs);\n if (!isValid) {\n const msg = 'Conditional update failed';\n logger.error(msg, { model: fromDB, condition: predicateObjs });\n throw new Error(msg);\n }\n await this.deleteTraverse([model], modelConstructor, namespaceName, deleteQueue);\n }\n else {\n await this.deleteTraverse([model], modelConstructor, namespaceName, deleteQueue);\n }\n await this.deleteItem(deleteQueue);\n const deletedModels = deleteQueue.reduce((acc, { items }) => acc.concat(items), []);\n return [[model], deletedModels];\n }\n }\n /**\n * Recursively traverse relationship graph and add\n * all Has One and Has Many relations to `deleteQueue` param\n *\n * Actual deletion of records added to `deleteQueue` occurs in the `delete` method\n *\n * @param models\n * @param modelConstructor\n * @param namespace\n * @param deleteQueue\n */\n async deleteTraverse(models, modelConstructor, namespace, deleteQueue) {\n const cascadingRelationTypes = ['HAS_ONE', 'HAS_MANY'];\n for await (const model of models) {\n const modelDefinition = this.schema.namespaces[namespace].models[modelConstructor.name];\n const modelMeta = {\n builder: modelConstructor,\n schema: modelDefinition,\n pkField: extractPrimaryKeyFieldNames(modelDefinition),\n };\n const relationships = ModelRelationship.allFrom(modelMeta).filter(r => cascadingRelationTypes.includes(r.type));\n for await (const r of relationships) {\n const queryObject = r.createRemoteQueryObject(model);\n if (queryObject !== null) {\n const relatedRecords = await this.query(r.remoteModelConstructor, ModelPredicateCreator.createFromFlatEqualities(r.remoteDefinition, queryObject));\n await this.deleteTraverse(relatedRecords, r.remoteModelConstructor, namespace, deleteQueue);\n }\n }\n }\n deleteQueue.push({\n storeName: getStorename(namespace, modelConstructor.name),\n items: models,\n });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { isBrowser, isWebWorker } from '@aws-amplify/core/internals/utils';
|
|
1
2
|
import IndexedDBAdapter from '../IndexedDBAdapter.mjs';
|
|
2
3
|
import AsyncStorageAdapter from '../AsyncStorageAdapter.mjs';
|
|
3
|
-
import { isBrowser, isWebWorker } from '@aws-amplify/core/internals/utils';
|
|
4
4
|
|
|
5
|
+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
5
7
|
const getDefaultAdapter = () => {
|
|
6
8
|
if ((isBrowser && window.indexedDB) || (isWebWorker() && self.indexedDB)) {
|
|
7
9
|
return IndexedDBAdapter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../src/storage/adapter/getDefaultAdapter/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../src/storage/adapter/getDefaultAdapter/index.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { isBrowser, isWebWorker } from '@aws-amplify/core/internals/utils';\nimport IndexedDBAdapter from '../IndexedDBAdapter';\n// eslint-disable-next-line import/no-named-as-default\nimport AsyncStorageAdapter from '../AsyncStorageAdapter';\nconst getDefaultAdapter = () => {\n if ((isBrowser && window.indexedDB) || (isWebWorker() && self.indexedDB)) {\n return IndexedDBAdapter;\n }\n return AsyncStorageAdapter;\n};\nexport default getDefaultAdapter;\n"],"names":[],"mappings":";;;;AAAA;AACA;AAKK,MAAC,iBAAiB,GAAG,MAAM;AAChC,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,MAAM,WAAW,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE;AAC9E,QAAQ,OAAO,gBAAgB,CAAC;AAChC,KAAK;AACL,IAAI,OAAO,mBAAmB,CAAC;AAC/B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.native.mjs","sources":["../../../../../src/storage/adapter/getDefaultAdapter/index.native.ts"],"sourcesContent":["import AsyncStorageAdapter from '../AsyncStorageAdapter';\nconst getDefaultAdapter = () => {\n return AsyncStorageAdapter;\n};\nexport default getDefaultAdapter;\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.native.mjs","sources":["../../../../../src/storage/adapter/getDefaultAdapter/index.native.ts"],"sourcesContent":["// eslint-disable-next-line import/no-named-as-default\nimport AsyncStorageAdapter from '../AsyncStorageAdapter';\nconst getDefaultAdapter = () => {\n return AsyncStorageAdapter;\n};\nexport default getDefaultAdapter;\n"],"names":[],"mappings":";;AAAA;AAEK,MAAC,iBAAiB,GAAG,MAAM;AAChC,IAAI,OAAO,mBAAmB,CAAC;AAC/B;;;;"}
|
|
@@ -2,7 +2,7 @@ import { ModelInstanceMetadata, ModelPredicate, OpType, PaginationInput, Persist
|
|
|
2
2
|
export interface Adapter extends SystemComponent {
|
|
3
3
|
clear(): Promise<void>;
|
|
4
4
|
save<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>): Promise<[T, OpType.INSERT | OpType.UPDATE][]>;
|
|
5
|
-
delete
|
|
5
|
+
delete<T extends PersistentModel>(modelOrModelConstructor: T | PersistentModelConstructor<T>, condition?: ModelPredicate<T>): Promise<[T[], T[]]>;
|
|
6
6
|
query<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, predicate?: ModelPredicate<T>, pagination?: PaginationInput<T>): Promise<T[]>;
|
|
7
7
|
queryOne<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, firstOrLast: QueryOne): Promise<T | undefined>;
|
|
8
8
|
batchSave<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, items: ModelInstanceMetadata[]): Promise<[T, OpType][]>;
|
|
@@ -196,6 +196,7 @@ class ModelRelationship {
|
|
|
196
196
|
return [this.explicitRemoteAssociation.targetName];
|
|
197
197
|
}
|
|
198
198
|
else if (this.explicitRemoteAssociation?.targetNames) {
|
|
199
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain
|
|
199
200
|
return this.explicitRemoteAssociation?.targetNames;
|
|
200
201
|
}
|
|
201
202
|
else if (this.localAssociatedWith) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relationship.mjs","sources":["../../../src/storage/relationship.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { isFieldAssociation } from '../types';\n/**\n * Defines a relationship from a LOCAL model.field to a REMOTE model.field and helps\n * navigate the relationship, providing a simplified peek at the relationship details\n * pertinent to setting FK's and constructing join conditions.\n *\n * Because I mean, relationships are tough.\n *\n */\nexport class ModelRelationship {\n /**\n * @param modelDefinition The \"local\" model.\n * @param field The \"local\" model field.\n */\n constructor(model, field) {\n if (!isFieldAssociation(model.schema, field)) {\n throw new Error(`${model.schema.name}.${field} is not a relationship.`);\n }\n this.localModel = model;\n this._field = field;\n }\n /**\n * Returns a ModelRelationship for the the given model and field if the pair\n * indicates a relationship to another model. Else, returns `null`.\n *\n * @param model The model the relationship field exists in.\n * @param field The field that may relates the local model to the remote model.\n */\n static from(model, field) {\n if (isFieldAssociation(model.schema, field)) {\n return new this(model, field);\n }\n else {\n return null;\n }\n }\n /**\n * Enumerates all valid `ModelRelationship`'s on the given model.\n *\n * @param model The model definition to enumerate relationships of.\n */\n static allFrom(model) {\n const relationships = [];\n for (const field of Object.keys(model.schema.fields)) {\n const relationship = ModelRelationship.from(model, field);\n relationship && relationships.push(relationship);\n }\n return relationships;\n }\n get localDefinition() {\n return this.localModel.schema;\n }\n /**\n * The virtual/computed field on the local model that should contain\n * the related model.\n */\n get field() {\n return this._field;\n }\n /**\n * The constructor that can be used to query DataStore or create instance for\n * the local model.\n */\n get localConstructor() {\n return this.localModel.builder;\n }\n /**\n * The name/type of the relationship the local model has with the remote model\n * via the defined local model field.\n */\n get type() {\n return this.localAssocation.connectionType;\n }\n /**\n * Raw details about the local FK as-is from the local model's field definition in\n * the schema. This field requires interpretation.\n *\n * @see localJoinFields\n * @see localAssociatedWith\n */\n get localAssocation() {\n return this.localDefinition.fields[this.field].association;\n }\n /**\n * The field names on the local model that can be used to query or queried to match\n * with instances of the remote model.\n *\n * Fields are returned in-order to match the order of `this.remoteKeyFields`.\n */\n get localJoinFields() {\n /**\n * This is relatively straightforward, actually.\n *\n * If we have explicitly stated targetNames, codegen is telling us authoritatively\n * to use those fields for this relationship. The local model \"points to\" fields\n * in the remote one.\n *\n * In other cases, the remote model points to this one's\n */\n if (this.localAssocation.targetName) {\n // This case is theoretically unnecessary going forward.\n return [this.localAssocation.targetName];\n }\n else if (this.localAssocation.targetNames) {\n return this.localAssocation.targetNames;\n }\n else {\n return this.localPKFields;\n }\n }\n /**\n * The field names on the local model that uniquely identify it.\n *\n * These fields may or may not be relevant to the join fields.\n */\n get localPKFields() {\n return this.localModel.pkField;\n }\n get remoteDefinition() {\n return this.remoteModelType.modelConstructor?.schema;\n }\n get remoteModelType() {\n return this.localDefinition.fields[this.field].type;\n }\n /**\n * Constructor that can be used to query DataStore or create instances for\n * the remote model.\n */\n get remoteModelConstructor() {\n return this.remoteModelType.modelConstructor.builder;\n }\n /**\n * The field names on the remote model that uniquely identify it.\n *\n * These fields may or may not be relevant to the join fields.\n */\n get remotePKFields() {\n return this.remoteModelType.modelConstructor?.pkField || ['id'];\n }\n /**\n * The `associatedWith` fields from the local perspective.\n *\n * When present, these fields indicate which fields on the remote model to use\n * when looking for a remote association and/or determining the final remote\n * key fields.\n */\n get localAssociatedWith() {\n if (this.localAssocation.connectionType === 'HAS_MANY' ||\n this.localAssocation.connectionType === 'HAS_ONE') {\n // This de-arraying is theoretically unnecessary going forward.\n return Array.isArray(this.localAssocation.associatedWith)\n ? this.localAssocation.associatedWith\n : [this.localAssocation.associatedWith];\n }\n else {\n return undefined;\n }\n }\n /**\n * The `remote` model's associated field's `assocation` metadata, if\n * present.\n *\n * This is used when determining if the remote model's associated field\n * specifies which FK fields to use. If this value is `undefined`, the\n * name of the remote field (`this.localAssociatedWith`) *is* the remote\n * key field.\n */\n get explicitRemoteAssociation() {\n if (this.localAssociatedWith) {\n if (this.localAssociatedWith.length === 1) {\n return this.remoteDefinition.fields[this.localAssociatedWith[0]]\n ?.association;\n }\n else {\n return undefined;\n }\n }\n }\n /**\n * The field names on the remote model that can used to query or queried to match\n * with instances of the local model.\n *\n * Fields are returned in-order to match the order of `this.localKeyFields`.\n */\n get remoteJoinFields() {\n /**\n * If the local relationship explicitly names \"associated with\" fields, we\n * need to see if this points direction to a reciprocating assocation. If it\n * does, the remote assocation indicates what fields to use.\n */\n if (this.explicitRemoteAssociation?.targetName) {\n // This case is theoretically unnecessary going forward.\n return [this.explicitRemoteAssociation.targetName];\n }\n else if (this.explicitRemoteAssociation?.targetNames) {\n return this.explicitRemoteAssociation?.targetNames;\n }\n else if (this.localAssociatedWith) {\n return this.localAssociatedWith;\n }\n else {\n return this.remotePKFields;\n }\n }\n /**\n * Whether this relationship everything necessary to get, set, and query from\n * the perspective of the local model provided at instantiation.\n */\n get isComplete() {\n return this.localJoinFields.length > 0 && this.remoteJoinFields.length > 0;\n }\n /**\n * Creates an FK mapper object with respect to the given related instance.\n *\n * E.g., if the local FK fields are `[parentId, parentName]` and point to\n * `[customId, name]` on the remote model, `createLocalFKObject(remote)`\n * will return:\n *\n * ```\n * {\n * \tparentId: remote.customId,\n * \tparentName: remote.name\n * }\n * ```\n *\n * @param remote The remote related instance.\n */\n createLocalFKObject(remote) {\n const fk = {};\n for (let i = 0; i < this.localJoinFields.length; i++) {\n fk[this.localJoinFields[i]] = remote[this.remoteJoinFields[i]];\n }\n return fk;\n }\n /**\n * Creates an query mapper object to help fetch the remote instance(s) or\n * `null` if any of the necessary local fields are `null` or `undefined`.\n *\n * E.g., if the local FK fields are `[parentId, parentName]` and point to\n * `[customId, name]` on the remote model, `createLocalFKObject(remote)`\n * will return:\n *\n * ```\n * {\n * \tcustomId: local.parentId\n * \tname: local.parentName\n * }\n * ```\n *\n * If the local fields are not populated, returns\n *\n * @param local The local instance.\n */\n createRemoteQueryObject(local) {\n const query = {};\n for (let i = 0; i < this.remoteJoinFields.length; i++) {\n const localValue = local[this.localJoinFields[i]];\n if (localValue === null || localValue === undefined)\n return null;\n query[this.remoteJoinFields[i]] = local[this.localJoinFields[i]];\n }\n return query;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"relationship.mjs","sources":["../../../src/storage/relationship.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { isFieldAssociation } from '../types';\n/**\n * Defines a relationship from a LOCAL model.field to a REMOTE model.field and helps\n * navigate the relationship, providing a simplified peek at the relationship details\n * pertinent to setting FK's and constructing join conditions.\n *\n * Because I mean, relationships are tough.\n *\n */\nexport class ModelRelationship {\n /**\n * @param modelDefinition The \"local\" model.\n * @param field The \"local\" model field.\n */\n constructor(model, field) {\n if (!isFieldAssociation(model.schema, field)) {\n throw new Error(`${model.schema.name}.${field} is not a relationship.`);\n }\n this.localModel = model;\n this._field = field;\n }\n /**\n * Returns a ModelRelationship for the the given model and field if the pair\n * indicates a relationship to another model. Else, returns `null`.\n *\n * @param model The model the relationship field exists in.\n * @param field The field that may relates the local model to the remote model.\n */\n static from(model, field) {\n if (isFieldAssociation(model.schema, field)) {\n return new this(model, field);\n }\n else {\n return null;\n }\n }\n /**\n * Enumerates all valid `ModelRelationship`'s on the given model.\n *\n * @param model The model definition to enumerate relationships of.\n */\n static allFrom(model) {\n const relationships = [];\n for (const field of Object.keys(model.schema.fields)) {\n const relationship = ModelRelationship.from(model, field);\n relationship && relationships.push(relationship);\n }\n return relationships;\n }\n get localDefinition() {\n return this.localModel.schema;\n }\n /**\n * The virtual/computed field on the local model that should contain\n * the related model.\n */\n get field() {\n return this._field;\n }\n /**\n * The constructor that can be used to query DataStore or create instance for\n * the local model.\n */\n get localConstructor() {\n return this.localModel.builder;\n }\n /**\n * The name/type of the relationship the local model has with the remote model\n * via the defined local model field.\n */\n get type() {\n return this.localAssocation.connectionType;\n }\n /**\n * Raw details about the local FK as-is from the local model's field definition in\n * the schema. This field requires interpretation.\n *\n * @see localJoinFields\n * @see localAssociatedWith\n */\n get localAssocation() {\n return this.localDefinition.fields[this.field].association;\n }\n /**\n * The field names on the local model that can be used to query or queried to match\n * with instances of the remote model.\n *\n * Fields are returned in-order to match the order of `this.remoteKeyFields`.\n */\n get localJoinFields() {\n /**\n * This is relatively straightforward, actually.\n *\n * If we have explicitly stated targetNames, codegen is telling us authoritatively\n * to use those fields for this relationship. The local model \"points to\" fields\n * in the remote one.\n *\n * In other cases, the remote model points to this one's\n */\n if (this.localAssocation.targetName) {\n // This case is theoretically unnecessary going forward.\n return [this.localAssocation.targetName];\n }\n else if (this.localAssocation.targetNames) {\n return this.localAssocation.targetNames;\n }\n else {\n return this.localPKFields;\n }\n }\n /**\n * The field names on the local model that uniquely identify it.\n *\n * These fields may or may not be relevant to the join fields.\n */\n get localPKFields() {\n return this.localModel.pkField;\n }\n get remoteDefinition() {\n return this.remoteModelType.modelConstructor?.schema;\n }\n get remoteModelType() {\n return this.localDefinition.fields[this.field].type;\n }\n /**\n * Constructor that can be used to query DataStore or create instances for\n * the remote model.\n */\n get remoteModelConstructor() {\n return this.remoteModelType.modelConstructor.builder;\n }\n /**\n * The field names on the remote model that uniquely identify it.\n *\n * These fields may or may not be relevant to the join fields.\n */\n get remotePKFields() {\n return this.remoteModelType.modelConstructor?.pkField || ['id'];\n }\n /**\n * The `associatedWith` fields from the local perspective.\n *\n * When present, these fields indicate which fields on the remote model to use\n * when looking for a remote association and/or determining the final remote\n * key fields.\n */\n get localAssociatedWith() {\n if (this.localAssocation.connectionType === 'HAS_MANY' ||\n this.localAssocation.connectionType === 'HAS_ONE') {\n // This de-arraying is theoretically unnecessary going forward.\n return Array.isArray(this.localAssocation.associatedWith)\n ? this.localAssocation.associatedWith\n : [this.localAssocation.associatedWith];\n }\n else {\n return undefined;\n }\n }\n /**\n * The `remote` model's associated field's `assocation` metadata, if\n * present.\n *\n * This is used when determining if the remote model's associated field\n * specifies which FK fields to use. If this value is `undefined`, the\n * name of the remote field (`this.localAssociatedWith`) *is* the remote\n * key field.\n */\n get explicitRemoteAssociation() {\n if (this.localAssociatedWith) {\n if (this.localAssociatedWith.length === 1) {\n return this.remoteDefinition.fields[this.localAssociatedWith[0]]\n ?.association;\n }\n else {\n return undefined;\n }\n }\n }\n /**\n * The field names on the remote model that can used to query or queried to match\n * with instances of the local model.\n *\n * Fields are returned in-order to match the order of `this.localKeyFields`.\n */\n get remoteJoinFields() {\n /**\n * If the local relationship explicitly names \"associated with\" fields, we\n * need to see if this points direction to a reciprocating assocation. If it\n * does, the remote assocation indicates what fields to use.\n */\n if (this.explicitRemoteAssociation?.targetName) {\n // This case is theoretically unnecessary going forward.\n return [this.explicitRemoteAssociation.targetName];\n }\n else if (this.explicitRemoteAssociation?.targetNames) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-asserted-optional-chain\n return this.explicitRemoteAssociation?.targetNames;\n }\n else if (this.localAssociatedWith) {\n return this.localAssociatedWith;\n }\n else {\n return this.remotePKFields;\n }\n }\n /**\n * Whether this relationship everything necessary to get, set, and query from\n * the perspective of the local model provided at instantiation.\n */\n get isComplete() {\n return this.localJoinFields.length > 0 && this.remoteJoinFields.length > 0;\n }\n /**\n * Creates an FK mapper object with respect to the given related instance.\n *\n * E.g., if the local FK fields are `[parentId, parentName]` and point to\n * `[customId, name]` on the remote model, `createLocalFKObject(remote)`\n * will return:\n *\n * ```\n * {\n * \tparentId: remote.customId,\n * \tparentName: remote.name\n * }\n * ```\n *\n * @param remote The remote related instance.\n */\n createLocalFKObject(remote) {\n const fk = {};\n for (let i = 0; i < this.localJoinFields.length; i++) {\n fk[this.localJoinFields[i]] = remote[this.remoteJoinFields[i]];\n }\n return fk;\n }\n /**\n * Creates an query mapper object to help fetch the remote instance(s) or\n * `null` if any of the necessary local fields are `null` or `undefined`.\n *\n * E.g., if the local FK fields are `[parentId, parentName]` and point to\n * `[customId, name]` on the remote model, `createLocalFKObject(remote)`\n * will return:\n *\n * ```\n * {\n * \tcustomId: local.parentId\n * \tname: local.parentName\n * }\n * ```\n *\n * If the local fields are not populated, returns\n *\n * @param local The local instance.\n */\n createRemoteQueryObject(local) {\n const query = {};\n for (let i = 0; i < this.remoteJoinFields.length; i++) {\n const localValue = local[this.localJoinFields[i]];\n if (localValue === null || localValue === undefined)\n return null;\n query[this.remoteJoinFields[i]] = local[this.localJoinFields[i]];\n }\n return query;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import { Patch } from 'immer';
|
|
3
3
|
import { ModelInstanceCreator } from '../datastore/datastore';
|
|
4
|
-
import { InternalSchema, ModelInstanceMetadata, ModelPredicate, NamespaceResolver, OpType, PaginationInput, PersistentModel, PersistentModelConstructor, QueryOne, SchemaNamespace,
|
|
4
|
+
import { InternalSchema, InternalSubscriptionMessage, ModelInstanceMetadata, ModelPredicate, NamespaceResolver, OpType, PaginationInput, PersistentModel, PersistentModelConstructor, QueryOne, SchemaNamespace, SubscriptionMessage } from '../types';
|
|
5
5
|
import { NAMESPACES } from '../util';
|
|
6
6
|
import { Adapter } from './adapter';
|
|
7
7
|
export type StorageSubscriptionMessage<T extends PersistentModel> = InternalSubscriptionMessage<T> & {
|
|
8
|
-
mutator?:
|
|
8
|
+
mutator?: symbol;
|
|
9
9
|
};
|
|
10
10
|
export type StorageFacade = Omit<Adapter, 'setUp'>;
|
|
11
11
|
export type Storage = InstanceType<typeof StorageClass>;
|
|
@@ -21,14 +21,14 @@ declare class StorageClass implements StorageFacade {
|
|
|
21
21
|
constructor(schema: InternalSchema, namespaceResolver: NamespaceResolver, getModelConstructorByModelName: (namsespaceName: NAMESPACES, modelName: string) => PersistentModelConstructor<any>, modelInstanceCreator: ModelInstanceCreator, adapter?: Adapter, sessionId?: string);
|
|
22
22
|
static getNamespace(): SchemaNamespace;
|
|
23
23
|
init(): Promise<void>;
|
|
24
|
-
save<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>, mutator?:
|
|
25
|
-
delete<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>, mutator?:
|
|
26
|
-
delete<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, condition?: ModelPredicate<T>, mutator?:
|
|
24
|
+
save<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>, mutator?: symbol, patchesTuple?: [Patch[], PersistentModel]): Promise<[T, OpType.INSERT | OpType.UPDATE][]>;
|
|
25
|
+
delete<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>, mutator?: symbol): Promise<[T[], T[]]>;
|
|
26
|
+
delete<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, condition?: ModelPredicate<T>, mutator?: symbol): Promise<[T[], T[]]>;
|
|
27
27
|
query<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, predicate?: ModelPredicate<T>, pagination?: PaginationInput<T>): Promise<T[]>;
|
|
28
28
|
queryOne<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, firstOrLast?: QueryOne): Promise<T | undefined>;
|
|
29
|
-
observe<T extends PersistentModel>(modelConstructor?: PersistentModelConstructor<T> | null, predicate?: ModelPredicate<T> | null, skipOwn?:
|
|
29
|
+
observe<T extends PersistentModel>(modelConstructor?: PersistentModelConstructor<T> | null, predicate?: ModelPredicate<T> | null, skipOwn?: symbol): Observable<SubscriptionMessage<T>>;
|
|
30
30
|
clear(completeObservable?: boolean): Promise<void>;
|
|
31
|
-
batchSave<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<any>, items: ModelInstanceMetadata[], mutator?:
|
|
31
|
+
batchSave<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<any>, items: ModelInstanceMetadata[], mutator?: symbol): Promise<[T, OpType][]>;
|
|
32
32
|
private getChangedFieldsInput;
|
|
33
33
|
}
|
|
34
34
|
declare class ExclusiveStorage implements StorageFacade {
|
|
@@ -36,13 +36,13 @@ declare class ExclusiveStorage implements StorageFacade {
|
|
|
36
36
|
private readonly mutex;
|
|
37
37
|
constructor(schema: InternalSchema, namespaceResolver: NamespaceResolver, getModelConstructorByModelName: (namsespaceName: NAMESPACES, modelName: string) => PersistentModelConstructor<any>, modelInstanceCreator: ModelInstanceCreator, adapter?: Adapter, sessionId?: string);
|
|
38
38
|
runExclusive<T>(fn: (storage: StorageClass) => Promise<T>): Promise<T>;
|
|
39
|
-
save<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>, mutator?:
|
|
40
|
-
delete<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>, mutator?:
|
|
41
|
-
delete<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, condition?: ModelPredicate<T>, mutator?:
|
|
39
|
+
save<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>, mutator?: symbol, patchesTuple?: [Patch[], PersistentModel]): Promise<[T, OpType.INSERT | OpType.UPDATE][]>;
|
|
40
|
+
delete<T extends PersistentModel>(model: T, condition?: ModelPredicate<T>, mutator?: symbol): Promise<[T[], T[]]>;
|
|
41
|
+
delete<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, condition?: ModelPredicate<T>, mutator?: symbol): Promise<[T[], T[]]>;
|
|
42
42
|
query<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, predicate?: ModelPredicate<T>, pagination?: PaginationInput<T>): Promise<T[]>;
|
|
43
43
|
queryOne<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, firstOrLast?: QueryOne): Promise<T | undefined>;
|
|
44
44
|
static getNamespace(): SchemaNamespace;
|
|
45
|
-
observe<T extends PersistentModel>(modelConstructor?: PersistentModelConstructor<T> | null, predicate?: ModelPredicate<T> | null, skipOwn?:
|
|
45
|
+
observe<T extends PersistentModel>(modelConstructor?: PersistentModelConstructor<T> | null, predicate?: ModelPredicate<T> | null, skipOwn?: symbol): Observable<SubscriptionMessage<T>>;
|
|
46
46
|
clear(): Promise<void>;
|
|
47
47
|
batchSave<T extends PersistentModel>(modelConstructor: PersistentModelConstructor<T>, items: ModelInstanceMetadata[]): Promise<[T, OpType][]>;
|
|
48
48
|
init(): Promise<void>;
|