@vercel/kv2 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +87 -0
- package/SKILL.md +65 -0
- package/dist/blob-format.d.ts +35 -0
- package/dist/blob-format.d.ts.map +1 -0
- package/dist/blob-format.js +91 -0
- package/dist/blob-format.js.map +1 -0
- package/dist/blob-store.d.ts +11 -0
- package/dist/blob-store.d.ts.map +1 -0
- package/dist/blob-store.js +32 -0
- package/dist/blob-store.js.map +1 -0
- package/dist/cache.d.ts +33 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +146 -0
- package/dist/cache.js.map +1 -0
- package/dist/cached-kv.d.ts +63 -0
- package/dist/cached-kv.d.ts.map +1 -0
- package/dist/cached-kv.js +891 -0
- package/dist/cached-kv.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +342 -0
- package/dist/cli.js.map +1 -0
- package/dist/create-kv.d.ts +86 -0
- package/dist/create-kv.d.ts.map +1 -0
- package/dist/create-kv.js +125 -0
- package/dist/create-kv.js.map +1 -0
- package/dist/disk-cache.d.ts.map +1 -0
- package/dist/disk-cache.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/indexed-kv.d.ts +44 -0
- package/dist/indexed-kv.d.ts.map +1 -0
- package/dist/indexed-kv.js +373 -0
- package/dist/indexed-kv.js.map +1 -0
- package/dist/manifest-log.d.ts +57 -0
- package/dist/manifest-log.d.ts.map +1 -0
- package/dist/manifest-log.js +128 -0
- package/dist/manifest-log.js.map +1 -0
- package/dist/memory-cache.d.ts +22 -0
- package/dist/memory-cache.d.ts.map +1 -0
- package/dist/memory-cache.js +90 -0
- package/dist/memory-cache.js.map +1 -0
- package/dist/proxy-cache.d.ts +40 -0
- package/dist/proxy-cache.d.ts.map +1 -0
- package/dist/proxy-cache.js +124 -0
- package/dist/proxy-cache.js.map +1 -0
- package/dist/readme.test.d.ts +9 -0
- package/dist/readme.test.d.ts.map +1 -0
- package/dist/readme.test.js +285 -0
- package/dist/readme.test.js.map +1 -0
- package/dist/schema/define-schema.d.ts +35 -0
- package/dist/schema/define-schema.d.ts.map +1 -0
- package/dist/schema/define-schema.js +70 -0
- package/dist/schema/define-schema.js.map +1 -0
- package/dist/schema/index.d.ts +4 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +5 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/key-builders.d.ts +40 -0
- package/dist/schema/key-builders.d.ts.map +1 -0
- package/dist/schema/key-builders.js +124 -0
- package/dist/schema/key-builders.js.map +1 -0
- package/dist/schema/schema-kv.d.ts +48 -0
- package/dist/schema/schema-kv.d.ts.map +1 -0
- package/dist/schema/schema-kv.js +96 -0
- package/dist/schema/schema-kv.js.map +1 -0
- package/dist/schema/tree.d.ts +14 -0
- package/dist/schema/tree.d.ts.map +1 -0
- package/dist/schema/tree.js +135 -0
- package/dist/schema/tree.js.map +1 -0
- package/dist/schema/types.d.ts +135 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +2 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/testing/core-tests.d.ts +30 -0
- package/dist/testing/core-tests.d.ts.map +1 -0
- package/dist/testing/core-tests.js +383 -0
- package/dist/testing/core-tests.js.map +1 -0
- package/dist/testing/create-kv-test-setup.d.ts +21 -0
- package/dist/testing/create-kv-test-setup.d.ts.map +1 -0
- package/dist/testing/create-kv-test-setup.js +25 -0
- package/dist/testing/create-kv-test-setup.js.map +1 -0
- package/dist/testing/debug-manifest.d.ts +2 -0
- package/dist/testing/debug-manifest.d.ts.map +1 -0
- package/dist/testing/debug-manifest.js +14 -0
- package/dist/testing/debug-manifest.js.map +1 -0
- package/dist/testing/fake-blob-store.d.ts +23 -0
- package/dist/testing/fake-blob-store.d.ts.map +1 -0
- package/dist/testing/fake-blob-store.js +158 -0
- package/dist/testing/fake-blob-store.js.map +1 -0
- package/dist/testing/fake-cache.d.ts +54 -0
- package/dist/testing/fake-cache.d.ts.map +1 -0
- package/dist/testing/fake-cache.js +137 -0
- package/dist/testing/fake-cache.js.map +1 -0
- package/dist/testing/index.d.ts +34 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +101 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/manifest-test-setup.d.ts +22 -0
- package/dist/testing/manifest-test-setup.d.ts.map +1 -0
- package/dist/testing/manifest-test-setup.js +43 -0
- package/dist/testing/manifest-test-setup.js.map +1 -0
- package/dist/testing/perf-test.d.ts +13 -0
- package/dist/testing/perf-test.d.ts.map +1 -0
- package/dist/testing/perf-test.js +101 -0
- package/dist/testing/perf-test.js.map +1 -0
- package/dist/testing/run-tests.d.ts +2 -0
- package/dist/testing/run-tests.d.ts.map +1 -0
- package/dist/testing/run-tests.js +141 -0
- package/dist/testing/run-tests.js.map +1 -0
- package/dist/testing/setup.d.ts +2 -0
- package/dist/testing/setup.d.ts.map +1 -0
- package/dist/testing/setup.js +3 -0
- package/dist/testing/setup.js.map +1 -0
- package/dist/testing/test-index.d.ts +28 -0
- package/dist/testing/test-index.d.ts.map +1 -0
- package/dist/testing/test-index.js +35 -0
- package/dist/testing/test-index.js.map +1 -0
- package/dist/testing/test-setup.d.ts +32 -0
- package/dist/testing/test-setup.d.ts.map +1 -0
- package/dist/testing/test-setup.js +72 -0
- package/dist/testing/test-setup.js.map +1 -0
- package/dist/testing/upstream-kv-test-setup.d.ts +30 -0
- package/dist/testing/upstream-kv-test-setup.d.ts.map +1 -0
- package/dist/testing/upstream-kv-test-setup.js +66 -0
- package/dist/testing/upstream-kv-test-setup.js.map +1 -0
- package/dist/testing/vitest-compat.d.ts +92 -0
- package/dist/testing/vitest-compat.d.ts.map +1 -0
- package/dist/testing/vitest-compat.js +601 -0
- package/dist/testing/vitest-compat.js.map +1 -0
- package/dist/tracing.d.ts +71 -0
- package/dist/tracing.d.ts.map +1 -0
- package/dist/tracing.js +232 -0
- package/dist/tracing.js.map +1 -0
- package/dist/typed-kv.d.ts +120 -0
- package/dist/typed-kv.d.ts.map +1 -0
- package/dist/typed-kv.js +565 -0
- package/dist/typed-kv.js.map +1 -0
- package/dist/typed-upstream-kv.d.ts +17 -0
- package/dist/typed-upstream-kv.d.ts.map +1 -0
- package/dist/typed-upstream-kv.js +38 -0
- package/dist/typed-upstream-kv.js.map +1 -0
- package/dist/types.d.ts +199 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/dist/upstream-kv.d.ts +84 -0
- package/dist/upstream-kv.d.ts.map +1 -0
- package/dist/upstream-kv.js +375 -0
- package/dist/upstream-kv.js.map +1 -0
- package/docs/api-reference.md +222 -0
- package/docs/caching.md +60 -0
- package/docs/cli.md +123 -0
- package/docs/copy-on-write-branches.md +98 -0
- package/docs/getting-started.md +61 -0
- package/docs/indexes.md +122 -0
- package/docs/iterating-and-pagination.md +93 -0
- package/docs/metadata.md +82 -0
- package/docs/optimistic-locking.md +72 -0
- package/docs/schema-and-trees.md +222 -0
- package/docs/streaming.md +61 -0
- package/docs/testing-and-tracing.md +141 -0
- package/docs/typed-stores.md +68 -0
- package/package.json +63 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disk-cache.js","sourceRoot":"","sources":["../src/disk-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { KV2 } from "./cached-kv.js";
|
|
2
|
+
export { TypedKV } from "./typed-kv.js";
|
|
3
|
+
export { VercelBlobStore } from "./blob-store.js";
|
|
4
|
+
export { KVVersionConflictError, KVIndexConflictError } from "./types.js";
|
|
5
|
+
export { createKV } from "./create-kv.js";
|
|
6
|
+
export { UpstreamKV } from "./upstream-kv.js";
|
|
7
|
+
export { ManifestLog } from "./manifest-log.js";
|
|
8
|
+
export { noopTracer, consoleTracer, createOtelTracer, createStatsTracer, } from "./tracing.js";
|
|
9
|
+
export type { OtelTracerLike, OtelSpanLike, TimingStats } from "./tracing.js";
|
|
10
|
+
export { defineSchema, createSchemaKV } from "./schema/index.js";
|
|
11
|
+
export type { SchemaNodeDef, SchemaDef, TreeNode, TreeNodeIterator, TreeNodePage, TreeNodeWithChildren, KeyBuilders, SchemaKV, } from "./schema/index.js";
|
|
12
|
+
export type { BlobStore, KV2Options, EntriesIterable, EntriesPage, KeysIterable, KeysPage, KVEntry, KVEntryNotFound, KVGetResult, KVLike, KVSetResult, PrefixString, PutBody, SetOptions, Span, Tracer, } from "./types.js";
|
|
13
|
+
export type { CreateKVOptions, UpstreamConfig } from "./create-kv.js";
|
|
14
|
+
export type { KeyMeta } from "./manifest-log.js";
|
|
15
|
+
export type { IndexDef, IndexQuery } from "./typed-kv.js";
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAG1E,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EACN,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG9E,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACjE,YAAY,EACX,aAAa,EACb,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,WAAW,EACX,QAAQ,GACR,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACX,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,eAAe,EACf,WAAW,EACX,MAAM,EACN,WAAW,EACX,YAAY,EACZ,OAAO,EACP,UAAU,EACV,IAAI,EACJ,MAAM,GACN,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACtE,YAAY,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { KV2 } from "./cached-kv.js";
|
|
2
|
+
export { TypedKV } from "./typed-kv.js";
|
|
3
|
+
export { VercelBlobStore } from "./blob-store.js";
|
|
4
|
+
export { KVVersionConflictError, KVIndexConflictError } from "./types.js";
|
|
5
|
+
// CoW / Environment-aware KV
|
|
6
|
+
export { createKV } from "./create-kv.js";
|
|
7
|
+
export { UpstreamKV } from "./upstream-kv.js";
|
|
8
|
+
export { ManifestLog } from "./manifest-log.js";
|
|
9
|
+
// Tracing
|
|
10
|
+
export { noopTracer, consoleTracer, createOtelTracer, createStatsTracer, } from "./tracing.js";
|
|
11
|
+
// Schema-based API
|
|
12
|
+
export { defineSchema, createSchemaKV } from "./schema/index.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE1E,6BAA6B;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,UAAU;AACV,OAAO,EACN,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,cAAc,CAAC;AAGtB,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { TypedKV } from "./typed-kv.js";
|
|
2
|
+
import type { EntriesIterable, KVEntry, KVGetResult, KVLike, KVSetResult, KeysIterable, SetOptions } from "./types.js";
|
|
3
|
+
export interface IndexDef<V> {
|
|
4
|
+
/** Extract index key(s) from value. Return string for single-value, string[] for multi-value. */
|
|
5
|
+
key: (value: V, primaryKey: string) => string | string[];
|
|
6
|
+
/** Unique constraint. Default: false */
|
|
7
|
+
unique?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A KV store wrapper that automatically maintains secondary indexes.
|
|
11
|
+
*
|
|
12
|
+
* Wraps any KVLike parent and adds index management on top of a prefixed data store.
|
|
13
|
+
* Index entries are stored as siblings under `__idx/` to avoid polluting `keys()` scans.
|
|
14
|
+
*
|
|
15
|
+
* Orphan detection: stale index entries are detected and cleaned up on read.
|
|
16
|
+
*/
|
|
17
|
+
export declare class IndexedKV<V, M = undefined> {
|
|
18
|
+
private parent;
|
|
19
|
+
private store;
|
|
20
|
+
private indexes;
|
|
21
|
+
private prefix;
|
|
22
|
+
private indexStores;
|
|
23
|
+
constructor(parent: KVLike<M>, prefix: string, indexes: Record<string, IndexDef<V>>);
|
|
24
|
+
get(key: string): Promise<KVGetResult<V, M>>;
|
|
25
|
+
set(key: string, value: V, ...[metadata, options]: undefined extends M ? [M?, SetOptions?] : [M, SetOptions?]): Promise<KVSetResult>;
|
|
26
|
+
delete(key: string): Promise<void>;
|
|
27
|
+
keys(prefix?: string): KeysIterable;
|
|
28
|
+
entries(prefix?: string): EntriesIterable<V, M>;
|
|
29
|
+
getMany(keys: string[], concurrency?: number): Promise<Map<string, KVEntry<V, M>>>;
|
|
30
|
+
/**
|
|
31
|
+
* Point lookup on a unique index. Validates and cleans orphans.
|
|
32
|
+
*/
|
|
33
|
+
getByIndex(indexName: string, indexKey: string): Promise<KVGetResult<V, M>>;
|
|
34
|
+
/**
|
|
35
|
+
* Prefix scan on a non-unique index. Returns primary keys.
|
|
36
|
+
*/
|
|
37
|
+
keysByIndex(indexName: string, indexKey: string): KeysIterable;
|
|
38
|
+
/**
|
|
39
|
+
* Prefix scan returning full entries. Validates each result.
|
|
40
|
+
*/
|
|
41
|
+
entriesByIndex(indexName: string, indexKey: string): EntriesIterable<V, M>;
|
|
42
|
+
getStore(): TypedKV<V, M>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=indexed-kv.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexed-kv.d.ts","sourceRoot":"","sources":["../src/indexed-kv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EACX,eAAe,EAEf,OAAO,EACP,WAAW,EACX,MAAM,EACN,WAAW,EACX,YAAY,EAEZ,UAAU,EACV,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,QAAQ,CAAC,CAAC;IAC1B,iGAAiG;IACjG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,EAAE,CAAC;IACzD,wCAAwC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAQD;;;;;;;GAOG;AACH,qBAAa,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS;IACtC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAA6C;gBAG/D,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAmB/B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAI5C,GAAG,CACR,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,CAAC,EACR,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAChF,OAAO,CAAC,WAAW,CAAC;IAsEjB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY;IAInC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAIzC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAMxF;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAgDjF;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY;IAoF9D;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAqG1E,QAAQ,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CAGzB"}
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
import { TypedKV } from "./typed-kv.js";
|
|
2
|
+
import { KVIndexConflictError } from "./types.js";
|
|
3
|
+
const INDEX_PREFIX = "__idx/";
|
|
4
|
+
function normalizeIndexKeys(raw) {
|
|
5
|
+
return Array.isArray(raw) ? raw : [raw];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A KV store wrapper that automatically maintains secondary indexes.
|
|
9
|
+
*
|
|
10
|
+
* Wraps any KVLike parent and adds index management on top of a prefixed data store.
|
|
11
|
+
* Index entries are stored as siblings under `__idx/` to avoid polluting `keys()` scans.
|
|
12
|
+
*
|
|
13
|
+
* Orphan detection: stale index entries are detected and cleaned up on read.
|
|
14
|
+
*/
|
|
15
|
+
export class IndexedKV {
|
|
16
|
+
parent;
|
|
17
|
+
store;
|
|
18
|
+
indexes;
|
|
19
|
+
prefix;
|
|
20
|
+
indexStores;
|
|
21
|
+
constructor(parent, prefix, indexes) {
|
|
22
|
+
this.parent = parent;
|
|
23
|
+
this.prefix = prefix;
|
|
24
|
+
this.store = new TypedKV(parent, prefix);
|
|
25
|
+
this.indexes = indexes;
|
|
26
|
+
// Create a TypedKV for each index, storing plain primary-key strings with no metadata
|
|
27
|
+
this.indexStores = {};
|
|
28
|
+
for (const name of Object.keys(indexes)) {
|
|
29
|
+
this.indexStores[name] = new TypedKV(parent, `${INDEX_PREFIX}${prefix}${name}/`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
// --- Standard KVLike methods ---
|
|
33
|
+
async get(key) {
|
|
34
|
+
return this.store.get(key);
|
|
35
|
+
}
|
|
36
|
+
async set(key, value, ...[metadata, options]) {
|
|
37
|
+
// 1. Read old entry to determine old index keys
|
|
38
|
+
const oldResult = await this.store.get(key);
|
|
39
|
+
const oldValue = oldResult.exists ? await oldResult.value : undefined;
|
|
40
|
+
// 2. Check unique constraints for new index keys that changed
|
|
41
|
+
for (const [name, def] of Object.entries(this.indexes)) {
|
|
42
|
+
if (!def.unique)
|
|
43
|
+
continue;
|
|
44
|
+
const newKeys = normalizeIndexKeys(def.key(value, key));
|
|
45
|
+
const oldKeys = oldValue
|
|
46
|
+
? normalizeIndexKeys(def.key(oldValue, key))
|
|
47
|
+
: [];
|
|
48
|
+
const oldSet = new Set(oldKeys);
|
|
49
|
+
for (const newKey of newKeys) {
|
|
50
|
+
if (oldSet.has(newKey))
|
|
51
|
+
continue; // unchanged, skip check
|
|
52
|
+
const existing = await this.indexStores[name].get(newKey);
|
|
53
|
+
if (existing.exists) {
|
|
54
|
+
const existingPK = await existing.value;
|
|
55
|
+
if (existingPK !== key) {
|
|
56
|
+
throw new KVIndexConflictError(name, newKey);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// 3. Write all index entries concurrently (throw on failure — before
|
|
62
|
+
// main entry is written, so a failed index write means clean state).
|
|
63
|
+
// If main write later fails, orphan indexes self-heal on read.
|
|
64
|
+
const indexOps = [];
|
|
65
|
+
for (const [name, def] of Object.entries(this.indexes)) {
|
|
66
|
+
const newKeys = normalizeIndexKeys(def.key(value, key));
|
|
67
|
+
const oldKeys = oldValue
|
|
68
|
+
? normalizeIndexKeys(def.key(oldValue, key))
|
|
69
|
+
: [];
|
|
70
|
+
const newSet = new Set(newKeys);
|
|
71
|
+
const oldSet = new Set(oldKeys);
|
|
72
|
+
const indexStore = this.indexStores[name];
|
|
73
|
+
const isUnique = def.unique ?? false;
|
|
74
|
+
// Delete old index entries that are no longer needed
|
|
75
|
+
for (const oldKey of oldKeys) {
|
|
76
|
+
if (!newSet.has(oldKey)) {
|
|
77
|
+
if (isUnique) {
|
|
78
|
+
indexOps.push(indexStore.delete(oldKey));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
indexOps.push(indexStore.delete(`${oldKey}/${key}`));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Write new index entries
|
|
86
|
+
for (const newKey of newKeys) {
|
|
87
|
+
if (!oldSet.has(newKey)) {
|
|
88
|
+
if (isUnique) {
|
|
89
|
+
indexOps.push(indexStore.set(newKey, key));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
indexOps.push(indexStore.set(`${newKey}/${key}`, key));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
await Promise.all(indexOps);
|
|
98
|
+
// 4. Write main entry last
|
|
99
|
+
return this.store.set(key, value, ...[metadata, options]);
|
|
100
|
+
}
|
|
101
|
+
async delete(key) {
|
|
102
|
+
// 1. Read entry to determine current index keys
|
|
103
|
+
const result = await this.store.get(key);
|
|
104
|
+
if (!result.exists)
|
|
105
|
+
return;
|
|
106
|
+
const value = await result.value;
|
|
107
|
+
// 2. Delete main entry
|
|
108
|
+
await this.store.delete(key);
|
|
109
|
+
// 3. Delete all index entries concurrently
|
|
110
|
+
const deleteOps = [];
|
|
111
|
+
for (const [name, def] of Object.entries(this.indexes)) {
|
|
112
|
+
const keys = normalizeIndexKeys(def.key(value, key));
|
|
113
|
+
const indexStore = this.indexStores[name];
|
|
114
|
+
const isUnique = def.unique ?? false;
|
|
115
|
+
for (const indexKey of keys) {
|
|
116
|
+
if (isUnique) {
|
|
117
|
+
deleteOps.push(indexStore.delete(indexKey).catch(() => { }));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
deleteOps.push(indexStore.delete(`${indexKey}/${key}`).catch(() => { }));
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
await Promise.all(deleteOps);
|
|
125
|
+
}
|
|
126
|
+
keys(prefix) {
|
|
127
|
+
return this.store.keys(prefix);
|
|
128
|
+
}
|
|
129
|
+
entries(prefix) {
|
|
130
|
+
return this.store.entries(prefix);
|
|
131
|
+
}
|
|
132
|
+
async getMany(keys, concurrency) {
|
|
133
|
+
return this.store.getMany(keys, concurrency);
|
|
134
|
+
}
|
|
135
|
+
// --- Index query methods ---
|
|
136
|
+
/**
|
|
137
|
+
* Point lookup on a unique index. Validates and cleans orphans.
|
|
138
|
+
*/
|
|
139
|
+
async getByIndex(indexName, indexKey) {
|
|
140
|
+
const def = this.indexes[indexName];
|
|
141
|
+
if (!def) {
|
|
142
|
+
throw new Error(`Unknown index: "${indexName}"`);
|
|
143
|
+
}
|
|
144
|
+
if (!def.unique) {
|
|
145
|
+
throw new Error(`getByIndex requires a unique index, "${indexName}" is non-unique. Use keysByIndex or entriesByIndex instead.`);
|
|
146
|
+
}
|
|
147
|
+
const indexStore = this.indexStores[indexName];
|
|
148
|
+
// 1. Look up index entry
|
|
149
|
+
const indexResult = await indexStore.get(indexKey);
|
|
150
|
+
if (!indexResult.exists) {
|
|
151
|
+
return { exists: false, metadata: undefined, value: undefined, stream: undefined };
|
|
152
|
+
}
|
|
153
|
+
// 2. Get primary key from index
|
|
154
|
+
const primaryKey = await indexResult.value;
|
|
155
|
+
// 3. Look up main entry
|
|
156
|
+
const entry = await this.store.get(primaryKey);
|
|
157
|
+
// 4. Orphan type 1: main entry doesn't exist
|
|
158
|
+
if (!entry.exists) {
|
|
159
|
+
indexStore.delete(indexKey).catch(() => { });
|
|
160
|
+
return { exists: false, metadata: undefined, value: undefined, stream: undefined };
|
|
161
|
+
}
|
|
162
|
+
// 5. Orphan type 2: index points to value with different index key
|
|
163
|
+
const value = await entry.value;
|
|
164
|
+
const currentKeys = normalizeIndexKeys(def.key(value, primaryKey));
|
|
165
|
+
if (!currentKeys.includes(indexKey)) {
|
|
166
|
+
indexStore.delete(indexKey).catch(() => { });
|
|
167
|
+
return { exists: false, metadata: undefined, value: undefined, stream: undefined };
|
|
168
|
+
}
|
|
169
|
+
// 6. Valid — return the entry (re-wrap value since we already awaited it)
|
|
170
|
+
return {
|
|
171
|
+
exists: true,
|
|
172
|
+
metadata: entry.metadata,
|
|
173
|
+
value: Promise.resolve(value),
|
|
174
|
+
stream: entry.stream,
|
|
175
|
+
version: entry.version,
|
|
176
|
+
update: entry.update,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Prefix scan on a non-unique index. Returns primary keys.
|
|
181
|
+
*/
|
|
182
|
+
keysByIndex(indexName, indexKey) {
|
|
183
|
+
const def = this.indexes[indexName];
|
|
184
|
+
if (!def) {
|
|
185
|
+
throw new Error(`Unknown index: "${indexName}"`);
|
|
186
|
+
}
|
|
187
|
+
const indexStore = this.indexStores[indexName];
|
|
188
|
+
const store = this.store;
|
|
189
|
+
const isUnique = def.unique ?? false;
|
|
190
|
+
if (isUnique) {
|
|
191
|
+
// For unique indexes, just do a point lookup
|
|
192
|
+
const self = this;
|
|
193
|
+
return {
|
|
194
|
+
async *[Symbol.asyncIterator]() {
|
|
195
|
+
const result = await self.getByIndex(indexName, indexKey);
|
|
196
|
+
if (result.exists) {
|
|
197
|
+
const indexResult = await indexStore.get(indexKey);
|
|
198
|
+
if (indexResult.exists) {
|
|
199
|
+
yield await indexResult.value;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
async page(limit, cursor) {
|
|
204
|
+
if (cursor)
|
|
205
|
+
return { keys: [] };
|
|
206
|
+
const result = await self.getByIndex(indexName, indexKey);
|
|
207
|
+
if (result.exists) {
|
|
208
|
+
const indexResult = await indexStore.get(indexKey);
|
|
209
|
+
if (indexResult.exists) {
|
|
210
|
+
return { keys: [await indexResult.value] };
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return { keys: [] };
|
|
214
|
+
},
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// Non-unique: scan prefix {indexKey}/
|
|
218
|
+
const scanPrefix = `${indexKey}/`;
|
|
219
|
+
return {
|
|
220
|
+
async *[Symbol.asyncIterator]() {
|
|
221
|
+
for await (const [, entry] of indexStore.entries(scanPrefix)) {
|
|
222
|
+
const primaryKey = await entry.value;
|
|
223
|
+
// Validate: main entry must exist
|
|
224
|
+
const mainEntry = await store.get(primaryKey);
|
|
225
|
+
if (mainEntry.exists) {
|
|
226
|
+
const value = await mainEntry.value;
|
|
227
|
+
const currentKeys = normalizeIndexKeys(def.key(value, primaryKey));
|
|
228
|
+
if (currentKeys.includes(indexKey)) {
|
|
229
|
+
yield primaryKey;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// Orphan type 2
|
|
233
|
+
indexStore.delete(`${indexKey}/${primaryKey}`).catch(() => { });
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
// Orphan type 1
|
|
238
|
+
indexStore.delete(`${indexKey}/${primaryKey}`).catch(() => { });
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
async page(limit, cursor) {
|
|
243
|
+
const { entries, cursor: nextCursor } = await indexStore.entries(scanPrefix).page(limit, cursor);
|
|
244
|
+
const keys = [];
|
|
245
|
+
for (const [, entry] of entries) {
|
|
246
|
+
const primaryKey = await entry.value;
|
|
247
|
+
const mainEntry = await store.get(primaryKey);
|
|
248
|
+
if (mainEntry.exists) {
|
|
249
|
+
const value = await mainEntry.value;
|
|
250
|
+
const currentKeys = normalizeIndexKeys(def.key(value, primaryKey));
|
|
251
|
+
if (currentKeys.includes(indexKey)) {
|
|
252
|
+
keys.push(primaryKey);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
indexStore.delete(`${indexKey}/${primaryKey}`).catch(() => { });
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
indexStore.delete(`${indexKey}/${primaryKey}`).catch(() => { });
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return { keys, cursor: nextCursor };
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Prefix scan returning full entries. Validates each result.
|
|
268
|
+
*/
|
|
269
|
+
entriesByIndex(indexName, indexKey) {
|
|
270
|
+
const def = this.indexes[indexName];
|
|
271
|
+
if (!def) {
|
|
272
|
+
throw new Error(`Unknown index: "${indexName}"`);
|
|
273
|
+
}
|
|
274
|
+
const indexStore = this.indexStores[indexName];
|
|
275
|
+
const store = this.store;
|
|
276
|
+
const isUnique = def.unique ?? false;
|
|
277
|
+
if (isUnique) {
|
|
278
|
+
const self = this;
|
|
279
|
+
return {
|
|
280
|
+
async *[Symbol.asyncIterator]() {
|
|
281
|
+
const result = await self.getByIndex(indexName, indexKey);
|
|
282
|
+
if (result.exists) {
|
|
283
|
+
const indexResult = await indexStore.get(indexKey);
|
|
284
|
+
if (indexResult.exists) {
|
|
285
|
+
const pk = await indexResult.value;
|
|
286
|
+
yield [pk, result];
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
},
|
|
290
|
+
async page(limit, cursor) {
|
|
291
|
+
if (cursor)
|
|
292
|
+
return { entries: [] };
|
|
293
|
+
const result = await self.getByIndex(indexName, indexKey);
|
|
294
|
+
if (result.exists) {
|
|
295
|
+
const indexResult = await indexStore.get(indexKey);
|
|
296
|
+
if (indexResult.exists) {
|
|
297
|
+
const pk = await indexResult.value;
|
|
298
|
+
return { entries: [[pk, result]] };
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
return { entries: [] };
|
|
302
|
+
},
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
// Non-unique: scan prefix {indexKey}/
|
|
306
|
+
const scanPrefix = `${indexKey}/`;
|
|
307
|
+
return {
|
|
308
|
+
async *[Symbol.asyncIterator]() {
|
|
309
|
+
for await (const [, indexEntry] of indexStore.entries(scanPrefix)) {
|
|
310
|
+
const primaryKey = await indexEntry.value;
|
|
311
|
+
const mainEntry = await store.get(primaryKey);
|
|
312
|
+
if (mainEntry.exists) {
|
|
313
|
+
const value = await mainEntry.value;
|
|
314
|
+
const currentKeys = normalizeIndexKeys(def.key(value, primaryKey));
|
|
315
|
+
if (currentKeys.includes(indexKey)) {
|
|
316
|
+
// Re-wrap value since we already awaited it
|
|
317
|
+
const wrappedEntry = {
|
|
318
|
+
exists: true,
|
|
319
|
+
metadata: mainEntry.metadata,
|
|
320
|
+
value: Promise.resolve(value),
|
|
321
|
+
stream: mainEntry.stream,
|
|
322
|
+
version: mainEntry.version,
|
|
323
|
+
update: mainEntry.update,
|
|
324
|
+
};
|
|
325
|
+
yield [primaryKey, wrappedEntry];
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
indexStore.delete(`${indexKey}/${primaryKey}`).catch(() => { });
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
indexStore.delete(`${indexKey}/${primaryKey}`).catch(() => { });
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
async page(limit, cursor) {
|
|
337
|
+
const { entries: indexEntries, cursor: nextCursor } = await indexStore.entries(scanPrefix).page(limit, cursor);
|
|
338
|
+
const entries = [];
|
|
339
|
+
for (const [, indexEntry] of indexEntries) {
|
|
340
|
+
const primaryKey = await indexEntry.value;
|
|
341
|
+
const mainEntry = await store.get(primaryKey);
|
|
342
|
+
if (mainEntry.exists) {
|
|
343
|
+
const value = await mainEntry.value;
|
|
344
|
+
const currentKeys = normalizeIndexKeys(def.key(value, primaryKey));
|
|
345
|
+
if (currentKeys.includes(indexKey)) {
|
|
346
|
+
const wrappedEntry = {
|
|
347
|
+
exists: true,
|
|
348
|
+
metadata: mainEntry.metadata,
|
|
349
|
+
value: Promise.resolve(value),
|
|
350
|
+
stream: mainEntry.stream,
|
|
351
|
+
version: mainEntry.version,
|
|
352
|
+
update: mainEntry.update,
|
|
353
|
+
};
|
|
354
|
+
entries.push([primaryKey, wrappedEntry]);
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
indexStore.delete(`${indexKey}/${primaryKey}`).catch(() => { });
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
indexStore.delete(`${indexKey}/${primaryKey}`).catch(() => { });
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return { entries, cursor: nextCursor };
|
|
365
|
+
},
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
// --- Access to underlying stores ---
|
|
369
|
+
getStore() {
|
|
370
|
+
return this.store;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
//# sourceMappingURL=indexed-kv.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexed-kv.js","sourceRoot":"","sources":["../src/indexed-kv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { BlobStore, CacheLike } from "./types.js";
|
|
2
|
+
export interface KeyMeta {
|
|
3
|
+
source: "local" | "upstream" | "tombstone";
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Manifest for tracking key sources (local vs upstream vs tombstone).
|
|
7
|
+
*
|
|
8
|
+
* Individual entries stored in blob for persistence.
|
|
9
|
+
* Aggregated manifest cached as single entry for fast cross-instance reads.
|
|
10
|
+
*/
|
|
11
|
+
export declare class ManifestLog {
|
|
12
|
+
private kv;
|
|
13
|
+
private cache;
|
|
14
|
+
private cacheKey;
|
|
15
|
+
constructor(blobStore: BlobStore, manifestPrefix: string, cache?: CacheLike);
|
|
16
|
+
/**
|
|
17
|
+
* Get the source for a specific key.
|
|
18
|
+
* Returns null if key is not in manifest (unknown).
|
|
19
|
+
*/
|
|
20
|
+
getKeySource(key: string): Promise<KeyMeta | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Record a key as local or upstream.
|
|
23
|
+
*/
|
|
24
|
+
recordAdd(key: string, source: "local" | "upstream"): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Record a key deletion (tombstone).
|
|
27
|
+
*/
|
|
28
|
+
recordDelete(key: string): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Delete a manifest entry (for cleanup).
|
|
31
|
+
*/
|
|
32
|
+
remove(key: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Delete all manifest entries.
|
|
35
|
+
*/
|
|
36
|
+
destroy(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Get all manifest entries.
|
|
39
|
+
*/
|
|
40
|
+
getAll(): Promise<Map<string, KeyMeta>>;
|
|
41
|
+
/**
|
|
42
|
+
* Get manifest state with keys map.
|
|
43
|
+
*/
|
|
44
|
+
getManifest(): Promise<{
|
|
45
|
+
keys: Map<string, KeyMeta>;
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* Load manifest from cache or blob.
|
|
49
|
+
* Caches aggregated result for fast repeated reads.
|
|
50
|
+
*/
|
|
51
|
+
private loadManifest;
|
|
52
|
+
/**
|
|
53
|
+
* Invalidate the cached manifest.
|
|
54
|
+
*/
|
|
55
|
+
private invalidateCache;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=manifest-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-log.d.ts","sourceRoot":"","sources":["../src/manifest-log.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,WAAW,OAAO;IACvB,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC;CAC3C;AASD;;;;;GAKG;AACH,qBAAa,WAAW;IACvB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,QAAQ,CAAS;gBAEb,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS;IAY3E;;;OAGG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAKxD;;OAEG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzE;;OAEG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI7C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAI5D;;;OAGG;YACW,YAAY;IAuC1B;;OAEG;YACW,eAAe;CAU7B"}
|