@ethlete/cli 3.0.0-next.21 → 3.0.0-next.22

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 (335) hide show
  1. package/CHANGELOG.md +180 -0
  2. package/design/assets.d.ts +9 -0
  3. package/design/define-call.ts +20 -11
  4. package/design/define-part.ts +102 -0
  5. package/design/embed-page.ts +70 -0
  6. package/design/interaction-rows.ts +32 -0
  7. package/design/mark-part.ts +66 -0
  8. package/design/svg-asset.ts +36 -0
  9. package/design/systems/config.json +10 -0
  10. package/design/systems/ethlete-components/components/button/button.ts +18 -0
  11. package/design/web/env.d.ts +20 -0
  12. package/design/web/frame.ts +173 -41
  13. package/design/wireframe-kit.ts +386 -0
  14. package/package.json +4 -2
  15. package/src/index.js.map +1 -1
  16. package/src/lib/api/api-command.js.map +1 -1
  17. package/src/lib/api/api-context.js.map +1 -1
  18. package/src/lib/api/api-state.js.map +1 -1
  19. package/src/lib/api/auth-hint.js.map +1 -1
  20. package/src/lib/api/clear.js.map +1 -1
  21. package/src/lib/api/clone.js.map +1 -1
  22. package/src/lib/api/compose.js.map +1 -1
  23. package/src/lib/api/definition.js.map +1 -1
  24. package/src/lib/api/doctor.js.map +1 -1
  25. package/src/lib/api/fingerprint.js.map +1 -1
  26. package/src/lib/api/git.js.map +1 -1
  27. package/src/lib/api/help.js.map +1 -1
  28. package/src/lib/api/index.js.map +1 -1
  29. package/src/lib/api/load-definitions.js.map +1 -1
  30. package/src/lib/api/lock.js.map +1 -1
  31. package/src/lib/api/parse-argv.js.map +1 -1
  32. package/src/lib/api/ports.js.map +1 -1
  33. package/src/lib/api/resolve-checkout.js.map +1 -1
  34. package/src/lib/api/run-locked.js.map +1 -1
  35. package/src/lib/api/run-ready.js.map +1 -1
  36. package/src/lib/api/run-snapshot.js.map +1 -1
  37. package/src/lib/api/run-status.js.map +1 -1
  38. package/src/lib/api/run.js.map +1 -1
  39. package/src/lib/api/seeds.js.map +1 -1
  40. package/src/lib/api/setup.js.map +1 -1
  41. package/src/lib/api/snapshot.js.map +1 -1
  42. package/src/lib/api/state.js.map +1 -1
  43. package/src/lib/api/suggest.js.map +1 -1
  44. package/src/lib/api/validate-definition.js.map +1 -1
  45. package/src/lib/auth/auth-command.js.map +1 -1
  46. package/src/lib/auth/composer-auth.js.map +1 -1
  47. package/src/lib/auth/composer-repositories.js.map +1 -1
  48. package/src/lib/auth/gitlab-token.js.map +1 -1
  49. package/src/lib/auth/index.js.map +1 -1
  50. package/src/lib/config/diagnose.js.map +1 -1
  51. package/src/lib/config/index.js.map +1 -1
  52. package/src/lib/config/local-config.js.map +1 -1
  53. package/src/lib/design/asset-shot.d.ts +26 -0
  54. package/src/lib/design/asset-shot.js +191 -0
  55. package/src/lib/design/asset-shot.js.map +1 -0
  56. package/src/lib/design/browser.js.map +1 -1
  57. package/src/lib/design/calls-tsconfig.d.ts +14 -1
  58. package/src/lib/design/calls-tsconfig.js +23 -18
  59. package/src/lib/design/calls-tsconfig.js.map +1 -1
  60. package/src/lib/design/calls.d.ts +28 -0
  61. package/src/lib/design/calls.js +58 -0
  62. package/src/lib/design/calls.js.map +1 -0
  63. package/src/lib/design/changed-parts.d.ts +51 -0
  64. package/src/lib/design/changed-parts.js +103 -0
  65. package/src/lib/design/changed-parts.js.map +1 -0
  66. package/src/lib/design/check.js +53 -54
  67. package/src/lib/design/check.js.map +1 -1
  68. package/src/lib/design/contact-sheet.d.ts +68 -0
  69. package/src/lib/design/contact-sheet.js +169 -0
  70. package/src/lib/design/contact-sheet.js.map +1 -0
  71. package/src/lib/design/design-command.js +165 -6
  72. package/src/lib/design/design-command.js.map +1 -1
  73. package/src/lib/design/force-interactions.d.ts +13 -0
  74. package/src/lib/design/force-interactions.js +75 -0
  75. package/src/lib/design/force-interactions.js.map +1 -0
  76. package/src/lib/design/inbox-command.d.ts +21 -0
  77. package/src/lib/design/inbox-command.js +156 -0
  78. package/src/lib/design/inbox-command.js.map +1 -0
  79. package/src/lib/design/index.js.map +1 -1
  80. package/src/lib/design/json-layout.d.ts +5 -0
  81. package/src/lib/design/json-layout.js +41 -0
  82. package/src/lib/design/json-layout.js.map +1 -0
  83. package/src/lib/design/legacy.d.ts +7 -0
  84. package/src/lib/design/legacy.js +23 -8
  85. package/src/lib/design/legacy.js.map +1 -1
  86. package/src/lib/design/merge-compare.d.ts +57 -0
  87. package/src/lib/design/merge-compare.js +80 -0
  88. package/src/lib/design/merge-compare.js.map +1 -0
  89. package/src/lib/design/missing-package.js.map +1 -1
  90. package/src/lib/design/new-call.js.map +1 -1
  91. package/src/lib/design/part-marks.d.ts +12 -0
  92. package/src/lib/design/part-marks.js +38 -0
  93. package/src/lib/design/part-marks.js.map +1 -0
  94. package/src/lib/design/paths.d.ts +35 -2
  95. package/src/lib/design/paths.js +62 -4
  96. package/src/lib/design/paths.js.map +1 -1
  97. package/src/lib/design/product-command.d.ts +38 -0
  98. package/src/lib/design/product-command.js +158 -0
  99. package/src/lib/design/product-command.js.map +1 -0
  100. package/src/lib/design/ready-shots.d.ts +13 -0
  101. package/src/lib/design/ready-shots.js +55 -0
  102. package/src/lib/design/ready-shots.js.map +1 -0
  103. package/src/lib/design/render-fields.js.map +1 -1
  104. package/src/lib/design/render-packages.js.map +1 -1
  105. package/src/lib/design/render-worker.js.map +1 -1
  106. package/src/lib/design/render.d.ts +8 -1
  107. package/src/lib/design/render.js +43 -14
  108. package/src/lib/design/render.js.map +1 -1
  109. package/src/lib/design/serve.d.ts +17 -0
  110. package/src/lib/design/serve.js +444 -67
  111. package/src/lib/design/serve.js.map +1 -1
  112. package/src/lib/design/shot-command.d.ts +75 -0
  113. package/src/lib/design/shot-command.js +361 -0
  114. package/src/lib/design/shot-command.js.map +1 -0
  115. package/src/lib/design/shot.d.ts +97 -0
  116. package/src/lib/design/shot.js +346 -0
  117. package/src/lib/design/shot.js.map +1 -0
  118. package/src/lib/design/sketch-at.d.ts +16 -0
  119. package/src/lib/design/sketch-at.js +34 -0
  120. package/src/lib/design/sketch-at.js.map +1 -0
  121. package/src/lib/design/sketch-command.d.ts +9 -0
  122. package/src/lib/design/sketch-command.js +572 -0
  123. package/src/lib/design/sketch-command.js.map +1 -0
  124. package/src/lib/design/ssr-shims.js.map +1 -1
  125. package/src/lib/design/stamp.js.map +1 -1
  126. package/src/lib/design/status.d.ts +2 -2
  127. package/src/lib/design/status.js +2 -2
  128. package/src/lib/design/status.js.map +1 -1
  129. package/src/lib/design/studio-api.d.ts +102 -0
  130. package/src/lib/design/studio-api.js +452 -0
  131. package/src/lib/design/studio-api.js.map +1 -0
  132. package/src/lib/design/system/accept-command.d.ts +7 -0
  133. package/src/lib/design/system/accept-command.js +55 -0
  134. package/src/lib/design/system/accept-command.js.map +1 -0
  135. package/src/lib/design/system/assets.d.ts +34 -0
  136. package/src/lib/design/system/assets.js +64 -0
  137. package/src/lib/design/system/assets.js.map +1 -0
  138. package/src/lib/design/system/base.d.ts +33 -0
  139. package/src/lib/design/system/base.js +49 -0
  140. package/src/lib/design/system/base.js.map +1 -0
  141. package/src/lib/design/system/check-system.d.ts +23 -0
  142. package/src/lib/design/system/check-system.js +151 -0
  143. package/src/lib/design/system/check-system.js.map +1 -0
  144. package/src/lib/design/system/colour.d.ts +2 -0
  145. package/src/lib/design/system/colour.js +9 -0
  146. package/src/lib/design/system/colour.js.map +1 -0
  147. package/src/lib/design/system/comments/comment.d.ts +196 -0
  148. package/src/lib/design/system/comments/comment.js +332 -0
  149. package/src/lib/design/system/comments/comment.js.map +1 -0
  150. package/src/lib/design/system/comments/complete.d.ts +15 -0
  151. package/src/lib/design/system/comments/complete.js +63 -0
  152. package/src/lib/design/system/comments/complete.js.map +1 -0
  153. package/src/lib/design/system/comments/inbox.d.ts +49 -0
  154. package/src/lib/design/system/comments/inbox.js +100 -0
  155. package/src/lib/design/system/comments/inbox.js.map +1 -0
  156. package/src/lib/design/system/css-source.d.ts +12 -0
  157. package/src/lib/design/system/css-source.js +39 -0
  158. package/src/lib/design/system/css-source.js.map +1 -0
  159. package/src/lib/design/system/flows/flow.d.ts +66 -0
  160. package/src/lib/design/system/flows/flow.js +157 -0
  161. package/src/lib/design/system/flows/flow.js.map +1 -0
  162. package/src/lib/design/system/imports.d.ts +70 -0
  163. package/src/lib/design/system/imports.js +159 -0
  164. package/src/lib/design/system/imports.js.map +1 -0
  165. package/src/lib/design/system/kit.d.ts +4 -0
  166. package/src/lib/design/system/kit.js +51 -0
  167. package/src/lib/design/system/kit.js.map +1 -0
  168. package/src/lib/design/system/layers.d.ts +9 -0
  169. package/src/lib/design/system/layers.js +16 -0
  170. package/src/lib/design/system/layers.js.map +1 -0
  171. package/src/lib/design/system/list-system.d.ts +104 -0
  172. package/src/lib/design/system/list-system.js +212 -0
  173. package/src/lib/design/system/list-system.js.map +1 -0
  174. package/src/lib/design/system/notes/note.d.ts +53 -0
  175. package/src/lib/design/system/notes/note.js +116 -0
  176. package/src/lib/design/system/notes/note.js.map +1 -0
  177. package/src/lib/design/system/part-command.d.ts +7 -0
  178. package/src/lib/design/system/part-command.js +134 -0
  179. package/src/lib/design/system/part-command.js.map +1 -0
  180. package/src/lib/design/system/problem.d.ts +5 -0
  181. package/src/lib/design/system/problem.js +3 -0
  182. package/src/lib/design/system/problem.js.map +1 -0
  183. package/src/lib/design/system/product.d.ts +18 -0
  184. package/src/lib/design/system/product.js +35 -0
  185. package/src/lib/design/system/product.js.map +1 -0
  186. package/src/lib/design/system/render-check.d.ts +45 -0
  187. package/src/lib/design/system/render-check.js +427 -0
  188. package/src/lib/design/system/render-check.js.map +1 -0
  189. package/src/lib/design/system/resolve-product.d.ts +32 -0
  190. package/src/lib/design/system/resolve-product.js +62 -0
  191. package/src/lib/design/system/resolve-product.js.map +1 -0
  192. package/src/lib/design/system/rules/component-copy.d.ts +7 -0
  193. package/src/lib/design/system/rules/component-copy.js +53 -0
  194. package/src/lib/design/system/rules/component-copy.js.map +1 -0
  195. package/src/lib/design/system/rules/flow.d.ts +8 -0
  196. package/src/lib/design/system/rules/flow.js +60 -0
  197. package/src/lib/design/system/rules/flow.js.map +1 -0
  198. package/src/lib/design/system/rules/hard-coded-colour.d.ts +7 -0
  199. package/src/lib/design/system/rules/hard-coded-colour.js +27 -0
  200. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -0
  201. package/src/lib/design/system/rules/interactions.d.ts +4 -0
  202. package/src/lib/design/system/rules/interactions.js +16 -0
  203. package/src/lib/design/system/rules/interactions.js.map +1 -0
  204. package/src/lib/design/system/rules/kit-outside-pages.d.ts +4 -0
  205. package/src/lib/design/system/rules/kit-outside-pages.js +14 -0
  206. package/src/lib/design/system/rules/kit-outside-pages.js.map +1 -0
  207. package/src/lib/design/system/rules/motion.d.ts +4 -0
  208. package/src/lib/design/system/rules/motion.js +13 -0
  209. package/src/lib/design/system/rules/motion.js.map +1 -0
  210. package/src/lib/design/system/rules/stale-comment.d.ts +8 -0
  211. package/src/lib/design/system/rules/stale-comment.js +51 -0
  212. package/src/lib/design/system/rules/stale-comment.js.map +1 -0
  213. package/src/lib/design/system/rules/stale-replace.d.ts +4 -0
  214. package/src/lib/design/system/rules/stale-replace.js +65 -0
  215. package/src/lib/design/system/rules/stale-replace.js.map +1 -0
  216. package/src/lib/design/system/rules/svg-asset.d.ts +6 -0
  217. package/src/lib/design/system/rules/svg-asset.js +30 -0
  218. package/src/lib/design/system/rules/svg-asset.js.map +1 -0
  219. package/src/lib/design/system/rules/token-selectors.d.ts +3 -0
  220. package/src/lib/design/system/rules/token-selectors.js +87 -0
  221. package/src/lib/design/system/rules/token-selectors.js.map +1 -0
  222. package/src/lib/design/system/rules/undefined-token.d.ts +8 -0
  223. package/src/lib/design/system/rules/undefined-token.js +103 -0
  224. package/src/lib/design/system/rules/undefined-token.js.map +1 -0
  225. package/src/lib/design/system/rules/unused-shared-export.d.ts +18 -0
  226. package/src/lib/design/system/rules/unused-shared-export.js +60 -0
  227. package/src/lib/design/system/rules/unused-shared-export.js.map +1 -0
  228. package/src/lib/design/system/rules/upward-dependency.d.ts +4 -0
  229. package/src/lib/design/system/rules/upward-dependency.js +17 -0
  230. package/src/lib/design/system/rules/upward-dependency.js.map +1 -0
  231. package/src/lib/design/system/rules/widths.d.ts +4 -0
  232. package/src/lib/design/system/rules/widths.js +14 -0
  233. package/src/lib/design/system/rules/widths.js.map +1 -0
  234. package/src/lib/design/system/sketch/baseline.d.ts +38 -0
  235. package/src/lib/design/system/sketch/baseline.js +66 -0
  236. package/src/lib/design/system/sketch/baseline.js.map +1 -0
  237. package/src/lib/design/system/sketch/check-format.d.ts +17 -0
  238. package/src/lib/design/system/sketch/check-format.js +56 -0
  239. package/src/lib/design/system/sketch/check-format.js.map +1 -0
  240. package/src/lib/design/system/sketch/check-sketches.d.ts +38 -0
  241. package/src/lib/design/system/sketch/check-sketches.js +104 -0
  242. package/src/lib/design/system/sketch/check-sketches.js.map +1 -0
  243. package/src/lib/design/system/sketch/cli-args.d.ts +26 -0
  244. package/src/lib/design/system/sketch/cli-args.js +63 -0
  245. package/src/lib/design/system/sketch/cli-args.js.map +1 -0
  246. package/src/lib/design/system/sketch/duplicate-class.d.ts +14 -0
  247. package/src/lib/design/system/sketch/duplicate-class.js +57 -0
  248. package/src/lib/design/system/sketch/duplicate-class.js.map +1 -0
  249. package/src/lib/design/system/sketch/merge-preview.d.ts +15 -0
  250. package/src/lib/design/system/sketch/merge-preview.js +43 -0
  251. package/src/lib/design/system/sketch/merge-preview.js.map +1 -0
  252. package/src/lib/design/system/sketch/merge-shared.d.ts +25 -0
  253. package/src/lib/design/system/sketch/merge-shared.js +53 -0
  254. package/src/lib/design/system/sketch/merge-shared.js.map +1 -0
  255. package/src/lib/design/system/sketch/merge.d.ts +31 -0
  256. package/src/lib/design/system/sketch/merge.js +145 -0
  257. package/src/lib/design/system/sketch/merge.js.map +1 -0
  258. package/src/lib/design/system/sketch/merged-parts.d.ts +59 -0
  259. package/src/lib/design/system/sketch/merged-parts.js +134 -0
  260. package/src/lib/design/system/sketch/merged-parts.js.map +1 -0
  261. package/src/lib/design/system/sketch/no-visible-change.d.ts +15 -0
  262. package/src/lib/design/system/sketch/no-visible-change.js +70 -0
  263. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -0
  264. package/src/lib/design/system/sketch/overlay.d.ts +20 -0
  265. package/src/lib/design/system/sketch/overlay.js +38 -0
  266. package/src/lib/design/system/sketch/overlay.js.map +1 -0
  267. package/src/lib/design/system/sketch/part-definition.d.ts +31 -0
  268. package/src/lib/design/system/sketch/part-definition.js +157 -0
  269. package/src/lib/design/system/sketch/part-definition.js.map +1 -0
  270. package/src/lib/design/system/sketch/shared-class.d.ts +9 -0
  271. package/src/lib/design/system/sketch/shared-class.js +65 -0
  272. package/src/lib/design/system/sketch/shared-class.js.map +1 -0
  273. package/src/lib/design/system/sketch/sketch.d.ts +221 -0
  274. package/src/lib/design/system/sketch/sketch.js +481 -0
  275. package/src/lib/design/system/sketch/sketch.js.map +1 -0
  276. package/src/lib/design/system/sketch/unchanged-states.d.ts +23 -0
  277. package/src/lib/design/system/sketch/unchanged-states.js +144 -0
  278. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -0
  279. package/src/lib/design/system/sketch/unused-files.d.ts +10 -0
  280. package/src/lib/design/system/sketch/unused-files.js +56 -0
  281. package/src/lib/design/system/sketch/unused-files.js.map +1 -0
  282. package/src/lib/design/system/system-command.d.ts +9 -0
  283. package/src/lib/design/system/system-command.js +56 -0
  284. package/src/lib/design/system/system-command.js.map +1 -0
  285. package/src/lib/design/system/system-modules.d.ts +58 -0
  286. package/src/lib/design/system/system-modules.js +189 -0
  287. package/src/lib/design/system/system-modules.js.map +1 -0
  288. package/src/lib/design/system/system-tsconfig.d.ts +26 -0
  289. package/src/lib/design/system/system-tsconfig.js +68 -0
  290. package/src/lib/design/system/system-tsconfig.js.map +1 -0
  291. package/src/lib/design/system/ts-source.d.ts +13 -0
  292. package/src/lib/design/system/ts-source.js +108 -0
  293. package/src/lib/design/system/ts-source.js.map +1 -0
  294. package/src/lib/design/system-use.js.map +1 -1
  295. package/src/lib/design/thumb.d.ts +48 -4
  296. package/src/lib/design/thumb.js +127 -37
  297. package/src/lib/design/thumb.js.map +1 -1
  298. package/src/lib/design/typecheck.d.ts +27 -0
  299. package/src/lib/design/typecheck.js +60 -0
  300. package/src/lib/design/typecheck.js.map +1 -0
  301. package/src/lib/design/variant-diff.d.ts +48 -0
  302. package/src/lib/design/variant-diff.js +77 -0
  303. package/src/lib/design/variant-diff.js.map +1 -0
  304. package/src/lib/design/vite-paths.d.ts +2 -0
  305. package/src/lib/design/vite-paths.js +10 -1
  306. package/src/lib/design/vite-paths.js.map +1 -1
  307. package/src/lib/doctor/doctor-command.js.map +1 -1
  308. package/src/lib/doctor/index.js.map +1 -1
  309. package/src/lib/index.js.map +1 -1
  310. package/src/lib/invocation.js +6 -2
  311. package/src/lib/invocation.js.map +1 -1
  312. package/src/lib/release.js.map +1 -1
  313. package/src/lib/update/agent-rules-sync.js.map +1 -1
  314. package/src/lib/update/agent-setup.js.map +1 -1
  315. package/src/lib/update/ai.js.map +1 -1
  316. package/src/lib/update/args.js.map +1 -1
  317. package/src/lib/update/available-migrations.js.map +1 -1
  318. package/src/lib/update/commits.js.map +1 -1
  319. package/src/lib/update/gitignore.js.map +1 -1
  320. package/src/lib/update/index.js.map +1 -1
  321. package/src/lib/update/migration-manifest.js.map +1 -1
  322. package/src/lib/update/migration-record.js.map +1 -1
  323. package/src/lib/update/migrations-command.js.map +1 -1
  324. package/src/lib/update/package-manager.d.ts +1 -1
  325. package/src/lib/update/package-manager.js.map +1 -1
  326. package/src/lib/update/packages.js.map +1 -1
  327. package/src/lib/update/pending.js.map +1 -1
  328. package/src/lib/update/plan.js.map +1 -1
  329. package/src/lib/update/registry.js.map +1 -1
  330. package/src/lib/update/run-migrations.js.map +1 -1
  331. package/src/lib/update/scan.js.map +1 -1
  332. package/src/lib/update/semver.js.map +1 -1
  333. package/src/lib/update/tasks.js.map +1 -1
  334. package/src/lib/update/update-command.js.map +1 -1
  335. package/src/lib/utils.js.map +1 -1
