@ethlete/cli 3.0.0-next.25 → 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 (592) hide show
  1. package/CHANGELOG.md +417 -0
  2. package/build-info.json +1 -0
  3. package/design/define-call.ts +99 -31
  4. package/design/define-part.ts +50 -3
  5. package/design/icon-sheet.ts +1 -1
  6. package/design/interaction-rows.ts +13 -6
  7. package/design/logo-sheet.ts +52 -0
  8. package/design/mark-part.ts +51 -1
  9. package/design/motion-drive.ts +215 -0
  10. package/design/motion-runtime.ts +14 -2
  11. package/design/motion-tokens.ts +177 -0
  12. package/design/token-sheet.ts +1 -1
  13. package/design/web/frame-fill.ts +4 -0
  14. package/design/web/frame-fit.ts +7 -0
  15. package/design/web/frame-scheme.ts +44 -0
  16. package/design/web/frame-surfaces.ts +294 -0
  17. package/design/web/frame.ts +162 -43
  18. package/design/web/surface-interactive.css +42 -0
  19. package/design/with-action.ts +29 -0
  20. package/package.json +3 -1
  21. package/src/index.js +9 -1
  22. package/src/index.js.map +1 -1
  23. package/src/lib/design/asset-shot.js +2 -2
  24. package/src/lib/design/asset-shot.js.map +1 -1
  25. package/src/lib/design/build-watch.d.ts +26 -0
  26. package/src/lib/design/build-watch.js +138 -0
  27. package/src/lib/design/build-watch.js.map +1 -0
  28. package/src/lib/design/calls-tsconfig.d.ts +2 -0
  29. package/src/lib/design/calls-tsconfig.js +10 -3
  30. package/src/lib/design/calls-tsconfig.js.map +1 -1
  31. package/src/lib/design/check.d.ts +1 -0
  32. package/src/lib/design/check.js +195 -13
  33. package/src/lib/design/check.js.map +1 -1
  34. package/src/lib/design/commit-hunks.d.ts +22 -0
  35. package/src/lib/design/commit-hunks.js +173 -0
  36. package/src/lib/design/commit-hunks.js.map +1 -0
  37. package/src/lib/design/contact-sheet.d.ts +9 -0
  38. package/src/lib/design/contact-sheet.js +38 -4
  39. package/src/lib/design/contact-sheet.js.map +1 -1
  40. package/src/lib/design/design-command.d.ts +2 -0
  41. package/src/lib/design/design-command.js +183 -15
  42. package/src/lib/design/design-command.js.map +1 -1
  43. package/src/lib/design/draw-ledger.d.ts +36 -0
  44. package/src/lib/design/draw-ledger.js +52 -0
  45. package/src/lib/design/draw-ledger.js.map +1 -0
  46. package/src/lib/design/force-interactions.d.ts +1 -1
  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/inbox-command.js +9 -5
  50. package/src/lib/design/inbox-command.js.map +1 -1
  51. package/src/lib/design/mcp-command.d.ts +28 -3
  52. package/src/lib/design/mcp-command.js +134 -21
  53. package/src/lib/design/mcp-command.js.map +1 -1
  54. package/src/lib/design/merge-compare.d.ts +10 -2
  55. package/src/lib/design/merge-compare.js +63 -11
  56. package/src/lib/design/merge-compare.js.map +1 -1
  57. package/src/lib/design/motion-command.js +10 -16
  58. package/src/lib/design/motion-command.js.map +1 -1
  59. package/src/lib/design/motion-shot.js +3 -2
  60. package/src/lib/design/motion-shot.js.map +1 -1
  61. package/src/lib/design/new-call.js +19 -10
  62. package/src/lib/design/new-call.js.map +1 -1
  63. package/src/lib/design/part-marks.d.ts +3 -2
  64. package/src/lib/design/part-marks.js +13 -5
  65. package/src/lib/design/part-marks.js.map +1 -1
  66. package/src/lib/design/paths.d.ts +42 -0
  67. package/src/lib/design/paths.js +50 -1
  68. package/src/lib/design/paths.js.map +1 -1
  69. package/src/lib/design/product-command.d.ts +1 -1
  70. package/src/lib/design/product-command.js +12 -14
  71. package/src/lib/design/product-command.js.map +1 -1
  72. package/src/lib/design/ready-shots.d.ts +29 -3
  73. package/src/lib/design/ready-shots.js +105 -5
  74. package/src/lib/design/ready-shots.js.map +1 -1
  75. package/src/lib/design/render-packages.d.ts +9 -17
  76. package/src/lib/design/render-packages.js +25 -63
  77. package/src/lib/design/render-packages.js.map +1 -1
  78. package/src/lib/design/render-worker.js +2 -3
  79. package/src/lib/design/render-worker.js.map +1 -1
  80. package/src/lib/design/render.d.ts +2 -0
  81. package/src/lib/design/render.js +32 -7
  82. package/src/lib/design/render.js.map +1 -1
  83. package/src/lib/design/serve.d.ts +23 -3
  84. package/src/lib/design/serve.js +288 -35
  85. package/src/lib/design/serve.js.map +1 -1
  86. package/src/lib/design/server-identity.d.ts +36 -0
  87. package/src/lib/design/server-identity.js +68 -0
  88. package/src/lib/design/server-identity.js.map +1 -0
  89. package/src/lib/design/settle-frames.d.ts +4 -0
  90. package/src/lib/design/settle-frames.js +22 -0
  91. package/src/lib/design/settle-frames.js.map +1 -0
  92. package/src/lib/design/shot-command.d.ts +30 -6
  93. package/src/lib/design/shot-command.js +144 -56
  94. package/src/lib/design/shot-command.js.map +1 -1
  95. package/src/lib/design/shot-store.d.ts +24 -0
  96. package/src/lib/design/shot-store.js +120 -0
  97. package/src/lib/design/shot-store.js.map +1 -0
  98. package/src/lib/design/shot.d.ts +71 -1
  99. package/src/lib/design/shot.js +253 -40
  100. package/src/lib/design/shot.js.map +1 -1
  101. package/src/lib/design/sketch-command.d.ts +6 -1
  102. package/src/lib/design/sketch-command.js +452 -136
  103. package/src/lib/design/sketch-command.js.map +1 -1
  104. package/src/lib/design/ssr-shims.d.ts +2 -0
  105. package/src/lib/design/ssr-shims.js +12 -1
  106. package/src/lib/design/ssr-shims.js.map +1 -1
  107. package/src/lib/design/stale-cli-dist.d.ts +11 -0
  108. package/src/lib/design/stale-cli-dist.js +56 -0
  109. package/src/lib/design/stale-cli-dist.js.map +1 -0
  110. package/src/lib/design/stamp.d.ts +18 -1
  111. package/src/lib/design/stamp.js +53 -7
  112. package/src/lib/design/stamp.js.map +1 -1
  113. package/src/lib/design/started-by-studio.d.ts +1 -0
  114. package/src/lib/design/started-by-studio.js +6 -0
  115. package/src/lib/design/started-by-studio.js.map +1 -0
  116. package/src/lib/design/studio-api.d.ts +35 -4
  117. package/src/lib/design/studio-api.js +312 -41
  118. package/src/lib/design/studio-api.js.map +1 -1
  119. package/src/lib/design/system/accept-command.d.ts +39 -5
  120. package/src/lib/design/system/accept-command.js +109 -25
  121. package/src/lib/design/system/accept-command.js.map +1 -1
  122. package/src/lib/design/system/accepted-pictures.d.ts +83 -0
  123. package/src/lib/design/system/accepted-pictures.js +324 -0
  124. package/src/lib/design/system/accepted-pictures.js.map +1 -0
  125. package/src/lib/design/system/action-lost.d.ts +59 -0
  126. package/src/lib/design/system/action-lost.js +120 -0
  127. package/src/lib/design/system/action-lost.js.map +1 -0
  128. package/src/lib/design/system/action-press.d.ts +23 -0
  129. package/src/lib/design/system/action-press.js +76 -0
  130. package/src/lib/design/system/action-press.js.map +1 -0
  131. package/src/lib/design/system/action-undeclared.d.ts +34 -0
  132. package/src/lib/design/system/action-undeclared.js +81 -0
  133. package/src/lib/design/system/action-undeclared.js.map +1 -0
  134. package/src/lib/design/system/actions-command.d.ts +101 -0
  135. package/src/lib/design/system/actions-command.js +695 -0
  136. package/src/lib/design/system/actions-command.js.map +1 -0
  137. package/src/lib/design/system/actions.d.ts +158 -0
  138. package/src/lib/design/system/actions.js +295 -0
  139. package/src/lib/design/system/actions.js.map +1 -0
  140. package/src/lib/design/system/app-files.d.ts +10 -0
  141. package/src/lib/design/system/app-files.js +159 -0
  142. package/src/lib/design/system/app-files.js.map +1 -0
  143. package/src/lib/design/system/bespoke-controls.d.ts +30 -0
  144. package/src/lib/design/system/bespoke-controls.js +147 -0
  145. package/src/lib/design/system/bespoke-controls.js.map +1 -0
  146. package/src/lib/design/system/build-ready-contract.d.ts +27 -0
  147. package/src/lib/design/system/build-ready-contract.js +12 -0
  148. package/src/lib/design/system/build-ready-contract.js.map +1 -0
  149. package/src/lib/design/system/check-rules.d.ts +1 -0
  150. package/src/lib/design/system/check-rules.js +82 -0
  151. package/src/lib/design/system/check-rules.js.map +1 -0
  152. package/src/lib/design/system/check-system.d.ts +62 -3
  153. package/src/lib/design/system/check-system.js +527 -34
  154. package/src/lib/design/system/check-system.js.map +1 -1
  155. package/src/lib/design/system/colour.d.ts +4 -1
  156. package/src/lib/design/system/colour.js +54 -2
  157. package/src/lib/design/system/colour.js.map +1 -1
  158. package/src/lib/design/system/comments/comment.d.ts +4 -1
  159. package/src/lib/design/system/comments/comment.js +13 -4
  160. package/src/lib/design/system/comments/comment.js.map +1 -1
  161. package/src/lib/design/system/comments/inbox.js +2 -2
  162. package/src/lib/design/system/comments/inbox.js.map +1 -1
  163. package/src/lib/design/system/compare-command.d.ts +119 -0
  164. package/src/lib/design/system/compare-command.js +558 -0
  165. package/src/lib/design/system/compare-command.js.map +1 -0
  166. package/src/lib/design/system/complete-command.js +7 -3
  167. package/src/lib/design/system/complete-command.js.map +1 -1
  168. package/src/lib/design/system/complete.d.ts +99 -3
  169. package/src/lib/design/system/complete.js +358 -88
  170. package/src/lib/design/system/complete.js.map +1 -1
  171. package/src/lib/design/system/component-outputs.d.ts +20 -0
  172. package/src/lib/design/system/component-outputs.js +86 -0
  173. package/src/lib/design/system/component-outputs.js.map +1 -0
  174. package/src/lib/design/system/contrast-check.d.ts +6 -1
  175. package/src/lib/design/system/contrast-check.js +179 -13
  176. package/src/lib/design/system/contrast-check.js.map +1 -1
  177. package/src/lib/design/system/demo-backdrop.d.ts +11 -0
  178. package/src/lib/design/system/demo-backdrop.js +41 -0
  179. package/src/lib/design/system/demo-backdrop.js.map +1 -0
  180. package/src/lib/design/system/design-hash.d.ts +31 -0
  181. package/src/lib/design/system/design-hash.js +73 -0
  182. package/src/lib/design/system/design-hash.js.map +1 -0
  183. package/src/lib/design/system/disabled-interaction.d.ts +8 -0
  184. package/src/lib/design/system/disabled-interaction.js +37 -0
  185. package/src/lib/design/system/disabled-interaction.js.map +1 -0
  186. package/src/lib/design/system/dom-command.d.ts +36 -0
  187. package/src/lib/design/system/dom-command.js +175 -0
  188. package/src/lib/design/system/dom-command.js.map +1 -0
  189. package/src/lib/design/system/drawn-open-points.d.ts +38 -0
  190. package/src/lib/design/system/drawn-open-points.js +94 -0
  191. package/src/lib/design/system/drawn-open-points.js.map +1 -0
  192. package/src/lib/design/system/dropped-props.d.ts +25 -0
  193. package/src/lib/design/system/dropped-props.js +159 -0
  194. package/src/lib/design/system/dropped-props.js.map +1 -0
  195. package/src/lib/design/system/embedded-actions.d.ts +21 -0
  196. package/src/lib/design/system/embedded-actions.js +37 -0
  197. package/src/lib/design/system/embedded-actions.js.map +1 -0
  198. package/src/lib/design/system/exceptions.js +2 -1
  199. package/src/lib/design/system/exceptions.js.map +1 -1
  200. package/src/lib/design/system/flows/flow.js +2 -1
  201. package/src/lib/design/system/flows/flow.js.map +1 -1
  202. package/src/lib/design/system/frozen-animations.d.ts +13 -0
  203. package/src/lib/design/system/frozen-animations.js +51 -0
  204. package/src/lib/design/system/frozen-animations.js.map +1 -0
  205. package/src/lib/design/system/go-batch.d.ts +24 -0
  206. package/src/lib/design/system/go-batch.js +110 -0
  207. package/src/lib/design/system/go-batch.js.map +1 -0
  208. package/src/lib/design/system/go-command.d.ts +4 -0
  209. package/src/lib/design/system/go-command.js +64 -0
  210. package/src/lib/design/system/go-command.js.map +1 -0
  211. package/src/lib/design/system/go-guard.d.ts +26 -0
  212. package/src/lib/design/system/go-guard.js +70 -0
  213. package/src/lib/design/system/go-guard.js.map +1 -0
  214. package/src/lib/design/system/go-step.d.ts +13 -0
  215. package/src/lib/design/system/go-step.js +84 -0
  216. package/src/lib/design/system/go-step.js.map +1 -0
  217. package/src/lib/design/system/handoff.js +2 -1
  218. package/src/lib/design/system/handoff.js.map +1 -1
  219. package/src/lib/design/system/harness-build-cache.d.ts +35 -0
  220. package/src/lib/design/system/harness-build-cache.js +175 -0
  221. package/src/lib/design/system/harness-build-cache.js.map +1 -0
  222. package/src/lib/design/system/harness-command.d.ts +7 -0
  223. package/src/lib/design/system/harness-command.js +51 -0
  224. package/src/lib/design/system/harness-command.js.map +1 -0
  225. package/src/lib/design/system/harness-config.d.ts +9 -0
  226. package/src/lib/design/system/harness-config.js +65 -0
  227. package/src/lib/design/system/harness-config.js.map +1 -0
  228. package/src/lib/design/system/harness-map.d.ts +44 -0
  229. package/src/lib/design/system/harness-map.js +126 -0
  230. package/src/lib/design/system/harness-map.js.map +1 -0
  231. package/src/lib/design/system/harness-samples.d.ts +20 -0
  232. package/src/lib/design/system/harness-samples.js +92 -0
  233. package/src/lib/design/system/harness-samples.js.map +1 -0
  234. package/src/lib/design/system/harness-server.d.ts +40 -0
  235. package/src/lib/design/system/harness-server.js +296 -0
  236. package/src/lib/design/system/harness-server.js.map +1 -0
  237. package/src/lib/design/system/imports.js +14 -1
  238. package/src/lib/design/system/imports.js.map +1 -1
  239. package/src/lib/design/system/in-order-at-once.d.ts +6 -0
  240. package/src/lib/design/system/in-order-at-once.js +28 -0
  241. package/src/lib/design/system/in-order-at-once.js.map +1 -0
  242. package/src/lib/design/system/inventory-approval.js +2 -1
  243. package/src/lib/design/system/inventory-approval.js.map +1 -1
  244. package/src/lib/design/system/inventory.d.ts +13 -4
  245. package/src/lib/design/system/inventory.js +36 -7
  246. package/src/lib/design/system/inventory.js.map +1 -1
  247. package/src/lib/design/system/list-system.d.ts +8 -1
  248. package/src/lib/design/system/list-system.js +13 -3
  249. package/src/lib/design/system/list-system.js.map +1 -1
  250. package/src/lib/design/system/live-actions.d.ts +121 -0
  251. package/src/lib/design/system/live-actions.js +665 -0
  252. package/src/lib/design/system/live-actions.js.map +1 -0
  253. package/src/lib/design/system/live-compare.d.ts +136 -0
  254. package/src/lib/design/system/live-compare.js +441 -0
  255. package/src/lib/design/system/live-compare.js.map +1 -0
  256. package/src/lib/design/system/live-uncovered.d.ts +40 -0
  257. package/src/lib/design/system/live-uncovered.js +123 -0
  258. package/src/lib/design/system/live-uncovered.js.map +1 -0
  259. package/src/lib/design/system/nested-scroll.d.ts +7 -0
  260. package/src/lib/design/system/nested-scroll.js +25 -0
  261. package/src/lib/design/system/nested-scroll.js.map +1 -0
  262. package/src/lib/design/system/notes/note.js +2 -1
  263. package/src/lib/design/system/notes/note.js.map +1 -1
  264. package/src/lib/design/system/occluded.d.ts +13 -0
  265. package/src/lib/design/system/occluded.js +111 -0
  266. package/src/lib/design/system/occluded.js.map +1 -0
  267. package/src/lib/design/system/open-points.d.ts +119 -0
  268. package/src/lib/design/system/open-points.js +185 -0
  269. package/src/lib/design/system/open-points.js.map +1 -0
  270. package/src/lib/design/system/part-build-ready.d.ts +39 -0
  271. package/src/lib/design/system/part-build-ready.js +107 -0
  272. package/src/lib/design/system/part-build-ready.js.map +1 -0
  273. package/src/lib/design/system/part-command.js +2 -9
  274. package/src/lib/design/system/part-command.js.map +1 -1
  275. package/src/lib/design/system/part-compare.d.ts +123 -0
  276. package/src/lib/design/system/part-compare.js +396 -0
  277. package/src/lib/design/system/part-compare.js.map +1 -0
  278. package/src/lib/design/system/part-go.d.ts +70 -0
  279. package/src/lib/design/system/part-go.js +94 -0
  280. package/src/lib/design/system/part-go.js.map +1 -0
  281. package/src/lib/design/system/part-ready.d.ts +90 -0
  282. package/src/lib/design/system/part-ready.js +172 -0
  283. package/src/lib/design/system/part-ready.js.map +1 -0
  284. package/src/lib/design/system/part-task.d.ts +147 -0
  285. package/src/lib/design/system/part-task.js +285 -0
  286. package/src/lib/design/system/part-task.js.map +1 -0
  287. package/src/lib/design/system/pointer-focus.d.ts +81 -0
  288. package/src/lib/design/system/pointer-focus.js +152 -0
  289. package/src/lib/design/system/pointer-focus.js.map +1 -0
  290. package/src/lib/design/system/prettier.d.ts +10 -0
  291. package/src/lib/design/system/prettier.js +36 -0
  292. package/src/lib/design/system/prettier.js.map +1 -0
  293. package/src/lib/design/system/reach.d.ts +12 -0
  294. package/src/lib/design/system/reach.js +186 -0
  295. package/src/lib/design/system/reach.js.map +1 -0
  296. package/src/lib/design/system/reachable-controls.d.ts +6 -0
  297. package/src/lib/design/system/reachable-controls.js +19 -0
  298. package/src/lib/design/system/reachable-controls.js.map +1 -0
  299. package/src/lib/design/system/reachable-files.d.ts +14 -0
  300. package/src/lib/design/system/reachable-files.js +101 -0
  301. package/src/lib/design/system/reachable-files.js.map +1 -0
  302. package/src/lib/design/system/reached-state.d.ts +23 -0
  303. package/src/lib/design/system/reached-state.js +53 -0
  304. package/src/lib/design/system/reached-state.js.map +1 -0
  305. package/src/lib/design/system/read-open-points.d.ts +33 -0
  306. package/src/lib/design/system/read-open-points.js +110 -0
  307. package/src/lib/design/system/read-open-points.js.map +1 -0
  308. package/src/lib/design/system/ready-command.d.ts +11 -0
  309. package/src/lib/design/system/ready-command.js +82 -0
  310. package/src/lib/design/system/ready-command.js.map +1 -0
  311. package/src/lib/design/system/render-check.d.ts +52 -0
  312. package/src/lib/design/system/render-check.js +479 -60
  313. package/src/lib/design/system/render-check.js.map +1 -1
  314. package/src/lib/design/system/resolve-product.d.ts +2 -1
  315. package/src/lib/design/system/resolve-product.js +25 -3
  316. package/src/lib/design/system/resolve-product.js.map +1 -1
  317. package/src/lib/design/system/rules/app-spec.d.ts +30 -0
  318. package/src/lib/design/system/rules/app-spec.js +87 -0
  319. package/src/lib/design/system/rules/app-spec.js.map +1 -0
  320. package/src/lib/design/system/rules/canonical-class.d.ts +2 -0
  321. package/src/lib/design/system/rules/canonical-class.js +36 -110
  322. package/src/lib/design/system/rules/canonical-class.js.map +1 -1
  323. package/src/lib/design/system/rules/capability-place.d.ts +44 -0
  324. package/src/lib/design/system/rules/capability-place.js +116 -0
  325. package/src/lib/design/system/rules/capability-place.js.map +1 -0
  326. package/src/lib/design/system/rules/denied-class.d.ts +9 -0
  327. package/src/lib/design/system/rules/denied-class.js +121 -0
  328. package/src/lib/design/system/rules/denied-class.js.map +1 -0
  329. package/src/lib/design/system/rules/exemptions.d.ts +18 -0
  330. package/src/lib/design/system/rules/exemptions.js +18 -0
  331. package/src/lib/design/system/rules/exemptions.js.map +1 -0
  332. package/src/lib/design/system/rules/flow.js +1 -1
  333. package/src/lib/design/system/rules/flow.js.map +1 -1
  334. package/src/lib/design/system/rules/glued-interpolation.d.ts +8 -0
  335. package/src/lib/design/system/rules/glued-interpolation.js +61 -0
  336. package/src/lib/design/system/rules/glued-interpolation.js.map +1 -0
  337. package/src/lib/design/system/rules/hard-coded-colour.js +2 -1
  338. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -1
  339. package/src/lib/design/system/rules/implemented-components.d.ts +22 -0
  340. package/src/lib/design/system/rules/implemented-components.js +45 -0
  341. package/src/lib/design/system/rules/implemented-components.js.map +1 -0
  342. package/src/lib/design/system/rules/implements.d.ts +8 -0
  343. package/src/lib/design/system/rules/implements.js +48 -0
  344. package/src/lib/design/system/rules/implements.js.map +1 -0
  345. package/src/lib/design/system/rules/inline-svg.js +4 -1
  346. package/src/lib/design/system/rules/inline-svg.js.map +1 -1
  347. package/src/lib/design/system/rules/inline-ui-in-page-open.d.ts +13 -0
  348. package/src/lib/design/system/rules/inline-ui-in-page-open.js +5 -0
  349. package/src/lib/design/system/rules/inline-ui-in-page-open.js.map +1 -0
  350. package/src/lib/design/system/rules/inline-ui-in-page.d.ts +18 -0
  351. package/src/lib/design/system/rules/inline-ui-in-page.js +123 -0
  352. package/src/lib/design/system/rules/inline-ui-in-page.js.map +1 -0
  353. package/src/lib/design/system/rules/inline-ui.d.ts +16 -0
  354. package/src/lib/design/system/rules/inline-ui.js +100 -0
  355. package/src/lib/design/system/rules/inline-ui.js.map +1 -0
  356. package/src/lib/design/system/rules/motion.d.ts +2 -0
  357. package/src/lib/design/system/rules/motion.js +35 -2
  358. package/src/lib/design/system/rules/motion.js.map +1 -1
  359. package/src/lib/design/system/rules/native-title.d.ts +7 -0
  360. package/src/lib/design/system/rules/native-title.js +64 -0
  361. package/src/lib/design/system/rules/native-title.js.map +1 -0
  362. package/src/lib/design/system/rules/option-values.d.ts +15 -0
  363. package/src/lib/design/system/rules/option-values.js +145 -0
  364. package/src/lib/design/system/rules/option-values.js.map +1 -0
  365. package/src/lib/design/system/rules/orphan-endpoint-known.d.ts +12 -0
  366. package/src/lib/design/system/rules/orphan-endpoint-known.js +20 -0
  367. package/src/lib/design/system/rules/orphan-endpoint-known.js.map +1 -0
  368. package/src/lib/design/system/rules/orphan-endpoint.d.ts +23 -0
  369. package/src/lib/design/system/rules/orphan-endpoint.js +166 -0
  370. package/src/lib/design/system/rules/orphan-endpoint.js.map +1 -0
  371. package/src/lib/design/system/rules/part-rewrite.d.ts +13 -0
  372. package/src/lib/design/system/rules/part-rewrite.js +125 -0
  373. package/src/lib/design/system/rules/part-rewrite.js.map +1 -0
  374. package/src/lib/design/system/rules/sample-default-known.d.ts +5 -0
  375. package/src/lib/design/system/rules/sample-default-known.js +17 -0
  376. package/src/lib/design/system/rules/sample-default-known.js.map +1 -0
  377. package/src/lib/design/system/rules/sample-default.d.ts +22 -0
  378. package/src/lib/design/system/rules/sample-default.js +92 -0
  379. package/src/lib/design/system/rules/sample-default.js.map +1 -0
  380. package/src/lib/design/system/rules/stale-replace.js +45 -3
  381. package/src/lib/design/system/rules/stale-replace.js.map +1 -1
  382. package/src/lib/design/system/rules/state-in-component.d.ts +16 -0
  383. package/src/lib/design/system/rules/state-in-component.js +101 -0
  384. package/src/lib/design/system/rules/state-in-component.js.map +1 -0
  385. package/src/lib/design/system/rules/tailwind-classes.d.ts +51 -0
  386. package/src/lib/design/system/rules/tailwind-classes.js +232 -0
  387. package/src/lib/design/system/rules/tailwind-classes.js.map +1 -0
  388. package/src/lib/design/system/rules/top-level-await.d.ts +9 -0
  389. package/src/lib/design/system/rules/top-level-await.js +62 -0
  390. package/src/lib/design/system/rules/top-level-await.js.map +1 -0
  391. package/src/lib/design/system/rules/unbound-input-known.d.ts +5 -0
  392. package/src/lib/design/system/rules/unbound-input-known.js +47 -0
  393. package/src/lib/design/system/rules/unbound-input-known.js.map +1 -0
  394. package/src/lib/design/system/rules/unbound-input.d.ts +22 -0
  395. package/src/lib/design/system/rules/unbound-input.js +61 -0
  396. package/src/lib/design/system/rules/unbound-input.js.map +1 -0
  397. package/src/lib/design/system/rules/uncovered-region.d.ts +13 -0
  398. package/src/lib/design/system/rules/uncovered-region.js +36 -0
  399. package/src/lib/design/system/rules/uncovered-region.js.map +1 -0
  400. package/src/lib/design/system/rules/undefined-class.d.ts +9 -0
  401. package/src/lib/design/system/rules/undefined-class.js +32 -0
  402. package/src/lib/design/system/rules/undefined-class.js.map +1 -0
  403. package/src/lib/design/system/rules/undefined-token.d.ts +1 -1
  404. package/src/lib/design/system/rules/undefined-token.js +7 -61
  405. package/src/lib/design/system/rules/undefined-token.js.map +1 -1
  406. package/src/lib/design/system/rules/utility-css.d.ts +2 -1
  407. package/src/lib/design/system/rules/utility-css.js +29 -14
  408. package/src/lib/design/system/rules/utility-css.js.map +1 -1
  409. package/src/lib/design/system/rules/view-coverage.d.ts +8 -0
  410. package/src/lib/design/system/rules/view-coverage.js +51 -0
  411. package/src/lib/design/system/rules/view-coverage.js.map +1 -0
  412. package/src/lib/design/system/rules/visible-change.d.ts +20 -0
  413. package/src/lib/design/system/rules/visible-change.js +48 -0
  414. package/src/lib/design/system/rules/visible-change.js.map +1 -0
  415. package/src/lib/design/system/sdk-errors.d.ts +14 -0
  416. package/src/lib/design/system/sdk-errors.js +38 -0
  417. package/src/lib/design/system/sdk-errors.js.map +1 -0
  418. package/src/lib/design/system/see-through.d.ts +12 -0
  419. package/src/lib/design/system/see-through.js +112 -0
  420. package/src/lib/design/system/see-through.js.map +1 -0
  421. package/src/lib/design/system/settled-panes.d.ts +18 -0
  422. package/src/lib/design/system/settled-panes.js +70 -0
  423. package/src/lib/design/system/settled-panes.js.map +1 -0
  424. package/src/lib/design/system/sketch/after-merge.d.ts +11 -0
  425. package/src/lib/design/system/sketch/after-merge.js +51 -0
  426. package/src/lib/design/system/sketch/after-merge.js.map +1 -0
  427. package/src/lib/design/system/sketch/aktuell-placeholders.d.ts +30 -0
  428. package/src/lib/design/system/sketch/aktuell-placeholders.js +87 -0
  429. package/src/lib/design/system/sketch/aktuell-placeholders.js.map +1 -0
  430. package/src/lib/design/system/sketch/baseline.d.ts +29 -2
  431. package/src/lib/design/system/sketch/baseline.js +33 -9
  432. package/src/lib/design/system/sketch/baseline.js.map +1 -1
  433. package/src/lib/design/system/sketch/check-sketches.d.ts +11 -0
  434. package/src/lib/design/system/sketch/check-sketches.js +54 -6
  435. package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
  436. package/src/lib/design/system/sketch/cli-args.d.ts +12 -2
  437. package/src/lib/design/system/sketch/cli-args.js +18 -3
  438. package/src/lib/design/system/sketch/cli-args.js.map +1 -1
  439. package/src/lib/design/system/sketch/edit-sketch.d.ts +21 -0
  440. package/src/lib/design/system/sketch/edit-sketch.js +117 -0
  441. package/src/lib/design/system/sketch/edit-sketch.js.map +1 -0
  442. package/src/lib/design/system/sketch/frame-budget.d.ts +24 -0
  443. package/src/lib/design/system/sketch/frame-budget.js +23 -0
  444. package/src/lib/design/system/sketch/frame-budget.js.map +1 -0
  445. package/src/lib/design/system/sketch/identical-renders.d.ts +31 -0
  446. package/src/lib/design/system/sketch/identical-renders.js +137 -0
  447. package/src/lib/design/system/sketch/identical-renders.js.map +1 -0
  448. package/src/lib/design/system/sketch/merge-shared.d.ts +2 -0
  449. package/src/lib/design/system/sketch/merge-shared.js +7 -10
  450. package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
  451. package/src/lib/design/system/sketch/merge-step.d.ts +35 -0
  452. package/src/lib/design/system/sketch/merge-step.js +98 -0
  453. package/src/lib/design/system/sketch/merge-step.js.map +1 -0
  454. package/src/lib/design/system/sketch/merge.d.ts +10 -3
  455. package/src/lib/design/system/sketch/merge.js +122 -17
  456. package/src/lib/design/system/sketch/merge.js.map +1 -1
  457. package/src/lib/design/system/sketch/merged-layout.d.ts +17 -0
  458. package/src/lib/design/system/sketch/merged-layout.js +57 -0
  459. package/src/lib/design/system/sketch/merged-layout.js.map +1 -0
  460. package/src/lib/design/system/sketch/merged-parts.d.ts +41 -11
  461. package/src/lib/design/system/sketch/merged-parts.js +113 -50
  462. package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
  463. package/src/lib/design/system/sketch/no-visible-change.d.ts +10 -0
  464. package/src/lib/design/system/sketch/no-visible-change.js +16 -6
  465. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
  466. package/src/lib/design/system/sketch/part-definition.d.ts +56 -0
  467. package/src/lib/design/system/sketch/part-definition.js +129 -13
  468. package/src/lib/design/system/sketch/part-definition.js.map +1 -1
  469. package/src/lib/design/system/sketch/rebase-port.d.ts +24 -0
  470. package/src/lib/design/system/sketch/rebase-port.js +170 -0
  471. package/src/lib/design/system/sketch/rebase-port.js.map +1 -0
  472. package/src/lib/design/system/sketch/sample-mark-drift.d.ts +33 -0
  473. package/src/lib/design/system/sketch/sample-mark-drift.js +88 -0
  474. package/src/lib/design/system/sketch/sample-mark-drift.js.map +1 -0
  475. package/src/lib/design/system/sketch/sketch-check-worker.d.ts +1 -0
  476. package/src/lib/design/system/sketch/sketch-check-worker.js +27 -0
  477. package/src/lib/design/system/sketch/sketch-check-worker.js.map +1 -0
  478. package/src/lib/design/system/sketch/sketch-checker.d.ts +27 -0
  479. package/src/lib/design/system/sketch/sketch-checker.js +99 -0
  480. package/src/lib/design/system/sketch/sketch-checker.js.map +1 -0
  481. package/src/lib/design/system/sketch/sketch.d.ts +78 -2
  482. package/src/lib/design/system/sketch/sketch.js +247 -54
  483. package/src/lib/design/system/sketch/sketch.js.map +1 -1
  484. package/src/lib/design/system/sketch/stale-base.d.ts +22 -0
  485. package/src/lib/design/system/sketch/stale-base.js +56 -0
  486. package/src/lib/design/system/sketch/stale-base.js.map +1 -0
  487. package/src/lib/design/system/sketch/unchanged-states.d.ts +36 -1
  488. package/src/lib/design/system/sketch/unchanged-states.js +60 -17
  489. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
  490. package/src/lib/design/system/sketch/unused-closure.js +26 -4
  491. package/src/lib/design/system/sketch/unused-closure.js.map +1 -1
  492. package/src/lib/design/system/sketch/unused-files.d.ts +1 -1
  493. package/src/lib/design/system/sketch/unused-files.js +6 -3
  494. package/src/lib/design/system/sketch/unused-files.js.map +1 -1
  495. package/src/lib/design/system/sketch/viewed-shots.d.ts +24 -0
  496. package/src/lib/design/system/sketch/viewed-shots.js +61 -0
  497. package/src/lib/design/system/sketch/viewed-shots.js.map +1 -0
  498. package/src/lib/design/system/slow-checks.d.ts +40 -0
  499. package/src/lib/design/system/slow-checks.js +197 -0
  500. package/src/lib/design/system/slow-checks.js.map +1 -0
  501. package/src/lib/design/system/slow-run.d.ts +57 -0
  502. package/src/lib/design/system/slow-run.js +253 -0
  503. package/src/lib/design/system/slow-run.js.map +1 -0
  504. package/src/lib/design/system/stale-design-mocks.d.ts +20 -0
  505. package/src/lib/design/system/stale-design-mocks.js +59 -0
  506. package/src/lib/design/system/stale-design-mocks.js.map +1 -0
  507. package/src/lib/design/system/stale-dist.d.ts +25 -0
  508. package/src/lib/design/system/stale-dist.js +91 -0
  509. package/src/lib/design/system/stale-dist.js.map +1 -0
  510. package/src/lib/design/system/stale-parts.d.ts +30 -0
  511. package/src/lib/design/system/stale-parts.js +106 -0
  512. package/src/lib/design/system/stale-parts.js.map +1 -0
  513. package/src/lib/design/system/surface-nesting.d.ts +11 -0
  514. package/src/lib/design/system/surface-nesting.js +86 -0
  515. package/src/lib/design/system/surface-nesting.js.map +1 -0
  516. package/src/lib/design/system/system-command.js +8 -6
  517. package/src/lib/design/system/system-command.js.map +1 -1
  518. package/src/lib/design/system/system-modules.d.ts +16 -1
  519. package/src/lib/design/system/system-modules.js +18 -2
  520. package/src/lib/design/system/system-modules.js.map +1 -1
  521. package/src/lib/design/system/system-tsconfig.js +2 -2
  522. package/src/lib/design/system/system-tsconfig.js.map +1 -1
  523. package/src/lib/design/system/task-command.d.ts +51 -0
  524. package/src/lib/design/system/task-command.js +233 -0
  525. package/src/lib/design/system/task-command.js.map +1 -0
  526. package/src/lib/design/system/theming-text.d.ts +2 -0
  527. package/src/lib/design/system/theming-text.js +6 -0
  528. package/src/lib/design/system/theming-text.js.map +1 -0
  529. package/src/lib/design/system/tom-confirm.d.ts +40 -0
  530. package/src/lib/design/system/tom-confirm.js +55 -0
  531. package/src/lib/design/system/tom-confirm.js.map +1 -0
  532. package/src/lib/design/system/touched-parts.d.ts +16 -0
  533. package/src/lib/design/system/touched-parts.js +122 -0
  534. package/src/lib/design/system/touched-parts.js.map +1 -0
  535. package/src/lib/design/system/ts-source.d.ts +5 -0
  536. package/src/lib/design/system/ts-source.js +35 -4
  537. package/src/lib/design/system/ts-source.js.map +1 -1
  538. package/src/lib/design/system/unchanged-rows.d.ts +15 -0
  539. package/src/lib/design/system/unchanged-rows.js +134 -0
  540. package/src/lib/design/system/unchanged-rows.js.map +1 -0
  541. package/src/lib/design/system/uncommitted-decisions.d.ts +6 -0
  542. package/src/lib/design/system/uncommitted-decisions.js +38 -0
  543. package/src/lib/design/system/uncommitted-decisions.js.map +1 -0
  544. package/src/lib/design/system/uncovered-regions.d.ts +61 -0
  545. package/src/lib/design/system/uncovered-regions.js +171 -0
  546. package/src/lib/design/system/uncovered-regions.js.map +1 -0
  547. package/src/lib/design/system/unused-base-parts.d.ts +7 -0
  548. package/src/lib/design/system/unused-base-parts.js +76 -0
  549. package/src/lib/design/system/unused-base-parts.js.map +1 -0
  550. package/src/lib/design/system/visible-change-command.d.ts +48 -0
  551. package/src/lib/design/system/visible-change-command.js +308 -0
  552. package/src/lib/design/system/visible-change-command.js.map +1 -0
  553. package/src/lib/design/system/visible-change-parts.d.ts +28 -0
  554. package/src/lib/design/system/visible-change-parts.js +96 -0
  555. package/src/lib/design/system/visible-change-parts.js.map +1 -0
  556. package/src/lib/design/system/visible-change.d.ts +82 -0
  557. package/src/lib/design/system/visible-change.js +149 -0
  558. package/src/lib/design/system/visible-change.js.map +1 -0
  559. package/src/lib/design/thumb.d.ts +50 -6
  560. package/src/lib/design/thumb.js +154 -54
  561. package/src/lib/design/thumb.js.map +1 -1
  562. package/src/lib/design/typecheck.d.ts +1 -1
  563. package/src/lib/design/typecheck.js +3 -3
  564. package/src/lib/design/typecheck.js.map +1 -1
  565. package/src/lib/design/unstable-cells.d.ts +23 -0
  566. package/src/lib/design/unstable-cells.js +40 -0
  567. package/src/lib/design/unstable-cells.js.map +1 -0
  568. package/src/lib/design/variant-diff.js +1 -1
  569. package/src/lib/design/variant-diff.js.map +1 -1
  570. package/src/lib/design/wait.d.ts +15 -0
  571. package/src/lib/design/wait.js +30 -0
  572. package/src/lib/design/wait.js.map +1 -0
  573. package/src/lib/json-file.d.ts +11 -0
  574. package/src/lib/json-file.js +21 -0
  575. package/src/lib/json-file.js.map +1 -0
  576. package/src/lib/source-hash.d.ts +7 -0
  577. package/src/lib/source-hash.js +62 -0
  578. package/src/lib/source-hash.js.map +1 -0
  579. package/src/lib/update/agent-setup.js +2 -1
  580. package/src/lib/update/agent-setup.js.map +1 -1
  581. package/src/lib/update/migration-manifest.d.ts +12 -0
  582. package/src/lib/update/migration-manifest.js +13 -0
  583. package/src/lib/update/migration-manifest.js.map +1 -1
  584. package/src/lib/update/migration-record.js +2 -1
  585. package/src/lib/update/migration-record.js.map +1 -1
  586. package/src/lib/update/pending.js +2 -1
  587. package/src/lib/update/pending.js.map +1 -1
  588. package/src/lib/update/run-migrations.d.ts +3 -2
  589. package/src/lib/update/run-migrations.js +38 -5
  590. package/src/lib/update/run-migrations.js.map +1 -1
  591. package/src/lib/update/tasks.js +2 -1
  592. package/src/lib/update/tasks.js.map +1 -1
