@quereus/sync 4.5.0 → 4.7.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 (57) hide show
  1. package/README.md +14 -6
  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 +99 -39
  10. package/dist/src/metadata/keys.d.ts.map +1 -1
  11. package/dist/src/metadata/keys.js +213 -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 +33 -10
  18. package/dist/src/metadata/schema-migration.d.ts.map +1 -1
  19. package/dist/src/metadata/schema-migration.js +77 -18
  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 +253 -63
  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 +46 -1
  30. package/dist/src/sync/manager.d.ts.map +1 -1
  31. package/dist/src/sync/protocol.d.ts +42 -3
  32. package/dist/src/sync/protocol.d.ts.map +1 -1
  33. package/dist/src/sync/protocol.js +40 -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 +11 -0
  39. package/dist/src/sync/snapshot-stream.d.ts.map +1 -1
  40. package/dist/src/sync/snapshot-stream.js +134 -67
  41. package/dist/src/sync/snapshot-stream.js.map +1 -1
  42. package/dist/src/sync/snapshot.d.ts.map +1 -1
  43. package/dist/src/sync/snapshot.js +15 -30
  44. package/dist/src/sync/snapshot.js.map +1 -1
  45. package/dist/src/sync/store-adapter.d.ts +5 -4
  46. package/dist/src/sync/store-adapter.d.ts.map +1 -1
  47. package/dist/src/sync/store-adapter.js +328 -108
  48. package/dist/src/sync/store-adapter.js.map +1 -1
  49. package/dist/src/sync/sync-manager-impl.d.ts +37 -4
  50. package/dist/src/sync/sync-manager-impl.d.ts.map +1 -1
  51. package/dist/src/sync/sync-manager-impl.js +110 -56
  52. package/dist/src/sync/sync-manager-impl.js.map +1 -1
  53. package/dist/src/sync/wire.d.ts +6 -0
  54. package/dist/src/sync/wire.d.ts.map +1 -1
  55. package/dist/src/sync/wire.js +3 -0
  56. package/dist/src/sync/wire.js.map +1 -1
  57. package/package.json +7 -7
@@ -7,18 +7,21 @@
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)
14
14
  * qt: - Quarantine (held out-of-basis straggler changes)
15
15
  * bl: - Basis-table lifecycle (mapped/derivation-source/unreferenced/detached bookkeeping)
16
16
  * fv: - Sync-metadata format version (single record; see SYNC_METADATA_FORMAT_VERSION)
17
+ * sc: - Snapshot checkpoints (resume position of an interrupted streaming snapshot apply)
17
18
  */
18
19
  import { serializeKeyNullGrouping } from '@quereus/quereus';
19
20
  import { assertNoUnpairedSurrogate } from '@quereus/store';
20
21
  import { siteIdToBase64, siteIdFromBase64 } from '../clock/site.js';
21
22
  const encoder = new TextEncoder();
23
+ /** Shared: the parsers below run once per key across whole-prefix scans. */
24
+ const decoder = new TextDecoder();
22
25
  /** Key prefix bytes for sync metadata. */
