@ethlete/cli 3.0.0-next.27 → 3.0.0-next.28

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 (582) hide show
  1. package/CHANGELOG.md +153 -0
  2. package/build-info.json +1 -1
  3. package/design/arrow-anchor.ts +55 -0
  4. package/design/define-call.ts +3 -0
  5. package/design/define-part.ts +28 -1
  6. package/design/web/frame.ts +28 -0
  7. package/package.json +1 -1
  8. package/src/lib/api/compose.js +3 -2
  9. package/src/lib/api/compose.js.map +1 -1
  10. package/src/lib/api/git.js +2 -1
  11. package/src/lib/api/git.js.map +1 -1
  12. package/src/lib/api/setup.js +2 -2
  13. package/src/lib/api/setup.js.map +1 -1
  14. package/src/lib/design/asset-shot.js +2 -2
  15. package/src/lib/design/asset-shot.js.map +1 -1
  16. package/src/lib/design/blank-png.d.ts +2 -0
  17. package/src/lib/design/blank-png.js +28 -0
  18. package/src/lib/design/blank-png.js.map +1 -0
  19. package/src/lib/design/cache-entry.d.ts +8 -0
  20. package/src/lib/design/cache-entry.js +30 -0
  21. package/src/lib/design/cache-entry.js.map +1 -0
  22. package/src/lib/design/calls-tsconfig.js +20 -13
  23. package/src/lib/design/calls-tsconfig.js.map +1 -1
  24. package/src/lib/design/calls.js +3 -3
  25. package/src/lib/design/calls.js.map +1 -1
  26. package/src/lib/design/changed-parts.d.ts +1 -1
  27. package/src/lib/design/check.d.ts +2 -0
  28. package/src/lib/design/check.js +91 -24
  29. package/src/lib/design/check.js.map +1 -1
  30. package/src/lib/design/code-hash.d.ts +30 -0
  31. package/src/lib/design/code-hash.js +118 -0
  32. package/src/lib/design/code-hash.js.map +1 -0
  33. package/src/lib/design/commit-hunks.d.ts +2 -2
  34. package/src/lib/design/commit-hunks.js +2 -2
  35. package/src/lib/design/design-command.js +131 -36
  36. package/src/lib/design/design-command.js.map +1 -1
  37. package/src/lib/design/{paths.d.ts → design-config.d.ts} +6 -28
  38. package/src/lib/design/design-config.js +35 -0
  39. package/src/lib/design/design-config.js.map +1 -0
  40. package/src/lib/design/design-lint.d.ts +68 -0
  41. package/src/lib/design/design-lint.js +183 -0
  42. package/src/lib/design/design-lint.js.map +1 -0
  43. package/src/lib/design/draw-ledger.d.ts +6 -0
  44. package/src/lib/design/draw-ledger.js +10 -0
  45. package/src/lib/design/draw-ledger.js.map +1 -1
  46. package/src/lib/design/force-interactions.d.ts +2 -0
  47. package/src/lib/design/force-interactions.js +4 -2
  48. package/src/lib/design/force-interactions.js.map +1 -1
  49. package/src/lib/design/generated-stylesheets.d.ts +1 -1
  50. package/src/lib/design/generated-stylesheets.js +2 -2
  51. package/src/lib/design/generated-stylesheets.js.map +1 -1
  52. package/src/lib/design/git-top.d.ts +5 -0
  53. package/src/lib/design/git-top.js +16 -0
  54. package/src/lib/design/git-top.js.map +1 -0
  55. package/src/lib/design/hooks-problem.d.ts +2 -0
  56. package/src/lib/design/hooks-problem.js +23 -0
  57. package/src/lib/design/hooks-problem.js.map +1 -0
  58. package/src/lib/design/index.d.ts +4 -1
  59. package/src/lib/design/index.js +4 -1
  60. package/src/lib/design/index.js.map +1 -1
  61. package/src/lib/design/is-running.d.ts +1 -0
  62. package/src/lib/design/is-running.js +14 -0
  63. package/src/lib/design/is-running.js.map +1 -0
  64. package/src/lib/design/legacy.js +3 -3
  65. package/src/lib/design/legacy.js.map +1 -1
  66. package/src/lib/design/mcp-command.js +5 -12
  67. package/src/lib/design/mcp-command.js.map +1 -1
  68. package/src/lib/design/merge-compare.js +3 -3
  69. package/src/lib/design/merge-compare.js.map +1 -1
  70. package/src/lib/design/motion-command.js +3 -3
  71. package/src/lib/design/motion-command.js.map +1 -1
  72. package/src/lib/design/new-call.js +3 -3
  73. package/src/lib/design/new-call.js.map +1 -1
  74. package/src/lib/design/old-shot-folders.d.ts +2 -0
  75. package/src/lib/design/old-shot-folders.js +26 -0
  76. package/src/lib/design/old-shot-folders.js.map +1 -0
  77. package/src/lib/design/package-root.d.ts +21 -0
  78. package/src/lib/design/package-root.js +79 -0
  79. package/src/lib/design/package-root.js.map +1 -0
  80. package/src/lib/design/parent-watch.d.ts +7 -0
  81. package/src/lib/design/parent-watch.js +23 -0
  82. package/src/lib/design/parent-watch.js.map +1 -0
  83. package/src/lib/design/part-marks.js +2 -2
  84. package/src/lib/design/part-marks.js.map +1 -1
  85. package/src/lib/design/phase-timing.d.ts +5 -0
  86. package/src/lib/design/phase-timing.js +27 -0
  87. package/src/lib/design/phase-timing.js.map +1 -0
  88. package/src/lib/design/physical-cores.d.ts +12 -0
  89. package/src/lib/design/physical-cores.js +43 -0
  90. package/src/lib/design/physical-cores.js.map +1 -0
  91. package/src/lib/design/product-command.js +4 -4
  92. package/src/lib/design/product-command.js.map +1 -1
  93. package/src/lib/design/push-status.d.ts +30 -0
  94. package/src/lib/design/push-status.js +122 -0
  95. package/src/lib/design/push-status.js.map +1 -0
  96. package/src/lib/design/ready-shots.d.ts +18 -35
  97. package/src/lib/design/ready-shots.js +46 -111
  98. package/src/lib/design/ready-shots.js.map +1 -1
  99. package/src/lib/design/render-packages.d.ts +3 -1
  100. package/src/lib/design/render-packages.js +6 -2
  101. package/src/lib/design/render-packages.js.map +1 -1
  102. package/src/lib/design/render-worker.js +23 -3
  103. package/src/lib/design/render-worker.js.map +1 -1
  104. package/src/lib/design/render.d.ts +24 -3
  105. package/src/lib/design/render.js +23 -9
  106. package/src/lib/design/render.js.map +1 -1
  107. package/src/lib/design/resident/client.d.ts +52 -0
  108. package/src/lib/design/resident/client.js +263 -0
  109. package/src/lib/design/resident/client.js.map +1 -0
  110. package/src/lib/design/resident/discovery.d.ts +21 -0
  111. package/src/lib/design/resident/discovery.js +63 -0
  112. package/src/lib/design/resident/discovery.js.map +1 -0
  113. package/src/lib/design/resident/resident-process.d.ts +19 -0
  114. package/src/lib/design/resident/resident-process.js +189 -0
  115. package/src/lib/design/resident/resident-process.js.map +1 -0
  116. package/src/lib/design/resident/server.d.ts +52 -0
  117. package/src/lib/design/resident/server.js +212 -0
  118. package/src/lib/design/resident/server.js.map +1 -0
  119. package/src/lib/design/run-abort.d.ts +9 -0
  120. package/src/lib/design/run-abort.js +45 -0
  121. package/src/lib/design/run-abort.js.map +1 -0
  122. package/src/lib/design/run-deadline.d.ts +19 -0
  123. package/src/lib/design/run-deadline.js +104 -0
  124. package/src/lib/design/run-deadline.js.map +1 -0
  125. package/src/lib/design/run-yield.d.ts +8 -0
  126. package/src/lib/design/run-yield.js +43 -0
  127. package/src/lib/design/run-yield.js.map +1 -0
  128. package/src/lib/design/serve-state.d.ts +15 -0
  129. package/src/lib/design/serve-state.js +56 -0
  130. package/src/lib/design/serve-state.js.map +1 -0
  131. package/src/lib/design/serve.d.ts +20 -2
  132. package/src/lib/design/serve.js +147 -43
  133. package/src/lib/design/serve.js.map +1 -1
  134. package/src/lib/design/server-identity.d.ts +5 -1
  135. package/src/lib/design/server-identity.js +4 -1
  136. package/src/lib/design/server-identity.js.map +1 -1
  137. package/src/lib/design/shot-board.d.ts +26 -0
  138. package/src/lib/design/shot-board.js +80 -0
  139. package/src/lib/design/shot-board.js.map +1 -0
  140. package/src/lib/design/shot-command.d.ts +1 -1
  141. package/src/lib/design/shot-command.js +12 -5
  142. package/src/lib/design/shot-command.js.map +1 -1
  143. package/src/lib/design/shot-store.d.ts +29 -3
  144. package/src/lib/design/shot-store.js +206 -36
  145. package/src/lib/design/shot-store.js.map +1 -1
  146. package/src/lib/design/shot.d.ts +12 -4
  147. package/src/lib/design/shot.js +98 -14
  148. package/src/lib/design/shot.js.map +1 -1
  149. package/src/lib/design/sketch-at.js +2 -1
  150. package/src/lib/design/sketch-at.js.map +1 -1
  151. package/src/lib/design/sketch-command.d.ts +13 -0
  152. package/src/lib/design/sketch-command.js +346 -73
  153. package/src/lib/design/sketch-command.js.map +1 -1
  154. package/src/lib/design/ssr-shims.d.ts +1 -0
  155. package/src/lib/design/ssr-shims.js +3 -3
  156. package/src/lib/design/ssr-shims.js.map +1 -1
  157. package/src/lib/design/stamp.d.ts +5 -0
  158. package/src/lib/design/stamp.js +6 -5
  159. package/src/lib/design/stamp.js.map +1 -1
  160. package/src/lib/design/status.d.ts +1 -1
  161. package/src/lib/design/status.js +15 -4
  162. package/src/lib/design/status.js.map +1 -1
  163. package/src/lib/design/studio-api.d.ts +7 -15
  164. package/src/lib/design/studio-api.js +39 -140
  165. package/src/lib/design/studio-api.js.map +1 -1
  166. package/src/lib/design/system/accepted-pictures.d.ts +15 -29
  167. package/src/lib/design/system/accepted-pictures.js +156 -134
  168. package/src/lib/design/system/accepted-pictures.js.map +1 -1
  169. package/src/lib/design/system/action-cache.d.ts +45 -0
  170. package/src/lib/design/system/action-cache.js +72 -0
  171. package/src/lib/design/system/action-cache.js.map +1 -0
  172. package/src/lib/design/system/action-lost.d.ts +8 -6
  173. package/src/lib/design/system/action-lost.js +13 -17
  174. package/src/lib/design/system/action-lost.js.map +1 -1
  175. package/src/lib/design/system/action-press.d.ts +7 -1
  176. package/src/lib/design/system/action-press.js +16 -4
  177. package/src/lib/design/system/action-press.js.map +1 -1
  178. package/src/lib/design/system/actions-command.d.ts +12 -5
  179. package/src/lib/design/system/actions-command.js +187 -66
  180. package/src/lib/design/system/actions-command.js.map +1 -1
  181. package/src/lib/design/system/actions.d.ts +27 -4
  182. package/src/lib/design/system/actions.js +59 -21
  183. package/src/lib/design/system/actions.js.map +1 -1
  184. package/src/lib/design/system/anti-alias.d.ts +2 -0
  185. package/src/lib/design/system/anti-alias.js +11 -0
  186. package/src/lib/design/system/anti-alias.js.map +1 -0
  187. package/src/lib/design/system/app-files.js +19 -3
  188. package/src/lib/design/system/app-files.js.map +1 -1
  189. package/src/lib/design/system/arrow-anchor.d.ts +9 -0
  190. package/src/lib/design/system/arrow-anchor.js +40 -0
  191. package/src/lib/design/system/arrow-anchor.js.map +1 -0
  192. package/src/lib/design/system/base-issues.d.ts +28 -0
  193. package/src/lib/design/system/base-issues.js +80 -0
  194. package/src/lib/design/system/base-issues.js.map +1 -0
  195. package/src/lib/design/system/base.d.ts +1 -1
  196. package/src/lib/design/system/base.js +2 -2
  197. package/src/lib/design/system/base.js.map +1 -1
  198. package/src/lib/design/system/baseline-history.d.ts +13 -0
  199. package/src/lib/design/system/baseline-history.js +40 -0
  200. package/src/lib/design/system/baseline-history.js.map +1 -0
  201. package/src/lib/design/system/bespoke-controls.d.ts +4 -1
  202. package/src/lib/design/system/bespoke-controls.js +72 -70
  203. package/src/lib/design/system/bespoke-controls.js.map +1 -1
  204. package/src/lib/design/system/build-ready-contract.d.ts +7 -1
  205. package/src/lib/design/system/build-ready-contract.js +7 -1
  206. package/src/lib/design/system/build-ready-contract.js.map +1 -1
  207. package/src/lib/design/system/build-running.d.ts +13 -0
  208. package/src/lib/design/system/build-running.js +48 -0
  209. package/src/lib/design/system/build-running.js.map +1 -0
  210. package/src/lib/design/system/check-record.d.ts +18 -0
  211. package/src/lib/design/system/check-record.js +47 -0
  212. package/src/lib/design/system/check-record.js.map +1 -0
  213. package/src/lib/design/system/check-rules.d.ts +1 -1
  214. package/src/lib/design/system/check-rules.js +19 -1
  215. package/src/lib/design/system/check-rules.js.map +1 -1
  216. package/src/lib/design/system/check-system.d.ts +25 -4
  217. package/src/lib/design/system/check-system.js +289 -121
  218. package/src/lib/design/system/check-system.js.map +1 -1
  219. package/src/lib/design/system/comments/inbox.d.ts +1 -1
  220. package/src/lib/design/system/compare-cache.d.ts +20 -0
  221. package/src/lib/design/system/compare-cache.js +92 -0
  222. package/src/lib/design/system/compare-cache.js.map +1 -0
  223. package/src/lib/design/system/compare-command.d.ts +82 -51
  224. package/src/lib/design/system/compare-command.js +362 -340
  225. package/src/lib/design/system/compare-command.js.map +1 -1
  226. package/src/lib/design/system/complete.d.ts +31 -1
  227. package/src/lib/design/system/complete.js +141 -27
  228. package/src/lib/design/system/complete.js.map +1 -1
  229. package/src/lib/design/system/decision-refs.d.ts +5 -0
  230. package/src/lib/design/system/decision-refs.js +21 -0
  231. package/src/lib/design/system/decision-refs.js.map +1 -0
  232. package/src/lib/design/system/design-hash.d.ts +22 -1
  233. package/src/lib/design/system/design-hash.js +63 -4
  234. package/src/lib/design/system/design-hash.js.map +1 -1
  235. package/src/lib/design/system/dom-command.d.ts +1 -1
  236. package/src/lib/design/system/dom-command.js +8 -5
  237. package/src/lib/design/system/dom-command.js.map +1 -1
  238. package/src/lib/design/system/drawn-open-points.d.ts +1 -1
  239. package/src/lib/design/system/dropped-props.d.ts +19 -5
  240. package/src/lib/design/system/dropped-props.js +133 -21
  241. package/src/lib/design/system/dropped-props.js.map +1 -1
  242. package/src/lib/design/system/grid-report.d.ts +5 -0
  243. package/src/lib/design/system/grid-report.js +78 -0
  244. package/src/lib/design/system/grid-report.js.map +1 -0
  245. package/src/lib/design/system/harness-build-cache.d.ts +17 -3
  246. package/src/lib/design/system/harness-build-cache.js +23 -10
  247. package/src/lib/design/system/harness-build-cache.js.map +1 -1
  248. package/src/lib/design/system/harness-inputs.d.ts +17 -0
  249. package/src/lib/design/system/harness-inputs.js +160 -0
  250. package/src/lib/design/system/harness-inputs.js.map +1 -0
  251. package/src/lib/design/system/harness-map.d.ts +1 -1
  252. package/src/lib/design/system/harness-server.d.ts +12 -1
  253. package/src/lib/design/system/harness-server.js +29 -19
  254. package/src/lib/design/system/harness-server.js.map +1 -1
  255. package/src/lib/design/system/harness-shot.d.ts +78 -0
  256. package/src/lib/design/system/harness-shot.js +349 -0
  257. package/src/lib/design/system/harness-shot.js.map +1 -0
  258. package/src/lib/design/system/harness-watch.d.ts +79 -0
  259. package/src/lib/design/system/harness-watch.js +334 -0
  260. package/src/lib/design/system/harness-watch.js.map +1 -0
  261. package/src/lib/design/system/implementation-baseline.d.ts +20 -0
  262. package/src/lib/design/system/implementation-baseline.js +44 -0
  263. package/src/lib/design/system/implementation-baseline.js.map +1 -0
  264. package/src/lib/design/system/leftover-gate-files.d.ts +2 -0
  265. package/src/lib/design/system/leftover-gate-files.js +15 -0
  266. package/src/lib/design/system/leftover-gate-files.js.map +1 -0
  267. package/src/lib/design/system/lib-build-lock.d.ts +18 -0
  268. package/src/lib/design/system/lib-build-lock.js +111 -0
  269. package/src/lib/design/system/lib-build-lock.js.map +1 -0
  270. package/src/lib/design/system/link-free.d.ts +12 -0
  271. package/src/lib/design/system/link-free.js +125 -0
  272. package/src/lib/design/system/link-free.js.map +1 -0
  273. package/src/lib/design/system/list-system.d.ts +4 -8
  274. package/src/lib/design/system/list-system.js +8 -78
  275. package/src/lib/design/system/list-system.js.map +1 -1
  276. package/src/lib/design/system/live-actions.d.ts +1 -1
  277. package/src/lib/design/system/live-actions.js +17 -8
  278. package/src/lib/design/system/live-actions.js.map +1 -1
  279. package/src/lib/design/system/live-compare.js +1 -1
  280. package/src/lib/design/system/live-compare.js.map +1 -1
  281. package/src/lib/design/system/live-uncovered.d.ts +7 -2
  282. package/src/lib/design/system/live-uncovered.js +44 -9
  283. package/src/lib/design/system/live-uncovered.js.map +1 -1
  284. package/src/lib/design/system/no-verdict.d.ts +13 -0
  285. package/src/lib/design/system/no-verdict.js +17 -0
  286. package/src/lib/design/system/no-verdict.js.map +1 -0
  287. package/src/lib/design/system/off-centre.d.ts +11 -0
  288. package/src/lib/design/system/off-centre.js +74 -0
  289. package/src/lib/design/system/off-centre.js.map +1 -0
  290. package/src/lib/design/system/open-points-cache.d.ts +11 -0
  291. package/src/lib/design/system/open-points-cache.js +27 -0
  292. package/src/lib/design/system/open-points-cache.js.map +1 -0
  293. package/src/lib/design/system/open-points-runner.d.ts +43 -0
  294. package/src/lib/design/system/open-points-runner.js +119 -0
  295. package/src/lib/design/system/open-points-runner.js.map +1 -0
  296. package/src/lib/design/system/open-points-worker.d.ts +1 -0
  297. package/src/lib/design/system/open-points-worker.js +28 -0
  298. package/src/lib/design/system/open-points-worker.js.map +1 -0
  299. package/src/lib/design/system/open-points.js +1 -1
  300. package/src/lib/design/system/open-points.js.map +1 -1
  301. package/src/lib/design/system/part-build-ready.d.ts +13 -7
  302. package/src/lib/design/system/part-build-ready.js +43 -15
  303. package/src/lib/design/system/part-build-ready.js.map +1 -1
  304. package/src/lib/design/system/part-compare.d.ts +18 -2
  305. package/src/lib/design/system/part-compare.js +147 -42
  306. package/src/lib/design/system/part-compare.js.map +1 -1
  307. package/src/lib/design/system/part-picture-cache.d.ts +23 -0
  308. package/src/lib/design/system/part-picture-cache.js +68 -0
  309. package/src/lib/design/system/part-picture-cache.js.map +1 -0
  310. package/src/lib/design/system/part-ready.d.ts +33 -7
  311. package/src/lib/design/system/part-ready.js +55 -17
  312. package/src/lib/design/system/part-ready.js.map +1 -1
  313. package/src/lib/design/system/part-task.d.ts +20 -0
  314. package/src/lib/design/system/part-task.js +53 -7
  315. package/src/lib/design/system/part-task.js.map +1 -1
  316. package/src/lib/design/system/pixel-cache.d.ts +16 -0
  317. package/src/lib/design/system/pixel-cache.js +79 -0
  318. package/src/lib/design/system/pixel-cache.js.map +1 -0
  319. package/src/lib/design/system/pointer-focus.d.ts +10 -2
  320. package/src/lib/design/system/pointer-focus.js +32 -9
  321. package/src/lib/design/system/pointer-focus.js.map +1 -1
  322. package/src/lib/design/system/prettier.js +4 -3
  323. package/src/lib/design/system/prettier.js.map +1 -1
  324. package/src/lib/design/system/problem.d.ts +6 -0
  325. package/src/lib/design/system/product.js +2 -2
  326. package/src/lib/design/system/product.js.map +1 -1
  327. package/src/lib/design/system/ready-command.d.ts +1 -1
  328. package/src/lib/design/system/ready-command.js +24 -4
  329. package/src/lib/design/system/ready-command.js.map +1 -1
  330. package/src/lib/design/system/record-settled.d.ts +24 -0
  331. package/src/lib/design/system/record-settled.js +50 -0
  332. package/src/lib/design/system/record-settled.js.map +1 -0
  333. package/src/lib/design/system/render-check.d.ts +18 -1
  334. package/src/lib/design/system/render-check.js +164 -104
  335. package/src/lib/design/system/render-check.js.map +1 -1
  336. package/src/lib/design/system/render-issue-key.d.ts +9 -0
  337. package/src/lib/design/system/render-issue-key.js +27 -0
  338. package/src/lib/design/system/render-issue-key.js.map +1 -0
  339. package/src/lib/design/system/resolve-product.d.ts +4 -1
  340. package/src/lib/design/system/resolve-product.js +14 -3
  341. package/src/lib/design/system/resolve-product.js.map +1 -1
  342. package/src/lib/design/system/rule-baseline.d.ts +53 -0
  343. package/src/lib/design/system/rule-baseline.js +124 -0
  344. package/src/lib/design/system/rule-baseline.js.map +1 -0
  345. package/src/lib/design/system/rule-skips.d.ts +20 -0
  346. package/src/lib/design/system/rule-skips.js +36 -0
  347. package/src/lib/design/system/rule-skips.js.map +1 -0
  348. package/src/lib/design/system/rules/canonical-class.d.ts +4 -0
  349. package/src/lib/design/system/rules/canonical-class.js +66 -13
  350. package/src/lib/design/system/rules/canonical-class.js.map +1 -1
  351. package/src/lib/design/system/rules/capability-place.d.ts +4 -2
  352. package/src/lib/design/system/rules/capability-place.js +15 -2
  353. package/src/lib/design/system/rules/capability-place.js.map +1 -1
  354. package/src/lib/design/system/rules/command-text.d.ts +7 -0
  355. package/src/lib/design/system/rules/command-text.js +72 -0
  356. package/src/lib/design/system/rules/command-text.js.map +1 -0
  357. package/src/lib/design/system/rules/design-coverage.d.ts +30 -0
  358. package/src/lib/design/system/rules/design-coverage.js +205 -0
  359. package/src/lib/design/system/rules/design-coverage.js.map +1 -0
  360. package/src/lib/design/system/rules/glued-interpolation.js +17 -1
  361. package/src/lib/design/system/rules/glued-interpolation.js.map +1 -1
  362. package/src/lib/design/system/rules/implements-unrendered.d.ts +13 -0
  363. package/src/lib/design/system/rules/implements-unrendered.js +63 -0
  364. package/src/lib/design/system/rules/implements-unrendered.js.map +1 -0
  365. package/src/lib/design/system/rules/motion.js +6 -0
  366. package/src/lib/design/system/rules/motion.js.map +1 -1
  367. package/src/lib/design/system/rules/native-title.js +13 -3
  368. package/src/lib/design/system/rules/native-title.js.map +1 -1
  369. package/src/lib/design/system/rules/option-values.d.ts +1 -1
  370. package/src/lib/design/system/rules/pending-state.d.ts +39 -0
  371. package/src/lib/design/system/rules/pending-state.js +289 -0
  372. package/src/lib/design/system/rules/pending-state.js.map +1 -0
  373. package/src/lib/design/system/rules/sdk-attribute-value.d.ts +10 -0
  374. package/src/lib/design/system/rules/sdk-attribute-value.js +78 -0
  375. package/src/lib/design/system/rules/sdk-attribute-value.js.map +1 -0
  376. package/src/lib/design/system/rules/sdk-private-var.d.ts +9 -0
  377. package/src/lib/design/system/rules/sdk-private-var.js +54 -0
  378. package/src/lib/design/system/rules/sdk-private-var.js.map +1 -0
  379. package/src/lib/design/system/rules/skips.d.ts +4 -0
  380. package/src/lib/design/system/rules/skips.js +27 -0
  381. package/src/lib/design/system/rules/skips.js.map +1 -0
  382. package/src/lib/design/system/rules/stale-replace.js +1 -0
  383. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  384. package/src/lib/design/system/rules/tailwind-classes.d.ts +1 -0
  385. package/src/lib/design/system/rules/tailwind-classes.js +11 -6
  386. package/src/lib/design/system/rules/tailwind-classes.js.map +1 -1
  387. package/src/lib/design/system/rules/token-selectors.js +10 -3
  388. package/src/lib/design/system/rules/token-selectors.js.map +1 -1
  389. package/src/lib/design/system/rules/unbound-input-known.d.ts +2 -0
  390. package/src/lib/design/system/rules/unbound-input-known.js +3 -6
  391. package/src/lib/design/system/rules/unbound-input-known.js.map +1 -1
  392. package/src/lib/design/system/rules/unbound-input.d.ts +2 -0
  393. package/src/lib/design/system/rules/unbound-input.js +12 -6
  394. package/src/lib/design/system/rules/unbound-input.js.map +1 -1
  395. package/src/lib/design/system/rules/undefined-class.js +11 -2
  396. package/src/lib/design/system/rules/undefined-class.js.map +1 -1
  397. package/src/lib/design/system/rules/utility-css.js +13 -1
  398. package/src/lib/design/system/rules/utility-css.js.map +1 -1
  399. package/src/lib/design/system/rules/visible-change.d.ts +1 -2
  400. package/src/lib/design/system/rules/visible-change.js +3 -3
  401. package/src/lib/design/system/rules/visible-change.js.map +1 -1
  402. package/src/lib/design/system/sdk-declarations.d.ts +10 -0
  403. package/src/lib/design/system/sdk-declarations.js +177 -0
  404. package/src/lib/design/system/sdk-declarations.js.map +1 -0
  405. package/src/lib/design/system/sdk-selectors.d.ts +18 -0
  406. package/src/lib/design/system/sdk-selectors.js +131 -0
  407. package/src/lib/design/system/sdk-selectors.js.map +1 -0
  408. package/src/lib/design/system/served-cache.d.ts +99 -0
  409. package/src/lib/design/system/served-cache.js +202 -0
  410. package/src/lib/design/system/served-cache.js.map +1 -0
  411. package/src/lib/design/system/settled-panes.d.ts +8 -3
  412. package/src/lib/design/system/settled-panes.js +10 -9
  413. package/src/lib/design/system/settled-panes.js.map +1 -1
  414. package/src/lib/design/system/sketch/baseline.d.ts +17 -1
  415. package/src/lib/design/system/sketch/baseline.js +48 -7
  416. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  417. package/src/lib/design/system/sketch/check-format.js +3 -9
  418. package/src/lib/design/system/sketch/check-format.js.map +1 -1
  419. package/src/lib/design/system/sketch/clean-copy.d.ts +18 -0
  420. package/src/lib/design/system/sketch/clean-copy.js +104 -0
  421. package/src/lib/design/system/sketch/clean-copy.js.map +1 -0
  422. package/src/lib/design/system/sketch/cli-args.d.ts +1 -1
  423. package/src/lib/design/system/sketch/cli-args.js +2 -2
  424. package/src/lib/design/system/sketch/cli-args.js.map +1 -1
  425. package/src/lib/design/system/sketch/covered-diffs.d.ts +40 -0
  426. package/src/lib/design/system/sketch/covered-diffs.js +106 -0
  427. package/src/lib/design/system/sketch/covered-diffs.js.map +1 -0
  428. package/src/lib/design/system/sketch/edit-sketch.d.ts +14 -6
  429. package/src/lib/design/system/sketch/edit-sketch.js +87 -35
  430. package/src/lib/design/system/sketch/edit-sketch.js.map +1 -1
  431. package/src/lib/design/system/sketch/identical-renders.js +20 -14
  432. package/src/lib/design/system/sketch/identical-renders.js.map +1 -1
  433. package/src/lib/design/system/sketch/merge-commit.d.ts +20 -0
  434. package/src/lib/design/system/sketch/merge-commit.js +72 -0
  435. package/src/lib/design/system/sketch/merge-commit.js.map +1 -0
  436. package/src/lib/design/system/sketch/merge-runner.d.ts +20 -0
  437. package/src/lib/design/system/sketch/merge-runner.js +73 -0
  438. package/src/lib/design/system/sketch/merge-runner.js.map +1 -0
  439. package/src/lib/design/system/sketch/merge-step.d.ts +14 -2
  440. package/src/lib/design/system/sketch/merge-step.js +24 -12
  441. package/src/lib/design/system/sketch/merge-step.js.map +1 -1
  442. package/src/lib/design/system/sketch/merge-worker.d.ts +1 -0
  443. package/src/lib/design/system/sketch/merge-worker.js +14 -0
  444. package/src/lib/design/system/sketch/merge-worker.js.map +1 -0
  445. package/src/lib/design/system/sketch/merge.d.ts +10 -3
  446. package/src/lib/design/system/sketch/merge.js +180 -90
  447. package/src/lib/design/system/sketch/merge.js.map +1 -1
  448. package/src/lib/design/system/sketch/merged-parts.d.ts +0 -29
  449. package/src/lib/design/system/sketch/merged-parts.js +8 -56
  450. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  451. package/src/lib/design/system/sketch/note-language.d.ts +7 -0
  452. package/src/lib/design/system/sketch/note-language.js +83 -0
  453. package/src/lib/design/system/sketch/note-language.js.map +1 -0
  454. package/src/lib/design/system/sketch/part-definition.d.ts +6 -0
  455. package/src/lib/design/system/sketch/part-definition.js +31 -1
  456. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  457. package/src/lib/design/system/sketch/rebase-port.js +47 -2
  458. package/src/lib/design/system/sketch/rebase-port.js.map +1 -1
  459. package/src/lib/design/system/sketch/sketch-check-cache.d.ts +11 -0
  460. package/src/lib/design/system/sketch/sketch-check-cache.js +22 -0
  461. package/src/lib/design/system/sketch/sketch-check-cache.js.map +1 -0
  462. package/src/lib/design/system/sketch/sketch-check-worker.js +6 -1
  463. package/src/lib/design/system/sketch/sketch-check-worker.js.map +1 -1
  464. package/src/lib/design/system/sketch/sketch-checker.d.ts +14 -1
  465. package/src/lib/design/system/sketch/sketch-checker.js +16 -6
  466. package/src/lib/design/system/sketch/sketch-checker.js.map +1 -1
  467. package/src/lib/design/system/sketch/sketch.d.ts +37 -6
  468. package/src/lib/design/system/sketch/sketch.js +101 -13
  469. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  470. package/src/lib/design/system/sketch/stale-base.js +1 -1
  471. package/src/lib/design/system/sketch/stale-base.js.map +1 -1
  472. package/src/lib/design/system/sketch/unchanged-states.d.ts +7 -3
  473. package/src/lib/design/system/sketch/unchanged-states.js +25 -12
  474. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  475. package/src/lib/design/system/sketch/viewed-shots.d.ts +10 -2
  476. package/src/lib/design/system/sketch/viewed-shots.js +15 -22
  477. package/src/lib/design/system/sketch/viewed-shots.js.map +1 -1
  478. package/src/lib/design/system/skip-classes.d.ts +3 -0
  479. package/src/lib/design/system/skip-classes.js +17 -0
  480. package/src/lib/design/system/skip-classes.js.map +1 -0
  481. package/src/lib/design/system/slot-hosts.d.ts +38 -0
  482. package/src/lib/design/system/slot-hosts.js +93 -0
  483. package/src/lib/design/system/slot-hosts.js.map +1 -0
  484. package/src/lib/design/system/slow-checks.d.ts +4 -0
  485. package/src/lib/design/system/slow-checks.js +77 -24
  486. package/src/lib/design/system/slow-checks.js.map +1 -1
  487. package/src/lib/design/system/slow-run.d.ts +15 -5
  488. package/src/lib/design/system/slow-run.js +143 -84
  489. package/src/lib/design/system/slow-run.js.map +1 -1
  490. package/src/lib/design/system/stale-dist.d.ts +37 -1
  491. package/src/lib/design/system/stale-dist.js +58 -8
  492. package/src/lib/design/system/stale-dist.js.map +1 -1
  493. package/src/lib/design/system/stale-parts.d.ts +15 -0
  494. package/src/lib/design/system/stale-parts.js +67 -5
  495. package/src/lib/design/system/stale-parts.js.map +1 -1
  496. package/src/lib/design/system/system-command.js +3 -3
  497. package/src/lib/design/system/system-command.js.map +1 -1
  498. package/src/lib/design/system/system-modules.d.ts +4 -4
  499. package/src/lib/design/system/system-tsconfig.d.ts +9 -2
  500. package/src/lib/design/system/system-tsconfig.js +73 -13
  501. package/src/lib/design/system/system-tsconfig.js.map +1 -1
  502. package/src/lib/design/system/task-command.d.ts +3 -2
  503. package/src/lib/design/system/task-command.js +111 -73
  504. package/src/lib/design/system/task-command.js.map +1 -1
  505. package/src/lib/design/system/touched-parts.d.ts +1 -1
  506. package/src/lib/design/system/touched-parts.js +4 -5
  507. package/src/lib/design/system/touched-parts.js.map +1 -1
  508. package/src/lib/design/system/tracked-reads.d.ts +27 -0
  509. package/src/lib/design/system/tracked-reads.js +100 -0
  510. package/src/lib/design/system/tracked-reads.js.map +1 -0
  511. package/src/lib/design/system/unchanged-rows.d.ts +17 -8
  512. package/src/lib/design/system/unchanged-rows.js +90 -12
  513. package/src/lib/design/system/unchanged-rows.js.map +1 -1
  514. package/src/lib/design/system/uncommitted-decisions.d.ts +0 -2
  515. package/src/lib/design/system/uncommitted-decisions.js +3 -6
  516. package/src/lib/design/system/uncommitted-decisions.js.map +1 -1
  517. package/src/lib/design/system/visible-change-command.d.ts +13 -1
  518. package/src/lib/design/system/visible-change-command.js +10 -8
  519. package/src/lib/design/system/visible-change-command.js.map +1 -1
  520. package/src/lib/design/system/visible-change-parts.d.ts +1 -1
  521. package/src/lib/design/system/write-origin.d.ts +12 -0
  522. package/src/lib/design/system/write-origin.js +18 -0
  523. package/src/lib/design/system/write-origin.js.map +1 -0
  524. package/src/lib/design/system-use.js +4 -4
  525. package/src/lib/design/system-use.js.map +1 -1
  526. package/src/lib/design/thumb.d.ts +19 -3
  527. package/src/lib/design/thumb.js +71 -9
  528. package/src/lib/design/thumb.js.map +1 -1
  529. package/src/lib/design/timings-command.d.ts +22 -0
  530. package/src/lib/design/timings-command.js +175 -0
  531. package/src/lib/design/timings-command.js.map +1 -0
  532. package/src/lib/design/timings.d.ts +117 -0
  533. package/src/lib/design/timings.js +296 -0
  534. package/src/lib/design/timings.js.map +1 -0
  535. package/src/lib/design/typecheck.js +2 -2
  536. package/src/lib/design/typecheck.js.map +1 -1
  537. package/src/lib/design/vite-cache.d.ts +11 -0
  538. package/src/lib/design/vite-cache.js +61 -0
  539. package/src/lib/design/vite-cache.js.map +1 -0
  540. package/src/lib/design/warm-draw.d.ts +33 -0
  541. package/src/lib/design/warm-draw.js +74 -0
  542. package/src/lib/design/warm-draw.js.map +1 -0
  543. package/src/lib/design/warm-pages.d.ts +10 -2
  544. package/src/lib/design/warm-pages.js +6 -2
  545. package/src/lib/design/warm-pages.js.map +1 -1
  546. package/src/lib/design/work-root.d.ts +2 -0
  547. package/src/lib/design/work-root.js +8 -0
  548. package/src/lib/design/work-root.js.map +1 -0
  549. package/src/lib/plain-output.d.ts +27 -0
  550. package/src/lib/plain-output.js +66 -0
  551. package/src/lib/plain-output.js.map +1 -0
  552. package/src/lib/release.js +11 -3
  553. package/src/lib/release.js.map +1 -1
  554. package/src/lib/update/commits.js +2 -2
  555. package/src/lib/update/commits.js.map +1 -1
  556. package/src/lib/update/packages.js +4 -2
  557. package/src/lib/update/packages.js.map +1 -1
  558. package/src/lib/update/scan.js +8 -2
  559. package/src/lib/update/scan.js.map +1 -1
  560. package/src/lib/design/paths.js +0 -138
  561. package/src/lib/design/paths.js.map +0 -1
  562. package/src/lib/design/system/accept-command.d.ts +0 -41
  563. package/src/lib/design/system/accept-command.js +0 -139
  564. package/src/lib/design/system/accept-command.js.map +0 -1
  565. package/src/lib/design/system/go-batch.d.ts +0 -24
  566. package/src/lib/design/system/go-batch.js +0 -110
  567. package/src/lib/design/system/go-batch.js.map +0 -1
  568. package/src/lib/design/system/go-command.d.ts +0 -4
  569. package/src/lib/design/system/go-command.js +0 -64
  570. package/src/lib/design/system/go-command.js.map +0 -1
  571. package/src/lib/design/system/go-guard.d.ts +0 -26
  572. package/src/lib/design/system/go-guard.js +0 -70
  573. package/src/lib/design/system/go-guard.js.map +0 -1
  574. package/src/lib/design/system/go-step.d.ts +0 -13
  575. package/src/lib/design/system/go-step.js +0 -84
  576. package/src/lib/design/system/go-step.js.map +0 -1
  577. package/src/lib/design/system/part-go.d.ts +0 -70
  578. package/src/lib/design/system/part-go.js +0 -94
  579. package/src/lib/design/system/part-go.js.map +0 -1
  580. package/src/lib/design/system/tom-confirm.d.ts +0 -40
  581. package/src/lib/design/system/tom-confirm.js +0 -55
  582. package/src/lib/design/system/tom-confirm.js.map +0 -1
