@xyo-network/archivist-leveldb 3.8.0 → 3.8.2
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.d.ts +62 -5
- package/dist/browser/index.mjs +3 -3
- package/dist/browser/index.mjs.map +1 -1
- package/package.json +13 -13
- package/src/Archivist.ts +3 -3
- package/dist/browser/Archivist.d.ts +0 -46
- package/dist/browser/Archivist.d.ts.map +0 -1
- package/dist/browser/Config.d.ts +0 -24
- package/dist/browser/Config.d.ts.map +0 -1
- package/dist/browser/Params.d.ts +0 -5
- package/dist/browser/Params.d.ts.map +0 -1
- package/dist/browser/Schema.d.ts +0 -3
- package/dist/browser/Schema.d.ts.map +0 -1
- package/dist/browser/index.d.ts.map +0 -1
package/dist/browser/index.d.ts
CHANGED
|
@@ -1,5 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { Hash, Hex } from '@xylabs/hex';
|
|
2
|
+
import { Promisable } from '@xylabs/promise';
|
|
3
|
+
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
4
|
+
import { ArchivistConfig, ArchivistParams, ArchivistModuleEventData, ArchivistNextOptions } from '@xyo-network/archivist-model';
|
|
5
|
+
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
6
|
+
import { WithStorageMeta, Payload, Schema } from '@xyo-network/payload-model';
|
|
7
|
+
import { AbstractLevel, AbstractSublevel } from 'abstract-level';
|
|
8
|
+
import { AnyConfigSchema } from '@xyo-network/module-model';
|
|
9
|
+
|
|
10
|
+
declare const LevelDbArchivistSchema: "network.xyo.archivist.leveldb";
|
|
11
|
+
type LevelDbArchivistSchema = typeof LevelDbArchivistSchema;
|
|
12
|
+
|
|
13
|
+
type LevelDbArchivistConfigSchema = `${LevelDbArchivistSchema}.config`;
|
|
14
|
+
declare const LevelDbArchivistConfigSchema: LevelDbArchivistConfigSchema;
|
|
15
|
+
type LevelDbArchivistConfig<TStoreName extends string = string> = ArchivistConfig<{
|
|
16
|
+
clearStoreOnStart?: boolean;
|
|
17
|
+
dbName?: string;
|
|
18
|
+
location?: string;
|
|
19
|
+
schema: LevelDbArchivistConfigSchema;
|
|
20
|
+
storeName?: TStoreName;
|
|
21
|
+
}>;
|
|
22
|
+
|
|
23
|
+
type LevelDbArchivistParams = ArchivistParams<AnyConfigSchema<LevelDbArchivistConfig>, {}>;
|
|
24
|
+
|
|
25
|
+
interface PayloadStore {
|
|
26
|
+
[s: string]: WithStorageMeta;
|
|
27
|
+
}
|
|
28
|
+
type AbstractPayloadLevel = AbstractLevel<string | Buffer | Uint8Array, Hash, WithStorageMeta<Payload>>;
|
|
29
|
+
type AbstractPayloadSubLevel = AbstractSublevel<AbstractPayloadLevel, string | Buffer | Uint8Array, Hash, WithStorageMeta<Payload>>;
|
|
30
|
+
type AbstractIndexSubLevel<T> = AbstractSublevel<AbstractPayloadLevel, string | Buffer | Uint8Array, T, Hash>;
|
|
31
|
+
declare abstract class AbstractLevelDbArchivist<TParams extends LevelDbArchivistParams = LevelDbArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> {
|
|
32
|
+
static readonly configSchemas: Schema[];
|
|
33
|
+
static readonly defaultConfigSchema: Schema;
|
|
34
|
+
private static readonly dataHashIndex;
|
|
35
|
+
private static readonly sequenceIndex;
|
|
36
|
+
static readonly dataHashIndexName: string;
|
|
37
|
+
static readonly sequenceIndexName: string;
|
|
38
|
+
get dbName(): string;
|
|
39
|
+
get folderPath(): string;
|
|
40
|
+
get location(): string;
|
|
41
|
+
get queries(): string[];
|
|
42
|
+
get storeName(): string;
|
|
43
|
+
private static findIndexFromCursor;
|
|
44
|
+
protected allHandler(): Promise<WithStorageMeta<Payload>[]>;
|
|
45
|
+
protected clearHandler(): Promise<void>;
|
|
46
|
+
protected commitHandler(): Promise<BoundWitness[]>;
|
|
47
|
+
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
48
|
+
protected getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]>;
|
|
49
|
+
protected insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]>;
|
|
50
|
+
protected nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]>;
|
|
51
|
+
protected startHandler(): Promise<boolean>;
|
|
52
|
+
protected withDataHashIndex<T>(func: (index: AbstractIndexSubLevel<string>) => Promisable<T>): Promisable<T>;
|
|
53
|
+
protected withSequenceIndex<T>(func: (index: AbstractIndexSubLevel<Hex>) => Promisable<T>): Promisable<T>;
|
|
54
|
+
protected withStore<T>(func: (store: AbstractPayloadSubLevel) => Promisable<T>): Promise<T>;
|
|
55
|
+
protected abstract withDb<T>(func: (db: AbstractPayloadLevel) => Promisable<T>): Promisable<T>;
|
|
56
|
+
}
|
|
57
|
+
declare class LevelDbArchivist extends AbstractLevelDbArchivist {
|
|
58
|
+
private dbMutex;
|
|
59
|
+
protected withDb<T>(func: (db: AbstractPayloadLevel) => Promisable<T>): Promise<T>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { type AbstractIndexSubLevel, AbstractLevelDbArchivist, type AbstractPayloadLevel, type AbstractPayloadSubLevel, LevelDbArchivist, type LevelDbArchivistConfig, LevelDbArchivistConfigSchema, type LevelDbArchivistParams, LevelDbArchivistSchema, type PayloadStore };
|
package/dist/browser/index.mjs
CHANGED
|
@@ -155,7 +155,7 @@ var AbstractLevelDbArchivist = class _AbstractLevelDbArchivist extends AbstractA
|
|
|
155
155
|
return result;
|
|
156
156
|
}
|
|
157
157
|
async insertHandler(payloads) {
|
|
158
|
-
const payloadsWithMeta = payloads.
|
|
158
|
+
const payloadsWithMeta = payloads.toSorted(PayloadBuilder.compareStorageMeta);
|
|
159
159
|
const batchCommands = payloadsWithMeta.map((payload) => ({
|
|
160
160
|
type: "put",
|
|
161
161
|
key: payload._hash,
|
|
@@ -190,7 +190,7 @@ var AbstractLevelDbArchivist = class _AbstractLevelDbArchivist extends AbstractA
|
|
|
190
190
|
}
|
|
191
191
|
async nextHandler(options) {
|
|
192
192
|
const {
|
|
193
|
-
limit,
|
|
193
|
+
limit = 100,
|
|
194
194
|
cursor,
|
|
195
195
|
order,
|
|
196
196
|
open
|
|
@@ -200,7 +200,7 @@ var AbstractLevelDbArchivist = class _AbstractLevelDbArchivist extends AbstractA
|
|
|
200
200
|
all = all.reverse();
|
|
201
201
|
}
|
|
202
202
|
const startIndex = cursor ? _AbstractLevelDbArchivist.findIndexFromCursor(all, cursor) + (open ? 0 : 1) : 0;
|
|
203
|
-
const result = all.slice(startIndex,
|
|
203
|
+
const result = all.slice(startIndex, startIndex + limit);
|
|
204
204
|
return result;
|
|
205
205
|
}
|
|
206
206
|
async startHandler() {
|
|
@@ -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, Promisable } 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 buildStandardIndexName,\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, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport {\n AbstractBatchOperation, AbstractLevel, AbstractSublevel,\n} from 'abstract-level'\nimport { Mutex } from 'async-mutex'\nimport { Level } from 'level'\n\nimport { LevelDbArchivistConfigSchema } from './Config.ts'\nimport { LevelDbArchivistParams } from './Params.ts'\n\n/** Note: We have indexes as top level sublevels since making them a sublevel of a store, getting all the values of that store includes the sublevels */\n\nexport interface PayloadStore {\n [s: string]: WithStorageMeta\n}\n\nexport type AbstractPayloadLevel = AbstractLevel<string | Buffer | Uint8Array, Hash, WithStorageMeta<Payload>>\nexport type AbstractPayloadSubLevel = AbstractSublevel<AbstractPayloadLevel, string | Buffer | Uint8Array, Hash, WithStorageMeta<Payload>>\nexport type AbstractIndexSubLevel<T> = AbstractSublevel<AbstractPayloadLevel, string | Buffer | Uint8Array, T, Hash>\n\nconst indexSubLevelName = (storeName: string, indexName: string) => {\n return `_${storeName}|${indexName}`\n}\n\nexport abstract class AbstractLevelDbArchivist<\n TParams extends LevelDbArchivistParams = LevelDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, LevelDbArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = LevelDbArchivistConfigSchema\n\n private static readonly dataHashIndex: IndexDescription = {\n key: { _dataHash: 1 }, multiEntry: false, unique: false,\n }\n\n private static readonly sequenceIndex: IndexDescription = {\n key: { _sequence: 1 }, multiEntry: false, unique: true,\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static readonly dataHashIndexName = buildStandardIndexName(AbstractLevelDbArchivist.dataHashIndex)\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static readonly sequenceIndexName = buildStandardIndexName(AbstractLevelDbArchivist.sequenceIndex)\n\n get dbName() {\n return assertEx(this.config.dbName, () => 'No dbName specified')\n }\n\n get folderPath() {\n return `${this.location}/${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 private static findIndexFromCursor(payloads: WithStorageMeta[], cursor: Hex) {\n const index = payloads.findIndex(({ _sequence }) => _sequence === cursor)\n if (index === -1) {\n return Infinity // move to the end\n }\n return index\n }\n\n protected override async allHandler(): Promise<WithStorageMeta<Payload>[]> {\n return await this.withStore(async (db) => {\n const values = [...(await db.values().all())]\n return values.filter(exists).sort(PayloadBuilder.compareStorageMeta)\n })\n }\n\n protected override async clearHandler(): Promise<void> {\n await this.withDb(async (db) => {\n await db.clear()\n })\n await this.withDataHashIndex(async (index) => {\n await index.clear()\n })\n await this.withSequenceIndex(async (index) => {\n await index.clear()\n })\n return this.emit('cleared', { mod: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), () => 'Nothing to commit')\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 // not using the getHandler since duplicate data hashes are not handled\n const payloadsWithMeta = (await this.allHandler()).filter(({ _hash, _dataHash }) => hashes.includes(_hash) || hashes.includes(_dataHash))\n // Delete the payloads\n const batchCommands: Array<AbstractBatchOperation<AbstractPayloadSubLevel, Hash, WithStorageMeta<Payload>>> = payloadsWithMeta.map(payload => ({\n type: 'del',\n key: payload._hash,\n }))\n\n await this.withStore(async (store) => {\n await store.batch(batchCommands)\n })\n\n // Delete the dataHash indexes\n const batchDataHashIndexCommands: Array<AbstractBatchOperation<AbstractPayloadSubLevel, string, Hash>> = payloadsWithMeta.map(payload => ({\n type: 'del',\n key: payload._dataHash,\n }))\n\n await this.withDataHashIndex(async (index) => {\n await index.batch(batchDataHashIndexCommands)\n })\n\n // Delete the sequence indexes\n const batchSequenceIndexCommands: Array<AbstractBatchOperation<AbstractPayloadSubLevel, Hex, Hash>> = payloadsWithMeta.map(payload => ({\n type: 'del',\n key: payload._sequence,\n }))\n\n await this.withSequenceIndex(async (index) => {\n await index.batch(batchSequenceIndexCommands)\n })\n\n return hashes\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n const foundByHash = await this.withStore(async (store) => {\n return (await store.getMany(hashes)).filter(exists)\n })\n const remainingHashes = hashes.filter(hash => !foundByHash.some(({ _hash }) => _hash === hash))\n const hashesFromDataHashes = await this.withDataHashIndex(async (index) => {\n return (await index.getMany(remainingHashes)).filter(exists)\n })\n const foundByDataHash = hashesFromDataHashes.length > 0\n ? await this.withStore(async (store) => {\n return (await store.getMany(hashesFromDataHashes)).filter(exists)\n })\n : []\n const result = [...foundByHash, ...foundByDataHash].sort(PayloadBuilder.compareStorageMeta)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n // Insert the payloads\n const payloadsWithMeta = payloads.sort(PayloadBuilder.compareStorageMeta)\n const batchCommands: Array<AbstractBatchOperation<AbstractPayloadSubLevel, Hash, WithStorageMeta<Payload>>> = payloadsWithMeta.map(payload => ({\n type: 'put', key: payload._hash, value: payload, keyEncoding: 'utf8', valueEncoding: 'json',\n }))\n await this.withStore(async (store) => {\n await store.batch(batchCommands)\n })\n\n // Insert the dataHash indexes\n // Note: We use the dataHash|hash for the key to allow for multiple entries\n const batchDataHashIndexCommands: Array<AbstractBatchOperation<AbstractPayloadLevel, string, Hash>> = payloadsWithMeta.map(payload => ({\n type: 'put', key: payload._dataHash, value: payload._hash, keyEncoding: 'utf8', valueEncoding: 'utf8',\n }))\n await this.withDataHashIndex(async (index) => {\n await index.batch(batchDataHashIndexCommands)\n })\n\n // Insert the sequence indexes\n // Note: We use the dataHash|hash for the key to allow for multiple entries\n const batchSequenceIndexCommands: Array<AbstractBatchOperation<AbstractPayloadLevel, Hex, Hash>> = payloadsWithMeta.map(payload => ({\n type: 'put', key: payload._sequence, value: payload._hash, keyEncoding: 'utf8', valueEncoding: 'utf8',\n }))\n await this.withSequenceIndex(async (index) => {\n await index.batch(batchSequenceIndexCommands)\n })\n\n return payloadsWithMeta\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n const {\n limit, cursor, order, open,\n } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const startIndex = cursor\n ? AbstractLevelDbArchivist.findIndexFromCursor(all, cursor) + (open ? 0 : 1)\n : 0\n const result = all.slice(startIndex, limit ? startIndex + limit : undefined)\n return result\n }\n\n protected override async startHandler(): Promise<boolean> {\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 await this.withStore(() => {})\n if (this.config.clearStoreOnStart) {\n await this.clearHandler()\n }\n return true\n }\n\n protected withDataHashIndex<T>(func: (index: AbstractIndexSubLevel<string>) => Promisable<T>): Promisable<T> {\n return this.withDb(async (db) => {\n const index = db.sublevel<string, Hash>(\n indexSubLevelName(this.storeName, AbstractLevelDbArchivist.dataHashIndexName),\n { keyEncoding: 'utf8', valueEncoding: 'utf8' },\n )\n return await func(index)\n })\n }\n\n protected withSequenceIndex<T>(func: (index: AbstractIndexSubLevel<Hex>) => Promisable<T>): Promisable<T> {\n return this.withDb(async (db) => {\n const index = db.sublevel<Hex, Hash>(\n indexSubLevelName(this.storeName, AbstractLevelDbArchivist.sequenceIndexName),\n { keyEncoding: 'utf8', valueEncoding: 'utf8' },\n )\n return await func(index)\n })\n }\n\n protected async withStore<T>(func: (store: AbstractPayloadSubLevel) => Promisable<T>): Promise<T> {\n return await this.withDb(async (db) => {\n const subLevel: AbstractPayloadSubLevel = db.sublevel<Hash, WithStorageMeta<Payload>>(this.storeName, { keyEncoding: 'utf8', valueEncoding: 'json' })\n return await func(subLevel)\n })\n }\n\n protected abstract withDb<T>(func: (db: AbstractPayloadLevel) => Promisable<T>): Promisable<T>\n}\n\n@creatableModule()\nexport class LevelDbArchivist extends AbstractLevelDbArchivist {\n private dbMutex = new Mutex()\n protected override async withDb<T>(func: (db: AbstractPayloadLevel) => Promisable<T>): Promise<T> {\n return await this.dbMutex.runExclusive(async () => {\n const db: AbstractPayloadLevel = new Level<Hash, WithStorageMeta<Payload>>(this.folderPath, { keyEncoding: 'utf8', valueEncoding: 'json' })\n try {\n return await func(db)\n } finally {\n await db.close()\n }\n })\n }\n}\n","export const LevelDbArchivistSchema = 'network.xyo.archivist.leveldb' as const\nexport type LevelDbArchivistSchema = typeof LevelDbArchivistSchema\n","import type { ArchivistConfig } from '@xyo-network/archivist-model'\n\nimport { LevelDbArchivistSchema } from './Schema.ts'\n\nexport type LevelDbArchivistConfigSchema = `${LevelDbArchivistSchema}.config`\nexport const LevelDbArchivistConfigSchema: LevelDbArchivistConfigSchema = `${LevelDbArchivistSchema}.config`\n\nexport type LevelDbArchivistConfig<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: LevelDbArchivistConfigSchema\n /**\n * The name of the object store - becomes a sub-level\n */\n storeName?: TStoreName\n}>\n"],"mappings":"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","names":[]}
|
|
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, Promisable } 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 buildStandardIndexName,\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, WithStorageMeta,\n} from '@xyo-network/payload-model'\nimport {\n AbstractBatchOperation, AbstractLevel, AbstractSublevel,\n} from 'abstract-level'\nimport { Mutex } from 'async-mutex'\nimport { Level } from 'level'\n\nimport { LevelDbArchivistConfigSchema } from './Config.ts'\nimport { LevelDbArchivistParams } from './Params.ts'\n\n/** Note: We have indexes as top level sublevels since making them a sublevel of a store, getting all the values of that store includes the sublevels */\n\nexport interface PayloadStore {\n [s: string]: WithStorageMeta\n}\n\nexport type AbstractPayloadLevel = AbstractLevel<string | Buffer | Uint8Array, Hash, WithStorageMeta<Payload>>\nexport type AbstractPayloadSubLevel = AbstractSublevel<AbstractPayloadLevel, string | Buffer | Uint8Array, Hash, WithStorageMeta<Payload>>\nexport type AbstractIndexSubLevel<T> = AbstractSublevel<AbstractPayloadLevel, string | Buffer | Uint8Array, T, Hash>\n\nconst indexSubLevelName = (storeName: string, indexName: string) => {\n return `_${storeName}|${indexName}`\n}\n\nexport abstract class AbstractLevelDbArchivist<\n TParams extends LevelDbArchivistParams = LevelDbArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n> extends AbstractArchivist<TParams, TEventData> {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, LevelDbArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = LevelDbArchivistConfigSchema\n\n private static readonly dataHashIndex: IndexDescription = {\n key: { _dataHash: 1 }, multiEntry: false, unique: false,\n }\n\n private static readonly sequenceIndex: IndexDescription = {\n key: { _sequence: 1 }, multiEntry: false, unique: true,\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static readonly dataHashIndexName = buildStandardIndexName(AbstractLevelDbArchivist.dataHashIndex)\n // eslint-disable-next-line @typescript-eslint/member-ordering\n static readonly sequenceIndexName = buildStandardIndexName(AbstractLevelDbArchivist.sequenceIndex)\n\n get dbName() {\n return assertEx(this.config.dbName, () => 'No dbName specified')\n }\n\n get folderPath() {\n return `${this.location}/${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 private static findIndexFromCursor(payloads: WithStorageMeta[], cursor: Hex) {\n const index = payloads.findIndex(({ _sequence }) => _sequence === cursor)\n if (index === -1) {\n return Infinity // move to the end\n }\n return index\n }\n\n protected override async allHandler(): Promise<WithStorageMeta<Payload>[]> {\n return await this.withStore(async (db) => {\n const values = [...(await db.values().all())]\n return values.filter(exists).sort(PayloadBuilder.compareStorageMeta)\n })\n }\n\n protected override async clearHandler(): Promise<void> {\n await this.withDb(async (db) => {\n await db.clear()\n })\n await this.withDataHashIndex(async (index) => {\n await index.clear()\n })\n await this.withSequenceIndex(async (index) => {\n await index.clear()\n })\n return this.emit('cleared', { mod: this })\n }\n\n protected override async commitHandler(): Promise<BoundWitness[]> {\n const payloads = assertEx(await this.allHandler(), () => 'Nothing to commit')\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 // not using the getHandler since duplicate data hashes are not handled\n const payloadsWithMeta = (await this.allHandler()).filter(({ _hash, _dataHash }) => hashes.includes(_hash) || hashes.includes(_dataHash))\n // Delete the payloads\n const batchCommands: Array<AbstractBatchOperation<AbstractPayloadSubLevel, Hash, WithStorageMeta<Payload>>> = payloadsWithMeta.map(payload => ({\n type: 'del',\n key: payload._hash,\n }))\n\n await this.withStore(async (store) => {\n await store.batch(batchCommands)\n })\n\n // Delete the dataHash indexes\n const batchDataHashIndexCommands: Array<AbstractBatchOperation<AbstractPayloadSubLevel, string, Hash>> = payloadsWithMeta.map(payload => ({\n type: 'del',\n key: payload._dataHash,\n }))\n\n await this.withDataHashIndex(async (index) => {\n await index.batch(batchDataHashIndexCommands)\n })\n\n // Delete the sequence indexes\n const batchSequenceIndexCommands: Array<AbstractBatchOperation<AbstractPayloadSubLevel, Hex, Hash>> = payloadsWithMeta.map(payload => ({\n type: 'del',\n key: payload._sequence,\n }))\n\n await this.withSequenceIndex(async (index) => {\n await index.batch(batchSequenceIndexCommands)\n })\n\n return hashes\n }\n\n protected override async getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]> {\n const foundByHash = await this.withStore(async (store) => {\n return (await store.getMany(hashes)).filter(exists)\n })\n const remainingHashes = hashes.filter(hash => !foundByHash.some(({ _hash }) => _hash === hash))\n const hashesFromDataHashes = await this.withDataHashIndex(async (index) => {\n return (await index.getMany(remainingHashes)).filter(exists)\n })\n const foundByDataHash = hashesFromDataHashes.length > 0\n ? await this.withStore(async (store) => {\n return (await store.getMany(hashesFromDataHashes)).filter(exists)\n })\n : []\n const result = [...foundByHash, ...foundByDataHash].sort(PayloadBuilder.compareStorageMeta)\n return result\n }\n\n protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {\n // Insert the payloads\n const payloadsWithMeta = payloads.toSorted(PayloadBuilder.compareStorageMeta)\n const batchCommands: Array<AbstractBatchOperation<AbstractPayloadSubLevel, Hash, WithStorageMeta<Payload>>> = payloadsWithMeta.map(payload => ({\n type: 'put', key: payload._hash, value: payload, keyEncoding: 'utf8', valueEncoding: 'json',\n }))\n await this.withStore(async (store) => {\n await store.batch(batchCommands)\n })\n\n // Insert the dataHash indexes\n // Note: We use the dataHash|hash for the key to allow for multiple entries\n const batchDataHashIndexCommands: Array<AbstractBatchOperation<AbstractPayloadLevel, string, Hash>> = payloadsWithMeta.map(payload => ({\n type: 'put', key: payload._dataHash, value: payload._hash, keyEncoding: 'utf8', valueEncoding: 'utf8',\n }))\n await this.withDataHashIndex(async (index) => {\n await index.batch(batchDataHashIndexCommands)\n })\n\n // Insert the sequence indexes\n // Note: We use the dataHash|hash for the key to allow for multiple entries\n const batchSequenceIndexCommands: Array<AbstractBatchOperation<AbstractPayloadLevel, Hex, Hash>> = payloadsWithMeta.map(payload => ({\n type: 'put', key: payload._sequence, value: payload._hash, keyEncoding: 'utf8', valueEncoding: 'utf8',\n }))\n await this.withSequenceIndex(async (index) => {\n await index.batch(batchSequenceIndexCommands)\n })\n\n return payloadsWithMeta\n }\n\n protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {\n const {\n limit = 100, cursor, order, open,\n } = options ?? {}\n let all = await this.allHandler()\n if (order === 'desc') {\n all = all.reverse()\n }\n const startIndex = cursor\n ? AbstractLevelDbArchivist.findIndexFromCursor(all, cursor) + (open ? 0 : 1)\n : 0\n const result = all.slice(startIndex, startIndex + limit)\n return result\n }\n\n protected override async startHandler(): Promise<boolean> {\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 await this.withStore(() => {})\n if (this.config.clearStoreOnStart) {\n await this.clearHandler()\n }\n return true\n }\n\n protected withDataHashIndex<T>(func: (index: AbstractIndexSubLevel<string>) => Promisable<T>): Promisable<T> {\n return this.withDb(async (db) => {\n const index = db.sublevel<string, Hash>(\n indexSubLevelName(this.storeName, AbstractLevelDbArchivist.dataHashIndexName),\n { keyEncoding: 'utf8', valueEncoding: 'utf8' },\n )\n return await func(index)\n })\n }\n\n protected withSequenceIndex<T>(func: (index: AbstractIndexSubLevel<Hex>) => Promisable<T>): Promisable<T> {\n return this.withDb(async (db) => {\n const index = db.sublevel<Hex, Hash>(\n indexSubLevelName(this.storeName, AbstractLevelDbArchivist.sequenceIndexName),\n { keyEncoding: 'utf8', valueEncoding: 'utf8' },\n )\n return await func(index)\n })\n }\n\n protected async withStore<T>(func: (store: AbstractPayloadSubLevel) => Promisable<T>): Promise<T> {\n return await this.withDb(async (db) => {\n const subLevel: AbstractPayloadSubLevel = db.sublevel<Hash, WithStorageMeta<Payload>>(this.storeName, { keyEncoding: 'utf8', valueEncoding: 'json' })\n return await func(subLevel)\n })\n }\n\n protected abstract withDb<T>(func: (db: AbstractPayloadLevel) => Promisable<T>): Promisable<T>\n}\n\n@creatableModule()\nexport class LevelDbArchivist extends AbstractLevelDbArchivist {\n private dbMutex = new Mutex()\n protected override async withDb<T>(func: (db: AbstractPayloadLevel) => Promisable<T>): Promise<T> {\n return await this.dbMutex.runExclusive(async () => {\n const db: AbstractPayloadLevel = new Level<Hash, WithStorageMeta<Payload>>(this.folderPath, { keyEncoding: 'utf8', valueEncoding: 'json' })\n try {\n return await func(db)\n } finally {\n await db.close()\n }\n })\n }\n}\n","export const LevelDbArchivistSchema = 'network.xyo.archivist.leveldb' as const\nexport type LevelDbArchivistSchema = typeof LevelDbArchivistSchema\n","import type { ArchivistConfig } from '@xyo-network/archivist-model'\n\nimport { LevelDbArchivistSchema } from './Schema.ts'\n\nexport type LevelDbArchivistConfigSchema = `${LevelDbArchivistSchema}.config`\nexport const LevelDbArchivistConfigSchema: LevelDbArchivistConfigSchema = `${LevelDbArchivistSchema}.config`\n\nexport type LevelDbArchivistConfig<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: LevelDbArchivistConfigSchema\n /**\n * The name of the object store - becomes a sub-level\n */\n storeName?: TStoreName\n}>\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/archivist-leveldb",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.2",
|
|
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.5.1",
|
|
34
34
|
"@xylabs/hex": "^4.5.1",
|
|
35
35
|
"@xylabs/promise": "^4.5.1",
|
|
36
|
-
"@xyo-network/archivist-abstract": "^3.8.
|
|
37
|
-
"@xyo-network/archivist-model": "^3.8.
|
|
38
|
-
"@xyo-network/boundwitness-model": "^3.8.
|
|
39
|
-
"@xyo-network/module-model": "^3.8.
|
|
40
|
-
"@xyo-network/payload-builder": "^3.8.
|
|
41
|
-
"@xyo-network/payload-model": "^3.8.
|
|
36
|
+
"@xyo-network/archivist-abstract": "^3.8.2",
|
|
37
|
+
"@xyo-network/archivist-model": "^3.8.2",
|
|
38
|
+
"@xyo-network/boundwitness-model": "^3.8.2",
|
|
39
|
+
"@xyo-network/module-model": "^3.8.2",
|
|
40
|
+
"@xyo-network/payload-builder": "^3.8.2",
|
|
41
|
+
"@xyo-network/payload-model": "^3.8.2",
|
|
42
42
|
"abstract-level": "^2.0.2",
|
|
43
43
|
"async-mutex": "^0.5.0",
|
|
44
44
|
"level": "^9.0.0"
|
|
@@ -46,14 +46,14 @@
|
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@xylabs/delay": "^4.5.1",
|
|
48
48
|
"@xylabs/object": "^4.5.1",
|
|
49
|
-
"@xylabs/ts-scripts-yarn3": "^
|
|
50
|
-
"@xylabs/tsconfig": "^
|
|
49
|
+
"@xylabs/ts-scripts-yarn3": "^5.0.22",
|
|
50
|
+
"@xylabs/tsconfig": "^5.0.22",
|
|
51
51
|
"@xylabs/vitest-extended": "^4.5.1",
|
|
52
|
-
"@xyo-network/account": "^3.8.
|
|
53
|
-
"@xyo-network/id-payload-plugin": "^3.8.
|
|
54
|
-
"@xyo-network/payload-wrapper": "^3.8.
|
|
52
|
+
"@xyo-network/account": "^3.8.2",
|
|
53
|
+
"@xyo-network/id-payload-plugin": "^3.8.2",
|
|
54
|
+
"@xyo-network/payload-wrapper": "^3.8.2",
|
|
55
55
|
"typescript": "^5.7.3",
|
|
56
|
-
"vitest": "^3.0.
|
|
56
|
+
"vitest": "^3.0.5"
|
|
57
57
|
},
|
|
58
58
|
"publishConfig": {
|
|
59
59
|
"access": "public"
|
package/src/Archivist.ts
CHANGED
|
@@ -189,7 +189,7 @@ export abstract class AbstractLevelDbArchivist<
|
|
|
189
189
|
|
|
190
190
|
protected override async insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]> {
|
|
191
191
|
// Insert the payloads
|
|
192
|
-
const payloadsWithMeta = payloads.
|
|
192
|
+
const payloadsWithMeta = payloads.toSorted(PayloadBuilder.compareStorageMeta)
|
|
193
193
|
const batchCommands: Array<AbstractBatchOperation<AbstractPayloadSubLevel, Hash, WithStorageMeta<Payload>>> = payloadsWithMeta.map(payload => ({
|
|
194
194
|
type: 'put', key: payload._hash, value: payload, keyEncoding: 'utf8', valueEncoding: 'json',
|
|
195
195
|
}))
|
|
@@ -220,7 +220,7 @@ export abstract class AbstractLevelDbArchivist<
|
|
|
220
220
|
|
|
221
221
|
protected override async nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]> {
|
|
222
222
|
const {
|
|
223
|
-
limit, cursor, order, open,
|
|
223
|
+
limit = 100, cursor, order, open,
|
|
224
224
|
} = options ?? {}
|
|
225
225
|
let all = await this.allHandler()
|
|
226
226
|
if (order === 'desc') {
|
|
@@ -229,7 +229,7 @@ export abstract class AbstractLevelDbArchivist<
|
|
|
229
229
|
const startIndex = cursor
|
|
230
230
|
? AbstractLevelDbArchivist.findIndexFromCursor(all, cursor) + (open ? 0 : 1)
|
|
231
231
|
: 0
|
|
232
|
-
const result = all.slice(startIndex,
|
|
232
|
+
const result = all.slice(startIndex, startIndex + limit)
|
|
233
233
|
return result
|
|
234
234
|
}
|
|
235
235
|
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { Hash, Hex } from '@xylabs/hex';
|
|
2
|
-
import { Promisable } from '@xylabs/promise';
|
|
3
|
-
import { AbstractArchivist } from '@xyo-network/archivist-abstract';
|
|
4
|
-
import { ArchivistModuleEventData, ArchivistNextOptions } from '@xyo-network/archivist-model';
|
|
5
|
-
import { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
6
|
-
import { Payload, Schema, WithStorageMeta } from '@xyo-network/payload-model';
|
|
7
|
-
import { AbstractLevel, AbstractSublevel } from 'abstract-level';
|
|
8
|
-
import { LevelDbArchivistParams } from './Params.ts';
|
|
9
|
-
/** Note: We have indexes as top level sublevels since making them a sublevel of a store, getting all the values of that store includes the sublevels */
|
|
10
|
-
export interface PayloadStore {
|
|
11
|
-
[s: string]: WithStorageMeta;
|
|
12
|
-
}
|
|
13
|
-
export type AbstractPayloadLevel = AbstractLevel<string | Buffer | Uint8Array, Hash, WithStorageMeta<Payload>>;
|
|
14
|
-
export type AbstractPayloadSubLevel = AbstractSublevel<AbstractPayloadLevel, string | Buffer | Uint8Array, Hash, WithStorageMeta<Payload>>;
|
|
15
|
-
export type AbstractIndexSubLevel<T> = AbstractSublevel<AbstractPayloadLevel, string | Buffer | Uint8Array, T, Hash>;
|
|
16
|
-
export declare abstract class AbstractLevelDbArchivist<TParams extends LevelDbArchivistParams = LevelDbArchivistParams, TEventData extends ArchivistModuleEventData = ArchivistModuleEventData> extends AbstractArchivist<TParams, TEventData> {
|
|
17
|
-
static readonly configSchemas: Schema[];
|
|
18
|
-
static readonly defaultConfigSchema: Schema;
|
|
19
|
-
private static readonly dataHashIndex;
|
|
20
|
-
private static readonly sequenceIndex;
|
|
21
|
-
static readonly dataHashIndexName: string;
|
|
22
|
-
static readonly sequenceIndexName: string;
|
|
23
|
-
get dbName(): string;
|
|
24
|
-
get folderPath(): string;
|
|
25
|
-
get location(): string;
|
|
26
|
-
get queries(): string[];
|
|
27
|
-
get storeName(): string;
|
|
28
|
-
private static findIndexFromCursor;
|
|
29
|
-
protected allHandler(): Promise<WithStorageMeta<Payload>[]>;
|
|
30
|
-
protected clearHandler(): Promise<void>;
|
|
31
|
-
protected commitHandler(): Promise<BoundWitness[]>;
|
|
32
|
-
protected deleteHandler(hashes: Hash[]): Promise<Hash[]>;
|
|
33
|
-
protected getHandler(hashes: Hash[]): Promise<WithStorageMeta<Payload>[]>;
|
|
34
|
-
protected insertHandler(payloads: WithStorageMeta<Payload>[]): Promise<WithStorageMeta<Payload>[]>;
|
|
35
|
-
protected nextHandler(options?: ArchivistNextOptions): Promise<WithStorageMeta<Payload>[]>;
|
|
36
|
-
protected startHandler(): Promise<boolean>;
|
|
37
|
-
protected withDataHashIndex<T>(func: (index: AbstractIndexSubLevel<string>) => Promisable<T>): Promisable<T>;
|
|
38
|
-
protected withSequenceIndex<T>(func: (index: AbstractIndexSubLevel<Hex>) => Promisable<T>): Promisable<T>;
|
|
39
|
-
protected withStore<T>(func: (store: AbstractPayloadSubLevel) => Promisable<T>): Promise<T>;
|
|
40
|
-
protected abstract withDb<T>(func: (db: AbstractPayloadLevel) => Promisable<T>): Promisable<T>;
|
|
41
|
-
}
|
|
42
|
-
export declare class LevelDbArchivist extends AbstractLevelDbArchivist {
|
|
43
|
-
private dbMutex;
|
|
44
|
-
protected withDb<T>(func: (db: AbstractPayloadLevel) => Promisable<T>): Promise<T>;
|
|
45
|
-
}
|
|
46
|
-
//# sourceMappingURL=Archivist.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Archivist.d.ts","sourceRoot":"","sources":["../../src/Archivist.ts"],"names":[],"mappings":"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"}
|
package/dist/browser/Config.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { ArchivistConfig } from '@xyo-network/archivist-model';
|
|
2
|
-
import { LevelDbArchivistSchema } from './Schema.ts';
|
|
3
|
-
export type LevelDbArchivistConfigSchema = `${LevelDbArchivistSchema}.config`;
|
|
4
|
-
export declare const LevelDbArchivistConfigSchema: LevelDbArchivistConfigSchema;
|
|
5
|
-
export type LevelDbArchivistConfig<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: LevelDbArchivistConfigSchema;
|
|
19
|
-
/**
|
|
20
|
-
* The name of the object store - becomes a sub-level
|
|
21
|
-
*/
|
|
22
|
-
storeName?: TStoreName;
|
|
23
|
-
}>;
|
|
24
|
-
//# sourceMappingURL=Config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,MAAM,4BAA4B,GAAG,GAAG,sBAAsB,SAAS,CAAA;AAC7E,eAAO,MAAM,4BAA4B,EAAE,4BAAiE,CAAA;AAE5G,MAAM,MAAM,sBAAsB,CAAC,UAAU,SAAS,MAAM,GAAG,MAAM,IAAI,eAAe,CAAC;IACvF;;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,4BAA4B,CAAA;IACpC;;OAEG;IACH,SAAS,CAAC,EAAE,UAAU,CAAA;CACvB,CAAC,CAAA"}
|
package/dist/browser/Params.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { ArchivistParams } from '@xyo-network/archivist-model';
|
|
2
|
-
import type { AnyConfigSchema } from '@xyo-network/module-model';
|
|
3
|
-
import type { LevelDbArchivistConfig } from './Config.ts';
|
|
4
|
-
export type LevelDbArchivistParams = ArchivistParams<AnyConfigSchema<LevelDbArchivistConfig>, {}>;
|
|
5
|
-
//# sourceMappingURL=Params.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEzD,MAAM,MAAM,sBAAsB,GAAG,eAAe,CAAC,eAAe,CAAC,sBAAsB,CAAC,EAAE,EAE7F,CAAC,CAAA"}
|
package/dist/browser/Schema.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Schema.d.ts","sourceRoot":"","sources":["../../src/Schema.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,EAAG,+BAAwC,CAAA;AAC9E,MAAM,MAAM,sBAAsB,GAAG,OAAO,sBAAsB,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|