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

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 (557) hide show
  1. package/CHANGELOG.md +328 -0
  2. package/build-info.json +1 -0
  3. package/design/define-call.ts +72 -30
  4. package/design/define-part.ts +37 -4
  5. package/design/icon-sheet.ts +1 -1
  6. package/design/interaction-rows.ts +13 -6
  7. package/design/mark-part.ts +51 -1
  8. package/design/token-sheet.ts +1 -1
  9. package/design/web/frame-fit.ts +7 -0
  10. package/design/web/frame-surfaces.ts +294 -0
  11. package/design/web/frame.ts +41 -15
  12. package/design/web/surface-interactive.css +42 -0
  13. package/design/with-action.ts +29 -0
  14. package/package.json +3 -1
  15. package/src/index.js +9 -1
  16. package/src/index.js.map +1 -1
  17. package/src/lib/design/asset-shot.js +2 -2
  18. package/src/lib/design/asset-shot.js.map +1 -1
  19. package/src/lib/design/build-watch.d.ts +26 -0
  20. package/src/lib/design/build-watch.js +138 -0
  21. package/src/lib/design/build-watch.js.map +1 -0
  22. package/src/lib/design/check.js +142 -16
  23. package/src/lib/design/check.js.map +1 -1
  24. package/src/lib/design/commit-hunks.d.ts +22 -0
  25. package/src/lib/design/commit-hunks.js +173 -0
  26. package/src/lib/design/commit-hunks.js.map +1 -0
  27. package/src/lib/design/design-command.d.ts +2 -0
  28. package/src/lib/design/design-command.js +160 -11
  29. package/src/lib/design/design-command.js.map +1 -1
  30. package/src/lib/design/force-interactions.d.ts +1 -1
  31. package/src/lib/design/force-interactions.js +4 -2
  32. package/src/lib/design/force-interactions.js.map +1 -1
  33. package/src/lib/design/inbox-command.js +9 -5
  34. package/src/lib/design/inbox-command.js.map +1 -1
  35. package/src/lib/design/mcp-command.d.ts +5 -1
  36. package/src/lib/design/mcp-command.js +29 -11
  37. package/src/lib/design/mcp-command.js.map +1 -1
  38. package/src/lib/design/merge-compare.d.ts +10 -2
  39. package/src/lib/design/merge-compare.js +63 -11
  40. package/src/lib/design/merge-compare.js.map +1 -1
  41. package/src/lib/design/motion-command.js +1 -1
  42. package/src/lib/design/motion-command.js.map +1 -1
  43. package/src/lib/design/motion-shot.js +3 -2
  44. package/src/lib/design/motion-shot.js.map +1 -1
  45. package/src/lib/design/new-call.js +19 -10
  46. package/src/lib/design/new-call.js.map +1 -1
  47. package/src/lib/design/part-marks.d.ts +3 -2
  48. package/src/lib/design/part-marks.js +13 -5
  49. package/src/lib/design/part-marks.js.map +1 -1
  50. package/src/lib/design/paths.d.ts +28 -0
  51. package/src/lib/design/paths.js.map +1 -1
  52. package/src/lib/design/product-command.d.ts +1 -1
  53. package/src/lib/design/product-command.js +12 -14
  54. package/src/lib/design/product-command.js.map +1 -1
  55. package/src/lib/design/ready-shots.d.ts +29 -3
  56. package/src/lib/design/ready-shots.js +105 -5
  57. package/src/lib/design/ready-shots.js.map +1 -1
  58. package/src/lib/design/render-packages.d.ts +4 -17
  59. package/src/lib/design/render-packages.js +20 -63
  60. package/src/lib/design/render-packages.js.map +1 -1
  61. package/src/lib/design/render-worker.js +1 -3
  62. package/src/lib/design/render-worker.js.map +1 -1
  63. package/src/lib/design/render.d.ts +2 -0
  64. package/src/lib/design/render.js +32 -7
  65. package/src/lib/design/render.js.map +1 -1
  66. package/src/lib/design/serve.d.ts +21 -1
  67. package/src/lib/design/serve.js +133 -19
  68. package/src/lib/design/serve.js.map +1 -1
  69. package/src/lib/design/server-identity.d.ts +36 -0
  70. package/src/lib/design/server-identity.js +68 -0
  71. package/src/lib/design/server-identity.js.map +1 -0
  72. package/src/lib/design/settle-frames.d.ts +4 -0
  73. package/src/lib/design/settle-frames.js +22 -0
  74. package/src/lib/design/settle-frames.js.map +1 -0
  75. package/src/lib/design/shot-command.d.ts +25 -4
  76. package/src/lib/design/shot-command.js +132 -46
  77. package/src/lib/design/shot-command.js.map +1 -1
  78. package/src/lib/design/shot.d.ts +50 -0
  79. package/src/lib/design/shot.js +143 -17
  80. package/src/lib/design/shot.js.map +1 -1
  81. package/src/lib/design/sketch-command.d.ts +6 -1
  82. package/src/lib/design/sketch-command.js +358 -126
  83. package/src/lib/design/sketch-command.js.map +1 -1
  84. package/src/lib/design/stale-cli-dist.d.ts +11 -0
  85. package/src/lib/design/stale-cli-dist.js +56 -0
  86. package/src/lib/design/stale-cli-dist.js.map +1 -0
  87. package/src/lib/design/stamp.d.ts +18 -1
  88. package/src/lib/design/stamp.js +53 -7
  89. package/src/lib/design/stamp.js.map +1 -1
  90. package/src/lib/design/started-by-studio.d.ts +1 -0
  91. package/src/lib/design/started-by-studio.js +6 -0
  92. package/src/lib/design/started-by-studio.js.map +1 -0
  93. package/src/lib/design/studio-api.d.ts +27 -8
  94. package/src/lib/design/studio-api.js +263 -58
  95. package/src/lib/design/studio-api.js.map +1 -1
  96. package/src/lib/design/system/accept-command.d.ts +39 -5
  97. package/src/lib/design/system/accept-command.js +109 -25
  98. package/src/lib/design/system/accept-command.js.map +1 -1
  99. package/src/lib/design/system/accepted-pictures.d.ts +83 -0
  100. package/src/lib/design/system/accepted-pictures.js +324 -0
  101. package/src/lib/design/system/accepted-pictures.js.map +1 -0
  102. package/src/lib/design/system/action-lost.d.ts +59 -0
  103. package/src/lib/design/system/action-lost.js +120 -0
  104. package/src/lib/design/system/action-lost.js.map +1 -0
  105. package/src/lib/design/system/action-press.d.ts +23 -0
  106. package/src/lib/design/system/action-press.js +76 -0
  107. package/src/lib/design/system/action-press.js.map +1 -0
  108. package/src/lib/design/system/action-undeclared.d.ts +34 -0
  109. package/src/lib/design/system/action-undeclared.js +81 -0
  110. package/src/lib/design/system/action-undeclared.js.map +1 -0
  111. package/src/lib/design/system/actions-command.d.ts +101 -0
  112. package/src/lib/design/system/actions-command.js +695 -0
  113. package/src/lib/design/system/actions-command.js.map +1 -0
  114. package/src/lib/design/system/actions.d.ts +158 -0
  115. package/src/lib/design/system/actions.js +295 -0
  116. package/src/lib/design/system/actions.js.map +1 -0
  117. package/src/lib/design/system/app-files.d.ts +10 -0
  118. package/src/lib/design/system/app-files.js +159 -0
  119. package/src/lib/design/system/app-files.js.map +1 -0
  120. package/src/lib/design/system/bespoke-controls.d.ts +30 -0
  121. package/src/lib/design/system/bespoke-controls.js +147 -0
  122. package/src/lib/design/system/bespoke-controls.js.map +1 -0
  123. package/src/lib/design/system/build-ready-contract.d.ts +27 -0
  124. package/src/lib/design/system/build-ready-contract.js +12 -0
  125. package/src/lib/design/system/build-ready-contract.js.map +1 -0
  126. package/src/lib/design/system/check-rules.d.ts +1 -0
  127. package/src/lib/design/system/check-rules.js +82 -0
  128. package/src/lib/design/system/check-rules.js.map +1 -0
  129. package/src/lib/design/system/check-system.d.ts +61 -6
  130. package/src/lib/design/system/check-system.js +479 -68
  131. package/src/lib/design/system/check-system.js.map +1 -1
  132. package/src/lib/design/system/comments/comment.d.ts +4 -1
  133. package/src/lib/design/system/comments/comment.js +13 -4
  134. package/src/lib/design/system/comments/comment.js.map +1 -1
  135. package/src/lib/design/system/comments/inbox.js +2 -2
  136. package/src/lib/design/system/comments/inbox.js.map +1 -1
  137. package/src/lib/design/system/compare-command.d.ts +119 -0
  138. package/src/lib/design/system/compare-command.js +558 -0
  139. package/src/lib/design/system/compare-command.js.map +1 -0
  140. package/src/lib/design/system/complete-command.js +1 -1
  141. package/src/lib/design/system/complete-command.js.map +1 -1
  142. package/src/lib/design/system/complete.d.ts +32 -1
  143. package/src/lib/design/system/complete.js +144 -48
  144. package/src/lib/design/system/complete.js.map +1 -1
  145. package/src/lib/design/system/component-outputs.d.ts +20 -0
  146. package/src/lib/design/system/component-outputs.js +86 -0
  147. package/src/lib/design/system/component-outputs.js.map +1 -0
  148. package/src/lib/design/system/contrast-check.d.ts +1 -1
  149. package/src/lib/design/system/contrast-check.js +14 -3
  150. package/src/lib/design/system/contrast-check.js.map +1 -1
  151. package/src/lib/design/system/demo-backdrop.d.ts +11 -0
  152. package/src/lib/design/system/demo-backdrop.js +41 -0
  153. package/src/lib/design/system/demo-backdrop.js.map +1 -0
  154. package/src/lib/design/system/design-hash.d.ts +31 -0
  155. package/src/lib/design/system/design-hash.js +73 -0
  156. package/src/lib/design/system/design-hash.js.map +1 -0
  157. package/src/lib/design/system/disabled-interaction.d.ts +8 -0
  158. package/src/lib/design/system/disabled-interaction.js +37 -0
  159. package/src/lib/design/system/disabled-interaction.js.map +1 -0
  160. package/src/lib/design/system/dom-command.d.ts +36 -0
  161. package/src/lib/design/system/dom-command.js +175 -0
  162. package/src/lib/design/system/dom-command.js.map +1 -0
  163. package/src/lib/design/system/drawn-open-points.d.ts +25 -3
  164. package/src/lib/design/system/drawn-open-points.js +65 -14
  165. package/src/lib/design/system/drawn-open-points.js.map +1 -1
  166. package/src/lib/design/system/dropped-props.d.ts +25 -0
  167. package/src/lib/design/system/dropped-props.js +159 -0
  168. package/src/lib/design/system/dropped-props.js.map +1 -0
  169. package/src/lib/design/system/embedded-actions.d.ts +21 -0
  170. package/src/lib/design/system/embedded-actions.js +37 -0
  171. package/src/lib/design/system/embedded-actions.js.map +1 -0
  172. package/src/lib/design/system/exceptions.js +2 -1
  173. package/src/lib/design/system/exceptions.js.map +1 -1
  174. package/src/lib/design/system/flows/flow.js +2 -1
  175. package/src/lib/design/system/flows/flow.js.map +1 -1
  176. package/src/lib/design/system/frozen-animations.d.ts +13 -0
  177. package/src/lib/design/system/frozen-animations.js +51 -0
  178. package/src/lib/design/system/frozen-animations.js.map +1 -0
  179. package/src/lib/design/system/go-batch.d.ts +24 -0
  180. package/src/lib/design/system/go-batch.js +110 -0
  181. package/src/lib/design/system/go-batch.js.map +1 -0
  182. package/src/lib/design/system/go-command.d.ts +4 -0
  183. package/src/lib/design/system/go-command.js +64 -0
  184. package/src/lib/design/system/go-command.js.map +1 -0
  185. package/src/lib/design/system/go-guard.d.ts +26 -0
  186. package/src/lib/design/system/go-guard.js +70 -0
  187. package/src/lib/design/system/go-guard.js.map +1 -0
  188. package/src/lib/design/system/go-step.d.ts +13 -0
  189. package/src/lib/design/system/go-step.js +84 -0
  190. package/src/lib/design/system/go-step.js.map +1 -0
  191. package/src/lib/design/system/handoff.js +2 -1
  192. package/src/lib/design/system/handoff.js.map +1 -1
  193. package/src/lib/design/system/harness-build-cache.d.ts +35 -0
  194. package/src/lib/design/system/harness-build-cache.js +175 -0
  195. package/src/lib/design/system/harness-build-cache.js.map +1 -0
  196. package/src/lib/design/system/harness-command.d.ts +7 -0
  197. package/src/lib/design/system/harness-command.js +51 -0
  198. package/src/lib/design/system/harness-command.js.map +1 -0
  199. package/src/lib/design/system/harness-config.d.ts +9 -0
  200. package/src/lib/design/system/harness-config.js +65 -0
  201. package/src/lib/design/system/harness-config.js.map +1 -0
  202. package/src/lib/design/system/harness-map.d.ts +44 -0
  203. package/src/lib/design/system/harness-map.js +126 -0
  204. package/src/lib/design/system/harness-map.js.map +1 -0
  205. package/src/lib/design/system/harness-samples.d.ts +20 -0
  206. package/src/lib/design/system/harness-samples.js +92 -0
  207. package/src/lib/design/system/harness-samples.js.map +1 -0
  208. package/src/lib/design/system/harness-server.d.ts +40 -0
  209. package/src/lib/design/system/harness-server.js +296 -0
  210. package/src/lib/design/system/harness-server.js.map +1 -0
  211. package/src/lib/design/system/imports.js +14 -1
  212. package/src/lib/design/system/imports.js.map +1 -1
  213. package/src/lib/design/system/in-order-at-once.d.ts +6 -0
  214. package/src/lib/design/system/in-order-at-once.js +28 -0
  215. package/src/lib/design/system/in-order-at-once.js.map +1 -0
  216. package/src/lib/design/system/inventory-approval.js +2 -1
  217. package/src/lib/design/system/inventory-approval.js.map +1 -1
  218. package/src/lib/design/system/inventory.d.ts +13 -4
  219. package/src/lib/design/system/inventory.js +36 -7
  220. package/src/lib/design/system/inventory.js.map +1 -1
  221. package/src/lib/design/system/list-system.d.ts +4 -0
  222. package/src/lib/design/system/list-system.js +12 -3
  223. package/src/lib/design/system/list-system.js.map +1 -1
  224. package/src/lib/design/system/live-actions.d.ts +121 -0
  225. package/src/lib/design/system/live-actions.js +665 -0
  226. package/src/lib/design/system/live-actions.js.map +1 -0
  227. package/src/lib/design/system/live-compare.d.ts +136 -0
  228. package/src/lib/design/system/live-compare.js +441 -0
  229. package/src/lib/design/system/live-compare.js.map +1 -0
  230. package/src/lib/design/system/live-uncovered.d.ts +40 -0
  231. package/src/lib/design/system/live-uncovered.js +123 -0
  232. package/src/lib/design/system/live-uncovered.js.map +1 -0
  233. package/src/lib/design/system/nested-scroll.d.ts +7 -0
  234. package/src/lib/design/system/nested-scroll.js +25 -0
  235. package/src/lib/design/system/nested-scroll.js.map +1 -0
  236. package/src/lib/design/system/notes/note.js +2 -1
  237. package/src/lib/design/system/notes/note.js.map +1 -1
  238. package/src/lib/design/system/occluded.d.ts +13 -0
  239. package/src/lib/design/system/occluded.js +111 -0
  240. package/src/lib/design/system/occluded.js.map +1 -0
  241. package/src/lib/design/system/open-points.d.ts +24 -6
  242. package/src/lib/design/system/open-points.js +59 -30
  243. package/src/lib/design/system/open-points.js.map +1 -1
  244. package/src/lib/design/system/part-build-ready.d.ts +39 -0
  245. package/src/lib/design/system/part-build-ready.js +107 -0
  246. package/src/lib/design/system/part-build-ready.js.map +1 -0
  247. package/src/lib/design/system/part-command.js +2 -9
  248. package/src/lib/design/system/part-command.js.map +1 -1
  249. package/src/lib/design/system/part-compare.d.ts +123 -0
  250. package/src/lib/design/system/part-compare.js +396 -0
  251. package/src/lib/design/system/part-compare.js.map +1 -0
  252. package/src/lib/design/system/part-go.d.ts +70 -0
  253. package/src/lib/design/system/part-go.js +94 -0
  254. package/src/lib/design/system/part-go.js.map +1 -0
  255. package/src/lib/design/system/part-ready.d.ts +44 -6
  256. package/src/lib/design/system/part-ready.js +88 -17
  257. package/src/lib/design/system/part-ready.js.map +1 -1
  258. package/src/lib/design/system/part-task.d.ts +147 -0
  259. package/src/lib/design/system/part-task.js +285 -0
  260. package/src/lib/design/system/part-task.js.map +1 -0
  261. package/src/lib/design/system/pointer-focus.d.ts +81 -0
  262. package/src/lib/design/system/pointer-focus.js +152 -0
  263. package/src/lib/design/system/pointer-focus.js.map +1 -0
  264. package/src/lib/design/system/prettier.d.ts +10 -0
  265. package/src/lib/design/system/prettier.js +36 -0
  266. package/src/lib/design/system/prettier.js.map +1 -0
  267. package/src/lib/design/system/reach.d.ts +12 -0
  268. package/src/lib/design/system/reach.js +186 -0
  269. package/src/lib/design/system/reach.js.map +1 -0
  270. package/src/lib/design/system/reachable-controls.d.ts +6 -0
  271. package/src/lib/design/system/reachable-controls.js +19 -0
  272. package/src/lib/design/system/reachable-controls.js.map +1 -0
  273. package/src/lib/design/system/reachable-files.d.ts +14 -0
  274. package/src/lib/design/system/reachable-files.js +101 -0
  275. package/src/lib/design/system/reachable-files.js.map +1 -0
  276. package/src/lib/design/system/reached-state.d.ts +23 -0
  277. package/src/lib/design/system/reached-state.js +53 -0
  278. package/src/lib/design/system/reached-state.js.map +1 -0
  279. package/src/lib/design/system/read-open-points.d.ts +9 -3
  280. package/src/lib/design/system/read-open-points.js +38 -9
  281. package/src/lib/design/system/read-open-points.js.map +1 -1
  282. package/src/lib/design/system/ready-command.d.ts +6 -2
  283. package/src/lib/design/system/ready-command.js +32 -15
  284. package/src/lib/design/system/ready-command.js.map +1 -1
  285. package/src/lib/design/system/render-check.d.ts +50 -0
  286. package/src/lib/design/system/render-check.js +341 -88
  287. package/src/lib/design/system/render-check.js.map +1 -1
  288. package/src/lib/design/system/resolve-product.js +5 -0
  289. package/src/lib/design/system/resolve-product.js.map +1 -1
  290. package/src/lib/design/system/rules/app-spec.d.ts +30 -0
  291. package/src/lib/design/system/rules/app-spec.js +87 -0
  292. package/src/lib/design/system/rules/app-spec.js.map +1 -0
  293. package/src/lib/design/system/rules/canonical-class.d.ts +2 -0
  294. package/src/lib/design/system/rules/canonical-class.js +36 -110
  295. package/src/lib/design/system/rules/canonical-class.js.map +1 -1
  296. package/src/lib/design/system/rules/capability-place.d.ts +44 -0
  297. package/src/lib/design/system/rules/capability-place.js +116 -0
  298. package/src/lib/design/system/rules/capability-place.js.map +1 -0
  299. package/src/lib/design/system/rules/denied-class.d.ts +9 -0
  300. package/src/lib/design/system/rules/denied-class.js +121 -0
  301. package/src/lib/design/system/rules/denied-class.js.map +1 -0
  302. package/src/lib/design/system/rules/exemptions.d.ts +18 -0
  303. package/src/lib/design/system/rules/exemptions.js +18 -0
  304. package/src/lib/design/system/rules/exemptions.js.map +1 -0
  305. package/src/lib/design/system/rules/flow.js +1 -1
  306. package/src/lib/design/system/rules/flow.js.map +1 -1
  307. package/src/lib/design/system/rules/glued-interpolation.d.ts +8 -0
  308. package/src/lib/design/system/rules/glued-interpolation.js +61 -0
  309. package/src/lib/design/system/rules/glued-interpolation.js.map +1 -0
  310. package/src/lib/design/system/rules/hard-coded-colour.js +2 -1
  311. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -1
  312. package/src/lib/design/system/rules/implemented-components.d.ts +22 -0
  313. package/src/lib/design/system/rules/implemented-components.js +45 -0
  314. package/src/lib/design/system/rules/implemented-components.js.map +1 -0
  315. package/src/lib/design/system/rules/implements.d.ts +2 -1
  316. package/src/lib/design/system/rules/implements.js +26 -21
  317. package/src/lib/design/system/rules/implements.js.map +1 -1
  318. package/src/lib/design/system/rules/inline-svg.js +4 -1
  319. package/src/lib/design/system/rules/inline-svg.js.map +1 -1
  320. package/src/lib/design/system/rules/inline-ui-in-page-open.d.ts +13 -0
  321. package/src/lib/design/system/rules/inline-ui-in-page-open.js +5 -0
  322. package/src/lib/design/system/rules/inline-ui-in-page-open.js.map +1 -0
  323. package/src/lib/design/system/rules/inline-ui-in-page.d.ts +18 -0
  324. package/src/lib/design/system/rules/inline-ui-in-page.js +123 -0
  325. package/src/lib/design/system/rules/inline-ui-in-page.js.map +1 -0
  326. package/src/lib/design/system/rules/inline-ui.d.ts +16 -0
  327. package/src/lib/design/system/rules/inline-ui.js +100 -0
  328. package/src/lib/design/system/rules/inline-ui.js.map +1 -0
  329. package/src/lib/design/system/rules/motion.d.ts +1 -1
  330. package/src/lib/design/system/rules/motion.js +25 -17
  331. package/src/lib/design/system/rules/motion.js.map +1 -1
  332. package/src/lib/design/system/rules/native-title.d.ts +7 -0
  333. package/src/lib/design/system/rules/native-title.js +64 -0
  334. package/src/lib/design/system/rules/native-title.js.map +1 -0
  335. package/src/lib/design/system/rules/orphan-endpoint-known.d.ts +12 -0
  336. package/src/lib/design/system/rules/orphan-endpoint-known.js +20 -0
  337. package/src/lib/design/system/rules/orphan-endpoint-known.js.map +1 -0
  338. package/src/lib/design/system/rules/orphan-endpoint.d.ts +23 -0
  339. package/src/lib/design/system/rules/orphan-endpoint.js +166 -0
  340. package/src/lib/design/system/rules/orphan-endpoint.js.map +1 -0
  341. package/src/lib/design/system/rules/part-rewrite.d.ts +13 -0
  342. package/src/lib/design/system/rules/part-rewrite.js +125 -0
  343. package/src/lib/design/system/rules/part-rewrite.js.map +1 -0
  344. package/src/lib/design/system/rules/sample-default-known.d.ts +5 -0
  345. package/src/lib/design/system/rules/sample-default-known.js +17 -0
  346. package/src/lib/design/system/rules/sample-default-known.js.map +1 -0
  347. package/src/lib/design/system/rules/sample-default.d.ts +22 -0
  348. package/src/lib/design/system/rules/sample-default.js +92 -0
  349. package/src/lib/design/system/rules/sample-default.js.map +1 -0
  350. package/src/lib/design/system/rules/stale-replace.js +4 -0
  351. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  352. package/src/lib/design/system/rules/state-in-component.d.ts +16 -0
  353. package/src/lib/design/system/rules/state-in-component.js +101 -0
  354. package/src/lib/design/system/rules/state-in-component.js.map +1 -0
  355. package/src/lib/design/system/rules/tailwind-classes.d.ts +51 -0
  356. package/src/lib/design/system/rules/tailwind-classes.js +232 -0
  357. package/src/lib/design/system/rules/tailwind-classes.js.map +1 -0
  358. package/src/lib/design/system/rules/top-level-await.d.ts +9 -0
  359. package/src/lib/design/system/rules/top-level-await.js +62 -0
  360. package/src/lib/design/system/rules/top-level-await.js.map +1 -0
  361. package/src/lib/design/system/rules/unbound-input-known.d.ts +5 -0
  362. package/src/lib/design/system/rules/unbound-input-known.js +47 -0
  363. package/src/lib/design/system/rules/unbound-input-known.js.map +1 -0
  364. package/src/lib/design/system/rules/unbound-input.d.ts +22 -0
  365. package/src/lib/design/system/rules/unbound-input.js +61 -0
  366. package/src/lib/design/system/rules/unbound-input.js.map +1 -0
  367. package/src/lib/design/system/rules/uncovered-region.d.ts +13 -0
  368. package/src/lib/design/system/rules/uncovered-region.js +36 -0
  369. package/src/lib/design/system/rules/uncovered-region.js.map +1 -0
  370. package/src/lib/design/system/rules/undefined-class.d.ts +9 -0
  371. package/src/lib/design/system/rules/undefined-class.js +32 -0
  372. package/src/lib/design/system/rules/undefined-class.js.map +1 -0
  373. package/src/lib/design/system/rules/undefined-token.d.ts +1 -1
  374. package/src/lib/design/system/rules/undefined-token.js +7 -61
  375. package/src/lib/design/system/rules/undefined-token.js.map +1 -1
  376. package/src/lib/design/system/rules/utility-css.d.ts +2 -1
  377. package/src/lib/design/system/rules/utility-css.js +29 -14
  378. package/src/lib/design/system/rules/utility-css.js.map +1 -1
  379. package/src/lib/design/system/rules/view-coverage.d.ts +8 -0
  380. package/src/lib/design/system/rules/view-coverage.js +51 -0
  381. package/src/lib/design/system/rules/view-coverage.js.map +1 -0
  382. package/src/lib/design/system/rules/visible-change.d.ts +20 -0
  383. package/src/lib/design/system/rules/visible-change.js +48 -0
  384. package/src/lib/design/system/rules/visible-change.js.map +1 -0
  385. package/src/lib/design/system/sdk-errors.d.ts +14 -0
  386. package/src/lib/design/system/sdk-errors.js +38 -0
  387. package/src/lib/design/system/sdk-errors.js.map +1 -0
  388. package/src/lib/design/system/see-through.d.ts +12 -0
  389. package/src/lib/design/system/see-through.js +112 -0
  390. package/src/lib/design/system/see-through.js.map +1 -0
  391. package/src/lib/design/system/settled-panes.d.ts +18 -0
  392. package/src/lib/design/system/settled-panes.js +70 -0
  393. package/src/lib/design/system/settled-panes.js.map +1 -0
  394. package/src/lib/design/system/sketch/after-merge.d.ts +11 -0
  395. package/src/lib/design/system/sketch/after-merge.js +51 -0
  396. package/src/lib/design/system/sketch/after-merge.js.map +1 -0
  397. package/src/lib/design/system/sketch/aktuell-placeholders.d.ts +30 -0
  398. package/src/lib/design/system/sketch/aktuell-placeholders.js +87 -0
  399. package/src/lib/design/system/sketch/aktuell-placeholders.js.map +1 -0
  400. package/src/lib/design/system/sketch/baseline.d.ts +19 -1
  401. package/src/lib/design/system/sketch/baseline.js +29 -7
  402. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  403. package/src/lib/design/system/sketch/check-sketches.d.ts +10 -0
  404. package/src/lib/design/system/sketch/check-sketches.js +50 -4
  405. package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
  406. package/src/lib/design/system/sketch/cli-args.d.ts +12 -2
  407. package/src/lib/design/system/sketch/cli-args.js +18 -3
  408. package/src/lib/design/system/sketch/cli-args.js.map +1 -1
  409. package/src/lib/design/system/sketch/edit-sketch.d.ts +21 -0
  410. package/src/lib/design/system/sketch/edit-sketch.js +117 -0
  411. package/src/lib/design/system/sketch/edit-sketch.js.map +1 -0
  412. package/src/lib/design/system/sketch/frame-budget.d.ts +24 -0
  413. package/src/lib/design/system/sketch/frame-budget.js +23 -0
  414. package/src/lib/design/system/sketch/frame-budget.js.map +1 -0
  415. package/src/lib/design/system/sketch/identical-renders.d.ts +31 -0
  416. package/src/lib/design/system/sketch/identical-renders.js +137 -0
  417. package/src/lib/design/system/sketch/identical-renders.js.map +1 -0
  418. package/src/lib/design/system/sketch/merge-shared.d.ts +2 -0
  419. package/src/lib/design/system/sketch/merge-shared.js +7 -10
  420. package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
  421. package/src/lib/design/system/sketch/merge-step.d.ts +35 -0
  422. package/src/lib/design/system/sketch/merge-step.js +98 -0
  423. package/src/lib/design/system/sketch/merge-step.js.map +1 -0
  424. package/src/lib/design/system/sketch/merge.d.ts +10 -3
  425. package/src/lib/design/system/sketch/merge.js +103 -30
  426. package/src/lib/design/system/sketch/merge.js.map +1 -1
  427. package/src/lib/design/system/sketch/merged-layout.d.ts +17 -0
  428. package/src/lib/design/system/sketch/merged-layout.js +57 -0
  429. package/src/lib/design/system/sketch/merged-layout.js.map +1 -0
  430. package/src/lib/design/system/sketch/merged-parts.d.ts +40 -10
  431. package/src/lib/design/system/sketch/merged-parts.js +112 -49
  432. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  433. package/src/lib/design/system/sketch/no-visible-change.d.ts +10 -0
  434. package/src/lib/design/system/sketch/no-visible-change.js +16 -6
  435. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  436. package/src/lib/design/system/sketch/part-definition.d.ts +21 -1
  437. package/src/lib/design/system/sketch/part-definition.js +79 -17
  438. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  439. package/src/lib/design/system/sketch/rebase-port.d.ts +24 -0
  440. package/src/lib/design/system/sketch/rebase-port.js +170 -0
  441. package/src/lib/design/system/sketch/rebase-port.js.map +1 -0
  442. package/src/lib/design/system/sketch/sample-mark-drift.d.ts +33 -0
  443. package/src/lib/design/system/sketch/sample-mark-drift.js +88 -0
  444. package/src/lib/design/system/sketch/sample-mark-drift.js.map +1 -0
  445. package/src/lib/design/system/sketch/sketch-check-worker.d.ts +1 -0
  446. package/src/lib/design/system/sketch/sketch-check-worker.js +27 -0
  447. package/src/lib/design/system/sketch/sketch-check-worker.js.map +1 -0
  448. package/src/lib/design/system/sketch/sketch-checker.d.ts +27 -0
  449. package/src/lib/design/system/sketch/sketch-checker.js +99 -0
  450. package/src/lib/design/system/sketch/sketch-checker.js.map +1 -0
  451. package/src/lib/design/system/sketch/sketch.d.ts +63 -2
  452. package/src/lib/design/system/sketch/sketch.js +185 -30
  453. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  454. package/src/lib/design/system/sketch/stale-base.d.ts +22 -0
  455. package/src/lib/design/system/sketch/stale-base.js +56 -0
  456. package/src/lib/design/system/sketch/stale-base.js.map +1 -0
  457. package/src/lib/design/system/sketch/unchanged-states.d.ts +32 -0
  458. package/src/lib/design/system/sketch/unchanged-states.js +52 -13
  459. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  460. package/src/lib/design/system/sketch/unused-closure.js +16 -4
  461. package/src/lib/design/system/sketch/unused-closure.js.map +1 -1
  462. package/src/lib/design/system/sketch/viewed-shots.d.ts +24 -0
  463. package/src/lib/design/system/sketch/viewed-shots.js +61 -0
  464. package/src/lib/design/system/sketch/viewed-shots.js.map +1 -0
  465. package/src/lib/design/system/slow-checks.d.ts +40 -0
  466. package/src/lib/design/system/slow-checks.js +197 -0
  467. package/src/lib/design/system/slow-checks.js.map +1 -0
  468. package/src/lib/design/system/slow-run.d.ts +57 -0
  469. package/src/lib/design/system/slow-run.js +253 -0
  470. package/src/lib/design/system/slow-run.js.map +1 -0
  471. package/src/lib/design/system/stale-design-mocks.d.ts +20 -0
  472. package/src/lib/design/system/stale-design-mocks.js +59 -0
  473. package/src/lib/design/system/stale-design-mocks.js.map +1 -0
  474. package/src/lib/design/system/stale-dist.d.ts +25 -0
  475. package/src/lib/design/system/stale-dist.js +91 -0
  476. package/src/lib/design/system/stale-dist.js.map +1 -0
  477. package/src/lib/design/system/stale-parts.d.ts +30 -0
  478. package/src/lib/design/system/stale-parts.js +106 -0
  479. package/src/lib/design/system/stale-parts.js.map +1 -0
  480. package/src/lib/design/system/surface-nesting.d.ts +11 -0
  481. package/src/lib/design/system/surface-nesting.js +86 -0
  482. package/src/lib/design/system/surface-nesting.js.map +1 -0
  483. package/src/lib/design/system/system-command.js +8 -6
  484. package/src/lib/design/system/system-command.js.map +1 -1
  485. package/src/lib/design/system/system-modules.d.ts +16 -1
  486. package/src/lib/design/system/system-modules.js +18 -2
  487. package/src/lib/design/system/system-modules.js.map +1 -1
  488. package/src/lib/design/system/task-command.d.ts +51 -0
  489. package/src/lib/design/system/task-command.js +233 -0
  490. package/src/lib/design/system/task-command.js.map +1 -0
  491. package/src/lib/design/system/theming-text.d.ts +2 -0
  492. package/src/lib/design/system/theming-text.js +6 -0
  493. package/src/lib/design/system/theming-text.js.map +1 -0
  494. package/src/lib/design/system/tom-confirm.d.ts +40 -0
  495. package/src/lib/design/system/tom-confirm.js +55 -0
  496. package/src/lib/design/system/tom-confirm.js.map +1 -0
  497. package/src/lib/design/system/touched-parts.d.ts +16 -0
  498. package/src/lib/design/system/touched-parts.js +122 -0
  499. package/src/lib/design/system/touched-parts.js.map +1 -0
  500. package/src/lib/design/system/ts-source.d.ts +2 -0
  501. package/src/lib/design/system/ts-source.js +15 -1
  502. package/src/lib/design/system/ts-source.js.map +1 -1
  503. package/src/lib/design/system/unchanged-rows.d.ts +15 -0
  504. package/src/lib/design/system/unchanged-rows.js +134 -0
  505. package/src/lib/design/system/unchanged-rows.js.map +1 -0
  506. package/src/lib/design/system/uncommitted-decisions.d.ts +6 -0
  507. package/src/lib/design/system/uncommitted-decisions.js +38 -0
  508. package/src/lib/design/system/uncommitted-decisions.js.map +1 -0
  509. package/src/lib/design/system/uncovered-regions.d.ts +61 -0
  510. package/src/lib/design/system/uncovered-regions.js +171 -0
  511. package/src/lib/design/system/uncovered-regions.js.map +1 -0
  512. package/src/lib/design/system/unused-base-parts.d.ts +7 -0
  513. package/src/lib/design/system/unused-base-parts.js +76 -0
  514. package/src/lib/design/system/unused-base-parts.js.map +1 -0
  515. package/src/lib/design/system/visible-change-command.d.ts +48 -0
  516. package/src/lib/design/system/visible-change-command.js +308 -0
  517. package/src/lib/design/system/visible-change-command.js.map +1 -0
  518. package/src/lib/design/system/visible-change-parts.d.ts +28 -0
  519. package/src/lib/design/system/visible-change-parts.js +96 -0
  520. package/src/lib/design/system/visible-change-parts.js.map +1 -0
  521. package/src/lib/design/system/visible-change.d.ts +82 -0
  522. package/src/lib/design/system/visible-change.js +149 -0
  523. package/src/lib/design/system/visible-change.js.map +1 -0
  524. package/src/lib/design/thumb.d.ts +19 -2
  525. package/src/lib/design/thumb.js +50 -15
  526. package/src/lib/design/thumb.js.map +1 -1
  527. package/src/lib/design/typecheck.d.ts +1 -1
  528. package/src/lib/design/typecheck.js +3 -3
  529. package/src/lib/design/typecheck.js.map +1 -1
  530. package/src/lib/design/unstable-cells.d.ts +23 -0
  531. package/src/lib/design/unstable-cells.js +40 -0
  532. package/src/lib/design/unstable-cells.js.map +1 -0
  533. package/src/lib/design/variant-diff.js +1 -1
  534. package/src/lib/design/variant-diff.js.map +1 -1
  535. package/src/lib/design/wait.d.ts +15 -0
  536. package/src/lib/design/wait.js +30 -0
  537. package/src/lib/design/wait.js.map +1 -0
  538. package/src/lib/json-file.d.ts +11 -0
  539. package/src/lib/json-file.js +21 -0
  540. package/src/lib/json-file.js.map +1 -0
  541. package/src/lib/source-hash.d.ts +7 -0
  542. package/src/lib/source-hash.js +62 -0
  543. package/src/lib/source-hash.js.map +1 -0
  544. package/src/lib/update/agent-setup.js +2 -1
  545. package/src/lib/update/agent-setup.js.map +1 -1
  546. package/src/lib/update/migration-manifest.d.ts +12 -0
  547. package/src/lib/update/migration-manifest.js +13 -0
  548. package/src/lib/update/migration-manifest.js.map +1 -1
  549. package/src/lib/update/migration-record.js +2 -1
  550. package/src/lib/update/migration-record.js.map +1 -1
  551. package/src/lib/update/pending.js +2 -1
  552. package/src/lib/update/pending.js.map +1 -1
  553. package/src/lib/update/run-migrations.d.ts +3 -2
  554. package/src/lib/update/run-migrations.js +38 -5
  555. package/src/lib/update/run-migrations.js.map +1 -1
  556. package/src/lib/update/tasks.js +2 -1
  557. package/src/lib/update/tasks.js.map +1 -1
