@ploaness/governance 1.11.0 → 1.13.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.
Files changed (109) hide show
  1. package/dist/a11y-focus-guard.d.ts +18 -0
  2. package/dist/a11y-focus-guard.d.ts.map +1 -0
  3. package/dist/a11y-focus-guard.js +17 -0
  4. package/dist/a11y-focus-guard.js.map +1 -0
  5. package/dist/a11y-hit-target.d.ts +7 -1
  6. package/dist/a11y-hit-target.d.ts.map +1 -1
  7. package/dist/a11y-hit-target.js +11 -0
  8. package/dist/a11y-hit-target.js.map +1 -1
  9. package/dist/asset-policy.d.ts +8 -4
  10. package/dist/asset-policy.d.ts.map +1 -1
  11. package/dist/asset-policy.js +28 -19
  12. package/dist/asset-policy.js.map +1 -1
  13. package/dist/browser-discovery.d.ts +116 -0
  14. package/dist/browser-discovery.d.ts.map +1 -0
  15. package/dist/browser-discovery.js +161 -0
  16. package/dist/browser-discovery.js.map +1 -0
  17. package/dist/browser-exemptions.d.ts +107 -0
  18. package/dist/browser-exemptions.d.ts.map +1 -0
  19. package/dist/browser-exemptions.js +163 -0
  20. package/dist/browser-exemptions.js.map +1 -0
  21. package/dist/browser-findings.d.ts +54 -0
  22. package/dist/browser-findings.d.ts.map +1 -0
  23. package/dist/browser-findings.js +52 -0
  24. package/dist/browser-findings.js.map +1 -0
  25. package/dist/browser-health.d.ts +45 -0
  26. package/dist/browser-health.d.ts.map +1 -0
  27. package/dist/browser-health.js +80 -0
  28. package/dist/browser-health.js.map +1 -0
  29. package/dist/browser-rules.d.ts +169 -0
  30. package/dist/browser-rules.d.ts.map +1 -0
  31. package/dist/browser-rules.js +345 -0
  32. package/dist/browser-rules.js.map +1 -0
  33. package/dist/browser-run.d.ts +110 -0
  34. package/dist/browser-run.d.ts.map +1 -0
  35. package/dist/browser-run.js +125 -0
  36. package/dist/browser-run.js.map +1 -0
  37. package/dist/browser-viewports.d.ts +77 -0
  38. package/dist/browser-viewports.d.ts.map +1 -0
  39. package/dist/browser-viewports.js +139 -0
  40. package/dist/browser-viewports.js.map +1 -0
  41. package/dist/change-scope.d.ts +158 -0
  42. package/dist/change-scope.d.ts.map +1 -0
  43. package/dist/change-scope.js +340 -0
  44. package/dist/change-scope.js.map +1 -0
  45. package/dist/cloudfront-functions.d.ts +34 -0
  46. package/dist/cloudfront-functions.d.ts.map +1 -0
  47. package/dist/cloudfront-functions.js +124 -0
  48. package/dist/cloudfront-functions.js.map +1 -0
  49. package/dist/generated-denial.d.ts +4 -1
  50. package/dist/generated-denial.d.ts.map +1 -1
  51. package/dist/generated-denial.js +10 -3
  52. package/dist/generated-denial.js.map +1 -1
  53. package/dist/index.d.ts +12 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +12 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/javascript-runtimes.d.ts +36 -0
  58. package/dist/javascript-runtimes.d.ts.map +1 -0
  59. package/dist/javascript-runtimes.js +40 -0
  60. package/dist/javascript-runtimes.js.map +1 -0
  61. package/dist/jsx-accessibility-scope.d.ts.map +1 -1
  62. package/dist/jsx-accessibility-scope.js +3 -0
  63. package/dist/jsx-accessibility-scope.js.map +1 -1
  64. package/dist/layout-boxes.d.ts.map +1 -1
  65. package/dist/layout-boxes.js +12 -14
  66. package/dist/layout-boxes.js.map +1 -1
  67. package/dist/layout-clip.d.ts +24 -0
  68. package/dist/layout-clip.d.ts.map +1 -0
  69. package/dist/layout-clip.js +82 -0
  70. package/dist/layout-clip.js.map +1 -0
  71. package/dist/layout-defects.d.ts +47 -4
  72. package/dist/layout-defects.d.ts.map +1 -1
  73. package/dist/layout-defects.js +94 -76
  74. package/dist/layout-defects.js.map +1 -1
  75. package/dist/layout-snapshot.d.ts +60 -2
  76. package/dist/layout-snapshot.d.ts.map +1 -1
  77. package/dist/layout-snapshot.js +65 -1
  78. package/dist/layout-snapshot.js.map +1 -1
  79. package/dist/layout-text.d.ts +4 -1
  80. package/dist/layout-text.d.ts.map +1 -1
  81. package/dist/layout-text.js +56 -7
  82. package/dist/layout-text.js.map +1 -1
  83. package/dist/route-map.d.ts +13 -0
  84. package/dist/route-map.d.ts.map +1 -1
  85. package/dist/route-map.js +13 -6
  86. package/dist/route-map.js.map +1 -1
  87. package/dist/run-plan.d.ts +27 -3
  88. package/dist/run-plan.d.ts.map +1 -1
  89. package/dist/run-plan.js +20 -3
  90. package/dist/run-plan.js.map +1 -1
  91. package/dist/settings-layering.d.ts.map +1 -1
  92. package/dist/settings-layering.js +6 -4
  93. package/dist/settings-layering.js.map +1 -1
  94. package/dist/settings.d.ts +32 -0
  95. package/dist/settings.d.ts.map +1 -1
  96. package/dist/settings.js +51 -12
  97. package/dist/settings.js.map +1 -1
  98. package/dist/terraform-blocks.d.ts +13 -0
  99. package/dist/terraform-blocks.d.ts.map +1 -0
  100. package/dist/terraform-blocks.js +27 -0
  101. package/dist/terraform-blocks.js.map +1 -0
  102. package/dist/terraform-policy.d.ts.map +1 -1
  103. package/dist/terraform-policy.js +3 -14
  104. package/dist/terraform-policy.js.map +1 -1
  105. package/dist/wiring-policy.d.ts +5 -2
  106. package/dist/wiring-policy.d.ts.map +1 -1
  107. package/dist/wiring-policy.js +16 -6
  108. package/dist/wiring-policy.js.map +1 -1
  109. package/package.json +1 -1