@@ -0,0 +1,49 @@
1
+ import { DesignConfig } from '../../paths';
2
+ import { DesignComment, ThreadState } from './comment';
3
+ export type InboxComment = Omit<DesignComment, 'file'> & {
4
+ kind: 'comment';
5
+ file: string;
6
+ at: string;
7
+ threadState: ThreadState;
8
+ };
9
+ type DecisionOn = {
10
+ product: string;
11
+ target: string;
12
+ comment?: string;
13
+ at: string;
14
+ };
15
+ export type InboxDecision = (DecisionOn & {
16
+ kind: 'pick';
17
+ variant: string;
18
+ }) | (DecisionOn & {
19
+ kind: 'discard';
20
+ });
21
+ /** A sketch whose baseline is stale: `changed` names the parts that changed in the product, `[]` when it records no baseline. */
22
+ export type InboxRebase = {
23
+ kind: 'rebase';
24
+ product: string;
25
+ target: string;
26
+ changed: string[];
27
+ at: string;
28
+ };
29
+ export type InboxItem = InboxComment | InboxDecision | InboxRebase;
30
+ /**
31
+ * Everything that waits for the agent, across the named products, oldest first: each open comment thread whose
32
+ * last word is the user's and each sketch that needs a rebase. `waiting` holds the open threads whose last word is
33
+ * the agent's and the pick or discard decisions, which the user carries out in Studio. `unreadable` names the files that could not be read.
34
+ */
35
+ export declare const inboxOf: (options: {
36
+ target: string;
37
+ config: DesignConfig;
38
+ products?: string[];
39
+ }) => {
40
+ items: InboxItem[];
41
+ waiting: (InboxComment | InboxDecision)[];
42
+ unreadable: string[];
43
+ };
44
+ /** The inbox as text, one block per item with the command that settles it, then what waits for the user. */
45
+ export declare const inboxText: (inbox: {
46
+ items: InboxItem[];
47
+ waiting: InboxItem[];
48
+ }, invocation: string) => string;
49
+ export {};
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inboxText = exports.inboxOf = void 0;
4
+ const path_1 = require("path");
5
+ const product_1 = require("../product");
6
+ const baseline_1 = require("../sketch/baseline");
7
+ const cli_args_1 = require("../sketch/cli-args");
8
+ const sketch_1 = require("../sketch/sketch");
9
+ const comment_1 = require("./comment");
10
+ /**
11
+ * Everything that waits for the agent, across the named products, oldest first: each open comment thread whose
12
+ * last word is the user's and each sketch that needs a rebase. `waiting` holds the open threads whose last word is
13
+ * the agent's and the pick or discard decisions, which the user carries out in Studio. `unreadable` names the files that could not be read.
14
+ */
15
+ const inboxOf = (options) => {
16
+ var _a, _b, _c, _d;
17
+ const { target, config } = options;
18
+ const products = (_a = options.products) !== null && _a !== void 0 ? _a : Object.keys((_b = config.products) !== null && _b !== void 0 ? _b : {});
19
+ const items = [];
20
+ const waiting = [];
21
+ const unreadable = [];
22
+ for (const product of products) {
23
+ const productDir = (0, product_1.productDirOf)({ target, product });
24
+ const comments = (0, comment_1.listComments)({ productDir, product });
25
+ unreadable.push(...comments.unreadable.map(({ file, problem }) => `${(0, path_1.relative)(target, file)}: ${problem}`));
26
+ for (const comment of comments.comments) {
27
+ const item = Object.assign(Object.assign({}, comment), { kind: 'comment', file: (0, path_1.relative)(target, comment.file), at: (_d = (_c = comment.replies[comment.replies.length - 1]) === null || _c === void 0 ? void 0 : _c.createdAt) !== null && _d !== void 0 ? _d : comment.createdAt, threadState: (0, comment_1.threadStateOf)(comment) });
28
+ ((0, comment_1.lastWordOf)(comment) === 'user' ? items : waiting).push(item);
29
+ }
30
+ const sketches = (0, sketch_1.listSketches)({ productDir, product });
31
+ const resolved = sketches.length > 0 ? (0, cli_args_1.oneProductOf)({ target, config, asked: product }) : null;
32
+ if (typeof resolved === 'string')
33
+ unreadable.push(resolved);
34
+ for (const sketch of sketches) {
35
+ if (typeof sketch === 'string') {
36
+ unreadable.push(sketch);
37
+ continue;
38
+ }
39
+ const changed = resolved && typeof resolved !== 'string' ? (0, baseline_1.staleBaselineOf)({ product: resolved, sketch }) : null;
40
+ if (changed)
41
+ items.push({ kind: 'rebase', product, target: sketch.target, changed, at: sketch.createdAt });
42
+ if (!sketch.decision)
43
+ continue;
44
+ const { decision } = sketch;
45
+ const on = Object.assign({ product, target: sketch.target, at: decision.decidedAt }, (decision.comment ? { comment: decision.comment } : {}));
46
+ waiting.push(decision.kind === 'pick' ? Object.assign(Object.assign({}, on), { kind: 'pick', variant: decision.variant }) : Object.assign(Object.assign({}, on), { kind: 'discard' }));
47
+ }
48
+ }
49
+ const byTime = (a, b) => a.at.localeCompare(b.at);
50
+ return { items: items.sort(byTime), waiting: waiting.sort(byTime), unreadable };
51
+ };
52
+ exports.inboxOf = inboxOf;
53
+ const quoted = (text) => JSON.stringify(text);
54
+ const indented = (text, by = ' ') => text.split('\n').map((line) => `${by}${line}`);
55
+ const lineOf = (item, invocation) => {
56
+ const when = item.at.slice(0, 16).replace('T', ' ');
57
+ if (item.kind === 'comment') {
58
+ const where = [
59
+ item.part,
60
+ item.state,
61
+ typeof item.size === 'number' ? `${item.size} px` : item.size,
62
+ ...(item.interaction === comment_1.REST ? [] : [item.interaction]),
63
+ ...(item.point ? [`at ${item.point.x},${item.point.y}`] : []),
64
+ ...(item.sketch ? [`sketch ${item.sketch.target} variant ${item.sketch.variant}`] : []),
65
+ ].join(' · ');
66
+ return [
67
+ `${when} ${item.product} comment ${item.id}${item.threadState === 'agent' ? '' : ` (${item.threadState})`} ${where}`,
68
+ ...indented(item.text),
69
+ ...item.replies.flatMap((reply) => [
70
+ ` ${reply.by}${reply.author ? ` ${reply.author}` : ''}${reply.question ? ' asks' : ''}:`,
71
+ ...indented(reply.text, ' '),
72
+ ]),
73
+ ` reply: ${invocation} comment reply ${item.id} --product ${item.product} --by <model id> ${quoted('…')}`,
74
+ ` done: ${invocation} inbox done ${item.id} --note "…" --by <model id>`,
75
+ ];
76
+ }
77
+ if (item.kind === 'rebase')
78
+ return [
79
+ `${when} ${item.product} needs rebase ${item.target}: ${item.changed.length > 0 ? `${item.changed.join(', ')} changed in the product` : 'it records no baseline'}`,
80
+ ` bring each variant up to date, then run: ${invocation} sketch rebase ${item.target} --product ${item.product} --by <model id>`,
81
+ ];
82
+ const said = item.comment ? [` ${item.comment}`] : [];
83
+ if (item.kind === 'pick')
84
+ return [
85
+ `${when} ${item.product} pick ${item.target} variant ${item.variant}`,
86
+ ...said,
87
+ ' the user merges it in Studio - do not run sketch merge',
88
+ ];
89
+ return [`${when} ${item.product} discard ${item.target}`, ...said, ' the user discards it in Studio'];
90
+ };
91
+ /** The inbox as text, one block per item with the command that settles it, then what waits for the user. */
92
+ const inboxText = (inbox, invocation) => {
93
+ const work = inbox.items.length === 0 ? ['inbox empty'] : inbox.items.flatMap((item) => lineOf(item, invocation));
94
+ const waiting = inbox.waiting.length === 0
95
+ ? []
96
+ : ['', 'waiting for the user:', ...inbox.waiting.flatMap((item) => lineOf(item, invocation))];
97
+ return [...work, ...waiting].join('\n');
98
+ };
99
+ exports.inboxText = inboxText;
100
+ //# sourceMappingURL=inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/comments/inbox.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAEhC,wCAA0C;AAC1C,iDAAqD;AACrD,iDAAkD;AAClD,6CAAgD;AAChD,uCAAsG;AAkBtG;;;;GAIG;AACI,MAAM,OAAO,GAAG,CAAC,OAAsE,EAAE,EAAE;;IAChG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,QAAQ,mCAAI,MAAM,CAAC,IAAI,CAAC,MAAA,MAAM,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAC;IACxE,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAqC,EAAE,CAAC;IACrD,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAA,sBAAY,EAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QAEvD,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,IAAA,eAAQ,EAAC,MAAM,EAAE,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5G,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,IAAI,mCACL,OAAO,KACV,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,IAAA,eAAQ,EAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EACpC,EAAE,EAAE,MAAA,MAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,0CAAE,SAAS,mCAAI,OAAO,CAAC,SAAS,EAC/E,WAAW,EAAE,IAAA,uBAAa,EAAC,OAAO,CAAC,GACpC,CAAC;YAEF,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,qBAAY,EAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,uBAAY,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/F,IAAI,OAAO,QAAQ,KAAK,QAAQ;YAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxB,SAAS;YACX,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAA,0BAAe,EAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAEjH,IAAI,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3G,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,SAAS;YAE/B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YAC5B,MAAM,EAAE,mBACN,OAAO,EACP,MAAM,EAAE,MAAM,CAAC,MAAM,EACrB,EAAE,EAAE,QAAQ,CAAC,SAAS,IACnB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAC3D,CAAC;YAEF,OAAO,CAAC,IAAI,CACV,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,iCAAM,EAAE,KAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAG,CAAC,iCAAM,EAAE,KAAE,IAAI,EAAE,SAAS,GAAE,CAC3G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,CAAiB,EAAE,CAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAElF,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;AAClF,CAAC,CAAC;AAzDW,QAAA,OAAO,WAyDlB;AAEF,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAEtD,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAE/F,MAAM,MAAM,GAAG,CAAC,IAAe,EAAE,UAAkB,EAAE,EAAE;IACrD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEpD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG;YACZ,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,KAAK;YACV,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;YAC7D,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,cAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,YAAY,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACxF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEd,OAAO;YACL,GAAG,IAAI,KAAK,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,KAAK,KAAK,EAAE;YACvH,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBACjC,OAAO,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG;gBAC3F,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;aAClC,CAAC;YACF,cAAc,UAAU,kBAAkB,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,OAAO,oBAAoB,MAAM,CAAC,GAAG,CAAC,EAAE;YAC5G,aAAa,UAAU,eAAe,IAAI,CAAC,EAAE,6BAA6B;SAC3E,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QACxB,OAAO;YACL,GAAG,IAAI,KAAK,IAAI,CAAC,OAAO,kBAAkB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,wBAAwB,EAAE;YACpK,gDAAgD,UAAU,kBAAkB,IAAI,CAAC,MAAM,cAAc,IAAI,CAAC,OAAO,kBAAkB;SACpI,CAAC;IAEJ,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;QACtB,OAAO;YACL,GAAG,IAAI,KAAK,IAAI,CAAC,OAAO,UAAU,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,OAAO,EAAE;YACvE,GAAG,IAAI;YACP,4DAA4D;SAC7D,CAAC;IAEJ,OAAO,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,OAAO,aAAa,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,oCAAoC,CAAC,CAAC;AAC7G,CAAC,CAAC;AAEF,4GAA4G;AACrG,MAAM,SAAS,GAAG,CAAC,KAAmD,EAAE,UAAkB,EAAE,EAAE;IACnG,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAClH,MAAM,OAAO,GACX,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QACxB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,EAAE,EAAE,uBAAuB,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;IAElG,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC;AARW,QAAA,SAAS,aAQpB"}
@@ -0,0 +1,12 @@
1
+ export type CssBlocks = {
2
+ selectors: string[];
3
+ declarations: string[];
4
+ };
5
+ /**
6
+ * Splits CSS into the text before each `{` (selectors) and the text before each `;` or `}`
7
+ * (declarations). At-rule preludes are dropped. Text after the last delimiter counts as a
8
+ * declaration, so an inline `style="…"` attribute reads as one.
9
+ */
10
+ export declare const cssBlocksOf: (css: string) => CssBlocks;
11
+ export declare const declarationValueOf: (declaration: string) => string | null;
12
+ export declare const classesOf: (selector: string) => string[];
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.classesOf = exports.declarationValueOf = exports.cssBlocksOf = void 0;
4
+ const withoutComments = (css) => css.replace(/\/\*[\s\S]*?\*\//g, '');
5
+ /**
6
+ * Splits CSS into the text before each `{` (selectors) and the text before each `;` or `}`
7
+ * (declarations). At-rule preludes are dropped. Text after the last delimiter counts as a
8
+ * declaration, so an inline `style="…"` attribute reads as one.
9
+ */
10
+ const cssBlocksOf = (css) => {
11
+ const selectors = [];
12
+ const declarations = [];
13
+ let buffer = '';
14
+ const flush = (into) => {
15
+ const text = buffer.trim();
16
+ if (text && !text.startsWith('@'))
17
+ into.push(text);
18
+ buffer = '';
19
+ };
20
+ for (const char of withoutComments(css)) {
21
+ if (char === '{')
22
+ flush(selectors);
23
+ else if (char === ';' || char === '}')
24
+ flush(declarations);
25
+ else
26
+ buffer += char;
27
+ }
28
+ flush(declarations);
29
+ return { selectors, declarations };
30
+ };
31
+ exports.cssBlocksOf = cssBlocksOf;
32
+ const declarationValueOf = (declaration) => {
33
+ const colon = declaration.indexOf(':');
34
+ return colon === -1 ? null : declaration.slice(colon + 1);
35
+ };
36
+ exports.declarationValueOf = declarationValueOf;
37
+ const classesOf = (selector) => [...selector.matchAll(/\.(-?[_a-zA-Z][\w-]*)/g)].map((match) => { var _a; return (_a = match[1]) !== null && _a !== void 0 ? _a : ''; });
38
+ exports.classesOf = classesOf;
39
+ //# sourceMappingURL=css-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-source.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/css-source.ts"],"names":[],"mappings":";;;AAEA,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAE9E;;;;GAIG;AACI,MAAM,WAAW,GAAG,CAAC,GAAW,EAAa,EAAE;IACpD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,MAAM,KAAK,GAAG,CAAC,IAAc,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE3B,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,GAAG,EAAE,CAAC;IACd,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,CAAC,SAAS,CAAC,CAAC;aAC9B,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,CAAC,YAAY,CAAC,CAAC;;YACtD,MAAM,IAAI,IAAI,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,CAAC;IAEpB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;AACrC,CAAC,CAAC;AArBW,QAAA,WAAW,eAqBtB;AAEK,MAAM,kBAAkB,GAAG,CAAC,WAAmB,EAAE,EAAE;IACxD,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEvC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC,CAAC;AAJW,QAAA,kBAAkB,sBAI7B;AAEK,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,EAAE,CAC5C,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,MAAA,KAAK,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAA,EAAA,CAAC,CAAC;AADrE,QAAA,SAAS,aAC4D"}
@@ -0,0 +1,66 @@
1
+ import { CommentPoint } from '../comments/comment';
2
+ export type FlowState = {
3
+ part: string;
4
+ state: string;
5
+ };
6
+ /** `position` is the frame's top-left corner on the flow canvas in CSS pixels; without one Studio lays the frame out. */
7
+ export type FlowFrame = FlowState & {
8
+ position?: CommentPoint;
9
+ };
10
+ export type FlowLine = {
11
+ from: FlowState;
12
+ to: FlowState;
13
+ label?: string;
14
+ };
15
+ /** A note of the flow itself, such as a heading over a group of frames; `at` is its top-left corner on the flow canvas, and may be negative. */
16
+ export type FlowNote = {
17
+ id: string;
18
+ text: string;
19
+ at?: CommentPoint;
20
+ };
21
+ export type FlowFile = {
22
+ frames: FlowFrame[];
23
+ lines?: FlowLine[];
24
+ notes?: FlowNote[];
25
+ };
26
+ export type DesignFlow = {
27
+ name: string;
28
+ file: string;
29
+ frames: FlowFrame[];
30
+ lines: FlowLine[];
31
+ notes: FlowNote[];
32
+ };
33
+ /** What a change sets: a new text, a new place, or `at: null` to let Studio place the note. */
34
+ export type FlowNoteChange = {
35
+ text?: string;
36
+ at?: CommentPoint | null;
37
+ };
38
+ export declare const flowsDirOf: (productDir: string) => string;
39
+ export declare const flowStateKeyOf: (state: FlowState) => string;
40
+ /** Every flow of a product, `<product>/flows/<name>.json`, by name; a file that cannot be read answers with its problem. */
41
+ export declare const listFlows: (productDir: string) => {
42
+ flows: DesignFlow[];
43
+ unreadable: {
44
+ file: string;
45
+ problem: string;
46
+ }[];
47
+ };
48
+ /** Adds a free note to a flow file. Answers with the note, or with why the flow cannot take it. */
49
+ export declare const addFlowNote: (options: {
50
+ productDir: string;
51
+ name: string;
52
+ note: Omit<FlowNote, "id">;
53
+ }) => FlowNote | string;
54
+ /** Changes the text or the place of a free note in a flow file. Answers with the changed note. */
55
+ export declare const changeFlowNote: (options: {
56
+ productDir: string;
57
+ name: string;
58
+ id: string;
59
+ change: FlowNoteChange;
60
+ }) => FlowNote | string;
61
+ /** Deletes a free note from a flow file. Answers with the deleted note. */
62
+ export declare const deleteFlowNote: (options: {
63
+ productDir: string;
64
+ name: string;
65
+ id: string;
66
+ }) => FlowNote | string;
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.deleteFlowNote = exports.changeFlowNote = exports.addFlowNote = exports.listFlows = exports.flowStateKeyOf = exports.flowsDirOf = void 0;
15
+ const fs_1 = require("fs");
16
+ const path_1 = require("path");
17
+ const comment_1 = require("../comments/comment");
18
+ const note_1 = require("../notes/note");
19
+ const flowsDirOf = (productDir) => (0, path_1.resolve)(productDir, 'flows');
20
+ exports.flowsDirOf = flowsDirOf;
21
+ const flowStateKeyOf = (state) => `${state.part}#${state.state}`;
22
+ exports.flowStateKeyOf = flowStateKeyOf;
23
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
24
+ const isText = (value) => typeof value === 'string' && value.trim() !== '';
25
+ const FLOW_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/u;
26
+ const isCanvasPoint = (value) => isRecord(value) && Number.isFinite(value['x']) && Number.isFinite(value['y']);
27
+ const isState = (value) => isRecord(value) && isText(value['part']) && isText(value['state']);
28
+ const frameProblemOf = (frame, index) => {
29
+ if (!isState(frame))
30
+ return `frames[${index}] must be { part: "<layer>/<name>", state, position? }`;
31
+ const { position } = frame;
32
+ return position !== undefined && !(0, comment_1.isPoint)(position)
33
+ ? `frames[${index}].position must be { x, y } in CSS pixels, both >= 0`
34
+ : null;
35
+ };
36
+ const lineProblemOf = (line, index) => isRecord(line) &&
37
+ isState(line['from']) &&
38
+ isState(line['to']) &&
39
+ (line['label'] === undefined || isText(line['label']))
40
+ ? null
41
+ : `lines[${index}] must be { from: { part, state }, to: { part, state }, label? }`;
42
+ const noteProblemOf = (note, index) => isRecord(note) &&
43
+ isText(note['id']) &&
44
+ isText(note['text']) &&
45
+ (note['at'] === undefined || isCanvasPoint(note['at']))
46
+ ? null
47
+ : `notes[${index}] must be { id, text, at?: { x, y } }, at in CSS pixels on the flow canvas`;
48
+ const shapeProblemOf = (value) => {
49
+ var _a, _b, _c, _d;
50
+ if (!isRecord(value))
51
+ return 'must be a JSON object { frames, lines?, notes? }';
52
+ if (!Array.isArray(value['frames']))
53
+ return 'frames must be a list';
54
+ if (value['lines'] !== undefined && !Array.isArray(value['lines']))
55
+ return 'lines must be a list';
56
+ if (value['notes'] !== undefined && !Array.isArray(value['notes']))
57
+ return 'notes must be a list';
58
+ const problem = (_c = (_a = value['frames'].map(frameProblemOf).find((found) => found !== null)) !== null && _a !== void 0 ? _a : ((_b = value['lines']) !== null && _b !== void 0 ? _b : []).map(lineProblemOf).find((found) => found !== null)) !== null && _c !== void 0 ? _c : ((_d = value['notes']) !== null && _d !== void 0 ? _d : []).map(noteProblemOf).find((found) => found !== null);
59
+ return problem !== null && problem !== void 0 ? problem : null;
60
+ };
61
+ const flowOf = ({ parsed, name, file }) => {
62
+ var _a, _b;
63
+ return ({
64
+ name,
65
+ file,
66
+ frames: parsed.frames.map(({ part, state, position }) => (Object.assign({ part, state }, (position ? { position } : {})))),
67
+ lines: ((_a = parsed.lines) !== null && _a !== void 0 ? _a : []).map(({ from, to, label }) => (Object.assign({ from: { part: from.part, state: from.state }, to: { part: to.part, state: to.state } }, (label ? { label } : {})))),
68
+ notes: ((_b = parsed.notes) !== null && _b !== void 0 ? _b : []).map(({ id, text, at }) => (Object.assign({ id, text }, (at ? { at } : {})))),
69
+ });
70
+ };
71
+ /** Every flow of a product, `<product>/flows/<name>.json`, by name; a file that cannot be read answers with its problem. */
72
+ const listFlows = (productDir) => {
73
+ const dir = (0, exports.flowsDirOf)(productDir);
74
+ const files = (0, fs_1.existsSync)(dir) ? (0, fs_1.readdirSync)(dir).filter((name) => name.endsWith('.json')) : [];
75
+ const read = files.sort().map((name) => {
76
+ const file = (0, path_1.resolve)(dir, name);
77
+ try {
78
+ const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
79
+ const problem = shapeProblemOf(parsed);
80
+ return problem
81
+ ? { file, problem }
82
+ : flowOf({ parsed: parsed, name: name.slice(0, -'.json'.length), file });
83
+ }
84
+ catch (error) {
85
+ return { file, problem: `is no JSON: ${error instanceof Error ? error.message : String(error)}` };
86
+ }
87
+ });
88
+ return {
89
+ flows: read.filter((entry) => !('problem' in entry)),
90
+ unreadable: read.filter((entry) => 'problem' in entry),
91
+ };
92
+ };
93
+ exports.listFlows = listFlows;
94
+ const readFlowFile = (productDir, name) => {
95
+ if (!FLOW_NAME.test(name))
96
+ return `"${name}" is no flow name`;
97
+ const file = (0, path_1.resolve)((0, exports.flowsDirOf)(productDir), `${name}.json`);
98
+ if (!(0, fs_1.existsSync)(file))
99
+ return `no flow "${name}"`;
100
+ try {
101
+ const parsed = JSON.parse((0, fs_1.readFileSync)(file, 'utf8'));
102
+ const problem = shapeProblemOf(parsed);
103
+ return problem ? `flows/${name}.json ${problem} - fix it first` : { file, parsed: parsed };
104
+ }
105
+ catch (error) {
106
+ return `flows/${name}.json is no JSON - fix it first: ${error instanceof Error ? error.message : String(error)}`;
107
+ }
108
+ };
109
+ /** Rewrites only the `notes` of a readable flow file; every other key, unknown ones too, stays as it was. */
110
+ const withFlowNotes = (options) => {
111
+ var _a;
112
+ const read = readFlowFile(options.productDir, options.name);
113
+ if (typeof read === 'string')
114
+ return read;
115
+ const updated = options.update((_a = read.parsed.notes) !== null && _a !== void 0 ? _a : []);
116
+ if (typeof updated === 'string')
117
+ return updated;
118
+ const problem = updated.notes.map(noteProblemOf).find((found) => found !== null);
119
+ if (problem)
120
+ return problem;
121
+ const written = Object.fromEntries(Object.entries(Object.assign(Object.assign({}, read.parsed), { notes: updated.notes })).filter(([key, value]) => key !== 'notes' || value.length > 0));
122
+ (0, fs_1.writeFileSync)(read.file, `${JSON.stringify(written, null, 2)}\n`);
123
+ return updated.answer;
124
+ };
125
+ const noNoteIn = (name, id) => `flow "${name}" has no note "${id}"`;
126
+ /** Adds a free note to a flow file. Answers with the note, or with why the flow cannot take it. */
127
+ const addFlowNote = (options) => {
128
+ const { text, at } = options.note;
129
+ const note = Object.assign({ id: (0, note_1.newNoteId)(), text }, (at === undefined ? {} : { at }));
130
+ return withFlowNotes(Object.assign(Object.assign({}, options), { update: (notes) => ({ notes: [...notes, note], answer: note }) }));
131
+ };
132
+ exports.addFlowNote = addFlowNote;
133
+ /** Changes the text or the place of a free note in a flow file. Answers with the changed note. */
134
+ const changeFlowNote = (options) => {
135
+ const { name, id, change } = options;
136
+ return withFlowNotes(Object.assign(Object.assign({}, options), { update: (notes) => {
137
+ var _a, _b;
138
+ const found = notes.find((note) => note.id === id);
139
+ if (!found)
140
+ return noNoteIn(name, id);
141
+ const { at: before } = found, rest = __rest(found, ["at"]);
142
+ const at = change.at === undefined ? before : ((_a = change.at) !== null && _a !== void 0 ? _a : undefined);
143
+ const changed = Object.assign(Object.assign(Object.assign({}, rest), { text: (_b = change.text) !== null && _b !== void 0 ? _b : found.text }), (at ? { at } : {}));
144
+ return { notes: notes.map((note) => (note.id === id ? changed : note)), answer: changed };
145
+ } }));
146
+ };
147
+ exports.changeFlowNote = changeFlowNote;
148
+ /** Deletes a free note from a flow file. Answers with the deleted note. */
149
+ const deleteFlowNote = (options) => {
150
+ const { name, id } = options;
151
+ return withFlowNotes(Object.assign(Object.assign({}, options), { update: (notes) => {
152
+ const found = notes.find((note) => note.id === id);
153
+ return found ? { notes: notes.filter((note) => note !== found), answer: found } : noNoteIn(name, id);
154
+ } }));
155
+ };
156
+ exports.deleteFlowNote = deleteFlowNote;
157
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/flows/flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { Problem } from './problem';
2
+ import { ResolvedPart, ResolvedProduct } from './resolve-product';
3
+ export declare const FIXTURES_SPECIFIER = "@system/fixtures";
4
+ export declare const SHARED_PREFIX = "@shared/";
5
+ export type PartImport = {
6
+ kind: 'part';
7
+ layer: string;
8
+ name: string;
9
+ specifier: string;
10
+ stylesheet?: true;
11
+ } | {
12
+ kind: 'fixtures';
13
+ specifier: string;
14
+ } | {
15
+ kind: 'shared';
16
+ path: string;
17
+ specifier: string;
18
+ } | {
19
+ kind: 'asset';
20
+ path: string;
21
+ specifier: string;
22
+ } | {
23
+ kind: 'relative';
24
+ specifier: string;
25
+ } | {
26
+ kind: 'other';
27
+ specifier: string;
28
+ };
29
+ export declare const partSpecifierOf: (part: {
30
+ layer: string;
31
+ name: string;
32
+ }) => string;
33
+ export declare const classifyImport: (specifier: string) => PartImport;
34
+ export declare const importsOfPart: (part: ResolvedPart) => PartImport[];
35
+ /** The modules of the part's own folder its file imports, directly or through another such module. */
36
+ export declare const folderModulesOf: (part: ResolvedPart) => {
37
+ file: string;
38
+ source: string;
39
+ }[];
40
+ /** The parts a part imports, from its file or from a plain module of its own folder that the file imports. */
41
+ export declare const partDependenciesOf: (part: ResolvedPart) => {
42
+ kind: "part";
43
+ layer: string;
44
+ name: string;
45
+ specifier: string;
46
+ stylesheet?: true;
47
+ }[];
48
+ export type SharedDirs = {
49
+ sharedDir?: string;
50
+ variantSharedDir?: string;
51
+ };
52
+ /** The folders `@shared/<path>` looks in, the variant's own `shared/` first. */
53
+ export declare const sharedDirsOf: (product: SharedDirs) => string[];
54
+ /** The file `@shared/<path>` resolves to, the variant's own copy first; `null` when no folder holds it. */
55
+ export declare const sharedFileOf: (options: {
56
+ dirs: string[];
57
+ path: string;
58
+ }) => string | null;
59
+ /**
60
+ * Imports and stylesheet `url(@assets/...)` that name no part, fixture set or asset file, `@shared/` imports outside a sketch variant (`sharedDir` is the
61
+ * sketch's `shared/` folder, `assetsDir` the variant's `assets/`), and relative imports that reach into another part.
62
+ */
63
+ export declare const importProblemsOf: (product: ResolvedProduct & SharedDirs & {
64
+ assetsDir?: string;
65
+ }) => Problem[];
66
+ /** The parts `from` imports, directly or through another part, as the product resolves them. */
67
+ export declare const partsReachedFrom: (options: {
68
+ product: ResolvedProduct;
69
+ from: ResolvedPart;
70
+ }) => ResolvedPart[];