23
26
  export const SYNC_KEY_PREFIX = {
24
27
  COLUMN_VERSION: encoder.encode('cv:'),
@@ -33,19 +36,38 @@ export const SYNC_KEY_PREFIX = {
33
36
  QUARANTINE: encoder.encode('qt:'),
34
37
  BASIS_LIFECYCLE: encoder.encode('bl:'),
35
38
  FORMAT_VERSION: encoder.encode('fv:'),
39
+ SNAPSHOT_CHECKPOINT: encoder.encode('sc:'),
36
40
  };
37
41
  /**
38
42
  * Current sync-metadata storage format version, persisted under the `fv:` key.
39
43
  *
44
+ * Version 5: schema migration RECORDS (`sm:` values) carry a length-prefixed
45
+ * `fromTable` slot between the migration type and the DDL (see
46
+ * `metadata/schema-migration.ts`), so a `rename_table` migration can name the
47
+ * table it renamed. The DDL was previously "rest of buffer", so the slot could
48
+ * not be appended — version-4 records are unreadable under this layout.
49
+ *
50
+ * Version 4: schema migration keys (`sm:`) carry the object KIND (`table` /
51
+ * `index`) alongside the object name, so a table and a same-named index no
52
+ * longer share one version counter and suppress each other's migrations
53
+ * (version 3 keyed only `(schema, name)`).
54
+ *
55
+ * Version 3: EVERY variable-length key component — schema, table, pk identity,
56
+ * column — is length-prefixed via {@link joinKeyParts}, so no character is
57
+ * reserved as a delimiter and a name containing `:` or `.` cannot shift the
58
+ * split (version 2 packed schema/table as `{schema}.{table}:`, which mis-parsed
59
+ * a table named `a:b` as table `a`) — retained in version 4.
60
+ *
40
61
  * Version 2: per-row records (`cv:`/`tb:`/`cl:`) are keyed by the pk IDENTITY
41
62
  * (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).
63
+ * and carry the raw pk in the record VALUE — retained since.
64
+ *
65
+ * Older metadata is unreadable under this layout; a replica whose stored version
66
+ * mismatches must re-bootstrap from a peer snapshot (see docs/sync.md
67
+ * § Metadata format version).
46
68
  */
47
- export const SYNC_METADATA_FORMAT_VERSION = 2;
48
- /** Separator between key components. */
69
+ export const SYNC_METADATA_FORMAT_VERSION = 5;
70
+ /** Separator between a component's length and the component itself. */
49
71
  const SEPARATOR = ':';
50
72
  /**
51
73
  * Raise when any of `names` (schema/table/column identifiers) carries an unpaired
@@ -62,6 +84,58 @@ function assertKeyableIdentifiers(...names) {
62
84
  assertNoUnpairedSurrogate(name, `the identifier "${name}"`);
63
85
  }
64
86
  }
87
+ /**
88
+ * Join variable-length key components, each prefixed with its own length in
89
+ * string code units: `{len}:{part}{len}:{part}…`.
90
+ *
91
+ * This is the ONLY encoding used for schema names, table names, pk identities
92
+ * and column names in metadata keys. Every one of those is arbitrary text — a
93
+ * quoted SQL identifier may contain `.` or `:`, and a pk identity freely
94
+ * contains `:` (type tags) and `\0` (member separator) — so no separator
95
+ * character can be reserved, and an explicit length is the only split that
96
+ * cannot shift. Two distinct component tuples can therefore never produce the
97
+ * same key.
98
+ *
99
+ * The length is in code units of the DECODED key string, which the byte
100
+ * encoding preserves: `TextEncoder` folds an unpaired surrogate to U+FFFD, one
101
+ * code unit for one code unit, and paired surrogates survive intact.
102
+ */
103
+ export function joinKeyParts(...parts) {
104
+ return parts.map(part => `${part.length}${SEPARATOR}${part}`).join('');
105
+ }
106
+ /**
107
+ * Split one length-prefixed component (`{len}:{part}`) off the front of `rest`.
108
+ * Returns null on a malformed length or an out-of-bounds slice.
109
+ */
110
+ function splitKeyPart(rest) {
111
+ const lenColon = rest.indexOf(SEPARATOR);
112
+ if (lenColon <= 0)
113
+ return null;
114
+ const lenStr = rest.slice(0, lenColon);
115
+ if (!/^\d+$/.test(lenStr))
116
+ return null;
117
+ const len = parseInt(lenStr, 10);
118
+ const start = lenColon + 1;
119
+ if (start + len > rest.length)
120
+ return null;
121
+ return { part: rest.slice(start, start + len), remainder: rest.slice(start + len) };
122
+ }
123
+ /**
124
+ * Split exactly `count` length-prefixed components off the front of `rest` — the
125
+ * inverse of {@link joinKeyParts}. Returns null if any component is malformed.
126
+ */
127
+ function splitKeyParts(rest, count) {
128
+ const parts = [];
129
+ let remainder = rest;
130
+ for (let i = 0; i < count; i++) {
131
+ const split = splitKeyPart(remainder);
132
+ if (!split)
133
+ return null;
134
+ parts.push(split.part);
135
+ remainder = split.remainder;
136
+ }
137
+ return { parts, remainder };
138
+ }
65
139
  const IDENTITY_NORMALIZER = (s) => s;
66
140
  /**
67
141
  * Keying that applies NO collation and NO semantic transform — raw value
@@ -96,27 +170,21 @@ export function encodeRawPkIdentity(pk) {
96
170
  }
97
171
  /**
98
172
  * Build a column version key.
99
- * Format: cv:{schema}.{table}:{identity_length}:{identity}:{column}
173
+ * Format: cv:{n}:{schema}{n}:{table}{n}:{identity}{n}:{column}
100
174
  *
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.
175
+ * Every component is length-prefixed — see {@link joinKeyParts}.
105
176
  */
106
177
  export function buildColumnVersionKey(schemaName, tableName, identity, column) {
107
178
  assertKeyableIdentifiers(schemaName, tableName, column);
108
- const key = `cv:${schemaName}.${tableName}${SEPARATOR}${identity.length}${SEPARATOR}${identity}${SEPARATOR}${column}`;
109
- return encoder.encode(key);
179
+ return encoder.encode(`cv:${joinKeyParts(schemaName, tableName, identity, column)}`);
110
180
  }
111
181
  /**
112
182
  * Build a tombstone key.
113
- * Format: tb:{schema}.{table}:{identity}
114
- * (No length prefix — the identity is the final component.)
183
+ * Format: tb:{n}:{schema}{n}:{table}{n}:{identity}
115
184
  */
116
185
  export function buildTombstoneKey(schemaName, tableName, identity) {
117
186
  assertKeyableIdentifiers(schemaName, tableName);
118
- const key = `tb:${schemaName}.${tableName}${SEPARATOR}${identity}`;
119
- return encoder.encode(key);
187
+ return encoder.encode(`tb:${joinKeyParts(schemaName, tableName, identity)}`);
120
188
  }
121
189
  /**
122
190
  * Build a transaction record key.
@@ -146,7 +214,7 @@ export function buildPeerSentStateKey(siteId) {
146
214
  * Returns null for a key outside those prefixes or with a malformed suffix.
147
215
  */
148
216
  export function parsePeerStateKey(key) {
149
- const keyStr = new TextDecoder().decode(key);
217
+ const keyStr = decoder.decode(key);
150
218
  if (!keyStr.startsWith('ps:') && !keyStr.startsWith('pt:'))
151
219
  return null;
152
220
  try {
@@ -156,67 +224,81 @@ export function parsePeerStateKey(key) {
156
224
  return null;
157
225
  }
158
226
  }
227
+ /**
228
+ * The key prefix shared by every migration of one schema object:
229
+ * `sm:{n}:{schema}{n}:{kind}{n}:{object}`.
230
+ *
231
+ * The kind sits BEFORE the object name so one object's migrations stay a single
232
+ * exact prefix (and stay contiguous by version within it). Kept separate from
233
+ * {@link buildTablePrefix}, which the two-component `cv:`/`tb:`/`qt:`/`bl:`
234
+ * families share.
235
+ */
236
+ function buildSchemaMigrationPrefix(schemaName, kind, objectName) {
237
+ return `sm:${joinKeyParts(schemaName, kind, objectName)}`;
238
+ }
159
239
  /**
160
240
  * Build a schema migration key.
161
- * Format: sm:{schema}.{table}:{version}
241
+ * Format: sm:{n}:{schema}{n}:{kind}{n}:{object}{version_padded_10}
242
+ *
243
+ * `kind` distinguishes the two things `objectName` can be: for an index
244
+ * migration it is the INDEX name, for every other migration type the TABLE name.
245
+ * Without it a table `orders` and an index `orders` share one version counter,
246
+ * and a concurrent migration of one silently suppresses the other on the
247
+ * receiving replica.
248
+ *
249
+ * The version is fixed-width zero-padded (not length-prefixed) so migrations of
250
+ * one object sort by version within that object's prefix.
162
251
  */
163
- export function buildSchemaMigrationKey(schemaName, tableName, version) {
164
- assertKeyableIdentifiers(schemaName, tableName);
165
- return encoder.encode(`sm:${schemaName}.${tableName}${SEPARATOR}${version.toString().padStart(10, '0')}`);
252
+ export function buildSchemaMigrationKey(schemaName, kind, objectName, version) {
253
+ assertKeyableIdentifiers(schemaName, objectName);
254
+ const versionPart = version.toString().padStart(10, '0');
255
+ return encoder.encode(`${buildSchemaMigrationPrefix(schemaName, kind, objectName)}${versionPart}`);
256
+ }
257
+ /**
258
+ * Build a prefix over one `(schema, table)` under `prefix`. Exact: each
259
+ * component's length is carried by the component itself, so no other
260
+ * `(schema, table)` pair can share these bytes (see {@link joinKeyParts}).
261
+ */
262
+ function buildTablePrefix(prefix, schemaName, tableName) {
263
+ return encoder.encode(`${prefix}${joinKeyParts(schemaName, tableName)}`);
264
+ }
265
+ /** Scan bounds over an exact byte prefix. */
266
+ function prefixBounds(prefix) {
267
+ return { gte: prefix, lt: incrementLastByte(prefix) };
166
268
  }
167
269
  /**
168
270
  * Build scan bounds for all column versions of a table.
169
- * Returns keys to scan cv:{schema}.{table}:*
271
+ * Returns keys to scan cv:{n}:{schema}{n}:{table}*
170
272
  */
171
273
  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
- };
274
+ return prefixBounds(buildTablePrefix('cv:', schemaName, tableName));
177
275
  }
178
276
  /**
179
277
  * 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).
278
+ * `cv:{n}:{schema}{n}:{table}{n}:{identity}`.
186
279
  */
187
- export function buildColumnVersionRowPrefix(schemaName, tableName, identity) {
188
- return `cv:${schemaName}.${tableName}${SEPARATOR}${identity.length}${SEPARATOR}${identity}${SEPARATOR}`;
280
+ function buildColumnVersionRowPrefix(schemaName, tableName, identity) {
281
+ return `cv:${joinKeyParts(schemaName, tableName, identity)}`;
189
282
  }
190
283
  /**
191
284
  * Build scan bounds for all column versions of a row.
192
- * Returns keys to scan cv:{schema}.{table}:{identity_length}:{identity}:*
285
+ * Returns keys to scan cv:{n}:{schema}{n}:{table}{n}:{identity}*
193
286
  */
194
287
  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
- };
288
+ return prefixBounds(encoder.encode(buildColumnVersionRowPrefix(schemaName, tableName, identity)));
200
289
  }
