my-frontend-observer 0.3.0 → 0.4.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.
- package/CHANGELOG.md +52 -0
- package/README.md +32 -8
- package/dist/application/comparisonService.d.ts +56 -0
- package/dist/application/comparisonService.js +77 -0
- package/dist/application/comparisonService.js.map +1 -0
- package/dist/artifacts/artifactReader.d.ts +19 -0
- package/dist/artifacts/artifactReader.js +36 -0
- package/dist/artifacts/artifactReader.js.map +1 -0
- package/dist/artifacts/comparisonArtifactWriter.d.ts +41 -0
- package/dist/artifacts/comparisonArtifactWriter.js +67 -0
- package/dist/artifacts/comparisonArtifactWriter.js.map +1 -0
- package/dist/cli.js +220 -1
- package/dist/cli.js.map +1 -1
- package/dist/domain/comparison.d.ts +198 -0
- package/dist/domain/comparison.js +324 -0
- package/dist/domain/comparison.js.map +1 -0
- package/dist/domain/comparisonEngine.d.ts +48 -0
- package/dist/domain/comparisonEngine.js +694 -0
- package/dist/domain/comparisonEngine.js.map +1 -0
- package/dist/domain/comparisonIdentity.d.ts +13 -0
- package/dist/domain/comparisonIdentity.js +46 -0
- package/dist/domain/comparisonIdentity.js.map +1 -0
- package/dist/domain/evidence.d.ts +2 -0
- package/dist/domain/evidence.js +4 -0
- package/dist/domain/evidence.js.map +1 -1
- package/dist/domain/relationships.d.ts +168 -0
- package/dist/domain/relationships.js +343 -0
- package/dist/domain/relationships.js.map +1 -0
- package/dist/index.d.ts +14 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/docs/ARCHITECTURE.md +76 -3
- package/docs/CI_CD.md +29 -0
- package/docs/COMMANDS.md +137 -0
- package/docs/CONTRACTS.md +96 -4
- package/docs/CURRENT_STATE.md +102 -9
- package/docs/DEVELOPMENT.md +33 -10
- package/docs/PROJECT_OVERVIEW.md +16 -12
- package/docs/QUICKSTART.md +5 -0
- package/docs/RELEASE.md +10 -8
- package/docs/ROADMAP.md +4 -0
- package/docs/SECURITY.md +14 -1
- package/docs/WORKFLOWS.md +56 -6
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -4,6 +4,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
4
4
|
import { normalizeRequest } from './request/request.js';
|
|
5
5
|
import { getProducerInfo } from './domain/schema.js';
|
|
6
6
|
import { observe } from './application/observationPersistence.js';
|
|
7
|
+
import { compareAndPersistFromArtifactRoots } from './application/comparisonService.js';
|
|
7
8
|
const defaultIO = {
|
|
8
9
|
stdout: (text) => {
|
|
9
10
|
process.stdout.write(text);
|
|
@@ -20,12 +21,15 @@ Usage:
|
|
|
20
21
|
Commands:
|
|
21
22
|
observe Capture one bounded browser observation and persist it as a
|
|
22
23
|
portable artifact.
|
|
24
|
+
compare Compare two persisted observations and write a structured
|
|
25
|
+
comparison artifact.
|
|
23
26
|
|
|
24
27
|
Options:
|
|
25
28
|
--help Show this help.
|
|
26
29
|
--version Print the package version.
|
|
27
30
|
|
|
28
|
-
Run "my-frontend-observer observe --help"
|
|
31
|
+
Run "my-frontend-observer observe --help" or "my-frontend-observer compare
|
|
32
|
+
--help" for command-specific options.
|
|
29
33
|
`;
|
|
30
34
|
const OBSERVE_HELP = `Usage:
|
|
31
35
|
my-frontend-observer observe --url <loopback-url> [options]
|
|
@@ -73,6 +77,44 @@ request, unsafe/failed navigation, or a failed artifact write, prints
|
|
|
73
77
|
structured diagnostics to stderr and exits nonzero. No progress output is
|
|
74
78
|
printed during a normal capture.
|
|
75
79
|
`;
|
|
80
|
+
const COMPARE_HELP = `Usage:
|
|
81
|
+
my-frontend-observer compare --before <observation-artifact-root> --after <observation-artifact-root> --output <directory> [options]
|
|
82
|
+
|
|
83
|
+
Required:
|
|
84
|
+
--before <path> Root directory of the "before" persisted
|
|
85
|
+
observation artifact (the directory containing
|
|
86
|
+
its manifest.json).
|
|
87
|
+
--after <path> Root directory of the "after" persisted
|
|
88
|
+
observation artifact.
|
|
89
|
+
--output <directory> Portable, relative output location for the
|
|
90
|
+
comparison artifact.
|
|
91
|
+
|
|
92
|
+
Options:
|
|
93
|
+
--config-file <json-file> Loads a comparison configuration from a local
|
|
94
|
+
JSON file: { "geometryTolerancePx": <0-10>,
|
|
95
|
+
"expectedDependencies": [ { "cause": { "target":
|
|
96
|
+
"...", "property": "x"|"y"|"width"|"height",
|
|
97
|
+
"direction": "increase"|"decrease"|"change"|
|
|
98
|
+
"unchanged" }, "effect": { ... same shape ... },
|
|
99
|
+
"source": "explicit-config" } ] }. Relative
|
|
100
|
+
paths resolve from the current working
|
|
101
|
+
directory; the file path itself is never
|
|
102
|
+
persisted into the artifact or included in the
|
|
103
|
+
comparison request identity. Without
|
|
104
|
+
--config-file, geometryTolerancePx defaults to
|
|
105
|
+
0.5 with no declared dependencies.
|
|
106
|
+
--help Show this help.
|
|
107
|
+
|
|
108
|
+
Comparison reads two already-persisted observation artifacts and derives
|
|
109
|
+
evidence purely from their existing content - it never launches a browser
|
|
110
|
+
and never re-observes either target. On success, prints a concise result
|
|
111
|
+
and exits 0, including when the two observations are found to be
|
|
112
|
+
"incomparable" (that is itself a successful comparison outcome, not a
|
|
113
|
+
failure). On invalid syntax, an unreadable or structurally invalid source
|
|
114
|
+
artifact, invalid configuration, or a failed artifact write, prints
|
|
115
|
+
structured diagnostics to stderr and exits nonzero. No progress output is
|
|
116
|
+
printed during a normal comparison.
|
|
117
|
+
`;
|
|
76
118
|
function parseViewport(raw) {
|
|
77
119
|
const match = /^(\d+)x(\d+)$/.exec(raw);
|
|
78
120
|
if (!match)
|
|
@@ -269,6 +311,130 @@ function loadScrollScenarioFile(filePath) {
|
|
|
269
311
|
}
|
|
270
312
|
return { ok: true, scenario: parsed };
|
|
271
313
|
}
|
|
314
|
+
/** CLI-syntax-only parsing, mirroring `parseObserveArgs`: shape/presence/duplication errors only. Comparison-config semantics stay owned by the existing domain validator. */
|
|
315
|
+
function parseCompareArgs(argv) {
|
|
316
|
+
const errors = [];
|
|
317
|
+
let beforeRoot;
|
|
318
|
+
let beforeFlagCount = 0;
|
|
319
|
+
let afterRoot;
|
|
320
|
+
let afterFlagCount = 0;
|
|
321
|
+
let outputLocation;
|
|
322
|
+
let outputFlagCount = 0;
|
|
323
|
+
let configFilePath;
|
|
324
|
+
let configFileFlagCount = 0;
|
|
325
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
326
|
+
const arg = argv[i];
|
|
327
|
+
switch (arg) {
|
|
328
|
+
case '--before': {
|
|
329
|
+
const value = argv[(i += 1)];
|
|
330
|
+
beforeFlagCount += 1;
|
|
331
|
+
if (value === undefined) {
|
|
332
|
+
errors.push('--before requires a path argument');
|
|
333
|
+
}
|
|
334
|
+
else if (beforeFlagCount > 1) {
|
|
335
|
+
errors.push('--before may only be specified once');
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
beforeRoot = value;
|
|
339
|
+
}
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
case '--after': {
|
|
343
|
+
const value = argv[(i += 1)];
|
|
344
|
+
afterFlagCount += 1;
|
|
345
|
+
if (value === undefined) {
|
|
346
|
+
errors.push('--after requires a path argument');
|
|
347
|
+
}
|
|
348
|
+
else if (afterFlagCount > 1) {
|
|
349
|
+
errors.push('--after may only be specified once');
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
afterRoot = value;
|
|
353
|
+
}
|
|
354
|
+
break;
|
|
355
|
+
}
|
|
356
|
+
case '--output': {
|
|
357
|
+
const value = argv[(i += 1)];
|
|
358
|
+
outputFlagCount += 1;
|
|
359
|
+
if (value === undefined) {
|
|
360
|
+
errors.push('--output requires a directory argument');
|
|
361
|
+
}
|
|
362
|
+
else if (outputFlagCount > 1) {
|
|
363
|
+
errors.push('--output may only be specified once');
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
outputLocation = value;
|
|
367
|
+
}
|
|
368
|
+
break;
|
|
369
|
+
}
|
|
370
|
+
case '--config-file': {
|
|
371
|
+
const value = argv[(i += 1)];
|
|
372
|
+
configFileFlagCount += 1;
|
|
373
|
+
if (value === undefined) {
|
|
374
|
+
errors.push('--config-file requires a file path argument');
|
|
375
|
+
}
|
|
376
|
+
else if (configFileFlagCount > 1) {
|
|
377
|
+
errors.push('--config-file may only be specified once');
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
configFilePath = value;
|
|
381
|
+
}
|
|
382
|
+
break;
|
|
383
|
+
}
|
|
384
|
+
default:
|
|
385
|
+
errors.push(`unrecognized argument: ${arg}`);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (beforeRoot === undefined)
|
|
389
|
+
errors.push('--before is required');
|
|
390
|
+
if (afterRoot === undefined)
|
|
391
|
+
errors.push('--after is required');
|
|
392
|
+
if (outputLocation === undefined)
|
|
393
|
+
errors.push('--output is required');
|
|
394
|
+
if (errors.length > 0)
|
|
395
|
+
return { ok: false, errors };
|
|
396
|
+
return {
|
|
397
|
+
ok: true,
|
|
398
|
+
beforeRoot: beforeRoot,
|
|
399
|
+
afterRoot: afterRoot,
|
|
400
|
+
outputLocation: outputLocation,
|
|
401
|
+
...(configFilePath === undefined ? {} : { configFilePath }),
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* CLI/input-boundary-only responsibility, mirroring `loadScrollScenarioFile`:
|
|
406
|
+
* read one local JSON file and validate only the root shape this file format
|
|
407
|
+
* owns (plain, non-array object) - the file supplies the value of
|
|
408
|
+
* `ComparisonConfig` directly (no wrapper field). Every semantic rule
|
|
409
|
+
* (geometry tolerance bounds, dependency property/direction vocabulary,
|
|
410
|
+
* dependency source/provenance) stays owned by the existing comparison
|
|
411
|
+
* domain validator (`isValidComparisonConfig`, invoked inside
|
|
412
|
+
* `compareObservations`), not duplicated here. The file path itself is
|
|
413
|
+
* never returned to the caller beyond this function, so it can never reach
|
|
414
|
+
* the persisted comparison artifact or its request identity.
|
|
415
|
+
*/
|
|
416
|
+
function loadComparisonConfigFile(filePath) {
|
|
417
|
+
let rawText;
|
|
418
|
+
try {
|
|
419
|
+
rawText = readFileSync(filePath, 'utf8');
|
|
420
|
+
}
|
|
421
|
+
catch (err) {
|
|
422
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
423
|
+
return { ok: false, error: `--config-file could not be read: ${message}` };
|
|
424
|
+
}
|
|
425
|
+
let parsed;
|
|
426
|
+
try {
|
|
427
|
+
parsed = JSON.parse(rawText);
|
|
428
|
+
}
|
|
429
|
+
catch (err) {
|
|
430
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
431
|
+
return { ok: false, error: `--config-file is not valid JSON: ${message}` };
|
|
432
|
+
}
|
|
433
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
434
|
+
return { ok: false, error: '--config-file root must be a JSON object' };
|
|
435
|
+
}
|
|
436
|
+
return { ok: true, config: parsed };
|
|
437
|
+
}
|
|
272
438
|
function formatDiagnostic(diagnostic) {
|
|
273
439
|
const target = diagnostic.targetName === undefined ? '' : ` (target: ${diagnostic.targetName})`;
|
|
274
440
|
return `[${diagnostic.code}] ${diagnostic.message}${target}`;
|
|
@@ -326,6 +492,56 @@ async function runObserveCommand(argv, io) {
|
|
|
326
492
|
io.stdout(`Diagnostics: ${result.diagnostics.length}\n`);
|
|
327
493
|
return NON_SUCCESS_COMPLETION_STATES.has(result.completion.state) ? 1 : 0;
|
|
328
494
|
}
|
|
495
|
+
/**
|
|
496
|
+
* Thin orchestration only: parse args, optionally load a config file, then
|
|
497
|
+
* delegate to the existing `compareAndPersistFromArtifactRoots` application
|
|
498
|
+
* function exactly once. No comparability/geometry/relationship/dependency
|
|
499
|
+
* logic lives here - see `src/domain/comparisonEngine.ts`. `incomparable` is
|
|
500
|
+
* a successful comparison outcome (the operation determined the two
|
|
501
|
+
* observations should not be treated as equivalent frontend states), so it
|
|
502
|
+
* exits 0 exactly like `comparable`/`comparable-with-warnings`; only a
|
|
503
|
+
* genuine parse/read/domain/persistence failure exits nonzero.
|
|
504
|
+
*/
|
|
505
|
+
async function runCompareCommand(argv, io) {
|
|
506
|
+
if (argv.includes('--help')) {
|
|
507
|
+
io.stdout(COMPARE_HELP);
|
|
508
|
+
return 0;
|
|
509
|
+
}
|
|
510
|
+
const parsedArgs = parseCompareArgs(argv);
|
|
511
|
+
if (!parsedArgs.ok) {
|
|
512
|
+
for (const error of parsedArgs.errors)
|
|
513
|
+
io.stderr(`error: ${error}\n`);
|
|
514
|
+
io.stderr(COMPARE_HELP);
|
|
515
|
+
return 1;
|
|
516
|
+
}
|
|
517
|
+
let config;
|
|
518
|
+
if (parsedArgs.configFilePath !== undefined) {
|
|
519
|
+
const loaded = loadComparisonConfigFile(parsedArgs.configFilePath);
|
|
520
|
+
if (!loaded.ok) {
|
|
521
|
+
io.stderr(`error: ${loaded.error}\n`);
|
|
522
|
+
io.stderr(COMPARE_HELP);
|
|
523
|
+
return 1;
|
|
524
|
+
}
|
|
525
|
+
config = loaded.config;
|
|
526
|
+
}
|
|
527
|
+
// Exactly one application comparison attempt: two artifact reads, one pure comparison, persisted at most once.
|
|
528
|
+
const result = await compareAndPersistFromArtifactRoots(parsedArgs.beforeRoot, parsedArgs.afterRoot, {
|
|
529
|
+
...(config === undefined ? {} : { config }),
|
|
530
|
+
outputLocation: parsedArgs.outputLocation,
|
|
531
|
+
});
|
|
532
|
+
if (!result.ok) {
|
|
533
|
+
for (const diagnostic of result.diagnostics)
|
|
534
|
+
io.stderr(`${formatDiagnostic(diagnostic)}\n`);
|
|
535
|
+
return 1;
|
|
536
|
+
}
|
|
537
|
+
io.stdout(`Comparison: ${result.comparisonId}\n`);
|
|
538
|
+
io.stdout(`State: ${result.comparability}\n`);
|
|
539
|
+
io.stdout(`Artifact: ${result.artifactRoot}\n`);
|
|
540
|
+
io.stdout(`Differences: ${result.differenceCount}\n`);
|
|
541
|
+
io.stdout(`Relationship changes: ${result.relationshipChangeCount}\n`);
|
|
542
|
+
io.stdout(`Diagnostics: ${result.diagnosticsCount}\n`);
|
|
543
|
+
return 0;
|
|
544
|
+
}
|
|
329
545
|
/** Testable CLI entry point: pure function of argv (+ injectable IO), no direct process.exit. */
|
|
330
546
|
export async function runCli(argv, io = defaultIO) {
|
|
331
547
|
const [command, ...rest] = argv;
|
|
@@ -344,6 +560,9 @@ export async function runCli(argv, io = defaultIO) {
|
|
|
344
560
|
if (command === 'observe') {
|
|
345
561
|
return runObserveCommand(rest, io);
|
|
346
562
|
}
|
|
563
|
+
if (command === 'compare') {
|
|
564
|
+
return runCompareCommand(rest, io);
|
|
565
|
+
}
|
|
347
566
|
io.stderr(`error: unrecognized command "${command}"\n`);
|
|
348
567
|
io.stderr(TOP_LEVEL_HELP);
|
|
349
568
|
return 1;
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,yCAAyC,CAAC;AAClE,OAAO,EAAE,kCAAkC,EAAE,MAAM,oCAAoC,CAAC;AAOxF,MAAM,SAAS,GAAU;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC;AAEF,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;CAiBtB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6CpB,CAAC;AAEF,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCpB,CAAC;AAEF,SAAS,aAAa,CAAC,GAAW;IAChC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACvD,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;AACjE,CAAC;AAMD,0HAA0H;AAC1H,SAAS,gBAAgB,CAAC,IAAuB;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAA6B,CAAC;IAClC,IAAI,QAAuD,CAAC;IAC5D,MAAM,OAAO,GAAyC,EAAE,CAAC;IACzD,IAAI,cAAkC,CAAC;IACvC,IAAI,SAA6B,CAAC;IAClC,IAAI,eAAmC,CAAC;IACxC,IAAI,oBAAoB,GAAG,CAAC,CAAC;IAC7B,IAAI,sBAA0C,CAAC;IAC/C,IAAI,2BAA2B,GAAG,CAAC,CAAC;IAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,OAAO;gBACV,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM;YACR,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBACtE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,wDAAwD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC/F,CAAC;qBAAM,CAAC;oBACN,QAAQ,GAAG,MAAM,CAAC;gBACpB,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACpE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,yCAAyC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAChF,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACvB,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,oBAAoB,IAAI,CAAC,CAAC;gBAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;gBAC9D,CAAC;qBAAM,IAAI,oBAAoB,GAAG,CAAC,EAAE,CAAC;oBACpC,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;gBAC3D,CAAC;qBAAM,CAAC;oBACN,eAAe,GAAG,KAAK,CAAC;gBAC1B,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,wBAAwB,CAAC,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,2BAA2B,IAAI,CAAC,CAAC;gBACjC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;gBACtE,CAAC;qBAAM,IAAI,2BAA2B,GAAG,CAAC,EAAE,CAAC;oBAC3C,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACN,sBAAsB,GAAG,KAAK,CAAC;gBACjC,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,UAAU;gBACb,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM;YACR,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,MAAM,YAAY,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC,mDAAmD,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC1F,CAAC;qBAAM,CAAC;oBACN,SAAS,GAAG,YAAY,CAAC;gBAC3B,CAAC;gBACD,MAAM;YACR,CAAC;YACD;gBACE,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAEpD,MAAM,GAAG,GAA0B;QACjC,SAAS;QACT,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1C,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;QAC3D,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;KAClD,CAAC;IACF,OAAO;QACL,EAAE,EAAE,IAAI;QACR,GAAG;QACH,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;QAC7D,GAAG,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,MAAM,gCAAgC,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAI9D;;;;;;;;GAQG;AACH,SAAS,eAAe,CAAC,QAAgB;IACvC,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qCAAqC,OAAO,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qCAAqC,OAAO,EAAE,EAAE,CAAC;IAC9E,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,MAAiC,CAAC;IACjD,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,gCAAgC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACtG,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sDAAsD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAChH,CAAC;IACD,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC;IAC/E,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;AAC/C,CAAC;AAID;;;;;;;;;;;;GAYG;AACH,SAAS,sBAAsB,CAAC,QAAgB;IAC9C,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6CAA6C,OAAO,EAAE,EAAE,CAAC;IACtF,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6CAA6C,OAAO,EAAE,EAAE,CAAC;IACtF,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mDAAmD,EAAE,CAAC;IACnF,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC;AAMD,8KAA8K;AAC9K,SAAS,gBAAgB,CAAC,IAAuB;IAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,UAA8B,CAAC;IACnC,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,SAA6B,CAAC;IAClC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,cAAkC,CAAC;IACvC,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,cAAkC,CAAC;IACvC,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,eAAe,IAAI,CAAC,CAAC;gBACrB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;gBACnD,CAAC;qBAAM,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBACrD,CAAC;qBAAM,CAAC;oBACN,UAAU,GAAG,KAAK,CAAC;gBACrB,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,cAAc,IAAI,CAAC,CAAC;gBACpB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBAClD,CAAC;qBAAM,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;oBAC9B,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;gBACpD,CAAC;qBAAM,CAAC;oBACN,SAAS,GAAG,KAAK,CAAC;gBACpB,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,eAAe,IAAI,CAAC,CAAC;gBACrB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBACxD,CAAC;qBAAM,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;gBACrD,CAAC;qBAAM,CAAC;oBACN,cAAc,GAAG,KAAK,CAAC;gBACzB,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7B,mBAAmB,IAAI,CAAC,CAAC;gBACzB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBAC7D,CAAC;qBAAM,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACN,cAAc,GAAG,KAAK,CAAC;gBACzB,CAAC;gBACD,MAAM;YACR,CAAC;YACD;gBACE,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,IAAI,UAAU,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAClE,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAChE,IAAI,cAAc,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAEtE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAEpD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,UAAU,EAAE,UAAoB;QAChC,SAAS,EAAE,SAAmB;QAC9B,cAAc,EAAE,cAAwB;QACxC,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;KAC5D,CAAC;AACJ,CAAC;AAID;;;;;;;;;;;GAWG;AACH,SAAS,wBAAwB,CAAC,QAAgB;IAChD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,OAAO,EAAE,EAAE,CAAC;IAC7E,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,OAAO,EAAE,EAAE,CAAC;IAC7E,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,0CAA0C,EAAE,CAAC;IAC1E,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAsB;IAC9C,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,UAAU,CAAC,UAAU,GAAG,CAAC;IAChG,OAAO,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,OAAO,GAAG,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED,wIAAwI;AACxI,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAE5E,KAAK,UAAU,iBAAiB,CAAC,IAAuB,EAAE,EAAS;IACjE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM;YAAE,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;QACtE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC;IACzB,IAAI,UAAU,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,EAAE,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YACtC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACxB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC;IACD,IAAI,UAAU,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,sBAAsB,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,EAAE,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YACtC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACxB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,WAAW;YAAE,EAAE,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAChG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4FAA4F;IAC5F,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW;YAAE,EAAE,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5F,OAAO,CAAC,CAAC;IACX,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,gBAAgB,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;IACpD,EAAE,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;IACjD,EAAE,CAAC,MAAM,CAAC,aAAa,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAChD,EAAE,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC;IAC9C,EAAE,CAAC,MAAM,CAAC,gBAAgB,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC;IAEzD,OAAO,6BAA6B,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAAuB,EAAE,EAAS;IACjE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM;YAAE,EAAE,CAAC,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,CAAC;QACtE,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACxB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,MAA6C,CAAC;IAClD,IAAI,UAAU,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,wBAAwB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,EAAE,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YACtC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACxB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,MAAmC,CAAC;IACtD,CAAC;IAED,+GAA+G;IAC/G,MAAM,MAAM,GAAG,MAAM,kCAAkC,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,EAAE;QACnG,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;QAC3C,cAAc,EAAE,UAAU,CAAC,cAAc;KAC1C,CAAC,CAAC;IACH,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW;YAAE,EAAE,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC5F,OAAO,CAAC,CAAC;IACX,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,eAAe,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAClD,EAAE,CAAC,MAAM,CAAC,UAAU,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;IAC9C,EAAE,CAAC,MAAM,CAAC,aAAa,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAChD,EAAE,CAAC,MAAM,CAAC,gBAAgB,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;IACtD,EAAE,CAAC,MAAM,CAAC,yBAAyB,MAAM,CAAC,uBAAuB,IAAI,CAAC,CAAC;IACvE,EAAE,CAAC,MAAM,CAAC,gBAAgB,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;IAEvD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAuB,EAAE,KAAY,SAAS;IACzE,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEhC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAC7C,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,EAAE,CAAC,MAAM,CAAC,GAAG,eAAe,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC;QAC5C,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,gCAAgC,OAAO,KAAK,CAAC,CAAC;IACxD,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC1B,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,IAAI,YAAY,EAAE,EAAE,CAAC;IACnB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9C,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.4 Batch 1 comparison contract. Frozen here as pure
|
|
3
|
+
* types/constants/structural validators only - comparison is downstream of
|
|
4
|
+
* observation (real Chromium -> ObservationArtifact -> relationship
|
|
5
|
+
* derivation -> comparability analysis -> comparison -> ComparisonArtifact,
|
|
6
|
+
* see docs/ARCHITECTURE.md) and this batch implements neither relationship
|
|
7
|
+
* derivation, real comparison, nor persistence. Batch 2 owns relationship
|
|
8
|
+
* derivation; Batch 3 owns `compareObservations()` and comparison
|
|
9
|
+
* persistence; Batch 4 owns CLI exposure.
|
|
10
|
+
*
|
|
11
|
+
* Comparison and observation are different evidence products: this module
|
|
12
|
+
* never reuses `ARTIFACT_KIND`/`SCHEMA_VERSION` from `./schema.js`, and
|
|
13
|
+
* `isValidComparisonArtifact` never delegates to `isValidObservationArtifact`.
|
|
14
|
+
*/
|
|
15
|
+
import { PRODUCER_NAME, SCHEMA_VERSION as OBSERVATION_SCHEMA_VERSION } from './schema.js';
|
|
16
|
+
import type { Diagnostic } from './diagnostics.js';
|
|
17
|
+
import type { EvidenceReference, LayoutRelationshipGraph, PageLevelRelationshipKind, PairwiseRelationshipKind } from './relationships.js';
|
|
18
|
+
export declare const COMPARISON_ARTIFACT_KIND: "my-frontend-observer/comparison";
|
|
19
|
+
export declare const COMPARISON_SCHEMA_VERSION: "1.0.0";
|
|
20
|
+
/**
|
|
21
|
+
* Geometry tolerance is owned by domain/relationships.ts (the relationship
|
|
22
|
+
* derivation engine needs it directly, and that module must not import this
|
|
23
|
+
* one back - relationships.ts is the lower-level module). Re-exported here
|
|
24
|
+
* unchanged so every pre-Batch-2 consumer of these names from
|
|
25
|
+
* domain/comparison.ts keeps working.
|
|
26
|
+
*/
|
|
27
|
+
export { GEOMETRY_TOLERANCE_DEFAULT_PX, GEOMETRY_TOLERANCE_MIN_PX, GEOMETRY_TOLERANCE_MAX_PX, isValidGeometryTolerancePx } from './relationships.js';
|
|
28
|
+
export declare const DEPENDENCY_PROPERTIES: readonly ["x", "y", "width", "height"];
|
|
29
|
+
export type DependencyProperty = (typeof DEPENDENCY_PROPERTIES)[number];
|
|
30
|
+
export declare const DEPENDENCY_DIRECTIONS: readonly ["increase", "decrease", "change", "unchanged"];
|
|
31
|
+
export type DependencyDirection = (typeof DEPENDENCY_DIRECTIONS)[number];
|
|
32
|
+
/** The observer never generates a dependency declaration from co-change; every declaration must explicitly identify that it was supplied externally. */
|
|
33
|
+
export declare const EXPECTED_DEPENDENCY_SOURCES: readonly ["explicit-config"];
|
|
34
|
+
export type ExpectedDependencySource = (typeof EXPECTED_DEPENDENCY_SOURCES)[number];
|
|
35
|
+
export interface DependencyTermDeclaration {
|
|
36
|
+
target: string;
|
|
37
|
+
property: DependencyProperty;
|
|
38
|
+
direction: DependencyDirection;
|
|
39
|
+
}
|
|
40
|
+
/** A bounded, explicitly-declared expected layout dependency (e.g. "navigation.width decreases -> workspace.width increases") - never inferred from co-change. */
|
|
41
|
+
export interface ExpectedDependencyDeclaration {
|
|
42
|
+
cause: DependencyTermDeclaration;
|
|
43
|
+
effect: DependencyTermDeclaration;
|
|
44
|
+
source: ExpectedDependencySource;
|
|
45
|
+
}
|
|
46
|
+
export declare function isValidExpectedDependencyDeclaration(value: unknown): value is ExpectedDependencyDeclaration;
|
|
47
|
+
/**
|
|
48
|
+
* Non-causal evaluation outcomes only - describes the relationship between a
|
|
49
|
+
* declared expectation and observed differences, never an implementation
|
|
50
|
+
* verdict (no PASS/FAIL/approved/regression/allowed/protected vocabulary).
|
|
51
|
+
*/
|
|
52
|
+
export declare const DEPENDENCY_EVIDENCE_OUTCOMES: readonly ["consistent", "not-observed", "contradictory-to-declaration", "unavailable"];
|
|
53
|
+
export type DependencyEvidenceOutcome = (typeof DEPENDENCY_EVIDENCE_OUTCOMES)[number];
|
|
54
|
+
export interface ExpectedDependencyEvidence {
|
|
55
|
+
declaration: ExpectedDependencyDeclaration;
|
|
56
|
+
outcome: DependencyEvidenceOutcome;
|
|
57
|
+
supportingEvidence: EvidenceReference[];
|
|
58
|
+
}
|
|
59
|
+
export declare function isValidExpectedDependencyEvidence(value: unknown): value is ExpectedDependencyEvidence;
|
|
60
|
+
/** Deliberately excludes any v0.5+ contract/change-scope field (requestedChanges, protected, preserved, allowedChanges, passThreshold, failThreshold, baseline, approval). */
|
|
61
|
+
export interface ComparisonConfig {
|
|
62
|
+
geometryTolerancePx: number;
|
|
63
|
+
expectedDependencies?: ExpectedDependencyDeclaration[];
|
|
64
|
+
}
|
|
65
|
+
export declare function isValidComparisonConfig(value: unknown): value is ComparisonConfig;
|
|
66
|
+
export declare const COMPARABILITY_STATES: readonly ["comparable", "comparable-with-warnings", "incomparable"];
|
|
67
|
+
export type ComparabilityState = (typeof COMPARABILITY_STATES)[number];
|
|
68
|
+
/**
|
|
69
|
+
* Hard-incompatibility reason codes are `blocking` (force `incomparable`
|
|
70
|
+
* unless the repository can prove a dimension cannot be evaluated
|
|
71
|
+
* reliably); warning-only differences are `warning` (do not by themselves
|
|
72
|
+
* prevent useful page-level comparison); dimensions the observer does not
|
|
73
|
+
* yet model (theme/authenticated-state/application-state identity) are
|
|
74
|
+
* `unassessed` and never claimed identical without evidence.
|
|
75
|
+
*/
|
|
76
|
+
export declare const COMPARABILITY_REASON_CODES: readonly ["artifact-kind-mismatch", "schema-version-mismatch", "page-url-mismatch", "viewport-mismatch", "scroll-scenario-mismatch", "browser-engine-mismatch", "producer-version-mismatch", "browser-version-mismatch", "target-set-mismatch", "target-locator-mismatch", "theme-unassessed", "authenticated-state-unassessed", "application-state-unassessed"];
|
|
77
|
+
export type ComparabilityReasonCode = (typeof COMPARABILITY_REASON_CODES)[number];
|
|
78
|
+
export type ComparabilityReasonSeverity = 'blocking' | 'warning' | 'unassessed';
|
|
79
|
+
export declare const COMPARABILITY_REASON_SEVERITY: Record<ComparabilityReasonCode, ComparabilityReasonSeverity>;
|
|
80
|
+
export interface ComparabilityReason {
|
|
81
|
+
code: ComparabilityReasonCode;
|
|
82
|
+
severity: ComparabilityReasonSeverity;
|
|
83
|
+
message: string;
|
|
84
|
+
}
|
|
85
|
+
export interface ComparabilityResult {
|
|
86
|
+
state: ComparabilityState;
|
|
87
|
+
reasons: ComparabilityReason[];
|
|
88
|
+
}
|
|
89
|
+
/** `incomparable` requires at least one `blocking` reason; a `blocking` reason forces `incomparable` - the two invariants are enforced together. */
|
|
90
|
+
export declare function isValidComparabilityResult(value: unknown): value is ComparabilityResult;
|
|
91
|
+
export declare const TARGET_CONFIGURATION_CHANGE_KINDS: readonly ["added", "removed", "locator-changed"];
|
|
92
|
+
export type TargetConfigurationChangeKind = (typeof TARGET_CONFIGURATION_CHANGE_KINDS)[number];
|
|
93
|
+
export interface TargetConfigurationChange {
|
|
94
|
+
kind: TargetConfigurationChangeKind;
|
|
95
|
+
target: string;
|
|
96
|
+
}
|
|
97
|
+
export declare function isValidTargetConfigurationChange(value: unknown): value is TargetConfigurationChange;
|
|
98
|
+
export declare const DIFFERENCE_KINDS: readonly ["appeared", "disappeared", "moved", "resized", "visibility-changed", "clipping-changed", "containment-changed", "horizontal-overflow-changed", "vertical-overflow-changed", "page-size-changed", "scroll-owner-changed", "relative-position-changed", "relationship-changed"];
|
|
99
|
+
export type DifferenceKind = (typeof DIFFERENCE_KINDS)[number];
|
|
100
|
+
export type ComparisonDifferenceSubject = {
|
|
101
|
+
type: 'target';
|
|
102
|
+
target: string;
|
|
103
|
+
} | {
|
|
104
|
+
type: 'relationship';
|
|
105
|
+
kind: PairwiseRelationshipKind | PageLevelRelationshipKind;
|
|
106
|
+
subjectTarget?: string;
|
|
107
|
+
relatedTarget?: string;
|
|
108
|
+
} | {
|
|
109
|
+
type: 'page';
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Bounded structured difference record - never prose-only, never a
|
|
113
|
+
* severity/pass-fail score (there is no severity model yet). `before`/
|
|
114
|
+
* `after`/`delta` are intentionally untyped here: their shape depends on
|
|
115
|
+
* `kind` (e.g. numeric geometry for `moved`/`resized`, boolean for
|
|
116
|
+
* `visibility-changed`) and is validated at the point of construction by
|
|
117
|
+
* whichever batch actually produces these records.
|
|
118
|
+
*/
|
|
119
|
+
export interface ComparisonDifference {
|
|
120
|
+
kind: DifferenceKind;
|
|
121
|
+
subject: ComparisonDifferenceSubject;
|
|
122
|
+
before: unknown;
|
|
123
|
+
after: unknown;
|
|
124
|
+
delta?: unknown;
|
|
125
|
+
classification: string;
|
|
126
|
+
beforeObservationId: string;
|
|
127
|
+
afterObservationId: string;
|
|
128
|
+
evidence: EvidenceReference[];
|
|
129
|
+
}
|
|
130
|
+
export declare function isValidComparisonDifference(value: unknown): value is ComparisonDifference;
|
|
131
|
+
/** One before/after transition of a single derived relationship - distinct from `ComparisonDifference` so the relationship graph's own vocabulary stays authoritative. `'unavailable'` covers a pair/page relationship that could not be evaluated on one side. */
|
|
132
|
+
export interface RelationshipChangeRecord {
|
|
133
|
+
scope: 'pairwise' | 'page';
|
|
134
|
+
kind: PairwiseRelationshipKind | PageLevelRelationshipKind;
|
|
135
|
+
subjectTarget?: string;
|
|
136
|
+
relatedTarget?: string;
|
|
137
|
+
before: PairwiseRelationshipKind | PageLevelRelationshipKind | 'unavailable';
|
|
138
|
+
after: PairwiseRelationshipKind | PageLevelRelationshipKind | 'unavailable';
|
|
139
|
+
beforeObservationId: string;
|
|
140
|
+
afterObservationId: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Enough logical identity to trace a comparison back to its authoritative
|
|
144
|
+
* source observations without embedding the full ObservationArtifact,
|
|
145
|
+
* copying screenshot bytes, or persisting a filesystem path as semantic
|
|
146
|
+
* identity.
|
|
147
|
+
*/
|
|
148
|
+
export interface ComparisonSourceObservationReference {
|
|
149
|
+
observationId: string;
|
|
150
|
+
requestId: string;
|
|
151
|
+
producer: {
|
|
152
|
+
name: typeof PRODUCER_NAME;
|
|
153
|
+
version: string;
|
|
154
|
+
};
|
|
155
|
+
observationSchemaVersion: typeof OBSERVATION_SCHEMA_VERSION;
|
|
156
|
+
screenshot: {
|
|
157
|
+
path: string;
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export declare function isValidComparisonSourceObservationReference(value: unknown): value is ComparisonSourceObservationReference;
|
|
161
|
+
/** Comparison is ordered: `before`/`after` are distinct fields (never a swappable pair) so `compare(A, B) !== compare(B, A)` for both identity and difference direction. */
|
|
162
|
+
export interface ComparisonArtifact {
|
|
163
|
+
artifactKind: typeof COMPARISON_ARTIFACT_KIND;
|
|
164
|
+
schemaVersion: typeof COMPARISON_SCHEMA_VERSION;
|
|
165
|
+
comparisonId: string;
|
|
166
|
+
comparisonRequestId: string;
|
|
167
|
+
producer: {
|
|
168
|
+
name: typeof PRODUCER_NAME;
|
|
169
|
+
version: string;
|
|
170
|
+
};
|
|
171
|
+
provenance: {
|
|
172
|
+
comparedAt: string;
|
|
173
|
+
};
|
|
174
|
+
before: ComparisonSourceObservationReference;
|
|
175
|
+
after: ComparisonSourceObservationReference;
|
|
176
|
+
config: ComparisonConfig;
|
|
177
|
+
comparability: ComparabilityResult;
|
|
178
|
+
configurationChanges: TargetConfigurationChange[];
|
|
179
|
+
relationshipsBefore: LayoutRelationshipGraph;
|
|
180
|
+
relationshipsAfter: LayoutRelationshipGraph;
|
|
181
|
+
differences: ComparisonDifference[];
|
|
182
|
+
relationshipChanges: RelationshipChangeRecord[];
|
|
183
|
+
expectedDependencyEvidence: ExpectedDependencyEvidence[];
|
|
184
|
+
diagnostics: Diagnostic[];
|
|
185
|
+
limits: {
|
|
186
|
+
truncated: boolean;
|
|
187
|
+
omittedFields: string[];
|
|
188
|
+
omittedTargetPairs: string[];
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
export type ComparisonSchemaValidationResult = {
|
|
192
|
+
valid: true;
|
|
193
|
+
} | {
|
|
194
|
+
valid: false;
|
|
195
|
+
reason: string;
|
|
196
|
+
};
|
|
197
|
+
/** Structural validator for the frozen ComparisonArtifact contract. Never delegates to `isValidObservationArtifact` - comparison and observation are different artifact kinds/schemas. */
|
|
198
|
+
export declare function isValidComparisonArtifact(value: unknown): ComparisonSchemaValidationResult;
|