@xyo-network/archivist-indexeddb 2.81.3 → 2.81.4

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.
@@ -45,7 +45,7 @@ function _ts_decorate(decorators, target, key, desc) {
45
45
  }
46
46
  __name(_ts_decorate, "_ts_decorate");
47
47
  var IndexedDbArchivistConfigSchema = "network.xyo.archivist.indexeddb.config";
48
- var IndexedDbArchivist = class IndexedDbArchivist2 extends import_archivist_abstract.AbstractArchivist {
48
+ var IndexedDbArchivist = class _IndexedDbArchivist extends import_archivist_abstract.AbstractArchivist {
49
49
  static {
50
50
  __name(this, "IndexedDbArchivist");
51
51
  }
@@ -63,7 +63,7 @@ var IndexedDbArchivist = class IndexedDbArchivist2 extends import_archivist_abst
63
63
  * make the most sense for 99% of use cases.
64
64
  */
65
65
  get dbName() {
66
- return this.config?.dbName ?? this.config?.name ?? IndexedDbArchivist2.defaultDbName;
66
+ return this.config?.dbName ?? this.config?.name ?? _IndexedDbArchivist.defaultDbName;
67
67
  }
68
68
  get queries() {
69
69
  return [
@@ -85,7 +85,7 @@ var IndexedDbArchivist = class IndexedDbArchivist2 extends import_archivist_abst
85
85
  * https://www.npmjs.com/package/idb
86
86
  */
87
87
  get storeName() {
88
- return this.config?.storeName ?? IndexedDbArchivist2.defaultStoreName;
88
+ return this.config?.storeName ?? _IndexedDbArchivist.defaultStoreName;
89
89
  }
90
90
  get db() {
91
91
  return (0, import_assert.assertEx)(this._db, "DB not initialized");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/IndexedDbArchivist.ts"],"sourcesContent":["export * from './IndexedDbArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { clear, createStore, delMany, entries, getMany, setMany, UseStore } from 'idb-keyval'\n\nexport type IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\nexport const IndexedDbArchivistConfigSchema: IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\n\nexport type IndexedDbArchivistConfig = ArchivistConfig<{\n /**\n * The database name\n */\n dbName?: string\n schema: IndexedDbArchivistConfigSchema\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n\nexport type IndexedDbArchivistParams = ArchivistParams<AnyConfigSchema<IndexedDbArchivistConfig>>\n\n@creatableModule()\nexport class IndexedDbArchivist<\n TParams extends IndexedDbArchivistParams = IndexedDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [IndexedDbArchivistConfigSchema]\n static defaultDbName = 'archivist'\n static defaultStoreName = 'payloads'\n\n private _db: UseStore | undefined\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the module name (not guaranteed to be unique) and if module\n * name is not supplied, 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?.name ?? IndexedDbArchivist.defaultDbName\n }\n\n override get queries() {\n return [ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ...super.queries]\n }\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`. The limitation of the current IndexedDB wrapper we're\n * using is that it only supports a single object store per DB. See here:\n * https://github.com/jakearchibald/idb-keyval/blob/main/custom-stores.md#defining-a-custom-database--store-name\n * If this becomes a problem or we need migrations/transactions, we can\n * move to this more-flexible library, which they recommend (and who\n * recommends them for our simple use case of key-value storage):\n * https://www.npmjs.com/package/idb\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n private get db(): UseStore {\n return assertEx(this._db, 'DB not initialized')\n }\n\n protected override async allHandler(): Promise<Payload[]> {\n const result = await entries<string, Payload>(this.db)\n return result.map<Payload>(([_hash, payload]) => payload)\n }\n\n protected override async clearHandler(): Promise<void> {\n await clear(this.db)\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n\n const foundHashesToDelete = payloadPairs.map(([hash, _]) => hash)\n await delMany(foundHashesToDelete, this.db)\n\n return foundHashesToDelete\n }\n\n protected override async getHandler(hashes: string[]): Promise<Payload[]> {\n return (await getMany<Payload>(hashes, this.db)).filter((result) => result !== undefined)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const entries = await Promise.all(\n payloads.map<Promise<[string, Payload]>>(async (payload) => {\n const hash = await PayloadHasher.hashAsync(payload)\n return [hash, payload]\n }),\n )\n await setMany(entries, this.db)\n\n return payloads\n }\n\n protected override async startHandler() {\n await super.startHandler()\n // NOTE: We could defer this creation to first access but we\n // want to fail fast here in case something is wrong\n this._db = createStore(this.dbName, this.storeName)\n return true\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,oBAAyB;AACzB,gCAAkC;AAClC,6BAQO;AACP,kBAA8B;AAC9B,0BAAiD;AAEjD,wBAAiF;;;;;;;;;;;;AAG1E,IAAMA,iCAAiE;AAiB9E,IAAaC,qBAAN,MAAAA,4BAGGC,4CAAAA;SAAAA;;;EACR,OAAgBC,gBAAgB;IAACH;;EACjC,OAAOI,gBAAgB;EACvB,OAAOC,mBAAmB;EAElBC;;;;;;;;EASR,IAAIC,SAAS;AACX,WAAO,KAAKC,QAAQD,UAAU,KAAKC,QAAQC,QAAQR,oBAAmBG;EACxE;EAEA,IAAaM,UAAU;AACrB,WAAO;MAACC;MAAyBC;MAA2BC;MAA4BC;SAA+B,MAAMJ;;EAC/H;;;;;;;;;;;EAWA,IAAIK,YAAY;AACd,WAAO,KAAKP,QAAQO,aAAad,oBAAmBI;EACtD;EAEA,IAAYW,KAAe;AACzB,eAAOC,wBAAS,KAAKX,KAAK,oBAAA;EAC5B;EAEA,MAAyBY,aAAiC;AACxD,UAAMC,SAAS,UAAMC,2BAAyB,KAAKJ,EAAE;AACrD,WAAOG,OAAOE,IAAa,CAAC,CAACC,OAAOC,OAAAA,MAAaA,OAAAA;EACnD;EAEA,MAAyBC,eAA8B;AACrD,cAAMC,yBAAM,KAAKT,EAAE;EACrB;EAEA,MAAyBU,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMC,QAAQC,KACrD,MAAM,KAAKC,IAAIJ,MAAAA,GAASN,IAAgC,OAAOE,YAAY;MAAC,MAAMS,0BAAcC,UAAUV,OAAAA;MAAUA;KAAQ,CAAA;AAG/H,UAAMW,sBAAsBN,aAAaP,IAAI,CAAC,CAACc,MAAMC,CAAAA,MAAOD,IAAAA;AAC5D,cAAME,2BAAQH,qBAAqB,KAAKlB,EAAE;AAE1C,WAAOkB;EACT;EAEA,MAAyBI,WAAWX,QAAsC;AACxE,YAAQ,UAAMY,2BAAiBZ,QAAQ,KAAKX,EAAE,GAAGwB,OAAO,CAACrB,WAAWA,WAAWsB,MAAAA;EACjF;EAEA,MAAyBC,cAAcC,UAAyC;AAC9E,UAAMvB,WAAU,MAAMS,QAAQC,IAC5Ba,SAAStB,IAAgC,OAAOE,YAAAA;AAC9C,YAAMY,OAAO,MAAMH,0BAAcC,UAAUV,OAAAA;AAC3C,aAAO;QAACY;QAAMZ;;IAChB,CAAA,CAAA;AAEF,cAAMqB,2BAAQxB,UAAS,KAAKJ,EAAE;AAE9B,WAAO2B;EACT;EAEA,MAAyBE,eAAe;AACtC,UAAM,MAAMA,aAAAA;AAGZ,SAAKvC,UAAMwC,+BAAY,KAAKvC,QAAQ,KAAKQ,SAAS;AAClD,WAAO;EACT;AACF;AArFad,qBAAAA,aAAAA;MADZ8C,qCAAAA;GACY9C,kBAAAA;","names":["IndexedDbArchivistConfigSchema","IndexedDbArchivist","AbstractArchivist","configSchemas","defaultDbName","defaultStoreName","_db","dbName","config","name","queries","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","storeName","db","assertEx","allHandler","result","entries","map","_hash","payload","clearHandler","clear","deleteHandler","hashes","payloadPairs","Promise","all","get","PayloadHasher","hashAsync","foundHashesToDelete","hash","_","delMany","getHandler","getMany","filter","undefined","insertHandler","payloads","setMany","startHandler","createStore","creatableModule"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/IndexedDbArchivist.ts"],"sourcesContent":["export * from './IndexedDbArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { clear, createStore, delMany, entries, getMany, setMany, UseStore } from 'idb-keyval'\n\nexport type IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\nexport const IndexedDbArchivistConfigSchema: IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\n\nexport type IndexedDbArchivistConfig = ArchivistConfig<{\n /**\n * The database name\n */\n dbName?: string\n schema: IndexedDbArchivistConfigSchema\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n\nexport type IndexedDbArchivistParams = ArchivistParams<AnyConfigSchema<IndexedDbArchivistConfig>>\n\n@creatableModule()\nexport class IndexedDbArchivist<\n TParams extends IndexedDbArchivistParams = IndexedDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [IndexedDbArchivistConfigSchema]\n static defaultDbName = 'archivist'\n static defaultStoreName = 'payloads'\n\n private _db: UseStore | undefined\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the module name (not guaranteed to be unique) and if module\n * name is not supplied, 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?.name ?? IndexedDbArchivist.defaultDbName\n }\n\n override get queries() {\n return [ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ...super.queries]\n }\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`. The limitation of the current IndexedDB wrapper we're\n * using is that it only supports a single object store per DB. See here:\n * https://github.com/jakearchibald/idb-keyval/blob/main/custom-stores.md#defining-a-custom-database--store-name\n * If this becomes a problem or we need migrations/transactions, we can\n * move to this more-flexible library, which they recommend (and who\n * recommends them for our simple use case of key-value storage):\n * https://www.npmjs.com/package/idb\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n private get db(): UseStore {\n return assertEx(this._db, 'DB not initialized')\n }\n\n protected override async allHandler(): Promise<Payload[]> {\n const result = await entries<string, Payload>(this.db)\n return result.map<Payload>(([_hash, payload]) => payload)\n }\n\n protected override async clearHandler(): Promise<void> {\n await clear(this.db)\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n\n const foundHashesToDelete = payloadPairs.map(([hash, _]) => hash)\n await delMany(foundHashesToDelete, this.db)\n\n return foundHashesToDelete\n }\n\n protected override async getHandler(hashes: string[]): Promise<Payload[]> {\n return (await getMany<Payload>(hashes, this.db)).filter((result) => result !== undefined)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const entries = await Promise.all(\n payloads.map<Promise<[string, Payload]>>(async (payload) => {\n const hash = await PayloadHasher.hashAsync(payload)\n return [hash, payload]\n }),\n )\n await setMany(entries, this.db)\n\n return payloads\n }\n\n protected override async startHandler() {\n await super.startHandler()\n // NOTE: We could defer this creation to first access but we\n // want to fail fast here in case something is wrong\n this._db = createStore(this.dbName, this.storeName)\n return true\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,oBAAyB;AACzB,gCAAkC;AAClC,6BAQO;AACP,kBAA8B;AAC9B,0BAAiD;AAEjD,wBAAiF;;;;;;;;;;;;AAG1E,IAAMA,iCAAiE;AAiBvE,IAAMC,qBAAN,MAAMA,4BAGHC,4CAAAA;SAAAA;;;EACR,OAAgBC,gBAAgB;IAACH;;EACjC,OAAOI,gBAAgB;EACvB,OAAOC,mBAAmB;EAElBC;;;;;;;;EASR,IAAIC,SAAS;AACX,WAAO,KAAKC,QAAQD,UAAU,KAAKC,QAAQC,QAAQR,oBAAmBG;EACxE;EAEA,IAAaM,UAAU;AACrB,WAAO;MAACC;MAAyBC;MAA2BC;MAA4BC;SAA+B,MAAMJ;;EAC/H;;;;;;;;;;;EAWA,IAAIK,YAAY;AACd,WAAO,KAAKP,QAAQO,aAAad,oBAAmBI;EACtD;EAEA,IAAYW,KAAe;AACzB,eAAOC,wBAAS,KAAKX,KAAK,oBAAA;EAC5B;EAEA,MAAyBY,aAAiC;AACxD,UAAMC,SAAS,UAAMC,2BAAyB,KAAKJ,EAAE;AACrD,WAAOG,OAAOE,IAAa,CAAC,CAACC,OAAOC,OAAAA,MAAaA,OAAAA;EACnD;EAEA,MAAyBC,eAA8B;AACrD,cAAMC,yBAAM,KAAKT,EAAE;EACrB;EAEA,MAAyBU,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMC,QAAQC,KACrD,MAAM,KAAKC,IAAIJ,MAAAA,GAASN,IAAgC,OAAOE,YAAY;MAAC,MAAMS,0BAAcC,UAAUV,OAAAA;MAAUA;KAAQ,CAAA;AAG/H,UAAMW,sBAAsBN,aAAaP,IAAI,CAAC,CAACc,MAAMC,CAAAA,MAAOD,IAAAA;AAC5D,cAAME,2BAAQH,qBAAqB,KAAKlB,EAAE;AAE1C,WAAOkB;EACT;EAEA,MAAyBI,WAAWX,QAAsC;AACxE,YAAQ,UAAMY,2BAAiBZ,QAAQ,KAAKX,EAAE,GAAGwB,OAAO,CAACrB,WAAWA,WAAWsB,MAAAA;EACjF;EAEA,MAAyBC,cAAcC,UAAyC;AAC9E,UAAMvB,WAAU,MAAMS,QAAQC,IAC5Ba,SAAStB,IAAgC,OAAOE,YAAAA;AAC9C,YAAMY,OAAO,MAAMH,0BAAcC,UAAUV,OAAAA;AAC3C,aAAO;QAACY;QAAMZ;;IAChB,CAAA,CAAA;AAEF,cAAMqB,2BAAQxB,UAAS,KAAKJ,EAAE;AAE9B,WAAO2B;EACT;EAEA,MAAyBE,eAAe;AACtC,UAAM,MAAMA,aAAAA;AAGZ,SAAKvC,UAAMwC,+BAAY,KAAKvC,QAAQ,KAAKQ,SAAS;AAClD,WAAO;EACT;AACF;AArFad,qBAAAA,aAAAA;MADZ8C,qCAAAA;GACY9C,kBAAAA;","names":["IndexedDbArchivistConfigSchema","IndexedDbArchivist","AbstractArchivist","configSchemas","defaultDbName","defaultStoreName","_db","dbName","config","name","queries","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","storeName","db","assertEx","allHandler","result","entries","map","_hash","payload","clearHandler","clear","deleteHandler","hashes","payloadPairs","Promise","all","get","PayloadHasher","hashAsync","foundHashesToDelete","hash","_","delMany","getHandler","getMany","filter","undefined","insertHandler","payloads","setMany","startHandler","createStore","creatableModule"]}
@@ -20,7 +20,7 @@ function _ts_decorate(decorators, target, key, desc) {
20
20
  }
21
21
  __name(_ts_decorate, "_ts_decorate");
22
22
  var IndexedDbArchivistConfigSchema = "network.xyo.archivist.indexeddb.config";
23
- var IndexedDbArchivist = class IndexedDbArchivist2 extends AbstractArchivist {
23
+ var IndexedDbArchivist = class _IndexedDbArchivist extends AbstractArchivist {
24
24
  static {
25
25
  __name(this, "IndexedDbArchivist");
26
26
  }
@@ -38,7 +38,7 @@ var IndexedDbArchivist = class IndexedDbArchivist2 extends AbstractArchivist {
38
38
  * make the most sense for 99% of use cases.
39
39
  */
40
40
  get dbName() {
41
- return this.config?.dbName ?? this.config?.name ?? IndexedDbArchivist2.defaultDbName;
41
+ return this.config?.dbName ?? this.config?.name ?? _IndexedDbArchivist.defaultDbName;
42
42
  }
43
43
  get queries() {
44
44
  return [
@@ -60,7 +60,7 @@ var IndexedDbArchivist = class IndexedDbArchivist2 extends AbstractArchivist {
60
60
  * https://www.npmjs.com/package/idb
61
61
  */
62
62
  get storeName() {
63
- return this.config?.storeName ?? IndexedDbArchivist2.defaultStoreName;
63
+ return this.config?.storeName ?? _IndexedDbArchivist.defaultStoreName;
64
64
  }
65
65
  get db() {
66
66
  return assertEx(this._db, "DB not initialized");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/IndexedDbArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { clear, createStore, delMany, entries, getMany, setMany, UseStore } from 'idb-keyval'\n\nexport type IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\nexport const IndexedDbArchivistConfigSchema: IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\n\nexport type IndexedDbArchivistConfig = ArchivistConfig<{\n /**\n * The database name\n */\n dbName?: string\n schema: IndexedDbArchivistConfigSchema\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n\nexport type IndexedDbArchivistParams = ArchivistParams<AnyConfigSchema<IndexedDbArchivistConfig>>\n\n@creatableModule()\nexport class IndexedDbArchivist<\n TParams extends IndexedDbArchivistParams = IndexedDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [IndexedDbArchivistConfigSchema]\n static defaultDbName = 'archivist'\n static defaultStoreName = 'payloads'\n\n private _db: UseStore | undefined\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the module name (not guaranteed to be unique) and if module\n * name is not supplied, 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?.name ?? IndexedDbArchivist.defaultDbName\n }\n\n override get queries() {\n return [ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ...super.queries]\n }\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`. The limitation of the current IndexedDB wrapper we're\n * using is that it only supports a single object store per DB. See here:\n * https://github.com/jakearchibald/idb-keyval/blob/main/custom-stores.md#defining-a-custom-database--store-name\n * If this becomes a problem or we need migrations/transactions, we can\n * move to this more-flexible library, which they recommend (and who\n * recommends them for our simple use case of key-value storage):\n * https://www.npmjs.com/package/idb\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n private get db(): UseStore {\n return assertEx(this._db, 'DB not initialized')\n }\n\n protected override async allHandler(): Promise<Payload[]> {\n const result = await entries<string, Payload>(this.db)\n return result.map<Payload>(([_hash, payload]) => payload)\n }\n\n protected override async clearHandler(): Promise<void> {\n await clear(this.db)\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n\n const foundHashesToDelete = payloadPairs.map(([hash, _]) => hash)\n await delMany(foundHashesToDelete, this.db)\n\n return foundHashesToDelete\n }\n\n protected override async getHandler(hashes: string[]): Promise<Payload[]> {\n return (await getMany<Payload>(hashes, this.db)).filter((result) => result !== undefined)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const entries = await Promise.all(\n payloads.map<Promise<[string, Payload]>>(async (payload) => {\n const hash = await PayloadHasher.hashAsync(payload)\n return [hash, payload]\n }),\n )\n await setMany(entries, this.db)\n\n return payloads\n }\n\n protected override async startHandler() {\n await super.startHandler()\n // NOTE: We could defer this creation to first access but we\n // want to fail fast here in case something is wrong\n this._db = createStore(this.dbName, this.storeName)\n return true\n }\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAASC,yBAAyB;AAClC,SACEC,yBACAC,2BAEAC,4BACAC,kCAGK;AACP,SAASC,qBAAqB;AAC9B,SAA0BC,uBAAuB;AAEjD,SAASC,OAAOC,aAAaC,SAASC,SAASC,SAASC,eAAyB;;;;;;;;;;;;AAG1E,IAAMC,iCAAiE;AAiB9E,IAAaC,qBAAN,MAAAA,4BAGGC,kBAAAA;SAAAA;;;EACR,OAAgBC,gBAAgB;IAACH;;EACjC,OAAOI,gBAAgB;EACvB,OAAOC,mBAAmB;EAElBC;;;;;;;;EASR,IAAIC,SAAS;AACX,WAAO,KAAKC,QAAQD,UAAU,KAAKC,QAAQC,QAAQR,oBAAmBG;EACxE;EAEA,IAAaM,UAAU;AACrB,WAAO;MAACC;MAAyBC;MAA2BC;MAA4BC;SAA+B,MAAMJ;;EAC/H;;;;;;;;;;;EAWA,IAAIK,YAAY;AACd,WAAO,KAAKP,QAAQO,aAAad,oBAAmBI;EACtD;EAEA,IAAYW,KAAe;AACzB,WAAOC,SAAS,KAAKX,KAAK,oBAAA;EAC5B;EAEA,MAAyBY,aAAiC;AACxD,UAAMC,SAAS,MAAMC,QAAyB,KAAKJ,EAAE;AACrD,WAAOG,OAAOE,IAAa,CAAC,CAACC,OAAOC,OAAAA,MAAaA,OAAAA;EACnD;EAEA,MAAyBC,eAA8B;AACrD,UAAMC,MAAM,KAAKT,EAAE;EACrB;EAEA,MAAyBU,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMC,QAAQC,KACrD,MAAM,KAAKC,IAAIJ,MAAAA,GAASN,IAAgC,OAAOE,YAAY;MAAC,MAAMS,cAAcC,UAAUV,OAAAA;MAAUA;KAAQ,CAAA;AAG/H,UAAMW,sBAAsBN,aAAaP,IAAI,CAAC,CAACc,MAAMC,CAAAA,MAAOD,IAAAA;AAC5D,UAAME,QAAQH,qBAAqB,KAAKlB,EAAE;AAE1C,WAAOkB;EACT;EAEA,MAAyBI,WAAWX,QAAsC;AACxE,YAAQ,MAAMY,QAAiBZ,QAAQ,KAAKX,EAAE,GAAGwB,OAAO,CAACrB,WAAWA,WAAWsB,MAAAA;EACjF;EAEA,MAAyBC,cAAcC,UAAyC;AAC9E,UAAMvB,WAAU,MAAMS,QAAQC,IAC5Ba,SAAStB,IAAgC,OAAOE,YAAAA;AAC9C,YAAMY,OAAO,MAAMH,cAAcC,UAAUV,OAAAA;AAC3C,aAAO;QAACY;QAAMZ;;IAChB,CAAA,CAAA;AAEF,UAAMqB,QAAQxB,UAAS,KAAKJ,EAAE;AAE9B,WAAO2B;EACT;EAEA,MAAyBE,eAAe;AACtC,UAAM,MAAMA,aAAAA;AAGZ,SAAKvC,MAAMwC,YAAY,KAAKvC,QAAQ,KAAKQ,SAAS;AAClD,WAAO;EACT;AACF;AArFad,qBAAAA,aAAAA;EADZ8C,gBAAAA;GACY9C,kBAAAA;","names":["assertEx","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","clear","createStore","delMany","entries","getMany","setMany","IndexedDbArchivistConfigSchema","IndexedDbArchivist","AbstractArchivist","configSchemas","defaultDbName","defaultStoreName","_db","dbName","config","name","queries","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","storeName","db","assertEx","allHandler","result","entries","map","_hash","payload","clearHandler","clear","deleteHandler","hashes","payloadPairs","Promise","all","get","PayloadHasher","hashAsync","foundHashesToDelete","hash","_","delMany","getHandler","getMany","filter","undefined","insertHandler","payloads","setMany","startHandler","createStore","creatableModule"]}
1
+ {"version":3,"sources":["../../src/IndexedDbArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { clear, createStore, delMany, entries, getMany, setMany, UseStore } from 'idb-keyval'\n\nexport type IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\nexport const IndexedDbArchivistConfigSchema: IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\n\nexport type IndexedDbArchivistConfig = ArchivistConfig<{\n /**\n * The database name\n */\n dbName?: string\n schema: IndexedDbArchivistConfigSchema\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n\nexport type IndexedDbArchivistParams = ArchivistParams<AnyConfigSchema<IndexedDbArchivistConfig>>\n\n@creatableModule()\nexport class IndexedDbArchivist<\n TParams extends IndexedDbArchivistParams = IndexedDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [IndexedDbArchivistConfigSchema]\n static defaultDbName = 'archivist'\n static defaultStoreName = 'payloads'\n\n private _db: UseStore | undefined\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the module name (not guaranteed to be unique) and if module\n * name is not supplied, 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?.name ?? IndexedDbArchivist.defaultDbName\n }\n\n override get queries() {\n return [ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ...super.queries]\n }\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`. The limitation of the current IndexedDB wrapper we're\n * using is that it only supports a single object store per DB. See here:\n * https://github.com/jakearchibald/idb-keyval/blob/main/custom-stores.md#defining-a-custom-database--store-name\n * If this becomes a problem or we need migrations/transactions, we can\n * move to this more-flexible library, which they recommend (and who\n * recommends them for our simple use case of key-value storage):\n * https://www.npmjs.com/package/idb\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n private get db(): UseStore {\n return assertEx(this._db, 'DB not initialized')\n }\n\n protected override async allHandler(): Promise<Payload[]> {\n const result = await entries<string, Payload>(this.db)\n return result.map<Payload>(([_hash, payload]) => payload)\n }\n\n protected override async clearHandler(): Promise<void> {\n await clear(this.db)\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n\n const foundHashesToDelete = payloadPairs.map(([hash, _]) => hash)\n await delMany(foundHashesToDelete, this.db)\n\n return foundHashesToDelete\n }\n\n protected override async getHandler(hashes: string[]): Promise<Payload[]> {\n return (await getMany<Payload>(hashes, this.db)).filter((result) => result !== undefined)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const entries = await Promise.all(\n payloads.map<Promise<[string, Payload]>>(async (payload) => {\n const hash = await PayloadHasher.hashAsync(payload)\n return [hash, payload]\n }),\n )\n await setMany(entries, this.db)\n\n return payloads\n }\n\n protected override async startHandler() {\n await super.startHandler()\n // NOTE: We could defer this creation to first access but we\n // want to fail fast here in case something is wrong\n this._db = createStore(this.dbName, this.storeName)\n return true\n }\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAASC,yBAAyB;AAClC,SACEC,yBACAC,2BAEAC,4BACAC,kCAGK;AACP,SAASC,qBAAqB;AAC9B,SAA0BC,uBAAuB;AAEjD,SAASC,OAAOC,aAAaC,SAASC,SAASC,SAASC,eAAyB;;;;;;;;;;;;AAG1E,IAAMC,iCAAiE;AAiBvE,IAAMC,qBAAN,MAAMA,4BAGHC,kBAAAA;SAAAA;;;EACR,OAAgBC,gBAAgB;IAACH;;EACjC,OAAOI,gBAAgB;EACvB,OAAOC,mBAAmB;EAElBC;;;;;;;;EASR,IAAIC,SAAS;AACX,WAAO,KAAKC,QAAQD,UAAU,KAAKC,QAAQC,QAAQR,oBAAmBG;EACxE;EAEA,IAAaM,UAAU;AACrB,WAAO;MAACC;MAAyBC;MAA2BC;MAA4BC;SAA+B,MAAMJ;;EAC/H;;;;;;;;;;;EAWA,IAAIK,YAAY;AACd,WAAO,KAAKP,QAAQO,aAAad,oBAAmBI;EACtD;EAEA,IAAYW,KAAe;AACzB,WAAOC,SAAS,KAAKX,KAAK,oBAAA;EAC5B;EAEA,MAAyBY,aAAiC;AACxD,UAAMC,SAAS,MAAMC,QAAyB,KAAKJ,EAAE;AACrD,WAAOG,OAAOE,IAAa,CAAC,CAACC,OAAOC,OAAAA,MAAaA,OAAAA;EACnD;EAEA,MAAyBC,eAA8B;AACrD,UAAMC,MAAM,KAAKT,EAAE;EACrB;EAEA,MAAyBU,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMC,QAAQC,KACrD,MAAM,KAAKC,IAAIJ,MAAAA,GAASN,IAAgC,OAAOE,YAAY;MAAC,MAAMS,cAAcC,UAAUV,OAAAA;MAAUA;KAAQ,CAAA;AAG/H,UAAMW,sBAAsBN,aAAaP,IAAI,CAAC,CAACc,MAAMC,CAAAA,MAAOD,IAAAA;AAC5D,UAAME,QAAQH,qBAAqB,KAAKlB,EAAE;AAE1C,WAAOkB;EACT;EAEA,MAAyBI,WAAWX,QAAsC;AACxE,YAAQ,MAAMY,QAAiBZ,QAAQ,KAAKX,EAAE,GAAGwB,OAAO,CAACrB,WAAWA,WAAWsB,MAAAA;EACjF;EAEA,MAAyBC,cAAcC,UAAyC;AAC9E,UAAMvB,WAAU,MAAMS,QAAQC,IAC5Ba,SAAStB,IAAgC,OAAOE,YAAAA;AAC9C,YAAMY,OAAO,MAAMH,cAAcC,UAAUV,OAAAA;AAC3C,aAAO;QAACY;QAAMZ;;IAChB,CAAA,CAAA;AAEF,UAAMqB,QAAQxB,UAAS,KAAKJ,EAAE;AAE9B,WAAO2B;EACT;EAEA,MAAyBE,eAAe;AACtC,UAAM,MAAMA,aAAAA;AAGZ,SAAKvC,MAAMwC,YAAY,KAAKvC,QAAQ,KAAKQ,SAAS;AAClD,WAAO;EACT;AACF;AArFad,qBAAAA,aAAAA;EADZ8C,gBAAAA;GACY9C,kBAAAA;","names":["assertEx","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","clear","createStore","delMany","entries","getMany","setMany","IndexedDbArchivistConfigSchema","IndexedDbArchivist","AbstractArchivist","configSchemas","defaultDbName","defaultStoreName","_db","dbName","config","name","queries","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","storeName","db","assertEx","allHandler","result","entries","map","_hash","payload","clearHandler","clear","deleteHandler","hashes","payloadPairs","Promise","all","get","PayloadHasher","hashAsync","foundHashesToDelete","hash","_","delMany","getHandler","getMany","filter","undefined","insertHandler","payloads","setMany","startHandler","createStore","creatableModule"]}
@@ -50,8 +50,7 @@ function _ts_decorate(decorators, target, key, desc) {
50
50
  }
51
51
  __name(_ts_decorate, "_ts_decorate");
52
52
  var IndexedDbArchivistConfigSchema = "network.xyo.archivist.indexeddb.config";
53
- var _a;
54
- var IndexedDbArchivist = (_a = class extends import_archivist_abstract.AbstractArchivist {
53
+ var _IndexedDbArchivist = class _IndexedDbArchivist extends import_archivist_abstract.AbstractArchivist {
55
54
  _db;
56
55
  /**
57
56
  * The database name. If not supplied via config, it defaults
@@ -61,8 +60,8 @@ var IndexedDbArchivist = (_a = class extends import_archivist_abstract.AbstractA
61
60
  * make the most sense for 99% of use cases.
62
61
  */
63
62
  get dbName() {
64
- var _a2, _b;
65
- return ((_a2 = this.config) == null ? void 0 : _a2.dbName) ?? ((_b = this.config) == null ? void 0 : _b.name) ?? _a.defaultDbName;
63
+ var _a, _b;
64
+ return ((_a = this.config) == null ? void 0 : _a.dbName) ?? ((_b = this.config) == null ? void 0 : _b.name) ?? _IndexedDbArchivist.defaultDbName;
66
65
  }
67
66
  get queries() {
68
67
  return [
@@ -84,8 +83,8 @@ var IndexedDbArchivist = (_a = class extends import_archivist_abstract.AbstractA
84
83
  * https://www.npmjs.com/package/idb
85
84
  */
86
85
  get storeName() {
87
- var _a2;
88
- return ((_a2 = this.config) == null ? void 0 : _a2.storeName) ?? _a.defaultStoreName;
86
+ var _a;
87
+ return ((_a = this.config) == null ? void 0 : _a.storeName) ?? _IndexedDbArchivist.defaultStoreName;
89
88
  }
90
89
  get db() {
91
90
  return (0, import_assert.assertEx)(this._db, "DB not initialized");
@@ -125,9 +124,14 @@ var IndexedDbArchivist = (_a = class extends import_archivist_abstract.AbstractA
125
124
  this._db = (0, import_idb_keyval.createStore)(this.dbName, this.storeName);
126
125
  return true;
127
126
  }
128
- }, __name(_a, "IndexedDbArchivist"), __publicField(_a, "configSchemas", [
127
+ };
128
+ __name(_IndexedDbArchivist, "IndexedDbArchivist");
129
+ __publicField(_IndexedDbArchivist, "configSchemas", [
129
130
  IndexedDbArchivistConfigSchema
130
- ]), __publicField(_a, "defaultDbName", "archivist"), __publicField(_a, "defaultStoreName", "payloads"), _a);
131
+ ]);
132
+ __publicField(_IndexedDbArchivist, "defaultDbName", "archivist");
133
+ __publicField(_IndexedDbArchivist, "defaultStoreName", "payloads");
134
+ var IndexedDbArchivist = _IndexedDbArchivist;
131
135
  IndexedDbArchivist = _ts_decorate([
132
136
  (0, import_module_model.creatableModule)()
133
137
  ], IndexedDbArchivist);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/IndexedDbArchivist.ts"],"sourcesContent":["export * from './IndexedDbArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { clear, createStore, delMany, entries, getMany, setMany, UseStore } from 'idb-keyval'\n\nexport type IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\nexport const IndexedDbArchivistConfigSchema: IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\n\nexport type IndexedDbArchivistConfig = ArchivistConfig<{\n /**\n * The database name\n */\n dbName?: string\n schema: IndexedDbArchivistConfigSchema\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n\nexport type IndexedDbArchivistParams = ArchivistParams<AnyConfigSchema<IndexedDbArchivistConfig>>\n\n@creatableModule()\nexport class IndexedDbArchivist<\n TParams extends IndexedDbArchivistParams = IndexedDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [IndexedDbArchivistConfigSchema]\n static defaultDbName = 'archivist'\n static defaultStoreName = 'payloads'\n\n private _db: UseStore | undefined\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the module name (not guaranteed to be unique) and if module\n * name is not supplied, 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?.name ?? IndexedDbArchivist.defaultDbName\n }\n\n override get queries() {\n return [ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ...super.queries]\n }\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`. The limitation of the current IndexedDB wrapper we're\n * using is that it only supports a single object store per DB. See here:\n * https://github.com/jakearchibald/idb-keyval/blob/main/custom-stores.md#defining-a-custom-database--store-name\n * If this becomes a problem or we need migrations/transactions, we can\n * move to this more-flexible library, which they recommend (and who\n * recommends them for our simple use case of key-value storage):\n * https://www.npmjs.com/package/idb\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n private get db(): UseStore {\n return assertEx(this._db, 'DB not initialized')\n }\n\n protected override async allHandler(): Promise<Payload[]> {\n const result = await entries<string, Payload>(this.db)\n return result.map<Payload>(([_hash, payload]) => payload)\n }\n\n protected override async clearHandler(): Promise<void> {\n await clear(this.db)\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n\n const foundHashesToDelete = payloadPairs.map(([hash, _]) => hash)\n await delMany(foundHashesToDelete, this.db)\n\n return foundHashesToDelete\n }\n\n protected override async getHandler(hashes: string[]): Promise<Payload[]> {\n return (await getMany<Payload>(hashes, this.db)).filter((result) => result !== undefined)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const entries = await Promise.all(\n payloads.map<Promise<[string, Payload]>>(async (payload) => {\n const hash = await PayloadHasher.hashAsync(payload)\n return [hash, payload]\n }),\n )\n await setMany(entries, this.db)\n\n return payloads\n }\n\n protected override async startHandler() {\n await super.startHandler()\n // NOTE: We could defer this creation to first access but we\n // want to fail fast here in case something is wrong\n this._db = createStore(this.dbName, this.storeName)\n return true\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,oBAAyB;AACzB,gCAAkC;AAClC,6BAQO;AACP,kBAA8B;AAC9B,0BAAiD;AAEjD,wBAAiF;;;;;;;;;;;;AAG1E,IAAMA,iCAAiE;;AAiB9E,IAAaC,sBAAN,mBAGGC,4CAAAA;EAKAC;;;;;;;;EASR,IAAIC,SAAS;;AACX,aAAOC,MAAA,KAAKC,WAAL,gBAAAD,IAAaD,aAAU,UAAKE,WAAL,mBAAaC,SAAQN,GAAmBO;EACxE;EAEA,IAAaC,UAAU;AACrB,WAAO;MAACC;MAAyBC;MAA2BC;MAA4BC;SAA+B,MAAMJ;;EAC/H;;;;;;;;;;;EAWA,IAAIK,YAAY;;AACd,aAAOT,MAAA,KAAKC,WAAL,gBAAAD,IAAaS,cAAab,GAAmBc;EACtD;EAEA,IAAYC,KAAe;AACzB,eAAOC,wBAAS,KAAKd,KAAK,oBAAA;EAC5B;EAEA,MAAyBe,aAAiC;AACxD,UAAMC,SAAS,UAAMC,2BAAyB,KAAKJ,EAAE;AACrD,WAAOG,OAAOE,IAAa,CAAC,CAACC,OAAOC,OAAAA,MAAaA,OAAAA;EACnD;EAEA,MAAyBC,eAA8B;AACrD,cAAMC,yBAAM,KAAKT,EAAE;EACrB;EAEA,MAAyBU,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMC,QAAQC,KACrD,MAAM,KAAKC,IAAIJ,MAAAA,GAASN,IAAgC,OAAOE,YAAY;MAAC,MAAMS,0BAAcC,UAAUV,OAAAA;MAAUA;KAAQ,CAAA;AAG/H,UAAMW,sBAAsBN,aAAaP,IAAI,CAAC,CAACc,MAAMC,CAAAA,MAAOD,IAAAA;AAC5D,cAAME,2BAAQH,qBAAqB,KAAKlB,EAAE;AAE1C,WAAOkB;EACT;EAEA,MAAyBI,WAAWX,QAAsC;AACxE,YAAQ,UAAMY,2BAAiBZ,QAAQ,KAAKX,EAAE,GAAGwB,OAAO,CAACrB,WAAWA,WAAWsB,MAAAA;EACjF;EAEA,MAAyBC,cAAcC,UAAyC;AAC9E,UAAMvB,WAAU,MAAMS,QAAQC,IAC5Ba,SAAStB,IAAgC,OAAOE,YAAAA;AAC9C,YAAMY,OAAO,MAAMH,0BAAcC,UAAUV,OAAAA;AAC3C,aAAO;QAACY;QAAMZ;;IAChB,CAAA,CAAA;AAEF,cAAMqB,2BAAQxB,UAAS,KAAKJ,EAAE;AAE9B,WAAO2B;EACT;EAEA,MAAyBE,eAAe;AACtC,UAAM,MAAMA,aAAAA;AAGZ,SAAK1C,UAAM2C,+BAAY,KAAK1C,QAAQ,KAAKU,SAAS;AAClD,WAAO;EACT;AACF,GAlFUZ,kCACR,cAJK,IAIW6C,iBAAgB;EAAC/C;IACjC,cALK,IAKEQ,iBAAgB,cACvB,cANK,IAMEO,oBAAmB,aANrB;AAAMd,qBAAAA,aAAAA;MADZ+C,qCAAAA;GACY/C,kBAAAA;","names":["IndexedDbArchivistConfigSchema","IndexedDbArchivist","AbstractArchivist","_db","dbName","_a","config","name","defaultDbName","queries","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","storeName","defaultStoreName","db","assertEx","allHandler","result","entries","map","_hash","payload","clearHandler","clear","deleteHandler","hashes","payloadPairs","Promise","all","get","PayloadHasher","hashAsync","foundHashesToDelete","hash","_","delMany","getHandler","getMany","filter","undefined","insertHandler","payloads","setMany","startHandler","createStore","configSchemas","creatableModule"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/IndexedDbArchivist.ts"],"sourcesContent":["export * from './IndexedDbArchivist'\n","import { assertEx } from '@xylabs/assert'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { clear, createStore, delMany, entries, getMany, setMany, UseStore } from 'idb-keyval'\n\nexport type IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\nexport const IndexedDbArchivistConfigSchema: IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\n\nexport type IndexedDbArchivistConfig = ArchivistConfig<{\n /**\n * The database name\n */\n dbName?: string\n schema: IndexedDbArchivistConfigSchema\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n\nexport type IndexedDbArchivistParams = ArchivistParams<AnyConfigSchema<IndexedDbArchivistConfig>>\n\n@creatableModule()\nexport class IndexedDbArchivist<\n TParams extends IndexedDbArchivistParams = IndexedDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [IndexedDbArchivistConfigSchema]\n static defaultDbName = 'archivist'\n static defaultStoreName = 'payloads'\n\n private _db: UseStore | undefined\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the module name (not guaranteed to be unique) and if module\n * name is not supplied, 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?.name ?? IndexedDbArchivist.defaultDbName\n }\n\n override get queries() {\n return [ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ...super.queries]\n }\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`. The limitation of the current IndexedDB wrapper we're\n * using is that it only supports a single object store per DB. See here:\n * https://github.com/jakearchibald/idb-keyval/blob/main/custom-stores.md#defining-a-custom-database--store-name\n * If this becomes a problem or we need migrations/transactions, we can\n * move to this more-flexible library, which they recommend (and who\n * recommends them for our simple use case of key-value storage):\n * https://www.npmjs.com/package/idb\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n private get db(): UseStore {\n return assertEx(this._db, 'DB not initialized')\n }\n\n protected override async allHandler(): Promise<Payload[]> {\n const result = await entries<string, Payload>(this.db)\n return result.map<Payload>(([_hash, payload]) => payload)\n }\n\n protected override async clearHandler(): Promise<void> {\n await clear(this.db)\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n\n const foundHashesToDelete = payloadPairs.map(([hash, _]) => hash)\n await delMany(foundHashesToDelete, this.db)\n\n return foundHashesToDelete\n }\n\n protected override async getHandler(hashes: string[]): Promise<Payload[]> {\n return (await getMany<Payload>(hashes, this.db)).filter((result) => result !== undefined)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const entries = await Promise.all(\n payloads.map<Promise<[string, Payload]>>(async (payload) => {\n const hash = await PayloadHasher.hashAsync(payload)\n return [hash, payload]\n }),\n )\n await setMany(entries, this.db)\n\n return payloads\n }\n\n protected override async startHandler() {\n await super.startHandler()\n // NOTE: We could defer this creation to first access but we\n // want to fail fast here in case something is wrong\n this._db = createStore(this.dbName, this.storeName)\n return true\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;ACAA,oBAAyB;AACzB,gCAAkC;AAClC,6BAQO;AACP,kBAA8B;AAC9B,0BAAiD;AAEjD,wBAAiF;;;;;;;;;;;;AAG1E,IAAMA,iCAAiE;AAiBvE,IAAMC,sBAAN,MAAMA,4BAGHC,4CAAAA;EAKAC;;;;;;;;EASR,IAAIC,SAAS;;AACX,aAAO,UAAKC,WAAL,mBAAaD,aAAU,UAAKC,WAAL,mBAAaC,SAAQL,oBAAmBM;EACxE;EAEA,IAAaC,UAAU;AACrB,WAAO;MAACC;MAAyBC;MAA2BC;MAA4BC;SAA+B,MAAMJ;;EAC/H;;;;;;;;;;;EAWA,IAAIK,YAAY;;AACd,aAAO,UAAKR,WAAL,mBAAaQ,cAAaZ,oBAAmBa;EACtD;EAEA,IAAYC,KAAe;AACzB,eAAOC,wBAAS,KAAKb,KAAK,oBAAA;EAC5B;EAEA,MAAyBc,aAAiC;AACxD,UAAMC,SAAS,UAAMC,2BAAyB,KAAKJ,EAAE;AACrD,WAAOG,OAAOE,IAAa,CAAC,CAACC,OAAOC,OAAAA,MAAaA,OAAAA;EACnD;EAEA,MAAyBC,eAA8B;AACrD,cAAMC,yBAAM,KAAKT,EAAE;EACrB;EAEA,MAAyBU,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMC,QAAQC,KACrD,MAAM,KAAKC,IAAIJ,MAAAA,GAASN,IAAgC,OAAOE,YAAY;MAAC,MAAMS,0BAAcC,UAAUV,OAAAA;MAAUA;KAAQ,CAAA;AAG/H,UAAMW,sBAAsBN,aAAaP,IAAI,CAAC,CAACc,MAAMC,CAAAA,MAAOD,IAAAA;AAC5D,cAAME,2BAAQH,qBAAqB,KAAKlB,EAAE;AAE1C,WAAOkB;EACT;EAEA,MAAyBI,WAAWX,QAAsC;AACxE,YAAQ,UAAMY,2BAAiBZ,QAAQ,KAAKX,EAAE,GAAGwB,OAAO,CAACrB,WAAWA,WAAWsB,MAAAA;EACjF;EAEA,MAAyBC,cAAcC,UAAyC;AAC9E,UAAMvB,WAAU,MAAMS,QAAQC,IAC5Ba,SAAStB,IAAgC,OAAOE,YAAAA;AAC9C,YAAMY,OAAO,MAAMH,0BAAcC,UAAUV,OAAAA;AAC3C,aAAO;QAACY;QAAMZ;;IAChB,CAAA,CAAA;AAEF,cAAMqB,2BAAQxB,UAAS,KAAKJ,EAAE;AAE9B,WAAO2B;EACT;EAEA,MAAyBE,eAAe;AACtC,UAAM,MAAMA,aAAAA;AAGZ,SAAKzC,UAAM0C,+BAAY,KAAKzC,QAAQ,KAAKS,SAAS;AAClD,WAAO;EACT;AACF;AAlFUX;AACR,cAJWD,qBAIK6C,iBAAgB;EAAC9C;;AACjC,cALWC,qBAKJM,iBAAgB;AACvB,cANWN,qBAMJa,oBAAmB;AANrB,IAAMb,qBAAN;AAAMA,qBAAAA,aAAAA;MADZ8C,qCAAAA;GACY9C,kBAAAA;","names":["IndexedDbArchivistConfigSchema","IndexedDbArchivist","AbstractArchivist","_db","dbName","config","name","defaultDbName","queries","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","storeName","defaultStoreName","db","assertEx","allHandler","result","entries","map","_hash","payload","clearHandler","clear","deleteHandler","hashes","payloadPairs","Promise","all","get","PayloadHasher","hashAsync","foundHashesToDelete","hash","_","delMany","getHandler","getMany","filter","undefined","insertHandler","payloads","setMany","startHandler","createStore","configSchemas","creatableModule"]}
@@ -25,8 +25,7 @@ function _ts_decorate(decorators, target, key, desc) {
25
25
  }
26
26
  __name(_ts_decorate, "_ts_decorate");
27
27
  var IndexedDbArchivistConfigSchema = "network.xyo.archivist.indexeddb.config";
28
- var _a;
29
- var IndexedDbArchivist = (_a = class extends AbstractArchivist {
28
+ var _IndexedDbArchivist = class _IndexedDbArchivist extends AbstractArchivist {
30
29
  _db;
31
30
  /**
32
31
  * The database name. If not supplied via config, it defaults
@@ -36,8 +35,8 @@ var IndexedDbArchivist = (_a = class extends AbstractArchivist {
36
35
  * make the most sense for 99% of use cases.
37
36
  */
38
37
  get dbName() {
39
- var _a2, _b;
40
- return ((_a2 = this.config) == null ? void 0 : _a2.dbName) ?? ((_b = this.config) == null ? void 0 : _b.name) ?? _a.defaultDbName;
38
+ var _a, _b;
39
+ return ((_a = this.config) == null ? void 0 : _a.dbName) ?? ((_b = this.config) == null ? void 0 : _b.name) ?? _IndexedDbArchivist.defaultDbName;
41
40
  }
42
41
  get queries() {
43
42
  return [
@@ -59,8 +58,8 @@ var IndexedDbArchivist = (_a = class extends AbstractArchivist {
59
58
  * https://www.npmjs.com/package/idb
60
59
  */
61
60
  get storeName() {
62
- var _a2;
63
- return ((_a2 = this.config) == null ? void 0 : _a2.storeName) ?? _a.defaultStoreName;
61
+ var _a;
62
+ return ((_a = this.config) == null ? void 0 : _a.storeName) ?? _IndexedDbArchivist.defaultStoreName;
64
63
  }
65
64
  get db() {
66
65
  return assertEx(this._db, "DB not initialized");
@@ -100,9 +99,14 @@ var IndexedDbArchivist = (_a = class extends AbstractArchivist {
100
99
  this._db = createStore(this.dbName, this.storeName);
101
100
  return true;
102
101
  }
103
- }, __name(_a, "IndexedDbArchivist"), __publicField(_a, "configSchemas", [
102
+ };
103
+ __name(_IndexedDbArchivist, "IndexedDbArchivist");
104
+ __publicField(_IndexedDbArchivist, "configSchemas", [
104
105
  IndexedDbArchivistConfigSchema
105
- ]), __publicField(_a, "defaultDbName", "archivist"), __publicField(_a, "defaultStoreName", "payloads"), _a);
106
+ ]);
107
+ __publicField(_IndexedDbArchivist, "defaultDbName", "archivist");
108
+ __publicField(_IndexedDbArchivist, "defaultStoreName", "payloads");
109
+ var IndexedDbArchivist = _IndexedDbArchivist;
106
110
  IndexedDbArchivist = _ts_decorate([
107
111
  creatableModule()
108
112
  ], IndexedDbArchivist);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/IndexedDbArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { clear, createStore, delMany, entries, getMany, setMany, UseStore } from 'idb-keyval'\n\nexport type IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\nexport const IndexedDbArchivistConfigSchema: IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\n\nexport type IndexedDbArchivistConfig = ArchivistConfig<{\n /**\n * The database name\n */\n dbName?: string\n schema: IndexedDbArchivistConfigSchema\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n\nexport type IndexedDbArchivistParams = ArchivistParams<AnyConfigSchema<IndexedDbArchivistConfig>>\n\n@creatableModule()\nexport class IndexedDbArchivist<\n TParams extends IndexedDbArchivistParams = IndexedDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [IndexedDbArchivistConfigSchema]\n static defaultDbName = 'archivist'\n static defaultStoreName = 'payloads'\n\n private _db: UseStore | undefined\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the module name (not guaranteed to be unique) and if module\n * name is not supplied, 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?.name ?? IndexedDbArchivist.defaultDbName\n }\n\n override get queries() {\n return [ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ...super.queries]\n }\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`. The limitation of the current IndexedDB wrapper we're\n * using is that it only supports a single object store per DB. See here:\n * https://github.com/jakearchibald/idb-keyval/blob/main/custom-stores.md#defining-a-custom-database--store-name\n * If this becomes a problem or we need migrations/transactions, we can\n * move to this more-flexible library, which they recommend (and who\n * recommends them for our simple use case of key-value storage):\n * https://www.npmjs.com/package/idb\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n private get db(): UseStore {\n return assertEx(this._db, 'DB not initialized')\n }\n\n protected override async allHandler(): Promise<Payload[]> {\n const result = await entries<string, Payload>(this.db)\n return result.map<Payload>(([_hash, payload]) => payload)\n }\n\n protected override async clearHandler(): Promise<void> {\n await clear(this.db)\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n\n const foundHashesToDelete = payloadPairs.map(([hash, _]) => hash)\n await delMany(foundHashesToDelete, this.db)\n\n return foundHashesToDelete\n }\n\n protected override async getHandler(hashes: string[]): Promise<Payload[]> {\n return (await getMany<Payload>(hashes, this.db)).filter((result) => result !== undefined)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const entries = await Promise.all(\n payloads.map<Promise<[string, Payload]>>(async (payload) => {\n const hash = await PayloadHasher.hashAsync(payload)\n return [hash, payload]\n }),\n )\n await setMany(entries, this.db)\n\n return payloads\n }\n\n protected override async startHandler() {\n await super.startHandler()\n // NOTE: We could defer this creation to first access but we\n // want to fail fast here in case something is wrong\n this._db = createStore(this.dbName, this.storeName)\n return true\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAASA,gBAAgB;AACzB,SAASC,yBAAyB;AAClC,SACEC,yBACAC,2BAEAC,4BACAC,kCAGK;AACP,SAASC,qBAAqB;AAC9B,SAA0BC,uBAAuB;AAEjD,SAASC,OAAOC,aAAaC,SAASC,SAASC,SAASC,eAAyB;;;;;;;;;;;;AAG1E,IAAMC,iCAAiE;;AAiB9E,IAAaC,sBAAN,mBAGGC,kBAAAA;EAKAC;;;;;;;;EASR,IAAIC,SAAS;;AACX,aAAOC,MAAA,KAAKC,WAAL,gBAAAD,IAAaD,aAAU,UAAKE,WAAL,mBAAaC,SAAQN,GAAmBO;EACxE;EAEA,IAAaC,UAAU;AACrB,WAAO;MAACC;MAAyBC;MAA2BC;MAA4BC;SAA+B,MAAMJ;;EAC/H;;;;;;;;;;;EAWA,IAAIK,YAAY;;AACd,aAAOT,MAAA,KAAKC,WAAL,gBAAAD,IAAaS,cAAab,GAAmBc;EACtD;EAEA,IAAYC,KAAe;AACzB,WAAOC,SAAS,KAAKd,KAAK,oBAAA;EAC5B;EAEA,MAAyBe,aAAiC;AACxD,UAAMC,SAAS,MAAMC,QAAyB,KAAKJ,EAAE;AACrD,WAAOG,OAAOE,IAAa,CAAC,CAACC,OAAOC,OAAAA,MAAaA,OAAAA;EACnD;EAEA,MAAyBC,eAA8B;AACrD,UAAMC,MAAM,KAAKT,EAAE;EACrB;EAEA,MAAyBU,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMC,QAAQC,KACrD,MAAM,KAAKC,IAAIJ,MAAAA,GAASN,IAAgC,OAAOE,YAAY;MAAC,MAAMS,cAAcC,UAAUV,OAAAA;MAAUA;KAAQ,CAAA;AAG/H,UAAMW,sBAAsBN,aAAaP,IAAI,CAAC,CAACc,MAAMC,CAAAA,MAAOD,IAAAA;AAC5D,UAAME,QAAQH,qBAAqB,KAAKlB,EAAE;AAE1C,WAAOkB;EACT;EAEA,MAAyBI,WAAWX,QAAsC;AACxE,YAAQ,MAAMY,QAAiBZ,QAAQ,KAAKX,EAAE,GAAGwB,OAAO,CAACrB,WAAWA,WAAWsB,MAAAA;EACjF;EAEA,MAAyBC,cAAcC,UAAyC;AAC9E,UAAMvB,WAAU,MAAMS,QAAQC,IAC5Ba,SAAStB,IAAgC,OAAOE,YAAAA;AAC9C,YAAMY,OAAO,MAAMH,cAAcC,UAAUV,OAAAA;AAC3C,aAAO;QAACY;QAAMZ;;IAChB,CAAA,CAAA;AAEF,UAAMqB,QAAQxB,UAAS,KAAKJ,EAAE;AAE9B,WAAO2B;EACT;EAEA,MAAyBE,eAAe;AACtC,UAAM,MAAMA,aAAAA;AAGZ,SAAK1C,MAAM2C,YAAY,KAAK1C,QAAQ,KAAKU,SAAS;AAClD,WAAO;EACT;AACF,GAlFUZ,kCACR,cAJK,IAIW6C,iBAAgB;EAAC/C;IACjC,cALK,IAKEQ,iBAAgB,cACvB,cANK,IAMEO,oBAAmB,aANrB;AAAMd,qBAAAA,aAAAA;EADZ+C,gBAAAA;GACY/C,kBAAAA;","names":["assertEx","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","clear","createStore","delMany","entries","getMany","setMany","IndexedDbArchivistConfigSchema","IndexedDbArchivist","AbstractArchivist","_db","dbName","_a","config","name","defaultDbName","queries","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","storeName","defaultStoreName","db","assertEx","allHandler","result","entries","map","_hash","payload","clearHandler","clear","deleteHandler","hashes","payloadPairs","Promise","all","get","PayloadHasher","hashAsync","foundHashesToDelete","hash","_","delMany","getHandler","getMany","filter","undefined","insertHandler","payloads","setMany","startHandler","createStore","configSchemas","creatableModule"]}
1
+ {"version":3,"sources":["../../src/IndexedDbArchivist.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistConfig,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistParams,\n} from '@xyo-network/archivist-model'\nimport { PayloadHasher } from '@xyo-network/core'\nimport { AnyConfigSchema, creatableModule } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\nimport { clear, createStore, delMany, entries, getMany, setMany, UseStore } from 'idb-keyval'\n\nexport type IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\nexport const IndexedDbArchivistConfigSchema: IndexedDbArchivistConfigSchema = 'network.xyo.archivist.indexeddb.config'\n\nexport type IndexedDbArchivistConfig = ArchivistConfig<{\n /**\n * The database name\n */\n dbName?: string\n schema: IndexedDbArchivistConfigSchema\n /**\n * The name of the object store\n */\n storeName?: string\n}>\n\nexport type IndexedDbArchivistParams = ArchivistParams<AnyConfigSchema<IndexedDbArchivistConfig>>\n\n@creatableModule()\nexport class IndexedDbArchivist<\n TParams extends IndexedDbArchivistParams = IndexedDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override configSchemas = [IndexedDbArchivistConfigSchema]\n static defaultDbName = 'archivist'\n static defaultStoreName = 'payloads'\n\n private _db: UseStore | undefined\n\n /**\n * The database name. If not supplied via config, it defaults\n * to the module name (not guaranteed to be unique) and if module\n * name is not supplied, 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?.name ?? IndexedDbArchivist.defaultDbName\n }\n\n override get queries() {\n return [ArchivistAllQuerySchema, ArchivistClearQuerySchema, ArchivistDeleteQuerySchema, ArchivistInsertQuerySchema, ...super.queries]\n }\n /**\n * The name of the object store. If not supplied via config, it defaults\n * to `payloads`. The limitation of the current IndexedDB wrapper we're\n * using is that it only supports a single object store per DB. See here:\n * https://github.com/jakearchibald/idb-keyval/blob/main/custom-stores.md#defining-a-custom-database--store-name\n * If this becomes a problem or we need migrations/transactions, we can\n * move to this more-flexible library, which they recommend (and who\n * recommends them for our simple use case of key-value storage):\n * https://www.npmjs.com/package/idb\n */\n get storeName() {\n return this.config?.storeName ?? IndexedDbArchivist.defaultStoreName\n }\n\n private get db(): UseStore {\n return assertEx(this._db, 'DB not initialized')\n }\n\n protected override async allHandler(): Promise<Payload[]> {\n const result = await entries<string, Payload>(this.db)\n return result.map<Payload>(([_hash, payload]) => payload)\n }\n\n protected override async clearHandler(): Promise<void> {\n await clear(this.db)\n }\n\n protected override async deleteHandler(hashes: string[]): Promise<string[]> {\n const payloadPairs: [string, Payload][] = await Promise.all(\n (await this.get(hashes)).map<Promise<[string, Payload]>>(async (payload) => [await PayloadHasher.hashAsync(payload), payload]),\n )\n\n const foundHashesToDelete = payloadPairs.map(([hash, _]) => hash)\n await delMany(foundHashesToDelete, this.db)\n\n return foundHashesToDelete\n }\n\n protected override async getHandler(hashes: string[]): Promise<Payload[]> {\n return (await getMany<Payload>(hashes, this.db)).filter((result) => result !== undefined)\n }\n\n protected override async insertHandler(payloads: Payload[]): Promise<Payload[]> {\n const entries = await Promise.all(\n payloads.map<Promise<[string, Payload]>>(async (payload) => {\n const hash = await PayloadHasher.hashAsync(payload)\n return [hash, payload]\n }),\n )\n await setMany(entries, this.db)\n\n return payloads\n }\n\n protected override async startHandler() {\n await super.startHandler()\n // NOTE: We could defer this creation to first access but we\n // want to fail fast here in case something is wrong\n this._db = createStore(this.dbName, this.storeName)\n return true\n }\n}\n"],"mappings":";;;;;;;;;AAAA,SAASA,gBAAgB;AACzB,SAASC,yBAAyB;AAClC,SACEC,yBACAC,2BAEAC,4BACAC,kCAGK;AACP,SAASC,qBAAqB;AAC9B,SAA0BC,uBAAuB;AAEjD,SAASC,OAAOC,aAAaC,SAASC,SAASC,SAASC,eAAyB;;;;;;;;;;;;AAG1E,IAAMC,iCAAiE;AAiBvE,IAAMC,sBAAN,MAAMA,4BAGHC,kBAAAA;EAKAC;;;;;;;;EASR,IAAIC,SAAS;;AACX,aAAO,UAAKC,WAAL,mBAAaD,aAAU,UAAKC,WAAL,mBAAaC,SAAQL,oBAAmBM;EACxE;EAEA,IAAaC,UAAU;AACrB,WAAO;MAACC;MAAyBC;MAA2BC;MAA4BC;SAA+B,MAAMJ;;EAC/H;;;;;;;;;;;EAWA,IAAIK,YAAY;;AACd,aAAO,UAAKR,WAAL,mBAAaQ,cAAaZ,oBAAmBa;EACtD;EAEA,IAAYC,KAAe;AACzB,WAAOC,SAAS,KAAKb,KAAK,oBAAA;EAC5B;EAEA,MAAyBc,aAAiC;AACxD,UAAMC,SAAS,MAAMC,QAAyB,KAAKJ,EAAE;AACrD,WAAOG,OAAOE,IAAa,CAAC,CAACC,OAAOC,OAAAA,MAAaA,OAAAA;EACnD;EAEA,MAAyBC,eAA8B;AACrD,UAAMC,MAAM,KAAKT,EAAE;EACrB;EAEA,MAAyBU,cAAcC,QAAqC;AAC1E,UAAMC,eAAoC,MAAMC,QAAQC,KACrD,MAAM,KAAKC,IAAIJ,MAAAA,GAASN,IAAgC,OAAOE,YAAY;MAAC,MAAMS,cAAcC,UAAUV,OAAAA;MAAUA;KAAQ,CAAA;AAG/H,UAAMW,sBAAsBN,aAAaP,IAAI,CAAC,CAACc,MAAMC,CAAAA,MAAOD,IAAAA;AAC5D,UAAME,QAAQH,qBAAqB,KAAKlB,EAAE;AAE1C,WAAOkB;EACT;EAEA,MAAyBI,WAAWX,QAAsC;AACxE,YAAQ,MAAMY,QAAiBZ,QAAQ,KAAKX,EAAE,GAAGwB,OAAO,CAACrB,WAAWA,WAAWsB,MAAAA;EACjF;EAEA,MAAyBC,cAAcC,UAAyC;AAC9E,UAAMvB,WAAU,MAAMS,QAAQC,IAC5Ba,SAAStB,IAAgC,OAAOE,YAAAA;AAC9C,YAAMY,OAAO,MAAMH,cAAcC,UAAUV,OAAAA;AAC3C,aAAO;QAACY;QAAMZ;;IAChB,CAAA,CAAA;AAEF,UAAMqB,QAAQxB,UAAS,KAAKJ,EAAE;AAE9B,WAAO2B;EACT;EAEA,MAAyBE,eAAe;AACtC,UAAM,MAAMA,aAAAA;AAGZ,SAAKzC,MAAM0C,YAAY,KAAKzC,QAAQ,KAAKS,SAAS;AAClD,WAAO;EACT;AACF;AAlFUX;AACR,cAJWD,qBAIK6C,iBAAgB;EAAC9C;;AACjC,cALWC,qBAKJM,iBAAgB;AACvB,cANWN,qBAMJa,oBAAmB;AANrB,IAAMb,qBAAN;AAAMA,qBAAAA,aAAAA;EADZ8C,gBAAAA;GACY9C,kBAAAA;","names":["assertEx","AbstractArchivist","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","PayloadHasher","creatableModule","clear","createStore","delMany","entries","getMany","setMany","IndexedDbArchivistConfigSchema","IndexedDbArchivist","AbstractArchivist","_db","dbName","config","name","defaultDbName","queries","ArchivistAllQuerySchema","ArchivistClearQuerySchema","ArchivistDeleteQuerySchema","ArchivistInsertQuerySchema","storeName","defaultStoreName","db","assertEx","allHandler","result","entries","map","_hash","payload","clearHandler","clear","deleteHandler","hashes","payloadPairs","Promise","all","get","PayloadHasher","hashAsync","foundHashesToDelete","hash","_","delMany","getHandler","getMany","filter","undefined","insertHandler","payloads","setMany","startHandler","createStore","configSchemas","creatableModule"]}
package/package.json CHANGED
@@ -11,11 +11,11 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "@xylabs/assert": "^2.13.9",
14
- "@xyo-network/archivist-abstract": "~2.81.3",
15
- "@xyo-network/archivist-model": "~2.81.3",
16
- "@xyo-network/core": "~2.81.3",
17
- "@xyo-network/module-model": "~2.81.3",
18
- "@xyo-network/payload-model": "~2.81.3",
14
+ "@xyo-network/archivist-abstract": "~2.81.4",
15
+ "@xyo-network/archivist-model": "~2.81.4",
16
+ "@xyo-network/core": "~2.81.4",
17
+ "@xyo-network/module-model": "~2.81.4",
18
+ "@xyo-network/payload-model": "~2.81.4",
19
19
  "idb-keyval": "^6.2.1"
20
20
  },
21
21
  "devDependencies": {
@@ -23,9 +23,9 @@
23
23
  "@xylabs/promise": "^2.13.9",
24
24
  "@xylabs/ts-scripts-yarn3": "^3.2.8",
25
25
  "@xylabs/tsconfig": "^3.2.8",
26
- "@xyo-network/account": "~2.81.3",
26
+ "@xyo-network/account": "~2.81.4",
27
27
  "@xyo-network/id-payload-plugin": "^2.81.1",
28
- "@xyo-network/payload-wrapper": "~2.81.3",
28
+ "@xyo-network/payload-wrapper": "~2.81.4",
29
29
  "fake-indexeddb": "^4.0.2",
30
30
  "typescript": "^5.3.2"
31
31
  },
@@ -69,5 +69,5 @@
69
69
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
70
70
  },
71
71
  "sideEffects": false,
72
- "version": "2.81.3"
72
+ "version": "2.81.4"
73
73
  }