201
290
  /**
202
291
  * Build scan bounds for all tombstones in a table.
203
292
  */
204
293
  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
- };
294
+ return prefixBounds(buildTablePrefix('tb:', schemaName, tableName));
210
295
  }
211
296
  /**
212
- * Build scan bounds for all schema migrations of a table.
297
+ * Build scan bounds for all schema migrations of one object — a table's or an
298
+ * index's, per `kind`. A table and a same-named index have disjoint bounds.
213
299
  */
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
- };
300
+ export function buildSchemaMigrationScanBounds(schemaName, kind, objectName) {
301
+ return prefixBounds(encoder.encode(buildSchemaMigrationPrefix(schemaName, kind, objectName)));
220
302
  }
221
303
  /**
222
304
  * Increment the last byte of a key to create an exclusive upper bound.
@@ -260,101 +342,60 @@ export function buildAllSchemaMigrationsScanBounds() {
260
342
  lt: incrementLastByte(SYNC_KEY_PREFIX.SCHEMA_MIGRATION),
261
343
  };
262
344
  }
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
345
  /**
282
346
  * Parse a column version key to extract components.
283
- * Key format: cv:{schema}.{table}:{identity_length}:{identity}:{column}
347
+ * Key format: cv:{n}:{schema}{n}:{table}{n}:{identity}{n}:{column}
284
348
  *
285
349
  * Returns the pk IDENTITY string — the identity is lossy and cannot be decoded
286
350
  * 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.
351
+ * The per-component length prefixes make every split unambiguous regardless of
352
+ * what characters any component contains.
289
353
  */
