@xyo-network/archivist-lmdb 3.15.10 → 3.16.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
CHANGED
|
@@ -110,17 +110,17 @@ var LmdbArchivist = class extends AbstractArchivist {
|
|
|
110
110
|
return settled.filter(fulfilled).map((result) => result.value).filter(exists);
|
|
111
111
|
}
|
|
112
112
|
async deleteHandler(hashes) {
|
|
113
|
-
await this.db.transaction(() => {
|
|
114
|
-
|
|
113
|
+
return (await this.db.transaction(() => {
|
|
114
|
+
return hashes.map((hash) => {
|
|
115
115
|
const payload = this.hashIndex.get(hash);
|
|
116
116
|
if (payload) {
|
|
117
117
|
this.hashIndex.removeSync(hash);
|
|
118
118
|
this.dataHashIndex.removeSync(payload._dataHash);
|
|
119
119
|
this.sequenceIndex.removeSync(payload._sequence);
|
|
120
|
+
return payload;
|
|
120
121
|
}
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
return hashes;
|
|
122
|
+
});
|
|
123
|
+
})).filter(exists);
|
|
124
124
|
}
|
|
125
125
|
getHandler(hashes) {
|
|
126
126
|
return hashes.map((hash) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Archivist.ts","../../src/Schema.ts","../../src/Config.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash, Hex } from '@xylabs/hex'\nimport { fulfilled } from '@xylabs/promise'\nimport { AbstractArchivist, StorageClassLabel } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n IndexDescription,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { creatableModule } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n Payload, Schema, SequenceConstants,\n WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport {\n Database, open,\n RangeOptions, RootDatabase,\n} from 'lmdb'\n\nimport { LmdbArchivistConfigSchema } from './Config.ts'\nimport { LmdbArchivistParams } from './Params.ts'\n\n@creatableModule()\nexport class LmdbArchivist<\n TParams extends LmdbArchivistParams = LmdbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, LmdbArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = LmdbArchivistConfigSchema\n static override readonly labels = { ...super.labels, [StorageClassLabel]: 'disk' }\n\n protected static readonly dataHashIndex: IndexDescription = {\n key: { _dataHash: 1 }, multiEntry: false, unique: false,\n }\n\n protected static readonly sequenceIndex: IndexDescription = {\n key: { _sequence: 1 }, multiEntry: false, unique: true,\n }\n\n protected dataHashIndex!: Database<Hash, string>\n protected db!: RootDatabase\n protected hashIndex!: Database<WithStorageMeta<Payload>, Hash>\n protected sequenceIndex!: Database<Hash, Hex>\n\n get dbName() {\n return assertEx(this.config.dbName, () => 'No dbName specified')\n }\n\n get folderPath() {\n return `${this.location}/${this.config.dbName}/${this.storeName}`\n }\n\n get location() {\n return assertEx(this.config.location, () => 'No location specified')\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n get storeName() {\n return assertEx(this.config.storeName, () => 'No storeName specified')\n }\n\n override async startHandler(): Promise<boolean> {\n await super.startHandler()\n\n // Open LMDB database\n this.db = open({\n path: this.folderPath,\n maxDbs: 3, // Payloads, dataHashIndex, sequenceIndex\n })\n\n // Open sub-databases\n this.hashIndex = this.db.openDB<WithStorageMeta<Payload>, Hash>({ name: 'payloads' })\n this.dataHashIndex = this.db.openDB<Hash, string>({ name: 'dataHashIndex' })\n this.sequenceIndex = this.db.openDB<Hash, Hex>({ name: 'sequenceIndex' })\n\n if (this.config.clearStoreOnStart) {\n await this.clearHandler()\n }\n return true\n }\n\n protected override allHandler(): WithStorageMeta<Payload>[] {\n return [...this.hashIndex.getRange({})].map(entry => entry.value).sort(PayloadBuilder.compareStorageMeta)\n }\n\n protected override async clearHandler(): Promise<void> {\n // Ensure all operations are synchronous within transaction\n await this.db.transaction(() => {\n this.hashIndex.clearSync()\n this.dataHashIndex.clearSync()\n this.sequenceIndex.clearSync()\n })\n return this.emit('cleared', { mod: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = this.allHandler()\n const settled = await Promise.allSettled(\n Object.values((await this.parentArchivists()).commit ?? []).map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }).filter(exists),\n )\n await this.clearHandler()\n return settled.filter(fulfilled).map(result => result.value).filter(exists)\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<Hash[]> {\n await this.db.transaction(() => {\n for (const hash of hashes) {\n const payload = this.hashIndex.get(hash)\n if (payload) {\n this.hashIndex.removeSync(hash)\n this.dataHashIndex.removeSync(payload._dataHash)\n this.sequenceIndex.removeSync(payload._sequence)\n }\n }\n })\n return hashes\n }\n\n protected override getHandler(hashes: Hash[]): WithStorageMeta<Payload>[] {\n return hashes.map((hash) => {\n const byHash = this.hashIndex.get(hash)\n if (byHash) return byHash\n const byDataHash = this.dataHashIndex.get(hash)\n if (byDataHash) return this.hashIndex.get(byDataHash)\n }).filter(exists)\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n await this.db.transaction(() => {\n for (const payload of payloads) {\n this.hashIndex.putSync(payload._hash, payload)\n this.dataHashIndex.putSync(payload._dataHash, payload._hash)\n this.sequenceIndex.putSync(payload._sequence, payload._hash)\n }\n })\n return payloads\n }\n\n protected override nextHandler(options?: ArchivistNextOptions): WithStorageMeta<Payload>[] {\n const {\n limit = 100, cursor, order, open = cursor ? true : false,\n } = options ?? {}\n\n // Determine search range based on order (ascending or descending)\n const rangeOptions: RangeOptions = order === 'desc'\n ? { start: cursor ?? SequenceConstants.maxLocalSequence, reverse: true }\n : { start: cursor ?? SequenceConstants.minLocalSequence }\n\n // Get range of sequence-indexed hashes\n const sequenceEntries = [...this.sequenceIndex.getRange(rangeOptions)]\n .slice(open ? 1 : 0, limit + (open ? 1 : 0)) // Apply cursor offset and limit\n\n // Fetch full payloads using hashes retrieved from sequence index\n return sequenceEntries\n .map(({ value: hash }) => this.hashIndex.get(hash))\n .filter(exists)\n }\n}\n","export const LmdbArchivistSchema = 'network.xyo.archivist.lmdb' as const\nexport type LmdbArchivistSchema = typeof LmdbArchivistSchema\n","import type { ArchivistConfig } from '@xyo-network/archivist-model'\n\nimport { LmdbArchivistSchema } from './Schema.ts'\n\nexport type LmdbArchivistConfigSchema = `${LmdbArchivistSchema}.config`\nexport const LmdbArchivistConfigSchema: LmdbArchivistConfigSchema = `${LmdbArchivistSchema}.config`\n\nexport type LmdbArchivistConfig<TStoreName extends string = string> = ArchivistConfig<{\n /**\n * If true, the store will be cleared on start\n */\n clearStoreOnStart?: boolean\n /**\n * The database name - also used as the filename for the db\n */\n dbName?: string\n /**\n * The location where the folder for the db will be created\n */\n location?: string\n schema: LmdbArchivistConfigSchema\n /**\n * The name of the object store - becomes a sub-level\n */\n storeName?: TStoreName\n}>\n"],"mappings":"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","names":["open"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Archivist.ts","../../src/Schema.ts","../../src/Config.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport { exists } from '@xylabs/exists'\nimport { Hash, Hex } from '@xylabs/hex'\nimport { fulfilled } from '@xylabs/promise'\nimport { AbstractArchivist, StorageClassLabel } from '@xyo-network/archivist-abstract'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuery,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n ArchivistNextQuerySchema,\n IndexDescription,\n} from '@xyo-network/archivist-model'\nimport { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { creatableModule } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n Payload, Schema, SequenceConstants,\n WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport {\n Database, open,\n RangeOptions, RootDatabase,\n} from 'lmdb'\n\nimport { LmdbArchivistConfigSchema } from './Config.ts'\nimport { LmdbArchivistParams } from './Params.ts'\n\n@creatableModule()\nexport class LmdbArchivist<\n TParams extends LmdbArchivistParams = LmdbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, LmdbArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = LmdbArchivistConfigSchema\n static override readonly labels = { ...super.labels, [StorageClassLabel]: 'disk' }\n\n protected static readonly dataHashIndex: IndexDescription = {\n key: { _dataHash: 1 }, multiEntry: false, unique: false,\n }\n\n protected static readonly sequenceIndex: IndexDescription = {\n key: { _sequence: 1 }, multiEntry: false, unique: true,\n }\n\n protected dataHashIndex!: Database<Hash, string>\n protected db!: RootDatabase\n protected hashIndex!: Database<WithStorageMeta<Payload>, Hash>\n protected sequenceIndex!: Database<Hash, Hex>\n\n get dbName() {\n return assertEx(this.config.dbName, () => 'No dbName specified')\n }\n\n get folderPath() {\n return `${this.location}/${this.config.dbName}/${this.storeName}`\n }\n\n get location() {\n return assertEx(this.config.location, () => 'No location specified')\n }\n\n override get queries() {\n return [\n ArchivistAllQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistNextQuerySchema,\n ...super.queries,\n ]\n }\n\n get storeName() {\n return assertEx(this.config.storeName, () => 'No storeName specified')\n }\n\n override async startHandler(): Promise<boolean> {\n await super.startHandler()\n\n // Open LMDB database\n this.db = open({\n path: this.folderPath,\n maxDbs: 3, // Payloads, dataHashIndex, sequenceIndex\n })\n\n // Open sub-databases\n this.hashIndex = this.db.openDB<WithStorageMeta<Payload>, Hash>({ name: 'payloads' })\n this.dataHashIndex = this.db.openDB<Hash, string>({ name: 'dataHashIndex' })\n this.sequenceIndex = this.db.openDB<Hash, Hex>({ name: 'sequenceIndex' })\n\n if (this.config.clearStoreOnStart) {\n await this.clearHandler()\n }\n return true\n }\n\n protected override allHandler(): WithStorageMeta<Payload>[] {\n return [...this.hashIndex.getRange({})].map(entry => entry.value).sort(PayloadBuilder.compareStorageMeta)\n }\n\n protected override async clearHandler(): Promise<void> {\n // Ensure all operations are synchronous within transaction\n await this.db.transaction(() => {\n this.hashIndex.clearSync()\n this.dataHashIndex.clearSync()\n this.sequenceIndex.clearSync()\n })\n return this.emit('cleared', { mod: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = this.allHandler()\n const settled = await Promise.allSettled(\n Object.values((await this.parentArchivists()).commit ?? []).map(async (parent) => {\n const queryPayload: ArchivistInsertQuery = { schema: ArchivistInsertQuerySchema }\n const query = await this.bindQuery(queryPayload, payloads)\n return (await parent?.query(query[0], query[1]))?.[0]\n }).filter(exists),\n )\n await this.clearHandler()\n return settled.filter(fulfilled).map(result => result.value).filter(exists)\n }\n\n protected override async deleteHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n return (await this.db.transaction(() => {\n return hashes.map((hash) => {\n const payload = this.hashIndex.get(hash)\n if (payload) {\n this.hashIndex.removeSync(hash)\n this.dataHashIndex.removeSync(payload._dataHash)\n this.sequenceIndex.removeSync(payload._sequence)\n return payload\n }\n })\n })).filter(exists)\n }\n\n protected override getHandler(hashes: Hash[]): WithStorageMeta<Payload>[] {\n return hashes.map((hash) => {\n const byHash = this.hashIndex.get(hash)\n if (byHash) return byHash\n const byDataHash = this.dataHashIndex.get(hash)\n if (byDataHash) return this.hashIndex.get(byDataHash)\n }).filter(exists)\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n await this.db.transaction(() => {\n for (const payload of payloads) {\n this.hashIndex.putSync(payload._hash, payload)\n this.dataHashIndex.putSync(payload._dataHash, payload._hash)\n this.sequenceIndex.putSync(payload._sequence, payload._hash)\n }\n })\n return payloads\n }\n\n protected override nextHandler(options?: ArchivistNextOptions): WithStorageMeta<Payload>[] {\n const {\n limit = 100, cursor, order, open = cursor ? true : false,\n } = options ?? {}\n\n // Determine search range based on order (ascending or descending)\n const rangeOptions: RangeOptions = order === 'desc'\n ? { start: cursor ?? SequenceConstants.maxLocalSequence, reverse: true }\n : { start: cursor ?? SequenceConstants.minLocalSequence }\n\n // Get range of sequence-indexed hashes\n const sequenceEntries = [...this.sequenceIndex.getRange(rangeOptions)]\n .slice(open ? 1 : 0, limit + (open ? 1 : 0)) // Apply cursor offset and limit\n\n // Fetch full payloads using hashes retrieved from sequence index\n return sequenceEntries\n .map(({ value: hash }) => this.hashIndex.get(hash))\n .filter(exists)\n }\n}\n","export const LmdbArchivistSchema = 'network.xyo.archivist.lmdb' as const\nexport type LmdbArchivistSchema = typeof LmdbArchivistSchema\n","import type { ArchivistConfig } from '@xyo-network/archivist-model'\n\nimport { LmdbArchivistSchema } from './Schema.ts'\n\nexport type LmdbArchivistConfigSchema = `${LmdbArchivistSchema}.config`\nexport const LmdbArchivistConfigSchema: LmdbArchivistConfigSchema = `${LmdbArchivistSchema}.config`\n\nexport type LmdbArchivistConfig<TStoreName extends string = string> = ArchivistConfig<{\n /**\n * If true, the store will be cleared on start\n */\n clearStoreOnStart?: boolean\n /**\n * The database name - also used as the filename for the db\n */\n dbName?: string\n /**\n * The location where the folder for the db will be created\n */\n location?: string\n schema: LmdbArchivistConfigSchema\n /**\n * The name of the object store - becomes a sub-level\n */\n storeName?: TStoreName\n}>\n"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAEvB,SAAS,iBAAiB;AAC1B,SAAS,mBAAmB,yBAAyB;AACrD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAGA;AAAA,OAEK;AAEP,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAC/B;AAAA,EACmB;AAAA,OAEZ;AACP;AAAA,EACY;AAAA,OAEL;;;AC3BA,IAAM,sBAAsB;;;ACK5B,IAAM,4BAAuD,GAAG,mBAAmB;;;AF4BnF,IAAM,gBAAN,cAGG,kBAAuC;AAAA,EAarC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEV,IAAI,SAAS;AACX,WAAO,SAAS,KAAK,OAAO,QAAQ,MAAM,qBAAqB;AAAA,EACjE;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,OAAO,MAAM,IAAI,KAAK,SAAS;AAAA,EACjE;AAAA,EAEA,IAAI,WAAW;AACb,WAAO,SAAS,KAAK,OAAO,UAAU,MAAM,uBAAuB;AAAA,EACrE;AAAA,EAEA,IAAa,UAAU;AACrB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG,MAAM;AAAA,IACX;AAAA,EACF;AAAA,EAEA,IAAI,YAAY;AACd,WAAO,SAAS,KAAK,OAAO,WAAW,MAAM,wBAAwB;AAAA,EACvE;AAAA,EAEA,MAAe,eAAiC;AAC9C,UAAM,MAAM,aAAa;AAGzB,SAAK,KAAK,KAAK;AAAA,MACb,MAAM,KAAK;AAAA,MACX,QAAQ;AAAA;AAAA,IACV,CAAC;AAGD,SAAK,YAAY,KAAK,GAAG,OAAuC,EAAE,MAAM,WAAW,CAAC;AACpF,SAAK,gBAAgB,KAAK,GAAG,OAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,SAAK,gBAAgB,KAAK,GAAG,OAAkB,EAAE,MAAM,gBAAgB,CAAC;AAExE,QAAI,KAAK,OAAO,mBAAmB;AACjC,YAAM,KAAK,aAAa;AAAA,IAC1B;AACA,WAAO;AAAA,EACT;AAAA,EAEmB,aAAyC;AAC1D,WAAO,CAAC,GAAG,KAAK,UAAU,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,WAAS,MAAM,KAAK,EAAE,KAAK,eAAe,kBAAkB;AAAA,EAC1G;AAAA,EAEA,MAAyB,eAA8B;AAErD,UAAM,KAAK,GAAG,YAAY,MAAM;AAC9B,WAAK,UAAU,UAAU;AACzB,WAAK,cAAc,UAAU;AAC7B,WAAK,cAAc,UAAU;AAAA,IAC/B,CAAC;AACD,WAAO,KAAK,KAAK,WAAW,EAAE,KAAK,KAAK,CAAC;AAAA,EAC3C;AAAA,EAEA,MAAyB,gBAAyC;AAChE,UAAM,WAAW,KAAK,WAAW;AACjC,UAAM,UAAU,MAAM,QAAQ;AAAA,MAC5B,OAAO,QAAQ,MAAM,KAAK,iBAAiB,GAAG,UAAU,CAAC,CAAC,EAAE,IAAI,OAAO,WAAW;AAChF,cAAM,eAAqC,EAAE,QAAQ,2BAA2B;AAChF,cAAM,QAAQ,MAAM,KAAK,UAAU,cAAc,QAAQ;AACzD,gBAAQ,MAAM,QAAQ,MAAM,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,KAAK,CAAC;AAAA,MACtD,CAAC,EAAE,OAAO,MAAM;AAAA,IAClB;AACA,UAAM,KAAK,aAAa;AACxB,WAAO,QAAQ,OAAO,SAAS,EAAE,IAAI,YAAU,OAAO,KAAK,EAAE,OAAO,MAAM;AAAA,EAC5E;AAAA,EAEA,MAAyB,cAAc,QAAqD;AAC1F,YAAQ,MAAM,KAAK,GAAG,YAAY,MAAM;AACtC,aAAO,OAAO,IAAI,CAAC,SAAS;AAC1B,cAAM,UAAU,KAAK,UAAU,IAAI,IAAI;AACvC,YAAI,SAAS;AACX,eAAK,UAAU,WAAW,IAAI;AAC9B,eAAK,cAAc,WAAW,QAAQ,SAAS;AAC/C,eAAK,cAAc,WAAW,QAAQ,SAAS;AAC/C,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,IACH,CAAC,GAAG,OAAO,MAAM;AAAA,EACnB;AAAA,EAEmB,WAAW,QAA4C;AACxE,WAAO,OAAO,IAAI,CAAC,SAAS;AAC1B,YAAM,SAAS,KAAK,UAAU,IAAI,IAAI;AACtC,UAAI,OAAQ,QAAO;AACnB,YAAM,aAAa,KAAK,cAAc,IAAI,IAAI;AAC9C,UAAI,WAAY,QAAO,KAAK,UAAU,IAAI,UAAU;AAAA,IACtD,CAAC,EAAE,OAAO,MAAM;AAAA,EAClB;AAAA,EAEA,MAAyB,cAAc,UAA2E;AAChH,UAAM,KAAK,GAAG,YAAY,MAAM;AAC9B,iBAAW,WAAW,UAAU;AAC9B,aAAK,UAAU,QAAQ,QAAQ,OAAO,OAAO;AAC7C,aAAK,cAAc,QAAQ,QAAQ,WAAW,QAAQ,KAAK;AAC3D,aAAK,cAAc,QAAQ,QAAQ,WAAW,QAAQ,KAAK;AAAA,MAC7D;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEmB,YAAY,SAA4D;AACzF,UAAM;AAAA,MACJ,QAAQ;AAAA,MAAK;AAAA,MAAQ;AAAA,MAAO,MAAAA,QAAO,SAAS,OAAO;AAAA,IACrD,IAAI,WAAW,CAAC;AAGhB,UAAM,eAA6B,UAAU,SACzC,EAAE,OAAO,UAAU,kBAAkB,kBAAkB,SAAS,KAAK,IACrE,EAAE,OAAO,UAAU,kBAAkB,iBAAiB;AAG1D,UAAM,kBAAkB,CAAC,GAAG,KAAK,cAAc,SAAS,YAAY,CAAC,EAClE,MAAMA,QAAO,IAAI,GAAG,SAASA,QAAO,IAAI,EAAE;AAG7C,WAAO,gBACJ,IAAI,CAAC,EAAE,OAAO,KAAK,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,EACjD,OAAO,MAAM;AAAA,EAClB;AACF;AAjJE,cAJW,eAIc,iBAA0B,CAAC,GAAG,yCAAM,kBAAe,yBAAyB;AACrG,cALW,eAKc,uBAA8B;AACvD,cANW,eAMc,UAAS,EAAE,GAAG,yCAAM,WAAQ,CAAC,iBAAiB,GAAG,OAAO;AAEjF,cARW,eAQe,iBAAkC;AAAA,EAC1D,KAAK,EAAE,WAAW,EAAE;AAAA,EAAG,YAAY;AAAA,EAAO,QAAQ;AACpD;AAEA,cAZW,eAYe,iBAAkC;AAAA,EAC1D,KAAK,EAAE,WAAW,EAAE;AAAA,EAAG,YAAY;AAAA,EAAO,QAAQ;AACpD;AAdW,gBAAN;AAAA,EADN,gBAAgB;AAAA,GACJ;","names":["open"]}
|
|
@@ -26,7 +26,7 @@ export declare class LmdbArchivist<TParams extends LmdbArchivistParams = LmdbArc
|
|
|
26
26
|
protected allHandler(): WithStorageMeta<Payload>[];
|
|
27
27
|
protected clearHandler(): Promise<void>;
|
|
28
28
|
protected commitHandler(): Promise<BoundWitness[]>;
|
|
29
|
-
protected deleteHandler(hashes: Hash[]): Promise<
|
|
29
|
+
protected deleteHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]>;
|
|
30
30
|
protected getHandler(hashes: Hash[]): WithStorageMeta<Payload>[];
|
|
31
31
|
protected insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]>;
|
|
32
32
|
protected nextHandler(options?: ArchivistNextOptions): WithStorageMeta<Payload>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Archivist.d.ts","sourceRoot":"","sources":["../../src/Archivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,iBAAiB,EAAqB,MAAM,iCAAiC,CAAA;AACtF,OAAO,EAOL,wBAAwB,EACxB,oBAAoB,EAEpB,gBAAgB,EACjB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAG9D,OAAO,EACL,OAAO,EAAE,MAAM,EACf,eAAe,EAChB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,QAAQ,EACM,YAAY,EAC3B,MAAM,MAAM,CAAA;AAGb,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,qBACa,aAAa,CACxB,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,EACzD,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CACtE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC9C,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAsD;IACtG,gBAAyB,mBAAmB,EAAE,MAAM,CAA4B;IAChF,gBAAyB,MAAM;;MAAmD;IAElF,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAExD;IAED,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAExD;IAED,SAAS,CAAC,aAAa,EAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAChD,SAAS,CAAC,EAAE,EAAG,YAAY,CAAA;IAC3B,SAAS,CAAC,SAAS,EAAG,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;IAC9D,SAAS,CAAC,aAAa,EAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAE7C,IAAI,MAAM,WAET;IAED,IAAI,UAAU,WAEb;IAED,IAAI,QAAQ,WAEX;IAED,IAAa,OAAO,aAUnB;IAED,IAAI,SAAS,WAEZ;IAEc,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;cAoB5B,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE;cAIlC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;cAU7B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAaxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"Archivist.d.ts","sourceRoot":"","sources":["../../src/Archivist.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,iBAAiB,EAAqB,MAAM,iCAAiC,CAAA;AACtF,OAAO,EAOL,wBAAwB,EACxB,oBAAoB,EAEpB,gBAAgB,EACjB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAG9D,OAAO,EACL,OAAO,EAAE,MAAM,EACf,eAAe,EAChB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,QAAQ,EACM,YAAY,EAC3B,MAAM,MAAM,CAAA;AAGb,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,qBACa,aAAa,CACxB,OAAO,SAAS,mBAAmB,GAAG,mBAAmB,EACzD,UAAU,SAAS,wBAAwB,GAAG,wBAAwB,CACtE,SAAQ,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC;IAC9C,gBAAyB,aAAa,EAAE,MAAM,EAAE,CAAsD;IACtG,gBAAyB,mBAAmB,EAAE,MAAM,CAA4B;IAChF,gBAAyB,MAAM;;MAAmD;IAElF,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAExD;IAED,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,CAExD;IAED,SAAS,CAAC,aAAa,EAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAChD,SAAS,CAAC,EAAE,EAAG,YAAY,CAAA;IAC3B,SAAS,CAAC,SAAS,EAAG,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAA;IAC9D,SAAS,CAAC,aAAa,EAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAE7C,IAAI,MAAM,WAET;IAED,IAAI,UAAU,WAEb;IAED,IAAI,QAAQ,WAEX;IAED,IAAa,OAAO,aAUnB;IAED,IAAI,SAAS,WAEZ;IAEc,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;cAoB5B,UAAU,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE;cAIlC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;cAU7B,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;cAaxC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAcxE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;cAShD,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;cAW9F,WAAW,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;CAmB3F"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/archivist-lmdb",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.16.1",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
"@xylabs/exists": "^4.9.18",
|
|
34
34
|
"@xylabs/hex": "^4.9.18",
|
|
35
35
|
"@xylabs/promise": "^4.9.18",
|
|
36
|
-
"@xyo-network/archivist-abstract": "^3.
|
|
37
|
-
"@xyo-network/archivist-model": "^3.
|
|
38
|
-
"@xyo-network/boundwitness-model": "^3.
|
|
39
|
-
"@xyo-network/module-model": "^3.
|
|
40
|
-
"@xyo-network/payload-builder": "^3.
|
|
41
|
-
"@xyo-network/payload-model": "^3.
|
|
36
|
+
"@xyo-network/archivist-abstract": "^3.16.1",
|
|
37
|
+
"@xyo-network/archivist-model": "^3.16.1",
|
|
38
|
+
"@xyo-network/boundwitness-model": "^3.16.1",
|
|
39
|
+
"@xyo-network/module-model": "^3.16.1",
|
|
40
|
+
"@xyo-network/payload-builder": "^3.16.1",
|
|
41
|
+
"@xyo-network/payload-model": "^3.16.1",
|
|
42
42
|
"lmdb": "^3.3.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
@@ -47,12 +47,12 @@
|
|
|
47
47
|
"@xylabs/ts-scripts-yarn3": "^6.5.6",
|
|
48
48
|
"@xylabs/tsconfig": "^6.5.6",
|
|
49
49
|
"@xylabs/vitest-extended": "^4.9.18",
|
|
50
|
-
"@xyo-network/account": "^3.
|
|
51
|
-
"@xyo-network/account-model": "^3.
|
|
52
|
-
"@xyo-network/archivist-acceptance-tests": "^3.
|
|
53
|
-
"@xyo-network/id-payload-plugin": "^3.
|
|
54
|
-
"@xyo-network/payload-wrapper": "^3.
|
|
55
|
-
"@xyo-network/wallet": "^3.
|
|
50
|
+
"@xyo-network/account": "^3.16.1",
|
|
51
|
+
"@xyo-network/account-model": "^3.16.1",
|
|
52
|
+
"@xyo-network/archivist-acceptance-tests": "^3.16.1",
|
|
53
|
+
"@xyo-network/id-payload-plugin": "^3.16.1",
|
|
54
|
+
"@xyo-network/payload-wrapper": "^3.16.1",
|
|
55
|
+
"@xyo-network/wallet": "^3.16.1",
|
|
56
56
|
"typescript": "^5.8.3",
|
|
57
57
|
"uuid": "^11.1.0",
|
|
58
58
|
"vitest": "^3.1.3"
|
package/src/Archivist.ts
CHANGED
|
@@ -127,18 +127,18 @@ export class LmdbArchivist<
|
|
|
127
127
|
return settled.filter(fulfilled).map(result => result.value).filter(exists)
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
protected override async deleteHandler(hashes: Hash[]): Promise<
|
|
131
|
-
await this.db.transaction(() => {
|
|
132
|
-
|
|
130
|
+
protected override async deleteHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {
|
|
131
|
+
return (await this.db.transaction(() => {
|
|
132
|
+
return hashes.map((hash) => {
|
|
133
133
|
const payload = this.hashIndex.get(hash)
|
|
134
134
|
if (payload) {
|
|
135
135
|
this.hashIndex.removeSync(hash)
|
|
136
136
|
this.dataHashIndex.removeSync(payload._dataHash)
|
|
137
137
|
this.sequenceIndex.removeSync(payload._sequence)
|
|
138
|
+
return payload
|
|
138
139
|
}
|
|
139
|
-
}
|
|
140
|
-
})
|
|
141
|
-
return hashes
|
|
140
|
+
})
|
|
141
|
+
})).filter(exists)
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
protected override getHandler(hashes: Hash[]): WithStorageMeta<Payload>[] {
|