@quereus/store 4.4.0 → 4.4.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 +5 -0
- package/dist/src/common/cached-kv-store.js +4 -0
- package/dist/src/common/cached-kv-store.js.map +1 -1
- package/dist/src/common/encoding.d.ts +32 -1
- package/dist/src/common/encoding.d.ts.map +1 -1
- package/dist/src/common/encoding.js +42 -10
- package/dist/src/common/encoding.js.map +1 -1
- package/dist/src/common/index.d.ts +3 -2
- package/dist/src/common/index.d.ts.map +1 -1
- package/dist/src/common/index.js +3 -1
- package/dist/src/common/index.js.map +1 -1
- package/dist/src/common/json-key.d.ts +96 -0
- package/dist/src/common/json-key.d.ts.map +1 -0
- package/dist/src/common/json-key.js +204 -0
- package/dist/src/common/json-key.js.map +1 -0
- package/dist/src/common/key-builder.d.ts +40 -5
- package/dist/src/common/key-builder.d.ts.map +1 -1
- package/dist/src/common/key-builder.js +59 -21
- package/dist/src/common/key-builder.js.map +1 -1
- package/dist/src/common/kv-store.d.ts +12 -2
- package/dist/src/common/kv-store.d.ts.map +1 -1
- package/dist/src/common/store-module.d.ts +64 -15
- package/dist/src/common/store-module.d.ts.map +1 -1
- package/dist/src/common/store-module.js +349 -125
- package/dist/src/common/store-module.js.map +1 -1
- package/dist/src/common/store-table.d.ts +125 -11
- package/dist/src/common/store-table.d.ts.map +1 -1
- package/dist/src/common/store-table.js +235 -34
- package/dist/src/common/store-table.js.map +1 -1
- package/dist/src/testing/kv-conformance.d.ts.map +1 -1
- package/dist/src/testing/kv-conformance.js +32 -0
- package/dist/src/testing/kv-conformance.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# @quereus/store
|
|
2
2
|
|
|
3
|
+
> **Stability: Beta** — complete and tested, but the surface is still being shaped; a
|
|
4
|
+
> breaking change may land in a minor release. Its on-disk key encoding is not frozen, so
|
|
5
|
+
> a format change can make an existing database unreadable without a migration step. See
|
|
6
|
+
> [Stability Tiers](../../docs/stability.md#tiers).
|
|
7
|
+
|
|
3
8
|
Abstract key-value storage module for [Quereus](https://github.com/gotchoices/quereus). Provides platform-agnostic interfaces and a generic `StoreModule` virtual table implementation.
|
|
4
9
|
|
|
5
10
|
## Architecture
|
|
@@ -220,6 +220,10 @@ class CachedWriteBatch {
|
|
|
220
220
|
for (const op of this.ops) {
|
|
221
221
|
this.cache.invalidate(op.key);
|
|
222
222
|
}
|
|
223
|
+
// NOTE: `ops` is intentionally NOT cleared here — the inner batch clears its own
|
|
224
|
+
// queue, so a reuse only re-invalidates already-invalid keys (harmless). If a
|
|
225
|
+
// caller ever reuses one batch handle across many commits, this array grows
|
|
226
|
+
// unbounded; clear it here at that point.
|
|
223
227
|
}
|
|
224
228
|
clear() {
|
|
225
229
|
this.inner.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cached-kv-store.js","sourceRoot":"","sources":["../../../src/common/cached-kv-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cached-kv-store.js","sourceRoot":"","sources":["../../../src/common/cached-kv-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,23 @@ import type { SqlValue, KeyNormalizerResolver } from '@quereus/quereus';
|
|
|
39
39
|
* two comparator-distinct values to the same key, or split one value across two keys.
|
|
40
40
|
*/
|
|
41
41
|
export declare const BUILTIN_KEY_NORMALIZER_RESOLVER: KeyNormalizerResolver;
|
|
42
|
+
/**
|
|
43
|
+
* Per-column key value transform (resolved by `storeSemanticKeyTransform` in
|
|
44
|
+
* store-table.ts): applied to a value BEFORE type-dispatched encoding, so a
|
|
45
|
+
* semantic-ordering type keys in its `compare` order and identity. Two transforms
|
|
46
|
+
* exist today:
|
|
47
|
+
*
|
|
48
|
+
* - TIMESPAN — the engine's `semanticKeyTransform` (the type's `groupKey`: total
|
|
49
|
+
* seconds, a number), so the member encodes through the NUMERIC path: 'PT1H' and
|
|
50
|
+
* 'PT60M' collide on one key, and byte order is elapsed-time order. An unparseable
|
|
51
|
+
* value passes through as its raw text, matching `TIMESPAN.compare`'s BINARY-text
|
|
52
|
+
* fallback.
|
|
53
|
+
* - JSON — the store-local structural encoder (`jsonStructuralKey`, json-key.ts),
|
|
54
|
+
* which yields a `Uint8Array` so the member encodes through the BLOB path: byte
|
|
55
|
+
* order is the type's structural `compare` order, which canonical-text bytes
|
|
56
|
+
* cannot reproduce (`[10]` sorts before `[2]` textually).
|
|
57
|
+
*/
|
|
58
|
+
export type KeyValueTransform = (value: SqlValue) => SqlValue;
|
|
42
59
|
/** Options for encoding keys. */
|
|
43
60
|
export interface EncodeOptions {
|
|
44
61
|
/** Collation name for TEXT/OBJECT values. Default: 'NOCASE'. */
|
|
@@ -71,8 +88,22 @@ export declare function encodeValue(value: SqlValue, options?: EncodeOptions): U
|
|
|
71
88
|
* A `undefined` entry (or no array) falls back to `options.collation`. Collation
|
|
72
89
|
* only affects TEXT/OBJECT encoding; non-text components ignore it, so a
|
|
73
90
|
* per-column override on an integer/real/blob member is a harmless no-op.
|
|
91
|
+
*
|
|
92
|
+
* When `transforms` is provided, each position with a defined entry maps its value
|
|
93
|
+
* through that {@link KeyValueTransform} BEFORE encoding (and before DESC inversion),
|
|
94
|
+
* so semantically-equal spellings of a semantic-ordering type collide on one key.
|
|
95
|
+
* NULL is exempt: it always encodes as the NULL tag regardless of any transform,
|
|
96
|
+
* mirroring how every comparator handles NULL outside the type's `compare`.
|
|
97
|
+
*/
|
|
98
|
+
export declare function encodeCompositeKey(values: SqlValue[], options?: EncodeOptions, directions?: ReadonlyArray<boolean>, collations?: ReadonlyArray<string | undefined>, transforms?: ReadonlyArray<KeyValueTransform | undefined>): Uint8Array;
|
|
99
|
+
/**
|
|
100
|
+
* Write the 8-byte SORTABLE form of an IEEE-754 double at `offset`: big-endian bits,
|
|
101
|
+
* all flipped when negative, sign bit only otherwise — so memcmp order over the 8
|
|
102
|
+
* bytes is numeric order, with `-Inf < … < +Inf < NaN`. `-0` normalizes to `+0` so
|
|
103
|
+
* the two zeros collide on one key. The primary body of {@link encodeNumeric}, and
|
|
104
|
+
* the number-leaf body of json-key.ts's structural JSON encoding.
|
|
74
105
|
*/
|
|
75
|
-
export declare function
|
|
106
|
+
export declare function writeSortableDouble(buffer: Uint8Array, offset: number, value: number): void;
|
|
76
107
|
/**
|
|
77
108
|
* Offset of the first UNPAIRED surrogate code unit in `value`, or -1 when every surrogate
|
|
78
109
|
* it holds is the high half of a well-formed high+low pair (an astral character) or the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../../src/common/encoding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAgB,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAOtF;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,EAAE,qBAO7C,CAAC;AAEF,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AA8BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAgChF;AAED
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../../src/common/encoding.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAgB,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAOtF;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,EAAE,qBAO7C,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAE9D,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,qBAAqB,CAAC;CACrC;AA8BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAgChF;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,EAAE,EAClB,OAAO,CAAC,EAAE,aAAa,EACvB,UAAU,CAAC,EAAE,aAAa,CAAC,OAAO,CAAC,EACnC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,EAC9C,UAAU,CAAC,EAAE,aAAa,CAAC,iBAAiB,GAAG,SAAS,CAAC,GACxD,UAAU,CAqBZ;AA0DD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAW3F;AA8CD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAc3D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAW/E;AAuED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,UAAU,EAClB,MAAM,GAAE,MAAU,EAClB,OAAO,CAAC,EAAE,aAAa,GACtB;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CA0BxC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,aAAa,CAAC,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,aAAa,GACtB,QAAQ,EAAE,CAeZ"}
|
|
@@ -119,12 +119,19 @@ export function encodeValue(value, options) {
|
|
|
119
119
|
* A `undefined` entry (or no array) falls back to `options.collation`. Collation
|
|
120
120
|
* only affects TEXT/OBJECT encoding; non-text components ignore it, so a
|
|
121
121
|
* per-column override on an integer/real/blob member is a harmless no-op.
|
|
122
|
+
*
|
|
123
|
+
* When `transforms` is provided, each position with a defined entry maps its value
|
|
124
|
+
* through that {@link KeyValueTransform} BEFORE encoding (and before DESC inversion),
|
|
125
|
+
* so semantically-equal spellings of a semantic-ordering type collide on one key.
|
|
126
|
+
* NULL is exempt: it always encodes as the NULL tag regardless of any transform,
|
|
127
|
+
* mirroring how every comparator handles NULL outside the type's `compare`.
|
|
122
128
|
*/
|
|
123
|
-
export function encodeCompositeKey(values, options, directions, collations) {
|
|
129
|
+
export function encodeCompositeKey(values, options, directions, collations, transforms) {
|
|
124
130
|
const parts = values.map((v, i) => {
|
|
125
131
|
const colCollation = collations?.[i];
|
|
126
132
|
const colOptions = colCollation !== undefined ? { ...options, collation: colCollation } : options;
|
|
127
|
-
const
|
|
133
|
+
const transform = transforms?.[i];
|
|
134
|
+
const encoded = encodeValue(transform && v !== null ? transform(v) : v, colOptions);
|
|
128
135
|
if (directions && directions[i]) {
|
|
129
136
|
for (let j = 0; j < encoded.length; j++) {
|
|
130
137
|
encoded[j] ^= 0xff;
|
|
@@ -187,20 +194,32 @@ function encodeNumeric(value) {
|
|
|
187
194
|
offset = 0n;
|
|
188
195
|
}
|
|
189
196
|
// Primary: sortable IEEE-754 double.
|
|
190
|
-
|
|
191
|
-
|
|
197
|
+
writeSortableDouble(buffer, 1, primary);
|
|
198
|
+
// Tie-break: signed int64 residual, big-endian with sign bit flipped.
|
|
199
|
+
view.setBigInt64(9, offset, false);
|
|
200
|
+
buffer[9] ^= 0x80;
|
|
201
|
+
return buffer;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Write the 8-byte SORTABLE form of an IEEE-754 double at `offset`: big-endian bits,
|
|
205
|
+
* all flipped when negative, sign bit only otherwise — so memcmp order over the 8
|
|
206
|
+
* bytes is numeric order, with `-Inf < … < +Inf < NaN`. `-0` normalizes to `+0` so
|
|
207
|
+
* the two zeros collide on one key. The primary body of {@link encodeNumeric}, and
|
|
208
|
+
* the number-leaf body of json-key.ts's structural JSON encoding.
|
|
209
|
+
*/
|
|
210
|
+
export function writeSortableDouble(buffer, offset, value) {
|
|
211
|
+
const normalized = Object.is(value, -0) ? 0 : value;
|
|
212
|
+
const view = new DataView(buffer.buffer, buffer.byteOffset);
|
|
213
|
+
view.setFloat64(offset, normalized, false); // big-endian
|
|
214
|
+
if (normalized < 0) {
|
|
192
215
|
// Negative: flip all bits so more-negative sorts first.
|
|
193
|
-
for (let i =
|
|
216
|
+
for (let i = offset; i < offset + 8; i++)
|
|
194
217
|
buffer[i] ^= 0xff;
|
|
195
218
|
}
|
|
196
219
|
else {
|
|
197
220
|
// Non-negative (incl. +0, +Inf, NaN): flip only the sign bit.
|
|
198
|
-
buffer[
|
|
221
|
+
buffer[offset] ^= 0x80;
|
|
199
222
|
}
|
|
200
|
-
// Tie-break: signed int64 residual, big-endian with sign bit flipped.
|
|
201
|
-
view.setBigInt64(9, offset, false);
|
|
202
|
-
buffer[9] ^= 0x80;
|
|
203
|
-
return buffer;
|
|
204
223
|
}
|
|
205
224
|
/**
|
|
206
225
|
* Encode raw bytes as an order-preserving, null-terminated sequence behind a
|
|
@@ -338,6 +357,13 @@ function encodeBlob(value) {
|
|
|
338
357
|
* Encode a JSON object/array as text with TYPE_OBJECT prefix.
|
|
339
358
|
* Uses the same encoding as TEXT for sort order (by JSON string representation).
|
|
340
359
|
*
|
|
360
|
+
* This generic OBJECT path serves columns with NO declared JSON type — `any` columns
|
|
361
|
+
* holding objects — whose ordering oracle is `compareSqlValues`' OBJECT-class branch:
|
|
362
|
+
* canonical-string, code-point order. It must stay canonical text. A column DECLARED
|
|
363
|
+
* `json` never reaches here: its key transform (`jsonStructuralKey`, json-key.ts —
|
|
364
|
+
* resolved by `storeSemanticKeyTransform`) maps the value to a `Uint8Array` first, so
|
|
365
|
+
* it encodes through the BLOB path in structural `compare` order instead.
|
|
366
|
+
*
|
|
341
367
|
* NOTE: the collation normalizer runs over the CANONICAL JSON STRING, not over the
|
|
342
368
|
* object's text leaves — under the default NOCASE that already lowercases object keys
|
|
343
369
|
* and string values inside the key bytes, and a normalizer that reorders or deletes
|
|
@@ -490,6 +516,12 @@ function decodeBlob(buffer, offset) {
|
|
|
490
516
|
const { bytes, bytesRead } = readEscapedUntilTerminator(buffer, offset);
|
|
491
517
|
return { value: bytes, bytesRead };
|
|
492
518
|
}
|
|
519
|
+
/**
|
|
520
|
+
* NOTE: only the generic (`any`-column) OBJECT encoding decodes here. A DECLARED-json
|
|
521
|
+
* key member's structural bytes (json-key.ts) travel under the BLOB tag, so
|
|
522
|
+
* `decodeValue` returns them as a `Uint8Array`, not the JSON value — an accepted
|
|
523
|
+
* asymmetry documented in json-key.ts (no `src/` caller decodes key bytes to values).
|
|
524
|
+
*/
|
|
493
525
|
function decodeObject(buffer, offset) {
|
|
494
526
|
const { bytes, bytesRead } = readEscapedUntilTerminator(buffer, offset);
|
|
495
527
|
const jsonString = new TextDecoder().decode(bytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../../src/common/encoding.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"encoding.js","sourceRoot":"","sources":["../../../src/common/encoding.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Common utilities for the persistent store module.
|
|
3
3
|
*/
|
|
4
4
|
export type { KVStore, KVEntry, WriteBatch, WriteOptions, BatchOp, AtomicBatch, IterateOptions, KVStoreFactory, KVStoreOptions, KVStoreProvider, } from './kv-store.js';
|
|
5
|
-
export { encodeValue, encodeCompositeKey, decodeValue, decodeCompositeKey, BUILTIN_KEY_NORMALIZER_RESOLVER, assertNoUnpairedSurrogate, findUnpairedSurrogate, type EncodeOptions, } from './encoding.js';
|
|
5
|
+
export { encodeValue, encodeCompositeKey, decodeValue, decodeCompositeKey, BUILTIN_KEY_NORMALIZER_RESOLVER, assertNoUnpairedSurrogate, findUnpairedSurrogate, type EncodeOptions, type KeyValueTransform, } from './encoding.js';
|
|
6
6
|
export { serializeRow, deserializeRow, serializeValue, deserializeValue, serializeStats, deserializeStats, type TableStats, } from './serialization.js';
|
|
7
7
|
export { STORE_SUFFIX, CATALOG_STORE_NAME, STATS_STORE_NAME, buildDataStoreName, buildIndexStoreName, buildStatsStoreName, buildStatsKey, buildDataKey, buildIndexKey, buildCatalogKey, buildViewCatalogKey, buildMaterializedViewCatalogKey, parseMaterializedViewCatalogKey, buildMetaCatalogKey, CLEAN_SHUTDOWN_META_NAME, STALE_MVS_META_NAME, classifyCatalogKey, type CatalogEntryKind, buildFullScanBounds, buildIndexPrefixBounds, buildPkPrefixBounds, buildCatalogScanBounds, KEY_PREFIX, buildTablePrefix, buildTableScanBounds, buildIndexScanBounds, buildMetaKey, buildMetaScanBounds, } from './key-builder.js';
|
|
8
8
|
export { StoreEventEmitter, type SchemaChangeEvent, type DataChangeEvent, type SchemaChangeListener, type DataChangeListener, } from './events.js';
|
|
@@ -11,7 +11,8 @@ export { TransactionCoordinator, type TransactionCallbacks, type PendingStoreOps
|
|
|
11
11
|
export { bytesToHex, bytesEqual, compareBytes } from './bytes.js';
|
|
12
12
|
export { InMemoryKVStore } from './memory-store.js';
|
|
13
13
|
export { CachedKVStore, type CacheOptions } from './cached-kv-store.js';
|
|
14
|
-
export { StoreTable, resolvePkKeyCollations, type StoreTableConfig, type StoreTableModule, type ExternalRowOp, } from './store-table.js';
|
|
14
|
+
export { StoreTable, resolvePkKeyCollations, resolvePkKeyTransforms, resolveIndexKeyTransforms, storeSemanticKeyTransform, type StoreTableConfig, type StoreTableModule, type ExternalRowOp, } from './store-table.js';
|
|
15
|
+
export { jsonStructuralKey } from './json-key.js';
|
|
15
16
|
export { StoreConnection } from './store-connection.js';
|
|
16
17
|
export { StoreBackingHost } from './backing-host.js';
|
|
17
18
|
export { StoreModule, type StoreModuleConfig, type RehydrationResult, type RehydrationError, type LensDeploymentListener } from './store-module.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,+BAA+B,EAC/B,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,+BAA+B,EAC/B,yBAAyB,EACzB,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACN,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,+BAA+B,EAC/B,+BAA+B,EAC/B,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,gBAAgB,EACrB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EAEtB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGzI,OAAO,EACL,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGlE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGxE,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAGpJ,OAAO,EACN,yBAAyB,EACzB,YAAY,EACZ,KAAK,yBAAyB,GAC9B,MAAM,qBAAqB,CAAC"}
|
package/dist/src/common/index.js
CHANGED
|
@@ -22,7 +22,9 @@ export { InMemoryKVStore } from './memory-store.js';
|
|
|
22
22
|
// Cached KV store wrapper
|
|
23
23
|
export { CachedKVStore } from './cached-kv-store.js';
|
|
24
24
|
// Generic store table and connection
|
|
25
|
-
export { StoreTable, resolvePkKeyCollations, } from './store-table.js';
|
|
25
|
+
export { StoreTable, resolvePkKeyCollations, resolvePkKeyTransforms, resolveIndexKeyTransforms, storeSemanticKeyTransform, } from './store-table.js';
|
|
26
|
+
// Structural key encoding for declared-JSON key members
|
|
27
|
+
export { jsonStructuralKey } from './json-key.js';
|
|
26
28
|
export { StoreConnection } from './store-connection.js';
|
|
27
29
|
// Materialized-view backing host (engine backing-host capability over a store table)
|
|
28
30
|
export { StoreBackingHost } from './backing-host.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,eAAe;AACf,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,+BAA+B,EAC/B,yBAAyB,EACzB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgBH,eAAe;AACf,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,+BAA+B,EAC/B,yBAAyB,EACzB,qBAAqB,GAGtB,MAAM,eAAe,CAAC;AAEvB,oBAAoB;AACpB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,gBAAgB,GAEjB,MAAM,oBAAoB,CAAC;AAE5B,yBAAyB;AACzB,OAAO,EACN,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,+BAA+B,EAC/B,+BAA+B,EAC/B,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAElB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB;AACtB,8BAA8B;AAC9B,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,mBAAmB,GACnB,MAAM,kBAAkB,CAAC;AAE1B,SAAS;AACT,OAAO,EACL,iBAAiB,GAKlB,MAAM,aAAa,CAAC;AAErB,sEAAsE;AACtE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,0BAA0B,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAEzI,sBAAsB;AACtB,OAAO,EACL,sBAAsB,GAIvB,MAAM,kBAAkB,CAAC;AAE1B,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElE,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,0BAA0B;AAC1B,OAAO,EAAE,aAAa,EAAqB,MAAM,sBAAsB,CAAC;AAExE,qCAAqC;AACrC,OAAO,EACL,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,GAI1B,MAAM,kBAAkB,CAAC;AAE1B,wDAAwD;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,qFAAqF;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAsG,MAAM,mBAAmB,CAAC;AAEpJ,4BAA4B;AAC5B,OAAO,EACN,yBAAyB,EACzB,YAAY,GAEZ,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural key encoding for JSON primary-key / index-key members.
|
|
3
|
+
*
|
|
4
|
+
* A column whose DECLARED logical type is JSON orders by the engine's structural
|
|
5
|
+
* deep-compare (`deepCompareJson` in `@quereus/quereus`'s json-type.ts): type rank
|
|
6
|
+
* `null < boolean < number < string < array < object`, then element/key-wise recursion
|
|
7
|
+
* with a length tiebreak; string leaves and object keys order by Unicode code point
|
|
8
|
+
* (`compareCodePoints`). The isolation layer's merge comparator and the memory
|
|
9
|
+
* backend's typed BTree both rank JSON keys this way, so the store's physical key
|
|
10
|
+
* bytes must memcmp in the SAME order — canonical-JSON-text bytes do not (`[10]`
|
|
11
|
+
* sorts before `[2]` textually), which is the defect this encoder fixes.
|
|
12
|
+
*
|
|
13
|
+
* {@link jsonStructuralKey} is a {@link import('./encoding.js').KeyValueTransform}:
|
|
14
|
+
* it maps a JSON value to a `Uint8Array`, which `encodeValue` then routes down the
|
|
15
|
+
* BLOB path (tag + escape + `0x00` terminator) — order-preserving, DESC-inversion-safe,
|
|
16
|
+
* and prefix-seek-safe, so no key-production site needs to know JSON is special.
|
|
17
|
+
*
|
|
18
|
+
* ## Layout
|
|
19
|
+
*
|
|
20
|
+
* Each node is a tag byte followed by a self-delimiting body. `0x00` is reserved as a
|
|
21
|
+
* terminator, so no tag is `0x00`:
|
|
22
|
+
*
|
|
23
|
+
* | tag | node | body |
|
|
24
|
+
* |--------|---------|-------------------------------------------------------------|
|
|
25
|
+
* | `0x01` | null | (none) |
|
|
26
|
+
* | `0x02` | boolean | one byte, `0x00` false / `0x01` true |
|
|
27
|
+
* | `0x03` | number | 8-byte sortable IEEE-754 double ({@link writeSortableDouble}) |
|
|
28
|
+
* | `0x04` | string | escaped UTF-8, `0x00`-terminated |
|
|
29
|
+
* | `0x05` | array | each element's encoding concatenated, then `0x00` |
|
|
30
|
+
* | `0x06` | object | key section, then value section (see below) |
|
|
31
|
+
*
|
|
32
|
+
* Object body: for each key in code-point-sorted order, `0x01` + escaped UTF-8 key +
|
|
33
|
+
* `0x00`; then a lone `0x00` ends the key section; then each value's encoding in that
|
|
34
|
+
* same key order. The per-key `0x01` marker is required — without it, an object whose
|
|
35
|
+
* first key is the empty string would be byte-identical to an object with no keys up
|
|
36
|
+
* to that position.
|
|
37
|
+
*
|
|
38
|
+
* The escape scheme is encoding.ts's: content `0x00` → `0x01 0x01`, content `0x01` →
|
|
39
|
+
* `0x01 0x02`. It is monotonic in the source byte, and the `0x00` terminator sorts
|
|
40
|
+
* below every escaped content byte (all ≥ `0x01`).
|
|
41
|
+
*
|
|
42
|
+
* ## Why memcmp order is `deepCompareJson` order
|
|
43
|
+
*
|
|
44
|
+
* - Different node kinds differ at the tag byte, and tag order is JSON rank order.
|
|
45
|
+
* - Same-kind nodes have structurally identical, self-delimiting bodies, so the first
|
|
46
|
+
* differing byte is always a meaningful comparison (the standard order-preserving
|
|
47
|
+
* composite-key argument; the fixed-width double body may contain `0x00` safely for
|
|
48
|
+
* exactly this reason).
|
|
49
|
+
* - Array / object-key-section prefix cases: the `0x00` terminator is below every tag
|
|
50
|
+
* and key marker (≥ `0x01`), so a proper prefix sorts first — matching the length
|
|
51
|
+
* tiebreak.
|
|
52
|
+
* - UTF-8 byte order equals code-point order and the escape map is monotonic, so
|
|
53
|
+
* string leaves and object keys order as `compareCodePoints` does.
|
|
54
|
+
*
|
|
55
|
+
* NOTE: a TOP-LEVEL string value orders by code point here, matching every JSON
|
|
56
|
+
* comparator, collation argument or not — `JSON_TYPE.compare` defaults to
|
|
57
|
+
* `compareCodePoints` (BINARY) for a string-vs-string pair when no collation is
|
|
58
|
+
* supplied. So the ORDERING paths (the isolation merge, UNIQUE enforcement, the
|
|
59
|
+
* memory BTree's collation-carrying comparator) and the PK-EQUALITY-only paths
|
|
60
|
+
* (`resolvePkSemanticEquality` in store-table.ts, the isolation layer's
|
|
61
|
+
* `getPkSemanticComparators`) all agree with these key bytes for JSON string leaves.
|
|
62
|
+
*
|
|
63
|
+
* ## Identity
|
|
64
|
+
*
|
|
65
|
+
* Object keys are sorted, so reorder-equal objects collide on one key. `2` and `2.0`
|
|
66
|
+
* are the same double, and `-0` normalizes to `+0`. `1e400` (which `JSON.stringify`
|
|
67
|
+
* renders as the text `null`, colliding with a genuine JSON `null` under the canonical
|
|
68
|
+
* text form) is a distinct `+Infinity` double here.
|
|
69
|
+
*
|
|
70
|
+
* ## Not decodable through `decodeValue`
|
|
71
|
+
*
|
|
72
|
+
* The structural bytes travel as an opaque BLOB, so `decodeValue` /
|
|
73
|
+
* `decodeCompositeKey` return them as a `Uint8Array`, NOT as the JSON value — an
|
|
74
|
+
* accepted asymmetry: no `src/` caller decodes key bytes back to values (rows carry
|
|
75
|
+
* their own serialized values), and a matching decoder would be dead weight. If key
|
|
76
|
+
* decoding is ever needed, the layout above is lossless (up to `-0` and bigint
|
|
77
|
+
* folding) and a decoder can be added then.
|
|
78
|
+
*
|
|
79
|
+
* ## Unpaired surrogates
|
|
80
|
+
*
|
|
81
|
+
* A string leaf or object key holding an unpaired surrogate is REJECTED
|
|
82
|
+
* ({@link assertNoUnpairedSurrogate}) — `TextEncoder` would fold every one of the
|
|
83
|
+
* 2048 lone surrogates to U+FFFD, merging distinct values onto one key. This is the
|
|
84
|
+
* same deliberate memory-vs-store divergence `encodeText` documents. (The canonical-
|
|
85
|
+
* text form this replaces was accidentally safe: `JSON.stringify` escapes a lone
|
|
86
|
+
* surrogate to the seven ASCII characters `\ud800`.)
|
|
87
|
+
*/
|
|
88
|
+
import { type SqlValue } from '@quereus/quereus';
|
|
89
|
+
/**
|
|
90
|
+
* Encode a JSON value into structural key bytes — the store's key transform for
|
|
91
|
+
* columns declared `json` (see `storeSemanticKeyTransform` in store-table.ts).
|
|
92
|
+
* NULL never reaches a key transform (`encodeCompositeKey` exempts it), but a
|
|
93
|
+
* NESTED JSON null is a real node and encodes with its own tag.
|
|
94
|
+
*/
|
|
95
|
+
export declare function jsonStructuralKey(value: SqlValue): SqlValue;
|
|
96
|
+
//# sourceMappingURL=json-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-key.d.ts","sourceRoot":"","sources":["../../../src/common/json-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsFG;AAEH,OAAO,EAA+C,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAiB9F;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,CAQ3D"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structural key encoding for JSON primary-key / index-key members.
|
|
3
|
+
*
|
|
4
|
+
* A column whose DECLARED logical type is JSON orders by the engine's structural
|
|
5
|
+
* deep-compare (`deepCompareJson` in `@quereus/quereus`'s json-type.ts): type rank
|
|
6
|
+
* `null < boolean < number < string < array < object`, then element/key-wise recursion
|
|
7
|
+
* with a length tiebreak; string leaves and object keys order by Unicode code point
|
|
8
|
+
* (`compareCodePoints`). The isolation layer's merge comparator and the memory
|
|
9
|
+
* backend's typed BTree both rank JSON keys this way, so the store's physical key
|
|
10
|
+
* bytes must memcmp in the SAME order — canonical-JSON-text bytes do not (`[10]`
|
|
11
|
+
* sorts before `[2]` textually), which is the defect this encoder fixes.
|
|
12
|
+
*
|
|
13
|
+
* {@link jsonStructuralKey} is a {@link import('./encoding.js').KeyValueTransform}:
|
|
14
|
+
* it maps a JSON value to a `Uint8Array`, which `encodeValue` then routes down the
|
|
15
|
+
* BLOB path (tag + escape + `0x00` terminator) — order-preserving, DESC-inversion-safe,
|
|
16
|
+
* and prefix-seek-safe, so no key-production site needs to know JSON is special.
|
|
17
|
+
*
|
|
18
|
+
* ## Layout
|
|
19
|
+
*
|
|
20
|
+
* Each node is a tag byte followed by a self-delimiting body. `0x00` is reserved as a
|
|
21
|
+
* terminator, so no tag is `0x00`:
|
|
22
|
+
*
|
|
23
|
+
* | tag | node | body |
|
|
24
|
+
* |--------|---------|-------------------------------------------------------------|
|
|
25
|
+
* | `0x01` | null | (none) |
|
|
26
|
+
* | `0x02` | boolean | one byte, `0x00` false / `0x01` true |
|
|
27
|
+
* | `0x03` | number | 8-byte sortable IEEE-754 double ({@link writeSortableDouble}) |
|
|
28
|
+
* | `0x04` | string | escaped UTF-8, `0x00`-terminated |
|
|
29
|
+
* | `0x05` | array | each element's encoding concatenated, then `0x00` |
|
|
30
|
+
* | `0x06` | object | key section, then value section (see below) |
|
|
31
|
+
*
|
|
32
|
+
* Object body: for each key in code-point-sorted order, `0x01` + escaped UTF-8 key +
|
|
33
|
+
* `0x00`; then a lone `0x00` ends the key section; then each value's encoding in that
|
|
34
|
+
* same key order. The per-key `0x01` marker is required — without it, an object whose
|
|
35
|
+
* first key is the empty string would be byte-identical to an object with no keys up
|
|
36
|
+
* to that position.
|
|
37
|
+
*
|
|
38
|
+
* The escape scheme is encoding.ts's: content `0x00` → `0x01 0x01`, content `0x01` →
|
|
39
|
+
* `0x01 0x02`. It is monotonic in the source byte, and the `0x00` terminator sorts
|
|
40
|
+
* below every escaped content byte (all ≥ `0x01`).
|
|
41
|
+
*
|
|
42
|
+
* ## Why memcmp order is `deepCompareJson` order
|
|
43
|
+
*
|
|
44
|
+
* - Different node kinds differ at the tag byte, and tag order is JSON rank order.
|
|
45
|
+
* - Same-kind nodes have structurally identical, self-delimiting bodies, so the first
|
|
46
|
+
* differing byte is always a meaningful comparison (the standard order-preserving
|
|
47
|
+
* composite-key argument; the fixed-width double body may contain `0x00` safely for
|
|
48
|
+
* exactly this reason).
|
|
49
|
+
* - Array / object-key-section prefix cases: the `0x00` terminator is below every tag
|
|
50
|
+
* and key marker (≥ `0x01`), so a proper prefix sorts first — matching the length
|
|
51
|
+
* tiebreak.
|
|
52
|
+
* - UTF-8 byte order equals code-point order and the escape map is monotonic, so
|
|
53
|
+
* string leaves and object keys order as `compareCodePoints` does.
|
|
54
|
+
*
|
|
55
|
+
* NOTE: a TOP-LEVEL string value orders by code point here, matching every JSON
|
|
56
|
+
* comparator, collation argument or not — `JSON_TYPE.compare` defaults to
|
|
57
|
+
* `compareCodePoints` (BINARY) for a string-vs-string pair when no collation is
|
|
58
|
+
* supplied. So the ORDERING paths (the isolation merge, UNIQUE enforcement, the
|
|
59
|
+
* memory BTree's collation-carrying comparator) and the PK-EQUALITY-only paths
|
|
60
|
+
* (`resolvePkSemanticEquality` in store-table.ts, the isolation layer's
|
|
61
|
+
* `getPkSemanticComparators`) all agree with these key bytes for JSON string leaves.
|
|
62
|
+
*
|
|
63
|
+
* ## Identity
|
|
64
|
+
*
|
|
65
|
+
* Object keys are sorted, so reorder-equal objects collide on one key. `2` and `2.0`
|
|
66
|
+
* are the same double, and `-0` normalizes to `+0`. `1e400` (which `JSON.stringify`
|
|
67
|
+
* renders as the text `null`, colliding with a genuine JSON `null` under the canonical
|
|
68
|
+
* text form) is a distinct `+Infinity` double here.
|
|
69
|
+
*
|
|
70
|
+
* ## Not decodable through `decodeValue`
|
|
71
|
+
*
|
|
72
|
+
* The structural bytes travel as an opaque BLOB, so `decodeValue` /
|
|
73
|
+
* `decodeCompositeKey` return them as a `Uint8Array`, NOT as the JSON value — an
|
|
74
|
+
* accepted asymmetry: no `src/` caller decodes key bytes back to values (rows carry
|
|
75
|
+
* their own serialized values), and a matching decoder would be dead weight. If key
|
|
76
|
+
* decoding is ever needed, the layout above is lossless (up to `-0` and bigint
|
|
77
|
+
* folding) and a decoder can be added then.
|
|
78
|
+
*
|
|
79
|
+
* ## Unpaired surrogates
|
|
80
|
+
*
|
|
81
|
+
* A string leaf or object key holding an unpaired surrogate is REJECTED
|
|
82
|
+
* ({@link assertNoUnpairedSurrogate}) — `TextEncoder` would fold every one of the
|
|
83
|
+
* 2048 lone surrogates to U+FFFD, merging distinct values onto one key. This is the
|
|
84
|
+
* same deliberate memory-vs-store divergence `encodeText` documents. (The canonical-
|
|
85
|
+
* text form this replaces was accidentally safe: `JSON.stringify` escapes a lone
|
|
86
|
+
* surrogate to the seven ASCII characters `\ud800`.)
|
|
87
|
+
*/
|
|
88
|
+
import { compareCodePoints, QuereusError, StatusCode } from '@quereus/quereus';
|
|
89
|
+
import { assertNoUnpairedSurrogate, writeSortableDouble } from './encoding.js';
|
|
90
|
+
const TAG_NULL = 0x01;
|
|
91
|
+
const TAG_BOOLEAN = 0x02;
|
|
92
|
+
const TAG_NUMBER = 0x03;
|
|
93
|
+
const TAG_STRING = 0x04;
|
|
94
|
+
const TAG_ARRAY = 0x05;
|
|
95
|
+
const TAG_OBJECT = 0x06;
|
|
96
|
+
/** Terminates strings, arrays, and object key sections; below every tag/marker. */
|
|
97
|
+
const TERMINATOR = 0x00;
|
|
98
|
+
/** Precedes each object key, so an empty-string first key differs from "no keys". */
|
|
99
|
+
const KEY_MARKER = 0x01;
|
|
100
|
+
const utf8 = new TextEncoder();
|
|
101
|
+
/**
|
|
102
|
+
* Encode a JSON value into structural key bytes — the store's key transform for
|
|
103
|
+
* columns declared `json` (see `storeSemanticKeyTransform` in store-table.ts).
|
|
104
|
+
* NULL never reaches a key transform (`encodeCompositeKey` exempts it), but a
|
|
105
|
+
* NESTED JSON null is a real node and encodes with its own tag.
|
|
106
|
+
*/
|
|
107
|
+
export function jsonStructuralKey(value) {
|
|
108
|
+
// NOTE: accumulates into a number[] and copies once into a Uint8Array — two passes
|
|
109
|
+
// and a boxed intermediate per key encode, which is nothing for the small values a
|
|
110
|
+
// key member normally holds. If large JSON keys (deep documents, long string leaves)
|
|
111
|
+
// ever show up hot, write into a growable Uint8Array instead.
|
|
112
|
+
const out = [];
|
|
113
|
+
pushJsonNode(out, value);
|
|
114
|
+
return Uint8Array.from(out);
|
|
115
|
+
}
|
|
116
|
+
/** Append `value`'s tagged, self-delimiting encoding to `out`. */
|
|
117
|
+
function pushJsonNode(out, value) {
|
|
118
|
+
if (value === null) {
|
|
119
|
+
out.push(TAG_NULL);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
switch (typeof value) {
|
|
123
|
+
case 'boolean':
|
|
124
|
+
out.push(TAG_BOOLEAN, value ? 0x01 : 0x00);
|
|
125
|
+
return;
|
|
126
|
+
case 'number':
|
|
127
|
+
pushNumber(out, value);
|
|
128
|
+
return;
|
|
129
|
+
case 'bigint':
|
|
130
|
+
// JSON has no bigint; JSON_TYPE.parse folds one to its nearest double the
|
|
131
|
+
// same way before it can be stored.
|
|
132
|
+
pushNumber(out, Number(value));
|
|
133
|
+
return;
|
|
134
|
+
case 'string':
|
|
135
|
+
pushString(out, TAG_STRING, value, 'a JSON string value');
|
|
136
|
+
return;
|
|
137
|
+
default:
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
if (Array.isArray(value)) {
|
|
141
|
+
pushArray(out, value);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (typeof value === 'object' && !(value instanceof Uint8Array)) {
|
|
145
|
+
pushObject(out, value);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
throw new QuereusError(`cannot encode a ${value instanceof Uint8Array ? 'blob' : typeof value} as a JSON key member`, StatusCode.INTERNAL);
|
|
149
|
+
}
|
|
150
|
+
/** Fixed-width sortable-double body; `-0` normalizes to `+0` inside the writer. */
|
|
151
|
+
function pushNumber(out, value) {
|
|
152
|
+
const body = new Uint8Array(8);
|
|
153
|
+
writeSortableDouble(body, 0, value);
|
|
154
|
+
out.push(TAG_NUMBER, ...body);
|
|
155
|
+
}
|
|
156
|
+
/** Escaped UTF-8 + terminator behind `tag`; rejects unpaired surrogates. */
|
|
157
|
+
function pushString(out, tag, value, describe) {
|
|
158
|
+
assertNoUnpairedSurrogate(value, describe);
|
|
159
|
+
out.push(tag);
|
|
160
|
+
pushEscaped(out, utf8.encode(value));
|
|
161
|
+
out.push(TERMINATOR);
|
|
162
|
+
}
|
|
163
|
+
function pushArray(out, value) {
|
|
164
|
+
out.push(TAG_ARRAY);
|
|
165
|
+
for (const element of value) {
|
|
166
|
+
pushJsonNode(out, element);
|
|
167
|
+
}
|
|
168
|
+
out.push(TERMINATOR);
|
|
169
|
+
}
|
|
170
|
+
function pushObject(out, value) {
|
|
171
|
+
// Sorted with the SAME comparator `deepCompareJson` sorts with — code point, not
|
|
172
|
+
// the default code-unit sort, which disagrees for astral-character keys.
|
|
173
|
+
const keys = Object.keys(value).sort(compareCodePoints);
|
|
174
|
+
out.push(TAG_OBJECT);
|
|
175
|
+
for (const key of keys) {
|
|
176
|
+
assertNoUnpairedSurrogate(key, 'a JSON object key');
|
|
177
|
+
out.push(KEY_MARKER);
|
|
178
|
+
pushEscaped(out, utf8.encode(key));
|
|
179
|
+
out.push(TERMINATOR);
|
|
180
|
+
}
|
|
181
|
+
out.push(TERMINATOR);
|
|
182
|
+
for (const key of keys) {
|
|
183
|
+
pushJsonNode(out, value[key]);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* encoding.ts's escape scheme (`0x00` → `0x01 0x01`, `0x01` → `0x01 0x02`): monotonic
|
|
188
|
+
* in the source byte, and every escaped byte is ≥ `0x01`, so the `0x00` terminator
|
|
189
|
+
* sorts a proper prefix before its extensions.
|
|
190
|
+
*/
|
|
191
|
+
function pushEscaped(out, bytes) {
|
|
192
|
+
for (const byte of bytes) {
|
|
193
|
+
if (byte === 0x00) {
|
|
194
|
+
out.push(0x01, 0x01);
|
|
195
|
+
}
|
|
196
|
+
else if (byte === 0x01) {
|
|
197
|
+
out.push(0x01, 0x02);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
out.push(byte);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=json-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-key.js","sourceRoot":"","sources":["../../../src/common/json-key.ts"],"names":[],"mappings":"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"}
|