290
354
  export function parseColumnVersionKey(key) {
291
- const keyStr = new TextDecoder().decode(key);
355
+ const keyStr = decoder.decode(key);
292
356
  if (!keyStr.startsWith('cv:'))
293
357
  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)
303
- return null;
304
- const table = afterDot.slice(0, firstColon);
305
- const split = splitLengthPrefixedIdentity(afterDot.slice(firstColon + 1));
306
- if (!split || !split.remainder.startsWith(SEPARATOR))
358
+ const split = splitKeyParts(keyStr.slice(3), 4);
359
+ if (!split || split.remainder.length !== 0)
307
360
  return null;
308
- return { schema, table, identity: split.identity, column: split.remainder.slice(1) };
361
+ const [schema, table, identity, column] = split.parts;
362
+ return { schema, table, identity, column };
309
363
  }
310
364
  /**
311
365
  * Parse a tombstone key to extract components.
312
- * Key format: tb:{schema}.{table}:{identity}
366
+ * Key format: tb:{n}:{schema}{n}:{table}{n}:{identity}
313
367
  *
314
368
  * Returns the pk IDENTITY string; the raw pk lives in the record VALUE
315
369
  * (`Tombstone.pk`).
316
370
  */
317
371
  export function parseTombstoneKey(key) {
318
- const keyStr = new TextDecoder().decode(key);
372
+ const keyStr = decoder.decode(key);
319
373
  if (!keyStr.startsWith('tb:'))
320
374
  return null;
321
- // tb:{schema}.{table}:{identity}
322
- const rest = keyStr.slice(3); // Remove 'tb:'
323
- const firstDot = rest.indexOf('.');
324
- if (firstDot === -1)
375
+ const split = splitKeyParts(keyStr.slice(3), 3);
376
+ if (!split || split.remainder.length !== 0)
325
377
  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)
