@ploaness/governance 1.5.0 → 1.7.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 (265) hide show
  1. package/dist/a11y-hit-target.d.ts.map +1 -1
  2. package/dist/a11y-hit-target.js.map +1 -1
  3. package/dist/a11y-incomplete.d.ts.map +1 -1
  4. package/dist/a11y-incomplete.js +2 -6
  5. package/dist/a11y-incomplete.js.map +1 -1
  6. package/dist/access-boundary.d.ts.map +1 -1
  7. package/dist/access-boundary.js +2 -4
  8. package/dist/access-boundary.js.map +1 -1
  9. package/dist/admin-view-coverage.d.ts.map +1 -1
  10. package/dist/admin-view-coverage.js +2 -7
  11. package/dist/admin-view-coverage.js.map +1 -1
  12. package/dist/agent-references.d.ts.map +1 -1
  13. package/dist/agent-references.js.map +1 -1
  14. package/dist/architecture-layers.d.ts.map +1 -1
  15. package/dist/architecture-layers.js.map +1 -1
  16. package/dist/asset-policy.d.ts.map +1 -1
  17. package/dist/asset-policy.js +4 -15
  18. package/dist/asset-policy.js.map +1 -1
  19. package/dist/axe-coverage.d.ts +9 -0
  20. package/dist/axe-coverage.d.ts.map +1 -1
  21. package/dist/axe-coverage.js +18 -5
  22. package/dist/axe-coverage.js.map +1 -1
  23. package/dist/banned-typography.d.ts.map +1 -1
  24. package/dist/banned-typography.js +1 -4
  25. package/dist/banned-typography.js.map +1 -1
  26. package/dist/blocklist-entries.d.ts.map +1 -1
  27. package/dist/blocklist-entries.js.map +1 -1
  28. package/dist/blocklist.d.ts.map +1 -1
  29. package/dist/blocklist.js +3 -7
  30. package/dist/blocklist.js.map +1 -1
  31. package/dist/browser-server-policy.d.ts +26 -0
  32. package/dist/browser-server-policy.d.ts.map +1 -0
  33. package/dist/browser-server-policy.js +45 -0
  34. package/dist/browser-server-policy.js.map +1 -0
  35. package/dist/build-diagnosis.d.ts.map +1 -1
  36. package/dist/build-diagnosis.js +1 -1
  37. package/dist/build-diagnosis.js.map +1 -1
  38. package/dist/bundle-budget.d.ts.map +1 -1
  39. package/dist/bundle-budget.js.map +1 -1
  40. package/dist/checkov-checks-aws.d.ts.map +1 -1
  41. package/dist/checkov-checks-aws.js.map +1 -1
  42. package/dist/checkov-policy.d.ts.map +1 -1
  43. package/dist/checkov-policy.js.map +1 -1
  44. package/dist/commit-message.d.ts.map +1 -1
  45. package/dist/commit-message.js +4 -18
  46. package/dist/commit-message.js.map +1 -1
  47. package/dist/container-failure.d.ts.map +1 -1
  48. package/dist/container-failure.js +1 -6
  49. package/dist/container-failure.js.map +1 -1
  50. package/dist/container-freshness.d.ts +2 -0
  51. package/dist/container-freshness.d.ts.map +1 -1
  52. package/dist/container-freshness.js +14 -16
  53. package/dist/container-freshness.js.map +1 -1
  54. package/dist/container-images.d.ts.map +1 -1
  55. package/dist/container-images.js +5 -10
  56. package/dist/container-images.js.map +1 -1
  57. package/dist/dependency-freshness.d.ts.map +1 -1
  58. package/dist/dependency-freshness.js.map +1 -1
  59. package/dist/doc-blocks.d.ts.map +1 -1
  60. package/dist/doc-blocks.js +3 -15
  61. package/dist/doc-blocks.js.map +1 -1
  62. package/dist/document-references.d.ts.map +1 -1
  63. package/dist/document-references.js +2 -6
  64. package/dist/document-references.js.map +1 -1
  65. package/dist/editorconfig-policy.d.ts +4 -1
  66. package/dist/editorconfig-policy.d.ts.map +1 -1
  67. package/dist/editorconfig-policy.js +38 -33
  68. package/dist/editorconfig-policy.js.map +1 -1
  69. package/dist/environment-coherence.d.ts.map +1 -1
  70. package/dist/environment-coherence.js +6 -25
  71. package/dist/environment-coherence.js.map +1 -1
  72. package/dist/environment-files.d.ts.map +1 -1
  73. package/dist/environment-files.js.map +1 -1
  74. package/dist/file-roles.d.ts +3 -3
  75. package/dist/file-roles.d.ts.map +1 -1
  76. package/dist/file-roles.js +11 -7
  77. package/dist/file-roles.js.map +1 -1
  78. package/dist/freshness-repair.d.ts.map +1 -1
  79. package/dist/freshness-repair.js +3 -6
  80. package/dist/freshness-repair.js.map +1 -1
  81. package/dist/generated-denial.d.ts +2 -0
  82. package/dist/generated-denial.d.ts.map +1 -1
  83. package/dist/generated-denial.js +11 -14
  84. package/dist/generated-denial.js.map +1 -1
  85. package/dist/generated-drift.d.ts.map +1 -1
  86. package/dist/generated-drift.js +1 -3
  87. package/dist/generated-drift.js.map +1 -1
  88. package/dist/history-policy.d.ts.map +1 -1
  89. package/dist/history-policy.js.map +1 -1
  90. package/dist/image-assets.d.ts.map +1 -1
  91. package/dist/image-assets.js +1 -2
  92. package/dist/image-assets.js.map +1 -1
  93. package/dist/index.d.ts +10 -0
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +10 -0
  96. package/dist/index.js.map +1 -1
  97. package/dist/install-policy.d.ts.map +1 -1
  98. package/dist/install-policy.js +2 -7
  99. package/dist/install-policy.js.map +1 -1
  100. package/dist/json-shapes.d.ts.map +1 -1
  101. package/dist/json-shapes.js +1 -1
  102. package/dist/json-shapes.js.map +1 -1
  103. package/dist/jsx-accessibility-scope.d.ts.map +1 -1
  104. package/dist/jsx-accessibility-scope.js +2 -7
  105. package/dist/jsx-accessibility-scope.js.map +1 -1
  106. package/dist/jsx-accessibility.d.ts.map +1 -1
  107. package/dist/jsx-accessibility.js +2 -14
  108. package/dist/jsx-accessibility.js.map +1 -1
  109. package/dist/layout-boxes.d.ts +26 -0
  110. package/dist/layout-boxes.d.ts.map +1 -0
  111. package/dist/layout-boxes.js +169 -0
  112. package/dist/layout-boxes.js.map +1 -0
  113. package/dist/layout-defects.d.ts +28 -0
  114. package/dist/layout-defects.d.ts.map +1 -0
  115. package/dist/layout-defects.js +114 -0
  116. package/dist/layout-defects.js.map +1 -0
  117. package/dist/layout-snapshot.d.ts +152 -0
  118. package/dist/layout-snapshot.d.ts.map +1 -0
  119. package/dist/layout-snapshot.js +127 -0
  120. package/dist/layout-snapshot.js.map +1 -0
  121. package/dist/layout-text.d.ts +42 -0
  122. package/dist/layout-text.d.ts.map +1 -0
  123. package/dist/layout-text.js +97 -0
  124. package/dist/layout-text.js.map +1 -0
  125. package/dist/license-allowlist.d.ts.map +1 -1
  126. package/dist/license-allowlist.js +1 -3
  127. package/dist/license-allowlist.js.map +1 -1
  128. package/dist/network-policy.d.ts.map +1 -1
  129. package/dist/network-policy.js +2 -11
  130. package/dist/network-policy.js.map +1 -1
  131. package/dist/oxlint-policy.d.ts +1 -1
  132. package/dist/oxlint-policy.d.ts.map +1 -1
  133. package/dist/oxlint-policy.js +10 -3
  134. package/dist/oxlint-policy.js.map +1 -1
  135. package/dist/oxlint-report.d.ts.map +1 -1
  136. package/dist/oxlint-report.js +1 -3
  137. package/dist/oxlint-report.js.map +1 -1
  138. package/dist/oxlint-scope.d.ts +2 -2
  139. package/dist/oxlint-scope.d.ts.map +1 -1
  140. package/dist/oxlint-scope.js +15 -20
  141. package/dist/oxlint-scope.js.map +1 -1
  142. package/dist/oxlint-suppressions.d.ts.map +1 -1
  143. package/dist/oxlint-suppressions.js +3 -9
  144. package/dist/oxlint-suppressions.js.map +1 -1
  145. package/dist/paired-assets.d.ts.map +1 -1
  146. package/dist/paired-assets.js +1 -2
  147. package/dist/paired-assets.js.map +1 -1
  148. package/dist/payload-access.d.ts.map +1 -1
  149. package/dist/payload-access.js +33 -16
  150. package/dist/payload-access.js.map +1 -1
  151. package/dist/payload-bootstrap.d.ts.map +1 -1
  152. package/dist/payload-bootstrap.js +1 -4
  153. package/dist/payload-bootstrap.js.map +1 -1
  154. package/dist/payload-configs.d.ts.map +1 -1
  155. package/dist/payload-configs.js +2 -4
  156. package/dist/payload-configs.js.map +1 -1
  157. package/dist/payload-database.d.ts.map +1 -1
  158. package/dist/payload-database.js +4 -13
  159. package/dist/payload-database.js.map +1 -1
  160. package/dist/payload-defaults.d.ts +2 -0
  161. package/dist/payload-defaults.d.ts.map +1 -1
  162. package/dist/payload-defaults.js +8 -7
  163. package/dist/payload-defaults.js.map +1 -1
  164. package/dist/payload-field-access.d.ts.map +1 -1
  165. package/dist/payload-field-access.js +1 -1
  166. package/dist/payload-field-access.js.map +1 -1
  167. package/dist/payload-policy.d.ts.map +1 -1
  168. package/dist/payload-policy.js +2 -3
  169. package/dist/payload-policy.js.map +1 -1
  170. package/dist/payload-security.d.ts +20 -0
  171. package/dist/payload-security.d.ts.map +1 -0
  172. package/dist/payload-security.js +88 -0
  173. package/dist/payload-security.js.map +1 -0
  174. package/dist/payload-source.d.ts.map +1 -1
  175. package/dist/payload-source.js +1 -3
  176. package/dist/payload-source.js.map +1 -1
  177. package/dist/production-server.d.ts +11 -0
  178. package/dist/production-server.d.ts.map +1 -0
  179. package/dist/production-server.js +17 -0
  180. package/dist/production-server.js.map +1 -0
  181. package/dist/relationship-cleanup.d.ts.map +1 -1
  182. package/dist/relationship-cleanup.js +3 -10
  183. package/dist/relationship-cleanup.js.map +1 -1
  184. package/dist/release-age.d.ts.map +1 -1
  185. package/dist/release-age.js +1 -3
  186. package/dist/release-age.js.map +1 -1
  187. package/dist/route-coverage.d.ts.map +1 -1
  188. package/dist/route-coverage.js +18 -6
  189. package/dist/route-coverage.js.map +1 -1
  190. package/dist/route-map.d.ts.map +1 -1
  191. package/dist/route-map.js +3 -16
  192. package/dist/route-map.js.map +1 -1
  193. package/dist/run-plan.d.ts +4 -0
  194. package/dist/run-plan.d.ts.map +1 -1
  195. package/dist/run-plan.js +5 -3
  196. package/dist/run-plan.js.map +1 -1
  197. package/dist/run-policy.d.ts.map +1 -1
  198. package/dist/run-policy.js +1 -2
  199. package/dist/run-policy.js.map +1 -1
  200. package/dist/sbom-policy.d.ts +21 -0
  201. package/dist/sbom-policy.d.ts.map +1 -0
  202. package/dist/sbom-policy.js +180 -0
  203. package/dist/sbom-policy.js.map +1 -0
  204. package/dist/sbom-release.d.ts +16 -0
  205. package/dist/sbom-release.d.ts.map +1 -0
  206. package/dist/sbom-release.js +36 -0
  207. package/dist/sbom-release.js.map +1 -0
  208. package/dist/secret-policy.d.ts.map +1 -1
  209. package/dist/secret-policy.js.map +1 -1
  210. package/dist/security-headers.d.ts +3 -0
  211. package/dist/security-headers.d.ts.map +1 -0
  212. package/dist/security-headers.js +26 -0
  213. package/dist/security-headers.js.map +1 -0
  214. package/dist/settings-layering.d.ts.map +1 -1
  215. package/dist/settings-layering.js +15 -12
  216. package/dist/settings-layering.js.map +1 -1
  217. package/dist/settings.d.ts +12 -1
  218. package/dist/settings.d.ts.map +1 -1
  219. package/dist/settings.js +46 -14
  220. package/dist/settings.js.map +1 -1
  221. package/dist/shell-files.d.ts.map +1 -1
  222. package/dist/shell-files.js +2 -6
  223. package/dist/shell-files.js.map +1 -1
  224. package/dist/skill-manifest.d.ts.map +1 -1
  225. package/dist/skill-manifest.js +1 -4
  226. package/dist/skill-manifest.js.map +1 -1
  227. package/dist/source-security.d.ts.map +1 -1
  228. package/dist/source-security.js +2 -4
  229. package/dist/source-security.js.map +1 -1
  230. package/dist/source-text.d.ts.map +1 -1
  231. package/dist/source-text.js.map +1 -1
  232. package/dist/suppression-ceiling.d.ts.map +1 -1
  233. package/dist/suppression-ceiling.js +14 -4
  234. package/dist/suppression-ceiling.js.map +1 -1
  235. package/dist/terraform-files.d.ts.map +1 -1
  236. package/dist/terraform-files.js +1 -5
  237. package/dist/terraform-files.js.map +1 -1
  238. package/dist/terraform-policy.d.ts.map +1 -1
  239. package/dist/terraform-policy.js +2 -10
  240. package/dist/terraform-policy.js.map +1 -1
  241. package/dist/terraform-providers.d.ts.map +1 -1
  242. package/dist/terraform-providers.js +1 -3
  243. package/dist/terraform-providers.js.map +1 -1
  244. package/dist/text-escapes.d.ts.map +1 -1
  245. package/dist/text-escapes.js.map +1 -1
  246. package/dist/toolchain-pins.d.ts +3 -3
  247. package/dist/toolchain-pins.d.ts.map +1 -1
  248. package/dist/toolchain-pins.js +6 -5
  249. package/dist/toolchain-pins.js.map +1 -1
  250. package/dist/version-policy.d.ts.map +1 -1
  251. package/dist/version-policy.js +8 -12
  252. package/dist/version-policy.js.map +1 -1
  253. package/dist/vulnerability-policy.d.ts.map +1 -1
  254. package/dist/vulnerability-policy.js.map +1 -1
  255. package/dist/wiring-policy.d.ts +2 -0
  256. package/dist/wiring-policy.d.ts.map +1 -1
  257. package/dist/wiring-policy.js +8 -28
  258. package/dist/wiring-policy.js.map +1 -1
  259. package/dist/workspace-policy.d.ts.map +1 -1
  260. package/dist/workspace-policy.js +2 -6
  261. package/dist/workspace-policy.js.map +1 -1
  262. package/dist/yaml-blocks.d.ts.map +1 -1
  263. package/dist/yaml-blocks.js +4 -12
  264. package/dist/yaml-blocks.js.map +1 -1
  265. package/package.json +2 -2