@@ -9,18 +9,22 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.renderIssuesOf = exports.inspectRetryingTimeouts = exports.RENDER_TIMEOUT = exports.uniqueIssuesOf = exports.groupedIssueLinesOf = exports.ownerPartOf = exports.renderIssueLineOf = exports.busyStatesOf = void 0;
12
+ exports.renderIssuesOf = exports.inspectRetryingTimeouts = exports.RENDER_TIMEOUT = exports.RENDER_ISSUES = exports.INSPECTS_AT_ONCE = exports.uniqueIssuesOf = exports.BASELINED_RENDER_RULES = exports.WARNING_RULES = exports.groupedIssueLinesOf = exports.ownerPartOf = exports.renderIssueLineOf = exports.busyStatesOf = void 0;
13
13
  const rxjs_1 = require("rxjs");
14
+ const run_yield_1 = require("../run-yield");
14
15
  const browser_1 = require("../browser");
16
+ const vite_cache_1 = require("../vite-cache");
15
17
  const contrast_check_1 = require("./contrast-check");
16
18
  const complete_1 = require("./complete");
17
19
  const action_undeclared_1 = require("./action-undeclared");
18
20
  const disabled_interaction_1 = require("./disabled-interaction");
21
+ const arrow_anchor_1 = require("./arrow-anchor");
22
+ const off_centre_1 = require("./off-centre");
19
23
  const css_source_1 = require("./css-source");