330
- return null;
331
- const table = afterDot.slice(0, firstColon);
332
- return { schema, table, identity: afterDot.slice(firstColon + 1) };
378
+ const [schema, table, identity] = split.parts;
379
+ return { schema, table, identity };
333
380
  }
334
381
  /**
335
382
  * Parse a schema migration key to extract components.
336
- * Key format: sm:{schema}.{table}:{version}
383
+ * Key format: sm:{n}:{schema}{n}:{kind}{n}:{object}{version_padded_10}
384
+ *
385
+ * `table` carries the object name whatever its kind — for an `index` key it is
386
+ * the index name, not the table the index is on (which the key never held).
337
387
  */
338
388
  export function parseSchemaMigrationKey(key) {
339
- const keyStr = new TextDecoder().decode(key);
389
+ const keyStr = decoder.decode(key);
340
390
  if (!keyStr.startsWith('sm:'))
341
391
  return null;
342
- // sm:{schema}.{table}:{version}
343
- const rest = keyStr.slice(3); // Remove 'sm:'
344
- const firstDot = rest.indexOf('.');
345
- if (firstDot === -1)
392
+ const split = splitKeyParts(keyStr.slice(3), 3);
393
+ if (!split || !/^\d+$/.test(split.remainder))
346
394
  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)
395
+ const [schema, kind, table] = split.parts;
396
+ if (kind !== 'table' && kind !== 'index')
351
397
  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))
356
- return null;
357
- return { schema, table, version };
398
+ return { schema, kind, table, version: parseInt(split.remainder, 10) };
358
399
  }
359
400
  /**
360
401
  * Serialize an HLC to a sortable key component (30 bytes, big-endian).
@@ -387,20 +428,22 @@ export function deserializeHLCFromKey(buffer) {
387
428
  }
388
429
  /**
389
430
  * Build a change log key.
390
- * Format: cl:{hlc_bytes}{type_byte}{schema}.{table}:{identity_length}:{identity}[:{column}]
431
+ * Format: cl:{hlc_bytes}{type_byte}{n}:{schema}{n}:{table}{n}:{identity}[{n}:{column}]
391
432
  *
392
433
  * The HLC comes first to enable efficient range scans by time.
393
434
  * type_byte: 0x01 for column change, 0x02 for delete
394
- * The identity is length-prefixed for the same reason as {@link buildColumnVersionKey}.
435
+ * Every text component is length-prefixed — see {@link joinKeyParts}.
395
436
  */
