@xyo-network/archivist-memory 5.3.15 → 5.3.17
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.
|
@@ -13,10 +13,12 @@ export declare class MemoryDriver extends AbstractCreatable<MemoryDriverParams>
|
|
|
13
13
|
private _cache?;
|
|
14
14
|
private _config?;
|
|
15
15
|
private _dataHashIndex?;
|
|
16
|
+
private _sortedValues?;
|
|
16
17
|
protected get cache(): LRUCache<import("@xylabs/sdk-js").BrandedHash, WithStorageMeta<Payload>, unknown>;
|
|
17
18
|
protected get config(): MemoryDriverConfig;
|
|
18
19
|
protected get dataHashIndex(): LRUCache<import("@xylabs/sdk-js").BrandedHash, import("@xylabs/sdk-js").BrandedHash, unknown>;
|
|
19
20
|
protected get max(): number;
|
|
21
|
+
protected get sortedValues(): WithStorageMeta<Payload>[];
|
|
20
22
|
private static findIndexFromCursor;
|
|
21
23
|
all(): Promisable<WithStorageMeta<Payload>[]>;
|
|
22
24
|
clear(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../src/MemoryDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EAAO,UAAU,EACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,iBAAiB,EACN,eAAe,EAE3B,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAEzF,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,MAAM,EAAE,kBAAkB,CAAA;CAC3B;AAED,qBACa,YAAa,SAAQ,iBAAiB,CAAC,kBAAkB,CACpE,YAAW,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACnE,OAAO,CAAC,MAAM,CAAC,CAA0C;IACzD,OAAO,CAAC,OAAO,CAAC,CAAoB;IACpC,OAAO,CAAC,cAAc,CAAC,CAAsB;
|
|
1
|
+
{"version":3,"file":"MemoryDriver.d.ts","sourceRoot":"","sources":["../../src/MemoryDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EAAO,UAAU,EACtB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,iBAAiB,EACN,eAAe,EAE3B,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AAEzF,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEpC,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,MAAM,EAAE,kBAAkB,CAAA;CAC3B;AAED,qBACa,YAAa,SAAQ,iBAAiB,CAAC,kBAAkB,CACpE,YAAW,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACnE,OAAO,CAAC,MAAM,CAAC,CAA0C;IACzD,OAAO,CAAC,OAAO,CAAC,CAAoB;IACpC,OAAO,CAAC,cAAc,CAAC,CAAsB;IAC7C,OAAO,CAAC,aAAa,CAAC,CAA4B;IAElD,SAAS,KAAK,KAAK,sFAMlB;IAED,SAAS,KAAK,MAAM,uBAEnB;IAED,SAAS,KAAK,aAAa,kGAG1B;IAED,SAAS,KAAK,GAAG,WAEhB;IAED,SAAS,KAAK,YAAY,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE,CAKvD;IAED,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAQlC,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAI7C,KAAK;IAML,KAAK;IAII,aAAa,IAAI,UAAU,CAAC,IAAI,CAAC;IAIpC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAgBxD,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAW3D,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE;IAQxE,IAAI,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAW5E,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,oBAAoB;CAO7B"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -49,8 +49,14 @@ var MemoryDriver = class extends AbstractCreatable {
|
|
|
49
49
|
_cache;
|
|
50
50
|
_config;
|
|
51
51
|
_dataHashIndex;
|
|
52
|
+
_sortedValues;
|
|
52
53
|
get cache() {
|
|
53
|
-
this._cache = this._cache ?? new LRUCache({
|
|
54
|
+
this._cache = this._cache ?? new LRUCache({
|
|
55
|
+
max: this.max,
|
|
56
|
+
dispose: () => {
|
|
57
|
+
this._sortedValues = void 0;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
54
60
|
return this._cache;
|
|
55
61
|
}
|
|
56
62
|
get config() {
|
|
@@ -63,6 +69,12 @@ var MemoryDriver = class extends AbstractCreatable {
|
|
|
63
69
|
get max() {
|
|
64
70
|
return this.config?.max ?? 1e4;
|
|
65
71
|
}
|
|
72
|
+
get sortedValues() {
|
|
73
|
+
if (!this._sortedValues) {
|
|
74
|
+
this._sortedValues = [...this.cache.values()].filter(exists).toSorted(PayloadBuilder.compareStorageMeta);
|
|
75
|
+
}
|
|
76
|
+
return this._sortedValues;
|
|
77
|
+
}
|
|
66
78
|
static findIndexFromCursor(payloads, cursor) {
|
|
67
79
|
const index = payloads.findIndex(({ _sequence }) => _sequence === cursor);
|
|
68
80
|
if (index === -1) {
|
|
@@ -71,11 +83,12 @@ var MemoryDriver = class extends AbstractCreatable {
|
|
|
71
83
|
return index;
|
|
72
84
|
}
|
|
73
85
|
all() {
|
|
74
|
-
return [...this.
|
|
86
|
+
return [...this.sortedValues];
|
|
75
87
|
}
|
|
76
88
|
clear() {
|
|
77
89
|
this.cache.clear();
|
|
78
90
|
this._dataHashIndex = new LRUCache({ max: this.max });
|
|
91
|
+
this._sortedValues = void 0;
|
|
79
92
|
}
|
|
80
93
|
count() {
|
|
81
94
|
return this.cache.size;
|
|
@@ -84,6 +97,7 @@ var MemoryDriver = class extends AbstractCreatable {
|
|
|
84
97
|
this._config = this.params.config ?? {};
|
|
85
98
|
}
|
|
86
99
|
async delete(hashes) {
|
|
100
|
+
this._sortedValues = void 0;
|
|
87
101
|
const deletedPayloads = (await Promise.all(this.cache.dump().map(async ([key, item]) => {
|
|
88
102
|
const itemValueDataHash = await PayloadBuilder.dataHash(item.value);
|
|
89
103
|
if (hashes.includes(key) || hashes.includes(itemValueDataHash)) {
|
|
@@ -105,6 +119,7 @@ var MemoryDriver = class extends AbstractCreatable {
|
|
|
105
119
|
}).filter(exists);
|
|
106
120
|
}
|
|
107
121
|
insert(payloads) {
|
|
122
|
+
this._sortedValues = void 0;
|
|
108
123
|
const payloadsWithMeta = payloads.toSorted(PayloadBuilder.compareStorageMeta);
|
|
109
124
|
return payloadsWithMeta.map((payload) => {
|
|
110
125
|
return this.insertPayloadIntoCache(payload);
|
|
@@ -117,10 +132,7 @@ var MemoryDriver = class extends AbstractCreatable {
|
|
|
117
132
|
order,
|
|
118
133
|
open = true
|
|
119
134
|
} = options ?? {};
|
|
120
|
-
|
|
121
|
-
if (order === "desc") {
|
|
122
|
-
all = all.toReversed();
|
|
123
|
-
}
|
|
135
|
+
const all = order === "desc" ? this.sortedValues.toReversed() : this.sortedValues;
|
|
124
136
|
const startIndex = isDefined(cursor) ? MemoryDriver.findIndexFromCursor(all, cursor) + (open ? 1 : 0) : 0;
|
|
125
137
|
return all.slice(startIndex, startIndex + limit);
|
|
126
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Archivist.ts","../../src/Config.ts","../../src/MemoryDriver.ts"],"sourcesContent":["import { StorageClassLabel } from '@xyo-network/archivist-abstract'\nimport { GenericArchivist, GenericArchivistParams } from '@xyo-network/archivist-generic'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport {\n AnyConfigSchema, AttachableModuleInstance, creatableModule, ModuleInstance,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { MemoryArchivistConfig, MemoryArchivistConfigSchema } from './Config.ts'\nimport { MemoryDriver } from './MemoryDriver.ts'\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>>\n = GenericArchivistParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n>\n extends GenericArchivist<TParams, TEventData>\n implements AttachableArchivistInstance, ModuleInstance {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MemoryArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MemoryArchivistConfigSchema\n static override readonly labels = { ...super.labels, [StorageClassLabel]: 'memory' }\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 static override async paramsHandler<T extends AttachableModuleInstance<MemoryArchivistParams, ArchivistModuleEventData>>(\n inParams?: Partial<T['params']>,\n ): Promise<T['params']> {\n const superParams = await super.paramsHandler(inParams)\n return { ...superParams, driver: superParams.driver ?? await MemoryDriver.create(superParams) }\n }\n}\n","import type { EmptyObject, WithAdditional } from '@xylabs/sdk-js'\nimport type { ArchivistConfig } from '@xyo-network/archivist-model'\nimport {\n asSchema, type Payload, type Schema,\n} from '@xyo-network/payload-model'\n\nexport const MemoryArchivistConfigSchema = asSchema('network.xyo.archivist.memory.config', true)\nexport type MemoryArchivistConfigSchema = typeof MemoryArchivistConfigSchema\n\nexport type MemoryArchivistConfig<TConfig extends Payload | EmptyObject | void = void, TSchema extends Schema | void = void> = ArchivistConfig<\n WithAdditional<\n {\n max?: number\n },\n TConfig\n >,\n TSchema extends Schema ? TSchema : MemoryArchivistConfigSchema | ArchivistConfig['schema']\n>\n","import type {\n Hash, Hex, Promisable,\n} from '@xylabs/sdk-js'\nimport {\n AbstractCreatable, assertEx,\n creatable, CreatableParams, exists,\n isDefined,\n} from '@xylabs/sdk-js'\nimport type { ArchivistDriver, ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport interface MemoryDriverConfig {\n max?: number\n}\n\nexport interface MemoryDriverParams extends CreatableParams {\n config: MemoryDriverConfig\n}\n\n@creatable()\nexport class MemoryDriver extends AbstractCreatable<MemoryDriverParams>\n implements ArchivistDriver<Hash, Payload, WithStorageMeta<Payload>> {\n private _cache?: LRUCache<Hash, WithStorageMeta<Payload>>\n private _config?: MemoryDriverConfig\n private _dataHashIndex?: LRUCache<Hash, Hash>\n\n protected get cache() {\n this._cache = this._cache ?? new LRUCache<Hash, WithStorageMeta<Payload>>({ max: this.max })\n return this._cache\n }\n\n protected get config() {\n return assertEx(this._config, () => 'Driver config is not set')\n }\n\n protected get dataHashIndex() {\n this._dataHashIndex = this._dataHashIndex ?? new LRUCache<Hash, Hash>({ max: this.max })\n return this._dataHashIndex\n }\n\n protected get max() {\n return this.config?.max ?? 10_000\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 all(): Promisable<WithStorageMeta<Payload>[]> {\n return [...this.cache.values()].filter(exists).toSorted(PayloadBuilder.compareStorageMeta)\n }\n\n clear() {\n this.cache.clear()\n this._dataHashIndex = new LRUCache<Hash, Hash>({ max: this.max })\n }\n\n count() {\n return this.cache.size\n }\n\n override createHandler(): Promisable<void> {\n this._config = this.params.config ?? {}\n }\n\n async delete(hashes: Hash[]): Promise<WithStorageMeta[]> {\n const deletedPayloads: WithStorageMeta<Payload>[] = (await Promise.all(this.cache\n .dump()\n .map(async ([key, item]) => {\n const itemValueDataHash = await PayloadBuilder.dataHash(item.value)\n if (hashes.includes(key) || hashes.includes(itemValueDataHash)) {\n this.cache.delete(key)\n return item.value\n }\n })))\n .filter(exists)\n this.rebuildDataHashIndex()\n return deletedPayloads\n }\n\n get(hashes: Hash[]): Promisable<WithStorageMeta<Payload>[]> {\n return hashes.map((hash) => {\n const resolvedHash = this.dataHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }).filter(exists)\n }\n\n insert(payloads: WithStorageMeta<Payload>[]): WithStorageMeta<Payload>[] {\n const payloadsWithMeta = payloads.toSorted(PayloadBuilder.compareStorageMeta)\n return payloadsWithMeta.map((payload) => {\n return this.insertPayloadIntoCache(payload)\n })\n }\n\n next(options?: ArchivistNextOptions): Promisable<WithStorageMeta<Payload>[]> {\n const {\n limit = 100, cursor, order, open = true,\n } = options ?? {}\n let all = [...this.cache.values() ?? []].toSorted(PayloadBuilder.compareStorageMeta)\n if (order === 'desc') {\n all = all.toReversed()\n }\n const startIndex = isDefined(cursor)\n ? MemoryDriver.findIndexFromCursor(all, cursor) + (open ? 1 : 0)\n : 0\n return all.slice(startIndex, startIndex + limit)\n }\n\n private insertPayloadIntoCache(payload: WithStorageMeta<Payload>): WithStorageMeta<Payload> {\n this.cache.set(payload._hash, payload)\n this.dataHashIndex.set(payload._dataHash, payload._hash)\n return payload\n }\n\n private rebuildDataHashIndex() {\n this._dataHashIndex = new LRUCache<Hash, Hash>({ max: this.max })\n const payloads = this.cache.dump().map(([, item]) => item.value)\n for (const payload of payloads) {\n this.dataHashIndex.set(payload._dataHash, payload._hash)\n }\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/Archivist.ts","../../src/Config.ts","../../src/MemoryDriver.ts"],"sourcesContent":["import { StorageClassLabel } from '@xyo-network/archivist-abstract'\nimport { GenericArchivist, GenericArchivistParams } from '@xyo-network/archivist-generic'\nimport {\n ArchivistAllQuerySchema,\n ArchivistClearQuerySchema,\n ArchivistCommitQuerySchema,\n ArchivistDeleteQuerySchema,\n ArchivistInsertQuerySchema,\n ArchivistModuleEventData,\n ArchivistNextQuerySchema,\n AttachableArchivistInstance,\n} from '@xyo-network/archivist-model'\nimport {\n AnyConfigSchema, AttachableModuleInstance, creatableModule, ModuleInstance,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { MemoryArchivistConfig, MemoryArchivistConfigSchema } from './Config.ts'\nimport { MemoryDriver } from './MemoryDriver.ts'\n\nexport type MemoryArchivistParams<TConfig extends AnyConfigSchema<MemoryArchivistConfig> = AnyConfigSchema<MemoryArchivistConfig>>\n = GenericArchivistParams<TConfig>\n@creatableModule()\nexport class MemoryArchivist<\n TParams extends MemoryArchivistParams<AnyConfigSchema<MemoryArchivistConfig>> = MemoryArchivistParams,\n TEventData extends ArchivistModuleEventData = ArchivistModuleEventData,\n>\n extends GenericArchivist<TParams, TEventData>\n implements AttachableArchivistInstance, ModuleInstance {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, MemoryArchivistConfigSchema]\n static override readonly defaultConfigSchema: Schema = MemoryArchivistConfigSchema\n static override readonly labels = { ...super.labels, [StorageClassLabel]: 'memory' }\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 static override async paramsHandler<T extends AttachableModuleInstance<MemoryArchivistParams, ArchivistModuleEventData>>(\n inParams?: Partial<T['params']>,\n ): Promise<T['params']> {\n const superParams = await super.paramsHandler(inParams)\n return { ...superParams, driver: superParams.driver ?? await MemoryDriver.create(superParams) }\n }\n}\n","import type { EmptyObject, WithAdditional } from '@xylabs/sdk-js'\nimport type { ArchivistConfig } from '@xyo-network/archivist-model'\nimport {\n asSchema, type Payload, type Schema,\n} from '@xyo-network/payload-model'\n\nexport const MemoryArchivistConfigSchema = asSchema('network.xyo.archivist.memory.config', true)\nexport type MemoryArchivistConfigSchema = typeof MemoryArchivistConfigSchema\n\nexport type MemoryArchivistConfig<TConfig extends Payload | EmptyObject | void = void, TSchema extends Schema | void = void> = ArchivistConfig<\n WithAdditional<\n {\n max?: number\n },\n TConfig\n >,\n TSchema extends Schema ? TSchema : MemoryArchivistConfigSchema | ArchivistConfig['schema']\n>\n","import type {\n Hash, Hex, Promisable,\n} from '@xylabs/sdk-js'\nimport {\n AbstractCreatable, assertEx,\n creatable, CreatableParams, exists,\n isDefined,\n} from '@xylabs/sdk-js'\nimport type { ArchivistDriver, ArchivistNextOptions } from '@xyo-network/archivist-model'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { LRUCache } from 'lru-cache'\n\nexport interface MemoryDriverConfig {\n max?: number\n}\n\nexport interface MemoryDriverParams extends CreatableParams {\n config: MemoryDriverConfig\n}\n\n@creatable()\nexport class MemoryDriver extends AbstractCreatable<MemoryDriverParams>\n implements ArchivistDriver<Hash, Payload, WithStorageMeta<Payload>> {\n private _cache?: LRUCache<Hash, WithStorageMeta<Payload>>\n private _config?: MemoryDriverConfig\n private _dataHashIndex?: LRUCache<Hash, Hash>\n private _sortedValues?: WithStorageMeta<Payload>[]\n\n protected get cache() {\n this._cache = this._cache ?? new LRUCache<Hash, WithStorageMeta<Payload>>({\n max: this.max,\n dispose: () => { this._sortedValues = undefined },\n })\n return this._cache\n }\n\n protected get config() {\n return assertEx(this._config, () => 'Driver config is not set')\n }\n\n protected get dataHashIndex() {\n this._dataHashIndex = this._dataHashIndex ?? new LRUCache<Hash, Hash>({ max: this.max })\n return this._dataHashIndex\n }\n\n protected get max() {\n return this.config?.max ?? 10_000\n }\n\n protected get sortedValues(): WithStorageMeta<Payload>[] {\n if (!this._sortedValues) {\n this._sortedValues = [...this.cache.values()].filter(exists).toSorted(PayloadBuilder.compareStorageMeta)\n }\n return this._sortedValues\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 all(): Promisable<WithStorageMeta<Payload>[]> {\n return [...this.sortedValues]\n }\n\n clear() {\n this.cache.clear()\n this._dataHashIndex = new LRUCache<Hash, Hash>({ max: this.max })\n this._sortedValues = undefined\n }\n\n count() {\n return this.cache.size\n }\n\n override createHandler(): Promisable<void> {\n this._config = this.params.config ?? {}\n }\n\n async delete(hashes: Hash[]): Promise<WithStorageMeta[]> {\n this._sortedValues = undefined\n const deletedPayloads: WithStorageMeta<Payload>[] = (await Promise.all(this.cache\n .dump()\n .map(async ([key, item]) => {\n const itemValueDataHash = await PayloadBuilder.dataHash(item.value)\n if (hashes.includes(key) || hashes.includes(itemValueDataHash)) {\n this.cache.delete(key)\n return item.value\n }\n })))\n .filter(exists)\n this.rebuildDataHashIndex()\n return deletedPayloads\n }\n\n get(hashes: Hash[]): Promisable<WithStorageMeta<Payload>[]> {\n return hashes.map((hash) => {\n const resolvedHash = this.dataHashIndex.get(hash) ?? hash\n const result = this.cache.get(resolvedHash)\n if (resolvedHash !== hash && !result) {\n throw new Error('Missing referenced payload')\n }\n return result\n }).filter(exists)\n }\n\n insert(payloads: WithStorageMeta<Payload>[]): WithStorageMeta<Payload>[] {\n this._sortedValues = undefined\n const payloadsWithMeta = payloads.toSorted(PayloadBuilder.compareStorageMeta)\n return payloadsWithMeta.map((payload) => {\n return this.insertPayloadIntoCache(payload)\n })\n }\n\n next(options?: ArchivistNextOptions): Promisable<WithStorageMeta<Payload>[]> {\n const {\n limit = 100, cursor, order, open = true,\n } = options ?? {}\n const all = order === 'desc' ? this.sortedValues.toReversed() : this.sortedValues\n const startIndex = isDefined(cursor)\n ? MemoryDriver.findIndexFromCursor(all, cursor) + (open ? 1 : 0)\n : 0\n return all.slice(startIndex, startIndex + limit)\n }\n\n private insertPayloadIntoCache(payload: WithStorageMeta<Payload>): WithStorageMeta<Payload> {\n this.cache.set(payload._hash, payload)\n this.dataHashIndex.set(payload._dataHash, payload._hash)\n return payload\n }\n\n private rebuildDataHashIndex() {\n this._dataHashIndex = new LRUCache<Hash, Hash>({ max: this.max })\n const payloads = this.cache.dump().map(([, item]) => item.value)\n for (const payload of payloads) {\n this.dataHashIndex.set(payload._dataHash, payload._hash)\n }\n }\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/archivist-memory",
|
|
3
|
-
"version": "5.3.
|
|
3
|
+
"version": "5.3.17",
|
|
4
4
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -36,28 +36,27 @@
|
|
|
36
36
|
"!**/*.test.*"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@xyo-network/archivist-abstract": "~5.3.
|
|
40
|
-
"@xyo-network/archivist-generic": "~5.3.
|
|
41
|
-
"@xyo-network/archivist-model": "~5.3.
|
|
42
|
-
"@xyo-network/module-model": "~5.3.
|
|
43
|
-
"@xyo-network/payload-builder": "~5.3.
|
|
44
|
-
"@xyo-network/payload-model": "~5.3.
|
|
45
|
-
"lru-cache": "^11.2.
|
|
39
|
+
"@xyo-network/archivist-abstract": "~5.3.17",
|
|
40
|
+
"@xyo-network/archivist-generic": "~5.3.17",
|
|
41
|
+
"@xyo-network/archivist-model": "~5.3.17",
|
|
42
|
+
"@xyo-network/module-model": "~5.3.17",
|
|
43
|
+
"@xyo-network/payload-builder": "~5.3.17",
|
|
44
|
+
"@xyo-network/payload-model": "~5.3.17",
|
|
45
|
+
"lru-cache": "^11.2.7"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@xylabs/sdk-js": "^5.0.
|
|
49
|
-
"@xylabs/ts-scripts-yarn3": "~7.
|
|
50
|
-
"@xylabs/tsconfig": "~7.
|
|
51
|
-
"@xylabs/vitest-extended": "~5.0.
|
|
52
|
-
"@xyo-network/account": "~5.3.
|
|
53
|
-
"@xyo-network/account-model": "~5.3.
|
|
54
|
-
"@xyo-network/archivist-acceptance-tests": "~5.3.
|
|
55
|
-
"@xyo-network/
|
|
56
|
-
"@xyo-network/
|
|
57
|
-
"@xyo-network/
|
|
58
|
-
"@xyo-network/wallet": "~5.3.15",
|
|
48
|
+
"@xylabs/sdk-js": "^5.0.89",
|
|
49
|
+
"@xylabs/ts-scripts-yarn3": "~7.4.28",
|
|
50
|
+
"@xylabs/tsconfig": "~7.4.28",
|
|
51
|
+
"@xylabs/vitest-extended": "~5.0.89",
|
|
52
|
+
"@xyo-network/account": "~5.3.17",
|
|
53
|
+
"@xyo-network/account-model": "~5.3.17",
|
|
54
|
+
"@xyo-network/archivist-acceptance-tests": "~5.3.17",
|
|
55
|
+
"@xyo-network/id-payload-plugin": "~5.3.17",
|
|
56
|
+
"@xyo-network/payload-wrapper": "~5.3.17",
|
|
57
|
+
"@xyo-network/wallet": "~5.3.17",
|
|
59
58
|
"typescript": "~5.9.3",
|
|
60
|
-
"vitest": "~4.
|
|
59
|
+
"vitest": "~4.1.2",
|
|
61
60
|
"zod": "^4.3.6"
|
|
62
61
|
},
|
|
63
62
|
"peerDependencies": {
|
package/src/MemoryDriver.ts
CHANGED
|
@@ -25,9 +25,13 @@ export class MemoryDriver extends AbstractCreatable<MemoryDriverParams>
|
|
|
25
25
|
private _cache?: LRUCache<Hash, WithStorageMeta<Payload>>
|
|
26
26
|
private _config?: MemoryDriverConfig
|
|
27
27
|
private _dataHashIndex?: LRUCache<Hash, Hash>
|
|
28
|
+
private _sortedValues?: WithStorageMeta<Payload>[]
|
|
28
29
|
|
|
29
30
|
protected get cache() {
|
|
30
|
-
this._cache = this._cache ?? new LRUCache<Hash, WithStorageMeta<Payload>>({
|
|
31
|
+
this._cache = this._cache ?? new LRUCache<Hash, WithStorageMeta<Payload>>({
|
|
32
|
+
max: this.max,
|
|
33
|
+
dispose: () => { this._sortedValues = undefined },
|
|
34
|
+
})
|
|
31
35
|
return this._cache
|
|
32
36
|
}
|
|
33
37
|
|
|
@@ -44,6 +48,13 @@ export class MemoryDriver extends AbstractCreatable<MemoryDriverParams>
|
|
|
44
48
|
return this.config?.max ?? 10_000
|
|
45
49
|
}
|
|
46
50
|
|
|
51
|
+
protected get sortedValues(): WithStorageMeta<Payload>[] {
|
|
52
|
+
if (!this._sortedValues) {
|
|
53
|
+
this._sortedValues = [...this.cache.values()].filter(exists).toSorted(PayloadBuilder.compareStorageMeta)
|
|
54
|
+
}
|
|
55
|
+
return this._sortedValues
|
|
56
|
+
}
|
|
57
|
+
|
|
47
58
|
private static findIndexFromCursor(payloads: WithStorageMeta[], cursor: Hex) {
|
|
48
59
|
const index = payloads.findIndex(({ _sequence }) => _sequence === cursor)
|
|
49
60
|
if (index === -1) {
|
|
@@ -53,12 +64,13 @@ export class MemoryDriver extends AbstractCreatable<MemoryDriverParams>
|
|
|
53
64
|
}
|
|
54
65
|
|
|
55
66
|
all(): Promisable<WithStorageMeta<Payload>[]> {
|
|
56
|
-
return [...this.
|
|
67
|
+
return [...this.sortedValues]
|
|
57
68
|
}
|
|
58
69
|
|
|
59
70
|
clear() {
|
|
60
71
|
this.cache.clear()
|
|
61
72
|
this._dataHashIndex = new LRUCache<Hash, Hash>({ max: this.max })
|
|
73
|
+
this._sortedValues = undefined
|
|
62
74
|
}
|
|
63
75
|
|
|
64
76
|
count() {
|
|
@@ -70,6 +82,7 @@ export class MemoryDriver extends AbstractCreatable<MemoryDriverParams>
|
|
|
70
82
|
}
|
|
71
83
|
|
|
72
84
|
async delete(hashes: Hash[]): Promise<WithStorageMeta[]> {
|
|
85
|
+
this._sortedValues = undefined
|
|
73
86
|
const deletedPayloads: WithStorageMeta<Payload>[] = (await Promise.all(this.cache
|
|
74
87
|
.dump()
|
|
75
88
|
.map(async ([key, item]) => {
|
|
@@ -96,6 +109,7 @@ export class MemoryDriver extends AbstractCreatable<MemoryDriverParams>
|
|
|
96
109
|
}
|
|
97
110
|
|
|
98
111
|
insert(payloads: WithStorageMeta<Payload>[]): WithStorageMeta<Payload>[] {
|
|
112
|
+
this._sortedValues = undefined
|
|
99
113
|
const payloadsWithMeta = payloads.toSorted(PayloadBuilder.compareStorageMeta)
|
|
100
114
|
return payloadsWithMeta.map((payload) => {
|
|
101
115
|
return this.insertPayloadIntoCache(payload)
|
|
@@ -106,10 +120,7 @@ export class MemoryDriver extends AbstractCreatable<MemoryDriverParams>
|
|
|
106
120
|
const {
|
|
107
121
|
limit = 100, cursor, order, open = true,
|
|
108
122
|
} = options ?? {}
|
|
109
|
-
|
|
110
|
-
if (order === 'desc') {
|
|
111
|
-
all = all.toReversed()
|
|
112
|
-
}
|
|
123
|
+
const all = order === 'desc' ? this.sortedValues.toReversed() : this.sortedValues
|
|
113
124
|
const startIndex = isDefined(cursor)
|
|
114
125
|
? MemoryDriver.findIndexFromCursor(all, cursor) + (open ? 1 : 0)
|
|
115
126
|
: 0
|