@@ -0,0 +1,18 @@
1
+ /** The axe rule whose findings a focus redirect can clear. */
2
+ export declare const FOCUS_GUARD_RULE: string;
3
+ /** Where focus rests a frame after one focusable element of the reported subtree was focused. */
4
+ export interface FocusArrival {
5
+ /** Whether focus is still on the reported subtree. */
6
+ readonly staysInSubtree: boolean;
7
+ /** Whether focus rests on the document body, where a keyboard user has lost their place. */
8
+ readonly restsOnBody: boolean;
9
+ /** Whether the element focus rests on is itself hidden from assistive technology. */
10
+ readonly restsHidden: boolean;
11
+ }
12
+ /**
13
+ * Decide whether a reported subtree only ever passes focus on to something a reader can perceive.
14
+ * @param arrivals one per focusable element in the subtree, in document order.
15
+ * @returns true when there is at least one and every one of them was redirected.
16
+ */
17
+ export declare const isFocusGuard: (arrivals: readonly FocusArrival[]) => boolean;
18
+ //# sourceMappingURL=a11y-focus-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a11y-focus-guard.d.ts","sourceRoot":"","sources":["../src/a11y-focus-guard.ts"],"names":[],"mappings":"AAQA,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,EAAE,MAA4B,CAAA;AAE3D,iGAAiG;AACjG,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,4FAA4F;IAC5F,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAC9B;AAKD;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,UAAU,SAAS,YAAY,EAAE,KAAG,OAC+B,CAAA"}
@@ -0,0 +1,17 @@
1
+ // Whether an element axe reports as focusable yet hidden from assistive technology is a focus guard.
2
+ //
3
+ // A dialog or menu library places hidden spans in the tab order on purpose: one at each edge of an open
4
+ // dialog to keep Tab inside it, one beside an open menu trigger to steer Tab into the panel. Each moves
5
+ // focus on as soon as it arrives, so a keyboard user never rests where a screen reader is silent. The
6
+ // sweep focuses the element and reports where focus came to rest; only a redirect to a place a reader
7
+ // can perceive clears the element.
8
+ /** The axe rule whose findings a focus redirect can clear. */
9
+ export const FOCUS_GUARD_RULE = 'aria-hidden-focus';
10
+ const isRedirect = (arrival) => !(arrival.staysInSubtree || arrival.restsOnBody || arrival.restsHidden);
11
+ /**
12
+ * Decide whether a reported subtree only ever passes focus on to something a reader can perceive.
13
+ * @param arrivals one per focusable element in the subtree, in document order.
14
+ * @returns true when there is at least one and every one of them was redirected.
15
+ */
16
+ export const isFocusGuard = (arrivals) => arrivals.length > 0 && arrivals.every((arrival) => isRedirect(arrival));
17
+ //# sourceMappingURL=a11y-focus-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"a11y-focus-guard.js","sourceRoot":"","sources":["../src/a11y-focus-guard.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,EAAE;AACF,wGAAwG;AACxG,wGAAwG;AACxG,sGAAsG;AACtG,sGAAsG;AACtG,mCAAmC;AAEnC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAW,mBAAmB,CAAA;AAY3D,MAAM,UAAU,GAAG,CAAC,OAAqB,EAAW,EAAE,CACpD,CAAC,CAAC,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAA;AAEzE;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAiC,EAAW,EAAE,CACzE,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAqB,EAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA"}
@@ -15,9 +15,15 @@ export interface HitTargetProbe {
15
15
  * a clipped element and an obscured one be told apart rather than both reported as a timeout.
16
16
  */
17
17
  readonly ownsCentrePoint: boolean;
18
+ /** The computed `pointer-events`, verbatim. */
19
+ readonly pointerEvents: string;
20
+ /** The computed `visibility`, verbatim. */
21
+ readonly visibility: string;
22
+ /** Whether the control or an ancestor carries `inert`. */
23
+ readonly isInert: boolean;
18
24
  }
19
25
  /** How a control can be reached, and therefore which passes of the sweep apply to it. */