@@ -8,38 +8,79 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __rest = (this && this.__rest) || function (s, e) {
12
+ var t = {};
13
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
14
+ t[p] = s[p];
15
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
16
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
17
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
18
+ t[p[i]] = s[p[i]];
19
+ }
20
+ return t;
21
+ };
11
22
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.checkSystemRendered = exports.checkSystem = exports.ruleProblemsOf = exports.ruleLinesOf = void 0;
23
+ exports.checkSystemRendered = exports.checkSystem = exports.staleSketchBasesOf = exports.ruleSummaryText = exports.summaryText = exports.partOfFile = exports.buildReadyInputsOf = exports.ruleProblemsOf = exports.checkRules = exports.ruleLinesOf = exports.warningProblemsOf = void 0;
13
24
  const path_1 = require("path");
25
+ const accepted_pictures_1 = require("./accepted-pictures");
14
26
  const imports_1 = require("./imports");
15
27
  const complete_1 = require("./complete");
28
+ const embedded_actions_1 = require("./embedded-actions");
29
+ const action_lost_1 = require("./action-lost");
30
+ const capability_place_1 = require("./rules/capability-place");
31
+ const action_undeclared_1 = require("./action-undeclared");
32
+ const bespoke_controls_1 = require("./bespoke-controls");
33
+ const dropped_props_1 = require("./dropped-props");
34
+ const drawn_open_points_1 = require("./drawn-open-points");
16
35
  const open_points_1 = require("./open-points");