@@ -0,0 +1,114 @@
1
+ // The layout sweep's verdict on one page, measured at every viewport the harness requires.
2
+ //
3
+ // Each defect is one line naming the route, the viewport, the rule, and the elements, so a failure says
4
+ // where to look without a screenshot. Exemptions are judged across all the viewports of a page at once:
5
+ // an edge attached at a phone width and apart at a desktop one is the ordinary shape of a responsive
6
+ // layout, so an exemption is stale only when it excuses nothing at any of them.
7
+ import { findTouchingBoxes } from './layout-boxes.js';
8
+ import { ATTACHED_EXEMPTION, keyOf } from './layout-snapshot.js';
9
+ import { findClippedText, findOverflowingElements, findOverlappingText, } from './layout-text.js';
10
+ /** The viewports the harness requires: a phone and a desktop. A project may add more, never remove. */
11
+ export const LAYOUT_VIEWPORTS = [
12
+ { width: 390, height: 844 },
13
+ { width: 1280, height: 800 },
14
+ ];
15
+ /** The smallest gap, in CSS pixels, between a boxed element and its sibling. A project may raise it. */
16
+ export const LAYOUT_MINIMUM_GAP = 4;
17
+ /** The attribute a project writes on an element whose edge is shared on purpose. */
18
+ export const LAYOUT_EXEMPTION_ATTRIBUTE = 'data-ploaness-layout';
19
+ /** The attribute carrying the reason for that exemption. */
20
+ export const LAYOUT_REASON_ATTRIBUTE = 'data-ploaness-layout-reason';
21
+ const PAIR_SEPARATOR = ' <-> ';
22
+ const where = (snapshot) => `${snapshot.route} @${String(snapshot.viewportWidth)}px`;
23
+ const boxLine = (snapshot, finding) => {
24
+ const kind = finding.isOverlap
25
+ ? 'overlapping boxes'
26
+ : `touching boxes (gap ${String(Math.max(0, finding.gap))}px)`;
27
+ return `${where(snapshot)}: ${kind}: ${finding.first.label}${PAIR_SEPARATOR}${finding.second.label}`;
28
+ };
29
+ const textLine = (snapshot, finding) => `${where(snapshot)}: overlapping text: ${finding.first.label}${PAIR_SEPARATOR}${finding.second.label}`;
30
+ const clipLine = (snapshot, finding) => {
31
+ const node = finding.node;
32
+ const kind = finding.isUnnamedTruncation
33
+ ? 'truncated text without its full text in title or aria-label'
34
+ : `clipped text (content ${String(node.scrollWidth)}x${String(node.scrollHeight)}px in a ` +
35
+ `${String(node.clientWidth)}x${String(node.clientHeight)}px box)`;
36
+ return `${where(snapshot)}: ${kind}: ${node.label}`;
37
+ };
38
+ const overflowLines = (snapshot) => {
39
+ if (snapshot.scrollWidth <= snapshot.viewportWidth) {
40
+ return [];
41
+ }
42
+ const prefix = `${where(snapshot)}: horizontal overflow (page ${String(snapshot.scrollWidth)}px wide ` +
43
+ `in a ${String(snapshot.viewportWidth)}px viewport)`;
44
+ const culprits = findOverflowingElements(snapshot);
45
+ return culprits.length === 0
46
+ ? [`${prefix}: document`]
47
+ : culprits.map((node) => `${prefix}: ${node.label}`);
48
+ };
49
+ const isExempted = (finding) => finding.exemptedBy.length > 0;
50
+ const snapshotLines = (snapshot, minimumGap) => [
51
+ ...findTouchingBoxes(snapshot, minimumGap)
52
+ .filter((finding) => !isExempted(finding))
53
+ .map((finding) => boxLine(snapshot, finding)),
54
+ ...findOverlappingText(snapshot).map((finding) => textLine(snapshot, finding)),
55
+ ...findClippedText(snapshot).map((finding) => clipLine(snapshot, finding)),
56
+ ...overflowLines(snapshot),
57
+ ];
58
+ const exemptionLines = (snapshot) => snapshot.nodes.flatMap((node) => {
59
+ if (node.exemption === undefined) {
60
+ return [];
61
+ }
62
+ if (node.exemption !== ATTACHED_EXEMPTION) {
63
+ return [
64
+ `${where(snapshot)}: unknown layout exemption ${LAYOUT_EXEMPTION_ATTRIBUTE}=` +
65
+ `"${node.exemption}" on ${node.label}; the only value is "${ATTACHED_EXEMPTION}"`,
66
+ ];
67
+ }
68
+ return node.exemptionReason.length === 0
69
+ ? [
70
+ `${where(snapshot)}: layout exemption without a reason on ${node.label}; ` +
71
+ `state it in ${LAYOUT_REASON_ATTRIBUTE}`,
72
+ ]
73
+ : [];
74
+ });
75
+ const usedExemptionKeys = (snapshots, minimumGap) => new Set(snapshots.flatMap((snapshot) => findTouchingBoxes(snapshot, minimumGap).flatMap((finding) => finding.exemptedBy.map((node) => keyOf(snapshot, node)))));
76
+ const attachedExemptions = (snapshots) => {
77
+ const all = snapshots.flatMap((snapshot) => snapshot.nodes
78
+ .filter((node) => node.exemption === ATTACHED_EXEMPTION)
79
+ .map((node) => ({ key: keyOf(snapshot, node), label: node.label })));
80
+ return all.filter((exemption, index) => all.findIndex((other) => other.key === exemption.key) === index);
81
+ };
82
+ const staleLines = (snapshots, minimumGap) => {
83
+ const used = usedExemptionKeys(snapshots, minimumGap);
84
+ const widths = snapshots
85
+ .map((snapshot) => `${String(snapshot.viewportWidth)}px`)
86
+ .join(', ');
87
+ const route = snapshots[0]?.route ?? '';
88
+ return attachedExemptions(snapshots)
89
+ .filter((exemption) => !used.has(exemption.key))
90
+ .map((exemption) => `${route}: stale layout exemption on ${exemption.label}: it excuses no touching or ` +
91
+ `overlapping box at ${widths}; remove ${LAYOUT_EXEMPTION_ATTRIBUTE}`);
92
+ };
93
+ /**
94
+ * Every layout defect on one page, across the viewports it was measured at.
95
+ * @param snapshots the same page measured at each required viewport.
96
+ * @param minimumGap the smallest gap, in CSS pixels, between a boxed element and its sibling.
97
+ * @returns one line per defect, without duplicates, in the order the viewports were measured.
98
+ */
99
+ export const findLayoutDefects = (snapshots, minimumGap) => [
100
+ ...new Set([
101
+ ...snapshots.flatMap((snapshot) => [
102
+ ...snapshotLines(snapshot, minimumGap),
103
+ ...exemptionLines(snapshot),
104
+ ]),
105
+ ...staleLines(snapshots, minimumGap),
106
+ ]),
107
+ ];
108
+ /**
109
+ * The viewports a scan must run at: the harness's own, then any a project adds.
110
+ * @param declared the viewports a project declared.
111
+ * @returns the required viewports first, each width once.
112
+ */
113
+ export const layoutViewportsWith = (declared) => [...LAYOUT_VIEWPORTS, ...declared].filter((viewport, index, all) => all.findIndex((other) => other.width === viewport.width && other.height === viewport.height) === index);
114
+ //# sourceMappingURL=layout-defects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-defects.js","sourceRoot":"","sources":["../src/layout-defects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ /** A box in document coordinates, rounded to whole CSS pixels. */
2
+ export interface LayoutRect {
3
+ readonly left: number;
4
+ readonly top: number;
5
+ readonly right: number;
6
+ readonly bottom: number;
7
+ }
8
+ /** One side of an element's computed border. */
9
+ export interface LayoutBorder {
10
+ readonly width: number;
11
+ readonly style: string;
12
+ readonly color: string;
13
+ }
14
+ /** The four computed borders, keyed by the side they draw. */
15
+ export interface LayoutBorders {
16
+ readonly top: LayoutBorder;
17
+ readonly right: LayoutBorder;
18
+ readonly bottom: LayoutBorder;
19
+ readonly left: LayoutBorder;
20
+ }
21
+ /** The side of a box that faces a neighbour. */
22
+ export type LayoutSide = keyof LayoutBorders;
23
+ /** What the page reports about one element. */
24
+ export interface LayoutNode {
25
+ /** Document order, starting at `<body>`. */
26
+ readonly index: number;
27
+ /** The index of the parent element, or -1 for `<body>`. */
28
+ readonly parent: number;
29
+ /** A short selector with the element's own text, enough to find it. */
30
+ readonly label: string;
31
+ /** The element lowercase tag name. */
32
+ readonly tag: string;
33
+ /** One rect per box fragment: an inline element wrapped over two lines reports two. */
34
+ readonly rects: readonly LayoutRect[];
35
+ /** The rects of the element's own non-blank text nodes, not of its descendants'. */
36
+ readonly textRects: readonly LayoutRect[];
37
+ /** The computed `line-height` in CSS pixels, or 0 for `normal`. */
38
+ readonly lineHeight: number;
39
+ /** The element's whole text, trimmed. Reported only where a clip could hide part of it. */
40
+ readonly text: string;
41
+ readonly display: string;
42
+ readonly visibility: string;
43
+ readonly position: string;
44
+ readonly backgroundColor: string;
45
+ readonly backgroundImage: string;
46
+ readonly boxShadow: string;
47
+ readonly borders: LayoutBorders;
48
+ /** Whether the element itself carries `aria-hidden="true"`. */
49
+ readonly isAriaHidden: boolean;
50
+ /** Whether a `clip` or `clip-path` is set, which is how a visually hidden element is drawn. */
51
+ readonly isClipped: boolean;
52
+ readonly overflowX: string;
53
+ readonly overflowY: string;
54
+ readonly textOverflow: string;
55
+ readonly lineClamp: string;
56
+ readonly scrollWidth: number;
57
+ readonly clientWidth: number;
58
+ readonly scrollHeight: number;
59
+ readonly clientHeight: number;
60
+ readonly title: string;
61
+ readonly ariaLabel: string;
62
+ /** The value of `data-ploaness-layout`, or undefined when the attribute is absent. */
63
+ readonly exemption: string | undefined;
64
+ /** The value of `data-ploaness-layout-reason`, trimmed. */
65
+ readonly exemptionReason: string;
66
+ }
67
+ /** One page measured at one viewport. */
68
+ export interface LayoutSnapshot {
69
+ readonly route: string;
70
+ readonly viewportWidth: number;
71
+ readonly viewportHeight: number;
72
+ /** The document's scroll width. */
73
+ readonly scrollWidth: number;
74
+ /** The computed background of `<html>`, which is what `<body>` sits on. */
75
+ readonly rootBackground: string;
76
+ readonly nodes: readonly LayoutNode[];
77
+ }
78
+ /** The only exemption value: an edge shared on purpose, such as a tab joined to its panel. */
79
+ export declare const ATTACHED_EXEMPTION: string;
80
+ /**
81
+ * Whether a computed colour draws anything.
82
+ * @param color a computed colour string.
83
+ * @returns false for `transparent` and any colour whose alpha is zero.
84
+ */
85
+ export declare const isVisibleColor: (color: string) => boolean;
86
+ /**
87
+ * The background an element sits on: the nearest ancestor that paints one, or the page canvas.
88
+ * @param snapshot the measured page.
89
+ * @param node the element whose surroundings are wanted.
90
+ * @returns a computed colour string.
91
+ */
92
+ export declare const surroundingBackground: (snapshot: LayoutSnapshot, node: LayoutNode) => string;
93
+ /**
94
+ * Whether an element paints a background that stands out from what it sits on.
95
+ * @param snapshot the measured page.
96
+ * @param node the element.
97
+ * @returns true for an image or gradient, and for a visible colour unlike the surrounding one.
98
+ */
99
+ export declare const hasPaintedBackground: (snapshot: LayoutSnapshot, node: LayoutNode) => boolean;
100
+ /**
101
+ * Whether one side of an element draws a border.
102
+ * @param node the element.
103
+ * @param side the side asked about.
104
+ * @returns true when the side has width, a drawn style, and a visible colour.
105
+ */
106
+ export declare const hasBorderOn: (node: LayoutNode, side: LayoutSide) => boolean;
107
+ /**
108
+ * Whether an element paints anything of its own: a background, a border, or a shadow.
109
+ * @param snapshot the measured page.
110
+ * @param node the element.
111
+ * @returns false for a wrapper a reader cannot see.
112
+ */
113
+ export declare const hasPaintedBox: (snapshot: LayoutSnapshot, node: LayoutNode) => boolean;
114
+ /**
115
+ * Whether an element or one of its ancestors is hidden from assistive technology.
116
+ * @param snapshot the measured page.
117
+ * @param node the element.
118
+ * @returns true inside an `aria-hidden` subtree.
119
+ */
120
+ export declare const isInAriaHidden: (snapshot: LayoutSnapshot, node: LayoutNode) => boolean;
121
+ /**
122
+ * Whether an element or one of its ancestors is clipped away, as a visually hidden element is.
123
+ * @param snapshot the measured page.
124
+ * @param node the element.
125
+ * @returns true inside a clipped subtree.
126
+ */
127
+ export declare const isInClip: (snapshot: LayoutSnapshot, node: LayoutNode) => boolean;
128
+ /**
129
+ * Whether `ancestor` contains `node`.
130
+ * @param snapshot the measured page.
131
+ * @param ancestor the possible ancestor.
132
+ * @param node the possible descendant.
133
+ * @returns true when `ancestor` is a strict ancestor of `node`.
134
+ */
135
+ export declare const isAncestorOf: (snapshot: LayoutSnapshot, ancestor: LayoutNode, node: LayoutNode) => boolean;
136
+ /**
137
+ * Whether a rect has area once rounded.
138
+ * @param rect the rect.
139
+ * @returns false for a rect with no width or no height.
140
+ */
141
+ export declare const hasArea: (rect: LayoutRect) => boolean;
142
+ /**
143
+ * Where an element sits in its document: each ancestor's tag and position among its siblings.
144
+ *
145
+ * The same element measured at two viewports of one page has the same key, which is how an exemption
146
+ * is judged across both rather than at each alone.
147
+ * @param snapshot the measured page.
148
+ * @param node the element.
149
+ * @returns a path such as `body/main:0/div:2`.
150
+ */
151
+ export declare const keyOf: (snapshot: LayoutSnapshot, node: LayoutNode) => string;
152
+ //# sourceMappingURL=layout-snapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-snapshot.d.ts","sourceRoot":"","sources":["../src/layout-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ // The plain shape a browser reports about one rendered page, and the painting facts derived from it.
2
+ //
3
+ // The layout sweep measures inside the page and judges here. Everything a rule needs crosses the
4
+ // boundary as data - whole CSS pixels and computed style strings - so the rules run without a browser
5
+ // and a spec can state a defect as the numbers that make it one.
6
+ /** The only exemption value: an edge shared on purpose, such as a tab joined to its panel. */
7
+ export const ATTACHED_EXEMPTION = 'attached';
8
+ // The canvas a page is drawn on when neither `<html>` nor any ancestor paints a background.
9
+ const CANVAS_BACKGROUND = 'rgb(255, 255, 255)';
10
+ const NO_BORDER_STYLES = new Set(['none', 'hidden']);
11
+ // Computed colours arrive as `rgb(r, g, b)`, `rgba(r, g, b, a)`, or a slash form such as
12
+ // `color(srgb r g b / a)`. Only the alpha matters here: whether the colour draws anything at all.
13
+ const COMMA_ALPHA = /^rgba\([^,]+,[^,]+,[^,]+,\s*([\d.]+)\)$/u;
14
+ const SLASH_ALPHA = /\/\s*([\d.]+%?)\s*\)$/u;
15
+ const PERCENT = '%';
16
+ const alphaText = (color) => COMMA_ALPHA.exec(color)?.[1] ?? SLASH_ALPHA.exec(color)?.[1];
17
+ /**
18
+ * Whether a computed colour draws anything.
19
+ * @param color a computed colour string.
20
+ * @returns false for `transparent` and any colour whose alpha is zero.
21
+ */
22
+ export const isVisibleColor = (color) => {
23
+ const trimmed = color.trim();
24
+ if (trimmed === 'transparent' || trimmed === '') {
25
+ return false;
26
+ }
27
+ const alpha = alphaText(trimmed);
28
+ return alpha === undefined || Number(alpha.replace(PERCENT, '')) > 0;
29
+ };
30
+ /**
31
+ * The background an element sits on: the nearest ancestor that paints one, or the page canvas.
32
+ * @param snapshot the measured page.
33
+ * @param node the element whose surroundings are wanted.
34
+ * @returns a computed colour string.
35
+ */
36
+ export const surroundingBackground = (snapshot, node) => {
37
+ const parent = snapshot.nodes[node.parent];
38
+ if (parent === undefined) {
39
+ return isVisibleColor(snapshot.rootBackground) ? snapshot.rootBackground : CANVAS_BACKGROUND;
40
+ }
41
+ return isVisibleColor(parent.backgroundColor) ? parent.backgroundColor : surroundingBackground(snapshot, parent);
42
+ };
43
+ /**
44
+ * Whether an element paints a background that stands out from what it sits on.
45
+ * @param snapshot the measured page.
46
+ * @param node the element.
47
+ * @returns true for an image or gradient, and for a visible colour unlike the surrounding one.
48
+ */
49
+ export const hasPaintedBackground = (snapshot, node) => node.backgroundImage !== 'none' ||
50
+ (isVisibleColor(node.backgroundColor) && node.backgroundColor !== surroundingBackground(snapshot, node));
51
+ /**
52
+ * Whether one side of an element draws a border.
53
+ * @param node the element.
54
+ * @param side the side asked about.
55
+ * @returns true when the side has width, a drawn style, and a visible colour.
56
+ */
57
+ export const hasBorderOn = (node, side) => {
58
+ const border = node.borders[side];
59
+ return border.width > 0 && !NO_BORDER_STYLES.has(border.style) && isVisibleColor(border.color);
60
+ };
61
+ const SIDES = ['top', 'right', 'bottom', 'left'];
62
+ /**
63
+ * Whether an element paints anything of its own: a background, a border, or a shadow.
64
+ * @param snapshot the measured page.
65
+ * @param node the element.
66
+ * @returns false for a wrapper a reader cannot see.
67
+ */
68
+ export const hasPaintedBox = (snapshot, node) => hasPaintedBackground(snapshot, node) ||
69
+ node.boxShadow !== 'none' ||
70
+ SIDES.some((side) => hasBorderOn(node, side));
71
+ /**
72
+ * Whether an element or one of its ancestors is hidden from assistive technology.
73
+ * @param snapshot the measured page.
74
+ * @param node the element.
75
+ * @returns true inside an `aria-hidden` subtree.
76
+ */
77
+ export const isInAriaHidden = (snapshot, node) => {
78
+ const parent = snapshot.nodes[node.parent];
79
+ return node.isAriaHidden || (parent !== undefined && isInAriaHidden(snapshot, parent));
80
+ };
81
+ /**
82
+ * Whether an element or one of its ancestors is clipped away, as a visually hidden element is.
83
+ * @param snapshot the measured page.
84
+ * @param node the element.
85
+ * @returns true inside a clipped subtree.
86
+ */
87
+ export const isInClip = (snapshot, node) => {
88
+ const parent = snapshot.nodes[node.parent];
89
+ return node.isClipped || (parent !== undefined && isInClip(snapshot, parent));
90
+ };
91
+ /**
92
+ * Whether `ancestor` contains `node`.
93
+ * @param snapshot the measured page.
94
+ * @param ancestor the possible ancestor.
95
+ * @param node the possible descendant.
96
+ * @returns true when `ancestor` is a strict ancestor of `node`.
97
+ */
98
+ export const isAncestorOf = (snapshot, ancestor, node) => {
99
+ const parent = snapshot.nodes[node.parent];
100
+ return parent !== undefined && (parent === ancestor || isAncestorOf(snapshot, ancestor, parent));
101
+ };
102
+ /**
103
+ * Whether a rect has area once rounded.
104
+ * @param rect the rect.
105
+ * @returns false for a rect with no width or no height.
106
+ */
107
+ export const hasArea = (rect) => rect.right > rect.left && rect.bottom > rect.top;
108
+ /**
109
+ * Where an element sits in its document: each ancestor's tag and position among its siblings.
110
+ *
111
+ * The same element measured at two viewports of one page has the same key, which is how an exemption
112
+ * is judged across both rather than at each alone.
113
+ * @param snapshot the measured page.
114
+ * @param node the element.
115
+ * @returns a path such as `body/main:0/div:2`.
116
+ */
117
+ export const keyOf = (snapshot, node) => {
118
+ const parent = snapshot.nodes[node.parent];
119
+ if (parent === undefined) {
120
+ return node.tag;
121
+ }
122
+ const position = snapshot.nodes
123
+ .filter((sibling) => sibling.parent === parent.index)
124
+ .indexOf(node);
125
+ return `${keyOf(snapshot, parent)}/${node.tag}:${String(position)}`;
126
+ };
127
+ //# sourceMappingURL=layout-snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-snapshot.js","sourceRoot":"","sources":["../src/layout-snapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type LayoutNode, type LayoutSnapshot } from './layout-snapshot.js';
2
+ /**
3
+ * How far two text rects may intersect, in CSS pixels, before they overlap. Glyph boxes of adjacent
4
+ * lines share a pixel row after rounding, which is a rounding artefact rather than a collision.
5
+ */
6
+ export declare const TEXT_OVERLAP_TOLERANCE: number;
7
+ /** Two elements whose own text overlaps. */
8
+ export interface TextFinding {
9
+ readonly first: LayoutNode;
10
+ readonly second: LayoutNode;
11
+ }
12
+ /**
13
+ * Every pair of unrelated elements whose own text overlaps.
14
+ * @param snapshot the measured page.
15
+ * @returns one finding per pair, in document order.
16
+ */
17
+ export declare const findOverlappingText: (snapshot: LayoutSnapshot) => readonly TextFinding[];
18
+ /** An element whose own box cuts off part of its text. */
19
+ export interface ClipFinding {
20
+ readonly node: LayoutNode;
21
+ /** True when the element declares truncation but names its full text nowhere a reader can reach. */
22
+ readonly isUnnamedTruncation: boolean;
23
+ }
24
+ /**
25
+ * Every element whose own text its box cuts off.
26
+ *
27
+ * Truncation declared with an ellipsis or a line clamp is intentional when the full text is in the
28
+ * element's `title` or `aria-label`; declared without either, it is reported as unnamed.
29
+ * @param snapshot the measured page.
30
+ * @returns one finding per clipping element.
31
+ */
32
+ export declare const findClippedText: (snapshot: LayoutSnapshot) => readonly ClipFinding[];
33
+ /**
34
+ * The outermost elements that make the page wider than its viewport.
35
+ *
36
+ * An element is reported when it reaches past the viewport and its parent does not, so a wide table is
37
+ * named once rather than with every cell inside it. A fixed element is ignored: it never widens a page.
38
+ * @param snapshot the measured page.
39
+ * @returns the culprits, or an empty list when the page fits or no element can be blamed.
40
+ */
41
+ export declare const findOverflowingElements: (snapshot: LayoutSnapshot) => readonly LayoutNode[];
42
+ //# sourceMappingURL=layout-text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-text.d.ts","sourceRoot":"","sources":["../src/layout-text.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,UAAU,EAEf,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;AAE7B;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAU,CAAA;AAiD/C,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC5B;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,UAAU,cAAc,KAAG,SAAS,WAAW,EAclF,CAAA;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,oGAAoG;IACpG,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;CACtC;AAiBD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,UAAU,cAAc,KAAG,SAAS,WAAW,EAazE,CAAA;AAgBN;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAAI,UAAU,cAAc,KAAG,SAAS,UAAU,EASlF,CAAA"}
@@ -0,0 +1,97 @@
1
+ // Text that overlaps other text, text cut off by its own box, and a page wider than its viewport.
2
+ import { hasArea, isAncestorOf, isInAriaHidden, isInClip, } from './layout-snapshot.js';
3
+ /**
4
+ * How far two text rects may intersect, in CSS pixels, before they overlap. Glyph boxes of adjacent
5
+ * lines share a pixel row after rounding, which is a rounding artefact rather than a collision.
6
+ */
7
+ export const TEXT_OVERLAP_TOLERANCE = 1;
8
+ const HIDDEN_VISIBILITY = new Set(['hidden', 'collapse']);
9
+ // Form controls keep their value in a text node or render it themselves; neither is page text a
10
+ // reader sees laid out by the page.
11
+ const CONTROL_TAGS = new Set(['textarea', 'select', 'option']);
12
+ const CLIPPING_OVERFLOW = new Set(['hidden', 'clip']);
13
+ // A visually hidden element draws a 1px box and clips its text away on purpose.
14
+ const HIDDEN_BOX_LIMIT = 1;
15
+ const isReadableText = (snapshot, node) => node.textRects.some((rect) => hasArea(rect)) &&
16
+ !CONTROL_TAGS.has(node.tag) &&
17
+ !HIDDEN_VISIBILITY.has(node.visibility) &&
18
+ !isInAriaHidden(snapshot, node) &&
19
+ !isInClip(snapshot, node);
20
+ // A text rect spans the font's whole content area, its ascent and descent. A line box is `line-height`
21
+ // tall and centred on that area, so under a tight line height the content area overhangs it: two lines
22
+ // stacked with `line-height: 1` intersect as content areas while their glyphs never meet. The line box
23
+ // is what layout places, so it is what is compared. A line height of 0 is `normal`, which never
24
+ // shrinks the area.
25
+ // The leading is split evenly between the space above the content area and the space below it.
26
+ const LEADING_SIDES = 2;
27
+ const lineBoxOf = (rect, lineHeight) => {
28
+ const height = rect.bottom - rect.top;
29
+ if (lineHeight <= 0 || lineHeight >= height) {
30
+ return rect;
31
+ }
32
+ const inset = (height - lineHeight) / LEADING_SIDES;
33
+ return { ...rect, top: Math.round(rect.top + inset), bottom: Math.round(rect.bottom - inset) };
34
+ };
35
+ const lineBoxesOf = (node) => node.textRects.map((rect) => lineBoxOf(rect, node.lineHeight));
36
+ const isIntersecting = (first, second) => Math.min(first.right, second.right) - Math.max(first.left, second.left) > TEXT_OVERLAP_TOLERANCE &&
37
+ Math.min(first.bottom, second.bottom) - Math.max(first.top, second.top) > TEXT_OVERLAP_TOLERANCE;
38
+ const hasCollidingText = (first, second) => lineBoxesOf(first).some((left) => lineBoxesOf(second).some((right) => isIntersecting(left, right)));
39
+ /**
40
+ * Every pair of unrelated elements whose own text overlaps.
41
+ * @param snapshot the measured page.
42
+ * @returns one finding per pair, in document order.
43
+ */
44
+ export const findOverlappingText = (snapshot) => {
45
+ const readable = snapshot.nodes.filter((node) => isReadableText(snapshot, node));
46
+ return readable.flatMap((first, index) => readable
47
+ .slice(index + 1)
48
+ .filter((second) => !(isAncestorOf(snapshot, first, second) || isAncestorOf(snapshot, second, first)) &&
49
+ hasCollidingText(first, second))
50
+ .map((second) => ({ first, second })));
51
+ };
52
+ const hasHiddenOverflowX = (node) => CLIPPING_OVERFLOW.has(node.overflowX) && node.scrollWidth > node.clientWidth;
53
+ const hasHiddenOverflowY = (node) => CLIPPING_OVERFLOW.has(node.overflowY) && node.scrollHeight > node.clientHeight;
54
+ const isVisuallyHiddenBox = (node) => node.clientWidth <= HIDDEN_BOX_LIMIT || node.clientHeight <= HIDDEN_BOX_LIMIT;
55
+ const declaresTruncation = (node) => node.textOverflow === 'ellipsis' || (node.lineClamp !== 'none' && node.lineClamp !== '');
56
+ const hasFullTextName = (node) => node.text.length > 0 && [node.title, node.ariaLabel].some((name) => name.includes(node.text));
57
+ /**
58
+ * Every element whose own text its box cuts off.
59
+ *
60
+ * Truncation declared with an ellipsis or a line clamp is intentional when the full text is in the
61
+ * element's `title` or `aria-label`; declared without either, it is reported as unnamed.
62
+ * @param snapshot the measured page.
63
+ * @returns one finding per clipping element.
64
+ */
65
+ export const findClippedText = (snapshot) => snapshot.nodes
66
+ .filter((node) => isReadableText(snapshot, node) &&
67
+ !isVisuallyHiddenBox(node) &&
68
+ (hasHiddenOverflowX(node) || hasHiddenOverflowY(node)))
69
+ .flatMap((node) => {
70
+ if (!declaresTruncation(node)) {
71
+ return [{ node, isUnnamedTruncation: false }];
72
+ }
73
+ return hasFullTextName(node) ? [] : [{ node, isUnnamedTruncation: true }];
74
+ });
75
+ const rightEdge = (node) => Math.max(...node.rects.filter((rect) => hasArea(rect)).map((rect) => rect.right));
76
+ const isWiderThan = (node, width) => node.rects.some((rect) => hasArea(rect)) && rightEdge(node) > width;
77
+ // A scroll container keeps what overflows it inside itself, so nothing beneath it widens the page.
78
+ const isContained = (snapshot, node) => {
79
+ const parent = snapshot.nodes[node.parent];
80
+ return parent !== undefined && (parent.overflowX !== 'visible' || isContained(snapshot, parent));
81
+ };
82
+ /**
83
+ * The outermost elements that make the page wider than its viewport.
84
+ *
85
+ * An element is reported when it reaches past the viewport and its parent does not, so a wide table is
86
+ * named once rather than with every cell inside it. A fixed element is ignored: it never widens a page.
87
+ * @param snapshot the measured page.
88
+ * @returns the culprits, or an empty list when the page fits or no element can be blamed.
89
+ */
90
+ export const findOverflowingElements = (snapshot) => snapshot.nodes.filter((node) => {
91
+ const parent = snapshot.nodes[node.parent];
92
+ return (node.position !== 'fixed' &&
93
+ isWiderThan(node, snapshot.viewportWidth) &&
94
+ !isContained(snapshot, node) &&
95
+ (parent === undefined || !isWiderThan(parent, snapshot.viewportWidth)));
96
+ });
97
+ //# sourceMappingURL=layout-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-text.js","sourceRoot":"","sources":["../src/layout-text.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"license-allowlist.d.ts","sourceRoot":"","sources":["../src/license-allowlist.ts"],"names":[],"mappings":"AAsKA;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,OAUrD,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAGD,eAAO,MAAM,qBAAqB,GAChC,UAAU,SAAS,eAAe,EAAE,KACnC,SAAS,eAAe,EACmE,CAAA"}
1
+ {"version":3,"file":"license-allowlist.d.ts","sourceRoot":"","sources":["../src/license-allowlist.ts"],"names":[],"mappings":"AAmKA;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,YAAY,MAAM,KAAG,OAQrD,CAAA;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAGD,eAAO,MAAM,qBAAqB,GAAI,UAAU,SAAS,eAAe,EAAE,KAAG,SAAS,eAAe,EACP,CAAA"}
@@ -147,9 +147,7 @@ export const isLicenseAllowed = (expression) => {
147
147
  return alternatives.some((part) => isLicenseAllowed(part));
148
148
  }
