@setsquare/review-sdk 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/NOTICE +57 -0
- package/README.md +338 -0
- package/THIRD-PARTY-NOTICES.md +61 -0
- package/dist/autoscan.d.ts +25 -0
- package/dist/autoscan.d.ts.map +1 -0
- package/dist/autoscan.js +332 -0
- package/dist/autoscan.js.map +1 -0
- package/dist/axe.d.ts +96 -0
- package/dist/axe.d.ts.map +1 -0
- package/dist/axe.js +210 -0
- package/dist/axe.js.map +1 -0
- package/dist/bin/setsquare.d.ts +3 -0
- package/dist/bin/setsquare.d.ts.map +1 -0
- package/dist/bin/setsquare.js +21 -0
- package/dist/bin/setsquare.js.map +1 -0
- package/dist/brand.d.ts +84 -0
- package/dist/brand.d.ts.map +1 -0
- package/dist/brand.js +335 -0
- package/dist/brand.js.map +1 -0
- package/dist/checks/dynamic.d.ts +57 -0
- package/dist/checks/dynamic.d.ts.map +1 -0
- package/dist/checks/dynamic.js +184 -0
- package/dist/checks/dynamic.js.map +1 -0
- package/dist/checks/rule-pack.d.ts +34 -0
- package/dist/checks/rule-pack.d.ts.map +1 -0
- package/dist/checks/rule-pack.js +270 -0
- package/dist/checks/rule-pack.js.map +1 -0
- package/dist/checks/versions.d.ts +28 -0
- package/dist/checks/versions.d.ts.map +1 -0
- package/dist/checks/versions.js +45 -0
- package/dist/checks/versions.js.map +1 -0
- package/dist/ci.d.ts +37 -0
- package/dist/ci.d.ts.map +1 -0
- package/dist/ci.js +199 -0
- package/dist/ci.js.map +1 -0
- package/dist/contract.d.ts +334 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +35 -0
- package/dist/contract.js.map +1 -0
- package/dist/dedupe.d.ts +79 -0
- package/dist/dedupe.d.ts.map +1 -0
- package/dist/dedupe.js +102 -0
- package/dist/dedupe.js.map +1 -0
- package/dist/document.d.ts +29 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +94 -0
- package/dist/document.js.map +1 -0
- package/dist/envelope.d.ts +124 -0
- package/dist/envelope.d.ts.map +1 -0
- package/dist/envelope.js +337 -0
- package/dist/envelope.js.map +1 -0
- package/dist/escape.d.ts +14 -0
- package/dist/escape.d.ts.map +1 -0
- package/dist/escape.js +20 -0
- package/dist/escape.js.map +1 -0
- package/dist/findings.d.ts +47 -0
- package/dist/findings.d.ts.map +1 -0
- package/dist/findings.js +229 -0
- package/dist/findings.js.map +1 -0
- package/dist/fixture.d.ts +7 -0
- package/dist/fixture.d.ts.map +1 -0
- package/dist/fixture.js +237 -0
- package/dist/fixture.js.map +1 -0
- package/dist/group.d.ts +214 -0
- package/dist/group.d.ts.map +1 -0
- package/dist/group.js +709 -0
- package/dist/group.js.map +1 -0
- package/dist/html-report.d.ts +68 -0
- package/dist/html-report.d.ts.map +1 -0
- package/dist/html-report.js +649 -0
- package/dist/html-report.js.map +1 -0
- package/dist/human.d.ts +65 -0
- package/dist/human.d.ts.map +1 -0
- package/dist/human.js +111 -0
- package/dist/human.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/infer.d.ts +65 -0
- package/dist/infer.d.ts.map +1 -0
- package/dist/infer.js +67 -0
- package/dist/infer.js.map +1 -0
- package/dist/insights.d.ts +140 -0
- package/dist/insights.d.ts.map +1 -0
- package/dist/insights.js +483 -0
- package/dist/insights.js.map +1 -0
- package/dist/install.d.ts +8 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +114 -0
- package/dist/install.js.map +1 -0
- package/dist/links.d.ts +45 -0
- package/dist/links.d.ts.map +1 -0
- package/dist/links.js +45 -0
- package/dist/links.js.map +1 -0
- package/dist/mask.d.ts +85 -0
- package/dist/mask.d.ts.map +1 -0
- package/dist/mask.js +98 -0
- package/dist/mask.js.map +1 -0
- package/dist/observe.d.ts +51 -0
- package/dist/observe.d.ts.map +1 -0
- package/dist/observe.js +233 -0
- package/dist/observe.js.map +1 -0
- package/dist/options.d.ts +249 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +185 -0
- package/dist/options.js.map +1 -0
- package/dist/output.d.ts +113 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +231 -0
- package/dist/output.js.map +1 -0
- package/dist/perf.d.ts +11 -0
- package/dist/perf.d.ts.map +1 -0
- package/dist/perf.js +150 -0
- package/dist/perf.js.map +1 -0
- package/dist/reading-level.d.ts +73 -0
- package/dist/reading-level.d.ts.map +1 -0
- package/dist/reading-level.js +189 -0
- package/dist/reading-level.js.map +1 -0
- package/dist/reporter.d.ts +94 -0
- package/dist/reporter.d.ts.map +1 -0
- package/dist/reporter.js +709 -0
- package/dist/reporter.js.map +1 -0
- package/dist/rules.d.ts +55 -0
- package/dist/rules.d.ts.map +1 -0
- package/dist/rules.js +77 -0
- package/dist/rules.js.map +1 -0
- package/dist/runtime.d.ts +32 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +67 -0
- package/dist/runtime.js.map +1 -0
- package/dist/sanitise.d.ts +116 -0
- package/dist/sanitise.d.ts.map +1 -0
- package/dist/sanitise.js +247 -0
- package/dist/sanitise.js.map +1 -0
- package/dist/scan.d.ts +60 -0
- package/dist/scan.d.ts.map +1 -0
- package/dist/scan.js +246 -0
- package/dist/scan.js.map +1 -0
- package/dist/screens.d.ts +98 -0
- package/dist/screens.d.ts.map +1 -0
- package/dist/screens.js +301 -0
- package/dist/screens.js.map +1 -0
- package/dist/settle.d.ts +65 -0
- package/dist/settle.d.ts.map +1 -0
- package/dist/settle.js +162 -0
- package/dist/settle.js.map +1 -0
- package/dist/shots.d.ts +109 -0
- package/dist/shots.d.ts.map +1 -0
- package/dist/shots.js +113 -0
- package/dist/shots.js.map +1 -0
- package/dist/style.d.ts +47 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/style.js +154 -0
- package/dist/style.js.map +1 -0
- package/dist/suite.d.ts +218 -0
- package/dist/suite.d.ts.map +1 -0
- package/dist/suite.js +219 -0
- package/dist/suite.js.map +1 -0
- package/dist/summary.d.ts +268 -0
- package/dist/summary.d.ts.map +1 -0
- package/dist/summary.js +1308 -0
- package/dist/summary.js.map +1 -0
- package/dist/unscannable.d.ts +75 -0
- package/dist/unscannable.d.ts.map +1 -0
- package/dist/unscannable.js +111 -0
- package/dist/unscannable.js.map +1 -0
- package/dist/versions.d.ts +13 -0
- package/dist/versions.d.ts.map +1 -0
- package/dist/versions.js +39 -0
- package/dist/versions.js.map +1 -0
- package/dist/wcag-map.d.ts +19 -0
- package/dist/wcag-map.d.ts.map +1 -0
- package/dist/wcag-map.js +52 -0
- package/dist/wcag-map.js.map +1 -0
- package/dist/with-setsquare.d.ts +26 -0
- package/dist/with-setsquare.d.ts.map +1 -0
- package/dist/with-setsquare.js +70 -0
- package/dist/with-setsquare.js.map +1 -0
- package/package.json +81 -0
package/dist/group.d.ts
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import type { RunGroupMeta, RunMeta, RunEnvelope } from './contract.js';
|
|
2
|
+
import { type TestOutcome } from './envelope.js';
|
|
3
|
+
import { type InferenceConfig } from './infer.js';
|
|
4
|
+
/**
|
|
5
|
+
* Run groups: one LOGICAL run spanning several Playwright invocations.
|
|
6
|
+
*
|
|
7
|
+
* The case this exists for is real and observed: an orchestrator that must run
|
|
8
|
+
* its functional projects at `--workers=1` and its a11y sweep at `--workers=4`
|
|
9
|
+
* makes two `playwright test` calls per suite execution, and each used to mint
|
|
10
|
+
* its own run directory — two half-runs with identical source metadata,
|
|
11
|
+
* indistinguishable from two whole runs. Every consumer downstream of that
|
|
12
|
+
* (completeness accounting, history comparison, upload) would be quietly wrong
|
|
13
|
+
* on every execution.
|
|
14
|
+
*
|
|
15
|
+
* The mechanism is deliberately lock-light and crash-first:
|
|
16
|
+
*
|
|
17
|
+
* - Each invocation writes a BEGUN marker when it starts and its own PART
|
|
18
|
+
* file (its complete contribution, raw observations included) when it
|
|
19
|
+
* ends. Both are uniquely named and written atomically, so concurrent
|
|
20
|
+
* invocations cannot collide and a reader can never see a torn file.
|
|
21
|
+
* - Every finishing invocation re-derives the merged `run.json`, `meta.json`
|
|
22
|
+
* and `report.html` from ALL parts present, under a directory lock, then
|
|
23
|
+
* re-lists and repeats if new parts arrived mid-merge. The last finisher
|
|
24
|
+
* converges to the full union; earlier merges are honest interim states.
|
|
25
|
+
* - The merge is `buildEnvelope` over the concatenated outcomes — the same
|
|
26
|
+
* single implementation of every policy (best-evidence dedupe, visited-but-
|
|
27
|
+
* never-scanned accounting, ruleset drift) now running over the union,
|
|
28
|
+
* rather than a second merge-flavoured copy of each that would drift.
|
|
29
|
+
*
|
|
30
|
+
* The honesty rules are load-bearing here. A begun marker with no part means an
|
|
31
|
+
* invocation's evidence is ABSENT, and the merged artifact says so. And the
|
|
32
|
+
* merge never claims completeness it cannot know: without a declared census
|
|
33
|
+
* (`SETSQUARE_RUN_PARTS`), an invocation that crashed before announcing itself is
|
|
34
|
+
* invisible, so the verdict is `unknown` — said out loud — not `complete`.
|
|
35
|
+
*/
|
|
36
|
+
export interface GroupContext {
|
|
37
|
+
/** The orchestrator's id, after filesystem sanitisation. */
|
|
38
|
+
id: string;
|
|
39
|
+
/** `group-<id>` — never collides with the timestamp pattern of solo runs. */
|
|
40
|
+
dirName: string;
|
|
41
|
+
/** This invocation's lane label, when the orchestrator set one. */
|
|
42
|
+
lane?: string;
|
|
43
|
+
/** Declared invocation count, when the orchestrator stated one. */
|
|
44
|
+
expectedParts?: number;
|
|
45
|
+
/** Anything about the contract we could not honour verbatim, named. */
|
|
46
|
+
warnings: string[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Read the run-group contract from the environment.
|
|
50
|
+
*
|
|
51
|
+
* Environment rather than `withSetsquare` options, and necessarily so: the reporter
|
|
52
|
+
* is constructed by Playwright from JSON-safe config, and the group id must
|
|
53
|
+
* change per suite execution while the config file does not. Absent
|
|
54
|
+
* `SETSQUARE_RUN_ID`, everything in this module stays out of the way and a solo
|
|
55
|
+
* invocation behaves exactly as it always has.
|
|
56
|
+
*/
|
|
57
|
+
export declare function readGroupContext(env?: NodeJS.ProcessEnv): GroupContext | undefined;
|
|
58
|
+
export declare const PART_VERSION = 1;
|
|
59
|
+
/** Playwright's verdict for a whole invocation, as `onEnd` reported it. */
|
|
60
|
+
export type InvocationStatus = 'passed' | 'failed' | 'timedout' | 'interrupted' | 'unknown';
|
|
61
|
+
export interface RunPart {
|
|
62
|
+
partVersion: typeof PART_VERSION;
|
|
63
|
+
partId: string;
|
|
64
|
+
lane?: string;
|
|
65
|
+
startedAt: string;
|
|
66
|
+
generatedAt: string;
|
|
67
|
+
durationMs: number;
|
|
68
|
+
/** `interrupted`/`timedout` means the invocation itself was cut short. */
|
|
69
|
+
playwrightStatus: InvocationStatus;
|
|
70
|
+
plannedTests?: number;
|
|
71
|
+
warnings: string[];
|
|
72
|
+
unknowns: string[];
|
|
73
|
+
/** This invocation's own Playwright HTML report, when it made one. */
|
|
74
|
+
reportPath?: string;
|
|
75
|
+
/**
|
|
76
|
+
* This invocation's config path and axis facts.
|
|
77
|
+
*
|
|
78
|
+
* Per-invocation, so they cannot be re-derived from the merged outcomes the way
|
|
79
|
+
* `suite` and `overhead` can — a merged group may span several configs, each with
|
|
80
|
+
* its own projects and its own theme/persona maps. They travel so the merge can
|
|
81
|
+
* combine them honestly rather than silently reporting one lane's as the run's.
|
|
82
|
+
*/
|
|
83
|
+
configFile?: string;
|
|
84
|
+
coverage?: RunMeta['coverage'];
|
|
85
|
+
/**
|
|
86
|
+
* This invocation's configured parallelism.
|
|
87
|
+
*
|
|
88
|
+
* Travels because it cannot be re-derived: worker BUSY TIME is in the outcomes,
|
|
89
|
+
* but whether two workers could ever have run at once is a config fact. Without
|
|
90
|
+
* it a merged run cannot tell an imbalance from the shape of a serial suite's
|
|
91
|
+
* projects — which is the confident wrong answer this field was added to prevent
|
|
92
|
+
* in the first place.
|
|
93
|
+
*/
|
|
94
|
+
configuredWorkers?: number;
|
|
95
|
+
source: {
|
|
96
|
+
branch: string;
|
|
97
|
+
commit: string;
|
|
98
|
+
runSource: 'ci' | 'local';
|
|
99
|
+
sdkVersion: string;
|
|
100
|
+
axeVersion: string;
|
|
101
|
+
ci?: RunEnvelope['source']['ci'];
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Map-based inference only. Persona/theme CALLBACKS cannot cross a process
|
|
105
|
+
* boundary, so their results are baked into the records before writing (see
|
|
106
|
+
* `prepareOutcomesForPart`), and what is stored here is the serialisable rest.
|
|
107
|
+
*/
|
|
108
|
+
inference: InferenceConfig;
|
|
109
|
+
outcomes: TestOutcome[];
|
|
110
|
+
}
|
|
111
|
+
export interface BegunMarker {
|
|
112
|
+
partId: string;
|
|
113
|
+
lane?: string;
|
|
114
|
+
startedAt: string;
|
|
115
|
+
pid: number;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Minted at `onBegin`, from the invocation's start time — the begun marker and
|
|
119
|
+
* the part file must share a name, and only the start exists at marker time.
|
|
120
|
+
* The random suffix is for two invocations starting in the same millisecond,
|
|
121
|
+
* which concurrent lanes make entirely possible.
|
|
122
|
+
*/
|
|
123
|
+
export declare function mintPartId(startedAt: string): string;
|
|
124
|
+
export declare function writeBegunMarker(groupDir: string, marker: BegunMarker): Promise<void>;
|
|
125
|
+
export declare function writePart(groupDir: string, part: RunPart): Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* Make an invocation's outcomes safe and self-contained before they touch disk.
|
|
128
|
+
*
|
|
129
|
+
* Two transformations, both load-bearing:
|
|
130
|
+
*
|
|
131
|
+
* **URLs are normalised to patterns NOW, not at merge.** Raw URLs carry
|
|
132
|
+
* identifiers and sometimes credentials — `/reset-password/<token>` is a real
|
|
133
|
+
* shape — and today they exist only transiently inside Playwright attachments.
|
|
134
|
+
* A part file is a durable artifact one careless `upload-artifact: .setsquare/**`
|
|
135
|
+
* away from leaving the machine, so the raw string must never be written to
|
|
136
|
+
* it. `toUrlPattern` is idempotent over its own output, so the merge applying
|
|
137
|
+
* it again is a no-op rather than a double-redaction.
|
|
138
|
+
*
|
|
139
|
+
* **Callback-based persona/theme resolution is applied now.** The customer's
|
|
140
|
+
* `persona`/`theme` functions live in this invocation's config and cannot be
|
|
141
|
+
* serialised; resolving here and recording the answer in `declared` produces
|
|
142
|
+
* the identical envelope value the merge would have produced with the callback
|
|
143
|
+
* in hand. Surfaces are left alone — their inference is map-based and the map
|
|
144
|
+
* travels in the part.
|
|
145
|
+
*/
|
|
146
|
+
export declare function prepareOutcomesForPart(outcomes: TestOutcome[], infrastructureProjects: ReadonlySet<string>, inference: InferenceConfig): TestOutcome[];
|
|
147
|
+
/** The maps survive serialisation; the callbacks were already applied. */
|
|
148
|
+
export declare function serialisableInference(inference: InferenceConfig): InferenceConfig;
|
|
149
|
+
export interface MergeInputs {
|
|
150
|
+
groupDir: string;
|
|
151
|
+
group: GroupContext;
|
|
152
|
+
/**
|
|
153
|
+
* Renders the merged HTML report. Injected so this module stays independent
|
|
154
|
+
* of the renderer; a missing or throwing renderer costs the report and
|
|
155
|
+
* nothing else, through the same warnings channel as everything the run
|
|
156
|
+
* could not do.
|
|
157
|
+
*/
|
|
158
|
+
renderReport?: (envelope: RunEnvelope, meta: RunMeta,
|
|
159
|
+
/** The merged outcomes, for the local-only facts the envelope cannot carry. */
|
|
160
|
+
outcomes: readonly TestOutcome[]) => string;
|
|
161
|
+
/**
|
|
162
|
+
* Renders the merged visual contact sheet, and is handed the merged outcomes
|
|
163
|
+
* because that is where the screenshot paths are — they are local facts, so
|
|
164
|
+
* they never enter the envelope. Injected and independently fallible for the
|
|
165
|
+
* same reasons as `renderReport`; returning `undefined` means "this run has
|
|
166
|
+
* nothing to show", which is not a failure and writes no file.
|
|
167
|
+
*/
|
|
168
|
+
renderScreens?: (outcomes: readonly TestOutcome[], runDir: string, envelope: RunEnvelope, meta: RunMeta) => string | undefined;
|
|
169
|
+
}
|
|
170
|
+
export interface MergeResult {
|
|
171
|
+
runDir: string;
|
|
172
|
+
envelopePath: string;
|
|
173
|
+
metaPath: string;
|
|
174
|
+
htmlReportPath?: string;
|
|
175
|
+
screensPath?: string;
|
|
176
|
+
envelope: RunEnvelope;
|
|
177
|
+
meta: RunMeta;
|
|
178
|
+
group: RunGroupMeta;
|
|
179
|
+
}
|
|
180
|
+
export declare function mergeGroup(inputs: MergeInputs): Promise<MergeResult>;
|
|
181
|
+
/**
|
|
182
|
+
* Combine the parts' per-invocation coverage facts.
|
|
183
|
+
*
|
|
184
|
+
* The two axes combine in OPPOSITE directions, and getting either backwards would
|
|
185
|
+
* produce a confident wrong answer:
|
|
186
|
+
*
|
|
187
|
+
* - `declaredAxes` is a UNION. Every value any lane configured is a value this
|
|
188
|
+
* run could have produced evidence for, so the denominator is the whole set.
|
|
189
|
+
* - `unmeasuredAxes` is an INTERSECTION. An axis one lane sets IS measured
|
|
190
|
+
* somewhere in the run, so only an axis no lane set anywhere is unmeasured.
|
|
191
|
+
* A union here would report `forcedColors` as unmeasured on a run that
|
|
192
|
+
* deliberately sharded it into its own lane, which is precisely wrong.
|
|
193
|
+
*/
|
|
194
|
+
export declare function mergedCoverage(parts: readonly {
|
|
195
|
+
coverage?: RunMeta['coverage'];
|
|
196
|
+
}[]): Pick<RunMeta, 'coverage'>;
|
|
197
|
+
/**
|
|
198
|
+
* The config path, only when every part agrees on it.
|
|
199
|
+
*
|
|
200
|
+
* A merged group spanning several configs has no single config, and naming one of
|
|
201
|
+
* them would make every derived repro command wrong for the other lanes. Omitted
|
|
202
|
+
* is the honest answer there.
|
|
203
|
+
*/
|
|
204
|
+
/**
|
|
205
|
+
* The parallelism a merged group ran at: the SUM across lanes.
|
|
206
|
+
*
|
|
207
|
+
* Summed rather than maxed because the lanes genuinely ran their own workers, and
|
|
208
|
+
* a merged run's imbalance question is about the whole fleet. Absent when no part
|
|
209
|
+
* reported it, so the imbalance framing stays withheld rather than assumed.
|
|
210
|
+
*/
|
|
211
|
+
export declare function mergedConfiguredWorkers(parts: readonly {
|
|
212
|
+
configuredWorkers?: number;
|
|
213
|
+
}[]): number | undefined;
|
|
214
|
+
//# sourceMappingURL=group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../src/group.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,YAAY,EAEZ,OAAO,EACP,WAAW,EACZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAGL,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AAKpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAMH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAID;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,YAAY,GAAG,SAAS,CA8B/F;AAuCD,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;AAE5F,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,OAAO,YAAY,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/B;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;KAClC,CAAC;IACF;;;;OAIG;IACH,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAMD,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3F;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,WAAW,EAAE,EACvB,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAAC,EAC3C,SAAS,EAAE,eAAe,GACzB,WAAW,EAAE,CAsCf;AAED,0EAA0E;AAC1E,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,eAAe,GAAG,eAAe,CAMjF;AAqFD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CACb,QAAQ,EAAE,WAAW,EACrB,IAAI,EAAE,OAAO;IACb,+EAA+E;IAC/E,QAAQ,EAAE,SAAS,WAAW,EAAE,KAC7B,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,SAAS,WAAW,EAAE,EAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,WAAW,EACrB,IAAI,EAAE,OAAO,KACV,MAAM,GAAG,SAAS,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CA0B1E;AA6JD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;CAAE,EAAE,GACnD,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CA2C3B;AAED;;;;;;GAMG;AACH;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS;IAAE,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAC/C,MAAM,GAAG,SAAS,CAMpB"}
|