36
+ const part_go_1 = require("./part-go");
37
+ const part_task_1 = require("./part-task");
17
38
  const part_ready_1 = require("./part-ready");
39
+ const part_build_ready_1 = require("./part-build-ready");
40
+ const actions_command_1 = require("./actions-command");
41
+ const stale_parts_1 = require("./stale-parts");
42
+ const stale_dist_1 = require("./stale-dist");
18
43
  const read_open_points_1 = require("./read-open-points");
19
44
  const resolve_product_1 = require("./resolve-product");
20
45
  const canonical_class_1 = require("./rules/canonical-class");
21
46
  const component_copy_1 = require("./rules/component-copy");
47
+ const denied_class_1 = require("./rules/denied-class");
48
+ const native_title_1 = require("./rules/native-title");
22
49
  const render_check_1 = require("./render-check");
23
50
  const flow_1 = require("./rules/flow");
24
51
  const implements_1 = require("./rules/implements");
52
+ const state_in_component_1 = require("./rules/state-in-component");
53
+ const part_rewrite_1 = require("./rules/part-rewrite");
25
54
  const hard_coded_colour_1 = require("./rules/hard-coded-colour");
26
55
  const interactions_1 = require("./rules/interactions");
27
56
  const kit_outside_pages_1 = require("./rules/kit-outside-pages");
