@xyo-network/diviner-payload-indexeddb 3.18.10 → 4.0.1
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/browser/index.mjs +0 -4
- package/dist/browser/index.mjs.map +1 -1
- package/dist/types/Diviner.d.ts +0 -1
- package/dist/types/Diviner.d.ts.map +1 -1
- package/package.json +19 -19
- package/src/Diviner.ts +0 -5
package/dist/browser/index.mjs
CHANGED
|
@@ -101,10 +101,6 @@ var IndexedDbPayloadDiviner = class extends PayloadDiviner {
|
|
|
101
101
|
});
|
|
102
102
|
return result ?? [];
|
|
103
103
|
}
|
|
104
|
-
async startHandler() {
|
|
105
|
-
await super.startHandler();
|
|
106
|
-
return true;
|
|
107
|
-
}
|
|
108
104
|
/**
|
|
109
105
|
* Checks that the desired DB/objectStore exists and is initialized to the correct version
|
|
110
106
|
* @returns The initialized DB or undefined if it does not exist in the desired state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Schema.ts","../../src/Config.ts","../../src/Diviner.ts"],"sourcesContent":["import { PayloadDivinerSchema } from '@xyo-network/diviner-payload-model'\n\nexport const IndexedDbPayloadDivinerSchema = `${PayloadDivinerSchema}.indexeddb` as const\nexport type IndexedDbPayloadDivinerSchema = typeof IndexedDbPayloadDivinerSchema\n","import type { IndexDescription } from '@xyo-network/archivist-model'\nimport type { DivinerConfig } from '@xyo-network/diviner-model'\n\nimport { IndexedDbPayloadDivinerSchema } from './Schema.ts'\n\nexport const IndexedDbPayloadDivinerConfigSchema = `${IndexedDbPayloadDivinerSchema}.config` as const\nexport type IndexedDbPayloadDivinerConfigSchema = typeof IndexedDbPayloadDivinerConfigSchema\n\nexport type IndexedDbPayloadDivinerConfig = DivinerConfig<{\n /**\n * The database name\n */\n dbName?: string\n /**\n * The version of the DB, defaults to 1\n */\n dbVersion?: number\n schema: IndexedDbPayloadDivinerConfigSchema\n /**\n * The storage configuration\n * // TODO: Hoist to main diviner config\n */\n storage?: {\n /**\n * The indexes to create on the object store\n */\n indexes?: IndexDescription[]\n }\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n","/// <reference lib=\"dom\" />\n\nimport { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { removeFields } from '@xylabs/object'\nimport { IndexedDbArchivist } from '@xyo-network/archivist-indexeddb'\nimport type { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport type {\n AnyPayload,\n Payload, Schema, Sequence,\n} from '@xyo-network/payload-model'\nimport type { IDBPCursorWithValue, IDBPDatabase } from 'idb'\nimport { openDB } from 'idb'\n\nimport { IndexedDbPayloadDivinerConfigSchema } from './Config.ts'\nimport type { IndexedDbPayloadDivinerParams } from './Params.ts'\n\ninterface PayloadStore {\n [s: string]: Payload\n}\n\ntype ValueFilter = (payload?: AnyPayload | null) => boolean\n\nconst payloadValueFilter = (key: keyof AnyPayload, value?: unknown | unknown[]): ValueFilter | undefined => {\n if (!value) return undefined\n return (payload) => {\n if (!payload) return false\n const sourceValue = payload?.[key]\n if (sourceValue === undefined) return false\n return Array.isArray(sourceValue) && Array.isArray(value) ? containsAll(sourceValue, value) : sourceValue == value\n }\n}\n\nexport class IndexedDbPayloadDiviner<\n TParams extends IndexedDbPayloadDivinerParams = IndexedDbPayloadDivinerParams,\n TIn extends PayloadDivinerQueryPayload = PayloadDivinerQueryPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends PayloadDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, IndexedDbPayloadDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = IndexedDbPayloadDivinerConfigSchema\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the archivist's name and if archivist's name is not supplied,\n * it defaults to `archivist`. This behavior\n * biases towards a single, isolated DB per archivist which seems to\n * make the most sense for 99% of use cases.\n */\n get dbName() {\n return this.config?.dbName ?? this.config?.archivist ?? IndexedDbArchivist.defaultDbName\n }\n\n /**\n * The database version. If not supplied via config, it defaults to the archivist default version.\n */\n get dbVersion() {\n return this.config?.dbVersion ?? IndexedDbArchivist.defaultDbVersion\n }\n\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`.\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const query = payloads?.find(isPayloadDivinerQueryPayload)\n if (!query) return []\n const result = await this.tryUseDb(async (db) => {\n const {\n schemas, limit, cursor, order, ...props\n } = removeFields(query, ['schema'])\n const tx = db.transaction(this.storeName, 'readonly')\n const store = tx.objectStore(this.storeName)\n const results: TOut[] = []\n let parsedCursor = cursor\n const parsedLimit = limit ?? 10\n assertEx((schemas?.length ?? 1) === 1, () => 'IndexedDbPayloadDiviner: Only one filter schema supported')\n const filterSchema = schemas?.[0]\n const filter = filterSchema ? { schema: filterSchema, ...props } : { ...props }\n const valueFilters: ValueFilter[] = Object.entries(filter)\n .map(([key, value]) => payloadValueFilter(key, value))\n .filter(exists)\n const direction: IDBCursorDirection = order === 'desc' ? 'prev' : 'next'\n\n // Iterate all records using the sequence index\n const sequenceIndex = assertEx(store.index(IndexedDbArchivist.sequenceIndexName), () => 'Failed to get sequence index')\n let dbCursor: IDBPCursorWithValue<PayloadStore, [string], string, string, 'readonly'> | null\n = await sequenceIndex.openCursor(null, direction)\n\n // If a cursor was supplied\n if (parsedCursor !== undefined) {\n let currentSequence: Sequence | undefined\n // Skip records until the supplied cursor offset is reached\n while (dbCursor && currentSequence !== parsedCursor) {\n // Find the sequence of the current record\n currentSequence = await dbCursor.value?.sequence\n // Advance one record beyond the cursor\n dbCursor = await dbCursor.advance(1)\n }\n }\n\n // Collect results up to the limit\n while (dbCursor && results.length < parsedLimit) {\n const value = dbCursor.value\n if (value) {\n // If we're filtering on more than just the schema\n if (valueFilters.length > 0) {\n // Ensure all filters pass\n if (valueFilters.every(filter => filter(value))) {\n // Then save the value\n results.push(value)\n }\n } else {\n // Otherwise just save the value\n results.push(value)\n }\n }\n try {\n dbCursor = await dbCursor.continue()\n } catch {\n break\n }\n }\n await tx.done\n // Remove any metadata before returning to the client\n return results\n })\n return result ?? []\n }\n\n protected override async startHandler() {\n await super.startHandler()\n return true\n }\n\n /**\n * Checks that the desired DB/objectStore exists and is initialized to the correct version\n * @returns The initialized DB or undefined if it does not exist in the desired state\n */\n private async tryGetInitializedDb(): Promise<IDBPDatabase<PayloadStore> | undefined> {\n // Enumerate the DBs\n const dbs = await indexedDB.databases()\n // Check that the DB exists\n const dbExists = dbs.some((db) => {\n return db.name === this.dbName\n })\n // If the DB exists\n if (dbExists) {\n // If the db does exist, open it\n const db = await openDB<PayloadStore>(this.dbName)\n // Check that the desired objectStore exists\n const storeExists = db.objectStoreNames.contains(this.storeName)\n // If the correct db/version/objectStore exists\n if (storeExists) {\n return db\n } else {\n // Otherwise close the db so the process that is going to update the\n // db can open it\n db.close()\n }\n }\n }\n\n /**\n * Executes a callback with the initialized DB and then closes the db\n * @param callback The method to execute with the initialized DB\n * @returns\n */\n private async tryUseDb<T>(callback: (db: IDBPDatabase<PayloadStore>) => Promise<T> | T): Promise<T | undefined> {\n // Get the initialized DB\n const db = await this.tryGetInitializedDb()\n if (db) {\n try {\n // Perform the callback\n return await callback(db)\n } finally {\n // Close the DB\n db.close()\n }\n }\n return undefined\n }\n}\n"],"mappings":"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","names":["filter"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Schema.ts","../../src/Config.ts","../../src/Diviner.ts"],"sourcesContent":["import { PayloadDivinerSchema } from '@xyo-network/diviner-payload-model'\n\nexport const IndexedDbPayloadDivinerSchema = `${PayloadDivinerSchema}.indexeddb` as const\nexport type IndexedDbPayloadDivinerSchema = typeof IndexedDbPayloadDivinerSchema\n","import type { IndexDescription } from '@xyo-network/archivist-model'\nimport type { DivinerConfig } from '@xyo-network/diviner-model'\n\nimport { IndexedDbPayloadDivinerSchema } from './Schema.ts'\n\nexport const IndexedDbPayloadDivinerConfigSchema = `${IndexedDbPayloadDivinerSchema}.config` as const\nexport type IndexedDbPayloadDivinerConfigSchema = typeof IndexedDbPayloadDivinerConfigSchema\n\nexport type IndexedDbPayloadDivinerConfig = DivinerConfig<{\n /**\n * The database name\n */\n dbName?: string\n /**\n * The version of the DB, defaults to 1\n */\n dbVersion?: number\n schema: IndexedDbPayloadDivinerConfigSchema\n /**\n * The storage configuration\n * // TODO: Hoist to main diviner config\n */\n storage?: {\n /**\n * The indexes to create on the object store\n */\n indexes?: IndexDescription[]\n }\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n","/// <reference lib=\"dom\" />\n\nimport { containsAll } from '@xylabs/array'\nimport { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { removeFields } from '@xylabs/object'\nimport { IndexedDbArchivist } from '@xyo-network/archivist-indexeddb'\nimport type { DivinerInstance, DivinerModuleEventData } from '@xyo-network/diviner-model'\nimport { PayloadDiviner } from '@xyo-network/diviner-payload-abstract'\nimport type { PayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport { isPayloadDivinerQueryPayload } from '@xyo-network/diviner-payload-model'\nimport type {\n AnyPayload,\n Payload, Schema, Sequence,\n} from '@xyo-network/payload-model'\nimport type { IDBPCursorWithValue, IDBPDatabase } from 'idb'\nimport { openDB } from 'idb'\n\nimport { IndexedDbPayloadDivinerConfigSchema } from './Config.ts'\nimport type { IndexedDbPayloadDivinerParams } from './Params.ts'\n\ninterface PayloadStore {\n [s: string]: Payload\n}\n\ntype ValueFilter = (payload?: AnyPayload | null) => boolean\n\nconst payloadValueFilter = (key: keyof AnyPayload, value?: unknown | unknown[]): ValueFilter | undefined => {\n if (!value) return undefined\n return (payload) => {\n if (!payload) return false\n const sourceValue = payload?.[key]\n if (sourceValue === undefined) return false\n return Array.isArray(sourceValue) && Array.isArray(value) ? containsAll(sourceValue, value) : sourceValue == value\n }\n}\n\nexport class IndexedDbPayloadDiviner<\n TParams extends IndexedDbPayloadDivinerParams = IndexedDbPayloadDivinerParams,\n TIn extends PayloadDivinerQueryPayload = PayloadDivinerQueryPayload,\n TOut extends Payload = Payload,\n TEventData extends DivinerModuleEventData<DivinerInstance<TParams, TIn, TOut>, TIn, TOut> = DivinerModuleEventData<\n DivinerInstance<TParams, TIn, TOut>,\n TIn,\n TOut\n >,\n> extends PayloadDiviner<TParams, TIn, TOut, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, IndexedDbPayloadDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = IndexedDbPayloadDivinerConfigSchema\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the archivist's name and if archivist's name is not supplied,\n * it defaults to `archivist`. This behavior\n * biases towards a single, isolated DB per archivist which seems to\n * make the most sense for 99% of use cases.\n */\n get dbName() {\n return this.config?.dbName ?? this.config?.archivist ?? IndexedDbArchivist.defaultDbName\n }\n\n /**\n * The database version. If not supplied via config, it defaults to the archivist default version.\n */\n get dbVersion() {\n return this.config?.dbVersion ?? IndexedDbArchivist.defaultDbVersion\n }\n\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`.\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n protected override async divineHandler(payloads?: TIn[]): Promise<TOut[]> {\n const query = payloads?.find(isPayloadDivinerQueryPayload)\n if (!query) return []\n const result = await this.tryUseDb(async (db) => {\n const {\n schemas, limit, cursor, order, ...props\n } = removeFields(query, ['schema'])\n const tx = db.transaction(this.storeName, 'readonly')\n const store = tx.objectStore(this.storeName)\n const results: TOut[] = []\n let parsedCursor = cursor\n const parsedLimit = limit ?? 10\n assertEx((schemas?.length ?? 1) === 1, () => 'IndexedDbPayloadDiviner: Only one filter schema supported')\n const filterSchema = schemas?.[0]\n const filter = filterSchema ? { schema: filterSchema, ...props } : { ...props }\n const valueFilters: ValueFilter[] = Object.entries(filter)\n .map(([key, value]) => payloadValueFilter(key, value))\n .filter(exists)\n const direction: IDBCursorDirection = order === 'desc' ? 'prev' : 'next'\n\n // Iterate all records using the sequence index\n const sequenceIndex = assertEx(store.index(IndexedDbArchivist.sequenceIndexName), () => 'Failed to get sequence index')\n let dbCursor: IDBPCursorWithValue<PayloadStore, [string], string, string, 'readonly'> | null\n = await sequenceIndex.openCursor(null, direction)\n\n // If a cursor was supplied\n if (parsedCursor !== undefined) {\n let currentSequence: Sequence | undefined\n // Skip records until the supplied cursor offset is reached\n while (dbCursor && currentSequence !== parsedCursor) {\n // Find the sequence of the current record\n currentSequence = await dbCursor.value?.sequence\n // Advance one record beyond the cursor\n dbCursor = await dbCursor.advance(1)\n }\n }\n\n // Collect results up to the limit\n while (dbCursor && results.length < parsedLimit) {\n const value = dbCursor.value\n if (value) {\n // If we're filtering on more than just the schema\n if (valueFilters.length > 0) {\n // Ensure all filters pass\n if (valueFilters.every(filter => filter(value))) {\n // Then save the value\n results.push(value)\n }\n } else {\n // Otherwise just save the value\n results.push(value)\n }\n }\n try {\n dbCursor = await dbCursor.continue()\n } catch {\n break\n }\n }\n await tx.done\n // Remove any metadata before returning to the client\n return results\n })\n return result ?? []\n }\n\n /**\n * Checks that the desired DB/objectStore exists and is initialized to the correct version\n * @returns The initialized DB or undefined if it does not exist in the desired state\n */\n private async tryGetInitializedDb(): Promise<IDBPDatabase<PayloadStore> | undefined> {\n // Enumerate the DBs\n const dbs = await indexedDB.databases()\n // Check that the DB exists\n const dbExists = dbs.some((db) => {\n return db.name === this.dbName\n })\n // If the DB exists\n if (dbExists) {\n // If the db does exist, open it\n const db = await openDB<PayloadStore>(this.dbName)\n // Check that the desired objectStore exists\n const storeExists = db.objectStoreNames.contains(this.storeName)\n // If the correct db/version/objectStore exists\n if (storeExists) {\n return db\n } else {\n // Otherwise close the db so the process that is going to update the\n // db can open it\n db.close()\n }\n }\n }\n\n /**\n * Executes a callback with the initialized DB and then closes the db\n * @param callback The method to execute with the initialized DB\n * @returns\n */\n private async tryUseDb<T>(callback: (db: IDBPDatabase<PayloadStore>) => Promise<T> | T): Promise<T | undefined> {\n // Get the initialized DB\n const db = await this.tryGetInitializedDb()\n if (db) {\n try {\n // Perform the callback\n return await callback(db)\n } finally {\n // Close the DB\n db.close()\n }\n }\n return undefined\n }\n}\n"],"mappings":"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","names":["filter"]}
|
package/dist/types/Diviner.d.ts
CHANGED
|
@@ -24,7 +24,6 @@ export declare class IndexedDbPayloadDiviner<TParams extends IndexedDbPayloadDiv
|
|
|
24
24
|
*/
|
|
25
25
|
get storeName(): string;
|
|
26
26
|
protected divineHandler(payloads?: TIn[]): Promise<TOut[]>;
|
|
27
|
-
protected startHandler(): Promise<boolean>;
|
|
28
27
|
/**
|
|
29
28
|
* Checks that the desired DB/objectStore exists and is initialized to the correct version
|
|
30
29
|
* @returns The initialized DB or undefined if it does not exist in the desired state
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AAEpF,OAAO,KAAK,EAEV,OAAO,EAAE,MAAM,EAChB,MAAM,4BAA4B,CAAA;AAKnC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAkBhE,qBAAa,uBAAuB,CAClC,OAAO,SAAS,6BAA6B,GAAG,6BAA6B,EAC7E,GAAG,SAAS,0BAA0B,GAAG,0BAA0B,EACnE,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAChH,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EACnC,GAAG,EACH,IAAI,CACL,CACD,SAAQ,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;IACtD,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgE;IAChH,gBAAyB,mBAAmB,EAAE,MAAM,CAAsC;IAE1F;;;;;;OAMG;IACH,IAAI,MAAM,WAET;IAED;;OAEG;IACH,IAAI,SAAS,WAEZ;IAED;;;OAGG;IACH,IAAI,SAAS,WAEZ;cAEwB,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"Diviner.d.ts","sourceRoot":"","sources":["../../src/Diviner.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAA;AAEpF,OAAO,KAAK,EAEV,OAAO,EAAE,MAAM,EAChB,MAAM,4BAA4B,CAAA;AAKnC,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAA;AAkBhE,qBAAa,uBAAuB,CAClC,OAAO,SAAS,6BAA6B,GAAG,6BAA6B,EAC7E,GAAG,SAAS,0BAA0B,GAAG,0BAA0B,EACnE,IAAI,SAAS,OAAO,GAAG,OAAO,EAC9B,UAAU,SAAS,sBAAsB,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,sBAAsB,CAChH,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,EACnC,GAAG,EACH,IAAI,CACL,CACD,SAAQ,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC;IACtD,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAgE;IAChH,gBAAyB,mBAAmB,EAAE,MAAM,CAAsC;IAE1F;;;;;;OAMG;IACH,IAAI,MAAM,WAET;IAED;;OAEG;IACH,IAAI,SAAS,WAEZ;IAED;;;OAGG;IACH,IAAI,SAAS,WAEZ;cAEwB,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAkEzE;;;OAGG;YACW,mBAAmB;IAwBjC;;;;OAIG;YACW,QAAQ;CAcvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/diviner-payload-indexeddb",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -29,29 +29,29 @@
|
|
|
29
29
|
"module": "dist/browser/index.mjs",
|
|
30
30
|
"types": "dist/types/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@xylabs/array": "^4.
|
|
33
|
-
"@xylabs/assert": "^4.
|
|
34
|
-
"@xylabs/exists": "^4.
|
|
35
|
-
"@xylabs/object": "^4.
|
|
36
|
-
"@xyo-network/archivist-indexeddb": "^
|
|
37
|
-
"@xyo-network/archivist-model": "^
|
|
38
|
-
"@xyo-network/diviner-model": "^
|
|
39
|
-
"@xyo-network/diviner-payload-abstract": "^
|
|
40
|
-
"@xyo-network/diviner-payload-model": "^
|
|
41
|
-
"@xyo-network/module-model": "^
|
|
42
|
-
"@xyo-network/payload-model": "^
|
|
32
|
+
"@xylabs/array": "^4.12.30",
|
|
33
|
+
"@xylabs/assert": "^4.12.30",
|
|
34
|
+
"@xylabs/exists": "^4.12.30",
|
|
35
|
+
"@xylabs/object": "^4.12.30",
|
|
36
|
+
"@xyo-network/archivist-indexeddb": "^4.0.1",
|
|
37
|
+
"@xyo-network/archivist-model": "^4.0.1",
|
|
38
|
+
"@xyo-network/diviner-model": "^4.0.1",
|
|
39
|
+
"@xyo-network/diviner-payload-abstract": "^4.0.1",
|
|
40
|
+
"@xyo-network/diviner-payload-model": "^4.0.1",
|
|
41
|
+
"@xyo-network/module-model": "^4.0.1",
|
|
42
|
+
"@xyo-network/payload-model": "^4.0.1",
|
|
43
43
|
"idb": "^8.0.3"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@xylabs/ts-scripts-yarn3": "^6.5.
|
|
47
|
-
"@xylabs/tsconfig": "^6.5.
|
|
48
|
-
"@xylabs/vitest-extended": "^4.
|
|
49
|
-
"@xyo-network/archivist-indexeddb": "^
|
|
50
|
-
"@xyo-network/node-memory": "^
|
|
51
|
-
"@xyo-network/payload-builder": "^
|
|
46
|
+
"@xylabs/ts-scripts-yarn3": "^6.5.12",
|
|
47
|
+
"@xylabs/tsconfig": "^6.5.12",
|
|
48
|
+
"@xylabs/vitest-extended": "^4.12.30",
|
|
49
|
+
"@xyo-network/archivist-indexeddb": "^4.0.1",
|
|
50
|
+
"@xyo-network/node-memory": "^4.0.1",
|
|
51
|
+
"@xyo-network/payload-builder": "^4.0.1",
|
|
52
52
|
"fake-indexeddb": "^6.0.1",
|
|
53
53
|
"typescript": "^5.8.3",
|
|
54
|
-
"vitest": "^3.2.
|
|
54
|
+
"vitest": "^3.2.4"
|
|
55
55
|
},
|
|
56
56
|
"publishConfig": {
|
|
57
57
|
"access": "public"
|
package/src/Diviner.ts
CHANGED
|
@@ -140,11 +140,6 @@ export class IndexedDbPayloadDiviner<
|
|
|
140
140
|
return result ?? []
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
protected override async startHandler() {
|
|
144
|
-
await super.startHandler()
|
|
145
|
-
return true
|
|
146
|
-
}
|
|
147
|
-
|
|
148
143
|
/**
|
|
149
144
|
* Checks that the desired DB/objectStore exists and is initialized to the correct version
|
|
150
145
|
* @returns The initialized DB or undefined if it does not exist in the desired state
|