@@ -9,10 +9,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.serveDesign = exports.createDesignServer = void 0;
12
+ exports.serveDesign = exports.createDesignServer = exports.installedRootsOf = exports.DESIGN_EVENTS_HEARTBEAT_MS = exports.sendHeldJson = exports.KEEP_ALIVE_MS = void 0;
13
+ const crypto_1 = require("crypto");
13
14
  const fs_1 = require("fs");
14
15
  const net_1 = require("net");
16
+ const promises_1 = require("timers/promises");
15
17
  const path_1 = require("path");
18
+ const rxjs_1 = require("rxjs");
16
19
  const calls_1 = require("./calls");
17
20
  const calls_tsconfig_1 = require("./calls-tsconfig");
18
21
  const legacy_1 = require("./legacy");
@@ -25,8 +28,12 @@ const render_packages_1 = require("./render-packages");
25
28
  const part_marks_1 = require("./part-marks");
26
29
  const generated_stylesheets_1 = require("./generated-stylesheets");
27
30
  const sketch_stylesheets_1 = require("./sketch-stylesheets");
31
+ const draw_ledger_1 = require("./draw-ledger");
28
32
  const shot_1 = require("./shot");
33
+ const shot_store_1 = require("./shot-store");
34
+ const imports_1 = require("./system/imports");
29
35
  const changed_parts_1 = require("./changed-parts");
