@quereus/sync 4.4.1 → 4.6.0

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.
Files changed (52) hide show
  1. package/README.md +2 -2
  2. package/dist/src/index.d.ts +1 -1
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +1 -1
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/metadata/column-version.d.ts.map +1 -1
  7. package/dist/src/metadata/column-version.js +8 -9
  8. package/dist/src/metadata/column-version.js.map +1 -1
  9. package/dist/src/metadata/keys.d.ts +71 -39
  10. package/dist/src/metadata/keys.d.ts.map +1 -1
  11. package/dist/src/metadata/keys.js +181 -158
  12. package/dist/src/metadata/keys.js.map +1 -1
  13. package/dist/src/metadata/pk-identity.d.ts +19 -14
  14. package/dist/src/metadata/pk-identity.d.ts.map +1 -1
  15. package/dist/src/metadata/pk-identity.js +21 -28
  16. package/dist/src/metadata/pk-identity.js.map +1 -1
  17. package/dist/src/metadata/schema-migration.d.ts +25 -9
  18. package/dist/src/metadata/schema-migration.d.ts.map +1 -1
  19. package/dist/src/metadata/schema-migration.js +49 -15
  20. package/dist/src/metadata/schema-migration.js.map +1 -1
  21. package/dist/src/sync/change-applicator.d.ts +19 -3
  22. package/dist/src/sync/change-applicator.d.ts.map +1 -1
  23. package/dist/src/sync/change-applicator.js +194 -60
  24. package/dist/src/sync/change-applicator.js.map +1 -1
  25. package/dist/src/sync/maintenance.d.ts +8 -5
  26. package/dist/src/sync/maintenance.d.ts.map +1 -1
  27. package/dist/src/sync/maintenance.js +7 -4
  28. package/dist/src/sync/maintenance.js.map +1 -1
  29. package/dist/src/sync/manager.d.ts +23 -1
  30. package/dist/src/sync/manager.d.ts.map +1 -1
  31. package/dist/src/sync/protocol.d.ts +30 -1
  32. package/dist/src/sync/protocol.d.ts.map +1 -1
  33. package/dist/src/sync/protocol.js +38 -0
  34. package/dist/src/sync/protocol.js.map +1 -1
  35. package/dist/src/sync/snapshot-identity.d.ts.map +1 -1
  36. package/dist/src/sync/snapshot-identity.js +1 -9
  37. package/dist/src/sync/snapshot-identity.js.map +1 -1
  38. package/dist/src/sync/snapshot-stream.d.ts.map +1 -1
  39. package/dist/src/sync/snapshot-stream.js +41 -39
  40. package/dist/src/sync/snapshot-stream.js.map +1 -1
  41. package/dist/src/sync/snapshot.d.ts.map +1 -1
  42. package/dist/src/sync/snapshot.js +12 -30
  43. package/dist/src/sync/snapshot.js.map +1 -1
  44. package/dist/src/sync/store-adapter.d.ts +5 -4
  45. package/dist/src/sync/store-adapter.d.ts.map +1 -1
  46. package/dist/src/sync/store-adapter.js +27 -46
  47. package/dist/src/sync/store-adapter.js.map +1 -1
  48. package/dist/src/sync/sync-manager-impl.d.ts +35 -4
  49. package/dist/src/sync/sync-manager-impl.d.ts.map +1 -1
  50. package/dist/src/sync/sync-manager-impl.js +72 -40
  51. package/dist/src/sync/sync-manager-impl.js.map +1 -1
  52. package/package.json +7 -7
@@ -7,7 +7,7 @@
7
7
  * tx: - Transaction records
8
8
  * ps: - Peer sync state (received watermark: highest HLC pulled from a peer)
9
9
  * pt: - Peer sent state (sent watermark: highest HLC pushed to a peer and acked)
10
- * sm: - Schema migrations
10
+ * sm: - Schema migrations (keyed by object KIND as well as name — see buildSchemaMigrationKey)
11
11
  * si: - Site identity
12
12
  * hc: - HLC clock state
13
13
  * cl: - Change log (HLC-indexed for efficient delta queries)
@@ -19,6 +19,8 @@ import { serializeKeyNullGrouping } from '@quereus/quereus';
19
19
  import { assertNoUnpairedSurrogate } from '@quereus/store';
20
20
  import { siteIdToBase64, siteIdFromBase64 } from '../clock/site.js';
21
21
  const encoder = new TextEncoder();
22
+ /** Shared: the parsers below run once per key across whole-prefix scans. */
23
+ const decoder = new TextDecoder();
22
24
  /** Key prefix bytes for sync metadata. */
