hikoutei 0.10.15-dev → 0.10.17-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/storage/sqlite/migrateSchema.d.ts.map +1 -1
- package/dist/storage/sqlite/migrateSchema.js +16 -1
- package/dist/storage/sqlite/migrateSchema.js.map +1 -1
- package/dist/storage/sqlite/schema.d.ts +21 -0
- package/dist/storage/sqlite/schema.d.ts.map +1 -1
- package/dist/storage/sqlite/schema.js +27 -0
- package/dist/storage/sqlite/schema.js.map +1 -1
- package/dist/storage/sync/outbound/reconciliationSql.d.ts +81 -0
- package/dist/storage/sync/outbound/reconciliationSql.d.ts.map +1 -1
- package/dist/storage/sync/outbound/reconciliationSql.js +139 -1
- package/dist/storage/sync/outbound/reconciliationSql.js.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/CleanupScanner.d.ts.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/CleanupScanner.js +8 -3
- package/dist/sync-engine/sync/outbound/reconciliation/CleanupScanner.js.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/ReconciliationScanner.d.ts.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/ReconciliationScanner.js +103 -53
- package/dist/sync-engine/sync/outbound/reconciliation/ReconciliationScanner.js.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/cleanup.d.ts +110 -0
- package/dist/sync-engine/sync/outbound/reconciliation/cleanup.d.ts.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/cleanup.js +307 -1
- package/dist/sync-engine/sync/outbound/reconciliation/cleanup.js.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/diff.d.ts +51 -7
- package/dist/sync-engine/sync/outbound/reconciliation/diff.d.ts.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/diff.js +53 -43
- package/dist/sync-engine/sync/outbound/reconciliation/diff.js.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/shared.d.ts +33 -11
- package/dist/sync-engine/sync/outbound/reconciliation/shared.d.ts.map +1 -1
- package/dist/sync-engine/sync/outbound/reconciliation/shared.js +93 -58
- package/dist/sync-engine/sync/outbound/reconciliation/shared.js.map +1 -1
- package/package.json +1 -1
|
@@ -52,12 +52,31 @@ import { computeSyncVisibleHash, } from "../../../../contracts/sheets/syncSheets
|
|
|
52
52
|
import { SYNC_PROJECTIONS } from "../../../../contracts/sheets/constants.js";
|
|
53
53
|
import { createCandidateReconcileEffect, createUserInputDeleteEffect, } from "../../../../sync/outbound/projection/ProjectionEffectFactory.js";
|
|
54
54
|
import { normalizedCellIdentity } from "./diff.js";
|
|
55
|
-
import { decodeNormalizedCell } from "./shared.js";
|
|
55
|
+
import { decodeNormalizedCell, RECONCILIATION_SCAN_CHUNK_SIZE, RECONCILIATION_SCAN_ENTITY_PAGE_SIZE, readActiveEntityPageWithSql, readEntityBindingsWithSql, readEntityFieldsWithSql, } from "./shared.js";
|
|
56
56
|
const READ_CLEANUP_BINDINGS_SQL = `
|
|
57
57
|
SELECT row_binding_id, anchor_reference, state
|
|
58
58
|
FROM row_binding
|
|
59
59
|
WHERE logical_sheet_id = ?
|
|
60
60
|
`;
|
|
61
|
+
/**
|
|
62
|
+
* One keyset page of row bindings in `row_binding_id` order. The
|
|
63
|
+
* `(logical_sheet_id, row_binding_id)` covering index (`row_binding_scan_idx`)
|
|
64
|
+
* serves each page as a bounded index range scan with no temp-b-tree sort.
|
|
65
|
+
*/
|
|
66
|
+
const READ_CLEANUP_BINDINGS_PAGE_SQL = `
|
|
67
|
+
SELECT row_binding_id, anchor_reference, state
|
|
68
|
+
FROM row_binding
|
|
69
|
+
WHERE logical_sheet_id = ? AND row_binding_id > ?
|
|
70
|
+
ORDER BY row_binding_id
|
|
71
|
+
LIMIT ?
|
|
72
|
+
`;
|
|
73
|
+
const READ_CLEANUP_BINDINGS_FIRST_PAGE_SQL = `
|
|
74
|
+
SELECT row_binding_id, anchor_reference, state
|
|
75
|
+
FROM row_binding
|
|
76
|
+
WHERE logical_sheet_id = ?
|
|
77
|
+
ORDER BY row_binding_id
|
|
78
|
+
LIMIT ?
|
|
79
|
+
`;
|
|
61
80
|
/**
|
|
62
81
|
* Canonical user-owned projection values for every active binding with an
|
|
63
82
|
* entity. The anchor_reference is the User_Input row-id anchor of the bound
|
|
@@ -82,6 +101,14 @@ const READ_CLEANUP_CANONICAL_SQL = `
|
|
|
82
101
|
WHERE entity.status = 'active'
|
|
83
102
|
ORDER BY entity.entity_id, field.field_name
|
|
84
103
|
`;
|
|
104
|
+
/**
|
|
105
|
+
* Whole-entity canonical pages are assembled from the storage-owned
|
|
106
|
+
* entity-batch primitives (same bounded access path as the desired-state
|
|
107
|
+
* pages: PK-ordered entities, PK-prefix fields, covering binding seeks).
|
|
108
|
+
* A flat cross-table keyset cannot page here: duplicate `(entity, field)`
|
|
109
|
+
* keys across several active bindings of one entity would be skipped by a
|
|
110
|
+
* `(entity_id, field_name)` cursor, silently dropping a binding's fields.
|
|
111
|
+
*/
|
|
85
112
|
/**
|
|
86
113
|
* Stable binding-keyed stream target id shared with flush projections and
|
|
87
114
|
* resolution reconciles. Bound-row cleanup corrections must stream under the
|
|
@@ -163,6 +190,285 @@ export async function readCleanupEvidenceWithSql(sql, logicalSheetId, physicalSh
|
|
|
163
190
|
export async function readCleanupEvidence(storage, logicalSheetId, physicalSheetId) {
|
|
164
191
|
return storage.read(({ sql }) => readCleanupEvidenceWithSql(sql, logicalSheetId, physicalSheetId));
|
|
165
192
|
}
|
|
193
|
+
/** Reads one bounded page of row bindings in `row_binding_id` order. */
|
|
194
|
+
export function readCleanupBindingsChunkWithSql(sql, logicalSheetId, after, limit = RECONCILIATION_SCAN_CHUNK_SIZE) {
|
|
195
|
+
const query = after === undefined
|
|
196
|
+
? READ_CLEANUP_BINDINGS_FIRST_PAGE_SQL
|
|
197
|
+
: READ_CLEANUP_BINDINGS_PAGE_SQL;
|
|
198
|
+
const parameters = after === undefined
|
|
199
|
+
? [logicalSheetId, limit]
|
|
200
|
+
: [logicalSheetId, after.rowBindingId, limit];
|
|
201
|
+
return sql.all(query, [...parameters]).then((rows) => rows.map((row) => ({
|
|
202
|
+
rowBindingId: row.row_binding_id,
|
|
203
|
+
anchorReference: row.anchor_reference,
|
|
204
|
+
state: row.state,
|
|
205
|
+
})));
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Reads one bounded chunk of whole entities as flat canonical user-owned
|
|
209
|
+
* rows, in global entity order. Pass no cursor for the first chunk, then
|
|
210
|
+
* `{ entityId }` of the last entity paged; an empty chunk (or
|
|
211
|
+
* `entityCount < limit`) ends the scan. Only `limit` entities are ever
|
|
212
|
+
* materialized per call. Multi-binding entities emit one row per
|
|
213
|
+
* (binding, field) with the smallest `row_binding_id` first, so no
|
|
214
|
+
* binding's fields can be skipped across chunks by construction.
|
|
215
|
+
*/
|
|
216
|
+
export async function readCleanupCanonicalChunkWithSql(sql, logicalSheetId, after, limit = RECONCILIATION_SCAN_ENTITY_PAGE_SIZE) {
|
|
217
|
+
const entities = await readActiveEntityPageWithSql(sql, after?.entityId, limit);
|
|
218
|
+
const rows = [];
|
|
219
|
+
for (const entity of entities) {
|
|
220
|
+
const [bindings, fields] = await Promise.all([
|
|
221
|
+
readEntityBindingsWithSql(sql, logicalSheetId, entity.entityId),
|
|
222
|
+
readEntityFieldsWithSql(sql, entity.entityId, "user"),
|
|
223
|
+
]);
|
|
224
|
+
for (const binding of bindings) {
|
|
225
|
+
for (const field of fields) {
|
|
226
|
+
rows.push({
|
|
227
|
+
entity_id: entity.entityId,
|
|
228
|
+
row_binding_id: binding.rowBindingId,
|
|
229
|
+
anchor_reference: binding.anchorReference,
|
|
230
|
+
field_name: field.fieldName,
|
|
231
|
+
normalized_value: field.normalizedValue,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
const lastEntity = entities[entities.length - 1];
|
|
237
|
+
return {
|
|
238
|
+
rows,
|
|
239
|
+
entityCount: entities.length,
|
|
240
|
+
lastEntityId: lastEntity === undefined ? undefined : lastEntity.entityId,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Groups one ordered page of canonical rows into completed canonical rows.
|
|
245
|
+
*
|
|
246
|
+
* A page may split an entity's fields across the boundary, and several
|
|
247
|
+
* bindings may share one entity, so the trailing entity is returned as
|
|
248
|
+
* `carry` (all of its bindings) and must seed the next call; only the flush
|
|
249
|
+
* after the last page finalizes it. Completed rows hash exactly like the
|
|
250
|
+
* full-load grouping, in global entity order.
|
|
251
|
+
*/
|
|
252
|
+
export function assembleCleanupCanonicalChunk(rows, carry) {
|
|
253
|
+
const completed = [];
|
|
254
|
+
let currentEntityId = carry?.entityId;
|
|
255
|
+
let current = new Map(carry?.partials);
|
|
256
|
+
const finalizeCurrent = () => {
|
|
257
|
+
for (const partial of current.values()) {
|
|
258
|
+
completed.push(toCleanupCanonicalRow(partial));
|
|
259
|
+
}
|
|
260
|
+
current = new Map();
|
|
261
|
+
currentEntityId = undefined;
|
|
262
|
+
};
|
|
263
|
+
for (const row of rows) {
|
|
264
|
+
if (currentEntityId !== undefined && currentEntityId !== row.entity_id) {
|
|
265
|
+
finalizeCurrent();
|
|
266
|
+
}
|
|
267
|
+
currentEntityId = row.entity_id;
|
|
268
|
+
const existing = current.get(row.row_binding_id);
|
|
269
|
+
if (existing === undefined) {
|
|
270
|
+
current.set(row.row_binding_id, {
|
|
271
|
+
entityId: row.entity_id,
|
|
272
|
+
rowBindingId: row.row_binding_id,
|
|
273
|
+
anchorReference: row.anchor_reference,
|
|
274
|
+
fields: { [row.field_name]: decodeNormalizedCell(row.normalized_value) },
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
existing.fields[row.field_name] = decodeNormalizedCell(row.normalized_value);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
return {
|
|
282
|
+
completed,
|
|
283
|
+
carry: currentEntityId === undefined ? undefined : {
|
|
284
|
+
entityId: currentEntityId,
|
|
285
|
+
partials: current,
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/** Finalizes the trailing entity's canonical rows after the last page. */
|
|
290
|
+
export function flushCleanupCanonicalCarry(carry) {
|
|
291
|
+
if (carry === undefined)
|
|
292
|
+
return [];
|
|
293
|
+
return [...carry.partials.values()].map(toCleanupCanonicalRow);
|
|
294
|
+
}
|
|
295
|
+
function toCleanupCanonicalRow(partial) {
|
|
296
|
+
return {
|
|
297
|
+
entityId: partial.entityId,
|
|
298
|
+
rowBindingId: partial.rowBindingId,
|
|
299
|
+
anchorReference: partial.anchorReference,
|
|
300
|
+
fields: partial.fields,
|
|
301
|
+
fieldRevisionHash: computeSyncVisibleHash(partial.fields),
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Groups decoded snapshot rows by anchor once per scan. The maps hold
|
|
306
|
+
* references to the decoded rows; no snapshot data is copied.
|
|
307
|
+
*/
|
|
308
|
+
export function buildCleanupSnapshotIndex(rows) {
|
|
309
|
+
const groupsByAnchor = new Map();
|
|
310
|
+
for (const row of rows) {
|
|
311
|
+
if (row.anchor === null)
|
|
312
|
+
continue;
|
|
313
|
+
const group = groupsByAnchor.get(row.anchor) ?? [];
|
|
314
|
+
group.push(row);
|
|
315
|
+
groupsByAnchor.set(row.anchor, group);
|
|
316
|
+
}
|
|
317
|
+
const duplicateAnchors = new Set();
|
|
318
|
+
for (const [anchor, group] of groupsByAnchor) {
|
|
319
|
+
if (group.length > 1)
|
|
320
|
+
duplicateAnchors.add(anchor);
|
|
321
|
+
}
|
|
322
|
+
return { groupsByAnchor, duplicateAnchors };
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Streams binding/canonical/candidate evidence in keyset pages inside the
|
|
326
|
+
* caller's SQL context.
|
|
327
|
+
*
|
|
328
|
+
* Only one page of canonical rows is materialized at a time; completed
|
|
329
|
+
* canonical rows are rewrite-checked against the snapshot index immediately
|
|
330
|
+
* and dropped unless drifted. Retained state is small bindings, candidate
|
|
331
|
+
* hashes, canonical anchor keys, and drifted rewrite targets — never the
|
|
332
|
+
* full canonical table.
|
|
333
|
+
*/
|
|
334
|
+
export async function readCleanupStreamEvidenceWithSql(sql, logicalSheetId, physicalSheetId, snapshot) {
|
|
335
|
+
const candidateRows = await sql.all(READ_CLEANUP_CANDIDATE_HASHES_SQL, [physicalSheetId]);
|
|
336
|
+
const candidateHashes = new Map(candidateRows.map((row) => [
|
|
337
|
+
row.row_binding_id,
|
|
338
|
+
row.active_candidate_hash,
|
|
339
|
+
]));
|
|
340
|
+
const bindingsByAnchor = new Map();
|
|
341
|
+
let bindingsAfter;
|
|
342
|
+
for (;;) {
|
|
343
|
+
const page = await readCleanupBindingsChunkWithSql(sql, logicalSheetId, bindingsAfter);
|
|
344
|
+
if (page.length === 0)
|
|
345
|
+
break;
|
|
346
|
+
for (const binding of page)
|
|
347
|
+
bindingsByAnchor.set(binding.anchorReference, binding);
|
|
348
|
+
const last = page[page.length - 1];
|
|
349
|
+
if (last === undefined)
|
|
350
|
+
break;
|
|
351
|
+
bindingsAfter = { rowBindingId: last.rowBindingId };
|
|
352
|
+
if (page.length < RECONCILIATION_SCAN_CHUNK_SIZE)
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
const canonicalAnchors = new Set();
|
|
356
|
+
const rewriteByAnchor = new Map();
|
|
357
|
+
let canonicalAfter;
|
|
358
|
+
let carry;
|
|
359
|
+
for (;;) {
|
|
360
|
+
const chunk = await readCleanupCanonicalChunkWithSql(sql, logicalSheetId, canonicalAfter);
|
|
361
|
+
// Whole-entity chunks: the cursor is the last entity paged, including
|
|
362
|
+
// binding-less ones that emit no rows, so no entity's rows can be
|
|
363
|
+
// skipped or repeated across chunks.
|
|
364
|
+
if (chunk.entityCount === 0 || chunk.lastEntityId === undefined)
|
|
365
|
+
break;
|
|
366
|
+
canonicalAfter = { entityId: chunk.lastEntityId };
|
|
367
|
+
const assembled = assembleCleanupCanonicalChunk(chunk.rows, carry);
|
|
368
|
+
carry = assembled.carry;
|
|
369
|
+
for (const canonical of assembled.completed) {
|
|
370
|
+
canonicalAnchors.add(canonical.anchorReference);
|
|
371
|
+
const rewrite = classifyCleanupRewrite(canonical, snapshot, candidateHashes);
|
|
372
|
+
if (rewrite !== undefined)
|
|
373
|
+
rewriteByAnchor.set(canonical.anchorReference, rewrite);
|
|
374
|
+
}
|
|
375
|
+
if (chunk.entityCount < RECONCILIATION_SCAN_ENTITY_PAGE_SIZE)
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
for (const canonical of flushCleanupCanonicalCarry(carry)) {
|
|
379
|
+
canonicalAnchors.add(canonical.anchorReference);
|
|
380
|
+
const rewrite = classifyCleanupRewrite(canonical, snapshot, candidateHashes);
|
|
381
|
+
if (rewrite !== undefined)
|
|
382
|
+
rewriteByAnchor.set(canonical.anchorReference, rewrite);
|
|
383
|
+
}
|
|
384
|
+
return { bindingsByAnchor, candidateHashes, canonicalAnchors, rewriteByAnchor };
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Rewrite-checks one completed canonical row against its snapshot group.
|
|
388
|
+
*
|
|
389
|
+
* Mirrors the bound-row branch of `classifyCleanupRows`: duplicated-anchor
|
|
390
|
+
* groups defer (their delete is planned by the surplus pass), candidate-
|
|
391
|
+
* protected bindings converge through resolution, field-less canonical rows
|
|
392
|
+
* belong to the lifecycle pipeline, and matching rows are idempotent.
|
|
393
|
+
* Returns the rewrite target only for a drifted, plannable row.
|
|
394
|
+
*/
|
|
395
|
+
function classifyCleanupRewrite(canonical, snapshot, candidateHashes) {
|
|
396
|
+
if (snapshot.duplicateAnchors.has(canonical.anchorReference))
|
|
397
|
+
return undefined;
|
|
398
|
+
if (Object.keys(canonical.fields).length === 0)
|
|
399
|
+
return undefined;
|
|
400
|
+
if (candidateHashes.has(canonical.rowBindingId))
|
|
401
|
+
return undefined;
|
|
402
|
+
const group = snapshot.groupsByAnchor.get(canonical.anchorReference);
|
|
403
|
+
const row = group?.[0];
|
|
404
|
+
if (row === undefined)
|
|
405
|
+
return undefined;
|
|
406
|
+
if (observedCanonicalHash(row, canonical.fields) === canonical.fieldRevisionHash) {
|
|
407
|
+
return undefined;
|
|
408
|
+
}
|
|
409
|
+
return {
|
|
410
|
+
kind: "rewrite",
|
|
411
|
+
row,
|
|
412
|
+
canonicalFields: canonical.fields,
|
|
413
|
+
rowBindingId: canonical.rowBindingId,
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Classifies snapshot rows into correction targets in full-load order.
|
|
418
|
+
*
|
|
419
|
+
* Mirrors `classifyCleanupRows` decision-for-decision (duplicate deletes
|
|
420
|
+
* first in first-seen anchor order, then snapshot row order for rewrites
|
|
421
|
+
* and surplus deletes) while reading rewrites from the streamed evidence:
|
|
422
|
+
* bound non-duplicate anchors resolve through `rewriteByAnchor`, every
|
|
423
|
+
* other row through the binding map. The target sequence is identical to
|
|
424
|
+
* the full-load scan, so repair effect ids stay stable across the switch.
|
|
425
|
+
*/
|
|
426
|
+
export function classifyCleanupStreamTargets(rows, snapshot, evidence) {
|
|
427
|
+
const targets = [];
|
|
428
|
+
const handled = new Set();
|
|
429
|
+
for (const [anchor, group] of snapshot.groupsByAnchor) {
|
|
430
|
+
if (group.length < 2)
|
|
431
|
+
continue;
|
|
432
|
+
const resolvable = lowestRow(group);
|
|
433
|
+
const binding = evidence.bindingsByAnchor.get(anchor);
|
|
434
|
+
if (binding !== undefined && evidence.candidateHashes.has(binding.rowBindingId)) {
|
|
435
|
+
for (const row of group)
|
|
436
|
+
handled.add(row.rowNumber);
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
targets.push({
|
|
440
|
+
kind: "duplicate",
|
|
441
|
+
row: resolvable,
|
|
442
|
+
...(binding === undefined ? {} : { rowBindingId: binding.rowBindingId }),
|
|
443
|
+
});
|
|
444
|
+
for (const row of group)
|
|
445
|
+
handled.add(row.rowNumber);
|
|
446
|
+
}
|
|
447
|
+
for (const row of rows) {
|
|
448
|
+
if (row.anchor === null || handled.has(row.rowNumber))
|
|
449
|
+
continue;
|
|
450
|
+
if (evidence.canonicalAnchors.has(row.anchor)) {
|
|
451
|
+
const rewrite = evidence.rewriteByAnchor.get(row.anchor);
|
|
452
|
+
if (rewrite !== undefined)
|
|
453
|
+
targets.push(rewrite);
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
const binding = evidence.bindingsByAnchor.get(row.anchor);
|
|
457
|
+
if (binding !== undefined) {
|
|
458
|
+
if (binding.state === "candidate" &&
|
|
459
|
+
row.identity === undefined &&
|
|
460
|
+
!evidence.candidateHashes.has(binding.rowBindingId)) {
|
|
461
|
+
targets.push({ kind: "empty_id", row, rowBindingId: binding.rowBindingId });
|
|
462
|
+
}
|
|
463
|
+
continue;
|
|
464
|
+
}
|
|
465
|
+
targets.push({
|
|
466
|
+
kind: row.identity === undefined ? "empty_id" : "extra",
|
|
467
|
+
row,
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
return targets;
|
|
471
|
+
}
|
|
166
472
|
function groupCanonicalRows(rows) {
|
|
167
473
|
const byBinding = new Map();
|
|
168
474
|
for (const row of rows) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AAEjF,OAAO,EACL,cAAc,GACf,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EACL,sBAAsB,GAEvB,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EACL,8BAA8B,EAC9B,2BAA2B,GAC5B,MAAM,uEAAuE,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAgGnD,MAAM,yBAAyB,GAAG;;;;CAIjC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,0BAA0B,GAAG;;;;;;;;;;;;;;;;;CAiBlC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,eAAuB,EAAE,YAAoB;IACxF,OAAO,kBAAkB,eAAe,IAAI,YAAY,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,iCAAiC,GAAG;;;;;;;;;;;;CAYzC,CAAC;AAEF;;;;GAIG;AACH,MAAM,2CAA2C,GAAG;;;;CAInD,CAAC;AAEF,MAAM,8BAA8B,GAAG;;;;;;CAMtC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,GAAgB,EAChB,eAAuB;IAEvB,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,GAAG,CACjC,iCAAiC,EACjC,CAAC,eAAe,CAAC,CAClB,CAAC;IACF,OAAO,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,GAAgB,EAChB,cAAsB,EACtB,eAAuB;IAEvB,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjE,GAAG,CAAC,GAAG,CAAyB,yBAAyB,EAAE,CAAC,cAAc,CAAC,CAAC;QAC5E,GAAG,CAAC,GAAG,CAA2B,0BAA0B,EAAE,CAAC,cAAc,CAAC,CAAC;QAC/E,GAAG,CAAC,GAAG,CAA+B,iCAAiC,EAAE,CAAC,eAAe,CAAC,CAAC;KAC5F,CAAC,CAAC;IACH,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC/B,YAAY,EAAE,GAAG,CAAC,cAAc;YAChC,eAAe,EAAE,GAAG,CAAC,gBAAgB;YACrC,KAAK,EAAE,GAAG,CAAC,KAAK;SACjB,CAAC,CAAC;QACH,SAAS,EAAE,kBAAkB,CAAC,aAAa,CAAC;QAC5C,eAAe,EAAE,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YAClD,GAAG,CAAC,cAAc;YAClB,GAAG,CAAC,qBAAqB;SAC1B,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA0B,EAC1B,cAAsB,EACtB,eAAuB;IAEvB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAC9B,0BAA0B,CAAC,GAAG,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAyC;IAEzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IACzD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAmC,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACpE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE;gBAChC,QAAQ,EAAE,GAAG,CAAC,SAAS;gBACvB,YAAY,EAAE,GAAG,CAAC,cAAc;gBAChC,eAAe,EAAE,GAAG,CAAC,gBAAgB;gBACrC,MAAM;gBACN,iBAAiB,EAAE,EAAE;aACtB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,SAAS,GAA0B,EAAE,CAAC;IAC5C,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;QACrC,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAA4B,EAC5B,aAAqB;IAErB,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO;YAAE,SAAS;QACjE,MAAM,MAAM,GAAmC,EAAE,CAAC;QAClD,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,CAAC;QACD,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO;YACjE,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAChC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK;YACvB,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO;YACzE,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,6BAA6B;YAC1D,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK;YAC3B,CAAC,CAAC,6BAA6B,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC;YACR,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,KAAK;YAChC,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACvD,eAAe;YACf,WAAW;YACX,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CACjC,IAA2B,EAC3B,QAAyB;IAEzB,MAAM,eAAe,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC1D,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA+B,CAAC;IACjE,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC3C,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI;YAAE,SAAS;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC/B,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACjC,IAAI,MAAM,KAAK,IAAI;YAAE,SAAS;QAC9B,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAChF,qEAAqE;YACrE,sEAAsE;YACtE,qEAAqE;YACrE,kDAAkD;YAClD,KAAK,MAAM,GAAG,IAAI,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,WAAW;YACjB,GAAG,EAAE,UAAU;YACf,oEAAoE;YACpE,kEAAkE;YAClE,mEAAmE;YACnE,2DAA2D;YAC3D,kBAAkB;YAClB,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;SACzE,CAAC,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAChE,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,qEAAqE;YACrE,uEAAuE;YACvE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACzD,IAAI,qBAAqB,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,iBAAiB,EAAE,CAAC;gBACjF,SAAS;YACX,CAAC;YACD,+DAA+D;YAC/D,gEAAgE;YAChE,mEAAmE;YACnE,oEAAoE;YACpE,IAAI,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC;gBAAE,SAAS;YACnE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,SAAS;gBACf,GAAG;gBACH,eAAe,EAAE,SAAS,CAAC,MAAM;gBACjC,YAAY,EAAE,SAAS,CAAC,YAAY;aACrC,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,8DAA8D;YAC9D,qEAAqE;YACrE,sEAAsE;YACtE,IACE,OAAO,CAAC,KAAK,KAAK,WAAW;gBAC7B,GAAG,CAAC,QAAQ,KAAK,SAAS;gBAC1B,+DAA+D;gBAC/D,4DAA4D;gBAC5D,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,EACnD,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YAC9E,CAAC;YACD,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;YACvD,GAAG;SACJ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,wEAAwE;AACxE,SAAS,qBAAqB,CAC5B,GAAe,EACf,eAAyD;IAEzD,MAAM,UAAU,GAAmC,EAAE,CAAC;IACtD,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACrD,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IACxD,CAAC;IACD,OAAO,sBAAsB,CAAC,UAAU,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,IAA2B;IAC5C,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;IACtB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS;YAAE,MAAM,GAAG,GAAG,CAAC;IACrD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,GAAgB,EAChB,cAAsB,EACtB,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,CAA8B,8BAA8B,EAAE;QACxF,cAAc;QACd,QAAQ;KACT,CAAC,CAAC;IACH,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IACpG,CAAC;IACD,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACzD,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,oBAAoB;YACvB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC3B,KAAK,SAAS,CAAC;QACf,KAAK,YAAY;YACf,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;QACrE,KAAK,QAAQ;YACX,OAAO,4BAA4B,CAAC,MAAM,CAAC,eAAe,CAAC;gBACzD,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;gBACnB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QAC9E,KAAK,mBAAmB,CAAC;QACzB,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;QACjF;YACE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAkBD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA6B,EAC7B,KAAqE,EACrE,OAAiC;IAEjC,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjD,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QAC3C,uEAAuE;QACvE,qEAAqE;QACrE,sEAAsE;QACtE,wEAAwE;QACxE,mDAAmD;QACnD,MAAM,iBAAiB,GAAG,MAAM,mCAAmC,CACjE,GAAG,EACH,OAAO,CAAC,eAAe,CACxB,CAAC;QACF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YACjC,IAAI,MAAM,KAAK,IAAI;gBAAE,SAAS;YAC9B,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpF,SAAS;YACX,CAAC;YACD,uEAAuE;YACvE,oEAAoE;YACpE,6DAA6D;YAC7D,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,KAAK,SAAS;gBACtD,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,4BAA4B,CAAC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/E,MAAM,QAAQ,GAAG,MAAM,6BAA6B,CAClD,GAAG,EACH,OAAO,CAAC,cAAc,EACtB,cAAc,CACf,CAAC;YACF,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;gBAAE,SAAS;YACxC,MAAM,uBAAuB,GAAG,MAAM,4CAA4C,CAChF,GAAG,EACH,OAAO,CAAC,eAAe,EACvB,MAAM,CACP,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS;gBACtC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,EAAE,uBAAuB,CAAC;gBAChI,CAAC,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;YAClI,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,4CAA4C,CACzD,GAAgB,EAChB,eAAuB,EACvB,MAAqB;IAErB,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;IACzE,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,GAAG,CAC7B,2CAA2C,EAC3C,CAAC,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,CACvC,CAAC;IACF,MAAM,iBAAiB,GAAG,SAAS,EAAE,0BAA0B,CAAC;IAChE,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CACzB,OAA6B,EAC7B,KAAqE,EACrE,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,MAAqB,EACrB,cAAsB,EACtB,uBAA+B;IAE/B,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;IACrD,OAAO,8BAA8B,CAAC;QACpC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE;QACxC,QAAQ;QACR,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,SAAS,EAAE,KAAK,CAAC,OAAO;QACxB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,UAAU,EAAE,gBAAgB,CAAC,UAAU;QACvC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,gBAAgB;QAC5B,QAAQ;QACR,YAAY,EAAE;YACZ,IAAI,EAAE,cAAc,CAAC,OAAO;YAC5B,KAAK,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM;SACrC;QACD,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE;QAC3C,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,eAAe;QACvB,eAAe,EAAE,KAAK;QACtB,uBAAuB;QACvB,mBAAmB,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC;QACvE,cAAc;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB,CACxB,OAA6B,EAC7B,KAAqE,EACrE,QAAgB,EAChB,QAAgB,EAChB,MAAc,EACd,MAAqB,EACrB,cAAsB,EACtB,uBAA+B;IAE/B,OAAO,2BAA2B,CAAC;QACjC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,QAAQ,EAAE;QACxC,QAAQ;QACR,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,SAAS,EAAE,KAAK,CAAC,OAAO;QACxB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,UAAU,EAAE,gBAAgB,CAAC,UAAU;QACvC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,UAAU,EAAE,gBAAgB;QAC5B,QAAQ;QACR,kEAAkE;QAClE,iEAAiE;QACjE,kDAAkD;QAClD,YAAY,EAAE,MAAM,CAAC,YAAY,KAAK,SAAS;YAC7C,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE;YACjC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE;QAChE,UAAU,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE;QAC3C,YAAY,EAAE,MAAM;QACpB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM;QACzB,eAAe,EAAE,KAAK;QACtB,uBAAuB;QACvB,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW;QAC3C,cAAc;KACf,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/cleanup.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,39 @@ export interface DriftTarget {
|
|
|
23
23
|
*/
|
|
24
24
|
readonly observed: SyncSnapshotRow | undefined;
|
|
25
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Anchor + business-key indices shared by drift detection and matching.
|
|
28
|
+
*
|
|
29
|
+
* Built once per scan from the snapshot and reused for every desired chunk,
|
|
30
|
+
* so the snapshot side is indexed in a single Map pass instead of rebuilt
|
|
31
|
+
* per chunk. The maps hold references to the snapshot's rows; no snapshot
|
|
32
|
+
* data is copied.
|
|
33
|
+
*/
|
|
34
|
+
export interface ObservedRowIndex {
|
|
35
|
+
readonly rowsByAnchor: ReadonlyMap<string, SyncSnapshotRow>;
|
|
36
|
+
readonly ambiguousAnchors: ReadonlySet<string>;
|
|
37
|
+
readonly rowsByIdentity: ReadonlyMap<string, SyncSnapshotRow>;
|
|
38
|
+
readonly ambiguousIdentities: ReadonlySet<string>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Builds the deduplicated anchor/identity index for one snapshot.
|
|
42
|
+
*
|
|
43
|
+
* A duplicated physical anchor or business key is an anomaly, never a row
|
|
44
|
+
* choice: the affected locators are dropped from the index so neither the
|
|
45
|
+
* drift classifier nor the failed-head matcher can silently pick one row.
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildObservedRowIndex(snapshot: SyncSheetsSnapshot, businessKeyField: string): ObservedRowIndex;
|
|
48
|
+
/**
|
|
49
|
+
* Resolves the observed snapshot row owned by one desired row.
|
|
50
|
+
*
|
|
51
|
+
* The primary locator's ambiguity is fatal: when the desired anchor is
|
|
52
|
+
* duplicated, identity fallback would silently pick one of the rows that the
|
|
53
|
+
* corrupted anchor cannot distinguish, so the binding stays unmatched. The
|
|
54
|
+
* same quarantine applies when the desired identity appears in the snapshot's
|
|
55
|
+
* duplicate set. Returns undefined when no row can prove ownership of this
|
|
56
|
+
* binding.
|
|
57
|
+
*/
|
|
58
|
+
export declare function resolveObservedRow(index: ObservedRowIndex, desiredRow: DesiredRow, businessKeyField: string): SyncSnapshotRow | undefined;
|
|
26
59
|
export declare function computeDrifts(args: {
|
|
27
60
|
readonly snapshot: SyncSheetsSnapshot;
|
|
28
61
|
readonly desired: readonly DesiredRow[];
|
|
@@ -33,15 +66,17 @@ export declare function computeDrifts(args: {
|
|
|
33
66
|
};
|
|
34
67
|
}): readonly DriftTarget[];
|
|
35
68
|
/**
|
|
36
|
-
*
|
|
69
|
+
* Classifies one chunk of desired rows against a prebuilt snapshot index.
|
|
37
70
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
71
|
+
* The chunked scan calls this per completed entity batch with the scan-wide
|
|
72
|
+
* index; results concatenate in chunk order, which is the global
|
|
73
|
+
* `(entity_id, field_name)` order, so chunked classification is identical to
|
|
74
|
+
* one full-load `computeDrifts` call. Returns only drift targets; matched
|
|
75
|
+
* rows are simply absent (the scan counts them as scanned-minus-missing).
|
|
43
76
|
*/
|
|
44
|
-
export declare function
|
|
77
|
+
export declare function classifyDesiredChunk(index: ObservedRowIndex, desired: readonly DesiredRow[], systemFields: readonly string[], businessKeyField: string): readonly DriftTarget[];
|
|
78
|
+
/** Classifies one desired row: missing, drifted, or matched (undefined). */
|
|
79
|
+
export declare function classifyDesiredRow(index: ObservedRowIndex, desiredRow: DesiredRow, systemFields: readonly string[], businessKeyField: string): DriftTarget | undefined;
|
|
45
80
|
/** Reads a business-key value from a snapshot row for unanchored fast appends. */
|
|
46
81
|
export declare function snapshotIdentity(row: SyncSheetsSnapshot["rows"][number], identityField: string): string | undefined;
|
|
47
82
|
/** Reads the same visible business-key value from canonical desired state. */
|
|
@@ -50,4 +85,13 @@ export declare function normalizedCellIdentity(cell: NormalizedCell | undefined)
|
|
|
50
85
|
export declare function computeObservedHash(row: SyncSheetsSnapshot["rows"][number], systemFields: readonly string[]): string;
|
|
51
86
|
export declare function countMatchedRows(snapshot: SyncSheetsSnapshot, desired: readonly DesiredRow[], identityField: string): number;
|
|
52
87
|
export declare function countExtraRows(snapshot: SyncSheetsSnapshot, desired: readonly DesiredRow[], identityField: string): number;
|
|
88
|
+
/**
|
|
89
|
+
* Counts surplus snapshot rows from pre-accumulated desired keys.
|
|
90
|
+
*
|
|
91
|
+
* The chunked scan feeds one chunk at a time into `desiredAnchors` (first
|
|
92
|
+
* row wins per anchor) and `desiredIdentities`, then calls this once: the
|
|
93
|
+
* count is identical to `countExtraRows` while only small key strings are
|
|
94
|
+
* retained instead of full desired rows.
|
|
95
|
+
*/
|
|
96
|
+
export declare function countExtraRowsForKeys(snapshot: SyncSheetsSnapshot, identityField: string, desiredAnchors: ReadonlyMap<string, string | undefined>, desiredIdentities: ReadonlySet<string>): number;
|
|
53
97
|
//# sourceMappingURL=diff.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAG5E,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,CAAC;CAChD;
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../../../../../../../src/sync/outbound/reconciliation/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,7 @@ import { computeSyncVisibleHash, } from "../../../../contracts/sheets/syncSheets
|
|
|
18
18
|
* choice: the affected locators are dropped from the index so neither the
|
|
19
19
|
* drift classifier nor the failed-head matcher can silently pick one row.
|
|
20
20
|
*/
|
|
21
|
-
function buildObservedRowIndex(snapshot, businessKeyField) {
|
|
21
|
+
export function buildObservedRowIndex(snapshot, businessKeyField) {
|
|
22
22
|
const rowsByAnchor = new Map();
|
|
23
23
|
const ambiguousAnchors = new Set();
|
|
24
24
|
const rowsByIdentity = new Map();
|
|
@@ -60,7 +60,7 @@ function buildObservedRowIndex(snapshot, businessKeyField) {
|
|
|
60
60
|
* duplicate set. Returns undefined when no row can prove ownership of this
|
|
61
61
|
* binding.
|
|
62
62
|
*/
|
|
63
|
-
function resolveObservedRow(index, desiredRow, businessKeyField) {
|
|
63
|
+
export function resolveObservedRow(index, desiredRow, businessKeyField) {
|
|
64
64
|
const identity = desiredRowIdentity(desiredRow, businessKeyField);
|
|
65
65
|
// The primary locator's ambiguity is fatal: when the desired anchor is
|
|
66
66
|
// duplicated, identity fallback would silently pick one of the rows that
|
|
@@ -76,39 +76,38 @@ function resolveObservedRow(index, desiredRow, businessKeyField) {
|
|
|
76
76
|
}
|
|
77
77
|
export function computeDrifts(args) {
|
|
78
78
|
const index = buildObservedRowIndex(args.snapshot, args.sheet.businessKeyField);
|
|
79
|
-
|
|
80
|
-
for (const desiredRow of args.desired) {
|
|
81
|
-
const observed = resolveObservedRow(index, desiredRow, args.sheet.businessKeyField);
|
|
82
|
-
if (observed === undefined) {
|
|
83
|
-
drifts.push({ kind: "missing", desired: desiredRow, observed: undefined });
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
const observedHash = computeObservedHash(observed, args.systemFields);
|
|
87
|
-
const desiredHash = computeSyncVisibleHash(desiredRow.fields);
|
|
88
|
-
if (observedHash !== desiredHash) {
|
|
89
|
-
drifts.push({ kind: "drifted", desired: desiredRow, observed });
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return drifts;
|
|
79
|
+
return classifyDesiredChunk(index, args.desired, args.systemFields, args.sheet.businessKeyField);
|
|
93
80
|
}
|
|
94
81
|
/**
|
|
95
|
-
*
|
|
82
|
+
* Classifies one chunk of desired rows against a prebuilt snapshot index.
|
|
96
83
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
84
|
+
* The chunked scan calls this per completed entity batch with the scan-wide
|
|
85
|
+
* index; results concatenate in chunk order, which is the global
|
|
86
|
+
* `(entity_id, field_name)` order, so chunked classification is identical to
|
|
87
|
+
* one full-load `computeDrifts` call. Returns only drift targets; matched
|
|
88
|
+
* rows are simply absent (the scan counts them as scanned-minus-missing).
|
|
102
89
|
*/
|
|
103
|
-
export function
|
|
104
|
-
const
|
|
105
|
-
const matched = new Map();
|
|
90
|
+
export function classifyDesiredChunk(index, desired, systemFields, businessKeyField) {
|
|
91
|
+
const drifts = [];
|
|
106
92
|
for (const desiredRow of desired) {
|
|
107
|
-
const
|
|
108
|
-
if (
|
|
109
|
-
|
|
93
|
+
const drift = classifyDesiredRow(index, desiredRow, systemFields, businessKeyField);
|
|
94
|
+
if (drift !== undefined)
|
|
95
|
+
drifts.push(drift);
|
|
110
96
|
}
|
|
111
|
-
return
|
|
97
|
+
return drifts;
|
|
98
|
+
}
|
|
99
|
+
/** Classifies one desired row: missing, drifted, or matched (undefined). */
|
|
100
|
+
export function classifyDesiredRow(index, desiredRow, systemFields, businessKeyField) {
|
|
101
|
+
const observed = resolveObservedRow(index, desiredRow, businessKeyField);
|
|
102
|
+
if (observed === undefined) {
|
|
103
|
+
return { kind: "missing", desired: desiredRow, observed: undefined };
|
|
104
|
+
}
|
|
105
|
+
const observedHash = computeObservedHash(observed, systemFields);
|
|
106
|
+
const desiredHash = computeSyncVisibleHash(desiredRow.fields);
|
|
107
|
+
if (observedHash !== desiredHash) {
|
|
108
|
+
return { kind: "drifted", desired: desiredRow, observed };
|
|
109
|
+
}
|
|
110
|
+
return undefined;
|
|
112
111
|
}
|
|
113
112
|
/** Reads a business-key value from a snapshot row for unanchored fast appends. */
|
|
114
113
|
export function snapshotIdentity(row, identityField) {
|
|
@@ -183,6 +182,29 @@ export function countMatchedRows(snapshot, desired, identityField) {
|
|
|
183
182
|
return matched;
|
|
184
183
|
}
|
|
185
184
|
export function countExtraRows(snapshot, desired, identityField) {
|
|
185
|
+
// First-wins anchor ownership plus every desired identity, as lightweight
|
|
186
|
+
// keys: the chunked scan accumulates the same keys without retaining rows.
|
|
187
|
+
const desiredAnchors = new Map();
|
|
188
|
+
const desiredIdentities = new Set();
|
|
189
|
+
for (const row of desired) {
|
|
190
|
+
if (!desiredAnchors.has(row.anchorReference)) {
|
|
191
|
+
desiredAnchors.set(row.anchorReference, desiredRowIdentity(row, identityField));
|
|
192
|
+
}
|
|
193
|
+
const identity = desiredRowIdentity(row, identityField);
|
|
194
|
+
if (identity !== undefined)
|
|
195
|
+
desiredIdentities.add(identity);
|
|
196
|
+
}
|
|
197
|
+
return countExtraRowsForKeys(snapshot, identityField, desiredAnchors, desiredIdentities);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Counts surplus snapshot rows from pre-accumulated desired keys.
|
|
201
|
+
*
|
|
202
|
+
* The chunked scan feeds one chunk at a time into `desiredAnchors` (first
|
|
203
|
+
* row wins per anchor) and `desiredIdentities`, then calls this once: the
|
|
204
|
+
* count is identical to `countExtraRows` while only small key strings are
|
|
205
|
+
* retained instead of full desired rows.
|
|
206
|
+
*/
|
|
207
|
+
export function countExtraRowsForKeys(snapshot, identityField, desiredAnchors, desiredIdentities) {
|
|
186
208
|
// Identities that appear more than once in the snapshot cannot prove
|
|
187
209
|
// ownership. A desired row carrying one of these identities is quarantined:
|
|
188
210
|
// its anchor never suppresses the extra count, and the duplicated identity
|
|
@@ -199,15 +221,6 @@ export function countExtraRows(snapshot, desired, identityField) {
|
|
|
199
221
|
seen.add(identity);
|
|
200
222
|
}
|
|
201
223
|
}
|
|
202
|
-
const desiredByAnchor = new Map();
|
|
203
|
-
const desiredIdentities = new Set();
|
|
204
|
-
for (const row of desired) {
|
|
205
|
-
if (!desiredByAnchor.has(row.anchorReference))
|
|
206
|
-
desiredByAnchor.set(row.anchorReference, row);
|
|
207
|
-
const identity = desiredRowIdentity(row, identityField);
|
|
208
|
-
if (identity !== undefined)
|
|
209
|
-
desiredIdentities.add(identity);
|
|
210
|
-
}
|
|
211
224
|
const anchorCounts = new Map();
|
|
212
225
|
for (const row of snapshot.rows) {
|
|
213
226
|
if (row.physicalAnchor.kind !== PRESENCE_KINDS.PRESENT)
|
|
@@ -223,11 +236,8 @@ export function countExtraRows(snapshot, desired, identityField) {
|
|
|
223
236
|
// business key that appears elsewhere.
|
|
224
237
|
if (row.physicalAnchor.kind === PRESENCE_KINDS.PRESENT &&
|
|
225
238
|
(anchorCounts.get(row.physicalAnchor.value) ?? 0) === 1) {
|
|
226
|
-
const
|
|
227
|
-
|
|
228
|
-
? undefined
|
|
229
|
-
: desiredRowIdentity(desiredRow, identityField);
|
|
230
|
-
if (desiredRow !== undefined &&
|
|
239
|
+
const desiredIdentity = desiredAnchors.get(row.physicalAnchor.value);
|
|
240
|
+
if (desiredAnchors.has(row.physicalAnchor.value) &&
|
|
231
241
|
(desiredIdentity === undefined || !duplicateIdentities.has(desiredIdentity))) {
|
|
232
242
|
continue;
|
|
233
243
|
}
|