36
+ const server_identity_1 = require("./server-identity");
30
37
  const stamp_1 = require("./stamp");
31
38
  const list_system_1 = require("./system/list-system");
32
39
  const resolve_product_1 = require("./system/resolve-product");
@@ -34,12 +41,16 @@ const system_modules_1 = require("./system/system-modules");
34
41
  const kit_1 = require("./system/kit");
35
42
  const system_tsconfig_1 = require("./system/system-tsconfig");
36
43
  const sketch_1 = require("./system/sketch/sketch");
44
+ const sketch_checker_1 = require("./system/sketch/sketch-checker");
37
45
  const unchanged_states_1 = require("./system/sketch/unchanged-states");
38
46
  const inventory_1 = require("./system/inventory");
39
47
  const thumb_1 = require("./thumb");
40
48
  const motion_endpoint_1 = require("./motion-endpoint");
41
49
  const paths_1 = require("./paths");
50
+ const slow_run_1 = require("./system/slow-run");
51
+ const build_watch_1 = require("./build-watch");
42
52
  const VIRTUAL = 'virtual:design-explore';
53
+ const REBUILD_SETTLE_MS = 300;
43
54
  /** What a slug says about which project drew it: its first segment. */
44
55
  const projectOf = (slug) => { var _a; return (_a = slug.split('/')[0]) !== null && _a !== void 0 ? _a : ''; };