20
24
  const serve_1 = require("../serve");
21
25
  const shot_1 = require("../shot");
22
26
  const thumb_1 = require("../thumb");
23
- const list_system_1 = require("./list-system");
27
+ const grid_report_1 = require("./grid-report");
24
28
  const sdk_errors_1 = require("./sdk-errors");
25
29
  const resolve_product_1 = require("./resolve-product");
26
30
  const system_modules_1 = require("./system-modules");
@@ -28,9 +32,15 @@ const option_values_1 = require("./rules/option-values");
28
32
  const see_through_1 = require("./see-through");
29
33
  const surface_nesting_1 = require("./surface-nesting");
30
34
  const nested_scroll_1 = require("./nested-scroll");
35
+ const skip_classes_1 = require("./skip-classes");
31
36
  const actions_1 = require("./actions");
37
+ const no_verdict_1 = require("./no-verdict");
32
38
  const reach_1 = require("./reach");
33
39
  const reachable_controls_1 = require("./reachable-controls");
40
+ const compare_cache_1 = require("./compare-cache");
41
+ const render_issue_key_1 = require("./render-issue-key");
42
+ const served_cache_1 = require("./served-cache");
43
+ const code_hash_1 = require("../code-hash");
34
44
  const BUSY_MARK = 'BUSY';