149
149
  const conjuncts = splitOutside(clean, AND);
150
- return conjuncts.length > 1
151
- ? conjuncts.every((part) => isLicenseAllowed(part))
152
- : isAllowedId(clean);
150
+ return conjuncts.length > 1 ? conjuncts.every((part) => isLicenseAllowed(part)) : isAllowedId(clean);
153
151
  };
154
152
  // Return the packages whose license is not permitted by policy; an empty array means a clean tree.
155
153
  export const findLicenseViolations = (packages) => packages.filter((package_) => !isLicenseAllowed(package_.license));
@@ -1 +1 @@
1
- {"version":3,"file":"license-allowlist.js","sourceRoot":"","sources":["../src/license-allowlist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"license-allowlist.js","sourceRoot":"","sources":["../src/license-allowlist.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"network-policy.d.ts","sourceRoot":"","sources":["../src/network-policy.ts"],"names":[],"mappings":"AAGA,gGAAgG;AAChG,eAAO,MAAM,YAAY,EAAE,MAAmE,CAAA;AAE9F,wGAAwG;AACxG,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;AAEnE,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;IACxB,sGAAsG;IACtG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,6FAA6F;AAC7F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,2GAA2G;AAC3G,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAe7C,CAAA;AA6CD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GACzB,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,uBAAuB,EAAE,GAAG,SAAS,CAAC,CAAC,KACnF,WAAW,CAAC,MAAM,CASlB,CAAA;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,GAAG,SAAS,EACxB,OAAO,WAAW,CAAC,MAAM,CAAC,KACzB,OAMF,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SAMnD,CAAA;AAuBD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAAI,eAAe,SAAS,OAAO,EAAE,KAAG,cAcxE,CAAA;AAUD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAC5B,SAAS,cAAc,EACvB,OAAO,WAAW,CAAC,MAAM,CAAC,KACzB,MAAM,GAAG,SAKX,CAAA"}
1
+ {"version":3,"file":"network-policy.d.ts","sourceRoot":"","sources":["../src/network-policy.ts"],"names":[],"mappings":"AAGA,gGAAgG;AAChG,eAAO,MAAM,YAAY,EAAE,MAAmE,CAAA;AAE9F,wGAAwG;AACxG,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAA;AAEnE,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAA;IACxB,sGAAsG;IACtG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,6FAA6F;AAC7F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,2GAA2G;AAC3G,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAe7C,CAAA;AAmCD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,GACzB,YAAY,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,uBAAuB,EAAE,GAAG,SAAS,CAAC,CAAC,KACnF,WAAW,CAAC,MAAM,CAOlB,CAAA;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,MAAM,GAAG,SAAS,EAAE,OAAO,WAAW,CAAC,MAAM,CAAC,KAAG,OAMzF,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,MAAM,KAAG,MAAM,GAAG,SAMnD,CAAA;AAuBD;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAAI,eAAe,SAAS,OAAO,EAAE,KAAG,cAcxE,CAAA;AASD;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAS,cAAc,EAAE,OAAO,WAAW,CAAC,MAAM,CAAC,KAAG,MAAM,GAAG,SAKhG,CAAA"}