57
+ const inline_ui_in_page_1 = require("./rules/inline-ui-in-page");
28
58
  const inline_svg_1 = require("./rules/inline-svg");
59
+ const top_level_await_1 = require("./rules/top-level-await");
29
60
  const motion_1 = require("./rules/motion");
30
61
  const stale_comment_1 = require("./rules/stale-comment");
62
+ const glued_interpolation_1 = require("./rules/glued-interpolation");
63
+ const undefined_class_1 = require("./rules/undefined-class");
31
64
  const undefined_token_1 = require("./rules/undefined-token");
32
65
  const token_selectors_1 = require("./rules/token-selectors");
33
66
  const upward_dependency_1 = require("./rules/upward-dependency");
34
67
  const svg_asset_1 = require("./rules/svg-asset");
35
68
  const stale_replace_1 = require("./rules/stale-replace");
69
+ const check_rules_1 = require("./check-rules");
36
70
  const unused_shared_export_1 = require("./rules/unused-shared-export");
37
71
  const utility_css_1 = require("./rules/utility-css");
72
+ const orphan_endpoint_1 = require("./rules/orphan-endpoint");
73
+ const sample_default_1 = require("./rules/sample-default");
74
+ const unbound_input_1 = require("./rules/unbound-input");
75
+ const view_coverage_1 = require("./rules/view-coverage");
38
76
  const widths_1 = require("./rules/widths");
