@xyo-network/archivist-lmdb 3.9.17 → 3.9.19
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/Archivist.d.ts +31 -0
- package/dist/browser/Archivist.d.ts.map +1 -0
- package/dist/browser/Config.d.ts +24 -0
- package/dist/browser/Config.d.ts.map +1 -0
- package/dist/browser/Params.d.ts +5 -0
- package/dist/browser/Params.d.ts.map +1 -0
- package/dist/browser/Schema.d.ts +3 -0
- package/dist/browser/Schema.d.ts.map +1 -0
- package/dist/browser/index.d.ts +5 -48
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.mjs +3 -1
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +15 -15
- package/src/Archivist.ts +12 -14
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Hash, Hex } from '@xylabs/hex';
|
|
2
|
+
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
3
|
+
import { ArchivistModuleEventData, ArchivistNextOptions, IndexDescription } from '@xyo-network/archivist-model';
|
|
4
|
+
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
5
|
+
import { Payload, Schema, WithStorageMeta } from '@xyo-network/payload-model';
|
|
6
|
+
import { Database, RootDatabase } from 'lmdb';
|
|
7
|
+
import { LmdbArchivistParams } from './Params.ts';
|
|
8
|
+
export declare class LmdbArchivist<TParams extends LmdbArchivistParams = LmdbArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> {
|
|
9
|
+
static readonly configSchemas: Schema[];
|
|
10
|
+
static readonly defaultConfigSchema: Schema;
|
|
11
|
+
protected static readonly dataHashIndex: IndexDescription;
|
|
12
|
+
protected static readonly sequenceIndex: IndexDescription;
|
|
13
|
+
protected dataHashIndex: Database<Hash, string>;
|
|
14
|
+
protected db: RootDatabase;
|
|
15
|
+
protected hashIndex: Database<WithStorageMeta<Payload>, Hash>;
|
|
16
|
+
protected sequenceIndex: Database<Hash, Hex>;
|
|
17
|
+
get dbName(): string;
|
|
18
|
+
get folderPath(): string;
|
|
19
|
+
get location(): string;
|
|
20
|
+
get queries(): string[];
|
|
21
|
+
get storeName(): string;
|
|
22
|
+
startHandler(): Promise<boolean>;
|
|
23
|
+
protected allHandler(): WithStorageMeta<Payload>[];
|
|
24
|
+
protected clearHandler(): Promise<void>;
|
|
25
|
+
protected commitHandler(): Promise<BoundWitness[]>;
|
|
26
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
27
|
+
protected getHandler(hashes: Hash[]): WithStorageMeta<Payload>[];
|
|
28
|
+
protected insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]>;
|
|
29
|
+
protected nextHandler(options?: ArchivistNextOptions): WithStorageMeta<Payload>[];
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=Archivist.d.ts.map
|
|
@@ -0,0 +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,EAAE,MAAM,iCAAiC,CAAA;AACnE,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;IAEhF,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,IAAI,EAAE,CAAC;cAcpD,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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ArchivistConfig } from '@xyo-network/archivist-model';
|
|
2
|
+
import { LmdbArchivistSchema } from './Schema.ts';
|
|
3
|
+
export type LmdbArchivistConfigSchema = `${LmdbArchivistSchema}.config`;
|
|
4
|
+
export declare const LmdbArchivistConfigSchema: LmdbArchivistConfigSchema;
|
|
5
|
+
export type LmdbArchivistConfig<TStoreName extends string = string> = ArchivistConfig<{
|
|
6
|
+
/**
|
|
7
|
+
* If true, the store will be cleared on start
|
|
8
|
+
*/
|
|
9
|
+
clearStoreOnStart?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* The database name - also used as the filename for the db
|
|
12
|
+
*/
|
|
13
|
+
dbName?: string;
|
|
14
|
+
/**
|
|
15
|
+
* The location where the folder for the db will be created
|
|
16
|
+
*/
|
|
17
|
+
location?: string;
|
|
18
|
+
schema: LmdbArchivistConfigSchema;
|
|
19
|
+
/**
|
|
20
|
+
* The name of the object store - becomes a sub-level
|
|
21
|
+
*/
|
|
22
|
+
storeName?: TStoreName;
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=Config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/Config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,MAAM,yBAAyB,GAAG,GAAG,mBAAmB,SAAS,CAAA;AACvE,eAAO,MAAM,yBAAyB,EAAE,yBAA2D,CAAA;AAEnG,MAAM,MAAM,mBAAmB,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM,IAAI,eAAe,CAAC;IACpF;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,yBAAyB,CAAA;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB,CAAC,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ArchivistParams } from '@xyo-network/archivist-model';
|
|
2
|
+
import type { AnyConfigSchema } from '@xyo-network/module-model';
|
|
3
|
+
import type { LmdbArchivistConfig } from './Config.ts';
|
|
4
|
+
export type LmdbArchivistParams = ArchivistParams<AnyConfigSchema<LmdbArchivistConfig>, {}>;
|
|
5
|
+
//# sourceMappingURL=Params.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Params.d.ts","sourceRoot":"","sources":["../../src/Params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAEhE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD,MAAM,MAAM,mBAAmB,GAAG,eAAe,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,EAEvF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/Schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,EAAG,4BAAqC,CAAA;AACxE,MAAM,MAAM,mBAAmB,GAAG,OAAO,mBAAmB,CAAA"}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -1,48 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { Database, RootDatabase } from 'lmdb';
|
|
7
|
-
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
8
|
-
|
|
9
|
-
declare const LmdbArchivistSchema: "network.xyo.archivist.lmdb";
|
|
10
|
-
type LmdbArchivistSchema = typeof LmdbArchivistSchema;
|
|
11
|
-
|
|
12
|
-
type LmdbArchivistConfigSchema = `${LmdbArchivistSchema}.config`;
|
|
13
|
-
declare const LmdbArchivistConfigSchema: LmdbArchivistConfigSchema;
|
|
14
|
-
type LmdbArchivistConfig<TStoreName extends string = string> = ArchivistConfig<{
|
|
15
|
-
clearStoreOnStart?: boolean;
|
|
16
|
-
dbName?: string;
|
|
17
|
-
location?: string;
|
|
18
|
-
schema: LmdbArchivistConfigSchema;
|
|
19
|
-
storeName?: TStoreName;
|
|
20
|
-
}>;
|
|
21
|
-
|
|
22
|
-
type LmdbArchivistParams = ArchivistParams<AnyConfigSchema<LmdbArchivistConfig>, {}>;
|
|
23
|
-
|
|
24
|
-
declare class LmdbArchivist<TParams extends LmdbArchivistParams = LmdbArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> {
|
|
25
|
-
static readonly configSchemas: Schema[];
|
|
26
|
-
static readonly defaultConfigSchema: Schema;
|
|
27
|
-
protected static readonly dataHashIndex: IndexDescription;
|
|
28
|
-
protected static readonly sequenceIndex: IndexDescription;
|
|
29
|
-
protected dataHashIndex: Database<Hash, string>;
|
|
30
|
-
protected db: RootDatabase;
|
|
31
|
-
protected hashIndex: Database<WithStorageMeta<Payload>, Hash>;
|
|
32
|
-
protected sequenceIndex: Database<Hash, Hex>;
|
|
33
|
-
get dbName(): string;
|
|
34
|
-
get folderPath(): string;
|
|
35
|
-
get location(): string;
|
|
36
|
-
get queries(): string[];
|
|
37
|
-
get storeName(): string;
|
|
38
|
-
startHandler(): Promise<boolean>;
|
|
39
|
-
protected allHandler(): WithStorageMeta<Payload>[];
|
|
40
|
-
protected clearHandler(): Promise<void>;
|
|
41
|
-
protected commitHandler(): Promise<BoundWitness[]>;
|
|
42
|
-
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
43
|
-
protected getHandler(hashes: Hash[]): WithStorageMeta<Payload>[];
|
|
44
|
-
protected insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]>;
|
|
45
|
-
protected nextHandler(options?: ArchivistNextOptions): WithStorageMeta<Payload>[];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export { LmdbArchivist, type LmdbArchivistConfig, LmdbArchivistConfigSchema, type LmdbArchivistParams, LmdbArchivistSchema };
|
|
1
|
+
export * from './Archivist.ts';
|
|
2
|
+
export * from './Config.ts';
|
|
3
|
+
export * from './Params.ts';
|
|
4
|
+
export * from './Schema.ts';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
|
package/dist/browser/index.mjs
CHANGED
|
@@ -32,7 +32,9 @@ import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
|
32
32
|
import {
|
|
33
33
|
SequenceConstants
|
|
34
34
|
} from "@xyo-network/payload-model";
|
|
35
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
open
|
|
37
|
+
} from "lmdb";
|
|
36
38
|
|
|
37
39
|
// src/Schema.ts
|
|
38
40
|
var LmdbArchivistSchema = "network.xyo.archivist.lmdb";
|
|
@@ -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 type { Hash, Hex } from '@xylabs/hex'\nimport { fulfilled } from '@xylabs/promise'\nimport { AbstractArchivist } from '@xyo-network/archivist-abstract'\nimport type {\n ArchivistInsertQuery,\n ArchivistModuleEventData,\n ArchivistNextOptions,\n IndexDescription,\n} from '@xyo-network/archivist-model'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistNextQuerySchema,\n} from '@xyo-network/archivist-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { creatableModule } from '@xyo-network/module-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport {\n type Payload, type Schema, SequenceConstants,\n type WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport type {\n Database, RangeOptions, RootDatabase,\n} from 'lmdb'\nimport { open } from 'lmdb'\n\nimport { LmdbArchivistConfigSchema } from './Config.ts'\nimport type { 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\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 } 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\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/archivist-lmdb",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.19",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -33,27 +33,27 @@
|
|
|
33
33
|
"@xylabs/exists": "^4.5.1",
|
|
34
34
|
"@xylabs/hex": "^4.5.1",
|
|
35
35
|
"@xylabs/promise": "^4.5.1",
|
|
36
|
-
"@xyo-network/archivist-abstract": "^3.9.
|
|
37
|
-
"@xyo-network/archivist-model": "^3.9.
|
|
38
|
-
"@xyo-network/boundwitness-model": "^3.9.
|
|
39
|
-
"@xyo-network/module-model": "^3.9.
|
|
40
|
-
"@xyo-network/payload-builder": "^3.9.
|
|
41
|
-
"@xyo-network/payload-model": "^3.9.
|
|
36
|
+
"@xyo-network/archivist-abstract": "^3.9.19",
|
|
37
|
+
"@xyo-network/archivist-model": "^3.9.19",
|
|
38
|
+
"@xyo-network/boundwitness-model": "^3.9.19",
|
|
39
|
+
"@xyo-network/module-model": "^3.9.19",
|
|
40
|
+
"@xyo-network/payload-builder": "^3.9.19",
|
|
41
|
+
"@xyo-network/payload-model": "^3.9.19",
|
|
42
42
|
"lmdb": "^3.2.6"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@xylabs/delay": "^4.5.1",
|
|
46
46
|
"@xylabs/object": "^4.5.1",
|
|
47
|
-
"@xylabs/ts-scripts-yarn3": "^5.0.
|
|
48
|
-
"@xylabs/tsconfig": "^5.0.
|
|
47
|
+
"@xylabs/ts-scripts-yarn3": "^5.0.39",
|
|
48
|
+
"@xylabs/tsconfig": "^5.0.39",
|
|
49
49
|
"@xylabs/vitest-extended": "^4.5.1",
|
|
50
|
-
"@xyo-network/account": "^3.9.
|
|
51
|
-
"@xyo-network/archivist-acceptance-tests": "^3.9.
|
|
52
|
-
"@xyo-network/id-payload-plugin": "^3.9.
|
|
53
|
-
"@xyo-network/payload-wrapper": "^3.9.
|
|
54
|
-
"typescript": "^5.
|
|
50
|
+
"@xyo-network/account": "^3.9.19",
|
|
51
|
+
"@xyo-network/archivist-acceptance-tests": "^3.9.19",
|
|
52
|
+
"@xyo-network/id-payload-plugin": "^3.9.19",
|
|
53
|
+
"@xyo-network/payload-wrapper": "^3.9.19",
|
|
54
|
+
"typescript": "^5.8.2",
|
|
55
55
|
"uuid": "^11.1.0",
|
|
56
|
-
"vitest": "^3.0.
|
|
56
|
+
"vitest": "^3.0.7"
|
|
57
57
|
},
|
|
58
58
|
"publishConfig": {
|
|
59
59
|
"access": "public"
|
package/src/Archivist.ts
CHANGED
|
@@ -1,36 +1,34 @@
|
|
|
1
1
|
import { assertEx } from '@xylabs/assert'
|
|
2
2
|
import { exists } from '@xylabs/exists'
|
|
3
|
-
import
|
|
3
|
+
import { Hash, Hex } from '@xylabs/hex'
|
|
4
4
|
import { fulfilled } from '@xylabs/promise'
|
|
5
5
|
import { AbstractArchivist } from '@xyo-network/archivist-abstract'
|
|
6
|
-
import type {
|
|
7
|
-
ArchivistInsertQuery,
|
|
8
|
-
ArchivistModuleEventData,
|
|
9
|
-
ArchivistNextOptions,
|
|
10
|
-
IndexDescription,
|
|
11
|
-
} from '@xyo-network/archivist-model'
|
|
12
6
|
import {
|
|
13
7
|
ArchivistAllQuerySchema,
|
|
14
8
|
ArchivistClearQuerySchema,
|
|
15
9
|
ArchivistCommitQuerySchema,
|
|
16
10
|
ArchivistDeleteQuerySchema,
|
|
11
|
+
ArchivistInsertQuery,
|
|
17
12
|
ArchivistInsertQuerySchema,
|
|
13
|
+
ArchivistModuleEventData,
|
|
14
|
+
ArchivistNextOptions,
|
|
18
15
|
ArchivistNextQuerySchema,
|
|
16
|
+
IndexDescription,
|
|
19
17
|
} from '@xyo-network/archivist-model'
|
|
20
|
-
import
|
|
18
|
+
import { BoundWitness } from '@xyo-network/boundwitness-model'
|
|
21
19
|
import { creatableModule } from '@xyo-network/module-model'
|
|
22
20
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
23
21
|
import {
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
Payload, Schema, SequenceConstants,
|
|
23
|
+
WithStorageMeta,
|
|
26
24
|
} from '@xyo-network/payload-model'
|
|
27
|
-
import
|
|
28
|
-
Database,
|
|
25
|
+
import {
|
|
26
|
+
Database, open,
|
|
27
|
+
RangeOptions, RootDatabase,
|
|
29
28
|
} from 'lmdb'
|
|
30
|
-
import { open } from 'lmdb'
|
|
31
29
|
|
|
32
30
|
import { LmdbArchivistConfigSchema } from './Config.ts'
|
|
33
|
-
import
|
|
31
|
+
import { LmdbArchivistParams } from './Params.ts'
|
|
34
32
|
|
|
35
33
|
@creatableModule()
|
|
36
34
|
export class LmdbArchivist<
|