35
45
  /** @internal The states the busy marks of `issues` name, once each. */
36
46
  const busyStatesOf = (issues) => {
@@ -85,17 +95,12 @@ const SINGLE_LINE = 'button, [role="button"], [role="tab"], [role="switch"], [ro
85
95
  * Reads the rule breaks in a drawn frame. A string, not a function: the build would add helpers to a
86
96
  * function that the page does not have.
87
97
  */
88
- const ESCAPABLE = ['CLIPPED', 'WRAP', nested_scroll_1.NESTED_SCROLL_RULE, surface_nesting_1.NESTED_SURFACE_RULE, surface_nesting_1.LOST_SURFACE_RULE];
89
- const WARNING_RULES = new Set(['UNDEFINED-CLASS', 'EMBED-SCALE']);
98
+ const ESCAPABLE = skip_classes_1.ESCAPABLE_RULES;
99
+ /** The render rules that warn instead of failing. A new rule fails, with a rule baseline for its old hits (ADR 0201). */
100
+ exports.WARNING_RULES = new Set(['UNDEFINED-CLASS', 'EMBED-SCALE']);
101
+ /** The render rules whose hits on merged parts the rule baseline of their product lists (ADR 0201). */
102
+ exports.BASELINED_RENDER_RULES = new Set([off_centre_1.OFF_CENTRE_RULE]);
90
103
  const BUSY_SELECTOR = '[aria-busy="true"], [data-loading="true"]';
91
- const PATH_DEPTH = 4;
92
- const tagOf = (name) => { var _a, _b; return (_b = (_a = /^[a-z0-9-]+/u.exec(name)) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : name; };
93
- const frameNeutralPathOf = ({ path, part, framed }) => {
94
- const names = path.split(' > ');
95
- const marked = names.findIndex((name) => name.endsWith(`[data-et-part=${part}]`));
96
- const cut = marked < 0 ? (names.length === PATH_DEPTH ? [0] : []) : framed ? [marked - 1, marked] : [marked, marked + 1];
97
- return names.map((name, index) => (cut.includes(index) ? tagOf(name) : name)).join(' > ');
98
- };
99
104
  // complete.ts and this module sit in an import cycle: read PLAIN_CONTROL_SELECTOR here, a top-level copy can be undefined.
100
105
  const inspectFrame = (options) => `((options) => {
101
106
  const root = document.getElementById('root');
@@ -126,7 +131,7 @@ const inspectFrame = (options) => `((options) => {
126
131
  };
127
132
  const pathOf = (element) => {
128
133
  const names = [];
129
- for (let at = element; at && at !== root && names.length < ${PATH_DEPTH}; at = at.parentElement) names.unshift(nameOf(at));
134
+ for (let at = element; at && at !== root && names.length < ${render_issue_key_1.PATH_DEPTH}; at = at.parentElement) names.unshift(nameOf(at));
130
135
  return names.join(' > ');
131
136
  };
132
137
  const report = (rule, element, detail) => {
@@ -231,13 +236,14 @@ const inspectFrame = (options) => `((options) => {
231
236
  return { width: Math.floor(rect.width), height: Math.floor(rect.height) };
232
237
  };
233
238
  const clipMarginOf = (style, axis) => (style[axis] === 'clip' ? parseFloat((style.overflowClipMargin ?? '').split(' ').pop()) || 0 : 0);
239
+ const drawsByClipping = (element) => element.closest('.et-spinner') !== null;
234
240
  const pans = (element, style) => /^grab/.test(style.cursor) || [...element.children].some((child) => isPanned(getComputedStyle(child)));
235
241
  for (const element of root.querySelectorAll('*')) {
236
242
  const style = getComputedStyle(element);
237
243
  const drawn = drawnSizeOf(element);
238
244
  const cutX = clips(style.overflowX) && drawn.width > element.clientWidth + clipMarginOf(style, 'overflowX');
239
245
  const cutY = clips(style.overflowY) && drawn.height > element.clientHeight + clipMarginOf(style, 'overflowY');
240
- const cutsOnPurpose = style.textOverflow === 'ellipsis' || style.webkitLineClamp !== 'none' || pans(element, style);
246
+ const cutsOnPurpose = style.textOverflow === 'ellipsis' || style.webkitLineClamp !== 'none' || pans(element, style) || drawsByClipping(element);
241
247
  if ((cutX || cutY) && !cutsOnPurpose) report('CLIPPED', element, 'content ' + drawn.width + 'x' + drawn.height + ' in ' + element.clientWidth + 'x' + element.clientHeight);
242
248
  }
243
249
  ${nested_scroll_1.NESTED_SCROLL_STATEMENTS}
@@ -444,6 +450,8 @@ ${surface_nesting_1.SURFACE_STATEMENTS}
444
450
  report('CONTROL-PART-INPUT', element, named + ' is a control without data-et-control, so no control check sees it - mark it with control(markup, name) from @ethlete/components/design/control and declare the name in controls');
445
451
  }
446
452
  ${action_undeclared_1.ACTION_UNDECLARED_STATEMENTS}
453
+ ${arrow_anchor_1.ARROW_ANCHOR_STATEMENTS}
454
+ ${off_centre_1.OFF_CENTRE_STATEMENTS}
447
455
  ${disabled_interaction_1.DISABLED_INTERACTION_STATEMENTS}
448
456
  return found;
449
457
  })(${JSON.stringify(Object.assign(Object.assign({}, options), { escapable: ESCAPABLE, controlInputs: complete_1.PLAIN_CONTROL_SELECTOR, sdkControls: complete_1.SDK_CONTROLS.join(', ') }))})`;
@@ -492,6 +500,11 @@ const widthsOf = (value) => Array.isArray(value)
492
500
  ? value.filter((width) => typeof width === 'number' && Number.isInteger(width) && width > 0)
493
501
  : [];
494
502
  const PART_TIMEOUT_MS = 120000;
503
+ /** @internal How many frames of one part `inspect` draws at once, each on a page of its own. */
504
+ exports.INSPECTS_AT_ONCE = 4;
505
+ /** The cache folder of the render issues of each part, kept with the responses its drawing loaded. */
506
+ exports.RENDER_ISSUES = 'render-issues';
507
+ const RENDER_ISSUES_LIMIT = 64 * 1024 * 1024;
495
508
  const embedControlsOf = (controls) => typeof controls === 'object' && controls !== null
496
509
  ? Object.entries(controls)
497
510
  .filter(([, declared]) => typeof (declared === null || declared === void 0 ? void 0 : declared.part) === 'string')
@@ -512,12 +525,36 @@ const inspectRetryingTimeouts = (options) => __awaiter(void 0, void 0, void 0, f
512
525
  return [...first.filter((issue) => !timedOut.has(timedOutKeyOf(issue))), ...again];
513
526
  });
514
527
  exports.inspectRetryingTimeouts = inspectRetryingTimeouts;
528
+ const inspectedFrameOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
529
+ const { page, base, frame } = options;
530
+ yield page.emulateMedia({ colorScheme: frame.contrast.scheme });
531
+ yield page.setViewportSize(frame.viewport);
532
+ yield (0, thumb_1.openFrame)(page, `${base}/frame.html?${frame.search}`);
533
+ yield (0, thumb_1.awaitSettled)(page);
534
+ const inspected = {
535
+ fixed: frame.fixed,
536
+ fit: frame.fit,
537
+ skips: frame.skips,
538
+ namespaces: frame.namespaces,
539
+ contrast: frame.contrast,
540
+ part: frame.controlInputs ? frame.address.part : null,
541
+ embedControls: frame.embedControls,
542
+ };
543
+ const inFrame = (yield page.evaluate(inspectFrame(inspected)));
544
+ yield page.evaluate((0, shot_1.emptySlotsScriptOf)(frame.address.part));
545
+ const unstyled = (yield page.evaluate(inspectFrame(Object.assign(Object.assign({}, inspected), { sdkStylesOnly: true }))));
546
+ const { product, part, state, sketch } = frame.address;
547
+ return [...inFrame, ...unstyled].map((issue) => (Object.assign(Object.assign({}, issue), { product, part, state, sketch, size: frame.size })));
548
+ });
515
549
  const inspect = (options) => __awaiter(void 0, void 0, void 0, function* () {
516
- var _a, _b, _c, _d;
517
- const { browser, base, frames } = options;
550
+ var _a, _b, _c, _d, _e;
551
+ const { browser, base, frames, cache } = options;
518
552
  const timeoutMs = (_a = options.timeoutMs) !== null && _a !== void 0 ? _a : PART_TIMEOUT_MS;
519
553
  const context = yield browser.newContext();
554
+ let requested = [];
520
555
  yield context.addInitScript(action_undeclared_1.CLICK_LISTENER_INIT_SCRIPT);
556
+ if (cache)
557
+ (0, served_cache_1.recordRequests)(context, () => requested);
521
558
  const issues = [];
522
559
  const groups = new Map();
523
560
  for (const frame of frames) {
@@ -526,43 +563,43 @@ const inspect = (options) => __awaiter(void 0, void 0, void 0, function* () {
526
563
  groups.set(key, [...((_b = groups.get(key)) !== null && _b !== void 0 ? _b : []), frame]);
527
564
  }
528
565
  try {
529
- let page = yield context.newPage();
530
- let sdkErrors = (0, sdk_errors_1.watchSdkErrorLines)(page);
566
+ let lanes = [];
531
567
  let done = 0;
532
568
  for (const group of groups.values()) {
569
+ yield (0, run_yield_1.yieldRun)();
533
570
  const started = Date.now();
534
- const found = [];
535
- const current = page;
536
- const sdkErrorsOf = sdkErrors.drain;
537
- const drawn = (() => __awaiter(void 0, void 0, void 0, function* () {
538
- for (const frame of group) {
539
- yield current.emulateMedia({ colorScheme: frame.contrast.scheme });
540
- yield current.setViewportSize(frame.viewport);
541
- yield (0, thumb_1.openFrame)(current, `${base}/frame.html?${frame.search}`);
542
- yield (0, thumb_1.awaitSettled)(current);
543
- const inspected = {
544
- fixed: frame.fixed,
545
- fit: frame.fit,
546
- skips: frame.skips,
547
- namespaces: frame.namespaces,
548
- contrast: frame.contrast,
549
- part: frame.controlInputs ? frame.address.part : null,
550
- embedControls: frame.embedControls,
551
- };
552
- const inFrame = (yield current.evaluate(inspectFrame(inspected)));
553
- yield current.evaluate((0, shot_1.emptySlotsScriptOf)(frame.address.part));
554
- const unstyled = (yield current.evaluate(inspectFrame(Object.assign(Object.assign({}, inspected), { sdkStylesOnly: true }))));
555
- const { product, part, state, sketch } = frame.address;
556
- found.push(...[...inFrame, ...unstyled].map((issue) => (Object.assign(Object.assign({}, issue), { product, part, state, sketch, size: frame.size }))));
571
+ const first = (_c = group[0]) === null || _c === void 0 ? void 0 : _c.address;
572
+ const key = cache ? (0, compare_cache_1.cacheKeyOf)([cache.salt, group]) : null;
573
+ const hit = cache && key ? yield (0, served_cache_1.servedHitOf)(cache, key) : null;
574
+ if (hit) {
575
+ issues.push(...hit);
576
+ done++;
577
+ if (first)
578
+ (_d = options.onPart) === null || _d === void 0 ? void 0 : _d.call(options, { done, total: groups.size, part: first.part, ms: Date.now() - started });
579
+ continue;
580
+ }
581
+ const width = Math.min(exports.INSPECTS_AT_ONCE, group.length);
582
+ while (lanes.length < width) {
583
+ const page = yield context.newPage();
584
+ if (cache)
585
+ yield (yield context.newCDPSession(page)).send('Network.setCacheDisabled', { cacheDisabled: true });
586
+ lanes.push({ page, sdkErrors: (0, sdk_errors_1.watchSdkErrorLines)(page) });
587
+ }
588
+ requested = [];
589
+ const found = group.map(() => []);
590
+ let next = 0;
591
+ const drawn = Promise.all(lanes.slice(0, width).map((_a) => __awaiter(void 0, [_a], void 0, function* ({ page }) {
592
+ for (let at = next++; at < group.length; at = next++) {
593
+ const frame = group[at];
594
+ if (frame)
595
+ found[at] = yield inspectedFrameOf({ page, base, frame });
557
596
  }
558
- }))();
597
+ })));
559
598
  drawn.catch(() => undefined);
560
599
  const result = yield (0, rxjs_1.firstValueFrom)((0, rxjs_1.race)((0, rxjs_1.from)(drawn).pipe((0, rxjs_1.map)(() => 'drawn')), (0, rxjs_1.timer)(timeoutMs).pipe((0, rxjs_1.map)(() => 'timeout'))));
561
- const first = (_c = group[0]) === null || _c === void 0 ? void 0 : _c.address;
562
600
  if (result === 'timeout') {
563
- yield current.close().catch(() => undefined);
564
- page = yield context.newPage();
565
- sdkErrors = (0, sdk_errors_1.watchSdkErrorLines)(page);
601
+ yield Promise.all(lanes.map(({ page }) => page.close().catch(() => undefined)));
602
+ lanes = [];
566
603
  if (first)
567
604
  issues.push({
568
605
  rule: exports.RENDER_TIMEOUT,
@@ -576,10 +613,10 @@ const inspect = (options) => __awaiter(void 0, void 0, void 0, function* () {
576
613
  });
577
614
  }
578
615
  else {
579
- issues.push(...found);
616
+ const groupIssues = found.flat();
580
617
  if (first)
581
- for (const line of sdkErrorsOf())
582
- issues.push({
618
+ for (const line of new Set(lanes.flatMap(({ sdkErrors }) => sdkErrors.drain())))
619
+ groupIssues.push({
583
620
  rule: 'RENDER',
584
621
  product: first.product,
585
622
  part: first.part,
@@ -589,10 +626,13 @@ const inspect = (options) => __awaiter(void 0, void 0, void 0, function* () {
589
626
  detail: `logged SDK error ${line.split('\n')[0]}`,
590
627
  sketch: first.sketch,
591
628
  });
629
+ issues.push(...groupIssues);
630
+ if (cache && key)
631
+ yield (0, served_cache_1.writeServed)(cache, { key, requested, value: groupIssues });
592
632
  }
593
633
  done++;
594
634
  if (first)
595
- (_d = options.onPart) === null || _d === void 0 ? void 0 : _d.call(options, { done, total: groups.size, part: first.part, ms: Date.now() - started });
635
+ (_e = options.onPart) === null || _e === void 0 ? void 0 : _e.call(options, { done, total: groups.size, part: first.part, ms: Date.now() - started });
596
636
  }
597
637
  }
598
638
  finally {
@@ -606,21 +646,32 @@ const inspect = (options) => __awaiter(void 0, void 0, void 0, function* () {
606
646
  * its content. Answers the rule breaks it finds, or why it could not draw.
607
647
  */
608
648
  const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
609
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
649
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
610
650
  const { target, config, jobs } = options;
611
651
  const resolveChromium = (_a = options.chromiumOf) !== null && _a !== void 0 ? _a : browser_1.chromiumOf;
652
+ const timeoutMs = (_b = options.partTimeoutMs) !== null && _b !== void 0 ? _b : (0, no_verdict_1.loadScaledMs)(PART_TIMEOUT_MS);
612
653
  if (jobs.length === 0)
613
654
  return { issues: [], warnings: [], grids: [], drawn: [] };
614
- if (!(yield resolveChromium(target)))
655
+ const chromium = yield resolveChromium(target);
656
+ if (!chromium)
615
657
  return {
616
658
  unavailable: `neither ${target} nor this package (${__dirname}) resolves playwright or playwright-core, so there is no Chromium to launch`,
617
659
  };
618
- const queue = (0, thumb_1.createDrawQueue)({ target, chromiumOf: resolveChromium });
619
- const server = yield (0, serve_1.createDesignServer)({ target, config, listen: true, port: 0 });
660
+ const { warm } = options;
661
+ const queue = warm ? warm.queue() : (0, thumb_1.createDrawQueue)({ target, chromiumOf: resolveChromium });
662
+ const server = warm ? yield warm.server(config) : yield (0, serve_1.createDesignServer)({ target, config, listen: true, port: 0 });
620
663
  try {
621
- yield server.listen();
622
- const { port } = (_b = server.httpServer) === null || _b === void 0 ? void 0 : _b.address();
623
- const base = `http://localhost:${port}`;
664
+ if (!warm)
665
+ yield server.listen();
666
+ const address = (_c = server.httpServer) === null || _c === void 0 ? void 0 : _c.address();
667
+ const base = `http://localhost:${address.port}`;
668
+ const cache = options.cached
669
+ ? {
670
+ store: (0, served_cache_1.createServedCache)((0, vite_cache_1.viteCacheOf)(target, exports.RENDER_ISSUES), RENDER_ISSUES_LIMIT),
671
+ served: (0, served_cache_1.createServedHashes)(base, (0, served_cache_1.fetchServedOf)((0, served_cache_1.reachableBaseOf)(address))),
672
+ salt: `${(0, code_hash_1.renderInspectCodeOf)()} ${(0, compare_cache_1.browserVersionOf)(chromium.from)}`,
673
+ }
674
+ : undefined;
624
675
  const system = (0, system_modules_1.createSystemModules)({ target, config });
625
676
  const frames = [];
626
677
  const issues = [];
@@ -629,14 +680,14 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
629
680
  const baselines = new Map();
630
681
  const mergedSkips = new Map();
631
682
  const framed = new Map();
632
- for (const { product, sketch, parts } of jobs) {
683
+ for (const { product, sketch, parts, unchanged } of jobs) {
633
684
  const skips = {};
634
685
  const drawn = system.drawnOf(product, sketch);
635
686
  if (!drawn)
636
687
  continue;
637
688
  const optionValuesOf = (0, option_values_1.optionValuesChecker)({ target, config, parts: drawn.parts });
638
689
  const merged = sketch ? system.productOf(product) : null;
639
- const mergedOptionValuesOf = (0, option_values_1.optionValuesChecker)({ target, config, parts: (_c = merged === null || merged === void 0 ? void 0 : merged.parts) !== null && _c !== void 0 ? _c : [] });
690
+ const mergedOptionValuesOf = (0, option_values_1.optionValuesChecker)({ target, config, parts: (_d = merged === null || merged === void 0 ? void 0 : merged.parts) !== null && _d !== void 0 ? _d : [] });
640
691
  const namespaces = namespacesOf(drawn.parts.map((part) => part.cssSource));
641
692
  const schemes = (0, contrast_check_1.schemesOf)(drawn.parts.map((part) => part.cssSource));
642
693
  for (const part of drawn.parts) {
@@ -654,17 +705,17 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
654
705
  state: '-',
655
706
  size: '-',
656
707
  path: '-',
657
- detail: (_d = loaded.error.split('\n')[0]) !== null && _d !== void 0 ? _d : '',
708
+ detail: (_e = loaded.error.split('\n')[0]) !== null && _e !== void 0 ? _e : '',
658
709
  sketch,
659
710
  });
660
711
  continue;
661
712
  }
662
713
  const definition = loaded.module.default;
663
- skips[key] = stringsOf((_e = definition === null || definition === void 0 ? void 0 : definition.checks) === null || _e === void 0 ? void 0 : _e.skip);
714
+ skips[key] = stringsOf((_f = definition === null || definition === void 0 ? void 0 : definition.checks) === null || _f === void 0 ? void 0 : _f.skip);
664
715
  if (parts && !parts.includes(key))
665
716
  continue;
666
717
  const states = (definition === null || definition === void 0 ? void 0 : definition.states) && typeof definition.states === 'object' ? Object.keys(definition.states) : [];
667
- const grid = (0, list_system_1.gridReportOf)(definition === null || definition === void 0 ? void 0 : definition.grid, states);
718
+ const grid = (0, grid_report_1.gridReportOf)(definition === null || definition === void 0 ? void 0 : definition.grid, states);
668
719
  const mergedPart = merged === null || merged === void 0 ? void 0 : merged.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === key);
669
720
  const mergedDefinition = mergedPart
670
721
  ? (yield server.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file: mergedPart.file, product })))['default']
@@ -720,8 +771,8 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
720
771
  sketch,
721
772
  }));
722
773
  }
723
- const exceptions = (0, contrast_check_1.contrastExceptionsOf)((_f = definition === null || definition === void 0 ? void 0 : definition.contrast) === null || _f === void 0 ? void 0 : _f.exceptions);
724
- const pairs = (0, contrast_check_1.contrastPairsOf)((_g = definition === null || definition === void 0 ? void 0 : definition.contrast) === null || _g === void 0 ? void 0 : _g.pairs);
774
+ const exceptions = (0, contrast_check_1.contrastExceptionsOf)((_g = definition === null || definition === void 0 ? void 0 : definition.contrast) === null || _g === void 0 ? void 0 : _g.exceptions);
775
+ const pairs = (0, contrast_check_1.contrastPairsOf)((_h = definition === null || definition === void 0 ? void 0 : definition.contrast) === null || _h === void 0 ? void 0 : _h.pairs);
725
776
  exceptions.problems.forEach((detail) => issues.push({ rule: 'CONTRAST', product, part: key, state: '-', size: '-', path: '-', detail, sketch }));
726
777
  const sizesOf = (widths, presets) => part.layer === 'pages'
727
778
  ? Object.keys(presets).map((preset) => ({ preset, width: null }))
@@ -735,11 +786,11 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
735
786
  framed.set(JSON.stringify([product, key, sketch]), typeof (definition === null || definition === void 0 ? void 0 : definition.frame) === 'function');
736
787
  if (merged && mergedPart && !baselines.has(baselineKey)) {
737
788
  const mergedContrast = {
738
- exceptions: (0, contrast_check_1.contrastExceptionsOf)((_h = mergedDefinition === null || mergedDefinition === void 0 ? void 0 : mergedDefinition.contrast) === null || _h === void 0 ? void 0 : _h.exceptions).selectors,
739
- pairs: (0, contrast_check_1.contrastPairsOf)((_j = mergedDefinition === null || mergedDefinition === void 0 ? void 0 : mergedDefinition.contrast) === null || _j === void 0 ? void 0 : _j.pairs),
789
+ exceptions: (0, contrast_check_1.contrastExceptionsOf)((_j = mergedDefinition === null || mergedDefinition === void 0 ? void 0 : mergedDefinition.contrast) === null || _j === void 0 ? void 0 : _j.exceptions).selectors,
790
+ pairs: (0, contrast_check_1.contrastPairsOf)((_k = mergedDefinition === null || mergedDefinition === void 0 ? void 0 : mergedDefinition.contrast) === null || _k === void 0 ? void 0 : _k.pairs),
740
791
  };
741
792
  const measured = new Set();
742
- mergedSkips.set(baselineKey, stringsOf((_k = mergedDefinition === null || mergedDefinition === void 0 ? void 0 : mergedDefinition.checks) === null || _k === void 0 ? void 0 : _k.skip));
793
+ mergedSkips.set(baselineKey, stringsOf((_l = mergedDefinition === null || mergedDefinition === void 0 ? void 0 : mergedDefinition.checks) === null || _l === void 0 ? void 0 : _l.skip));
743
794
  framed.set(JSON.stringify([product, key, null]), typeof (mergedDefinition === null || mergedDefinition === void 0 ? void 0 : mergedDefinition.frame) === 'function');
744
795
  baselines.set(baselineKey, mergedStates.flatMap((state) => sizesOf(widthsOf(mergedDefinition === null || mergedDefinition === void 0 ? void 0 : mergedDefinition.widths), merged.presets).flatMap(({ preset, width }) => schemes.flatMap((scheme) => {
745
796
  var _a;
@@ -767,7 +818,7 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
767
818
  }))));
768
819
  }
769
820
  const measuresPairs = new Set();
770
- for (const state of states) {
821
+ for (const state of states.filter((name) => { var _a; return !((_a = unchanged === null || unchanged === void 0 ? void 0 : unchanged[key]) === null || _a === void 0 ? void 0 : _a.includes(name)); })) {
771
822
  for (const { preset, width } of sizes) {
772
823
  for (const scheme of schemes) {
773
824
  const address = { product, part: key, state, preset, width, sketch, interaction: null };
@@ -779,7 +830,7 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
779
830
  size: preset !== null && preset !== void 0 ? preset : (width ? `${width}px` : 'fitted'),
780
831
  search: frame.search.toString(),
781
832
  viewport: (0, shot_1.viewportOf)(frame.size),
782
- fixed: ((_l = frame.size) === null || _l === void 0 ? void 0 : _l.height) !== undefined,
833
+ fixed: ((_m = frame.size) === null || _m === void 0 ? void 0 : _m.height) !== undefined,
783
834
  fit: frame.size === null,
784
835
  skips,
785
836
  namespaces,
@@ -797,55 +848,64 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
797
848
  }
798
849
  }
799
850
  }
851
+ const asked = new Set(((_o = options.before) !== null && _o !== void 0 ? _o : []).map(({ product, part }) => JSON.stringify([product, part])));
852
+ const inspectBaselineOf = (keys) => {
853
+ const baseline = keys.flatMap((key) => {
854
+ var _a;
855
+ return ((_a = baselines.get(key)) !== null && _a !== void 0 ? _a : []).map((frame) => {
856
+ var _a;
857
+ return (Object.assign(Object.assign({}, frame), { skips: Object.assign(Object.assign({}, frame.skips), { [frame.address.part]: (_a = mergedSkips.get(key)) !== null && _a !== void 0 ? _a : [] }) }));
858
+ });
859
+ });
860
+ return baseline.length > 0
861
+ ? queue.run((browser) => inspect({ browser, base, frames: baseline, cache, timeoutMs }))
862
+ : [];
863
+ };
864
+ const askedInProduct = Promise.resolve(inspectBaselineOf([...asked]));
865
+ askedInProduct.catch(() => undefined);
800
866
  const all = yield queue.run((browser) => (0, exports.inspectRetryingTimeouts)({
801
867
  browser,
802
868
  base,
803
869
  frames,
804
- timeoutMs: options.partTimeoutMs,
870
+ cache,
871
+ timeoutMs,
805
872
  onPart: ({ done, total, part, ms }) => { var _a; return (_a = options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, `[${done}/${total}] ${part} ${Math.round(ms / 1000)}s`); },
806
873
  }));
807
874
  const inspected = (0, exports.uniqueIssuesOf)(all.filter((issue) => issue.rule !== BUSY_MARK));
808
- const isInput = (issue) => issue.rule === 'CONTROL-PART-INPUT';
809
- const sketched = inspected.filter((issue) => issue.sketch && !WARNING_RULES.has(issue.rule));
810
- const asked = new Set(((_m = options.before) !== null && _m !== void 0 ? _m : []).map(({ product, part }) => JSON.stringify([product, part])));
811
- const compared = [...new Set([...sketched.map((issue) => JSON.stringify([issue.product, issue.part])), ...asked])];
812
- const baseline = compared.flatMap((key) => {
813
- var _a;
814
- return ((_a = baselines.get(key)) !== null && _a !== void 0 ? _a : []).map((frame) => {
815
- var _a;
816
- return (Object.assign(Object.assign({}, frame), { skips: Object.assign(Object.assign({}, frame.skips), { [frame.address.part]: (_a = mergedSkips.get(key)) !== null && _a !== void 0 ? _a : [] }) }));
817
- });
818
- });
875
+ const isInput = render_issue_key_1.isControlInput;
876
+ const sketched = inspected.filter((issue) => issue.sketch && !exports.WARNING_RULES.has(issue.rule));
877
+ const keyOf = (issue) => JSON.stringify([issue.product, issue.part]);
878
+ const compared = [...new Set([...sketched.map(keyOf), ...asked])];
879
+ const comparedAt = new Map(compared.map((key, index) => [key, index]));
880
+ const inProduct = [
881
+ ...(yield askedInProduct),
882
+ ...(yield inspectBaselineOf(compared.filter((key) => !asked.has(key)))),
883
+ ].sort((a, b) => { var _a, _b; return ((_a = comparedAt.get(keyOf(a))) !== null && _a !== void 0 ? _a : 0) - ((_b = comparedAt.get(keyOf(b))) !== null && _b !== void 0 ? _b : 0); });
819
884
  const elementOf = (issue) => JSON.stringify([issue.product, issue.part, issue.path]);
820
- const sameIssueOf = (issue, inFrame) => JSON.stringify([
821
- issue.product,
822
- issue.part,
823
- issue.rule,
824
- isInput(issue) ? null : issue.detail,
825
- inFrame === null ? issue.path : frameNeutralPathOf({ path: issue.path, part: issue.part, framed: inFrame }),
826
- ]);
885
+ const sameIssueOf = render_issue_key_1.sameRenderIssueKeyOf;
827
886
  const framedOf = (issue, sketch) => { var _a; return (_a = framed.get(JSON.stringify([issue.product, issue.part, sketch]))) !== null && _a !== void 0 ? _a : false; };
828
- const inProduct = baseline.length > 0 ? yield queue.run((browser) => inspect({ browser, base, frames: baseline })) : [];
829
887
  const existing = new Set(inProduct.flatMap((issue) => [sameIssueOf(issue, null), sameIssueOf(issue, framedOf(issue, null))]));
830
888
  const isOld = (issue) => existing.has(sameIssueOf(issue, null)) ||
831
889
  (framedOf(issue, issue.sketch) !== framedOf(issue, null) &&
832
890
  existing.has(sameIssueOf(issue, framedOf(issue, issue.sketch))));
833
891
  const mergedInputs = inspected.filter((issue) => isInput(issue) && !issue.sketch);
834
- issues.push(...inspected.filter((issue) => !issue.sketch && !WARNING_RULES.has(issue.rule) && !isInput(issue)), ...sketched.filter((issue) => !isOld(issue)));
835
- return {
836
- issues,
837
- warnings: [
892
+ const undrawnBase = [
893
+ ...new Set(inProduct.filter((issue) => issue.rule === exports.RENDER_TIMEOUT).map((issue) => issue.part)),
894
+ ];
895
+ issues.push(...inspected.filter((issue) => !issue.sketch && !exports.WARNING_RULES.has(issue.rule) && !isInput(issue)), ...sketched.filter((issue) => !isOld(issue)));
896
+ return Object.assign(Object.assign({ issues, warnings: [
838
897
  ...gridWarnings,
839
898
  ...mergedInputs.filter((issue, index) => mergedInputs.findIndex((other) => elementOf(other) === elementOf(issue)) === index),
840
- ...firstOfEach(inspected.filter((issue) => WARNING_RULES.has(issue.rule))),
841
- ],
842
- grids,
843
- busy: (0, exports.busyStatesOf)(all),
844
- before: (0, exports.uniqueIssuesOf)(inProduct.filter((issue) => asked.has(JSON.stringify([issue.product, issue.part])) &&
899
+ ...firstOfEach(inspected.filter((issue) => exports.WARNING_RULES.has(issue.rule))),
900
+ ], grids, busy: (0, exports.busyStatesOf)(all) }, (undrawnBase.length > 0
901
+ ? {
902
+ noVerdict: (0, no_verdict_1.noVerdictOf)(`the base of ${undrawnBase.join(', ')} did not draw within ${Math.round(timeoutMs / 1000)}s, so its problems could not be told apart from the sketch's`),
903
+ }
904
+ : {})), { before: (0, exports.uniqueIssuesOf)(inProduct.filter((issue) => asked.has(JSON.stringify([issue.product, issue.part])) &&
845
905
  issue.rule !== BUSY_MARK &&
846
- !WARNING_RULES.has(issue.rule) &&
847
- !isInput(issue))),
848
- drawn: frames
906
+ issue.rule !== exports.RENDER_TIMEOUT &&
907
+ !exports.WARNING_RULES.has(issue.rule) &&
908
+ !isInput(issue))), drawn: frames
849
909
  .filter(({ contrast }) => contrast.scheme !== 'dark')
850
910
  .map(({ address }) => {
851
911
  var _a;
@@ -856,8 +916,7 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
856
916
  size: (_a = address.preset) !== null && _a !== void 0 ? _a : (address.width ? `${address.width}px` : 'fitted'),
857
917
  sketch: address.sketch,
858
918
  });
859
- }),
860
- };
919
+ }) });
861
920
  }
862
921
  catch (error) {
863
922
  if (error instanceof thumb_1.ThumbUnavailableError)
@@ -865,7 +924,8 @@ const renderIssuesOf = (options) => __awaiter(void 0, void 0, void 0, function*
865
924
  throw error;
866
925
  }
867
926
  finally {
868
- yield Promise.all([queue.close(), server.close()]);
927
+ if (!warm)
928
+ yield Promise.all([queue.close(), server.close()]);
869
929
  }
870
930
  });
871
931
  exports.renderIssuesOf = renderIssuesOf;