45
56
  const registry = (target) => {
@@ -182,6 +193,33 @@ const sendJson = (response, answer) => {
182
193
  response.setHeader('access-control-allow-origin', '*');
183
194
  (0, thumb_1.send)(response, { status: answer.status, type: 'application/json', body: JSON.stringify(answer.body) });
184
195
  };
196
+ exports.KEEP_ALIVE_MS = 15000;
197
+ /**
198
+ * Sends `answered` as JSON, and a space every `KEEP_ALIVE_MS` while it is pending: WebKit fails a fetch with "Load
199
+ * failed" when no byte arrives for 60 s. Once a space went out the status is 200, so a later failure arrives as its
200
+ * body alone.
201
+ */
202
+ const sendHeldJson = (response, answered) => {
203
+ let started = false;
204
+ const tick = (0, rxjs_1.interval)(exports.KEEP_ALIVE_MS)
205
+ .pipe((0, rxjs_1.tap)(() => {
206
+ if (!started) {
207
+ started = true;
208
+ response.writeHead(200, { 'access-control-allow-origin': '*', 'content-type': 'application/json' });
209
+ }
210
+ response.write(' ');
211
+ }))
212
+ .subscribe();
213
+ response.once('close', () => tick.unsubscribe());
214
+ return answered.then((answer) => {
215
+ tick.unsubscribe();
216
+ if (started)
217
+ response.end(JSON.stringify(answer.body));
218
+ else
219
+ sendJson(response, answer);
220
+ });
221
+ };
222
+ exports.sendHeldJson = sendHeldJson;
185
223
  const isCommentFile = (file) => file.endsWith('.json') && (0, path_1.basename)((0, path_1.dirname)(file)) === 'comments';
186
224
  const isNoteFile = (file) => file.endsWith('.json') && (0, path_1.basename)((0, path_1.dirname)(file)) === 'notes';
187
225
  const isFlowFile = (file) => file.endsWith('.json') && (0, path_1.basename)((0, path_1.dirname)(file)) === 'flows';
@@ -190,6 +228,8 @@ const isSketchFile = (designRoot, file) => {
190
228
  const [product, folder, ...inside] = (0, path_1.relative)(designRoot, (0, path_1.resolve)(file)).split(path_1.sep);
191
229
  return !!product && product !== '..' && folder === 'sketches' && inside.length > 0;
192
230
  };
231
+ // Workaround: WebKit drops an event stream that sends nothing for 60 seconds.
232
+ exports.DESIGN_EVENTS_HEARTBEAT_MS = 20000;
193
233
  /**
194
234
  * A server-sent event stream for Studio: `comments`, `notes`, `flows`, `calls` and `sketches` when a file of that
195
235
  * kind changed, and `parts` with the parts a design system change redraws and the revision it gave them. A `parts`
@@ -197,6 +237,11 @@ const isSketchFile = (designRoot, file) => {
197
237
  */
198
238
  const createDesignEvents = () => {
199
239
  const listeners = new Set();
240
+ let heartbeat;
241
+ const beat = () => {
242
+ for (const response of listeners)
243
+ response.write(': heartbeat\n\n');
244
+ };
200
245
  return {
201
246
  middleware: (request, response) => {
202
247
  response.writeHead(200, {
@@ -207,13 +252,22 @@ const createDesignEvents = () => {
207
252
  });
208
253
  response.write(': open\n\n');
209
254
  listeners.add(response);
210
- request.on('close', () => listeners.delete(response));
255
+ heartbeat !== null && heartbeat !== void 0 ? heartbeat : (heartbeat = (0, rxjs_1.interval)(exports.DESIGN_EVENTS_HEARTBEAT_MS).subscribe(beat));
256
+ request.on('close', () => {
257
+ listeners.delete(response);
258
+ if (listeners.size === 0) {
259
+ heartbeat === null || heartbeat === void 0 ? void 0 : heartbeat.unsubscribe();
260
+ heartbeat = undefined;
261
+ }
262
+ });
211
263
  },
212
264
  signal: (event, data = {}) => {
213
265
  for (const response of listeners)
214
266
  response.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
215
267
  },
216
268
  close: () => {
269
+ heartbeat === null || heartbeat === void 0 ? void 0 : heartbeat.unsubscribe();
270
+ heartbeat = undefined;
217
271
  for (const response of listeners)
218
272
  response.end();
219
273
  listeners.clear();
@@ -230,8 +284,76 @@ const withAssetUrls = (system) => {
230
284
  const marks = (0, part_marks_1.partMarksTransform)(system);
231
285
  return (code, id) => { var _a; return (_a = system.withAssetUrls(code, id)) !== null && _a !== void 0 ? _a : marks(code, id); };
232
286
  };
233
- const designExplore = ({ target, config, system, stylesheetImports, }) => {
287
+ const filesUnder = (dir) => (0, fs_1.existsSync)(dir)
288
+ ? (0, fs_1.readdirSync)(dir, { recursive: true, withFileTypes: true })
289
+ .filter((entry) => entry.isFile())
290
+ .map((entry) => (0, path_1.relative)(dir, (0, path_1.join)(entry.parentPath, entry.name)))
291
+ .sort()
292
+ : [];
293
+ const shotStoreOf = (options) => {
294
+ const { target, config, system, stylesheetImports, dir, salt, moduleById } = options;
295
+ const drawnSystemsOf = (address) => [
296
+ ...new Map([address.sketch, address.props].map((sketch) => [JSON.stringify(sketch !== null && sketch !== void 0 ? sketch : null), sketch !== null && sketch !== void 0 ? sketch : null])).values(),
297
+ ];
298
+ return (0, shot_store_1.createShotStore)({
299
+ dir,
300
+ salt,
301
+ inputsOf: (address) => {
302
+ var _a, _b;
303
+ const { product, part } = address;
304
+ const entry = (_a = config.products) === null || _a === void 0 ? void 0 : _a[product];
305
+ const sketches = drawnSystemsOf(address);
306
+ const roots = sketches.map((sketch) => {
307
+ var _a;
308
+ const file = (_a = system.partOf({ product, part, sketch })) === null || _a === void 0 ? void 0 : _a.file;
309
+ return file ? moduleById((0, system_modules_1.productModuleIdOf)({ file, product, sketch })) : undefined;
310
+ });
311
+ if (!entry || roots.some((root) => !root))
312
+ return null;
313
+ const styles = ((_b = entry.styles) !== null && _b !== void 0 ? _b : []).flatMap((style) => [null, ...sketches].flatMap((sketch) => { var _a; return (_a = moduleById((0, system_modules_1.productModuleIdOf)({ file: (0, path_1.resolve)(target, style), product, sketch }))) !== null && _a !== void 0 ? _a : []; }));
314
+ const read = sketches.flatMap((sketch) => {
315
+ var _a;
316
+ return [
317
+ ...system.tokenStylesheetsOf({ product, sketch }),
318
+ ...system.replacedStylesheetsOf({ product, sketch }).values(),
319
+ ...((_a = entry.generated) !== null && _a !== void 0 ? _a : []).flatMap((generated) => { var _a, _b; return (_b = (_a = system.partOf({ product, part: generated.part, sketch })) === null || _a === void 0 ? void 0 : _a.css) !== null && _b !== void 0 ? _b : []; }),
320
+ ];
321
+ });
322
+ // The snapshot folder is named after the server's pid, so its files are gone after a restart; the salt's build stamp covers them.
323
+ const snapshot = (0, path_1.dirname)((0, paths_1.assetRoot)());
324
+ return [
325
+ ...(0, shot_1.dependencyFilesOf)([...roots.flatMap((root) => root !== null && root !== void 0 ? root : []), ...styles], stylesheetImports),
326
+ ...read,
327
+ (0, paths_1.configPathOf)(target),
328
+ (0, path_1.resolve)(target, 'tsconfig.base.json'),
329
+ ...(entry.head ? [(0, path_1.resolve)(target, entry.head)] : []),
330
+ ].filter((file) => !isInside(snapshot, (0, path_1.resolve)(file)));
331
+ },
332
+ scopeOf: (address) => JSON.stringify(drawnSystemsOf(address).map((sketch) => {
333
+ const drawn = system.drawnOf(address.product, sketch);
334
+ return (drawn && {
335
+ parts: drawn.parts.map((part) => [(0, resolve_product_1.partKeyOf)(part), part.file, part.css]),
336
+ fixtures: drawn.fixtures,
337
+ shared: (0, imports_1.sharedDirsOf)(drawn).map((shared) => [shared, filesUnder(shared)]),
338
+ });
339
+ })),
340
+ });
341
+ };
342
+ const designExplore = ({ target, config, system, stylesheetImports, shotCacheDir, checkSketches, }) => {
234
343
  const renderer = (0, render_1.createRenderer)({ target, config });
344
+ const transform = withAssetUrls(system);
345
+ const packageDirs = () => (0, render_packages_1.renderPackageDirsOf)({ target, packages: (0, render_packages_1.renderPackagesOf)({ target, config }) });
346
+ const isPackageFile = (file) => packageDirs().some((dir) => isInside(dir, (0, path_1.resolve)(file)));
347
+ const loadedPackageCode = new Map();
348
+ const hashOf = (code) => (0, crypto_1.createHash)('sha1').update(code).digest('hex');
349
+ const isAsLoaded = (file) => {
350
+ try {
351
+ return loadedPackageCode.get(file) === hashOf((0, fs_1.readFileSync)(file, 'utf8'));
352
+ }
353
+ catch (_a) {
354
+ return false;
355
+ }
356
+ };
235
357
  return {
236
358
  name: 'design-explore',
237
359
  enforce: 'pre',
@@ -250,7 +372,12 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
250
372
  return systemRegistry(system);
251
373
  return null;
252
374
  },
253
- transform: withAssetUrls(system),
375
+ transform: (code, id) => {
376
+ const file = (0, path_1.resolve)((0, system_modules_1.fileOfModuleId)(id));
377
+ if (isPackageFile(file))
378
+ loadedPackageCode.set(file, hashOf(code));
379
+ return transform(code, id);
380
+ },
254
381
  transformIndexHtml: {
255
382
  order: 'pre',
256
383
  handler: (html, ctx) => {
@@ -273,18 +400,35 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
273
400
  const callsRoot = (0, paths_1.callsRootOf)(target);
274
401
  const designRoot = (0, path_1.resolve)(target, paths_1.DESIGN_DIR);
275
402
  const stamp = (0, stamp_1.buildStampOf)();
403
+ const identityOf = (0, server_identity_1.serverIdentityOf)(target);
276
404
  const base = () => {
277
405
  var _a;
278
406
  const address = (_a = vite.httpServer) === null || _a === void 0 ? void 0 : _a.address();
279
407
  return `http://localhost:${address && typeof address === 'object' ? address.port : (0, paths_1.portOf)(config)}`;
280
408
  };
281
- const thumbs = (0, thumb_1.createThumbnailer)({ target, base });
282
- const inventoryDraws = (0, thumb_1.createDrawQueue)({ target });
283
- const shots = (0, shot_1.createPartShooter)({
284
- target,
409
+ const ledger = (0, draw_ledger_1.createDrawLedger)(Date.now, ({ sketch }) => {
410
+ const drawn = sketch && system.drawnOf(sketch.product, sketch);
411
+ return !sketch || (!!drawn && !('sketchGone' in drawn));
412
+ });
413
+ const thumbs = (0, thumb_1.createThumbnailer)({ target, base, ledger });
414
+ const inventoryDraws = (0, thumb_1.createDrawQueue)({ target, ledger });
415
+ const sketchChecker = checkSketches ? undefined : (0, sketch_checker_1.createSketchChecker)();
416
+ const shots = (0, shot_1.createPartShooter)(Object.assign(Object.assign({ target,
285
417
  base,
286
- system,
287
- statesOf: (_a) => __awaiter(void 0, [_a], void 0, function* ({ product, part, sketch }) {
418
+ ledger,
419
+ system }, (shotCacheDir
420
+ ? {
421
+ store: shotStoreOf({
422
+ target,
423
+ config,
424
+ system,
425
+ stylesheetImports,
426
+ dir: shotCacheDir,
427
+ salt: `${stamp.version} ${stamp.build}`,
428
+ moduleById: (id) => vite.moduleGraph.getModuleById(id),
429
+ }),
430
+ }
431
+ : {})), { statesOf: (_a) => __awaiter(void 0, [_a], void 0, function* ({ product, part, sketch }) {
288
432
  var _b, _c;
289
433
  const file = (_b = system.partOf({ product, part, sketch })) === null || _b === void 0 ? void 0 : _b.file;
290
434
  if (!file)
@@ -292,8 +436,7 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
292
436
  const module = (yield vite.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file, product, sketch })));
293
437
  const states = (_c = module.default) === null || _c === void 0 ? void 0 : _c.states;
294
438
  return states && typeof states === 'object' ? Object.keys(states) : [];
295
- }),
296
- });
439
+ }) }));
297
440
  const baseDirs = [
298
441
  ...new Set(system.products().flatMap((name) => { var _a, _b, _c; return (_c = (_b = (_a = system.productOf(name)) === null || _a === void 0 ? void 0 : _a.base) === null || _b === void 0 ? void 0 : _b.dir) !== null && _c !== void 0 ? _c : []; })),
299
442
  ].filter((dir) => !isInside(designRoot, dir));
@@ -374,7 +517,34 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
374
517
  const isSystemFile = (file) => !isInside(callsRoot, file) &&
375
518
  !isSketchFile(designRoot, file) &&
376
519
  [designRoot, ...baseDirs].some((dir) => isInside(dir, file));
520
+ const modulesOf = (file) => { var _a; return [...((_a = vite.moduleGraph.getModulesByFile((0, path_1.resolve)(file))) !== null && _a !== void 0 ? _a : [])]; };
521
+ const rebuilt = new Set();
522
+ let settling;
523
+ const redrawRebuilt = () => {
524
+ const changed = [...rebuilt].filter((rewritten) => !isAsLoaded(rewritten));
525
+ const modules = changed.flatMap(modulesOf);
526
+ const [file] = changed;
527
+ rebuilt.clear();
528
+ if (!file || modules.length === 0)
529
+ return;
530
+ const dependents = (0, shot_1.dependentIdsOf)(modules, stylesheetImports);
531
+ for (const module of modules)
532
+ vite.moduleGraph.invalidateModule(module);
533
+ redraw((0, changed_parts_1.changedPartsOf)({ target, config, system, file, dependents }));
534
+ };
535
+ // A package build deletes its folder and writes it anew; a module stays stale unless it is
536
+ // invalidated once the new file is there, so `unlink` alone redraws nothing.
537
+ const packageChanged = (file) => {
538
+ if (modulesOf(file).length === 0)
539
+ return;
540
+ rebuilt.add((0, path_1.resolve)(file));
541
+ settling === null || settling === void 0 ? void 0 : settling.abort();
542
+ settling = new AbortController();
543
+ void (0, promises_1.setTimeout)(REBUILD_SETTLE_MS, undefined, { signal: settling.signal }).then(redrawRebuilt, () => undefined);
544
+ };
377
545
  const refresh = (file) => {
546
+ if (isPackageFile(file))
547
+ return;
378
548
  if ((0, path_1.resolve)(file) === configPath)
379
549
  return reloadConfig();
380
550
  if (isCommentFile(file))
@@ -399,6 +569,8 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
399
569
  };
400
570
  const change = (file) => {
401
571
  var _a;
572
+ if (isPackageFile(file))
573
+ return packageChanged(file);
402
574
  if ((0, path_1.resolve)(file) === configPath)
403
575
  return reloadConfig();
404
576
  if (isCommentFile(file))
@@ -412,17 +584,27 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
412
584
  const dependents = (0, shot_1.dependentIdsOf)((_a = vite.moduleGraph.getModulesByFile(file)) !== null && _a !== void 0 ? _a : [], stylesheetImports);
413
585
  redraw((0, changed_parts_1.changedPartsOf)({ target, config, system, file, dependents }), isSystemFile(file));
414
586
  };
415
- const answer = (handle) => (request, response) => {
587
+ const answer = (handle, held = false) => (request, response) => {
416
588
  var _a;
417
- return void handle(new URL((_a = request.url) !== null && _a !== void 0 ? _a : '', 'http://localhost'), request).then((answered) => sendJson(response, answered), (error) => sendJson(response, {
589
+ const closed = new AbortController();
590
+ response.once('close', () => {
591
+ if (!response.writableFinished)
592
+ closed.abort();
593
+ });
594
+ const answered = handle(new URL((_a = request.url) !== null && _a !== void 0 ? _a : '', 'http://localhost'), {
595
+ request,
596
+ signal: closed.signal,
597
+ }).catch((error) => ({
418
598
  status: 500,
419
599
  body: { error: error instanceof Error ? error.message : String(error) },
420
600
  }));
601
+ void (held ? (0, exports.sendHeldJson)(response, answered) : answered.then((answer) => sendJson(response, answer)));
421
602
  };
422
603
  vite.middlewares.use(stamp_1.STAMP_PATH, (_request, response) => {
423
604
  response.setHeader('content-type', 'application/json');
424
- response.end(JSON.stringify(stamp));
605
+ response.end(JSON.stringify(Object.assign(Object.assign({}, stamp), identityOf())));
425
606
  });
607
+ vite.middlewares.use(draw_ledger_1.QUEUE_PATH, (_request, response) => sendJson(response, { status: 200, body: ledger.report() }));
426
608
  vite.middlewares.use(render_1.RENDER_PATH, (0, render_1.renderMiddleware)(renderer));
427
609
  vite.middlewares.use(render_1.FORCE_PATH, render_1.forceMiddleware);
428
610
  vite.middlewares.use(thumb_1.THUMB_PATH, thumbs.middleware);
@@ -456,7 +638,7 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
456
638
  });
457
639
  return { status: 200, body: products };
458
640
  })));
459
- vite.middlewares.use(product_command_1.PRODUCT_PATH, answer((_url, request) => __awaiter(void 0, void 0, void 0, function* () {
641
+ vite.middlewares.use(product_command_1.PRODUCT_PATH, answer((_url_1, _a) => __awaiter(void 0, [_url_1, _a], void 0, function* (_url, { request }) {
460
642
  const created = yield (0, product_command_1.newProductAnswer)({ target, request });
461
643
  if (created.status === 201)
462
644
  reloadConfig();
@@ -468,22 +650,24 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
468
650
  body: yield (0, calls_1.listCalls)({ target, load: (file) => vite.ssrLoadModule(file) }),
469
651
  });
470
652
  })));
471
- vite.middlewares.use(legacy_1.TRANSFER_PATH, answer((url, request) => __awaiter(void 0, void 0, void 0, function* () {
472
- var _a;
653
+ vite.middlewares.use(legacy_1.TRANSFER_PATH, answer((url_1, _a) => __awaiter(void 0, [url_1, _a], void 0, function* (url, { request }) {
654
+ var _b;
473
655
  if (request.method !== 'POST')
474
656
  return { status: 405, body: { error: 'POST only' } };
475
- const result = (0, legacy_1.markTransferred)({ target, slug: (_a = url.searchParams.get('call')) !== null && _a !== void 0 ? _a : '' });
657
+ const result = (0, legacy_1.markTransferred)({ target, slug: (_b = url.searchParams.get('call')) !== null && _b !== void 0 ? _b : '' });
476
658
  const status = result === 'missing' ? 404 : result === 'unreadable' ? 422 : 200;
477
659
  return { status, body: { result } };
478
660
  })));
479
- const studio = (path, handle) => vite.middlewares.use(path, answer((url, request) => __awaiter(void 0, void 0, void 0, function* () {
661
+ const studio = (path, handle) => vite.middlewares.use(path, answer((url_1, _a) => __awaiter(void 0, [url_1, _a], void 0, function* (url, { request, signal }) {
480
662
  return handle({
481
663
  target,
482
664
  url,
483
665
  request,
666
+ signal,
484
667
  load: ({ file, product, sketch }) => vite.ssrLoadModule((0, system_modules_1.productModuleIdOf)({ file, product, sketch })),
485
668
  pictureOf: shots.pictureOf,
486
669
  boxOf: shots.changedBoxesOf,
670
+ checkSketches: checkSketches !== null && checkSketches !== void 0 ? checkSketches : sketchChecker,
487
671
  inventoryOf: ({ product, part }) => (0, inventory_1.inventoryOf)({
488
672
  product,
489
673
  part,
@@ -493,7 +677,7 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
493
677
  draw: (job) => inventoryDraws.run(job),
494
678
  }),
495
679
  });
496
- })));
680
+ }), path === studio_api_1.SKETCHES_PATH));
497
681
  studio(studio_api_1.SKETCHES_PATH, studio_api_1.sketchesAnswer);
498
682
  studio(studio_api_1.SKETCH_PREVIEW_PATH, studio_api_1.sketchPreviewAnswer);
499
683
  studio(studio_api_1.SKETCH_COMPARE_PATH, studio_api_1.sketchCompareAnswer);
@@ -517,15 +701,19 @@ const designExplore = ({ target, config, system, stylesheetImports, }) => {
517
701
  studio(studio_api_1.FLOW_NOTE_DELETE_PATH, studio_api_1.flowNoteDeleteAnswer);
518
702
  studio(studio_api_1.INVENTORY_PATH, studio_api_1.inventoryAnswer);
519
703
  studio(studio_api_1.INVENTORY_APPROVE_PATH, studio_api_1.inventoryApproveAnswer);
704
+ studio(studio_api_1.OPEN_POINTS_PATH, studio_api_1.openPointsAnswer);
705
+ studio(studio_api_1.PART_GO_PATH, studio_api_1.partGoAnswer);
706
+ studio(studio_api_1.PART_ACCEPT_PATH, studio_api_1.partAcceptAnswer);
520
707
  studio(studio_api_1.EXCEPTIONS_PATH, studio_api_1.exceptionsAnswer);
521
708
  studio(studio_api_1.EXCEPTION_APPROVE_PATH, studio_api_1.exceptionApproveAnswer);
522
709
  vite.middlewares.use(studio_api_1.COMMENT_EVENTS_PATH, events.middleware);
523
710
  (_c = vite.httpServer) === null || _c === void 0 ? void 0 : _c.on('close', () => {
524
711
  events.close();
525
- void Promise.all([thumbs.close(), shots.close(), inventoryDraws.close()]);
712
+ settling === null || settling === void 0 ? void 0 : settling.abort();
713
+ void Promise.all([thumbs.close(), shots.close(), inventoryDraws.close(), sketchChecker === null || sketchChecker === void 0 ? void 0 : sketchChecker.close()]);
526
714
  });
527
- vite.watcher.add([designRoot, ...baseDirs]);
528
- vite.watcher.on('add', refresh);
715
+ vite.watcher.add([designRoot, ...baseDirs, ...packageDirs()]);
716
+ vite.watcher.on('add', (file) => (isPackageFile(file) ? packageChanged(file) : refresh(file)));
529
717
  vite.watcher.on('unlink', refresh);
530
718
  vite.watcher.on('change', change);
531
719
  },
@@ -540,14 +728,33 @@ const freePortOf = () => new Promise((resolvePort, reject) => {
540
728
  probe.close(() => resolvePort(port));
541
729
  });
542
730
  });
731
+ /** The real directories a checkout's `node_modules` points into, which Vite refuses to serve unless allowed. */
732
+ const installedRootsOf = (target) => {
733
+ const modules = (0, path_1.join)(target, 'node_modules');
734
+ const roots = new Set();
735
+ try {
736
+ roots.add((0, fs_1.realpathSync)(modules));
737
+ for (const entry of (0, fs_1.readdirSync)(modules, { withFileTypes: true })) {
738
+ if (entry.isSymbolicLink() && !entry.name.startsWith('.')) {
739
+ roots.add((0, path_1.dirname)((0, fs_1.realpathSync)((0, path_1.join)(modules, entry.name))));
740
+ }
741
+ }
742
+ }
743
+ catch (_a) {
744
+ return [...roots];
745
+ }
746
+ return [...roots];
747
+ };
748
+ exports.installedRootsOf = installedRootsOf;
543
749
  /**
544
750
  * The Vite server that draws a checkout: listening on the configured port to serve the frames, or in
545
751
  * middleware mode only to load design modules for a command. With `port`, it listens there instead
546
- * (0 picks a free one), quiet, unwatched and with a dependency cache of its own, so a command can draw
547
- * while the user's server runs.
752
+ * (0 picks a free one), quiet and unwatched. Only the user's server uses the checkout's dependency cache,
753
+ * so a command can draw while that server runs.
548
754
  */
549
755
  const createDesignServer = (options) => __awaiter(void 0, void 0, void 0, function* () {
550
- const { target, config, listen, sketchesRoot } = options;
756
+ var _a;
757
+ const { target, config, listen, sketchesRoot, checkSketches } = options;
551
758
  const host = options.host || process.env['DE_HOST'] || undefined;
552
759
  const own = listen && options.port !== undefined;
553
760
  const port = own ? yield freePortOf() : options.listenOn;
@@ -569,6 +776,7 @@ const createDesignServer = (options) => __awaiter(void 0, void 0, void 0, functi
569
776
  }
570
777
  const baseDirs = system.products().flatMap((name) => { var _a, _b, _c; return (_c = (_b = (_a = system.productOf(name)) === null || _a === void 0 ? void 0 : _a.base) === null || _b === void 0 ? void 0 : _b.dir) !== null && _c !== void 0 ? _c : []; });
571
778
  const stylesheetImports = new Map();
779
+ const cache = listen && !own ? null : (0, paths_1.claimViteCache)(target, 'vite-check');
572
780
  const server = yield createServer(Object.assign(Object.assign(Object.assign({ configFile: false, root: (0, path_1.resolve)(here, 'web'),
573
781
  // Every drawing is ruled under Tailwind 4, whatever the checkout installs. The tool brings its
574
782
  // own pipeline so no checkout's postcss config reaches a drawing.
@@ -585,7 +793,7 @@ const createDesignServer = (options) => __awaiter(void 0, void 0, void 0, functi
585
793
  (0, shot_1.stylesheetImportsPlugin)(stylesheetImports),
586
794
  ],
587
795
  },
588
- }, cacheDir: (0, paths_1.viteCacheOf)(target, own ? 'vite-check' : 'vite'), resolve: {
796
+ }, cacheDir: (_a = cache === null || cache === void 0 ? void 0 : cache.dir) !== null && _a !== void 0 ? _a : (0, paths_1.viteCacheOf)(target, 'vite'), resolve: {
589
797
  alias: [
590
798
  { find: /^@design-explore$/, replacement: (0, path_1.resolve)(here, 'define-call.ts') },
591
799
  { find: new RegExp(`^${system_tsconfig_1.DESIGN_SYSTEM_SPECIFIER}$`), replacement: (0, path_1.resolve)(here, 'define-part.ts') },
@@ -594,14 +802,28 @@ const createDesignServer = (options) => __awaiter(void 0, void 0, void 0, functi
594
802
  ],
595
803
  },
596
804
  // A design mock ships as TS that imports CSS with `?inline`, which the dependency pre-bundler
597
- // can not load.
598
- optimizeDeps: { exclude: ['@ethlete/components', '@ethlete/core'] }, plugins: [designExplore({ target, config, system, stylesheetImports })] }, (listen ? {} : { appType: 'custom' })), (listen && !own ? {} : { logLevel: 'error' })), { server: Object.assign(Object.assign({
805
+ // can not load. The tool's own modules sit in a snapshot under `node_modules`; pre-bundled, each
806
+ // late find of one reloads every frame.
807
+ optimizeDeps: {
808
+ exclude: ['@ethlete/components', '@ethlete/core', '@design-explore', system_tsconfig_1.DESIGN_SYSTEM_SPECIFIER, kit_1.KIT_SPECIFIER],
809
+ }, plugins: [
810
+ designExplore({
811
+ target,
812
+ config,
813
+ system,
814
+ stylesheetImports,
815
+ shotCacheDir: listen && !own ? (0, paths_1.viteCacheOf)(target, 'shots') : null,
816
+ checkSketches,
817
+ }),
818
+ ] }, (listen ? {} : { appType: 'custom' })), (listen && !own ? {} : { logLevel: 'error' })), { server: Object.assign(Object.assign({
599
819
  // Studio swaps a frame for a fresh one once it has painted; a Vite reload would blank every frame at once.
600
820
  hmr: false }, (listen
601
821
  ? Object.assign(Object.assign(Object.assign({ port: port !== null && port !== void 0 ? port : (0, paths_1.portOf)(config) }, (host ? { host } : {})), { strictPort: true }), (own ? { watch: null } : {})) : { middlewareMode: true, ws: false, watch: null })), {
602
822
  // The frame page lives inside this package, which is outside the checkout it draws. Vite
603
823
  // serves neither root unless both are allowed.
604
- fs: { allow: [target, here, ...baseDirs] } }) }));
824
+ fs: { allow: [target, here, ...baseDirs, ...(0, exports.installedRootsOf)(target)] } }) }));
825
+ const closing = server.close.bind(server);
826
+ server.close = () => closing().finally(() => cache === null || cache === void 0 ? void 0 : cache.release());
605
827
  const listening = server.listen.bind(server);
606
828
  server.listen = (...args) => listening(...args).catch((error) => {
607
829
  const code = error === null || error === void 0 ? void 0 : error.code;
@@ -624,35 +846,66 @@ const exitWhenStdinCloses = (server) => {
624
846
  process.stdin.once('close', shutDown);
625
847
  process.stdin.resume();
626
848
  };
849
+ const installedStampOf = () => (0, stamp_1.buildStampOf)((0, paths_1.installedAssetRoot)()).build;
627
850
  /**
628
851
  * Starts the design server for a checkout and keeps it running. The returned exit code is the
629
- * command's, not the server's: a listening server holds the process open on its own.
852
+ * command's, not the server's: a listening server holds the process open on its own. With
853
+ * `reloadOnRebuild`, a rebuild or reinstall of the cli restarts the server on the same port from
854
+ * the new build, inside the process that was started.
630
855
  */
631
856
  const serveDesign = (options) => __awaiter(void 0, void 0, void 0, function* () {
632
- const { target, host } = options;
857
+ const { target, host, reloadOnRebuild, checkSketches } = options;
633
858
  const config = (0, paths_1.readConfig)(target);
634
859
  if (!config) {
635
860
  console.error(`design-explore: no config at ${(0, paths_1.configPathOf)(target)}`);
636
861
  return 1;
637
862
  }
863
+ const cwd = process.cwd();
864
+ const served = reloadOnRebuild ? installedStampOf() : '';
638
865
  (0, paths_1.snapshotPackage)(target);
639
866
  const ownedByStudio = process.env['ETHLETE_DESIGN_EXIT_ON_STDIN_CLOSE'] === '1';
867
+ const portPinned = ownedByStudio || !!Number(process.env['DE_PORT']);
640
868
  const server = yield (0, exports.createDesignServer)({
641
869
  target,
642
870
  config,
643
871
  listen: true,
644
872
  host,
645
- listenOn: ownedByStudio ? undefined : yield freePortOf(),
873
+ listenOn: portPinned ? undefined : yield freePortOf(),
874
+ checkSketches,
646
875
  });
647
876
  yield server.listen();
648
877
  console.log(`design-explore: drawing ${target}`);
649
- if (!ownedByStudio) {
878
+ if (!portPinned) {
650
879
  console.log(`design-explore: not started by Studio, so it listens on a free port and leaves ${(0, paths_1.portOf)(config)} to Studio`);
651
880
  }
652
881
  server.printUrls();
882
+ if (process.env['ETHLETE_DESIGN_SLOW_CHECKS'] !== 'off')
883
+ (0, slow_run_1.startSlowRunner)({
884
+ target,
885
+ configOf: () => (0, paths_1.readConfig)(target),
886
+ log: (line) => console.log(`design-explore: ${line}`),
887
+ });
653
888
  if (ownedByStudio) {
654
889
  exitWhenStdinCloses(server);
655
890
  }
891
+ if (reloadOnRebuild) {
892
+ (0, build_watch_1.watchBuild)({
893
+ root: (0, path_1.dirname)((0, paths_1.installedAssetRoot)()),
894
+ served,
895
+ stampOf: installedStampOf,
896
+ onRebuild: () => {
897
+ var _a;
898
+ const address = (_a = server.httpServer) === null || _a === void 0 ? void 0 : _a.address();
899
+ const port = address && typeof address === 'object' ? address.port : (0, paths_1.portOf)(config);
900
+ console.log('design-explore: the cli was rebuilt, restarting the server from the new build');
901
+ void server
902
+ .close()
903
+ .then(() => process.env[build_watch_1.SUPERVISED_ENV] === '1'
904
+ ? process.exit(build_watch_1.RELOAD_EXIT_CODE)
905
+ : (0, build_watch_1.superviseReloads)(() => (0, build_watch_1.relaunch)({ port, cwd })).then((code) => process.exit(code)));
906
+ },
907
+ });
908
+ }
656
909
  return 0;
657
910
  });
658
911
  exports.serveDesign = serveDesign;