23
25
  export const SYNC_KEY_PREFIX = {
24
26
  COLUMN_VERSION: encoder.encode('cv:'),
@@ -37,15 +39,27 @@ export const SYNC_KEY_PREFIX = {
37
39
  /**
38
40
  * Current sync-metadata storage format version, persisted under the `fv:` key.
39
41
  *
42
+ * Version 4: schema migration keys (`sm:`) carry the object KIND (`table` /
43
+ * `index`) alongside the object name, so a table and a same-named index no
44
+ * longer share one version counter and suppress each other's migrations
45
+ * (version 3 keyed only `(schema, name)`).
46
+ *
47
+ * Version 3: EVERY variable-length key component — schema, table, pk identity,
48
+ * column — is length-prefixed via {@link joinKeyParts}, so no character is
49
+ * reserved as a delimiter and a name containing `:` or `.` cannot shift the
50
+ * split (version 2 packed schema/table as `{schema}.{table}:`, which mis-parsed
51
+ * a table named `a:b` as table `a`) — retained in version 4.
52
+ *
40
53
  * Version 2: per-row records (`cv:`/`tb:`/`cl:`) are keyed by the pk IDENTITY
41
54
  * (collation- and semantic-transform-normalized, via {@link encodePkIdentity})
42
- * and carry the raw pk in the record VALUE. Version-1 metadata (raw
43
- * `JSON.stringify(pk)` keys, no pk in values) is unreadable under this layout;
44
- * a replica whose stored version mismatches must re-bootstrap from a peer
45
- * snapshot (see docs/sync.md § Metadata format version).
55
+ * and carry the raw pk in the record VALUE — retained since.
56
+ *
57
+ * Older metadata is unreadable under this layout; a replica whose stored version
58
+ * mismatches must re-bootstrap from a peer snapshot (see docs/sync.md
59
+ * § Metadata format version).
46
60
  */
47
- export const SYNC_METADATA_FORMAT_VERSION = 2;
48
- /** Separator between key components. */
61
+ export const SYNC_METADATA_FORMAT_VERSION = 4;
62
+ /** Separator between a component's length and the component itself. */
49
63
  const SEPARATOR = ':';
50
64
  /**
51
65
  * Raise when any of `names` (schema/table/column identifiers) carries an unpaired
@@ -62,6 +76,58 @@ function assertKeyableIdentifiers(...names) {
62
76
  assertNoUnpairedSurrogate(name, `the identifier "${name}"`);
63
77
  }
64
78
  }
79
+ /**
80
+ * Join variable-length key components, each prefixed with its own length in
81
+ * string code units: `{len}:{part}{len}:{part}…`.
82
+ *
83
+ * This is the ONLY encoding used for schema names, table names, pk identities
84
+ * and column names in metadata keys. Every one of those is arbitrary text — a
85
+ * quoted SQL identifier may contain `.` or `:`, and a pk identity freely
86
+ * contains `:` (type tags) and `\0` (member separator) — so no separator
87
+ * character can be reserved, and an explicit length is the only split that
88
+ * cannot shift. Two distinct component tuples can therefore never produce the
89
+ * same key.
90
+ *
91
+ * The length is in code units of the DECODED key string, which the byte
92
+ * encoding preserves: `TextEncoder` folds an unpaired surrogate to U+FFFD, one
93
+ * code unit for one code unit, and paired surrogates survive intact.
94
+ */
95
+ export function joinKeyParts(...parts) {
96
+ return parts.map(part => `${part.length}${SEPARATOR}${part}`).join('');
97
+ }
98
+ /**
99
+ * Split one length-prefixed component (`{len}:{part}`) off the front of `rest`.
100
+ * Returns null on a malformed length or an out-of-bounds slice.
101
+ */
102
+ function splitKeyPart(rest) {
103
+ const lenColon = rest.indexOf(SEPARATOR);
104
+ if (lenColon <= 0)
105
+ return null;
106
+ const lenStr = rest.slice(0, lenColon);
107
+ if (!/^\d+$/.test(lenStr))
108
+ return null;
109
+ const len = parseInt(lenStr, 10);
110
+ const start = lenColon + 1;
111
+ if (start + len > rest.length)
112
+ return null;
113
+ return { part: rest.slice(start, start + len), remainder: rest.slice(start + len) };
114
+ }
115
+ /**
116
+ * Split exactly `count` length-prefixed components off the front of `rest` — the
117
+ * inverse of {@link joinKeyParts}. Returns null if any component is malformed.
118
+ */
119
+ function splitKeyParts(rest, count) {
120
+ const parts = [];
121
+ let remainder = rest;
122
+ for (let i = 0; i < count; i++) {
123
+ const split = splitKeyPart(remainder);
124
+ if (!split)
125
+ return null;
126
+ parts.push(split.part);
127
+ remainder = split.remainder;
128
+ }
129
+ return { parts, remainder };
130
+ }
65
131
  const IDENTITY_NORMALIZER = (s) => s;
66
132
  /**
67
133
  * Keying that applies NO collation and NO semantic transform — raw value
@@ -96,27 +162,21 @@ export function encodeRawPkIdentity(pk) {
96
162
  }
97
163
  /**
98
164
  * Build a column version key.
99
- * Format: cv:{schema}.{table}:{identity_length}:{identity}:{column}
165
+ * Format: cv:{n}:{schema}{n}:{table}{n}:{identity}{n}:{column}
100
166
  *
101
- * The identity is LENGTH-PREFIXED (code units of the decoded key string) because
102
- * it freely contains `:` (type tags) and `\0` (member separator) — no separator
103
- * character is guaranteed absent, so an explicit length is the only unambiguous
104
- * split between identity and column.
167
+ * Every component is length-prefixed — see {@link joinKeyParts}.
105
168
  */
106
169
  export function buildColumnVersionKey(schemaName, tableName, identity, column) {
107
170
  assertKeyableIdentifiers(schemaName, tableName, column);
108
- const key = `cv:${schemaName}.${tableName}${SEPARATOR}${identity.length}${SEPARATOR}${identity}${SEPARATOR}${column}`;
109
- return encoder.encode(key);
171
+ return encoder.encode(`cv:${joinKeyParts(schemaName, tableName, identity, column)}`);
110
172
  }
111
173
  /**
112
174
  * Build a tombstone key.
113
- * Format: tb:{schema}.{table}:{identity}
114
- * (No length prefix — the identity is the final component.)
175
+ * Format: tb:{n}:{schema}{n}:{table}{n}:{identity}
115
176
  */
116
177
  export function buildTombstoneKey(schemaName, tableName, identity) {
117
178
  assertKeyableIdentifiers(schemaName, tableName);
118
- const key = `tb:${schemaName}.${tableName}${SEPARATOR}${identity}`;
119
- return encoder.encode(key);
179
+ return encoder.encode(`tb:${joinKeyParts(schemaName, tableName, identity)}`);
120
180
  }
121
181
  /**
122
182
  * Build a transaction record key.
@@ -146,7 +206,7 @@ export function buildPeerSentStateKey(siteId) {
146
206
  * Returns null for a key outside those prefixes or with a malformed suffix.
147
207
  */
148
208
  export function parsePeerStateKey(key) {
149
- const keyStr = new TextDecoder().decode(key);
209
+ const keyStr = decoder.decode(key);
150
210
  if (!keyStr.startsWith('ps:') && !keyStr.startsWith('pt:'))
151
211
  return null;
152
212
  try {
@@ -156,67 +216,81 @@ export function parsePeerStateKey(key) {
156
216
  return null;
157
217
  }
158
218
  }
219
+ /**
220
+ * The key prefix shared by every migration of one schema object:
221
+ * `sm:{n}:{schema}{n}:{kind}{n}:{object}`.
222
+ *
223
+ * The kind sits BEFORE the object name so one object's migrations stay a single
224
+ * exact prefix (and stay contiguous by version within it). Kept separate from
225
+ * {@link buildTablePrefix}, which the two-component `cv:`/`tb:`/`qt:`/`bl:`
226
+ * families share.
227
+ */
228
+ function buildSchemaMigrationPrefix(schemaName, kind, objectName) {
229
+ return `sm:${joinKeyParts(schemaName, kind, objectName)}`;
230
+ }
159
231
  /**
160
232
  * Build a schema migration key.
161
- * Format: sm:{schema}.{table}:{version}
233
+ * Format: sm:{n}:{schema}{n}:{kind}{n}:{object}{version_padded_10}
234
+ *
235
+ * `kind` distinguishes the two things `objectName` can be: for an index
236
+ * migration it is the INDEX name, for every other migration type the TABLE name.
237
+ * Without it a table `orders` and an index `orders` share one version counter,
238
+ * and a concurrent migration of one silently suppresses the other on the
239
+ * receiving replica.
240
+ *
241
+ * The version is fixed-width zero-padded (not length-prefixed) so migrations of
242
+ * one object sort by version within that object's prefix.
162
243
  */
163
- export function buildSchemaMigrationKey(schemaName, tableName, version) {
164
- assertKeyableIdentifiers(schemaName, tableName);
165
- return encoder.encode(`sm:${schemaName}.${tableName}${SEPARATOR}${version.toString().padStart(10, '0')}`);
244
+ export function buildSchemaMigrationKey(schemaName, kind, objectName, version) {
245
+ assertKeyableIdentifiers(schemaName, objectName);
246
+ const versionPart = version.toString().padStart(10, '0');
247
+ return encoder.encode(`${buildSchemaMigrationPrefix(schemaName, kind, objectName)}${versionPart}`);
248
+ }
249
+ /**
250
+ * Build a prefix over one `(schema, table)` under `prefix`. Exact: each
251
+ * component's length is carried by the component itself, so no other
252
+ * `(schema, table)` pair can share these bytes (see {@link joinKeyParts}).
253
+ */
254
+ function buildTablePrefix(prefix, schemaName, tableName) {
255
+ return encoder.encode(`${prefix}${joinKeyParts(schemaName, tableName)}`);
256
+ }
257
+ /** Scan bounds over an exact byte prefix. */
258
+ function prefixBounds(prefix) {
259
+ return { gte: prefix, lt: incrementLastByte(prefix) };
166
260
  }
167
261
  /**
168
262
  * Build scan bounds for all column versions of a table.
169
- * Returns keys to scan cv:{schema}.{table}:*
263
+ * Returns keys to scan cv:{n}:{schema}{n}:{table}*
170
264
  */
171
265
  export function buildTableColumnVersionScanBounds(schemaName, tableName) {
172
- const prefix = `cv:${schemaName}.${tableName}${SEPARATOR}`;
173
- return {
174
- gte: encoder.encode(prefix),
175
- lt: incrementLastByte(encoder.encode(prefix)),
176
- };
266
+ return prefixBounds(buildTablePrefix('cv:', schemaName, tableName));
177
267
  }
178
268
  /**
179
269
  * The key prefix shared by every column version of one row:
180
- * `cv:{schema}.{table}:{identity_length}:{identity}:`.
181
- *
182
- * Exported so a row scan can recover each entry's column name by stripping this
183
- * exact prefix, rather than splitting the key at its last `:` — the column name
184
- * is the only unbounded, separator-bearing component, so only the prefix is
185
- * unambiguous (see {@link parseColumnVersionKey}, which has no pk to anchor on).
270
+ * `cv:{n}:{schema}{n}:{table}{n}:{identity}`.
186
271
  */
187
- export function buildColumnVersionRowPrefix(schemaName, tableName, identity) {
188
- return `cv:${schemaName}.${tableName}${SEPARATOR}${identity.length}${SEPARATOR}${identity}${SEPARATOR}`;
272
+ function buildColumnVersionRowPrefix(schemaName, tableName, identity) {
273
+ return `cv:${joinKeyParts(schemaName, tableName, identity)}`;
189
274
  }
190
275
  /**
191
276
  * Build scan bounds for all column versions of a row.
192
- * Returns keys to scan cv:{schema}.{table}:{identity_length}:{identity}:*
277
+ * Returns keys to scan cv:{n}:{schema}{n}:{table}{n}:{identity}*
193
278
  */
194
279
  export function buildColumnVersionScanBounds(schemaName, tableName, identity) {
195
- const prefix = buildColumnVersionRowPrefix(schemaName, tableName, identity);
196
- return {
197
- gte: encoder.encode(prefix),
198
- lt: incrementLastByte(encoder.encode(prefix)),
199
- };
280
+ return prefixBounds(encoder.encode(buildColumnVersionRowPrefix(schemaName, tableName, identity)));
200
281
  }
201
282
  /**
202
283
  * Build scan bounds for all tombstones in a table.
203
284
  */
204
285
  export function buildTombstoneScanBounds(schemaName, tableName) {
205
- const prefix = `tb:${schemaName}.${tableName}${SEPARATOR}`;
206
- return {
207
- gte: encoder.encode(prefix),
208
- lt: incrementLastByte(encoder.encode(prefix)),
209
- };
286
+ return prefixBounds(buildTablePrefix('tb:', schemaName, tableName));
210
287
  }
211
288
  /**
212
- * Build scan bounds for all schema migrations of a table.
289
+ * Build scan bounds for all schema migrations of one object — a table's or an
290
+ * index's, per `kind`. A table and a same-named index have disjoint bounds.
213
291
  */
214
- export function buildSchemaMigrationScanBounds(schemaName, tableName) {
215
- const prefix = `sm:${schemaName}.${tableName}${SEPARATOR}`;
216
- return {
217
- gte: encoder.encode(prefix),
218
- lt: incrementLastByte(encoder.encode(prefix)),
219
- };
292
+ export function buildSchemaMigrationScanBounds(schemaName, kind, objectName) {
293
+ return prefixBounds(encoder.encode(buildSchemaMigrationPrefix(schemaName, kind, objectName)));
220
294
  }
221
295
  /**
222
296
  * Increment the last byte of a key to create an exclusive upper bound.
@@ -260,101 +334,60 @@ export function buildAllSchemaMigrationsScanBounds() {
260
334
  lt: incrementLastByte(SYNC_KEY_PREFIX.SCHEMA_MIGRATION),
261
335
  };
262
336
  }
263
- /**
264
- * Split a length-prefixed identity component off `rest` (the key text after the
265
- * table's separator): `{identity_length}:{identity}` followed by `remainder`.
266
- * Returns null on a malformed length or out-of-bounds slice.
267
- */
268
- function splitLengthPrefixedIdentity(rest) {
269
- const lenColon = rest.indexOf(SEPARATOR);
270
- if (lenColon <= 0)
271
- return null;
272
- const lenStr = rest.slice(0, lenColon);
273
- if (!/^\d+$/.test(lenStr))
274
- return null;
275
- const len = parseInt(lenStr, 10);
276
- const start = lenColon + 1;
277
- if (start + len > rest.length)
278
- return null;
279
- return { identity: rest.slice(start, start + len), remainder: rest.slice(start + len) };
280
- }
281
337
  /**
282
338
  * Parse a column version key to extract components.
283
- * Key format: cv:{schema}.{table}:{identity_length}:{identity}:{column}
339
+ * Key format: cv:{n}:{schema}{n}:{table}{n}:{identity}{n}:{column}
284
340
  *
285
341
  * Returns the pk IDENTITY string — the identity is lossy and cannot be decoded
286
342
  * back to values; the raw pk lives in the record VALUE (`ColumnVersion.pk`).
287
- * The length prefix makes the identity/column split unambiguous regardless of
288
- * what characters either contains.
343
+ * The per-component length prefixes make every split unambiguous regardless of
344
+ * what characters any component contains.
289
345
  */
290
346
  export function parseColumnVersionKey(key) {
291
- const keyStr = new TextDecoder().decode(key);
347
+ const keyStr = decoder.decode(key);
292
348
  if (!keyStr.startsWith('cv:'))
293
349
  return null;
294
- // cv:{schema}.{table}:{identity_length}:{identity}:{column}
295
- const rest = keyStr.slice(3); // Remove 'cv:'
296
- const firstDot = rest.indexOf('.');
297
- if (firstDot === -1)
298
- return null;
299
- const schema = rest.slice(0, firstDot);
300
- const afterDot = rest.slice(firstDot + 1);
301
- const firstColon = afterDot.indexOf(':');
302
- if (firstColon === -1)
350
+ const split = splitKeyParts(keyStr.slice(3), 4);
351
+ if (!split || split.remainder.length !== 0)
303
352
  return null;
304
- const table = afterDot.slice(0, firstColon);
305
- const split = splitLengthPrefixedIdentity(afterDot.slice(firstColon + 1));
306
- if (!split || !split.remainder.startsWith(SEPARATOR))
307
- return null;
308
- return { schema, table, identity: split.identity, column: split.remainder.slice(1) };
353
+ const [schema, table, identity, column] = split.parts;
354
+ return { schema, table, identity, column };
309
355
  }
310
356
  /**
311
357
  * Parse a tombstone key to extract components.
312
- * Key format: tb:{schema}.{table}:{identity}
358
+ * Key format: tb:{n}:{schema}{n}:{table}{n}:{identity}
313
359
  *
314
360
  * Returns the pk IDENTITY string; the raw pk lives in the record VALUE
315
361
  * (`Tombstone.pk`).
316
362
  */
317
363
  export function parseTombstoneKey(key) {
318
- const keyStr = new TextDecoder().decode(key);
364
+ const keyStr = decoder.decode(key);
319
365
  if (!keyStr.startsWith('tb:'))
320
366
  return null;
321
- // tb:{schema}.{table}:{identity}
322
- const rest = keyStr.slice(3); // Remove 'tb:'
323
- const firstDot = rest.indexOf('.');
324
- if (firstDot === -1)
325
- return null;
326
- const schema = rest.slice(0, firstDot);
327
- const afterDot = rest.slice(firstDot + 1);
328
- const firstColon = afterDot.indexOf(':');
329
- if (firstColon === -1)
367
+ const split = splitKeyParts(keyStr.slice(3), 3);
368
+ if (!split || split.remainder.length !== 0)
330
369
  return null;
331
- const table = afterDot.slice(0, firstColon);
332
- return { schema, table, identity: afterDot.slice(firstColon + 1) };
370
+ const [schema, table, identity] = split.parts;
371
+ return { schema, table, identity };
333
372
  }
334
373
  /**
335
374
  * Parse a schema migration key to extract components.
336
- * Key format: sm:{schema}.{table}:{version}
375
+ * Key format: sm:{n}:{schema}{n}:{kind}{n}:{object}{version_padded_10}
376
+ *
377
+ * `table` carries the object name whatever its kind — for an `index` key it is
378
+ * the index name, not the table the index is on (which the key never held).
337
379
  */
338
380
  export function parseSchemaMigrationKey(key) {
339
- const keyStr = new TextDecoder().decode(key);
381
+ const keyStr = decoder.decode(key);
340
382
  if (!keyStr.startsWith('sm:'))
341
383
  return null;
342
- // sm:{schema}.{table}:{version}
343
- const rest = keyStr.slice(3); // Remove 'sm:'
344
- const firstDot = rest.indexOf('.');
345
- if (firstDot === -1)
346
- return null;
347
- const schema = rest.slice(0, firstDot);
348
- const afterDot = rest.slice(firstDot + 1);
349
- const firstColon = afterDot.indexOf(':');
350
- if (firstColon === -1)
384
+ const split = splitKeyParts(keyStr.slice(3), 3);
385
+ if (!split || !/^\d+$/.test(split.remainder))
351
386
  return null;
352
- const table = afterDot.slice(0, firstColon);
353
- const versionStr = afterDot.slice(firstColon + 1);
354
- const version = parseInt(versionStr, 10);
355
- if (isNaN(version))
387
+ const [schema, kind, table] = split.parts;
388
+ if (kind !== 'table' && kind !== 'index')
356
389
  return null;
357
- return { schema, table, version };
390
+ return { schema, kind, table, version: parseInt(split.remainder, 10) };
358
391
  }
359
392
  /**
360
393
  * Serialize an HLC to a sortable key component (30 bytes, big-endian).
@@ -387,20 +420,22 @@ export function deserializeHLCFromKey(buffer) {
387
420
  }
388
421
  /**
389
422
  * Build a change log key.
390
- * Format: cl:{hlc_bytes}{type_byte}{schema}.{table}:{identity_length}:{identity}[:{column}]
423
+ * Format: cl:{hlc_bytes}{type_byte}{n}:{schema}{n}:{table}{n}:{identity}[{n}:{column}]
391
424
  *
392
425
  * The HLC comes first to enable efficient range scans by time.
393
426
  * type_byte: 0x01 for column change, 0x02 for delete
394
- * The identity is length-prefixed for the same reason as {@link buildColumnVersionKey}.
427
+ * Every text component is length-prefixed — see {@link joinKeyParts}.
395
428
  */
396
429
  export function buildChangeLogKey(hlc, entryType, schemaName, tableName, identity, column) {
397
430
  assertKeyableIdentifiers(schemaName, tableName, ...(column !== undefined ? [column] : []));
398
431
  const hlcBytes = serializeHLCForKey(hlc);
399
432
  const typeByte = entryType === 'column' ? 0x01 : 0x02;
400
- const pkPart = `${identity.length}${SEPARATOR}${identity}`;
401
- const suffix = column
402
- ? `${schemaName}.${tableName}${SEPARATOR}${pkPart}${SEPARATOR}${column}`
403
- : `${schemaName}.${tableName}${SEPARATOR}${pkPart}`;
433
+ // `!== undefined`, not truthiness: a zero-length column name must still emit its
434
+ // (empty) component, or the builder would write 3 parts where `parseChangeLogKey`
435
+ // demands 4 for a `column` entry and the record would read back as unparseable.
436
+ const suffix = column !== undefined
437
+ ? joinKeyParts(schemaName, tableName, identity, column)
438
+ : joinKeyParts(schemaName, tableName, identity);
404
439
  const suffixBytes = encoder.encode(suffix);
405
440
  // cl: (3) + hlc (30) + type (1) + suffix
406
441
  const key = new Uint8Array(3 + 30 + 1 + suffixBytes.length);
@@ -456,40 +491,28 @@ export function parseChangeLogKey(key) {
456
491
  // Minimum: cl: (3) + hlc (30) + type (1) + some suffix
457
492
  if (key.length < 35)
458
493
  return null;
459
- const prefixStr = new TextDecoder().decode(key.slice(0, 3));
494
+ const prefixStr = decoder.decode(key.slice(0, 3));
460
495
  if (prefixStr !== 'cl:')
461
496
  return null;
462
497
  const hlcBytes = key.slice(3, 33);
463
498
  const hlc = deserializeHLCFromKey(hlcBytes);
464
499
  const typeByte = key[33];
465
500
  const entryType = typeByte === 0x01 ? 'column' : 'delete';
466
- const suffixStr = new TextDecoder().decode(key.slice(34));
467
- // Parse suffix: {schema}.{table}:{identity_length}:{identity}[:{column}]
468
- const firstDot = suffixStr.indexOf('.');
469
- if (firstDot === -1)
470
- return null;
471
- const schema = suffixStr.slice(0, firstDot);
472
- const afterDot = suffixStr.slice(firstDot + 1);
473
- const firstColon = afterDot.indexOf(':');
474
- if (firstColon === -1)
475
- return null;
476
- const table = afterDot.slice(0, firstColon);
477
- const split = splitLengthPrefixedIdentity(afterDot.slice(firstColon + 1));
478
- if (!split)
501
+ const suffixStr = decoder.decode(key.slice(34));
502
+ // Parse suffix: {n}:{schema}{n}:{table}{n}:{identity}[{n}:{column}]
503
+ const split = splitKeyParts(suffixStr, entryType === 'column' ? 4 : 3);
504
+ if (!split || split.remainder.length !== 0)
479
505
  return null;
506
+ const [schema, table, identity] = split.parts;
480
507
  if (entryType === 'column') {
481
- if (!split.remainder.startsWith(SEPARATOR))
482
- return null;
483
- return { hlc, entryType, schema, table, identity: split.identity, column: split.remainder.slice(1) };
508
+ return { hlc, entryType, schema, table, identity, column: split.parts[3] };
484
509
  }
485
510
  // Delete entry - no column
486
- if (split.remainder.length !== 0)
487
- return null;
488
- return { hlc, entryType, schema, table, identity: split.identity };
511
+ return { hlc, entryType, schema, table, identity };
489
512
  }
490
513
  /**
491
514
  * Build a quarantine key for a held out-of-basis straggler change.
492
- * Format: qt:{schema}.{table}: + hlc_bytes(30) + type_byte(1) + :{raw_identity}[:{column}]
515
+ * Format: qt:{n}:{schema}{n}:{table} + hlc_bytes(30) + type_byte(1) + {n}:{raw_identity}[{n}:{column}]
493
516
  *
494
517
  * Unlike the change log (`cl:`), the table prefix comes BEFORE the HLC so the
495
518
  * range scans by `(schema, table)` for operator inspection. The HLC + type + pk
@@ -507,13 +530,13 @@ export function parseChangeLogKey(key) {
507
530
  */
508
531
  export function buildQuarantineKey(schemaName, tableName, hlc, entryType, pk, column) {
509
532
  assertKeyableIdentifiers(schemaName, tableName, ...(column !== undefined ? [column] : []));
510
- const prefixBytes = encoder.encode(`qt:${schemaName}.${tableName}${SEPARATOR}`);
533
+ const prefixBytes = buildTablePrefix('qt:', schemaName, tableName);
511
534
  const hlcBytes = serializeHLCForKey(hlc);
512
535
  const typeByte = entryType === 'column' ? 0x01 : 0x02;
513
536
  const rawIdentity = encodeRawPkIdentity(pk);
514
- const suffix = column
515
- ? `${SEPARATOR}${rawIdentity}${SEPARATOR}${column}`
516
- : `${SEPARATOR}${rawIdentity}`;
537
+ const suffix = column !== undefined
538
+ ? joinKeyParts(rawIdentity, column)
539
+ : joinKeyParts(rawIdentity);
517
540
  const suffixBytes = encoder.encode(suffix);
518
541
  const key = new Uint8Array(prefixBytes.length + 30 + 1 + suffixBytes.length);
519
542
  let offset = 0;
@@ -529,17 +552,17 @@ export function buildQuarantineKey(schemaName, tableName, hlc, entryType, pk, co
529
552
  /**
530
553
  * Build scan bounds over quarantine entries.
531
554
  * - both `schemaName` and `tableName`: a single table's held changes.
532
- * - `schemaName` only: all held changes in that schema.
555
+ * - `schemaName` only: all held changes in that schema — `qt:{n}:{schema}` is
556
+ * exact, since the schema's own length prefix terminates it (a different
557
+ * schema differs in either that length or its text).
533
558
  * - neither: every quarantine entry (the GC sweep).
534
559
  */
535
560
  export function buildQuarantineScanBounds(schemaName, tableName) {
536
561
  if (schemaName !== undefined && tableName !== undefined) {
537
- const prefix = encoder.encode(`qt:${schemaName}.${tableName}${SEPARATOR}`);
538
- return { gte: prefix, lt: incrementLastByte(prefix) };
562
+ return prefixBounds(buildTablePrefix('qt:', schemaName, tableName));
539
563
  }
540
564
  if (schemaName !== undefined) {
541
- const prefix = encoder.encode(`qt:${schemaName}.`);
542
- return { gte: prefix, lt: incrementLastByte(prefix) };
565
+ return prefixBounds(encoder.encode(`qt:${joinKeyParts(schemaName)}`));
543
566
  }
544
567
  return {
545
568
  gte: SYNC_KEY_PREFIX.QUARANTINE,
@@ -548,7 +571,7 @@ export function buildQuarantineScanBounds(schemaName, tableName) {
548
571
  }
549
572
  /**
550
573
  * Build a basis-table lifecycle key.
551
- * Format: bl:{schema}.{table} (both lowercased — basis relations are keyed
574
+ * Format: bl:{n}:{schema}{n}:{table} (both lowercased — basis relations are keyed
552
575
  * lowercased throughout the lens deployment snapshot, so the lifecycle key
553
576
  * matches `relationBacking` / `derivation.sourceTables` keys exactly).
554
577
  *
@@ -558,7 +581,7 @@ export function buildQuarantineScanBounds(schemaName, tableName) {
558
581
  */
559
582
  export function buildBasisLifecycleKey(schemaName, tableName) {
560
583
  assertKeyableIdentifiers(schemaName, tableName);
561
- return encoder.encode(`bl:${schemaName.toLowerCase()}.${tableName.toLowerCase()}`);
584
+ return buildTablePrefix('bl:', schemaName.toLowerCase(), tableName.toLowerCase());
562
585
  }
563
586
  /**
564
587
  * Build scan bounds over all basis-table lifecycle records (operator
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAe,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGjF,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,0CAA0C;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACrC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACtC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACtC,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;CAC7B,CAAC;AAEX;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C,wCAAwC;AACxC,MAAM,SAAS,GAAG,GAAG,CAAC;AAEtB;;;;;;;;;GASG;AACH,SAAS,wBAAwB,CAAC,GAAG,KAAe;IAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,IAAI,GAAG,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAcD,MAAM,mBAAmB,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAa,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;AAE3E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAc,EAAE,MAAgB;IAC/D,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC;IACnF,OAAO,wBAAwB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACvD,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,EAAc;IAChD,OAAO,gBAAgB,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,SAAiB,EACjB,QAAgB,EAChB,MAAc;IAEd,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;IACtH,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAkB,EAClB,SAAiB,EACjB,QAAgB;IAEhB,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;IACnE,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAqB;IACvD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,aAAa,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAe;IAC/C,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxE,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAkB,EAClB,SAAiB,EACjB,OAAe;IAEf,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5G,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAC/C,UAAkB,EAClB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,UAAkB,EAClB,SAAiB,EACjB,QAAgB;IAEhB,OAAO,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAE,CAAC;AAC1G,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,UAAkB,EAClB,SAAiB,EACjB,QAAgB;IAEhB,MAAM,MAAM,GAAG,2BAA2B,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC5E,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAkB,EAClB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,8BAA8B,CAC5C,UAAkB,EAClB,SAAiB;IAEjB,MAAM,MAAM,GAAG,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC;IAC3D,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAe;IACxC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,MAAM;QACR,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,cAAc;QACnC,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,cAAc,CAAC;KACtD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,SAAS;QAC9B,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,SAAS,CAAC;KACjD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kCAAkC;IAChD,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,gBAAgB;QACrC,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,gBAAgB,CAAC;KACxD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,2BAA2B,CAAC,IAAY;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAC3C,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,EAAE,CAAC;AAC1F,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAe;IAMnD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,4DAA4D;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAElE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AACvF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAe;IAK/C,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,iCAAiC;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAe;IAKrD,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,gCAAgC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAEzC,IAAI,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC;AAOD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAQ;IACzC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,iCAAiC;IACjC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1C,+BAA+B;IAC/B,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,qBAAqB;IACrB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC3B,iDAAiD;IACjD,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAkB;IACtD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACxC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAQ,EACR,SAA6B,EAC7B,UAAkB,EAClB,SAAiB,EACjB,QAAgB,EAChB,MAAe;IAEf,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,MAAM,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,GAAG,QAAQ,EAAE,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM;QACnB,CAAC,CAAC,GAAG,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE;QACxE,CAAC,CAAC,GAAG,UAAU,IAAI,SAAS,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;IACtD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3C,yCAAyC;IACzC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC5D,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACvC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACrB,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;IACnB,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAEzB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,QAAa;IACzD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC9C,4BAA4B;IAC5B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACnC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACvC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAExC,OAAO;QACL,GAAG;QACH,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,UAAU;QAC/B,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,QAAoB;IAC7C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,MAAM;QACR,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAe;IAQ/C,uDAAuD;IACvD,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,MAAM,SAAS,GAAuB,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAE9E,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAE1D,yEAAyE;IACzE,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,UAAU,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG,2BAA2B,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1E,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QACxD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACvG,CAAC;IACD,2BAA2B;IAC3B,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAkB,EAClB,SAAiB,EACjB,GAAQ,EACR,SAA6B,EAC7B,EAAc,EACd,MAAe;IAEf,wBAAwB,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3F,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,MAAM,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM;QACnB,CAAC,CAAC,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,EAAE;QACnD,CAAC,CAAC,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;IACjC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7E,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC;IAC3D,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,IAAI,EAAE,CAAC;IACxC,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;IAAC,MAAM,IAAI,CAAC,CAAC;IACpC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,UAAmB,EACnB,SAAkB;IAElB,IAAI,UAAU,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,UAAU,IAAI,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC;QAC3E,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;QACnD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;IACxD,CAAC;IACD,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,UAAU;QAC/B,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,UAAU,CAAC;KAClD,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,UAAkB,EAAE,SAAiB;IAC1E,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAChD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,UAAU,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACrF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,GAAG,EAAE,eAAe,CAAC,eAAe;QACpC,EAAE,EAAE,iBAAiB,CAAC,eAAe,CAAC,eAAe,CAAC;KACvD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"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"}