396
437
  export function buildChangeLogKey(hlc, entryType, schemaName, tableName, identity, column) {
397
438
  assertKeyableIdentifiers(schemaName, tableName, ...(column !== undefined ? [column] : []));
398
439
  const hlcBytes = serializeHLCForKey(hlc);
399
440
  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}`;
441
+ // `!== undefined`, not truthiness: a zero-length column name must still emit its
442
+ // (empty) component, or the builder would write 3 parts where `parseChangeLogKey`
443
+ // demands 4 for a `column` entry and the record would read back as unparseable.
444
+ const suffix = column !== undefined
445
+ ? joinKeyParts(schemaName, tableName, identity, column)
446
+ : joinKeyParts(schemaName, tableName, identity);
404
447
  const suffixBytes = encoder.encode(suffix);
405
448
  // cl: (3) + hlc (30) + type (1) + suffix
406
449
  const key = new Uint8Array(3 + 30 + 1 + suffixBytes.length);
@@ -456,40 +499,28 @@ export function parseChangeLogKey(key) {
456
499
  // Minimum: cl: (3) + hlc (30) + type (1) + some suffix
457
500
  if (key.length < 35)
458
501
  return null;
459
- const prefixStr = new TextDecoder().decode(key.slice(0, 3));
502
+ const prefixStr = decoder.decode(key.slice(0, 3));
460
503
  if (prefixStr !== 'cl:')
461
504
  return null;
462
505
  const hlcBytes = key.slice(3, 33);
463
506
  const hlc = deserializeHLCFromKey(hlcBytes);
464
507
  const typeByte = key[33];
465
508
  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)
509
+ const suffixStr = decoder.decode(key.slice(34));
510
+ // Parse suffix: {n}:{schema}{n}:{table}{n}:{identity}[{n}:{column}]
511
+ const split = splitKeyParts(suffixStr, entryType === 'column' ? 4 : 3);
512
+ if (!split || split.remainder.length !== 0)
479
513
  return null;
514
+ const [schema, table, identity] = split.parts;
480
515
  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) };
516
+ return { hlc, entryType, schema, table, identity, column: split.parts[3] };
484
517
  }
485
518
  // Delete entry - no column
486
- if (split.remainder.length !== 0)
487
- return null;
488
- return { hlc, entryType, schema, table, identity: split.identity };
519
+ return { hlc, entryType, schema, table, identity };
489
520
  }
490
521
  /**
491
522
  * 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}]
523
+ * Format: qt:{n}:{schema}{n}:{table} + hlc_bytes(30) + type_byte(1) + {n}:{raw_identity}[{n}:{column}]
493
524
  *
494
525
  * Unlike the change log (`cl:`), the table prefix comes BEFORE the HLC so the
495
526
  * range scans by `(schema, table)` for operator inspection. The HLC + type + pk
@@ -507,13 +538,13 @@ export function parseChangeLogKey(key) {
507
538
  */
508
539
  export function buildQuarantineKey(schemaName, tableName, hlc, entryType, pk, column) {
509
540
  assertKeyableIdentifiers(schemaName, tableName, ...(column !== undefined ? [column] : []));
510
- const prefixBytes = encoder.encode(`qt:${schemaName}.${tableName}${SEPARATOR}`);
541
+ const prefixBytes = buildTablePrefix('qt:', schemaName, tableName);
511
542
  const hlcBytes = serializeHLCForKey(hlc);
512
543
  const typeByte = entryType === 'column' ? 0x01 : 0x02;
513
544
  const rawIdentity = encodeRawPkIdentity(pk);
514
- const suffix = column
515
- ? `${SEPARATOR}${rawIdentity}${SEPARATOR}${column}`
516
- : `${SEPARATOR}${rawIdentity}`;
545
+ const suffix = column !== undefined
546
+ ? joinKeyParts(rawIdentity, column)
547
+ : joinKeyParts(rawIdentity);
517
548
  const suffixBytes = encoder.encode(suffix);
518
549
  const key = new Uint8Array(prefixBytes.length + 30 + 1 + suffixBytes.length);
519
550
  let offset = 0;
@@ -529,17 +560,17 @@ export function buildQuarantineKey(schemaName, tableName, hlc, entryType, pk, co
529
560
  /**
530
561
  * Build scan bounds over quarantine entries.
531
562
  * - both `schemaName` and `tableName`: a single table's held changes.
532
- * - `schemaName` only: all held changes in that schema.
563
+ * - `schemaName` only: all held changes in that schema — `qt:{n}:{schema}` is
564
+ * exact, since the schema's own length prefix terminates it (a different
565
+ * schema differs in either that length or its text).
533
566
  * - neither: every quarantine entry (the GC sweep).
534
567
  */
535
568
  export function buildQuarantineScanBounds(schemaName, tableName) {
536
569
  if (schemaName !== undefined && tableName !== undefined) {
537
- const prefix = encoder.encode(`qt:${schemaName}.${tableName}${SEPARATOR}`);
538
- return { gte: prefix, lt: incrementLastByte(prefix) };
570
+ return prefixBounds(buildTablePrefix('qt:', schemaName, tableName));
539
571
  }
540
572
  if (schemaName !== undefined) {
541
- const prefix = encoder.encode(`qt:${schemaName}.`);
542
- return { gte: prefix, lt: incrementLastByte(prefix) };
573
+ return prefixBounds(encoder.encode(`qt:${joinKeyParts(schemaName)}`));
543
574
  }
544
575
  return {
545
576
  gte: SYNC_KEY_PREFIX.QUARANTINE,
@@ -548,7 +579,7 @@ export function buildQuarantineScanBounds(schemaName, tableName) {
548
579
  }
549
580
  /**
550
581
  * Build a basis-table lifecycle key.
551
- * Format: bl:{schema}.{table} (both lowercased — basis relations are keyed
582
+ * Format: bl:{n}:{schema}{n}:{table} (both lowercased — basis relations are keyed
552
583
  * lowercased throughout the lens deployment snapshot, so the lifecycle key
553
584
  * matches `relationBacking` / `derivation.sourceTables` keys exactly).
554
585
  *
@@ -558,7 +589,7 @@ export function buildQuarantineScanBounds(schemaName, tableName) {
558
589
  */
559
590
  export function buildBasisLifecycleKey(schemaName, tableName) {
560
591
  assertKeyableIdentifiers(schemaName, tableName);
561
- return encoder.encode(`bl:${schemaName.toLowerCase()}.${tableName.toLowerCase()}`);
592
+ return buildTablePrefix('bl:', schemaName.toLowerCase(), tableName.toLowerCase());
562
593
  }
563
594
  /**
564
595
  * Build scan bounds over all basis-table lifecycle records (operator
@@ -571,4 +602,28 @@ export function buildAllBasisLifecycleScanBounds() {
571
602
  lt: incrementLastByte(SYNC_KEY_PREFIX.BASIS_LIFECYCLE),
572
603
  };
573
604
  }
605
+ /**
606
+ * Build a snapshot checkpoint key — the resume position of one streaming
607
+ * snapshot apply.
608
+ * Format: sc:{snapshotId}
609
+ *
610
+ * Unlike `cv:` / `tb:` / `cl:`, this suffix is NOT length-prefixed and has no
611
+ * `parse…Key` counterpart: it is a single UUID, which cannot contain the `:`
612
+ * separator, so nothing can shift the split. Callers that need the id back read
613
+ * the `snapshotId` field of the record VALUE (see `snapshot-stream.ts`).
614
+ */
615
+ export function buildSnapshotCheckpointKey(snapshotId) {
616
+ return encoder.encode(`sc:${snapshotId}`);
617
+ }
618
+ /**
619
+ * Build scan bounds over every saved snapshot checkpoint. A non-empty scan means
620
+ * a streaming snapshot apply cleared local metadata and never reached its footer,
621
+ * so this replica's data is partial (see `listSnapshotCheckpoints`).
622
+ */
623
+ export function buildAllSnapshotCheckpointScanBounds() {
624
+ return {
625
+ gte: SYNC_KEY_PREFIX.SNAPSHOT_CHECKPOINT,
626
+ lt: incrementLastByte(SYNC_KEY_PREFIX.SNAPSHOT_CHECKPOINT),
627
+ };
628
+ }
574
629
  //# sourceMappingURL=keys.js.map
@@ -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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"}