@setsquare/review-sdk 0.0.1 → 0.1.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/NOTICE +3 -2
- package/README.md +220 -0
- package/dist/autoscan.d.ts +15 -1
- package/dist/autoscan.d.ts.map +1 -1
- package/dist/autoscan.js +168 -13
- package/dist/autoscan.js.map +1 -1
- package/dist/brand.d.ts +51 -2
- package/dist/brand.d.ts.map +1 -1
- package/dist/brand.js +560 -5
- package/dist/brand.js.map +1 -1
- package/dist/checks/context-change.d.ts +96 -0
- package/dist/checks/context-change.d.ts.map +1 -0
- package/dist/checks/context-change.js +655 -0
- package/dist/checks/context-change.js.map +1 -0
- package/dist/checks/focus.d.ts +154 -0
- package/dist/checks/focus.d.ts.map +1 -0
- package/dist/checks/focus.js +1123 -0
- package/dist/checks/focus.js.map +1 -0
- package/dist/checks/heuristics.d.ts +116 -0
- package/dist/checks/heuristics.d.ts.map +1 -0
- package/dist/checks/heuristics.js +931 -0
- package/dist/checks/heuristics.js.map +1 -0
- package/dist/checks/keyboard.d.ts +106 -0
- package/dist/checks/keyboard.d.ts.map +1 -0
- package/dist/checks/keyboard.js +452 -0
- package/dist/checks/keyboard.js.map +1 -0
- package/dist/checks/reflow.d.ts +75 -0
- package/dist/checks/reflow.d.ts.map +1 -0
- package/dist/checks/reflow.js +285 -0
- package/dist/checks/reflow.js.map +1 -0
- package/dist/checks/rule-pack.d.ts +1 -1
- package/dist/checks/rule-pack.d.ts.map +1 -1
- package/dist/checks/rule-pack.js +350 -45
- package/dist/checks/rule-pack.js.map +1 -1
- package/dist/checks/shortcuts.d.ts +71 -0
- package/dist/checks/shortcuts.d.ts.map +1 -0
- package/dist/checks/shortcuts.js +196 -0
- package/dist/checks/shortcuts.js.map +1 -0
- package/dist/checks/versions.d.ts.map +1 -1
- package/dist/checks/versions.js +33 -1
- package/dist/checks/versions.js.map +1 -1
- package/dist/contract.d.ts +18 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/covers.d.ts +56 -0
- package/dist/covers.d.ts.map +1 -0
- package/dist/covers.js +135 -0
- package/dist/covers.js.map +1 -0
- package/dist/dedupe.d.ts +23 -0
- package/dist/dedupe.d.ts.map +1 -1
- package/dist/dedupe.js +96 -2
- package/dist/dedupe.js.map +1 -1
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +144 -0
- package/dist/document.js.map +1 -1
- package/dist/envelope.d.ts +8 -0
- package/dist/envelope.d.ts.map +1 -1
- package/dist/envelope.js +28 -0
- package/dist/envelope.js.map +1 -1
- package/dist/fixture.d.ts.map +1 -1
- package/dist/fixture.js +12 -0
- package/dist/fixture.js.map +1 -1
- package/dist/html-report.d.ts +24 -7
- package/dist/html-report.d.ts.map +1 -1
- package/dist/html-report.js +608 -136
- package/dist/html-report.js.map +1 -1
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/links.d.ts +43 -0
- package/dist/links.d.ts.map +1 -1
- package/dist/links.js +43 -0
- package/dist/links.js.map +1 -1
- package/dist/observe.d.ts +8 -0
- package/dist/observe.d.ts.map +1 -1
- package/dist/observe.js +45 -1
- package/dist/observe.js.map +1 -1
- package/dist/options.d.ts +53 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +3 -0
- package/dist/options.js.map +1 -1
- package/dist/reading-level.d.ts +22 -1
- package/dist/reading-level.d.ts.map +1 -1
- package/dist/reading-level.js +122 -19
- package/dist/reading-level.js.map +1 -1
- package/dist/reporter.d.ts.map +1 -1
- package/dist/reporter.js +31 -15
- package/dist/reporter.js.map +1 -1
- package/dist/scan.d.ts +36 -1
- package/dist/scan.d.ts.map +1 -1
- package/dist/scan.js +16 -2
- package/dist/scan.js.map +1 -1
- package/dist/screens.d.ts +55 -4
- package/dist/screens.d.ts.map +1 -1
- package/dist/screens.js +243 -43
- package/dist/screens.js.map +1 -1
- package/dist/summary.d.ts +22 -0
- package/dist/summary.d.ts.map +1 -1
- package/dist/summary.js +197 -22
- package/dist/summary.js.map +1 -1
- package/dist/viewports.d.ts +105 -0
- package/dist/viewports.d.ts.map +1 -0
- package/dist/viewports.js +134 -0
- package/dist/viewports.js.map +1 -0
- package/package.json +5 -4
package/NOTICE
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Setsquare
|
|
2
|
-
Copyright (c) 2026
|
|
2
|
+
Copyright (c) 2026 WORKTREE AMIGOS LTD (company no. 17430189)
|
|
3
3
|
|
|
4
4
|
This product includes software developed by the Setsquare project
|
|
5
5
|
(https://setsquare.dev).
|
|
@@ -39,7 +39,8 @@ the same thing. The accurate phrase is "Apache-2.0 licensed".
|
|
|
39
39
|
Trademarks
|
|
40
40
|
--------------------------------------------------------------------------------
|
|
41
41
|
|
|
42
|
-
"Setsquare" and the Setsquare logo are trademarks of
|
|
42
|
+
"Setsquare" and the Setsquare logo are unregistered trademarks of WORKTREE
|
|
43
|
+
AMIGOS LTD. No trademark registration is sought or held (decision D1). No
|
|
43
44
|
trademark licence is granted by the Apache License — section 6 reserves this
|
|
44
45
|
expressly — and none is granted by this notice. You may state accurately that
|
|
45
46
|
your software uses or is compatible with Setsquare; you may not use the name or
|
package/README.md
CHANGED
|
@@ -85,6 +85,126 @@ and an evidence file at `.setsquare/runs/<timestamp>/run.json` — the full find
|
|
|
85
85
|
their WCAG criteria, measured contrast ratios, the exact ruleset used, and
|
|
86
86
|
performance timings.
|
|
87
87
|
|
|
88
|
+
### Checks that need the page driven, not read
|
|
89
|
+
|
|
90
|
+
Some of what runs is not axe. A DOM-snapshot analyser can only answer questions
|
|
91
|
+
about the document as it stands; several WCAG criteria are about what the page
|
|
92
|
+
*does*. These run because we are already inside your test, with your page:
|
|
93
|
+
|
|
94
|
+
| Criterion | What it does |
|
|
95
|
+
|---|---|
|
|
96
|
+
| **1.4.8** Visual Presentation, AAA | Measures line spacing, the measure in characters, and justification, on blocks of text. |
|
|
97
|
+
| **1.4.12** Text Spacing | Applies the SC's four spacing metrics and measures what clips. |
|
|
98
|
+
| **2.1.2** No Keyboard Trap | Tabs both ways and looks for a cycle focus never leaves. |
|
|
99
|
+
| **2.1.4** Character Key Shortcuts, opt-in | Watches which key handlers a page registers, and on which characters. |
|
|
100
|
+
| **2.4.7** Focus Visible | Diffs the computed style before and after focus — including `::before`/`::after`. |
|
|
101
|
+
| **2.4.11** Focus Not Obscured (Minimum) | Focuses each element and checks nothing covers it entirely. |
|
|
102
|
+
| **2.4.12** Focus Not Obscured (Enhanced), AAA | The same walk, stricter: no part of it covered. |
|
|
103
|
+
| **2.4.13** Focus Appearance, AAA | Measures the indicator's thickness and its contrast, and states both. |
|
|
104
|
+
| **3.1.5** Reading Level, AAA | A Flesch–Kincaid grade per page. |
|
|
105
|
+
| **3.2.1** On Focus | Focuses each control and watches for a change of context nobody asked for. |
|
|
106
|
+
| **3.2.2** On Input, opt-in | Changes each `<select>`, checkbox and radio and watches the same. |
|
|
107
|
+
| **3.2.3** Consistent Navigation | Compares navigation order **across surfaces**, after the run. |
|
|
108
|
+
| **3.2.4** Consistent Identification | Compares the names given to the same target across surfaces. |
|
|
109
|
+
| **3.2.6** Consistent Help | Compares where help mechanisms appear across surfaces. |
|
|
110
|
+
| **2.4.5** Multiple Ways | Looks across surfaces for navigation, a search control and a sitemap. |
|
|
111
|
+
| **3.3.1 / 4.1.3** Error Identification, Status Messages | Reads a page your test put into an error state. |
|
|
112
|
+
|
|
113
|
+
**If you use Tailwind and 1.4.8 fires across most of your prose, it is one line
|
|
114
|
+
of theme configuration rather than anything you wrote.** Tailwind's type scale
|
|
115
|
+
ships line heights below the 1.5 the SC asks for — `text-sm` is 1.43 — and line
|
|
116
|
+
height **inherits**, so one utility on one container hands it to every
|
|
117
|
+
paragraph inside. Raising `--text-*--line-height` in `@theme` fixes the lot and
|
|
118
|
+
leaves `leading-*` working; [recipe 14](../../docs/setsquare-recipes.md) has the
|
|
119
|
+
block. Worth checking before editing anything, because a run of these usually
|
|
120
|
+
has one cause rather than one per block.
|
|
121
|
+
|
|
122
|
+
The three walks that drive the page — focus, keyboard and reflow — run at
|
|
123
|
+
**teardown only**, and that is a real limitation rather than an implementation
|
|
124
|
+
detail. Focusing an element fires your page's own focus, focusin and blur
|
|
125
|
+
handlers; the keyboard walk presses Tab and Escape, which fires your key
|
|
126
|
+
handlers too; the reflow check resizes the viewport, which re-runs your media
|
|
127
|
+
queries. A handler that opened a menu or started a request has already run by
|
|
128
|
+
the time anything is restored.
|
|
129
|
+
|
|
130
|
+
Scroll position, the previously focused element and the viewport are all put
|
|
131
|
+
back; side effects cannot be. So a scan of a named state
|
|
132
|
+
(`{ state: 'menu-open' }`) carries no evidence from these checks, while
|
|
133
|
+
whatever your test left on screen does.
|
|
134
|
+
|
|
135
|
+
And twenty criteria are reported as **no automated rule can decide this** —
|
|
136
|
+
separately from the criteria nobody has built a rule for yet, because those are
|
|
137
|
+
different facts and an auditor's first question about an untested criterion is
|
|
138
|
+
which of the two it is. Each one carries the reason and what would have to
|
|
139
|
+
change for it to move, so the list is a position rather than a wall. Where
|
|
140
|
+
**presence** is checkable and **adequacy** is not — a caption track exists, but
|
|
141
|
+
whether it matches the audio is a judgement — the entry says so at that
|
|
142
|
+
granularity rather than writing the criterion off whole.
|
|
143
|
+
|
|
144
|
+
That list is the concrete floor under "automated evidence is not conformance".
|
|
145
|
+
A run that tells you twenty criteria no tool will ever check for you has told
|
|
146
|
+
you something more useful than a green tick.
|
|
147
|
+
|
|
148
|
+
Alongside those, eight **heuristics** point at criteria no rule can decide —
|
|
149
|
+
meaningful sequence (1.3.2), sensory instructions (1.3.3), weak headings
|
|
150
|
+
(2.4.6), unheaded runs (2.4.10), abbreviations (3.1.4), location cues (2.4.8),
|
|
151
|
+
missing caption tracks (1.2.1/1.2.2), and more than one route to a page
|
|
152
|
+
(2.4.5). They follow one discipline: **never a violation, always needs a
|
|
153
|
+
person, fire only above a margin, and say what would resolve it.** A heuristic
|
|
154
|
+
that reports a failure is worse than no heuristic, because someone who
|
|
155
|
+
disproves one stops trusting all of them.
|
|
156
|
+
|
|
157
|
+
They are on by default, being read-only and unable to fail a build, and each is
|
|
158
|
+
switchable on its own — `heuristics: { sensoryCharacteristics: false }` — so
|
|
159
|
+
disagreeing with one costs you one rather than all eight. The three that read
|
|
160
|
+
English words stay silent on a page in another language rather than guessing.
|
|
161
|
+
|
|
162
|
+
The last three below are the ones no per-page tool can have. They are statements
|
|
163
|
+
about a **set** of pages, computed after the whole run from what each scan
|
|
164
|
+
already carried — so they cost no extra page work, and they exist because the
|
|
165
|
+
run holds every surface at once.
|
|
166
|
+
|
|
167
|
+
They are also the ones with the most dangerous failure mode, so: **a run with
|
|
168
|
+
fewer than two surfaces reports them as untested, never as passing.** A
|
|
169
|
+
one-page run cannot evidence consistency, and a clean pass on a run that had
|
|
170
|
+
nothing to compare would be the most flattering possible lie. The summary says
|
|
171
|
+
"these criteria compare pages against each other — this run had one surface"
|
|
172
|
+
rather than folding them in with the criteria nothing can check.
|
|
173
|
+
|
|
174
|
+
Only links in navigation, header and footer landmarks are compared, because
|
|
175
|
+
3.2.4 is about repeated components: naming an inline prose link differently in
|
|
176
|
+
two sentences is ordinary writing, not an inconsistency.
|
|
177
|
+
|
|
178
|
+
**2.1.4 is off unless you turn it on** (`keyShortcuts: true`), and for a
|
|
179
|
+
different reason again. There is no way to enumerate a page's event listeners
|
|
180
|
+
after the fact, so the only route is to wrap `addEventListener` before your own
|
|
181
|
+
scripts run, for the whole life of the page. Everything else here happens after
|
|
182
|
+
a page has loaded and can be undone. Even proven inert — the wrapper records
|
|
183
|
+
and delegates with your original arguments, so `removeEventListener` still
|
|
184
|
+
matches, and the fixture suite asserts exactly that — it is a larger presence in
|
|
185
|
+
your application than a scanner has any business having by default.
|
|
186
|
+
|
|
187
|
+
It only ever reports **needs a person**: 2.1.4 is satisfied if the shortcut can
|
|
188
|
+
be turned off, remapped, or is only active when a component has focus, and all
|
|
189
|
+
three are affordances no check can see.
|
|
190
|
+
|
|
191
|
+
**3.2.2 is off unless you turn it on** (`onInput: true`), and the default is the
|
|
192
|
+
decision rather than caution: a change event is where an application saves, and
|
|
193
|
+
writing to your data is a worse failure than any finding the rule could produce
|
|
194
|
+
— worse than being a flake, because a flake is visible and a silent write is
|
|
195
|
+
not. Turn it on where the suite runs against disposable data, which is most
|
|
196
|
+
suites. Even then, only `<select>`, checkboxes and radios are touched and their
|
|
197
|
+
values are put back; nothing is ever typed into a text field, no form is ever
|
|
198
|
+
submitted, and no navigation is ever allowed to commit.
|
|
199
|
+
|
|
200
|
+
Where geometry or stacking makes the answer a judgement — a translucent overlay
|
|
201
|
+
over the focused element, an indicator drawn with a box-shadow, a focus ring
|
|
202
|
+
against a gradient — these report **needs a person**, never a pass and never a
|
|
203
|
+
fail. So does an element whose focus indicator we could not observe: many sites
|
|
204
|
+
style `:focus-visible` only, and a programmatic focus does not always match it,
|
|
205
|
+
so "nothing changed" is reported as something to check rather than as a
|
|
206
|
+
failure.
|
|
207
|
+
|
|
88
208
|
## Every screenshot on one page
|
|
89
209
|
|
|
90
210
|
Playwright takes the screenshots; reading them means opening its report and
|
|
@@ -151,6 +271,106 @@ test('the editor reports validation errors accessibly', async ({ page }) => {
|
|
|
151
271
|
|
|
152
272
|
An explicit scan always outranks an inferred one for the same context.
|
|
153
273
|
|
|
274
|
+
## Scanning at more than one viewport
|
|
275
|
+
|
|
276
|
+
A rule only ever sees the viewport it ran in. A navigation that collapses into a
|
|
277
|
+
menu below a breakpoint is a *different document*, not a narrower one, so a scan
|
|
278
|
+
at 1280 has no opinion about the same page at 390.
|
|
279
|
+
|
|
280
|
+
Setsquare cannot widen that for you — it scans the pages your suite drives, at
|
|
281
|
+
the sizes your suite drives them, and it takes no screenshots at all. A project
|
|
282
|
+
per width does, and it needs no changes to your tests:
|
|
283
|
+
|
|
284
|
+
```ts
|
|
285
|
+
export default withSetsquare(
|
|
286
|
+
defineConfig({
|
|
287
|
+
projects: [
|
|
288
|
+
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
|
|
289
|
+
{
|
|
290
|
+
name: 'tablet',
|
|
291
|
+
testMatch: /a11y\.spec\.ts/,
|
|
292
|
+
use: { ...devices['Desktop Chrome'], viewport: { width: 768, height: 1024 } },
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: 'mobile',
|
|
296
|
+
testMatch: /a11y\.spec\.ts/,
|
|
297
|
+
use: { ...devices['Desktop Chrome'], viewport: { width: 390, height: 844 } },
|
|
298
|
+
},
|
|
299
|
+
],
|
|
300
|
+
}),
|
|
301
|
+
);
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
Spreading `Desktop Chrome` and overriding only `viewport` holds the engine
|
|
305
|
+
constant, so the width is the only variable — `devices['iPhone 15']` is WebKit
|
|
306
|
+
and changes both at once. `testMatch` keeps the extra projects to the specs whose
|
|
307
|
+
layout is the subject; a spec that sets its own viewport, or that checks request
|
|
308
|
+
origins or resolves links, returns the same answer at every width. And 320 needs
|
|
309
|
+
no project of its own: `setsquare-reflow` measures WCAG 1.4.10 there on every
|
|
310
|
+
surface already, by resizing at teardown and putting the viewport back.
|
|
311
|
+
|
|
312
|
+
The viewport is part of a scan's identity, so evidence from several widths
|
|
313
|
+
survives instead of collapsing into one row, and the report, the contact sheet
|
|
314
|
+
and the per-surface tables group by band — laptop 1024px and wider, tablet 768px
|
|
315
|
+
to 1023px, mobile narrower than 768px — with the exact size beside every name.
|
|
316
|
+
Those names describe a width and never a device: a 640px viewport is in the
|
|
317
|
+
mobile band whether it is a phone or a desktop browser with text at 200%, and
|
|
318
|
+
every artifact that prints a band name prints that caveat with it.
|
|
319
|
+
|
|
320
|
+
With one viewport in the run, Setsquare says nothing about narrow widths. Not
|
|
321
|
+
"no narrow-viewport failures found" — that would be a claim about your phone
|
|
322
|
+
layout from a run that never looked at it.
|
|
323
|
+
|
|
324
|
+
## Telling the report what your own tests already cover
|
|
325
|
+
|
|
326
|
+
Some success criteria no automated engine evaluates. Reflow at 320px, focus not
|
|
327
|
+
being obscured by a sticky header, a keyboard trap, whether the navigation is
|
|
328
|
+
consistent between pages — these are checked by driving the page, and a suite
|
|
329
|
+
that has grown up around a real product is usually checking several of them
|
|
330
|
+
already. Until you say so, the conformance report has no way to know: your spec
|
|
331
|
+
arrives as a pass or a fail with no criterion attached to it.
|
|
332
|
+
|
|
333
|
+
So say so:
|
|
334
|
+
|
|
335
|
+
```ts
|
|
336
|
+
import { setsquare } from '@setsquare/review-sdk';
|
|
337
|
+
|
|
338
|
+
test('no horizontal scrolling at 320px', async ({ page }) => {
|
|
339
|
+
setsquare.covers('1.4.10');
|
|
340
|
+
|
|
341
|
+
await page.setViewportSize({ width: 320, height: 800 });
|
|
342
|
+
await page.goto('/pricing');
|
|
343
|
+
expect(await hasHorizontalOverflow(page)).toBe(false);
|
|
344
|
+
});
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
That criterion now appears in the report as **covered by your own test**, with
|
|
348
|
+
your test named next to it.
|
|
349
|
+
|
|
350
|
+
**It is recorded as your claim, not as our finding, and the report says so
|
|
351
|
+
everywhere it appears.** We do not check that a test declaring `1.4.10` tests
|
|
352
|
+
reflow — there is no way to — so a declaration is never merged into the state
|
|
353
|
+
that means every automated rule passed. It is its own state, worded
|
|
354
|
+
differently, with its own glyph in the grid. That is the point: the declaration
|
|
355
|
+
is exactly as strong as the test behind it, and the report never pretends
|
|
356
|
+
otherwise.
|
|
357
|
+
|
|
358
|
+
Three details worth knowing:
|
|
359
|
+
|
|
360
|
+
- **A declaring test that fails** is reported as *your own test for this
|
|
361
|
+
criterion did not pass*, and it stops the level reading as clean. It does not
|
|
362
|
+
become a detected failure: we did not observe it, and a red test can be red
|
|
363
|
+
for a reason that has nothing to do with the criterion.
|
|
364
|
+
- **A declaring test that is skipped** is reported as such, rather than folded
|
|
365
|
+
into "no automated check exists" — a check that exists and did not run is a
|
|
366
|
+
different problem.
|
|
367
|
+
- **An id that is not a WCAG 2.2 success criterion throws**, immediately, in
|
|
368
|
+
your test. This is the one thing in this package that does: everywhere else a
|
|
369
|
+
problem warns and carries on, because our evidence-gathering has no standing
|
|
370
|
+
to fail your build. A typo here is different — the alternative is dropping
|
|
371
|
+
your declaration silently, which would leave you believing you have coverage
|
|
372
|
+
you do not have.
|
|
373
|
+
|
|
154
374
|
## Configuration
|
|
155
375
|
|
|
156
376
|
Everything is optional. An empty options object produces a useful run.
|
package/dist/autoscan.d.ts
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
|
-
import type { BrowserContext, TestInfo } from '@playwright/test';
|
|
1
|
+
import type { BrowserContext, Page, TestInfo } from '@playwright/test';
|
|
2
|
+
import type { AxeFinding, RuleInapplicable, RulePass } from '@setsquare/schema';
|
|
2
3
|
import { type ResolvedSetsquareOptions } from './options.js';
|
|
3
4
|
export declare function installAutoScan(context: BrowserContext, options: ResolvedSetsquareOptions, testInfo: TestInfo, warn: (message: string) => void): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Setsquare's own driven checks: the ones that need the page acted on rather
|
|
7
|
+
* than read.
|
|
8
|
+
*
|
|
9
|
+
* Extracted so the teardown scan and the checks-only teardown record run
|
|
10
|
+
* exactly the same set. Two call sites with two hand-maintained lists is how a
|
|
11
|
+
* check ends up silently missing from half the runs.
|
|
12
|
+
*/
|
|
13
|
+
export declare function runDrivenChecks(page: Page, options: ResolvedSetsquareOptions): Promise<{
|
|
14
|
+
findings: AxeFinding[];
|
|
15
|
+
passes: RulePass[];
|
|
16
|
+
inapplicable: RuleInapplicable[];
|
|
17
|
+
}>;
|
|
4
18
|
/**
|
|
5
19
|
* Scan whatever the test left on screen, at teardown.
|
|
6
20
|
*
|
package/dist/autoscan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoscan.d.ts","sourceRoot":"","sources":["../src/autoscan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"autoscan.d.ts","sourceRoot":"","sources":["../src/autoscan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAoBhF,OAAO,EAAqB,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAC;AA6FhF,wBAAgB,eAAe,CAC7B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqFf;AA+LD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC;IAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,YAAY,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAAC,CAuC3F;AAmFD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,wBAAwB,EACjC,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC9B,OAAO,CAAC,IAAI,CAAC,CA6Ef"}
|
package/dist/autoscan.js
CHANGED
|
@@ -2,6 +2,12 @@ import { engineVersion, rulesetDigest, runAxe } from './axe.js';
|
|
|
2
2
|
import { SCAN_RECORD_ATTACHMENT, SCAN_RECORD_VERSION } from './contract.js';
|
|
3
3
|
import { toFindings, toInapplicable, toPasses } from './findings.js';
|
|
4
4
|
import { runStatusMessages, runTextSpacing } from './checks/dynamic.js';
|
|
5
|
+
import { runFocusNotObscured } from './checks/focus.js';
|
|
6
|
+
import { runKeyboardTrap } from './checks/keyboard.js';
|
|
7
|
+
import { runOnFocus, runOnInput } from './checks/context-change.js';
|
|
8
|
+
import { runReflow } from './checks/reflow.js';
|
|
9
|
+
import { heuristicEvidence, readHeuristicSignals } from './checks/heuristics.js';
|
|
10
|
+
import { runKeyShortcuts } from './checks/shortcuts.js';
|
|
5
11
|
import { setsquareCheckVersions } from './checks/versions.js';
|
|
6
12
|
import { runReadingLevel } from './reading-level.js';
|
|
7
13
|
import { readingLevelEnabled } from './runtime.js';
|
|
@@ -26,6 +32,9 @@ function stateFor(page, url) {
|
|
|
26
32
|
perfCaptured: false,
|
|
27
33
|
scans: existing?.scans ?? 0,
|
|
28
34
|
scanned: existing?.scanned ?? new Map(),
|
|
35
|
+
teardownScanned: existing?.teardownScanned ?? new Set(),
|
|
36
|
+
...(existing?.axeVersion ? { axeVersion: existing.axeVersion } : {}),
|
|
37
|
+
...(existing?.rulesetDigest ? { rulesetDigest: existing.rulesetDigest } : {}),
|
|
29
38
|
};
|
|
30
39
|
state.set(page, next);
|
|
31
40
|
return next;
|
|
@@ -73,6 +82,22 @@ export function installAutoScan(context, options, testInfo, warn) {
|
|
|
73
82
|
pageState.queue = pageState.queue.then(async () => {
|
|
74
83
|
if (page.isClosed())
|
|
75
84
|
return;
|
|
85
|
+
/*
|
|
86
|
+
* Checked HERE, inside the queued work, not at the callback's entry.
|
|
87
|
+
*
|
|
88
|
+
* A settle callback can fire while teardown is already running: it passes
|
|
89
|
+
* any entry check, queues behind the teardown scan, and lands second.
|
|
90
|
+
* Dedupe breaks a tie in favour of the later scan, so it replaced the
|
|
91
|
+
* teardown scan with a row carrying no driven checks at all — those only
|
|
92
|
+
* ever run at teardown. A page that had three real violations reported
|
|
93
|
+
* none.
|
|
94
|
+
*
|
|
95
|
+
* By the time this runs, the teardown scan has finished and said so. The
|
|
96
|
+
* test is over; this scan is looking at a page nobody is using any more,
|
|
97
|
+
* and it is never the better evidence.
|
|
98
|
+
*/
|
|
99
|
+
if (pageState.teardownScanned.has(signal.url))
|
|
100
|
+
return;
|
|
76
101
|
try {
|
|
77
102
|
await scanSettledPage(page, signal, options, testInfo, warn);
|
|
78
103
|
}
|
|
@@ -167,20 +192,16 @@ async function scanSettledPage(page, signal, options, testInfo, warn) {
|
|
|
167
192
|
const passes = toPasses(results);
|
|
168
193
|
const inapplicable = toInapplicable(results);
|
|
169
194
|
/*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
195
|
+
* Driven checks only at TEARDOWN, never mid-test: they mutate the live page,
|
|
196
|
+
* and an auto-scan firing between a customer's actions would make us the
|
|
197
|
+
* flake in their screenshot assertion. At teardown the test is over and the
|
|
198
|
+
* page is about to be discarded.
|
|
174
199
|
*/
|
|
175
200
|
if (signal.reason === 'teardown') {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
passes.push(check.pass);
|
|
181
|
-
if (check.inapplicable)
|
|
182
|
-
inapplicable.push(check.inapplicable);
|
|
183
|
-
}
|
|
201
|
+
const checks = await runDrivenChecks(page, options);
|
|
202
|
+
findings.push(...checks.findings);
|
|
203
|
+
passes.push(...checks.passes);
|
|
204
|
+
inapplicable.push(...checks.inapplicable);
|
|
184
205
|
}
|
|
185
206
|
const record = {
|
|
186
207
|
recordVersion: SCAN_RECORD_VERSION,
|
|
@@ -244,6 +265,10 @@ async function scanSettledPage(page, signal, options, testInfo, warn) {
|
|
|
244
265
|
...(probesMs > 0 ? { probesMs } : {}),
|
|
245
266
|
};
|
|
246
267
|
pageState.scanned.set(url, await mutationTotal(page));
|
|
268
|
+
if (signal.reason === 'teardown')
|
|
269
|
+
pageState.teardownScanned.add(url);
|
|
270
|
+
pageState.axeVersion = record.axeVersion;
|
|
271
|
+
pageState.rulesetDigest = record.rulesetDigest;
|
|
247
272
|
await testInfo.attach(SCAN_RECORD_ATTACHMENT, {
|
|
248
273
|
body: Buffer.from(JSON.stringify(record), 'utf8'),
|
|
249
274
|
contentType: 'application/json',
|
|
@@ -262,6 +287,118 @@ function engineOf(page) {
|
|
|
262
287
|
const name = page.context().browser()?.browserType().name();
|
|
263
288
|
return name === 'firefox' || name === 'webkit' ? name : 'chromium';
|
|
264
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* Setsquare's own driven checks: the ones that need the page acted on rather
|
|
292
|
+
* than read.
|
|
293
|
+
*
|
|
294
|
+
* Extracted so the teardown scan and the checks-only teardown record run
|
|
295
|
+
* exactly the same set. Two call sites with two hand-maintained lists is how a
|
|
296
|
+
* check ends up silently missing from half the runs.
|
|
297
|
+
*/
|
|
298
|
+
export async function runDrivenChecks(page, options) {
|
|
299
|
+
const findings = [];
|
|
300
|
+
const passes = [];
|
|
301
|
+
const inapplicable = [];
|
|
302
|
+
for (const check of [
|
|
303
|
+
await runTextSpacing(page),
|
|
304
|
+
await runStatusMessages(page),
|
|
305
|
+
// The focus walk is teardown-ONLY, unlike the two above — it is the one
|
|
306
|
+
// check that cannot also run inside an awaited explicit scan. Focusing
|
|
307
|
+
// fires the page's own focus, focusin and blur handlers, and a handler
|
|
308
|
+
// that opened a menu or started a request has already run by the time we
|
|
309
|
+
// restore scroll and the previous activeElement. See checks/focus.ts.
|
|
310
|
+
...(await runFocusNotObscured(page, options.rules.target)),
|
|
311
|
+
// Same teardown-only reasoning, one step further: this one presses keys.
|
|
312
|
+
await runKeyboardTrap(page),
|
|
313
|
+
// And one step further again: this one RESIZES the page. It restores the
|
|
314
|
+
// viewport, but a resize mid-test is not a race we could win.
|
|
315
|
+
await runReflow(page),
|
|
316
|
+
// 3.2.1 rides the same focusing the walk above already does, so it adds no
|
|
317
|
+
// new class of side effect. 3.2.2 CHANGES a control's value, which is where
|
|
318
|
+
// an application saves — opt-in, and off by default.
|
|
319
|
+
await runOnFocus(page),
|
|
320
|
+
...(options.onInput ? [await runOnInput(page)] : []),
|
|
321
|
+
// Reads what the init script recorded, if one was installed. Returns
|
|
322
|
+
// nothing when it was not, which is the honest answer for a check that is
|
|
323
|
+
// off rather than a pass it did not earn.
|
|
324
|
+
await runKeyShortcuts(page),
|
|
325
|
+
// Seven read-only heuristics sharing one page evaluate. They can never
|
|
326
|
+
// fail a build — everything they emit is needs-review — so they are on by
|
|
327
|
+
// default and individually switchable.
|
|
328
|
+
...(await heuristics(page, options)),
|
|
329
|
+
]) {
|
|
330
|
+
if (check.finding)
|
|
331
|
+
findings.push(check.finding);
|
|
332
|
+
if (check.pass)
|
|
333
|
+
passes.push(check.pass);
|
|
334
|
+
if (check.inapplicable)
|
|
335
|
+
inapplicable.push(check.inapplicable);
|
|
336
|
+
}
|
|
337
|
+
return { findings, passes, inapplicable };
|
|
338
|
+
}
|
|
339
|
+
/** The seven DOM heuristics, or nothing if the page could not be read. */
|
|
340
|
+
async function heuristics(page, options) {
|
|
341
|
+
const signals = await readHeuristicSignals(page);
|
|
342
|
+
if (!signals)
|
|
343
|
+
return [];
|
|
344
|
+
return heuristicEvidence(signals, options.rules.target, options.heuristics);
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Run the driven checks on a page that was already scanned and has not changed,
|
|
348
|
+
* and attach them as a checks-only record.
|
|
349
|
+
*
|
|
350
|
+
* No axe run: there is genuinely nothing new for it to find, and paying for a
|
|
351
|
+
* second one on every page of every test would be a real cost for no evidence.
|
|
352
|
+
* `toScans` merges this into the scan that shares its `visitRef`, so the
|
|
353
|
+
* envelope ends up with one row carrying both kinds of result rather than two
|
|
354
|
+
* rows fighting over one context in dedupe.
|
|
355
|
+
*/
|
|
356
|
+
async function flushChecksOnly(page, options, testInfo, pageState, url, warn) {
|
|
357
|
+
/*
|
|
358
|
+
* No earlier scan on this page means nothing for the merge to attach to, and
|
|
359
|
+
* no ruleset identity to state. Reaching here without one would mean the skip
|
|
360
|
+
* above fired without a scan having happened, which cannot occur — but
|
|
361
|
+
* fabricating a digest to satisfy the type would be a fake that looks real,
|
|
362
|
+
* and this file's rule is that a digest is always a hash of a stated input.
|
|
363
|
+
*/
|
|
364
|
+
if (!pageState.axeVersion || !pageState.rulesetDigest)
|
|
365
|
+
return;
|
|
366
|
+
try {
|
|
367
|
+
const checks = await runDrivenChecks(page, options);
|
|
368
|
+
if (checks.findings.length === 0 &&
|
|
369
|
+
checks.passes.length === 0 &&
|
|
370
|
+
checks.inapplicable.length === 0) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const record = {
|
|
374
|
+
recordVersion: SCAN_RECORD_VERSION,
|
|
375
|
+
kind: 'scan',
|
|
376
|
+
checksOnly: true,
|
|
377
|
+
page: { project: testInfo.project.name, engine: engineOf(page), url },
|
|
378
|
+
declared: { surface: '' },
|
|
379
|
+
visitRef: pageState.visitRef,
|
|
380
|
+
// Stated from the run's configuration, as everywhere else: these fields
|
|
381
|
+
// describe what the evidence is relative to, and a checks-only record is
|
|
382
|
+
// relative to exactly the same configuration as the scan it merges into.
|
|
383
|
+
axeVersion: pageState.axeVersion,
|
|
384
|
+
rulesetDigest: pageState.rulesetDigest,
|
|
385
|
+
wcagTarget: options.rules.target,
|
|
386
|
+
findings: checks.findings,
|
|
387
|
+
passes: checks.passes,
|
|
388
|
+
...(checks.inapplicable.length > 0 ? { inapplicable: checks.inapplicable } : {}),
|
|
389
|
+
};
|
|
390
|
+
const viewport = page.viewportSize();
|
|
391
|
+
if (viewport)
|
|
392
|
+
record.page.viewport = viewport;
|
|
393
|
+
await testInfo.attach(SCAN_RECORD_ATTACHMENT, {
|
|
394
|
+
body: Buffer.from(JSON.stringify(record), 'utf8'),
|
|
395
|
+
contentType: 'application/json',
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
catch (error) {
|
|
399
|
+
warn(`Setsquare could not run its driven checks on ${url}: ${error instanceof Error ? error.message : String(error)}. That page has no focus, keyboard or reflow evidence in this run.`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
265
402
|
/**
|
|
266
403
|
* Scan whatever the test left on screen, at teardown.
|
|
267
404
|
*
|
|
@@ -306,8 +443,26 @@ export async function flushAutoScan(context, options, testInfo, warn) {
|
|
|
306
443
|
* everything changed".
|
|
307
444
|
*/
|
|
308
445
|
const lastScannedAt = pageState.scanned.get(url);
|
|
309
|
-
if (lastScannedAt !== undefined && (await mutationTotal(page)) === lastScannedAt)
|
|
446
|
+
if (lastScannedAt !== undefined && (await mutationTotal(page)) === lastScannedAt) {
|
|
447
|
+
/*
|
|
448
|
+
* Right for axe, wrong for the driven checks — and that asymmetry was a
|
|
449
|
+
* silent hole for months.
|
|
450
|
+
*
|
|
451
|
+
* Nothing has changed, so re-running axe would find the same rows twice.
|
|
452
|
+
* But the driven checks never ran at all: they are teardown-only by
|
|
453
|
+
* construction, and this page's only scan happened mid-test when it went
|
|
454
|
+
* quiet. So a page that settles during its own test — a static page, a
|
|
455
|
+
* fast test, most of the web — got no text-spacing, focus, keyboard,
|
|
456
|
+
* reflow or context evidence, and the criteria those checks exist for
|
|
457
|
+
* stayed at "no automated result" on exactly the pages they would have
|
|
458
|
+
* had most to say about.
|
|
459
|
+
*
|
|
460
|
+
* Found by adding 3.2.1 and 3.2.2 and watching the fixture site report
|
|
461
|
+
* them as passing everywhere on a page built to fail both.
|
|
462
|
+
*/
|
|
463
|
+
await flushChecksOnly(page, options, testInfo, pageState, url, warn);
|
|
310
464
|
continue;
|
|
465
|
+
}
|
|
311
466
|
try {
|
|
312
467
|
// Chained onto the same queue as settle-triggered scans, so a scan that was
|
|
313
468
|
// already in flight when the test ended is not raced.
|
package/dist/autoscan.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoscan.js","sourceRoot":"","sources":["../src/autoscan.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"autoscan.js","sourceRoot":"","sources":["../src/autoscan.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAyB,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAiC,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAqB,MAAM,aAAa,CAAC;AAmD9F,MAAM,KAAK,GAAG,IAAI,OAAO,EAAmB,CAAC;AAE7C,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB,SAAS,QAAQ,CAAC,IAAU,EAAE,GAAW;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAEjC,IAAI,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC;IAE3D,MAAM,IAAI,GAAc;QACtB,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,OAAO,CAAC,OAAO,EAAE;QAC3C,QAAQ,EAAE,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,EAAE;QACnC,QAAQ,EAAE,GAAG;QACb,YAAY,EAAE,KAAK;QACnB,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,CAAC;QAC3B,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI,GAAG,EAAkB;QACvD,eAAe,EAAE,QAAQ,EAAE,eAAe,IAAI,IAAI,GAAG,EAAU;QAC/D,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;IAEF,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,UAAU,eAAe,CAC7B,OAAuB,EACvB,OAAiC,EACjC,QAAkB,EAClB,IAA+B;IAE/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAE9B,MAAM,SAAS,GAAG,KAAK,EAAE,IAAU,EAAE,MAAoB,EAAiB,EAAE;QAC1E,4EAA4E;QAC5E,gEAAgE;QAChE,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QAE5B,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAE7C,IAAI,SAAS,CAAC,KAAK,IAAI,uBAAuB,EAAE,CAAC;YAC/C,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAC9E,IAAI,SAAS,CAAC,KAAK,KAAK,uBAAuB,EAAE,CAAC;gBAChD,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;gBACrB,IAAI,CACF,4BAA4B,uBAAuB,qBAAqB;oBACtE,IAAI,MAAM,CAAC,GAAG,8DAA8D;oBAC5E,6CAA6C,CAChD,CAAC;YACJ,CAAC;YACD,OAAO;QACT,CAAC;QAED,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC;QAErB;;;;;;;WAOG;QACH,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAChD,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAAE,OAAO;YAE5B;;;;;;;;;;;;;eAaG;YACH,IAAI,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC;gBAAE,OAAO;YAEtD,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC/D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wEAAwE;gBACxE,sEAAsE;gBACtE,8CAA8C;gBAC9C,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBACzE,IAAI,CACF,qBAAqB,MAAM,CAAC,GAAG,YAC7B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,CAAC,KAAK,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC,GAAG,CAAC;QACjB;;;;;;;;WAQG;QACH,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,MAAoB,EAAE,EAAE,CACvE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CACxB;QACD,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;KAC5C,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,IAAU,EACV,MAAoB,EACpB,OAAiC,EACjC,QAAkB,EAClB,IAA+B;IAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB;;;;;;;OAOG;IACH,IAAI,GAAG,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC;QACvB,6EAA6E;QAC7E,0EAA0E;QAC1E,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAEtC;;;;;;;;;;OAUG;IACH,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;IACxC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,CAAC;IAEzC;;;;;;;OAOG;IACH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QACrE,IAAI,CACF,aAAa,GAAG,wBAAwB,OAAO,CAAC,aAAa,qBAAqB;YAChF,wFAAwF,CAC3F,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;IAEvD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAErC,yEAAyE;IACzE,2EAA2E;IAC3E,kFAAkF;IAClF,MAAM,eAAe,GAAG,sBAAsB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9D,IAAI,mBAAmB,EAAE,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QACjD,IAAI,YAAY;YAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAE7C;;;;;OAKG;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,MAAM,GAAqB;QAC/B,aAAa,EAAE,mBAAmB;QAClC,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE;QACrE,6EAA6E;QAC7E,6EAA6E;QAC7E,iCAAiC;QACjC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACzB,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,UAAU;QACV,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;QAC1F,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;QAChC,QAAQ;QACR,MAAM;QACN,YAAY;QACZ,MAAM,EAAE;YACN,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1C,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC;YACzC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;IACrC,IAAI,QAAQ;QAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE9C,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEnC,6EAA6E;IAC7E,oFAAoF;IACpF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5C,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC;IACzD,IAAI,KAAK,CAAC,QAAQ;QAAE,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAErD;;;;;;;;OAQG;IACH,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,IAAI;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAE7B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAEtC,4EAA4E;QAC5E,2EAA2E;QAC3E,6DAA6D;QAC7D,SAAS,CAAC,YAAY,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;IAC9C,MAAM,CAAC,IAAI,GAAG;QACZ,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa;QACnC,KAAK;QACL,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtC,CAAC;IAEF,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;QAAE,SAAS,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrE,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACzC,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IAE/C,MAAM,QAAQ,CAAC,MAAM,CAAC,sBAAsB,EAAE;QAC5C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACjD,WAAW,EAAE,kBAAkB;KAChC,CAAC,CAAC;AACL,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,aAAa,CAAC,IAAU;IACrC,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC,QAAQ,CACxB,CAAC,GAAG,EAAE,EAAE,CAAE,MAA4C,CAAC,GAAG,CAAC,IAAI,CAAC,EAChE,cAAc,CACf,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAU;IAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5D,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC;AACrE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAU,EACV,OAAiC;IAEjC,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,MAAM,YAAY,GAAuB,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI;QAClB,MAAM,cAAc,CAAC,IAAI,CAAC;QAC1B,MAAM,iBAAiB,CAAC,IAAI,CAAC;QAC7B,wEAAwE;QACxE,uEAAuE;QACvE,uEAAuE;QACvE,yEAAyE;QACzE,sEAAsE;QACtE,GAAG,CAAC,MAAM,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1D,yEAAyE;QACzE,MAAM,eAAe,CAAC,IAAI,CAAC;QAC3B,yEAAyE;QACzE,8DAA8D;QAC9D,MAAM,SAAS,CAAC,IAAI,CAAC;QACrB,2EAA2E;QAC3E,4EAA4E;QAC5E,qDAAqD;QACrD,MAAM,UAAU,CAAC,IAAI,CAAC;QACtB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,qEAAqE;QACrE,0EAA0E;QAC1E,0CAA0C;QAC1C,MAAM,eAAe,CAAC,IAAI,CAAC;QAC3B,uEAAuE;QACvE,0EAA0E;QAC1E,uCAAuC;QACvC,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACrC,EAAE,CAAC;QACF,IAAI,KAAK,CAAC,OAAO;YAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,YAAY;YAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAC5C,CAAC;AAED,0EAA0E;AAC1E,KAAK,UAAU,UAAU,CACvB,IAAU,EACV,OAAiC;IAEjC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,OAAO,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;AAC9E,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,eAAe,CAC5B,IAAU,EACV,OAAiC,EACjC,QAAkB,EAClB,SAAoB,EACpB,GAAW,EACX,IAA+B;IAE/B;;;;;;OAMG;IACH,IAAI,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,aAAa;QAAE,OAAO;IAE9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACpD,IACE,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAChC,CAAC;YACD,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAqB;YAC/B,aAAa,EAAE,mBAAmB;YAClC,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE;YACrE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YACzB,QAAQ,EAAE,SAAS,CAAC,QAAQ;YAC5B,wEAAwE;YACxE,yEAAyE;YACzE,yEAAyE;YACzE,UAAU,EAAE,SAAS,CAAC,UAAU;YAChC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM;YAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACrC,IAAI,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE9C,MAAM,QAAQ,CAAC,MAAM,CAAC,sBAAsB,EAAE;YAC5C,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YACjD,WAAW,EAAE,kBAAkB;SAChC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CACF,gDAAgD,GAAG,KACjD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,oEAAoE,CACrE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAuB,EACvB,OAAiC,EACjC,QAAkB,EAClB,IAA+B;IAE/B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACnC,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE,SAAS;QAE9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,wEAAwE;QACxE,0EAA0E;QAC1E,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,aAAa;YAAE,SAAS;QAE5C,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEtC;;;;;;;;;;;;WAYG;QACH,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;YACjF;;;;;;;;;;;;;;;eAeG;YACH,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;YACrE,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,4EAA4E;YAC5E,sDAAsD;YACtD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,CAAC;YAE5C,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAC1C,eAAe,CACb,IAAI,EACJ;gBACE,GAAG;gBACH,sEAAsE;gBACtE,qEAAqE;gBACrE,mDAAmD;gBACnD,MAAM,EAAE,UAAU;gBAClB,UAAU,EAAE,CAAC;gBACb,SAAS;gBACT,cAAc,EAAE,KAAK;aACtB,EACD,OAAO,EACP,QAAQ,EACR,IAAI,CACL,CACF,CAAC;YAEF,MAAM,SAAS,CAAC,KAAK,CAAC;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CACF,iBAAiB,GAAG,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACzF,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC"}
|