39
77
  const check_sketches_1 = require("./sketch/check-sketches");
40
78
  const merged_parts_1 = require("./sketch/merged-parts");
79
+ const stale_base_1 = require("./sketch/stale-base");
41
80
  const sketch_1 = require("./sketch/sketch");
42
81
  const system_tsconfig_1 = require("./system-tsconfig");
82
+ const invocation_1 = require("../../invocation");
83
+ const uncommitted_decisions_1 = require("./uncommitted-decisions");
43
84
  const RULES = [
44
85
  imports_1.importProblemsOf,
45
86
  upward_dependency_1.upwardDependenciesOf,
@@ -54,23 +95,156 @@ const RULES = [
54
95
  stale_comment_1.staleNotesOf,
55
96
  widths_1.badWidthsOf,
56
97
  implements_1.badLinksOf,
98
+ state_in_component_1.statesNotInComponentOf,
99
+ part_rewrite_1.partRewritesOf,
57
100
  interactions_1.unknownInteractionsOf,
58
101
  kit_outside_pages_1.kitOutsidePagesOf,
102
+ inline_ui_in_page_1.inlineUiInPageProblemsOf,
59
103
  flow_1.flowProblemsOf,
60
104
  svg_asset_1.badSvgAssetsOf,
61
105
  inline_svg_1.inlineSvgsOf,
106
+ top_level_await_1.topLevelAwaitsOf,
62
107
  canonical_class_1.canonicalClassesOf,
108
+ undefined_class_1.undefinedClassesOf,
109
+ denied_class_1.deniedClassesOf,
110
+ native_title_1.nativeTitlesOf,
63
111
  utility_css_1.utilityCssOf,
112
+ orphan_endpoint_1.orphanEndpointProblemsOf,
113
+ sample_default_1.sampleDefaultProblemsOf,
114
+ unbound_input_1.unboundInputProblemsOf,
115
+ glued_interpolation_1.gluedInterpolationsOf,
116
+ ];
117
+ const warningProblemsOf = (product) => [
118
+ ...(0, unused_shared_export_1.unusedSharedExportsOf)(product),
119
+ ...(0, stale_replace_1.staleReplacesOf)(product),
120
+ ...(0, token_selectors_1.tokenSelectorsOf)(product),
121
+ ...(0, orphan_endpoint_1.orphanEndpointWarningsOf)(product),
122
+ ...(0, sample_default_1.sampleDefaultWarningsOf)(product),
123
+ ...(0, unbound_input_1.unboundInputWarningsOf)(product),
124
+ ...(0, inline_ui_in_page_1.inlineUiInPageWarningsOf)(product),
64
125
  ];
126
+ exports.warningProblemsOf = warningProblemsOf;
65
127
  const ruleLinesOf = (target, product) => (0, exports.ruleProblemsOf)(product).map((problem) => lineOf(target, problem));
66
128
  exports.ruleLinesOf = ruleLinesOf;
129
+ /** Runs only the static rules of `products` - no draw, no tsc - and prints each problem a product's own files hold; exits 1 on one. */
130
+ const checkRules = (options) => {
131
+ var _a;
132
+ const { target, config } = options;
133
+ let failed = 0;
134
+ for (const name of options.products) {
135
+ const entry = (_a = config.products) === null || _a === void 0 ? void 0 : _a[name];
136
+ if (!entry) {
137
+ console.error(`NO PRODUCT "${name}" in config.json.`);
138
+ failed++;
139
+ continue;
140
+ }
141
+ const product = (0, resolve_product_1.resolveProduct)({ target, name, config: entry });
142
+ const problems = (0, exports.ruleProblemsOf)(product).filter((problem) => !isInBasePart(product, problem.file));
143
+ problems.forEach((problem) => console.error(lineOf(target, problem)));
144
+ failed += problems.length;
145
+ }
146
+ console.log(failed === 0 ? 'No static design rule finds a problem.' : `${failed} problem(s).`);
147
+ return failed === 0 ? 0 : 1;
148
+ };
149
+ exports.checkRules = checkRules;
67
150
  /** Every problem the rules find in a resolved product, its resolution problems first. */
68
151
  const ruleProblemsOf = (product) => [
69
152
  ...product.problems,
70
153
  ...RULES.flatMap((rule) => rule(product)),
71
154
  ];
72
155
  exports.ruleProblemsOf = ruleProblemsOf;
156
+ /** Build-ready inputs from the open points of `points`, read without a draw by default, and the static rules. */
157
+ const buildReadyInputsOf = (product, points = (0, read_open_points_1.readOpenPoints)(product)) => {
158
+ const problems = (0, exports.ruleProblemsOf)(product);
159
+ return {
160
+ pointsOf: (part) => (0, read_open_points_1.partPointsOf)(points, part),
161
+ problemsOf: (part) => problems.filter((problem) => (0, exports.partOfFile)(product, problem.file) === part),
162
+ };
163
+ };
164
+ exports.buildReadyInputsOf = buildReadyInputsOf;
165
+ const withTalliedProblems = (inputs, tally) => (Object.assign(Object.assign({}, inputs), { problemsOf: (part) => {
166
+ var _a, _b;
167
+ const own = inputs.problemsOf(part);
168
+ const ruled = new Set(own.map((problem) => problem.rule));
169
+ const tallied = [...new Set((_b = (_a = tally === null || tally === void 0 ? void 0 : tally.get(part)) === null || _a === void 0 ? void 0 : _a.problems) !== null && _b !== void 0 ? _b : [])].filter((rule) => !ruled.has(rule));
170
+ return [...own, ...tallied.map((rule) => ({ rule, file: '', message: 'found by design check' }))];
171
+ } }));
73
172
  const lineOf = (target, problem) => `${problem.rule} ${(0, path_1.relative)(target, problem.file)}: ${problem.message}`;
173
+ const PRODUCT_LEVEL = '(product)';
174
+ const APP_CODE = 'app code:';
175
+ /** The key of the part whose folder holds `file`, the innermost one, or `(product)` for a file outside every part. */
176
+ const partOfFile = (product, file) => {
177
+ var _a, _b;
178
+ return (_b = (_a = product.parts
179
+ .map((part) => ({ key: (0, resolve_product_1.partKeyOf)(part), dir: (0, path_1.dirname)(part.file) }))
180
+ .filter(({ dir }) => !(0, path_1.relative)(dir, file).startsWith('..'))
181
+ .sort((a, b) => b.dir.length - a.dir.length)[0]) === null || _a === void 0 ? void 0 : _a.key) !== null && _b !== void 0 ? _b : PRODUCT_LEVEL;
182
+ };
183
+ exports.partOfFile = partOfFile;
184
+ /** The tally key of `file`: its part, `(product)` for a design file outside every part, or `app code:<file>` for app code. */
185
+ const tallyKeyOf = (target, { product, file }) => {
186
+ var _a;
187
+ const part = (0, exports.partOfFile)(product, file);
188
+ const inDesign = [product.dir, (_a = product.base) === null || _a === void 0 ? void 0 : _a.dir].some((dir) => dir && !(0, path_1.relative)(dir, file).startsWith('..'));
189
+ return part !== PRODUCT_LEVEL || inDesign ? part : `${APP_CODE}${(0, path_1.relative)(target, file) || '.'}`;
190
+ };
191
+ const tallyOf = (tally, at) => {
192
+ var _a, _b;
193
+ const { product, part } = at;
194
+ if (!tally)
195
+ return null;
196
+ const parts = (_a = tally.get(product)) !== null && _a !== void 0 ? _a : new Map();
197
+ const entry = (_b = parts.get(part)) !== null && _b !== void 0 ? _b : { problems: [], warnings: 0, open: 0 };
198
+ tally.set(product, parts);
199
+ parts.set(part, entry);
200
+ return entry;
201
+ };
202
+ const countText = (count, noun) => `${count} ${noun}${count === 1 ? '' : 's'}`;
203
+ /**
204
+ * One line per part with findings, then one line with the count of clean parts; with `only`, one line for that part
205
+ * even when it is clean.
206
+ */
207
+ const summaryText = (options) => {
208
+ var _a, _b, _c;
209
+ const found = (_a = options.tally.get(options.product)) !== null && _a !== void 0 ? _a : new Map();
210
+ const keys = options.only ? [options.only] : [...new Set([...options.parts, ...found.keys()])];
211
+ const lineOf = (key) => {
212
+ var _a;
213
+ const entry = found.get(key);
214
+ const rules = [...new Set((_a = entry === null || entry === void 0 ? void 0 : entry.problems) !== null && _a !== void 0 ? _a : [])].join(', ');
215
+ const items = [
216
+ ...((entry === null || entry === void 0 ? void 0 : entry.problems.length) ? [`${countText(entry.problems.length, 'problem')} (${rules})`] : []),
217
+ ...((entry === null || entry === void 0 ? void 0 : entry.warnings) ? [countText(entry.warnings, 'warning')] : []),
218
+ ...((entry === null || entry === void 0 ? void 0 : entry.open) ? [countText(entry.open, 'open point')] : []),
219
+ ];
220
+ if (items.length === 0)
221
+ return null;
222
+ return key.startsWith(APP_CODE)
223
+ ? `APP CODE ${options.product} ${key.slice(APP_CODE.length)}: ${items.join(', ')}`
224
+ : `PART ${options.product} ${key}: ${items.join(', ')}`;
225
+ };
226
+ const lines = keys.map((key) => ({ key, line: lineOf(key) }));
227
+ if (options.only)
228
+ return [(_c = (_b = lines[0]) === null || _b === void 0 ? void 0 : _b.line) !== null && _c !== void 0 ? _c : `PART ${options.product} ${options.only}: clean`];
229
+ const clean = lines.filter(({ key, line }) => line === null && key !== PRODUCT_LEVEL && !key.startsWith(APP_CODE)).length;
230
+ return [
231
+ ...lines.flatMap(({ line }) => (line ? [line] : [])),
232
+ `PARTS ${options.product}: ${clean} of ${options.parts.length} clean`,
233
+ ...(options.done === undefined ? [] : [`DONE ${options.product}: ${options.done} of ${options.parts.length}`]),
234
+ ];
235
+ };
236
+ exports.summaryText = summaryText;
237
+ /** One line per rule with how many problems this run found, zeros included, rules outside `CHECK_RULES` after them. */
238
+ const ruleSummaryText = (tally) => {
239
+ var _a;
240
+ const counts = new Map(check_rules_1.CHECK_RULES.map((rule) => [rule, 0]));
241
+ for (const parts of tally.values())
242
+ for (const { problems } of parts.values())
243
+ for (const rule of problems)
244
+ counts.set(rule, ((_a = counts.get(rule)) !== null && _a !== void 0 ? _a : 0) + 1);
245
+ return [...counts].map(([rule, n]) => `${rule} ${n}`);
246
+ };
247
+ exports.ruleSummaryText = ruleSummaryText;
74
248
  const typecheckOpenSketches = (options) => (0, sketch_1.listSketches)({ productDir: options.product.dir, product: options.product.name }).flatMap((sketch) => typeof sketch === 'string'
75
249
  ? []
76
250
  : sketch.variants.flatMap((variant) => {
@@ -85,13 +259,39 @@ const typecheckOpenSketches = (options) => (0, sketch_1.listSketches)({ productD
85
259
  },
86
260
  ];
87
261
  }));
262
+ /**
263
+ * One SKETCH-BASE-STALE problem, with its printed line, per undiscarded sketch (open or picked) whose base changed since it was drawn or
264
+ * rebased; with `parts`, only the sketches where one of those parts changed; with `targets`, only the sketches on those targets.
265
+ */
266
+ const staleSketchBasesOf = (options) => {
267
+ const { product, invocation, parts, targets } = options;
268
+ return (0, sketch_1.listSketches)({ productDir: product.dir, product: product.name }).flatMap((sketch) => {
269
+ var _a;
270
+ if (typeof sketch === 'string' || ((_a = sketch.decision) === null || _a === void 0 ? void 0 : _a.kind) === 'discard')
271
+ return [];
272
+ if (targets && !targets.has(sketch.target))
273
+ return [];
274
+ const changed = (0, stale_base_1.staleBaseOf)({ product, sketch });
275
+ if (!(changed === null || changed === void 0 ? void 0 : changed.length) || (parts && !changed.some((part) => parts.has(part))))
276
+ return [];
277
+ const message = `${changed.join(', ')} changed since the sketch was drawn - bring each variant up to date, then run ${invocation} sketch rebase ${sketch.target} --product ${product.name} --by <model id>`;
278
+ return [
279
+ {
280
+ rule: 'SKETCH-BASE-STALE',
281
+ file: sketch.dir,
282
+ message,
283
+ line: `SKETCH-BASE-STALE ${product.name} ${sketch.target}: ${message}`,
284
+ },
285
+ ];
286
+ });
287
+ };
288
+ exports.staleSketchBasesOf = staleSketchBasesOf;
88
289
  const warnChangedOutsideSketch = (product) => {
89
290
  for (const part of (0, merged_parts_1.changedOutsideSketchOf)(product))
90
291
  console.warn(`WARNING ${product.name} ${part} changed outside a sketch - every change to a merged part goes through a sketch, with one variant when there is no choice`);
91
292
  };
92
293
  const isInBasePart = (product, file) => product.parts.some((part) => part.origin === 'base' && !(0, path_1.relative)((0, path_1.dirname)(part.file), file).startsWith('..'));
93
294
  const isBasePartKey = (product, key) => { var _a; return ((_a = product.parts.find((part) => (0, resolve_product_1.partKeyOf)(part) === key)) === null || _a === void 0 ? void 0 : _a.origin) === 'base'; };
94
- const ownerPartOf = (issue) => { var _a, _b; return (_b = (_a = [...issue.path.matchAll(/\[data-et-part=([^\]]+)\]/gu)].pop()) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : issue.part; };
95
295
  const printBaseFindings = (product, rules) => {
96
296
  var _a;
97
297
  if (rules.length === 0 || !product.base)
@@ -105,49 +305,75 @@ const printBaseFindings = (product, rules) => {
105
305
  console.log(`${rules.length} finding${rules.length === 1 ? '' : 's'} in base product ${product.base.name} (${perRule.join(', ')}) - they do not block this product; run et design check --product ${product.base.name} for the base's own`);
106
306
  };
107
307
  const reportSystem = (options) => {
108
- var _a;
308
+ var _a, _b;
109
309
  const { target, config, products } = options;
110
310
  const declared = (_a = config.products) !== null && _a !== void 0 ? _a : {};
111
311
  let failed = false;
112
- const report = (problem) => {
113
- var _a, _b;
114
- const line = lineOf(target, problem);
115
- if ((_a = options.known) === null || _a === void 0 ? void 0 : _a.includes(line)) {
312
+ const report = (problem, product) => {
313
+ var _a, _b, _c;
314
+ const line = (_a = problem.line) !== null && _a !== void 0 ? _a : lineOf(target, problem);
315
+ if ((_b = options.known) === null || _b === void 0 ? void 0 : _b.includes(line)) {
116
316
  console.warn(`NOTE (was there before) ${line}`);
117
317
  return;
118
318
  }
119
319
  console.error(line);
120
320
  failed = true;
121
- (_b = options.blocking) === null || _b === void 0 ? void 0 : _b.push(problem.rule);
321
+ (_c = tallyOf(options.tally, {
322
+ product: product.name,
323
+ part: tallyKeyOf(target, { product, file: problem.file }),
324
+ })) === null || _c === void 0 ? void 0 : _c.problems.push(problem.rule);
122
325
  };
123
326
  for (const name of products) {
124
327
  const entry = declared[name];
125
328
  if (!entry) {
126
329
  console.error(`NO PRODUCT "${name}" - config.json declares ${Object.keys(declared).join(', ') || 'none'}.`);
127
- return 1;
330
+ return { code: 1, fatal: true };
128
331
  }
129
332
  const product = (0, resolve_product_1.resolveProduct)({ target, name, config: entry });
130
- if (options.warn)
333
+ if (options.part && !product.parts.some((part) => (0, resolve_product_1.partKeyOf)(part) === options.part)) {
334
+ console.error(`NO PART "${options.part}" in product ${name}.`);
335
+ return { code: 1, fatal: true };
336
+ }
337
+ if (options.warn && !options.part)
131
338
  warnChangedOutsideSketch(product);
132
- (0, stale_comment_1.goneSketchCommentWarningsOf)(product).forEach((warning) => console.warn(warning));
133
- const isOwn = (problem) => !isInBasePart(product, problem.file);
134
- const warnings = [...(0, unused_shared_export_1.unusedSharedExportsOf)(product), ...(0, stale_replace_1.staleReplacesOf)(product), ...(0, token_selectors_1.tokenSelectorsOf)(product)];
339
+ const uncommitted = options.warn ? (0, uncommitted_decisions_1.uncommittedDecisionsWarningOf)(product) : null;
340
+ if (uncommitted)
341
+ console.warn(uncommitted);
342
+ if (!options.part)
343
+ (0, stale_comment_1.goneSketchCommentWarningsOf)(product).forEach((warning) => console.warn(warning));
344
+ const isWanted = (problem) => !options.part || (0, exports.partOfFile)(product, problem.file) === options.part;
345
+ const isOwn = (problem) => !isInBasePart(product, problem.file) && isWanted(problem);
346
+ const warnings = (0, exports.warningProblemsOf)(product);
135
347
  const problems = (0, exports.ruleProblemsOf)(product);
136
- warnings.filter(isOwn).forEach((problem) => console.warn(`WARNING ${lineOf(target, problem)}`));
137
- problems.filter(isOwn).forEach(report);
138
- printBaseFindings(product, problems.filter((problem) => !isOwn(problem)).map((problem) => problem.rule));
348
+ warnings.filter(isOwn).forEach((problem) => {
349
+ console.warn(`WARNING ${lineOf(target, problem)}`);
350
+ const counted = tallyOf(options.tally, {
351
+ product: name,
352
+ part: tallyKeyOf(target, { product, file: problem.file }),
353
+ });
354
+ if (counted)
355
+ counted.warnings += 1;
356
+ });
357
+ problems.filter(isOwn).forEach((problem) => report(problem, product));
358
+ if (!options.part)
359
+ printBaseFindings(product, problems.filter((problem) => !isOwn(problem)).map((problem) => problem.rule));
139
360
  (0, system_tsconfig_1.writeEditorTsconfig)({ target, product });
140
361
  const result = (0, system_tsconfig_1.typecheckProduct)({ target, product });
141
362
  if (result.kind === 'unavailable') {
142
363
  console.error(result.message);
143
- return 1;
364
+ return { code: 1, fatal: true };
144
365
  }
145
366
  if (result.kind === 'failed')
146
- report({ rule: 'TYPE-ERROR', file: product.dir, message: `\n${result.output}` });
147
- if (options.warn)
148
- typecheckOpenSketches({ target, product }).forEach(report);
367
+ report({ rule: 'TYPE-ERROR', file: product.dir, message: `\n${result.output}` }, product);
368
+ if (options.warn && !options.part)
369
+ typecheckOpenSketches({ target, product }).forEach((problem) => report(problem, product));
370
+ if (options.warn && !options.part)
371
+ (0, exports.staleSketchBasesOf)({
372
+ product,
373
+ invocation: (_b = options.invocation) !== null && _b !== void 0 ? _b : (0, invocation_1.repoInvocation)({ root: target, subcommand: 'design' }),
374
+ }).forEach((problem) => report(problem, product));
149
375
  }
150
- return failed ? 1 : 0;
376
+ return { code: failed ? 1 : 0, fatal: false };
151
377
  };
152
378
  /**
153
379
  * Checks the design system of each named product: the rules, then `tsc --noEmit` over its
@@ -155,87 +381,272 @@ const reportSystem = (options) => {
155
381
  * product takes from its base are counted in one line and do not fail it.
156
382
  */
157
383
  const checkSystem = (options) => {
158
- const code = reportSystem(options);
384
+ const { code } = reportSystem(options);
159
385
  if (code === 0)
160
386
  console.log('ok');
161
387
  return code;
162
388
  };
163
389
  exports.checkSystem = checkSystem;
164
- const drawnMissingStatesOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
165
- const parts = options.product.parts
166
- .filter((part) => part.layer !== 'pages' && part.layer !== 'foundations')
167
- .map(resolve_product_1.partKeyOf);
168
- const checked = yield (0, complete_1.partsCompletenessOf)(Object.assign(Object.assign({}, options), { parts }));
169
- if ('unavailable' in checked) {
170
- console.log(`COMPLETE CHECK SKIPPED - ${checked.unavailable}`);
171
- return [];
390
+ const cannotDrawLine = (options) => `CANNOT DRAW ${options.product} ${options.line} - et design ready refuses the part until it draws`;
391
+ const countCannotDraw = (options) => {
392
+ for (const part of (0, drawn_open_points_1.statefulPartsOf)(options.product, options.part ? [options.part] : null)) {
393
+ console.log(cannotDrawLine({ product: options.product.name, line: `${part}: ${options.why}` }));
394
+ const counted = tallyOf(options.tally, { product: options.product.name, part });
395
+ if (counted)
396
+ counted.open += 1;
397
+ }
398
+ };
399
+ const drawnFindingsFor = (options) => __awaiter(void 0, void 0, void 0, function* () {
400
+ const { product, rendered, busy } = options;
401
+ const stateful = (0, drawn_open_points_1.statefulPartsOf)(product, options.part ? [options.part] : null);
402
+ let gaps = null;
403
+ if (stateful.length > 0) {
404
+ const checked = yield (0, complete_1.partsCompletenessOf)(Object.assign(Object.assign({}, options), { parts: stateful }));
405
+ if ('unavailable' in checked) {
406
+ console.log(`COMPLETE CHECK SKIPPED - ${checked.unavailable}`);
407
+ countCannotDraw(Object.assign(Object.assign({}, options), { why: checked.unavailable }));
408
+ }
409
+ else {
410
+ for (const hint of [...checked.hints.values()].flat())
411
+ console.log(hint);
412
+ gaps = checked.gaps;
413
+ }
172
414
  }
173
- for (const hint of [...checked.hints.values()].flat())
174
- console.log(hint);
175
- return (0, read_open_points_1.missingStatesOf)(checked.gaps);
415
+ const _a = (0, drawn_open_points_1.drawnFindingsFrom)({ product, issues: rendered, busy, gaps, stateful }), { failed } = _a, findings = __rest(_a, ["failed"]);
416
+ for (const line of failed) {
417
+ console.log(cannotDrawLine({ product: product.name, line }));
418
+ const counted = tallyOf(options.tally, { product: product.name, part: line.slice(0, line.indexOf(':')) });
419
+ if (counted)
420
+ counted.open += 1;
421
+ }
422
+ return findings;
176
423
  });
177
424
  const printOpenPoints = (options) => __awaiter(void 0, void 0, void 0, function* () {
178
- var _a;
425
+ var _a, _b, _c, _d;
179
426
  const { target, config, products, rendered } = options;
180
427
  for (const name of products) {
181
428
  const entry = (_a = config.products) === null || _a === void 0 ? void 0 : _a[name];
182
429
  if (!entry)
183
430
  continue;
184
431
  const product = (0, resolve_product_1.resolveProduct)({ target, name, config: entry });
185
- const findings = rendered === null
432
+ const findings = rendered === null ? {} : yield drawnFindingsFor(Object.assign(Object.assign({}, options), { product, rendered }));
433
+ if (rendered === null && options.notDrawn)
434
+ countCannotDraw(Object.assign(Object.assign({}, options), { product, why: options.notDrawn }));
435
+ const allPoints = (0, read_open_points_1.readOpenPoints)(product, findings);
436
+ const points = allPoints.filter(({ part }) => !options.part || part === options.part);
437
+ for (const { part, points: ofPart } of points) {
438
+ const counted = tallyOf(options.tally, { product: name, part });
439
+ if (counted)
440
+ counted.open += ofPart.length;
441
+ }
442
+ (0, open_points_1.openPointsText)(name, points).forEach((line) => console.log(line));
443
+ if (!options.part)
444
+ (0, view_coverage_1.uncoveredViewsText)(name, (0, view_coverage_1.uncoveredViewsOf)(product)).forEach((line) => console.log(line));
445
+ const unlinked = (0, read_open_points_1.unlinkedPartsOf)(product).filter((part) => !options.part || part === options.part);
446
+ if (unlinked.length > 0)
447
+ console.log(`UNLINKED ${name}: ${unlinked.join(', ')}`);
448
+ (0, read_open_points_1.instantLinesOf)(product, options.part
449
+ ? [options.part]
450
+ : product.parts.filter((part) => part.origin !== 'base').map((part) => (0, resolve_product_1.partKeyOf)(part))).forEach((line) => console.log(line));
451
+ const upgraded = (0, stale_parts_1.upgradeLegacyMarksOf)({ product, only: options.part });
452
+ if (upgraded.length > 0)
453
+ console.log(`REHASHED ${name}: ${upgraded.map(({ part, marks }) => `${part} (${marks.join(', ')})`).join(', ')}`);
454
+ yield (0, part_build_ready_1.recordBuildReady)(Object.assign({ product, parts: options.part
455
+ ? [options.part]
456
+ : product.parts.filter((part) => part.origin !== 'base').map((part) => (0, resolve_product_1.partKeyOf)(part)), inputs: withTalliedProblems((0, exports.buildReadyInputsOf)(product, allPoints), (_b = options.tally) === null || _b === void 0 ? void 0 : _b.get(name)) }, (rendered === null
186
457
  ? {}
187
- : {
188
- contrasts: (0, read_open_points_1.contrastsOf)(rendered.filter((issue) => issue.product === name && issue.sketch === null)),
189
- missingStates: options.complete ? yield drawnMissingStatesOf(Object.assign(Object.assign({}, options), { product })) : undefined,
190
- };
191
- (0, open_points_1.openPointsText)(name, (0, read_open_points_1.readOpenPoints)(product, findings)).forEach((line) => console.log(line));
192
- const ready = (0, part_ready_1.readyPartsOf)(product);
458
+ : { actionsOf: (part) => (0, actions_command_1.partActionFailuresOf)({ target, config, product, part }) })));
459
+ const ready = (0, part_ready_1.readyPartsOf)(product).filter((key) => !options.part || key === options.part);
193
460
  if (ready.length > 0)
194
461
  console.log(`READY ${name}: ${ready.join(', ')}`);
462
+ for (const part of ready) {
463
+ const embedded = (0, part_ready_1.actionsRerunOf)({ product, part });
464
+ if (embedded.length === 0)
465
+ continue;
466
+ console.log((0, embedded_actions_1.actionsRerunLineOf)({ product: name, part, embedded }));
467
+ const counted = tallyOf(options.tally, { product: name, part });
468
+ if (counted)
469
+ counted.open += 1;
470
+ }
471
+ const go = (0, part_go_1.goPartsOf)(product).filter((key) => !options.part || key === options.part);
472
+ if (go.length > 0)
473
+ console.log(`GO ${name}: ${go.join(', ')}`);
474
+ for (const part of go) {
475
+ const review = (_d = (_c = (0, part_go_1.goMarkOf)({ product, part })) === null || _c === void 0 ? void 0 : _c.review) !== null && _d !== void 0 ? _d : [];
476
+ if (review.length > 0)
477
+ console.log((0, accepted_pictures_1.newStatesLineOf)({ product: name, part, states: review }));
478
+ }
479
+ (0, stale_parts_1.stalePartsOf)({ product, only: options.part }).forEach((stale) => console.log((0, stale_parts_1.staleLineOf)(name, stale)));
195
480
  }
196
481
  });
197
- const countsOf = (values) => [...new Set(values)].map((value) => `${value} ${values.filter((other) => other === value).length}`).join(', ');
198
- const blockedRenderLineOf = (blocking) => `RENDER CHECK NOT RUN - ${blocking.length} problem${blocking.length === 1 ? '' : 's'} above stop it (${countsOf(blocking)}); the open points list no contrasts or missing states until they are fixed`;
482
+ const notCheckedLineOf = (options) => `NOT CHECKED ${options.product} render rules on ${options.parts} - ${options.why}`;
483
+ const printUndrawn = (issues) => {
484
+ for (const product of new Set(issues.map((issue) => issue.product))) {
485
+ const own = issues.filter((issue) => issue.product === product);
486
+ const parts = [...new Set(own.filter(drawn_open_points_1.isPartUndrawn).map((issue) => issue.part))];
487
+ const states = [
488
+ ...new Set(own
489
+ .filter((issue) => (0, drawn_open_points_1.isStateUndrawn)(issue) && !parts.includes(issue.part))
490
+ .map((issue) => `${issue.part} state ${issue.state}`)),
491
+ ];
492
+ if (parts.length > 0)
493
+ console.log(notCheckedLineOf({
494
+ product,
495
+ parts: `${countText(parts.length, 'part')}: ${parts.join(', ')}`,
496
+ why: `${parts.length === 1 ? 'it' : 'they'} did not draw, see RENDER above`,
497
+ }));
498
+ states.forEach((state) => console.log(notCheckedLineOf({ product, parts: state, why: 'it did not draw, see RENDER above' })));
499
+ }
500
+ };
199
501
  const renderSystem = (options) => __awaiter(void 0, void 0, void 0, function* () {
200
- const blocking = [];
201
- const code = reportSystem(Object.assign(Object.assign({}, options), { warn: true, blocking }));
202
- if (code !== 0) {
203
- if (blocking.length > 0)
204
- console.error(blockedRenderLineOf(blocking));
502
+ const { code, fatal } = reportSystem(Object.assign(Object.assign({}, options), { warn: true }));
503
+ if (fatal)
205
504
  return { code, rendered: null };
206
- }
207
- const rendered = yield (0, render_check_1.renderIssuesOf)(Object.assign(Object.assign({}, options), { jobs: options.products.map((product) => ({ product, sketch: null, parts: null })) }));
208
- if ('unavailable' in rendered) {
209
- console.log(`RENDER CHECK SKIPPED - ${rendered.unavailable}`);
210
- return { code: 0, rendered: null };
211
- }
505
+ const rendered = yield (0, render_check_1.renderIssuesOf)(Object.assign(Object.assign({}, options), { onProgress: (line) => console.log(line), jobs: options.products.map((product) => ({ product, sketch: null, parts: options.part ? [options.part] : null })) }));
212
506
  const resolved = options.products.flatMap((name) => {
213
507
  var _a;
214
508
  const entry = (_a = options.config.products) === null || _a === void 0 ? void 0 : _a[name];
215
509
  return entry ? [(0, resolve_product_1.resolveProduct)({ target: options.target, name, config: entry })] : [];
216
510
  });
217
- const isInBase = (issue) => resolved.some((product) => product.name === issue.product && isBasePartKey(product, ownerPartOf(issue)));
218
- const issues = rendered.issues.filter((issue) => !isInBase(issue));
511
+ if ('unavailable' in rendered) {
512
+ const ci = Boolean(process.env['CI']);
513
+ if (ci)
514
+ console.log(`RENDER CHECK SKIPPED - ${rendered.unavailable}`);
515
+ else
516
+ console.log(`RENDER CHECK FAILED - no usable browser: ${rendered.unavailable}`);
517
+ for (const product of resolved) {
518
+ const parts = product.parts
519
+ .filter((part) => part.origin !== 'base')
520
+ .map(resolve_product_1.partKeyOf)
521
+ .filter((key) => !options.part || key === options.part);
522
+ if (parts.length > 0)
523
+ console.log(notCheckedLineOf({
524
+ product: product.name,
525
+ parts: parts.length === 1 ? `1 part: ${parts[0]}` : `all ${parts.length} parts`,
526
+ why: rendered.unavailable,
527
+ }));
528
+ }
529
+ return { code: ci ? code : 1, rendered: null, notDrawn: rendered.unavailable };
530
+ }
531
+ const isInBase = (issue) => resolved.some((product) => product.name === issue.product && isBasePartKey(product, (0, render_check_1.ownerPartOf)(issue)));
532
+ const underGo = (0, action_undeclared_1.actionUndeclaredUnderGoOf)({
533
+ issues: rendered.issues.filter((issue) => !isInBase(issue)),
534
+ isGo: ({ product, part }) => {
535
+ const found = resolved.find((candidate) => candidate.name === product);
536
+ return found !== undefined && (0, part_ready_1.readyMarkOf)({ product: found, part }) !== null;
537
+ },
538
+ });
539
+ const { issues } = underGo;
540
+ underGo.warnings.forEach(({ product, part, line }) => {
541
+ console.warn(line);
542
+ const counted = tallyOf(options.tally, { product, part });
543
+ if (counted)
544
+ counted.warnings += 1;
545
+ });
219
546
  rendered.warnings
220
547
  .filter((issue) => !isInBase(issue))
221
- .forEach((issue) => console.warn(`WARNING ${(0, render_check_1.renderIssueLineOf)(issue)}`));
222
- issues.forEach((issue) => console.error((0, render_check_1.renderIssueLineOf)(issue)));
223
- for (const product of resolved)
224
- printBaseFindings(product, rendered.issues.filter((issue) => issue.product === product.name && isInBase(issue)).map((issue) => issue.rule));
225
- return { code: issues.length > 0 ? 1 : 0, rendered: issues };
548
+ .forEach((issue) => {
549
+ console.warn(`WARNING ${(0, render_check_1.renderIssueLineOf)(issue)}`);
550
+ const counted = tallyOf(options.tally, { product: issue.product, part: (0, render_check_1.ownerPartOf)(issue) });
551
+ if (counted)
552
+ counted.warnings += 1;
553
+ });
554
+ issues.forEach((issue) => {
555
+ var _a;
556
+ console.error((0, render_check_1.renderIssueLineOf)(issue));
557
+ (_a = tallyOf(options.tally, { product: issue.product, part: (0, render_check_1.ownerPartOf)(issue) })) === null || _a === void 0 ? void 0 : _a.problems.push(issue.rule);
558
+ });
559
+ printUndrawn(issues.filter((issue) => (0, drawn_open_points_1.isPartUndrawn)(issue) || (0, drawn_open_points_1.isStateUndrawn)(issue)));
560
+ if (!options.part)
561
+ for (const product of resolved)
562
+ printBaseFindings(product, rendered.issues.filter((issue) => issue.product === product.name && isInBase(issue)).map((issue) => issue.rule));
563
+ return { code: code !== 0 || issues.length > 0 ? 1 : 0, rendered: issues, busy: rendered.busy };
226
564
  });
227
565
  /**
228
566
  * Checks as `checkSystem` does, then draws every state in a headless browser and prints one line per
229
- * render rule a drawing breaks, and warns of each merged part that changed outside a sketch. Without a browser it prints one skip line and passes on the other checks.
230
- * It then lists the open points of each product's parts, with the contrasts the drawing found and, with `complete`,
231
- * the missing states of each component part as `design complete` draws them; they do not change the exit code.
567
+ * render rule a drawing breaks, also when a static rule failed, and warns of each merged part that changed outside a sketch. A part that does not
568
+ * draw, each state that does not draw, or every part without a browser, gets one `NOT CHECKED` line; without a browser it passes on the other checks.
569
+ * It then lists the open points of each product's parts, with the contrasts the drawing found and the missing states
570
+ * of each component part as `design complete` draws them, the blockers `design ready` refuses on; they do not change
571
+ * the exit code.
232
572
  */
233
573
  const checkSystemRendered = (options) => __awaiter(void 0, void 0, void 0, function* () {
234
- const { code, rendered } = yield renderSystem(options);
235
- yield printOpenPoints(Object.assign(Object.assign({}, options), { rendered }));
236
- if (code === 0)
574
+ var _a, _b, _c, _d, _e, _f;
575
+ const tally = new Map();
576
+ const counted = Object.assign(Object.assign({}, options), { tally });
577
+ for (const line of (0, stale_dist_1.staleDistWarningsOf)(options))
578
+ console.warn(line);
579
+ const editProblems = new Map();
580
+ for (const name of options.products) {
581
+ const entry = (_a = options.config.products) === null || _a === void 0 ? void 0 : _a[name];
582
+ if (!entry)
583
+ continue;
584
+ const product = (0, resolve_product_1.resolveProduct)({ target: options.target, name, config: entry });
585
+ const problems = [];
586
+ const lines = yield (0, accepted_pictures_1.autoAcceptOf)(Object.assign(Object.assign({}, options), { product, only: options.part, draw: options.drawPictures, problems }));
587
+ editProblems.set(name, problems);
588
+ lines.forEach((line) => console.log(line));
589
+ }
590
+ const { code, rendered, busy, notDrawn } = yield renderSystem(counted);
591
+ yield printOpenPoints(Object.assign(Object.assign({}, counted), { rendered, busy, notDrawn }));
592
+ let failed = 0;
593
+ let partsTotal = 0;
594
+ for (const name of options.products) {
595
+ const entry = (_b = options.config.products) === null || _b === void 0 ? void 0 : _b[name];
596
+ if (!entry)
597
+ continue;
598
+ const resolved = (0, resolve_product_1.resolveProduct)({ target: options.target, name, config: entry });
599
+ const capabilities = yield (0, capability_place_1.capabilityPlaceOf)(Object.assign(Object.assign({}, options), { product: resolved }));
600
+ const isWanted = (problem) => !options.part || (0, exports.partOfFile)(resolved, problem.file) === options.part;
601
+ capabilities.warnings.filter(isWanted).forEach((warning) => {
602
+ console.warn(`WARNING ${lineOf(options.target, warning)}`);
603
+ const counted = tallyOf(tally, {
604
+ product: name,
605
+ part: tallyKeyOf(options.target, { product: resolved, file: warning.file }),
606
+ });
607
+ if (counted)
608
+ counted.warnings += 1;
609
+ });
610
+ const problems = [
611
+ ...(yield (0, dropped_props_1.droppedPropProblemsOf)(Object.assign(Object.assign({}, options), { product: resolved }))),
612
+ ...(yield (0, bespoke_controls_1.bespokeControlProblemsOf)(Object.assign(Object.assign({}, options), { product: resolved }))),
613
+ ...(yield (0, action_lost_1.actionLostProblemsOf)(Object.assign(Object.assign({}, options), { product: resolved, invocation: (_c = options.invocation) !== null && _c !== void 0 ? _c : (0, invocation_1.repoInvocation)({ root: options.target, subcommand: 'design' }) }))),
614
+ ...capabilities.errors,
615
+ ...((_d = editProblems.get(name)) !== null && _d !== void 0 ? _d : []),
616
+ ].filter(isWanted);
617
+ for (const problem of problems) {
618
+ console.error(lineOf(options.target, problem));
619
+ (_e = tallyOf(tally, {
620
+ product: name,
621
+ part: tallyKeyOf(options.target, { product: resolved, file: problem.file }),
622
+ })) === null || _e === void 0 ? void 0 : _e.problems.push(problem.rule);
623
+ }
624
+ failed += problems.length;
625
+ }
626
+ for (const name of options.products) {
627
+ const entry = (_f = options.config.products) === null || _f === void 0 ? void 0 : _f[name];
628
+ if (!entry)
629
+ continue;
630
+ const resolved = (0, resolve_product_1.resolveProduct)({ target: options.target, name, config: entry });
631
+ const parts = resolved.parts.filter((part) => part.origin !== 'base').map(resolve_product_1.partKeyOf);
632
+ partsTotal += options.part ? parts.filter((key) => key === options.part).length : parts.length;
633
+ (0, exports.summaryText)({
634
+ product: name,
635
+ parts,
636
+ tally,
637
+ only: options.part,
638
+ done: (0, part_task_1.doneParts)({ product: resolved, parts }).length,
639
+ }).forEach((line) => console.log(line));
640
+ }
641
+ const exit = code !== 0 || failed > 0 ? 1 : 0;
642
+ if (exit === 0)
237
643
  console.log('ok');
238
- return code;
644
+ (0, exports.ruleSummaryText)(tally).forEach((line) => console.log(line));
645
+ const findings = [...tally.values()]
646
+ .flatMap((found) => [...found.values()])
647
+ .reduce((n, e) => n + e.problems.length, 0);
648
+ console.log(`check complete: ${countText(partsTotal, 'part')}, ${countText(findings, 'finding')}`);
649
+ return exit;
239
650
  });
240
651
  exports.checkSystemRendered = checkSystemRendered;
241
652
  //# sourceMappingURL=check-system.js.map