20
- export type HitTargetVerdict = 'hoverable' | 'visually-hidden' | 'obscured';
26
+ export type HitTargetVerdict = 'hoverable' | 'visually-hidden' | 'not-a-pointer-target' | 'obscured';
21
27
  /** The verdict together with the sentence a report prints for it. */
22
28
  export interface HitTargetClassification {
23
29
  readonly verdict: HitTargetVerdict;
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-hit-target.d.ts","sourceRoot":"","sources":["../src/a11y-hit-target.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;CAClC;AAED,yFAAyF;AACzF,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,iBAAiB,GAAG,UAAU,CAAA;AAE3E,qEAAqE;AACrE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AA2ED;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,cAAc,KAAG,uBAkBzD,CAAA"}
1
+ {"version":3,"file":"a11y-hit-target.d.ts","sourceRoot":"","sources":["../src/a11y-hit-target.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B;AAED,yFAAyF;AACzF,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,iBAAiB,GAAG,sBAAsB,GAAG,UAAU,CAAA;AAEpG,qEAAqE;AACrE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAA;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAiFD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,cAAc,KAAG,uBA0BzD,CAAA"}
@@ -55,6 +55,10 @@ const hasNoPaintedArea = (probe) => probe.width <= 0 ||
55
55
  (probe.width <= HIDDEN_BOX_LIMIT && probe.height <= HIDDEN_BOX_LIMIT) ||
56
56
  isEmptyClipPath(probe.clipPath) ||
57
57
  isEmptyClip(probe.clip);
58
+ // A hit test passes through an element the page took out of pointer reach on purpose - a disabled
59
+ // button styled `pointer-events: none`, the hidden face of a card, an inert slide - so what answers at
60
+ // its centre is what lies beneath it, by design rather than by accident.
61
+ const isOutOfPointerReach = (probe) => probe.pointerEvents === 'none' || probe.visibility !== 'visible' || probe.isInert;
58
62
  /**
59
63
  * Decide how a control can be reached, so the sweep hovers what it can and explains what it cannot.
60
64
  *
@@ -67,6 +71,13 @@ export const classifyHitTarget = (probe) => {
67
71
  if (probe.ownsCentrePoint) {
68
72
  return { verdict: 'hoverable', reason: 'the control is reachable at its own centre point' };
69
73
  }
74
+ if (isOutOfPointerReach(probe)) {
75
+ return {
76
+ verdict: 'not-a-pointer-target',
77
+ reason: 'the control is hidden, inert or takes no pointer events, so the page offers a pointer ' +
78
+ 'nothing to hover or click there',
79
+ };
80
+ }
70
81
  if (hasNoPaintedArea(probe)) {
71
82
  return {
72
83
  verdict: 'visually-hidden',
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-hit-target.js","sourceRoot":"","sources":["../src/a11y-hit-target.ts"],"names":[],"mappings":"AAAA,mGAAmG;AA8BnG,oGAAoG;AACpG,uGAAuG;AACvG,MAAM,gBAAgB,GAAW,CAAC,CAAA;AAElC,kGAAkG;AAClG,qGAAqG;AACrG,uGAAuG;AACvG,mGAAmG;AACnG,MAAM,WAAW,GAAW,GAAG,CAAA;AAC/B,MAAM,eAAe,GAAW,oBAAoB,CAAA;AACpD,6FAA6F;AAC7F,MAAM,YAAY,GAAW,mBAAmB,CAAA;AAEhD,MAAM,OAAO,GAAW,GAAG,CAAA;AAE3B,sGAAsG;AACtG,sGAAsG;AACtG,2CAA2C;AAC3C,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAC7C,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAA;AAEhF,oGAAoG;AACpG,wEAAwE;AACxE,MAAM,kBAAkB,GAAG,CAAC,MAAyB,EAAqB,EAAE;IAC1E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAoC,MAAM,CAAA;IAC9E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,KAAK,GAAW,MAAM,IAAI,KAAK,CAAA;IACrC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,KAAK,CAAC,CAAA;AACxD,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAW,EAAE;IACjD,MAAM,MAAM,GAAsB,kBAAkB,CAClD,QAAQ;SACL,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,KAAK,CAAC,QAAQ,CAAC;SACf,MAAM,CAAC,CAAC,KAAa,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACpD,GAAG,CAAC,CAAC,KAAa,EAAU,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CACvD,CAAA;IACD,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAoC,MAAM,CAAA;IAC1E,OAAO,CACL,GAAG,KAAK,SAAS;QACjB,KAAK,KAAK,SAAS;QACnB,MAAM,KAAK,SAAS;QACpB,IAAI,KAAK,SAAS;QAClB,CAAC,GAAG,GAAG,MAAM,IAAI,WAAW,IAAI,IAAI,GAAG,KAAK,IAAI,WAAW,CAAC,CAC7D,CAAA;AACH,CAAC,CAAA;AAED,kGAAkG;AAClG,0EAA0E;AAC1E,MAAM,iBAAiB,GAAW,iDAAiD,CAAA;AAEnF,iGAAiG;AACjG,oFAAoF;AACpF,MAAM,UAAU,GAAW,gFAAgF,CAAA;AAE3G,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAW,EAAE;IACpD,MAAM,UAAU,GAAW,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACxD,MAAM,KAAK,GAA2B,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtE,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAC3F,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;AAEzF,MAAM,gBAAgB,GAAG,CAAC,KAAqB,EAAW,EAAE,CAC1D,KAAK,CAAC,KAAK,IAAI,CAAC;IAChB,KAAK,CAAC,MAAM,IAAI,CAAC;IACjB,CAAC,KAAK,CAAC,KAAK,IAAI,gBAAgB,IAAI,KAAK,CAAC,MAAM,IAAI,gBAAgB,CAAC;IACrE,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;IAC/B,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAEzB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAqB,EAA2B,EAAE;IAClF,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,kDAAkD,EAAE,CAAA;IAC7F,CAAC;IACD,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,OAAO,EAAE,iBAAiB;YAC1B,MAAM,EACJ,2FAA2F;gBAC3F,+EAA+E;SAClF,CAAA;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,UAAU;QACnB,MAAM,EACJ,yFAAyF;YACzF,iEAAiE;KACpE,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"a11y-hit-target.js","sourceRoot":"","sources":["../src/a11y-hit-target.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,9 @@
1
- /** How ploaness treats a path in the consumer working tree. */
2
- export type Disposition = 'PINNED' | 'SEED' | 'FORBIDDEN' | 'SECTION' | 'REFERENCE';
1
+ /**
2
+ * How ploaness treats a path in the consumer working tree. A SCAFFOLD file is written by `ploaness init`
3
+ * when absent and is the project's from then on: `sync` never writes it and the gate never judges it,
4
+ * so a project that verifies on another platform deletes it once and it stays deleted.
5
+ */
6
+ export type Disposition = 'PINNED' | 'SEED' | 'SCAFFOLD' | 'FORBIDDEN' | 'SECTION' | 'REFERENCE';
3
7
  /**
4
8
  * Where a managed path lives.
5
9
  *
@@ -116,8 +120,8 @@ export declare const findAssetViolations: (assets: readonly ManagedAsset[], unma
116
120
  export type SyncAction = 'write' | 'delete' | 'skip' | 'splice';
117
121
  /**
118
122
  * Decide the sync action for one path. A PINNED file is always rewritten, so drift is repaired; a SEED
119
- * file is written only when absent, so the project's own edits survive; a FORBIDDEN file is deleted; a
120
- * SECTION file has only its marked block replaced.
123
+ * file is written only when absent, so the project's own edits survive; a SCAFFOLD file is left to
124
+ * `init`; a FORBIDDEN file is deleted; a SECTION file has only its marked block replaced.
121
125
  * @param asset the catalogue entry.
122
126
  * @param isPresent whether the path is currently present in the working tree.
123
127
  * @returns the action `ploaness sync` performs.
@@ -1 +1 @@
1
- {"version":3,"file":"asset-policy.d.ts","sourceRoot":"","sources":["../src/asset-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset-policy.d.ts","sourceRoot":"","sources":["../src/asset-policy.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,12 @@
1
1
  // Manage files that tools read from the working tree, where installed package configuration cannot reach them.
2
- const DISPOSITIONS = new Set(['PINNED', 'SEED', 'FORBIDDEN', 'SECTION', 'REFERENCE']);
2
+ const DISPOSITIONS = new Set([
3
+ 'PINNED',
4
+ 'SEED',
5
+ 'SCAFFOLD',
6
+ 'FORBIDDEN',
7
+ 'SECTION',
8
+ 'REFERENCE',
9
+ ]);
3
10
  // A guard rather than a set membership test followed by an assertion. Both say the same thing; only
4
11
  // this one is a claim the compiler checks, so a disposition added to the union without being added to
5
12
  // the set above stops compiling instead of parsing into a value no rule handles.
@@ -207,6 +214,7 @@ const CHECKERS = {
207
214
  FORBIDDEN: checkForbidden,
208
215
  PINNED: checkPinned,
209
216
  REFERENCE: checkReference,
217
+ SCAFFOLD: () => undefined,
210
218
  SECTION: (asset, state) => state.isPresent ? checkSection(asset, state) : missing(asset),
211
219
  SEED: checkSeed,
212
220
  };
@@ -234,30 +242,31 @@ export const findAssetViolations = (assets, unmanaged, stateOf) => {
234
242
  return violation === undefined ? [] : [violation];
235
243
  });
236
244
  };
245
+ // One rule per disposition, like the checkers above, so a disposition added to the union cannot compile
246
+ // without saying what sync does with it.
247
+ const SYNC_ACTIONS = {
248
+ FORBIDDEN: (isPresent) => (isPresent ? 'delete' : 'skip'),
249
+ PINNED: () => 'write',
250
+ // Never written by sync, in either state. Creating a reference would hand the project an entry point
251
+ // for a tool it may not use, and rewriting one would replace a pointer the tool understands with a
252
+ // guess.
253
+ REFERENCE: () => 'skip',
254
+ // A scaffold is `init`'s to write once; recreating it would undo a project's deletion.
255
+ SCAFFOLD: () => 'skip',
256
+ // Never overwritten, even when absent: the project text below the block is the project's, and
257
+ // creating the file wholesale would be ploaness writing that text on its behalf.
258
+ SECTION: () => 'splice',
259
+ SEED: (isPresent) => (isPresent ? 'skip' : 'write'),
260
+ };
237
261
  /**
238
262
  * Decide the sync action for one path. A PINNED file is always rewritten, so drift is repaired; a SEED
239
- * file is written only when absent, so the project's own edits survive; a FORBIDDEN file is deleted; a
240
- * SECTION file has only its marked block replaced.
263
+ * file is written only when absent, so the project's own edits survive; a SCAFFOLD file is left to
264
+ * `init`; a FORBIDDEN file is deleted; a SECTION file has only its marked block replaced.
241
265
  * @param asset the catalogue entry.
242
266
  * @param isPresent whether the path is currently present in the working tree.
243
267
  * @returns the action `ploaness sync` performs.
244
268
  */
245
- export const syncAction = (asset, isPresent) => {
246
- if (asset.disposition === 'FORBIDDEN') {
247
- return isPresent ? 'delete' : 'skip';
248
- }
249
- // Never written, in either state. Creating one would hand the project an entry point for a tool it
250
- // may not use, and rewriting one would replace a pointer the tool understands with a guess.
251
- if (asset.disposition === 'REFERENCE') {
252
- return 'skip';
253
- }
254
- if (asset.disposition === 'SEED') {
255
- return isPresent ? 'skip' : 'write';
256
- }
257
- // A SECTION file is never overwritten, even when absent: the project text below the block is the
258
- // project's, and creating the file wholesale would be ploaness writing that text on its behalf.
259
- return asset.disposition === 'SECTION' ? 'splice' : 'write';
260
- };
269
+ export const syncAction = (asset, isPresent) => SYNC_ACTIONS[asset.disposition](isPresent);
261
270
  /**
262
271
  * The catalogue entries that apply at the repository root.
263
272
  * @param assets the whole catalogue.
@@ -1 +1 @@
1
- {"version":3,"file":"asset-policy.js","sourceRoot":"","sources":["../src/asset-policy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"asset-policy.js","sourceRoot":"","sources":["../src/asset-policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { type DeclaredRoute } from './route-map.js';
2
+ /** What one sitemap document lists. */
3
+ export interface SitemapEntries {
4
+ /** Page URLs, from a `<urlset>`. */
5
+ readonly pages: readonly string[];
6
+ /** Nested sitemap URLs, from a `<sitemapindex>`. */
7
+ readonly sitemaps: readonly string[];
8
+ }
9
+ /**
10
+ * The URLs a sitemap document lists, split into pages and nested sitemaps.
11
+ * @param xml the document.
12
+ * @returns the page and sitemap URLs, each once, in document order.
13
+ */
14
+ export declare const sitemapEntries: (xml: string) => SitemapEntries;
15
+ /** A `<link rel="alternate" hreflang>` as the page carries it. */
16
+ export interface AlternateLink {
17
+ readonly hreflang: string;
18
+ readonly href: string;
19
+ }
20
+ /**
21
+ * The alternate-locale hrefs of a page, `x-default` included.
22
+ * @param links the page's alternate links.
23
+ * @returns each href that carries a language, once.
24
+ */
25
+ export declare const alternateHrefs: (links: readonly AlternateLink[]) => readonly string[];
26
+ /** One story a Storybook serves. */
27
+ export interface DiscoveredStory {
28
+ readonly id: string;
29
+ readonly title: string;
30
+ readonly name: string;
31
+ /** The origin of the Storybook that serves it. */
32
+ readonly server: string;
33
+ /** The file declaring it, relative to that Storybook's directory, or empty when the index names none. */
34
+ readonly importPath: string;
35
+ }
36
+ /**
37
+ * The stories a Storybook `index.json` lists, docs entries left out.
38
+ * @param index the parsed document.
39
+ * @param server the origin it was read from.
40
+ * @returns one entry per story, or undefined when the document is not a Storybook index.
41
+ */
42
+ export declare const storiesOfIndex: (index: unknown, server: string) => readonly DiscoveredStory[] | undefined;
43
+ /** The location a story is reported under. */
44
+ export declare const storyLocation: (story: Pick<DiscoveredStory, "id">) => string;
45
+ /**
46
+ * The axe rules that judge a whole document, which a story is not: it renders one component alone in a
47
+ * frame, without the page's landmarks, its level-one heading, its title or its skip link. Storybook's
48
+ * own accessibility addon leaves them out for the same reason. The page that places the component is
49
+ * judged by them where it is crawled or scanned.
50
+ */
51
+ export declare const DOCUMENT_AXE_RULES: readonly string[];
52
+ /**
53
+ * The axe rules that do not apply where a finding was measured.
54
+ * @param location the route or `story:<id>` location.
55
+ * @returns the document rules for a story, and none for a route.
56
+ */
57
+ export declare const axeRulesExcludedAt: (location: string) => readonly string[];
58
+ /**
59
+ * The address that renders one story alone.
60
+ * @param story the story.
61
+ * @returns its isolated preview URL.
62
+ */
63
+ export declare const storyUrl: (story: Pick<DiscoveredStory, "id" | "server">) => string;
64
+ /**
65
+ * The render phases at which a story has stopped: rendered, played, and its `afterEach` run, or failed.
66
+ * Storybook exposes the phase as `__STORYBOOK_PREVIEW__.currentRender.phase`.
67
+ */
68
+ export declare const SETTLED_STORY_PHASES: readonly string[];
69
+ /** A route chosen to stand for every route of its template. */
70
+ export interface TemplateSample {
71
+ /** The declared route pattern, or the route itself when no declaration admits it. */
72
+ readonly template: string;
73
+ readonly route: string;
74
+ /** How many crawled routes the template has. */
75
+ readonly routes: number;
76
+ }
77
+ /**
78
+ * One route per template, the first one crawled, for the passes that sample instead of covering all.
79
+ * @param routes the crawled routes, in crawl order.
80
+ * @param declared the routes the file tree declares.
81
+ * @returns one sample per template, in the order its first route was crawled.
82
+ */
83
+ export declare const templateSamples: (routes: readonly string[], declared: readonly DeclaredRoute[]) => readonly TemplateSample[];
84
+ /**
85
+ * A sitemap location on the application under test.
86
+ *
87
+ * A sitemap lists the application's own pages under its canonical public host, which a verification
88
+ * run does not serve. Its path is what names the page, so the path is read on the run's origin.
89
+ * @param location a `<loc>` value.
90
+ * @param origin the origin the application answers at.
91
+ * @returns the same path and query on that origin, or undefined when the value is not a URL.
92
+ */
93
+ export declare const onOrigin: (location: string, origin: string) => string | undefined;
94
+ /**
95
+ * The address a page's link names on the application under test, or undefined for another site.
96
+ *
97
+ * A same-origin link is the application's. So is a link under the page's own canonical host: a site
98
+ * that builds absolute links from its public URL names its own pages that way, and a verification run
99
+ * does not serve that host. Any other origin is a different site.
100
+ * @param href the link, as written.
101
+ * @param pageUrl the URL of the page carrying it.
102
+ * @param canonicalUrl the page's `<link rel="canonical">` href, or empty when it has none.
103
+ * @param origin the origin the application answers at.
104
+ * @returns the address on that origin, or undefined.
105
+ */
106
+ export declare const localAddress: (href: string, pageUrl: string, canonicalUrl: string, origin: string) => string | undefined;
107
+ /**
108
+ * One story per component, the first one listed, for the passes that sample instead of covering all.
109
+ *
110
+ * A component's stories are its states, rendered by one template, the way a dynamic route's pages are
111
+ * one route file's output. The passes that cover everything still judge every story.
112
+ * @param stories the discovered stories, in index order.
113
+ * @returns the first story of each title.
114
+ */
115
+ export declare const storySamples: (stories: readonly DiscoveredStory[]) => readonly DiscoveredStory[];
116
+ //# sourceMappingURL=browser-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-discovery.d.ts","sourceRoot":"","sources":["../src/browser-discovery.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAmB,MAAM,gBAAgB,CAAA;AAepE,uCAAuC;AACvC,MAAM,WAAW,cAAc;IAC7B,oCAAoC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,oDAAoD;IACpD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CACrC;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,cAO5C,CAAA;AAED,kEAAkE;AAClE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,aAAa,EAAE,KAAG,SAAS,MAAM,EAM/E,CAAA;AAED,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,yGAAyG;IACzG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAOD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,EAAE,QAAQ,MAAM,KAAG,SAAS,eAAe,EAAE,GAAG,SAmB5F,CAAA;AAID,8CAA8C;AAC9C,eAAO,MAAM,aAAa,GAAI,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,KAAG,MAAsC,CAAA;AAEzG;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAO/C,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,SAAS,MAAM,EACR,CAAA;AAE7D;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,QAAQ,CAAC,KAAG,MACQ,CAAA;AAEjF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAAuC,CAAA;AAEzF,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,QAAQ,SAAS,MAAM,EAAE,EACzB,UAAU,SAAS,aAAa,EAAE,KACjC,SAAS,cAAc,EAOzB,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,GAAI,UAAU,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAM,GAAG,SAOpE,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,MAAM,EACZ,SAAS,MAAM,EACf,cAAc,MAAM,EACpB,QAAQ,MAAM,KACb,MAAM,GAAG,SAYX,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,SAAS,SAAS,eAAe,EAAE,KAAG,SAAS,eAAe,EAMxF,CAAA"}
@@ -0,0 +1,161 @@
1
+ // What the sweep reads from the running application to decide what to scan: the routes a sitemap
2
+ // lists, the locales a page links as alternates, the stories a Storybook serves, and the template each
3
+ // route renders. Nothing here is declared by the project; each value is derived from what it serves.
4
+ import { isArray, isRecord } from './json-shapes.js';
5
+ import { resolvedRouteOf } from './route-map.js';
6
+ const LOC = /<loc>([^<]+)<\/loc>/giu;
7
+ const XML_ENTITIES = {
8
+ '&amp;': '&',
9
+ '&lt;': '<',
10
+ '&gt;': '>',
11
+ '&quot;': '"',
12
+ '&apos;': "'",
13
+ };
14
+ const decodeXml = (text) => text.replaceAll(/&(?:amp|lt|gt|quot|apos);/gu, (entity) => XML_ENTITIES[entity] ?? entity);
15
+ /**
16
+ * The URLs a sitemap document lists, split into pages and nested sitemaps.
17
+ * @param xml the document.
18
+ * @returns the page and sitemap URLs, each once, in document order.
19
+ */
20
+ export const sitemapEntries = (xml) => {
21
+ const locations = [
22
+ ...new Set([...xml.matchAll(LOC)].map((match) => decodeXml((match[1] ?? '').trim()))),
23
+ ];
24
+ return /<sitemapindex[\s>]/u.test(xml) ? { pages: [], sitemaps: locations } : { pages: locations, sitemaps: [] };
25
+ };
26
+ /**
27
+ * The alternate-locale hrefs of a page, `x-default` included.
28
+ * @param links the page's alternate links.
29
+ * @returns each href that carries a language, once.
30
+ */
31
+ export const alternateHrefs = (links) => [
32
+ ...new Set(links
33
+ .filter((link) => link.hreflang.trim().length > 0 && link.href.trim().length > 0)
34
+ .map((link) => link.href.trim())),
35
+ ];
36
+ const asRecord = (value) => isRecord(value) && !isArray(value) ? value : {};
37
+ const asText = (value) => (typeof value === 'string' ? value : '');
38
+ /**
39
+ * The stories a Storybook `index.json` lists, docs entries left out.
40
+ * @param index the parsed document.
41
+ * @param server the origin it was read from.
42
+ * @returns one entry per story, or undefined when the document is not a Storybook index.
43
+ */
44
+ export const storiesOfIndex = (index, server) => {
45
+ const entries = asRecord(index)['entries'];
46
+ if (typeof entries !== 'object' || entries === null) {
47
+ return undefined;
48
+ }
49
+ return Object.values(asRecord(entries))
50
+ .map((entry) => asRecord(entry))
51
+ .filter((entry) => entry['type'] === 'story' && asText(entry['id']) !== '')
52
+ .map((entry) => ({
53
+ id: asText(entry['id']),
54
+ title: asText(entry['title']),
55
+ name: asText(entry['name']),
56
+ server,
57
+ importPath: asText(entry['importPath']),
58
+ }));
59
+ };
60
+ const STORY_PREFIX = 'story:';
61
+ /** The location a story is reported under. */
62
+ export const storyLocation = (story) => `${STORY_PREFIX}${story.id}`;
63
+ /**
64
+ * The axe rules that judge a whole document, which a story is not: it renders one component alone in a
65
+ * frame, without the page's landmarks, its level-one heading, its title or its skip link. Storybook's
66
+ * own accessibility addon leaves them out for the same reason. The page that places the component is
67
+ * judged by them where it is crawled or scanned.
68
+ */
69
+ export const DOCUMENT_AXE_RULES = [
70
+ 'landmark-one-main',
71
+ 'page-has-heading-one',
72
+ 'region',
73
+ 'bypass',
74
+ 'document-title',
75
+ 'html-has-lang',
76
+ ];
77
+ /**
78
+ * The axe rules that do not apply where a finding was measured.
79
+ * @param location the route or `story:<id>` location.
80
+ * @returns the document rules for a story, and none for a route.
81
+ */
82
+ export const axeRulesExcludedAt = (location) => location.startsWith(STORY_PREFIX) ? DOCUMENT_AXE_RULES : [];
83
+ /**
84
+ * The address that renders one story alone.
85
+ * @param story the story.
86
+ * @returns its isolated preview URL.
87
+ */
88
+ export const storyUrl = (story) => `${story.server}/iframe.html?id=${encodeURIComponent(story.id)}&viewMode=story`;
89
+ /**
90
+ * The render phases at which a story has stopped: rendered, played, and its `afterEach` run, or failed.
91
+ * Storybook exposes the phase as `__STORYBOOK_PREVIEW__.currentRender.phase`.
92
+ */
93
+ export const SETTLED_STORY_PHASES = ['finished', 'errored', 'aborted'];
94
+ /**
95
+ * One route per template, the first one crawled, for the passes that sample instead of covering all.
96
+ * @param routes the crawled routes, in crawl order.
97
+ * @param declared the routes the file tree declares.
98
+ * @returns one sample per template, in the order its first route was crawled.
99
+ */
100
+ export const templateSamples = (routes, declared) => {
101
+ const templateOf = (route) => resolvedRouteOf(declared, route)?.route ?? route;
102
+ const templates = [...new Set(routes.map((route) => templateOf(route)))];
103
+ return templates.map((template) => {
104
+ const members = routes.filter((route) => templateOf(route) === template);
105
+ return { template, route: members[0] ?? template, routes: members.length };
106
+ });
107
+ };
108
+ /**
109
+ * A sitemap location on the application under test.
110
+ *
111
+ * A sitemap lists the application's own pages under its canonical public host, which a verification
112
+ * run does not serve. Its path is what names the page, so the path is read on the run's origin.
113
+ * @param location a `<loc>` value.
114
+ * @param origin the origin the application answers at.
115
+ * @returns the same path and query on that origin, or undefined when the value is not a URL.
116
+ */
117
+ export const onOrigin = (location, origin) => {
118
+ try {
119
+ const url = new URL(location, origin);
120
+ return `${origin}${url.pathname}${url.search}`;
121
+ }
122
+ catch {
123
+ return undefined;
124
+ }
125
+ };
126
+ /**
127
+ * The address a page's link names on the application under test, or undefined for another site.
128
+ *
129
+ * A same-origin link is the application's. So is a link under the page's own canonical host: a site
130
+ * that builds absolute links from its public URL names its own pages that way, and a verification run
131
+ * does not serve that host. Any other origin is a different site.
132
+ * @param href the link, as written.
133
+ * @param pageUrl the URL of the page carrying it.
134
+ * @param canonicalUrl the page's `<link rel="canonical">` href, or empty when it has none.
135
+ * @param origin the origin the application answers at.
136
+ * @returns the address on that origin, or undefined.
137
+ */
138
+ export const localAddress = (href, pageUrl, canonicalUrl, origin) => {
139
+ try {
140
+ const url = new URL(href, pageUrl);
141
+ if (url.origin === origin) {
142
+ return url.href;
143
+ }
144
+ return canonicalUrl !== '' && url.origin === new URL(canonicalUrl, pageUrl).origin
145
+ ? onOrigin(url.href, origin)
146
+ : undefined;
147
+ }
148
+ catch {
149
+ return undefined;
150
+ }
151
+ };
152
+ /**
153
+ * One story per component, the first one listed, for the passes that sample instead of covering all.
154
+ *
155
+ * A component's stories are its states, rendered by one template, the way a dynamic route's pages are
156
+ * one route file's output. The passes that cover everything still judge every story.
157
+ * @param stories the discovered stories, in index order.
158
+ * @returns the first story of each title.
159
+ */
160
+ export const storySamples = (stories) => stories.filter((story, index) => stories.findIndex((other) => other.title === story.title && other.server === story.server) === index);
161
+ //# sourceMappingURL=browser-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-discovery.js","sourceRoot":"","sources":["../src/browser-discovery.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,uGAAuG;AACvG,qGAAqG;AACrG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAsB,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAEpE,MAAM,GAAG,GAAW,wBAAwB,CAAA;AAE5C,MAAM,YAAY,GAAqC;IACrD,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;CACd,CAAA;AAED,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CACzC,IAAI,CAAC,UAAU,CAAC,6BAA6B,EAAE,CAAC,MAAc,EAAU,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,CAAA;AAU5G;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAkB,EAAE;IAC5D,MAAM,SAAS,GAAsB;QACnC,GAAG,IAAI,GAAG,CACR,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAsB,EAAU,EAAE,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CACnG;KACF,CAAA;IACD,OAAO,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;AAClH,CAAC,CAAA;AAQD;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAA+B,EAAqB,EAAE,CAAC;IACpF,GAAG,IAAI,GAAG,CACR,KAAK;SACF,MAAM,CAAC,CAAC,IAAmB,EAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;SACxG,GAAG,CAAC,CAAC,IAAmB,EAAU,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAC1D;CACF,CAAA;AAaD,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAqC,EAAE,CACrE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAEjD,MAAM,MAAM,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;AAEnF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAc,EAAE,MAAc,EAA0C,EAAE;IACvG,MAAM,OAAO,GAAY,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAA;IACnD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACpC,GAAG,CAAC,CAAC,KAAc,EAAqC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC3E,MAAM,CACL,CAAC,KAAwC,EAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAC/G;SACA,GAAG,CACF,CAAC,KAAwC,EAAmB,EAAE,CAAC,CAAC;QAC9D,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,MAAM;QACN,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;KACxC,CAAC,CACH,CAAA;AACL,CAAC,CAAA;AAED,MAAM,YAAY,GAAW,QAAQ,CAAA;AAErC,8CAA8C;AAC9C,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAkC,EAAU,EAAE,CAAC,GAAG,YAAY,GAAG,KAAK,CAAC,EAAE,EAAE,CAAA;AAEzG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAsB;IACnD,mBAAmB;IACnB,sBAAsB;IACtB,QAAQ;IACR,QAAQ;IACR,gBAAgB;IAChB,eAAe;CAChB,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,QAAgB,EAAqB,EAAE,CACxE,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAA;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAA6C,EAAU,EAAE,CAChF,GAAG,KAAK,CAAC,MAAM,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAAA;AAEjF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;AAWzF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,MAAyB,EACzB,QAAkC,EACP,EAAE;IAC7B,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK,IAAI,KAAK,CAAA;IAC9F,MAAM,SAAS,GAAsB,CAAC,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,GAAG,CAAC,CAAC,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACnH,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,QAAgB,EAAkB,EAAE;QACxD,MAAM,OAAO,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,KAAa,EAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAA;QAC5G,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAA;IAC5E,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,MAAc,EAAsB,EAAE;IAC/E,IAAI,CAAC;QACH,MAAM,GAAG,GAAQ,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QAC1C,OAAO,GAAG,MAAM,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAY,EACZ,OAAe,EACf,YAAoB,EACpB,MAAc,EACM,EAAE;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,GAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACvC,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,IAAI,CAAA;QACjB,CAAC;QACD,OAAO,YAAY,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,MAAM;YAChF,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;YAC5B,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAmC,EAA8B,EAAE,CAC9F,OAAO,CAAC,MAAM,CACZ,CAAC,KAAsB,EAAE,KAAa,EAAW,EAAE,CACjD,OAAO,CAAC,SAAS,CACf,CAAC,KAAsB,EAAW,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAClG,KAAK,KAAK,CACd,CAAA"}