cursedbelt 5.111.1 → 5.112.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/dist/react/activity-bar/ActivityBar.d.ts.map +1 -1
- package/dist/react/activity-bar/ActivityBar.js +8 -2
- package/dist/react/activity-bar/ActivityBar.js.map +1 -1
- package/dist/react/activity-bar/activityBar.css +4 -0
- package/dist/testing/designAudit.d.ts +8 -1
- package/dist/testing/designAudit.d.ts.map +1 -1
- package/dist/testing/designAudit.js +21 -0
- package/dist/testing/designAudit.js.map +1 -1
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +3 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/webkitKeychain.d.ts +50 -0
- package/dist/testing/webkitKeychain.d.ts.map +1 -0
- package/dist/testing/webkitKeychain.js +139 -0
- package/dist/testing/webkitKeychain.js.map +1 -0
- package/package.json +4 -3
- package/scripts/demoServer.ts +1 -1
- package/src/demoFixture.spec.ts +17 -5
- package/src/demoRun.spec.ts +10 -1
- package/src/react/activity-bar/ActivityBar.spec.tsx +15 -0
- package/src/react/activity-bar/ActivityBar.tsx +8 -2
- package/src/react/activity-bar/activityBar.css +4 -0
- package/src/testing/designAudit.ts +22 -1
- package/src/testing/index.ts +3 -0
- package/src/testing/webkitKeychain.spec.ts +107 -0
- package/src/testing/webkitKeychain.ts +175 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityBar.d.ts","sourceRoot":"","sources":["../../../src/react/activity-bar/ActivityBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,OAAO,EAEL,KAAK,GAAG,EAIR,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAGf,OAAO,mBAAmB,CAAC;AAG3B;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;;;OAQG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,wFAAwF;IACxF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,GAAG,EAAE,SAAS,eAAe,EAAE,CAAC;IAChC,uFAAuF;IACvF,MAAM,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAID,6FAA6F;AAC7F,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,oEAAoE;AACpE,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,qFAAqF;AACrF,eAAO,MAAM,eAAe,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ActivityBar.d.ts","sourceRoot":"","sources":["../../../src/react/activity-bar/ActivityBar.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,OAAO,EAEL,KAAK,GAAG,EAIR,KAAK,SAAS,EAKf,MAAM,OAAO,CAAC;AAGf,OAAO,mBAAmB,CAAC;AAG3B;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,EAAE,EAAE,MAAM,CAAC;IACX;;;;;;;;OAQG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,wFAAwF;IACxF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,iFAAiF;IACjF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAChD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,uFAAuF;IACvF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,GAAG,EAAE,SAAS,eAAe,EAAE,CAAC;IAChC,uFAAuF;IACvF,MAAM,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACpC,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qFAAqF;IACrF,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAID,6FAA6F;AAC7F,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,oEAAoE;AACpE,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,qFAAqF;AACrF,eAAO,MAAM,eAAe,MAAM,CAAC;AA+NnC,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EACH,MAAW,EACX,SAAgC,EAChC,SAAS,EACT,UAAiB,EACjB,MAAc,EACd,cAAc,EACd,GAAG,IAAI,EACR,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAoDhC"}
|
|
@@ -83,7 +83,7 @@ import { useCallback, useEffect, useRef, useState, } from 'react';
|
|
|
83
83
|
import { Tooltip } from '../components/Tooltip.js';
|
|
84
84
|
import { useMediaQuery } from '../hooks/useMediaQuery.js';
|
|
85
85
|
import './activityBar.css';
|
|
86
|
-
import { cn
|
|
86
|
+
import { cn } from '../lib/cn.js';
|
|
87
87
|
const noop = () => { };
|
|
88
88
|
/** The narrowest screen the lock works on — below it the rail stays an overlay (a phone). */
|
|
89
89
|
export const LOCK_MIN_WIDTH = 768;
|
|
@@ -100,7 +100,13 @@ function ActivityButton({ item, onChosen, className, }) {
|
|
|
100
100
|
// module's self-contained plain CSS. cursedbelt's `Button` runs on the Tailwind token
|
|
101
101
|
// layer, which fights `.cbab-btn`'s fixed 48px column geometry on cascade order rather
|
|
102
102
|
// than composing with it — the same split `GalleryActionButton` records.
|
|
103
|
-
|
|
103
|
+
//
|
|
104
|
+
// 🔴 No RAW_BUTTON either: `.cbab-btn` states every reset it needs. desk scopes the belt's
|
|
105
|
+
// utilities as `.cs-root .p-0` — two classes, unlayered — so RAW_BUTTON's `p-0`,
|
|
106
|
+
// `bg-transparent` and `text-inherit` beat this one-class stylesheet there: the 10px inset
|
|
107
|
+
// went, every glyph sat 10px left of the rail's middle, and the muted color and hover fill
|
|
108
|
+
// went with it (forge task 4355). `font-[inherit]` is the one utility it keeps.
|
|
109
|
+
type: 'button', className: cn('font-[inherit]', 'cbab-btn', className), "data-active": item.active || undefined, onClick: disabled
|
|
104
110
|
? undefined
|
|
105
111
|
: (event) => {
|
|
106
112
|
item.onSelect?.(event.currentTarget);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityBar.js","sourceRoot":"","sources":["../../../src/react/activity-bar/ActivityBar.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH,OAAO,EAOL,WAAW,EACX,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,mBAAmB,CAAC;AAC3B,OAAO,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"ActivityBar.js","sourceRoot":"","sources":["../../../src/react/activity-bar/ActivityBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -111,6 +111,10 @@
|
|
|
111
111
|
inline-size: 40px;
|
|
112
112
|
block-size: 40px;
|
|
113
113
|
padding-block: 0;
|
|
114
|
+
/* The button resets are stated here, not borrowed from RAW_BUTTON's utilities, which outrank
|
|
115
|
+
this rule in a host that scopes them (see the component, forge task 4355). */
|
|
116
|
+
margin: 0;
|
|
117
|
+
font: inherit;
|
|
114
118
|
border: 0;
|
|
115
119
|
white-space: nowrap;
|
|
116
120
|
border-radius: var(--radius-sm, 0.375rem);
|
|
@@ -73,7 +73,14 @@ interface ProbeArgs {
|
|
|
73
73
|
* Exported only so a happy-dom spec can call it directly; a caller wants {@link auditDesign}.
|
|
74
74
|
*/
|
|
75
75
|
export declare function designProbe({ rules, allowProse, specimens }: ProbeArgs): DesignAuditResult;
|
|
76
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* 🔴 The audit measures a page at REST: every animation that ends has ended (forge task 4369). An
|
|
78
|
+
* overlay enters from opacity 0 (`overlayMotion.ts`) while Radix has already hidden the page behind
|
|
79
|
+
* it, so a probe on that first frame read neither the page's h1 nor the menu over it: NAV-11
|
|
80
|
+
* "0 visible h1", one nav-kit run in twenty. An infinite animation (a spinner) is never waited on.
|
|
81
|
+
* Runs in the page, so it is self-contained.
|
|
82
|
+
*/
|
|
83
|
+
export declare function atRest(timeoutMs: number): Promise<void>;
|
|
77
84
|
export declare function auditDesign(page: EvaluatingPage, options?: AuditDesignOptions): Promise<DesignAuditResult>;
|
|
78
85
|
/** The findings as the lines a failure message prints. */
|
|
79
86
|
export declare function formatDesignViolations(violations: DesignViolation[], label?: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"designAudit.d.ts","sourceRoot":"","sources":["../../src/testing/designAudit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,gFAAgF;AAChF,eAAO,MAAM,YAAY,wMAuBf,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,iGAAiG;AACjG,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAqB3D,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,yFAAyF;IACzF,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,wFAAwF;IACxF,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,qGAAqG;AACrG,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,oGAAoG;QACpG,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,iBAAiB,CA2a1F;
|
|
1
|
+
{"version":3,"file":"designAudit.d.ts","sourceRoot":"","sources":["../../src/testing/designAudit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,gFAAgF;AAChF,eAAO,MAAM,YAAY,wMAuBf,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,iGAAiG;AACjG,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAqB3D,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,yFAAyF;IACzF,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,wFAAwF;IACxF,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,8DAA8D;AAC9D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACpE;AAED,qGAAqG;AACrG,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,oGAAoG;QACpG,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,iBAAiB,CA2a1F;AAMD;;;;;;GAMG;AACH,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ7D;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQpH;AAED,0DAA0D;AAC1D,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,eAAe,EAAE,EAAE,KAAK,SAAK,GAAG,MAAM,CAIxF;AAED,iEAAiE;AACjE,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAU1H"}
|
|
@@ -512,6 +512,26 @@ export function designProbe({ rules, allowProse, specimens }) {
|
|
|
512
512
|
return { violations: out, census };
|
|
513
513
|
}
|
|
514
514
|
/** Run every rule (less `ignore`, or only `rules`) against the page as it is rendered now. */
|
|
515
|
+
/** The longest an audit waits for the page to come to rest. The slowest overlay runs `--duration-slow`. */
|
|
516
|
+
const AT_REST_MS = 2_000;
|
|
517
|
+
/**
|
|
518
|
+
* 🔴 The audit measures a page at REST: every animation that ends has ended (forge task 4369). An
|
|
519
|
+
* overlay enters from opacity 0 (`overlayMotion.ts`) while Radix has already hidden the page behind
|
|
520
|
+
* it, so a probe on that first frame read neither the page's h1 nor the menu over it: NAV-11
|
|
521
|
+
* "0 visible h1", one nav-kit run in twenty. An infinite animation (a spinner) is never waited on.
|
|
522
|
+
* Runs in the page, so it is self-contained.
|
|
523
|
+
*/
|
|
524
|
+
export async function atRest(timeoutMs) {
|
|
525
|
+
if (typeof document.getAnimations !== 'function')
|
|
526
|
+
return;
|
|
527
|
+
const ending = document.getAnimations().filter((a) => a.playState === 'running' && Number.isFinite(Number(a.effect?.getComputedTiming().endTime)));
|
|
528
|
+
if (ending.length === 0)
|
|
529
|
+
return;
|
|
530
|
+
await Promise.race([
|
|
531
|
+
Promise.all(ending.map((a) => a.finished.catch(() => undefined))),
|
|
532
|
+
new Promise((done) => setTimeout(done, timeoutMs)),
|
|
533
|
+
]);
|
|
534
|
+
}
|
|
515
535
|
export async function auditDesign(page, options = {}) {
|
|
516
536
|
for (const [rule, reason] of Object.entries(options.ignore ?? {})) {
|
|
517
537
|
if (!reason?.trim())
|
|
@@ -519,6 +539,7 @@ export async function auditDesign(page, options = {}) {
|
|
|
519
539
|
}
|
|
520
540
|
const ignored = new Set(Object.keys(options.ignore ?? {}));
|
|
521
541
|
const rules = (options.rules ?? [...DESIGN_RULES]).filter((r) => !ignored.has(r));
|
|
542
|
+
await page.evaluate(atRest, AT_REST_MS);
|
|
522
543
|
return page.evaluate(designProbe, { rules, allowProse: options.allowProse ?? [], specimens: options.specimens ?? false });
|
|
523
544
|
}
|
|
524
545
|
/** The findings as the lines a failure message prints. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"designAudit.js","sourceRoot":"","sources":["../../src/testing/designAudit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"designAudit.js","sourceRoot":"","sources":["../../src/testing/designAudit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,sFAAsF;IACtF,yFAAyF;IACzF,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;CACA,CAAC;AAIX,iGAAiG;AACjG,MAAM,CAAC,MAAM,kBAAkB,GAAiC;IAC9D,QAAQ,EAAE,2BAA2B;IACrC,OAAO,EAAE,0GAA0G;IACnH,OAAO,EAAE,yBAAyB;IAClC,OAAO,EAAE,gEAAgE;IACzE,QAAQ,EAAE,uFAAuF;IACjG,QAAQ,EAAE,6CAA6C;IACvD,OAAO,EAAE,4CAA4C;IACrD,QAAQ,EAAE,uCAAuC;IACjD,QAAQ,EAAE,wCAAwC;IAClD,OAAO,EAAE,yDAAyD;IAClE,QAAQ,EAAE,iGAAiG;IAC3G,OAAO,EAAE,gDAAgD;IACzD,OAAO,EAAE,sDAAsD;IAC/D,MAAM,EAAE,kCAAkC;IAC1C,OAAO,EAAE,kEAAkE;IAC3E,OAAO,EAAE,8EAA8E;IACvF,QAAQ,EAAE,kEAAkE;IAC5E,QAAQ,EAAE,iFAAiF;IAC3F,QAAQ,EAAE,mDAAmD;IAC7D,QAAQ,EAAE,yDAAyD;CACpE,CAAC;AAuDF;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAa;IACrE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAsB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG;QACb,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,CAAC;QACd,UAAU,EAAE,CAAC;QACb,eAAe,EAAE,CAAC;QAClB,MAAM,EAAE,KAAK;QACb,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,qBAAqB,CAAC;IAEnC,MAAM,QAAQ,GAAG,CAAC,EAAW,EAAU,EAAE;QACvC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAmB,EAAE,CAAC;QAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAC9C,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,KAAK,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;gBACnC,MAAM;YACR,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;YACrH,IAAI,MAAM;gBAAE,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC;iBAClC,CAAC;gBACJ,MAAM,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9G,IAAI,GAAG,CAAC,MAAM;oBAAE,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,CAAC;YACD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpB,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,EAAW,EAAW,EAAE;QACrC,IAAI,EAAE,CAAC,OAAO,CAAC,yCAAyC,CAAC;YAAE,OAAO,KAAK,CAAC;QACxE,MAAM,GAAG,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACvC,+EAA+E;QAC/E,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACpD,+FAA+F;QAC/F,IAAI,OAAO,EAAE,CAAC,eAAe,KAAK,UAAU,EAAE,CAAC;YAC7C,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9G,CAAC;QACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClG,CAAC,CAAC;IACF;;;;;;;;;;;OAWG;IACH,MAAM,KAAK,GAAG,sDAAsD,CAAC;IACrE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,CAAC,EAAW,EAAW,EAAE,CAC3C,WAAW,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,aAAa,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5F,MAAM,IAAI,GAAG,CAAC,IAAkB,EAAE,EAAkB,EAAE,MAAc,EAAE,EAAE;QACtE,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC,CAAC;IAEF,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,eAAe,CAAC;IACvE,IAAI,QAAQ,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,QAAQ,CAAC,WAAW,iBAAiB,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAClG,CAAC;IAED,wFAAwF;IACxF,mGAAmG;IACnG,gGAAgG;IAChG,mGAAmG;IACnG,6FAA6F;IAC7F,iGAAiG;IACjG,oCAAoC;IACpC,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,CAAC,EAAW,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,CAAC,EAAW,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QACpF,MAAM,eAAe,GACnB,QAAQ,CAAC,YAAY,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClH,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC9C,IAAI,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,GAAG,CAAC;gBAAE,SAAS;YAC3H,IAAI,SAAS,GAAG,eAAe,CAAC;YAChC,KAAK,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,SAAS,IAAI,GAAG,IAAI,GAAG,KAAK,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;gBACvG,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,YAAY,GAAG,CAAC,CAAC;YACvE,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,IAAI,CACF,OAAO,EACP,IAAI,EACJ,GAAG,IAAI,CAAC,YAAY,gBAAgB,MAAM,CAAC,WAAW,qGAAqG,CAC5J,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAW,CAAC;IACnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9E,MAAM,IAAI,GAAG,iGAAiG,CAAC;IAC/G,MAAM,IAAI,GAAG,uCAAuC,CAAC;IACrD,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;QAC9B,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC;YAAE,SAAS;QACrE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE,SAAS;QACzB,MAAM,CAAC,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC9D,IAAI,IAAI,GAAG,EAAE,EAAE,CAAC;gBACd,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACb,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,QAAQ,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC1D,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACvG,CAAC;IACD,KAAK,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,uEAAuE;QACvE,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,oCAAoC,CAAC;YAAE,SAAS;QACrH,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACb,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,iBAAiB,KAAK,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAClF,CAAC;IAED,8EAA8E;IAC9E,0FAA0F;IAC1F,4FAA4F;IAC5F,gGAAgG;IAChG,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAEpB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;QAC9C,IAAI,KAAkD,CAAC;QACvD,0FAA0F;QAC1F,yFAAyF;QACzF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAe,EAAE;YACxC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC;YAClC,IAAI,GAAG,GAAgB,IAAI,CAAC;YAC5B,MAAM,KAAK,GAAG,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1H,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,gFAAgF,CAAC,CAAC;YACxG,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;YAC3G,IAAI,GAAG;gBAAE,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC1E,IAAI,IAAI;gBAAE,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACtG,CAAC;gBACJ,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAChD,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;oBACjB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;oBAClB,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChE,CAAC;gBACD,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC5B,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC;oBACtB,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC3B,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;oBACzD,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;YACD,IAAI,GAAG;gBAAE,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACpI,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,CAAC,GAAS,EAAE,KAAW,EAAQ,EAAE;YAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChH,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAO,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBAClB,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC;YACjE,CAAC,CAAC;YACF,OAAO,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC;QAC1E,MAAM,UAAU,GACd,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9H,MAAM,MAAM,GAAS,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACvE,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,IAAI,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC;gBAAE,SAAS;YACnE,MAAM,KAAK,GAAG,gBAAgB,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;gBAAE,SAAS;YACjC,qFAAqF;YACrF,0FAA0F;YAC1F,MAAM,MAAM,GAAW,EAAE,CAAC;YAC1B,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,IAAI,WAAW,GAAG,KAAK,CAAC;YACxB,KAAK,IAAI,GAAG,GAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;gBAChE,MAAM,EAAE,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;gBACtD,IAAI,EAAE,CAAC,eAAe,KAAK,MAAM,EAAE,CAAC;oBAClC,WAAW,GAAG,IAAI,CAAC;oBACnB,MAAM;gBACR,CAAC;gBACD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;gBACpC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;oBACpB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAChB,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK;wBAAE,MAAM;gBAC5B,CAAC;gBACD,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,WAAW;gBAAE,SAAS;YAC1B,IAAI,MAAM,GAAG,MAAM,CAAC;YACpB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;YAC9D,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3E,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;YAC/E,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC7B,IAAI,KAAK,GAAG,KAAK,GAAG,IAAI,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9G,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,IAAI,QAAQ,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YACpI,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC;IAC/D,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,gBAAgB,CAAc,sEAAsE,CAAC,EAAE,CAAC;YAChI,0FAA0F;YAC1F,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAc,sBAAsB,CAAC,IAAI,EAAE,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC7B,6FAA6F;YAC7F,qEAAqE;YACrE,IAAI,EAAE,CAAC,OAAO,KAAK,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,SAAS;YACtD,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAC3C,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,EAAE,CAAC;gBAClD,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC9E,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,IAAI,IAAI,WAAW,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACpG,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,MAAM,OAAO,GACX,kJAAkJ,CAAC;QACrJ,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;QAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;YAClC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,IAAI,SAAS,IAAI,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC;gBAAE,SAAS;YAC7D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC5F,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,SAAS;YAC1D,uFAAuF;YACvF,kDAAkD;YAClD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;gBAClB,KAAK,CAAC,CAAC,CAAC;gBACR,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ;gBACnC,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,MAAM;gBAC5C,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAC9C,CAAC;YACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,SAAS;YAC/B,oFAAoF;YACpF,mFAAmF;YACnF,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;YACxG,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/H,IAAI,MAAM,IAAI,SAAS;gBAAE,SAAS;YAClC,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,oDAAoD;YACpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;YAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;gBAC1D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;oBAAE,SAAS;gBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC;gBAClE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;gBAChC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;gBAChC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;oBAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7G,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,wFAAwF;IACxF,+FAA+F;IAC/F,MAAM,UAAU,GACd,MAAM,CAAC,UAAU,GAAG,GAAG;QACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC,CAAC;IACjH,kGAAkG;IAClG,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;IACtG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC7E,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;IAC7I,CAAC;IAED,+EAA+E;IAC/E,8FAA8F;IAC9F,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;IAC3D,MAAM,MAAM,GAAG,CAAC,EAAW,EAAkB,EAAE;QAC7C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC;QACjF,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,QAAgB,EAAE,IAAkB,EAAE,GAAW,EAAE,IAAY,EAAE,EAAE;QAChF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsB,CAAC;QAC1C,KAAK,MAAM,EAAE,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,SAAS;YACzB,IAAI,SAAS,IAAI,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC;gBAAE,SAAS;YAC5D,+EAA+E;YAC/E,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;YACnD,IAAI,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE;gBAAE,SAAS;YAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,IAAI;gBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/G,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,KAAK,CAAC,6BAA6B,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACrE,KAAK,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE9C,8EAA8E;IAC9E,IAAI,MAAM,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,2CAA2C,CAAC,EAAE,CAAC;YACzF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC1B,yFAAyF;YACzF,6CAA6C;YAC7C,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,gBAAgB,CAAC,6CAA6C,CAAC,EAAE,CAAC;gBACvF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC3B,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAAC;oBAAE,SAAS;gBACpD,qFAAqF;gBACrF,8BAA8B;gBAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC;oBAAE,SAAS;gBACtD,IAAI,CAAE,IAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;oBAC5C,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,WAAW,6BAA6B,CAAC,CAAC;gBACvG,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,kGAAkG;IAClG,iGAAiG;IACjG,2FAA2F;IAC3F,IAAI,MAAM,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG;YACf,GAAG,QAAQ,CAAC,gBAAgB,CAAC,iEAAiE,CAAC;YAC/F,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC;SACpG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAiB,EAAE,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,uCAAuC,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAClH,gGAAgG;QAChG,8FAA8F;QAC9F,4EAA4E;QAC5E,MAAM,KAAK,GAAG,CAAC,GAAY,EAAE,IAAa,EAAE,EAAE,CAC5C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;QAC9G,MAAM,MAAM,GAAG,CAAC,GAAY,EAAE,IAAa,EAAE,EAAE,CAC7C,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACvI,gGAAgG;QAChG,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,uCAAuC,CAAC,EAAE,CAAC;YACrF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;gBAAE,SAAS;YAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;gBAChC,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;gBACrC,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,IAAI,IAAI;gBAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,oBAAoB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,OAAO,GACX,0IAA0I,CAAC;IAC7I,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,gBAAgB,CAAc,6CAA6C,CAAC,EAAE,CAAC;QACzG,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QACpC,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;QAC/C,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK;YAAE,SAAS;QACnD,2DAA2D;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACrC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;YAAE,SAAS;QACxC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,+EAA+E;IAC/E,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAc,sBAAsB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;QACzI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACzC,wFAAwF;YACxF,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,OAAO,EAAE,CAAC;gBACzD,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,sFAAsF;YACtF,IAAI,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,MAAM;gBAAE,SAAS;YAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,YAAY,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7E,MAAM,KAAK,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;YAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,KAAK,GAAG,OAAO,EAAE,CAAC;gBACtD,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,yBAAyB,KAAK,IAAI,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AACrC,CAAC;AAED,8FAA8F;AAC9F,2GAA2G;AAC3G,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,SAAiB;IAC5C,IAAI,OAAO,QAAQ,CAAC,aAAa,KAAK,UAAU;QAAE,OAAO;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnJ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAChC,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KACnD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAoB,EAAE,UAA8B,EAAE;IACtF,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,iBAAiB,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;AAC3H,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,sBAAsB,CAAC,UAA6B,EAAE,KAAK,GAAG,EAAE;IAC9E,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,MAAM,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;SACjI,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAoB,EAAE,UAA8B,EAAE;IAC5F,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrG,MAAM,IAAI,KAAK,CACb,iBAAiB,MAAM,CAAC,UAAU,CAAC,MAAM,gBAAgB,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,mCAAmC;YACrH,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,CAC5C,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/testing/index.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ export { judgeKeyboard, judgePhone, type KeyboardView, type PhoneSnapshot, type
|
|
|
8
8
|
export { type SafariResult, type SafariScreen, SafariSession, type WalkSafariOptions, walkSafari } from './safariDriver.js';
|
|
9
9
|
export { explainSafari, findGaps, judgeSupport, type StyleClaims, type StyleGaps, styleClaims } from './safariRules.js';
|
|
10
10
|
export { type LookPrePaint, lookPrePaintProblems, readBootLookFallback, readLookPrePaint } from './lookPrePaint.js';
|
|
11
|
+
export { launchPersistentWebkit, launchWebkit, readyWebkitKeychain } from './webkitKeychain.js';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGpD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,YAAY,EACZ,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,YAAY,EACZ,WAAW,EACX,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxI,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExH,OAAO,EAAE,KAAK,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGpD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,YAAY,EACZ,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,YAAY,EACZ,WAAW,EACX,uBAAuB,EACvB,KAAK,oBAAoB,GAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxI,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExH,OAAO,EAAE,KAAK,YAAY,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGpH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/testing/index.js
CHANGED
|
@@ -14,4 +14,7 @@ export { SafariSession, walkSafari } from './safariDriver.js';
|
|
|
14
14
|
export { explainSafari, findGaps, judgeSupport, styleClaims } from './safariRules.js';
|
|
15
15
|
// An app's pre-paint look script held to the look store and its initLook() (forge task 2916).
|
|
16
16
|
export { lookPrePaintProblems, readBootLookFallback, readLookPrePaint } from './lookPrePaint.js';
|
|
17
|
+
// The one way a spec launches WebKit: a keychain master key another WebKit build made is dropped first, so no
|
|
18
|
+
// password dialog waits on the owner's screen (forge task 4347). `tools/check-test-spawn.ts` refuses any other launch.
|
|
19
|
+
export { launchPersistentWebkit, launchWebkit, readyWebkitKeychain } from './webkitKeychain.js';
|
|
17
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAmB,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpD,sFAAsF;AACtF,gGAAgG;AAChG,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EAMZ,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAGhB,YAAY,GAEb,MAAM,kBAAkB,CAAC;AAC1B,iGAAiG;AACjG,4FAA4F;AAC5F,OAAO,EACL,aAAa,EACb,kBAAkB,EAGlB,YAAY,EACZ,WAAW,EACX,uBAAuB,GAExB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA0C,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,UAAU,EAA2D,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxI,OAAO,EAAwC,aAAa,EAA0B,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAoC,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACxH,8FAA8F;AAC9F,OAAO,EAAqB,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,+FAA+F;AAC/F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAmB,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpD,sFAAsF;AACtF,gGAAgG;AAChG,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,YAAY,EAMZ,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,gBAAgB,EAGhB,YAAY,GAEb,MAAM,kBAAkB,CAAC;AAC1B,iGAAiG;AACjG,4FAA4F;AAC5F,OAAO,EACL,aAAa,EACb,kBAAkB,EAGlB,YAAY,EACZ,WAAW,EACX,uBAAuB,GAExB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA0C,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,aAAa,EAAE,UAAU,EAA2D,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxI,OAAO,EAAwC,aAAa,EAA0B,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAoC,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACxH,8FAA8F;AAC9F,OAAO,EAAqB,oBAAoB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpH,8GAA8G;AAC9G,uHAAuH;AACvH,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export declare const MASTER_KEY_ACCOUNT = "com.apple.WebKit.WebCrypto.master+org.webkit.Playwright";
|
|
2
|
+
export declare const MASTER_KEY_LABEL = "Playwright WebCrypto Master Key";
|
|
3
|
+
/** The item and the build last proven to trust each other, so a run reads every item's ACL (~3 s) only when one changed. */
|
|
4
|
+
export interface WebkitTrustStamp {
|
|
5
|
+
created: string;
|
|
6
|
+
cdhash: string;
|
|
7
|
+
}
|
|
8
|
+
/** What `trustWebkit` reads and changes, so a spec can stand in for the keychain. */
|
|
9
|
+
export interface KeychainIO {
|
|
10
|
+
/** The item's attributes from `security find-generic-password`, or null when there is none. */
|
|
11
|
+
item(): Promise<string | null>;
|
|
12
|
+
/** `security dump-keychain -a`: every item's attributes and access list, no secrets. */
|
|
13
|
+
access(): Promise<string>;
|
|
14
|
+
remove(): Promise<void>;
|
|
15
|
+
/** The cdhash of the WebKit build about to launch, or null when it is not installed. */
|
|
16
|
+
cdhash(): Promise<string | null>;
|
|
17
|
+
readStamp(): WebkitTrustStamp | null;
|
|
18
|
+
writeStamp(stamp: WebkitTrustStamp): void;
|
|
19
|
+
}
|
|
20
|
+
/** `absent`: no item, WebKit makes one. `trusted`: this build's. `removed`: another build's, deleted. */
|
|
21
|
+
export type WebkitTrust = 'absent' | 'trusted' | 'removed' | 'uninstalled';
|
|
22
|
+
/** When the item was made, from its `cdat` attribute: `"cdat"<timedate>=0x… "20261103235742Z\000"`. */
|
|
23
|
+
export declare function keychainItemCreated(item: string | null): string | null;
|
|
24
|
+
/** The cdhashes the master key's partition list names, from a `security dump-keychain -a` listing. */
|
|
25
|
+
export declare function masterKeyPartition(dump: string): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Leaves the master key only if this build made it: kept when this build's cdhash is in its partition list, deleted
|
|
28
|
+
* otherwise, so WebKit makes a fresh one it trusts instead of asking for the keychain's password.
|
|
29
|
+
*/
|
|
30
|
+
export declare function trustWebkit(io: KeychainIO): Promise<WebkitTrust>;
|
|
31
|
+
/** This Mac's login keychain, and the WebKit build whose `Playwright.app` is at `app`. */
|
|
32
|
+
export declare function machineKeychain(app: string, stamp?: string | null): KeychainIO;
|
|
33
|
+
/** The part of Playwright's `BrowserType` this needs — the caller hands in its own `webkit`, so its version decides the build. */
|
|
34
|
+
export interface WebkitType<B, O> {
|
|
35
|
+
executablePath(): string;
|
|
36
|
+
launch(options?: O): Promise<B>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Makes the keychain safe for the WebKit at `executablePath` without launching it — for a Playwright Test config's
|
|
40
|
+
* `globalSetup`, where the runner launches the browser itself. A no-op off macOS.
|
|
41
|
+
*/
|
|
42
|
+
export declare function readyWebkitKeychain(executablePath: string): Promise<WebkitTrust | 'not-mac'>;
|
|
43
|
+
/** Playwright's WebKit, launched with no keychain dialog to wait on: `launchWebkit(webkit, { … })`. */
|
|
44
|
+
export declare function launchWebkit<B, O>(engine: WebkitType<B, O>, options?: O): Promise<B>;
|
|
45
|
+
/** {@link launchWebkit} for a profile kept on disk: `launchPersistentWebkit(webkit, dir, { … })`. */
|
|
46
|
+
export declare function launchPersistentWebkit<C, O>(engine: {
|
|
47
|
+
executablePath(): string;
|
|
48
|
+
launchPersistentContext(userDataDir: string, options?: O): Promise<C>;
|
|
49
|
+
}, userDataDir: string, options?: O): Promise<C>;
|
|
50
|
+
//# sourceMappingURL=webkitKeychain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webkitKeychain.d.ts","sourceRoot":"","sources":["../../src/testing/webkitKeychain.ts"],"names":[],"mappings":"AA8BA,eAAO,MAAM,kBAAkB,4DAA4D,CAAC;AAC5F,eAAO,MAAM,gBAAgB,oCAAoC,CAAC;AAElE,4HAA4H;AAC5H,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qFAAqF;AACrF,MAAM,WAAW,UAAU;IACzB,+FAA+F;IAC/F,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/B,wFAAwF;IACxF,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,wFAAwF;IACxF,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACjC,SAAS,IAAI,gBAAgB,GAAG,IAAI,CAAC;IACrC,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC3C;AAED,yGAAyG;AACzG,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAE3E,uGAAuG;AACvG,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAEtE;AAED,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKzD;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAatE;AAsBD,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAM,GAAG,IAAkB,GAAG,UAAU,CAyB3F;AAED,kIAAkI;AAClI,MAAM,WAAW,UAAU,CAAC,CAAC,EAAE,CAAC;IAC9B,cAAc,IAAI,MAAM,CAAC;IACzB,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACjC;AAKD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAU5F;AAED,uGAAuG;AACvG,wBAAsB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAG1F;AAED,qGAAqG;AACrG,wBAAsB,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAC/C,MAAM,EAAE;IAAE,cAAc,IAAI,MAAM,CAAC;IAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CAAE,EAC3G,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,CAAC,GACV,OAAO,CAAC,CAAC,CAAC,CAGZ"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/**
|
|
3
|
+
* The one way a spec launches Playwright's WebKit: `launchWebkit(webkit)` first drops a keychain item another WebKit
|
|
4
|
+
* build made, so WebKit makes its own and no password dialog waits on the owner's screen.
|
|
5
|
+
*
|
|
6
|
+
* WebKit keeps a CryptoKey in IndexedDB sealed with a master key in the login keychain: a generic password labeled
|
|
7
|
+
* "Playwright WebCrypto Master Key", account `com.apple.WebKit.WebCrypto.master+org.webkit.Playwright`, no service.
|
|
8
|
+
* vault's key store, collections' media keys and the master lock all keep a CryptoKey that way. The build that makes
|
|
9
|
+
* the item trusts only itself, by cdhash in its ACL and partition list (`cdhash:<40 hex>`), because Playwright's
|
|
10
|
+
* builds are signed ad hoc. Every other build is a stranger, and macOS asks for the login password and waits.
|
|
11
|
+
* 🔴 On 2026-11-03 that dialog stopped vault's Apple pass for its whole 240 s timeout, and minutes later
|
|
12
|
+
* collections' auto-deploy lost its WebKit mid-film (forge task 4347): webkit-2370 met an item webkit-2336 made.
|
|
13
|
+
*
|
|
14
|
+
* What does not work, tried that day: `security add-generic-password -A` opens the item to any app, but its
|
|
15
|
+
* partition is `apple-tool:`, not the build's cdhash, and WebKit still waits on a dialog. Adding a cdhash to the
|
|
16
|
+
* partition list needs the keychain's password. Deleting the item needs none, and the next WebKit makes a new one,
|
|
17
|
+
* trusted, without asking. All the item seals is a CryptoKey in a test browser's storage, which no run keeps.
|
|
18
|
+
*
|
|
19
|
+
* ⚠ The item is shared by every Playwright on this Mac, across workspaces. Deleting one another build made while that
|
|
20
|
+
* build is mid-test can make its next unwrap fail — a flaky test there, which is the better failure than a dialog
|
|
21
|
+
* nobody answers. It happens only the first time a build meets another's item.
|
|
22
|
+
*
|
|
23
|
+
* Never read the secret: `find-generic-password` without `-w`/`-g` prints attributes and never prompts, and
|
|
24
|
+
* `dump-keychain -a` lists every item's access without its data. `tools/check-test-spawn.ts` refuses a WebKit
|
|
25
|
+
* launch anywhere else.
|
|
26
|
+
*/
|
|
27
|
+
import { execFile } from 'node:child_process';
|
|
28
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
29
|
+
import { dirname, join } from 'node:path';
|
|
30
|
+
export const MASTER_KEY_ACCOUNT = 'com.apple.WebKit.WebCrypto.master+org.webkit.Playwright';
|
|
31
|
+
export const MASTER_KEY_LABEL = 'Playwright WebCrypto Master Key';
|
|
32
|
+
/** When the item was made, from its `cdat` attribute: `"cdat"<timedate>=0x… "20261103235742Z\000"`. */
|
|
33
|
+
export function keychainItemCreated(item) {
|
|
34
|
+
return item?.match(/"cdat"<timedate>=\S+\s+"(\d{14}Z)/)?.[1] ?? null;
|
|
35
|
+
}
|
|
36
|
+
/** The cdhashes the master key's partition list names, from a `security dump-keychain -a` listing. */
|
|
37
|
+
export function masterKeyPartition(dump) {
|
|
38
|
+
const block = dump.split(/^keychain: /m).find((entry) => entry.includes(`"acct"<blob>="${MASTER_KEY_ACCOUNT}"`));
|
|
39
|
+
const partition = block?.match(/authorizations \(\d+\): partition_id\n(?:\s+don't-require-password\n)?\s+description: ([^\n]*)/)?.[1] ?? '';
|
|
40
|
+
return [...partition.matchAll(/cdhash:([0-9a-f]{40})/g)].map((m) => m[1]);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Leaves the master key only if this build made it: kept when this build's cdhash is in its partition list, deleted
|
|
44
|
+
* otherwise, so WebKit makes a fresh one it trusts instead of asking for the keychain's password.
|
|
45
|
+
*/
|
|
46
|
+
export async function trustWebkit(io) {
|
|
47
|
+
const created = keychainItemCreated(await io.item());
|
|
48
|
+
if (!created)
|
|
49
|
+
return 'absent';
|
|
50
|
+
const cdhash = await io.cdhash();
|
|
51
|
+
if (!cdhash)
|
|
52
|
+
return 'uninstalled';
|
|
53
|
+
const stamp = io.readStamp();
|
|
54
|
+
if (stamp?.created === created && stamp.cdhash === cdhash)
|
|
55
|
+
return 'trusted';
|
|
56
|
+
if (masterKeyPartition(await io.access()).includes(cdhash)) {
|
|
57
|
+
io.writeStamp({ created, cdhash });
|
|
58
|
+
return 'trusted';
|
|
59
|
+
}
|
|
60
|
+
await io.remove();
|
|
61
|
+
return 'removed';
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A child's stdout, stderr and exit — async, because a sync spawn can hang a `bun test --parallel` worker, and through
|
|
65
|
+
* `node:child_process` because Playwright Test runs its config's `globalSetup` and its specs under Node.
|
|
66
|
+
*/
|
|
67
|
+
function run(argv) {
|
|
68
|
+
const [cmd, ...args] = argv;
|
|
69
|
+
return new Promise((done) => {
|
|
70
|
+
execFile(cmd, args, { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 }, (error, out, err) => {
|
|
71
|
+
const code = error ? (typeof error.code === 'number' ? error.code : 1) : 0;
|
|
72
|
+
done({ out: String(out ?? ''), err: String(err ?? ''), code });
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/** Where the stamp rests: the generation's state root when a gate runs under it, else nowhere (every launch reads the ACLs). */
|
|
77
|
+
function stampPath() {
|
|
78
|
+
const state = process.env.FORGE_STATE;
|
|
79
|
+
return state ? join(state, 'cache', 'webkit-keychain.json') : null;
|
|
80
|
+
}
|
|
81
|
+
/** This Mac's login keychain, and the WebKit build whose `Playwright.app` is at `app`. */
|
|
82
|
+
export function machineKeychain(app, stamp = stampPath()) {
|
|
83
|
+
const item = ['-a', MASTER_KEY_ACCOUNT, '-l', MASTER_KEY_LABEL];
|
|
84
|
+
return {
|
|
85
|
+
item: async () => {
|
|
86
|
+
const found = await run(['security', 'find-generic-password', ...item]);
|
|
87
|
+
return found.code === 0 ? found.out : null;
|
|
88
|
+
},
|
|
89
|
+
access: async () => (await run(['security', 'dump-keychain', '-a'])).out,
|
|
90
|
+
// Another worker may have deleted it first; either way it is gone.
|
|
91
|
+
remove: async () => void (await run(['security', 'delete-generic-password', ...item])),
|
|
92
|
+
cdhash: async () => (await run(['codesign', '-dv', '--verbose=4', app])).err.match(/^CDHash=([0-9a-f]{40})$/m)?.[1] ?? null,
|
|
93
|
+
readStamp: () => {
|
|
94
|
+
if (!stamp)
|
|
95
|
+
return null;
|
|
96
|
+
try {
|
|
97
|
+
return JSON.parse(readFileSync(stamp, 'utf8'));
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
writeStamp: (next) => {
|
|
104
|
+
if (!stamp)
|
|
105
|
+
return;
|
|
106
|
+
mkdirSync(dirname(stamp), { recursive: true });
|
|
107
|
+
writeFileSync(stamp, `${JSON.stringify(next)}\n`);
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/** One check per build per process: a file that launches three WebKits asks the keychain once. */
|
|
112
|
+
const checked = new Map();
|
|
113
|
+
/**
|
|
114
|
+
* Makes the keychain safe for the WebKit at `executablePath` without launching it — for a Playwright Test config's
|
|
115
|
+
* `globalSetup`, where the runner launches the browser itself. A no-op off macOS.
|
|
116
|
+
*/
|
|
117
|
+
export function readyWebkitKeychain(executablePath) {
|
|
118
|
+
if (process.platform !== 'darwin')
|
|
119
|
+
return Promise.resolve('not-mac');
|
|
120
|
+
// The build's `pw_run.sh` sits beside its `Playwright.app`.
|
|
121
|
+
const app = join(dirname(executablePath), 'Playwright.app');
|
|
122
|
+
let pending = checked.get(app);
|
|
123
|
+
if (!pending) {
|
|
124
|
+
pending = trustWebkit(machineKeychain(app));
|
|
125
|
+
checked.set(app, pending);
|
|
126
|
+
}
|
|
127
|
+
return pending;
|
|
128
|
+
}
|
|
129
|
+
/** Playwright's WebKit, launched with no keychain dialog to wait on: `launchWebkit(webkit, { … })`. */
|
|
130
|
+
export async function launchWebkit(engine, options) {
|
|
131
|
+
await readyWebkitKeychain(engine.executablePath());
|
|
132
|
+
return engine.launch(options);
|
|
133
|
+
}
|
|
134
|
+
/** {@link launchWebkit} for a profile kept on disk: `launchPersistentWebkit(webkit, dir, { … })`. */
|
|
135
|
+
export async function launchPersistentWebkit(engine, userDataDir, options) {
|
|
136
|
+
await readyWebkitKeychain(engine.executablePath());
|
|
137
|
+
return engine.launchPersistentContext(userDataDir, options);
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=webkitKeychain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webkitKeychain.js","sourceRoot":"","sources":["../../src/testing/webkitKeychain.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cursedbelt",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.112.1",
|
|
4
4
|
"license": "ISC",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "The React design system of the cursedbelt split — components, styles, theme. cursedbelt-core below it; server tier in cursedbelt-server.",
|
|
@@ -87,7 +87,8 @@
|
|
|
87
87
|
"test": "NODE_ENV=development bun test src scripts --timeout 60000 --parallel=6",
|
|
88
88
|
"demo": "vite --config demo/vite.config.ts",
|
|
89
89
|
"demo:build": "vite build --config demo/vite.config.ts",
|
|
90
|
-
"demo:serve": "bun run demo:build && bun run
|
|
90
|
+
"demo:serve": "bun run demo:build && bun run demo:serve:built",
|
|
91
|
+
"demo:serve:built": "bun run scripts/demoServer.ts",
|
|
91
92
|
"build": "rm -rf dist.next dist.prev && bun run scripts/generateStaticStyles.ts && bun run scripts/generateUtilityStyles.ts && bun run scripts/generateAreaStyles.ts && tsc --project tsconfig.build.json --outDir dist.next && tsc --project tsconfig.scripts.build.json --outDir dist.next/scripts && CURSEDBELT_DIST_DIR=dist.next bun run scripts/copyDistAssets.ts && CURSEDBELT_DIST_DIR=dist.next bun run scripts/checkDistExports.ts &&{ [ -d dist ] && mv dist dist.prev || true; } && mv dist.next dist && rm -rf dist.prev",
|
|
92
93
|
"e2e": "playwright test --config e2e/playwright.config.ts",
|
|
93
94
|
"test:browser:smoke": "playwright test --config e2e/playwright.config.ts smoke.spec.ts --project=chromium",
|
|
@@ -967,7 +968,7 @@
|
|
|
967
968
|
"@vidstack/react": "1.15.6",
|
|
968
969
|
"@vitejs/plugin-react": "^5.2.0",
|
|
969
970
|
"cursedbelt-server": "^4.62.0",
|
|
970
|
-
"cursedops": "^0.
|
|
971
|
+
"cursedops": "^0.25.0",
|
|
971
972
|
"diff": "^9.0.0",
|
|
972
973
|
"emoji-mart": "^5.6.0",
|
|
973
974
|
"hls.js": "^1.5.0",
|
package/scripts/demoServer.ts
CHANGED
|
@@ -161,7 +161,7 @@ async function main(): Promise<void> {
|
|
|
161
161
|
} catch {
|
|
162
162
|
process.stderr.write(
|
|
163
163
|
`demo server: no built demo at ${DEMO_DIST_DIR} — run \`bun run demo:build\` first.\n` +
|
|
164
|
-
'`bun run demo:serve` does both
|
|
164
|
+
'`bun run demo:serve` does both; the e2e config builds its run before its webServer starts.\n',
|
|
165
165
|
);
|
|
166
166
|
process.exit(1);
|
|
167
167
|
}
|
package/src/demoFixture.spec.ts
CHANGED
|
@@ -61,16 +61,28 @@ describe('the e2e fixture exists', () => {
|
|
|
61
61
|
expect(scripts, `package.json has no "${script}" script`).toContain(script);
|
|
62
62
|
}
|
|
63
63
|
expect(pkg.scripts.demo, 'the demo script must start vite on the demo config').toInclude('demo/vite.config.ts');
|
|
64
|
-
// Playwright drives the BUILT bundle, not the dev server — see demo/devServer.ts.
|
|
64
|
+
// Playwright drives the BUILT bundle, not the dev server — see demo/devServer.ts. The human's
|
|
65
|
+
// `demo:serve` builds and then serves through the very script the webServer runs.
|
|
66
|
+
const serve = pkg.scripts[DEMO_SERVE_SCRIPT as keyof typeof pkg.scripts];
|
|
65
67
|
expect(pkg.scripts['demo:serve'], 'demo:serve must build before it serves').toInclude('demo:build');
|
|
68
|
+
expect(pkg.scripts['demo:serve'], 'demo:serve must serve through the webServer script').toInclude(DEMO_SERVE_SCRIPT);
|
|
66
69
|
// 🔴 And it serves it from OUR server, never `vite preview` — which under Bun 1.4.2
|
|
67
70
|
// exits 1 with ERR_STREAM_WRITE_AFTER_END when a Playwright worker hangs up
|
|
68
71
|
// mid-response, reddening this gate about one run in four (task 388, 2026-09-18).
|
|
69
72
|
// Going back to it is a one-word edit, so it is a one-line assertion.
|
|
70
|
-
expect(
|
|
71
|
-
expect(
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
expect(serve, `${DEMO_SERVE_SCRIPT} must run scripts/demoServer.ts`).toInclude('scripts/demoServer.ts');
|
|
74
|
+
expect(serve, '`vite preview` dies on a client hang-up under Bun').not.toInclude('vite preview');
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('🔴 the webServer only serves: its timed start never builds', () => {
|
|
78
|
+
// Playwright times the web server from its start, so a build inside it measures the Mac's
|
|
79
|
+
// load: at load 19.7 the demo's vite build ran past 120 s and the smoke went red with no spec
|
|
80
|
+
// run (forge task 4369). The config builds the run first (`buildDemoRun`), outside that clock.
|
|
81
|
+
const serve = pkg.scripts[DEMO_SERVE_SCRIPT as keyof typeof pkg.scripts];
|
|
82
|
+
expect(serve, `${DEMO_SERVE_SCRIPT} must run no other demo script, so no build`).not.toInclude('demo:');
|
|
83
|
+
expect(serve, `${DEMO_SERVE_SCRIPT} must not build`).not.toInclude('vite build');
|
|
84
|
+
const config = readFileSync(resolve(e2eDir, 'playwright.config.ts'), 'utf8');
|
|
85
|
+
expect(config, 'the e2e config must build the run it claims').toMatch(/if \(run\.claimed\) buildDemoRun\(\);/);
|
|
74
86
|
});
|
|
75
87
|
|
|
76
88
|
it('every server serves the port the specs are pointed at', () => {
|
package/src/demoRun.spec.ts
CHANGED
|
@@ -60,7 +60,7 @@ describe('a Playwright run owns its port and its bundle', () => {
|
|
|
60
60
|
const load = () =>
|
|
61
61
|
Bun.$`bun -e ${"const { default: c } = await import('./e2e/playwright.config.ts'); console.log(JSON.stringify([c.use.baseURL, c.webServer.url, process.env.CURSEDBELT_DEMO_RUN_PORT]))"}`
|
|
62
62
|
.cwd(DEMO_PACKAGE_DIR)
|
|
63
|
-
.env({ ...process.env, [DEMO_RUN_PORT_ENV]: '' })
|
|
63
|
+
.env({ ...process.env, [DEMO_RUN_PORT_ENV]: '', [demo.DEMO_SKIP_BUILD_ENV]: '1' })
|
|
64
64
|
.json() as Promise<[string, string, string]>;
|
|
65
65
|
const [a, b] = await Promise.all([load(), load()]);
|
|
66
66
|
for (const [baseURL, serverURL, port] of [a, b]) {
|
|
@@ -77,9 +77,18 @@ describe('a Playwright run owns its port and its bundle', () => {
|
|
|
77
77
|
const env: NodeJS.ProcessEnv = { [DEMO_RUN_PORT_ENV]: '49999' };
|
|
78
78
|
const claimed = await demo.claimDemoRun(env);
|
|
79
79
|
expect(claimed.url).toEndWith(':49999');
|
|
80
|
+
expect(claimed.claimed, 'a worker must not build the bundle again').toBe(false);
|
|
80
81
|
expect(env[DEMO_RUN_PORT_ENV]).toBe('49999');
|
|
81
82
|
});
|
|
82
83
|
|
|
84
|
+
it('the process that claims a run says so, which is what builds its bundle', async () => {
|
|
85
|
+
const env: NodeJS.ProcessEnv = {};
|
|
86
|
+
const run = await demo.claimDemoRun(env);
|
|
87
|
+
expect(run.claimed).toBe(true);
|
|
88
|
+
expect((await demo.claimDemoRun(env)).claimed).toBe(false);
|
|
89
|
+
demo.releaseDemoRun(env);
|
|
90
|
+
});
|
|
91
|
+
|
|
83
92
|
it('outside a run the human keeps the home port and demo/dist', () => {
|
|
84
93
|
expect(demo.demoDistDir({})).toBe(resolve(DEMO_ROOT, 'dist'));
|
|
85
94
|
expect(demo.demoDistDir({ [DEMO_RUN_PORT_ENV]: 'nonsense' })).toBe(resolve(DEMO_ROOT, 'dist'));
|
|
@@ -40,6 +40,21 @@ describe('the two groups', () => {
|
|
|
40
40
|
});
|
|
41
41
|
});
|
|
42
42
|
|
|
43
|
+
describe('the look travels in activityBar.css alone (forge task 4355)', () => {
|
|
44
|
+
test('🔴 a rail control carries no box or paint utility a host could rank above that sheet', () => {
|
|
45
|
+
// desk scopes the belt's utilities as `.cs-root .p-0`, two classes, which outranks the
|
|
46
|
+
// one-class `.cbab-btn`: RAW_BUTTON's `p-0` took the 10px inset and every glyph sat 10px left
|
|
47
|
+
// of the column's middle. Which rule wins is a cascade happy-dom does not compute, so this
|
|
48
|
+
// pins the cause: none of those utilities is on the button at all.
|
|
49
|
+
render(<ActivityBar top={[item()]} onLockedChange={() => {}} />);
|
|
50
|
+
for (const button of screen.getAllByRole('button')) {
|
|
51
|
+
expect(button.classList.contains('cbab-btn')).toBe(true);
|
|
52
|
+
const utilities = [...button.classList].filter((c) => /^-?(p|px|py|ps|pe|m|mx|my|bg|text|border)-/.test(c));
|
|
53
|
+
expect(utilities, button.getAttribute('aria-label') ?? '').toEqual([]);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
43
58
|
describe('acting', () => {
|
|
44
59
|
test('a press calls onSelect', () => {
|
|
45
60
|
let pressed = 0;
|
|
@@ -93,7 +93,7 @@ import {
|
|
|
93
93
|
import { Tooltip } from '../components/Tooltip.js';
|
|
94
94
|
import { useMediaQuery } from '../hooks/useMediaQuery.js';
|
|
95
95
|
import './activityBar.css';
|
|
96
|
-
import { cn
|
|
96
|
+
import { cn } from '../lib/cn.js';
|
|
97
97
|
|
|
98
98
|
/**
|
|
99
99
|
* One control in the strip.
|
|
@@ -217,8 +217,14 @@ function ActivityButton({
|
|
|
217
217
|
// module's self-contained plain CSS. cursedbelt's `Button` runs on the Tailwind token
|
|
218
218
|
// layer, which fights `.cbab-btn`'s fixed 48px column geometry on cascade order rather
|
|
219
219
|
// than composing with it — the same split `GalleryActionButton` records.
|
|
220
|
+
//
|
|
221
|
+
// 🔴 No RAW_BUTTON either: `.cbab-btn` states every reset it needs. desk scopes the belt's
|
|
222
|
+
// utilities as `.cs-root .p-0` — two classes, unlayered — so RAW_BUTTON's `p-0`,
|
|
223
|
+
// `bg-transparent` and `text-inherit` beat this one-class stylesheet there: the 10px inset
|
|
224
|
+
// went, every glyph sat 10px left of the rail's middle, and the muted color and hover fill
|
|
225
|
+
// went with it (forge task 4355). `font-[inherit]` is the one utility it keeps.
|
|
220
226
|
type='button'
|
|
221
|
-
className={cn(
|
|
227
|
+
className={cn('font-[inherit]', 'cbab-btn', className)}
|
|
222
228
|
data-active={item.active || undefined}
|
|
223
229
|
onClick={
|
|
224
230
|
disabled
|
|
@@ -111,6 +111,10 @@
|
|
|
111
111
|
inline-size: 40px;
|
|
112
112
|
block-size: 40px;
|
|
113
113
|
padding-block: 0;
|
|
114
|
+
/* The button resets are stated here, not borrowed from RAW_BUTTON's utilities, which outrank
|
|
115
|
+
this rule in a host that scopes them (see the component, forge task 4355). */
|
|
116
|
+
margin: 0;
|
|
117
|
+
font: inherit;
|
|
114
118
|
border: 0;
|
|
115
119
|
white-space: nowrap;
|
|
116
120
|
border-radius: var(--radius-sm, 0.375rem);
|
|
@@ -555,13 +555,34 @@ export function designProbe({ rules, allowProse, specimens }: ProbeArgs): Design
|
|
|
555
555
|
}
|
|
556
556
|
|
|
557
557
|
/** Run every rule (less `ignore`, or only `rules`) against the page as it is rendered now. */
|
|
558
|
+
/** The longest an audit waits for the page to come to rest. The slowest overlay runs `--duration-slow`. */
|
|
559
|
+
const AT_REST_MS = 2_000;
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* 🔴 The audit measures a page at REST: every animation that ends has ended (forge task 4369). An
|
|
563
|
+
* overlay enters from opacity 0 (`overlayMotion.ts`) while Radix has already hidden the page behind
|
|
564
|
+
* it, so a probe on that first frame read neither the page's h1 nor the menu over it: NAV-11
|
|
565
|
+
* "0 visible h1", one nav-kit run in twenty. An infinite animation (a spinner) is never waited on.
|
|
566
|
+
* Runs in the page, so it is self-contained.
|
|
567
|
+
*/
|
|
568
|
+
export async function atRest(timeoutMs: number): Promise<void> {
|
|
569
|
+
if (typeof document.getAnimations !== 'function') return;
|
|
570
|
+
const ending = document.getAnimations().filter((a) => a.playState === 'running' && Number.isFinite(Number(a.effect?.getComputedTiming().endTime)));
|
|
571
|
+
if (ending.length === 0) return;
|
|
572
|
+
await Promise.race([
|
|
573
|
+
Promise.all(ending.map((a) => a.finished.catch(() => undefined))),
|
|
574
|
+
new Promise((done) => setTimeout(done, timeoutMs)),
|
|
575
|
+
]);
|
|
576
|
+
}
|
|
577
|
+
|
|
558
578
|
export async function auditDesign(page: EvaluatingPage, options: AuditDesignOptions = {}): Promise<DesignAuditResult> {
|
|
559
579
|
for (const [rule, reason] of Object.entries(options.ignore ?? {})) {
|
|
560
580
|
if (!reason?.trim()) throw new Error(`auditDesign: ignoring ${rule} needs a reason`);
|
|
561
581
|
}
|
|
562
582
|
const ignored = new Set(Object.keys(options.ignore ?? {}));
|
|
563
583
|
const rules = (options.rules ?? [...DESIGN_RULES]).filter((r) => !ignored.has(r));
|
|
564
|
-
|
|
584
|
+
await page.evaluate(atRest, AT_REST_MS);
|
|
585
|
+
return page.evaluate(designProbe,{ rules, allowProse: options.allowProse ?? [], specimens: options.specimens ?? false });
|
|
565
586
|
}
|
|
566
587
|
|
|
567
588
|
/** The findings as the lines a failure message prints. */
|
package/src/testing/index.ts
CHANGED
|
@@ -40,3 +40,6 @@ export { type SafariResult, type SafariScreen, SafariSession, type WalkSafariOpt
|
|
|
40
40
|
export { explainSafari, findGaps, judgeSupport, type StyleClaims, type StyleGaps, styleClaims } from './safariRules.js';
|
|
41
41
|
// An app's pre-paint look script held to the look store and its initLook() (forge task 2916).
|
|
42
42
|
export { type LookPrePaint, lookPrePaintProblems, readBootLookFallback, readLookPrePaint } from './lookPrePaint.js';
|
|
43
|
+
// The one way a spec launches WebKit: a keychain master key another WebKit build made is dropped first, so no
|
|
44
|
+
// password dialog waits on the owner's screen (forge task 4347). `tools/check-test-spawn.ts` refuses any other launch.
|
|
45
|
+
export { launchPersistentWebkit, launchWebkit, readyWebkitKeychain } from './webkitKeychain.js';
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { describe, expect, test } from 'bun:test';
|
|
2
|
+
import {
|
|
3
|
+
type KeychainIO,
|
|
4
|
+
keychainItemCreated,
|
|
5
|
+
MASTER_KEY_ACCOUNT,
|
|
6
|
+
MASTER_KEY_LABEL,
|
|
7
|
+
masterKeyPartition,
|
|
8
|
+
trustWebkit,
|
|
9
|
+
type WebkitTrustStamp,
|
|
10
|
+
} from './webkitKeychain.js';
|
|
11
|
+
|
|
12
|
+
const MINE = '12b32aac7359474efaa206a6af9f2ba193cab5d3';
|
|
13
|
+
const OTHER = 'ee375e464add52192e5818bebd95c8c5d7742153';
|
|
14
|
+
const CREATED = '20261103235742Z';
|
|
15
|
+
|
|
16
|
+
/** `security find-generic-password` without `-w`, as this Mac printed it on 2026-11-03. */
|
|
17
|
+
const item = (created = CREATED) => `keychain: "/login.keychain-db"
|
|
18
|
+
class: "genp"
|
|
19
|
+
attributes:
|
|
20
|
+
0x00000007 <blob>="${MASTER_KEY_LABEL}"
|
|
21
|
+
"acct"<blob>="${MASTER_KEY_ACCOUNT}"
|
|
22
|
+
"cdat"<timedate>=0x32303236313130333233353734325A00 "${created}\\000"
|
|
23
|
+
"svce"<blob>=<NULL>
|
|
24
|
+
`;
|
|
25
|
+
|
|
26
|
+
/** One item's block of `security dump-keychain -a`, with its partition list naming `cdhash`. */
|
|
27
|
+
const entry = (account: string, cdhash: string) => `keychain: "/login.keychain-db"
|
|
28
|
+
class: "genp"
|
|
29
|
+
attributes:
|
|
30
|
+
"acct"<blob>="${account}"
|
|
31
|
+
access: 5 entries
|
|
32
|
+
entry 0:
|
|
33
|
+
authorizations (6): decrypt derive export_clear export_wrapped mac sign
|
|
34
|
+
don't-require-password
|
|
35
|
+
description: ${MASTER_KEY_LABEL}
|
|
36
|
+
applications (1):
|
|
37
|
+
0: /ms-playwright/webkit-2370/Playwright.app (OK)
|
|
38
|
+
requirement: cdhash H"${cdhash}"
|
|
39
|
+
entry 3:
|
|
40
|
+
authorizations (1): partition_id
|
|
41
|
+
don't-require-password
|
|
42
|
+
description: cdhash:${cdhash}
|
|
43
|
+
applications: <null>
|
|
44
|
+
`;
|
|
45
|
+
|
|
46
|
+
/** A keychain in memory, recording what was asked of it. */
|
|
47
|
+
function keychain(over: Partial<{ item: string | null; dump: string; cdhash: string | null; stamp: WebkitTrustStamp | null }> = {}) {
|
|
48
|
+
const calls: string[] = [];
|
|
49
|
+
let stamp = over.stamp ?? null;
|
|
50
|
+
const io: KeychainIO = {
|
|
51
|
+
item: async () => (over.item === undefined ? item() : over.item),
|
|
52
|
+
access: async () => {
|
|
53
|
+
calls.push('access');
|
|
54
|
+
return over.dump ?? entry('lastKnownFaceTimeCallerID', OTHER) + entry(MASTER_KEY_ACCOUNT, MINE);
|
|
55
|
+
},
|
|
56
|
+
remove: async () => void calls.push('remove'),
|
|
57
|
+
cdhash: async () => (over.cdhash === undefined ? MINE : over.cdhash),
|
|
58
|
+
readStamp: () => stamp,
|
|
59
|
+
writeStamp: (next) => {
|
|
60
|
+
calls.push('stamp');
|
|
61
|
+
stamp = next;
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
return { io, calls, stamp: () => stamp };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
describe('the WebKit master key', () => {
|
|
68
|
+
test('its creation time and partition are read from what `security` prints', () => {
|
|
69
|
+
expect(keychainItemCreated(item())).toBe(CREATED);
|
|
70
|
+
expect(keychainItemCreated(null)).toBeNull();
|
|
71
|
+
// Only the master key's own block counts: another item trusting a cdhash says nothing about it.
|
|
72
|
+
expect(masterKeyPartition(entry(MASTER_KEY_ACCOUNT, OTHER) + entry('another', MINE))).toEqual([OTHER]);
|
|
73
|
+
expect(masterKeyPartition(entry('another', MINE))).toEqual([]);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test('🔴 an item ANOTHER build made is deleted, so this one makes its own instead of a password dialog', async () => {
|
|
77
|
+
const k = keychain({ dump: entry(MASTER_KEY_ACCOUNT, OTHER) });
|
|
78
|
+
expect(await trustWebkit(k.io)).toBe('removed');
|
|
79
|
+
expect(k.calls).toEqual(['access', 'remove']);
|
|
80
|
+
expect(k.stamp()).toBeNull();
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
test('🔴 a stamp for another build, or for an older item, is not trust — the ACL is read again', async () => {
|
|
84
|
+
const k = keychain({ dump: entry(MASTER_KEY_ACCOUNT, OTHER), stamp: { created: CREATED, cdhash: OTHER } });
|
|
85
|
+
expect(await trustWebkit(k.io)).toBe('removed');
|
|
86
|
+
const older = keychain({ dump: entry(MASTER_KEY_ACCOUNT, OTHER), stamp: { created: '20261001000000Z', cdhash: MINE } });
|
|
87
|
+
expect(await trustWebkit(older.io)).toBe('removed');
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
test("this build's own item is kept and stamped, and the stamp spares the next run the ACL read", async () => {
|
|
91
|
+
const k = keychain();
|
|
92
|
+
expect(await trustWebkit(k.io)).toBe('trusted');
|
|
93
|
+
expect(k.calls).toEqual(['access', 'stamp']);
|
|
94
|
+
expect(k.stamp()).toEqual({ created: CREATED, cdhash: MINE });
|
|
95
|
+
const again = keychain({ stamp: { created: CREATED, cdhash: MINE } });
|
|
96
|
+
expect(await trustWebkit(again.io)).toBe('trusted');
|
|
97
|
+
expect(again.calls).toEqual([]);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
test('no item is left to WebKit to make; an uninstalled build is not a reason to delete one', async () => {
|
|
101
|
+
const none = keychain({ item: null });
|
|
102
|
+
expect(await trustWebkit(none.io)).toBe('absent');
|
|
103
|
+
const uninstalled = keychain({ cdhash: null, dump: entry(MASTER_KEY_ACCOUNT, OTHER) });
|
|
104
|
+
expect(await trustWebkit(uninstalled.io)).toBe('uninstalled');
|
|
105
|
+
expect([...none.calls, ...uninstalled.calls]).toEqual([]);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/**
|
|
3
|
+
* The one way a spec launches Playwright's WebKit: `launchWebkit(webkit)` first drops a keychain item another WebKit
|
|
4
|
+
* build made, so WebKit makes its own and no password dialog waits on the owner's screen.
|
|
5
|
+
*
|
|
6
|
+
* WebKit keeps a CryptoKey in IndexedDB sealed with a master key in the login keychain: a generic password labeled
|
|
7
|
+
* "Playwright WebCrypto Master Key", account `com.apple.WebKit.WebCrypto.master+org.webkit.Playwright`, no service.
|
|
8
|
+
* vault's key store, collections' media keys and the master lock all keep a CryptoKey that way. The build that makes
|
|
9
|
+
* the item trusts only itself, by cdhash in its ACL and partition list (`cdhash:<40 hex>`), because Playwright's
|
|
10
|
+
* builds are signed ad hoc. Every other build is a stranger, and macOS asks for the login password and waits.
|
|
11
|
+
* 🔴 On 2026-11-03 that dialog stopped vault's Apple pass for its whole 240 s timeout, and minutes later
|
|
12
|
+
* collections' auto-deploy lost its WebKit mid-film (forge task 4347): webkit-2370 met an item webkit-2336 made.
|
|
13
|
+
*
|
|
14
|
+
* What does not work, tried that day: `security add-generic-password -A` opens the item to any app, but its
|
|
15
|
+
* partition is `apple-tool:`, not the build's cdhash, and WebKit still waits on a dialog. Adding a cdhash to the
|
|
16
|
+
* partition list needs the keychain's password. Deleting the item needs none, and the next WebKit makes a new one,
|
|
17
|
+
* trusted, without asking. All the item seals is a CryptoKey in a test browser's storage, which no run keeps.
|
|
18
|
+
*
|
|
19
|
+
* ⚠ The item is shared by every Playwright on this Mac, across workspaces. Deleting one another build made while that
|
|
20
|
+
* build is mid-test can make its next unwrap fail — a flaky test there, which is the better failure than a dialog
|
|
21
|
+
* nobody answers. It happens only the first time a build meets another's item.
|
|
22
|
+
*
|
|
23
|
+
* Never read the secret: `find-generic-password` without `-w`/`-g` prints attributes and never prompts, and
|
|
24
|
+
* `dump-keychain -a` lists every item's access without its data. `tools/check-test-spawn.ts` refuses a WebKit
|
|
25
|
+
* launch anywhere else.
|
|
26
|
+
*/
|
|
27
|
+
import { execFile } from 'node:child_process';
|
|
28
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
29
|
+
import { dirname, join } from 'node:path';
|
|
30
|
+
|
|
31
|
+
export const MASTER_KEY_ACCOUNT = 'com.apple.WebKit.WebCrypto.master+org.webkit.Playwright';
|
|
32
|
+
export const MASTER_KEY_LABEL = 'Playwright WebCrypto Master Key';
|
|
33
|
+
|
|
34
|
+
/** The item and the build last proven to trust each other, so a run reads every item's ACL (~3 s) only when one changed. */
|
|
35
|
+
export interface WebkitTrustStamp {
|
|
36
|
+
created: string;
|
|
37
|
+
cdhash: string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** What `trustWebkit` reads and changes, so a spec can stand in for the keychain. */
|
|
41
|
+
export interface KeychainIO {
|
|
42
|
+
/** The item's attributes from `security find-generic-password`, or null when there is none. */
|
|
43
|
+
item(): Promise<string | null>;
|
|
44
|
+
/** `security dump-keychain -a`: every item's attributes and access list, no secrets. */
|
|
45
|
+
access(): Promise<string>;
|
|
46
|
+
remove(): Promise<void>;
|
|
47
|
+
/** The cdhash of the WebKit build about to launch, or null when it is not installed. */
|
|
48
|
+
cdhash(): Promise<string | null>;
|
|
49
|
+
readStamp(): WebkitTrustStamp | null;
|
|
50
|
+
writeStamp(stamp: WebkitTrustStamp): void;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** `absent`: no item, WebKit makes one. `trusted`: this build's. `removed`: another build's, deleted. */
|
|
54
|
+
export type WebkitTrust = 'absent' | 'trusted' | 'removed' | 'uninstalled';
|
|
55
|
+
|
|
56
|
+
/** When the item was made, from its `cdat` attribute: `"cdat"<timedate>=0x… "20261103235742Z\000"`. */
|
|
57
|
+
export function keychainItemCreated(item: string | null): string | null {
|
|
58
|
+
return item?.match(/"cdat"<timedate>=\S+\s+"(\d{14}Z)/)?.[1] ?? null;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** The cdhashes the master key's partition list names, from a `security dump-keychain -a` listing. */
|
|
62
|
+
export function masterKeyPartition(dump: string): string[] {
|
|
63
|
+
const block = dump.split(/^keychain: /m).find((entry) => entry.includes(`"acct"<blob>="${MASTER_KEY_ACCOUNT}"`));
|
|
64
|
+
const partition =
|
|
65
|
+
block?.match(/authorizations \(\d+\): partition_id\n(?:\s+don't-require-password\n)?\s+description: ([^\n]*)/)?.[1] ?? '';
|
|
66
|
+
return [...partition.matchAll(/cdhash:([0-9a-f]{40})/g)].map((m) => m[1] as string);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Leaves the master key only if this build made it: kept when this build's cdhash is in its partition list, deleted
|
|
71
|
+
* otherwise, so WebKit makes a fresh one it trusts instead of asking for the keychain's password.
|
|
72
|
+
*/
|
|
73
|
+
export async function trustWebkit(io: KeychainIO): Promise<WebkitTrust> {
|
|
74
|
+
const created = keychainItemCreated(await io.item());
|
|
75
|
+
if (!created) return 'absent';
|
|
76
|
+
const cdhash = await io.cdhash();
|
|
77
|
+
if (!cdhash) return 'uninstalled';
|
|
78
|
+
const stamp = io.readStamp();
|
|
79
|
+
if (stamp?.created === created && stamp.cdhash === cdhash) return 'trusted';
|
|
80
|
+
if (masterKeyPartition(await io.access()).includes(cdhash)) {
|
|
81
|
+
io.writeStamp({ created, cdhash });
|
|
82
|
+
return 'trusted';
|
|
83
|
+
}
|
|
84
|
+
await io.remove();
|
|
85
|
+
return 'removed';
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* A child's stdout, stderr and exit — async, because a sync spawn can hang a `bun test --parallel` worker, and through
|
|
90
|
+
* `node:child_process` because Playwright Test runs its config's `globalSetup` and its specs under Node.
|
|
91
|
+
*/
|
|
92
|
+
function run(argv: string[]): Promise<{ out: string; err: string; code: number }> {
|
|
93
|
+
const [cmd, ...args] = argv as [string, ...string[]];
|
|
94
|
+
return new Promise((done) => {
|
|
95
|
+
execFile(cmd, args, { encoding: 'utf8', maxBuffer: 64 * 1024 * 1024 }, (error, out, err) => {
|
|
96
|
+
const code = error ? (typeof error.code === 'number' ? error.code : 1) : 0;
|
|
97
|
+
done({ out: String(out ?? ''), err: String(err ?? ''), code });
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Where the stamp rests: the generation's state root when a gate runs under it, else nowhere (every launch reads the ACLs). */
|
|
103
|
+
function stampPath(): string | null {
|
|
104
|
+
const state = process.env.FORGE_STATE;
|
|
105
|
+
return state ? join(state, 'cache', 'webkit-keychain.json') : null;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** This Mac's login keychain, and the WebKit build whose `Playwright.app` is at `app`. */
|
|
109
|
+
export function machineKeychain(app: string, stamp: string | null = stampPath()): KeychainIO {
|
|
110
|
+
const item = ['-a', MASTER_KEY_ACCOUNT, '-l', MASTER_KEY_LABEL];
|
|
111
|
+
return {
|
|
112
|
+
item: async () => {
|
|
113
|
+
const found = await run(['security', 'find-generic-password', ...item]);
|
|
114
|
+
return found.code === 0 ? found.out : null;
|
|
115
|
+
},
|
|
116
|
+
access: async () => (await run(['security', 'dump-keychain', '-a'])).out,
|
|
117
|
+
// Another worker may have deleted it first; either way it is gone.
|
|
118
|
+
remove: async () => void (await run(['security', 'delete-generic-password', ...item])),
|
|
119
|
+
cdhash: async () => (await run(['codesign', '-dv', '--verbose=4', app])).err.match(/^CDHash=([0-9a-f]{40})$/m)?.[1] ?? null,
|
|
120
|
+
readStamp: () => {
|
|
121
|
+
if (!stamp) return null;
|
|
122
|
+
try {
|
|
123
|
+
return JSON.parse(readFileSync(stamp, 'utf8')) as WebkitTrustStamp;
|
|
124
|
+
} catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
writeStamp: (next) => {
|
|
129
|
+
if (!stamp) return;
|
|
130
|
+
mkdirSync(dirname(stamp), { recursive: true });
|
|
131
|
+
writeFileSync(stamp, `${JSON.stringify(next)}\n`);
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** The part of Playwright's `BrowserType` this needs — the caller hands in its own `webkit`, so its version decides the build. */
|
|
137
|
+
export interface WebkitType<B, O> {
|
|
138
|
+
executablePath(): string;
|
|
139
|
+
launch(options?: O): Promise<B>;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** One check per build per process: a file that launches three WebKits asks the keychain once. */
|
|
143
|
+
const checked = new Map<string, Promise<WebkitTrust>>();
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Makes the keychain safe for the WebKit at `executablePath` without launching it — for a Playwright Test config's
|
|
147
|
+
* `globalSetup`, where the runner launches the browser itself. A no-op off macOS.
|
|
148
|
+
*/
|
|
149
|
+
export function readyWebkitKeychain(executablePath: string): Promise<WebkitTrust | 'not-mac'> {
|
|
150
|
+
if (process.platform !== 'darwin') return Promise.resolve('not-mac');
|
|
151
|
+
// The build's `pw_run.sh` sits beside its `Playwright.app`.
|
|
152
|
+
const app = join(dirname(executablePath), 'Playwright.app');
|
|
153
|
+
let pending = checked.get(app);
|
|
154
|
+
if (!pending) {
|
|
155
|
+
pending = trustWebkit(machineKeychain(app));
|
|
156
|
+
checked.set(app, pending);
|
|
157
|
+
}
|
|
158
|
+
return pending;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/** Playwright's WebKit, launched with no keychain dialog to wait on: `launchWebkit(webkit, { … })`. */
|
|
162
|
+
export async function launchWebkit<B, O>(engine: WebkitType<B, O>, options?: O): Promise<B> {
|
|
163
|
+
await readyWebkitKeychain(engine.executablePath());
|
|
164
|
+
return engine.launch(options);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/** {@link launchWebkit} for a profile kept on disk: `launchPersistentWebkit(webkit, dir, { … })`. */
|
|
168
|
+
export async function launchPersistentWebkit<C, O>(
|
|
169
|
+
engine: { executablePath(): string; launchPersistentContext(userDataDir: string, options?: O): Promise<C> },
|
|
170
|
+
userDataDir: string,
|
|
171
|
+
options?: O,
|
|
172
|
+
): Promise<C> {
|
|
173
|
+
await readyWebkitKeychain(engine.executablePath());
|
|
174
|
+
return engine.launchPersistentContext(userDataDir, options);
|
|
175
|
+
}
|