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

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 (340) hide show
  1. package/CHANGELOG.md +198 -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/playwright/failure-reporter.d.ts +2 -0
  16. package/playwright/failure-reporter.js +1 -0
  17. package/src/index.js.map +1 -1
  18. package/src/lib/api/api-command.js.map +1 -1
  19. package/src/lib/api/api-context.js.map +1 -1
  20. package/src/lib/api/api-state.js.map +1 -1
  21. package/src/lib/api/auth-hint.js.map +1 -1
  22. package/src/lib/api/clear.js.map +1 -1
  23. package/src/lib/api/clone.js.map +1 -1
  24. package/src/lib/api/compose.js.map +1 -1
  25. package/src/lib/api/definition.js.map +1 -1
  26. package/src/lib/api/doctor.js.map +1 -1
  27. package/src/lib/api/fingerprint.js.map +1 -1
  28. package/src/lib/api/git.js.map +1 -1
  29. package/src/lib/api/help.js.map +1 -1
  30. package/src/lib/api/index.js.map +1 -1
  31. package/src/lib/api/load-definitions.js.map +1 -1
  32. package/src/lib/api/lock.js.map +1 -1
  33. package/src/lib/api/parse-argv.js.map +1 -1
  34. package/src/lib/api/ports.js.map +1 -1
  35. package/src/lib/api/resolve-checkout.js.map +1 -1
  36. package/src/lib/api/run-locked.js.map +1 -1
  37. package/src/lib/api/run-ready.js.map +1 -1
  38. package/src/lib/api/run-snapshot.js.map +1 -1
  39. package/src/lib/api/run-status.js.map +1 -1
  40. package/src/lib/api/run.js.map +1 -1
  41. package/src/lib/api/seeds.js.map +1 -1
  42. package/src/lib/api/setup.js.map +1 -1
  43. package/src/lib/api/snapshot.js.map +1 -1
  44. package/src/lib/api/state.js.map +1 -1
  45. package/src/lib/api/suggest.js.map +1 -1
  46. package/src/lib/api/validate-definition.js.map +1 -1
  47. package/src/lib/auth/auth-command.js.map +1 -1
  48. package/src/lib/auth/composer-auth.js.map +1 -1
  49. package/src/lib/auth/composer-repositories.js.map +1 -1
  50. package/src/lib/auth/gitlab-token.js.map +1 -1
  51. package/src/lib/auth/index.js.map +1 -1
  52. package/src/lib/config/diagnose.js.map +1 -1
  53. package/src/lib/config/index.js.map +1 -1
  54. package/src/lib/config/local-config.js.map +1 -1
  55. package/src/lib/design/asset-shot.d.ts +26 -0
  56. package/src/lib/design/asset-shot.js +191 -0
  57. package/src/lib/design/asset-shot.js.map +1 -0
  58. package/src/lib/design/browser.js.map +1 -1
  59. package/src/lib/design/calls-tsconfig.d.ts +14 -1
  60. package/src/lib/design/calls-tsconfig.js +23 -18
  61. package/src/lib/design/calls-tsconfig.js.map +1 -1
  62. package/src/lib/design/calls.d.ts +28 -0
  63. package/src/lib/design/calls.js +58 -0
  64. package/src/lib/design/calls.js.map +1 -0
  65. package/src/lib/design/changed-parts.d.ts +51 -0
  66. package/src/lib/design/changed-parts.js +103 -0
  67. package/src/lib/design/changed-parts.js.map +1 -0
  68. package/src/lib/design/check.js +53 -54
  69. package/src/lib/design/check.js.map +1 -1
  70. package/src/lib/design/contact-sheet.d.ts +86 -0
  71. package/src/lib/design/contact-sheet.js +197 -0
  72. package/src/lib/design/contact-sheet.js.map +1 -0
  73. package/src/lib/design/design-command.js +167 -6
  74. package/src/lib/design/design-command.js.map +1 -1
  75. package/src/lib/design/force-interactions.d.ts +13 -0
  76. package/src/lib/design/force-interactions.js +75 -0
  77. package/src/lib/design/force-interactions.js.map +1 -0
  78. package/src/lib/design/inbox-command.d.ts +21 -0
  79. package/src/lib/design/inbox-command.js +156 -0
  80. package/src/lib/design/inbox-command.js.map +1 -0
  81. package/src/lib/design/index.js.map +1 -1
  82. package/src/lib/design/json-layout.d.ts +5 -0
  83. package/src/lib/design/json-layout.js +41 -0
  84. package/src/lib/design/json-layout.js.map +1 -0
  85. package/src/lib/design/legacy.d.ts +7 -0
  86. package/src/lib/design/legacy.js +23 -8
  87. package/src/lib/design/legacy.js.map +1 -1
  88. package/src/lib/design/merge-compare.d.ts +57 -0
  89. package/src/lib/design/merge-compare.js +80 -0
  90. package/src/lib/design/merge-compare.js.map +1 -0
  91. package/src/lib/design/missing-package.js.map +1 -1
  92. package/src/lib/design/new-call.js.map +1 -1
  93. package/src/lib/design/part-marks.d.ts +12 -0
  94. package/src/lib/design/part-marks.js +38 -0
  95. package/src/lib/design/part-marks.js.map +1 -0
  96. package/src/lib/design/paths.d.ts +35 -2
  97. package/src/lib/design/paths.js +62 -4
  98. package/src/lib/design/paths.js.map +1 -1
  99. package/src/lib/design/product-command.d.ts +38 -0
  100. package/src/lib/design/product-command.js +158 -0
  101. package/src/lib/design/product-command.js.map +1 -0
  102. package/src/lib/design/ready-shots.d.ts +13 -0
  103. package/src/lib/design/ready-shots.js +55 -0
  104. package/src/lib/design/ready-shots.js.map +1 -0
  105. package/src/lib/design/render-fields.js.map +1 -1
  106. package/src/lib/design/render-packages.js.map +1 -1
  107. package/src/lib/design/render-worker.js.map +1 -1
  108. package/src/lib/design/render.d.ts +11 -2
  109. package/src/lib/design/render.js +60 -15
  110. package/src/lib/design/render.js.map +1 -1
  111. package/src/lib/design/serve.d.ts +17 -0
  112. package/src/lib/design/serve.js +487 -103
  113. package/src/lib/design/serve.js.map +1 -1
  114. package/src/lib/design/shot-command.d.ts +100 -0
  115. package/src/lib/design/shot-command.js +453 -0
  116. package/src/lib/design/shot-command.js.map +1 -0
  117. package/src/lib/design/shot.d.ts +97 -0
  118. package/src/lib/design/shot.js +346 -0
  119. package/src/lib/design/shot.js.map +1 -0
  120. package/src/lib/design/sketch-at.d.ts +16 -0
  121. package/src/lib/design/sketch-at.js +34 -0
  122. package/src/lib/design/sketch-at.js.map +1 -0
  123. package/src/lib/design/sketch-command.d.ts +15 -0
  124. package/src/lib/design/sketch-command.js +618 -0
  125. package/src/lib/design/sketch-command.js.map +1 -0
  126. package/src/lib/design/ssr-shims.js.map +1 -1
  127. package/src/lib/design/stamp.js.map +1 -1
  128. package/src/lib/design/status.d.ts +2 -2
  129. package/src/lib/design/status.js +2 -2
  130. package/src/lib/design/status.js.map +1 -1
  131. package/src/lib/design/studio-api.d.ts +112 -0
  132. package/src/lib/design/studio-api.js +489 -0
  133. package/src/lib/design/studio-api.js.map +1 -0
  134. package/src/lib/design/system/accept-command.d.ts +7 -0
  135. package/src/lib/design/system/accept-command.js +55 -0
  136. package/src/lib/design/system/accept-command.js.map +1 -0
  137. package/src/lib/design/system/assets.d.ts +34 -0
  138. package/src/lib/design/system/assets.js +64 -0
  139. package/src/lib/design/system/assets.js.map +1 -0
  140. package/src/lib/design/system/base.d.ts +33 -0
  141. package/src/lib/design/system/base.js +49 -0
  142. package/src/lib/design/system/base.js.map +1 -0
  143. package/src/lib/design/system/check-system.d.ts +23 -0
  144. package/src/lib/design/system/check-system.js +151 -0
  145. package/src/lib/design/system/check-system.js.map +1 -0
  146. package/src/lib/design/system/colour.d.ts +2 -0
  147. package/src/lib/design/system/colour.js +9 -0
  148. package/src/lib/design/system/colour.js.map +1 -0
  149. package/src/lib/design/system/comments/comment.d.ts +196 -0
  150. package/src/lib/design/system/comments/comment.js +332 -0
  151. package/src/lib/design/system/comments/comment.js.map +1 -0
  152. package/src/lib/design/system/comments/complete.d.ts +15 -0
  153. package/src/lib/design/system/comments/complete.js +63 -0
  154. package/src/lib/design/system/comments/complete.js.map +1 -0
  155. package/src/lib/design/system/comments/inbox.d.ts +49 -0
  156. package/src/lib/design/system/comments/inbox.js +100 -0
  157. package/src/lib/design/system/comments/inbox.js.map +1 -0
  158. package/src/lib/design/system/css-source.d.ts +12 -0
  159. package/src/lib/design/system/css-source.js +39 -0
  160. package/src/lib/design/system/css-source.js.map +1 -0
  161. package/src/lib/design/system/flows/flow.d.ts +66 -0
  162. package/src/lib/design/system/flows/flow.js +157 -0
  163. package/src/lib/design/system/flows/flow.js.map +1 -0
  164. package/src/lib/design/system/imports.d.ts +70 -0
  165. package/src/lib/design/system/imports.js +159 -0
  166. package/src/lib/design/system/imports.js.map +1 -0
  167. package/src/lib/design/system/kit.d.ts +4 -0
  168. package/src/lib/design/system/kit.js +51 -0
  169. package/src/lib/design/system/kit.js.map +1 -0
  170. package/src/lib/design/system/layers.d.ts +9 -0
  171. package/src/lib/design/system/layers.js +16 -0
  172. package/src/lib/design/system/layers.js.map +1 -0
  173. package/src/lib/design/system/list-system.d.ts +104 -0
  174. package/src/lib/design/system/list-system.js +212 -0
  175. package/src/lib/design/system/list-system.js.map +1 -0
  176. package/src/lib/design/system/notes/note.d.ts +53 -0
  177. package/src/lib/design/system/notes/note.js +116 -0
  178. package/src/lib/design/system/notes/note.js.map +1 -0
  179. package/src/lib/design/system/part-command.d.ts +7 -0
  180. package/src/lib/design/system/part-command.js +134 -0
  181. package/src/lib/design/system/part-command.js.map +1 -0
  182. package/src/lib/design/system/problem.d.ts +5 -0
  183. package/src/lib/design/system/problem.js +3 -0
  184. package/src/lib/design/system/problem.js.map +1 -0
  185. package/src/lib/design/system/product.d.ts +18 -0
  186. package/src/lib/design/system/product.js +35 -0
  187. package/src/lib/design/system/product.js.map +1 -0
  188. package/src/lib/design/system/render-check.d.ts +45 -0
  189. package/src/lib/design/system/render-check.js +427 -0
  190. package/src/lib/design/system/render-check.js.map +1 -0
  191. package/src/lib/design/system/resolve-product.d.ts +32 -0
  192. package/src/lib/design/system/resolve-product.js +62 -0
  193. package/src/lib/design/system/resolve-product.js.map +1 -0
  194. package/src/lib/design/system/rules/component-copy.d.ts +7 -0
  195. package/src/lib/design/system/rules/component-copy.js +53 -0
  196. package/src/lib/design/system/rules/component-copy.js.map +1 -0
  197. package/src/lib/design/system/rules/flow.d.ts +8 -0
  198. package/src/lib/design/system/rules/flow.js +60 -0
  199. package/src/lib/design/system/rules/flow.js.map +1 -0
  200. package/src/lib/design/system/rules/hard-coded-colour.d.ts +7 -0
  201. package/src/lib/design/system/rules/hard-coded-colour.js +27 -0
  202. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -0
  203. package/src/lib/design/system/rules/interactions.d.ts +4 -0
  204. package/src/lib/design/system/rules/interactions.js +16 -0
  205. package/src/lib/design/system/rules/interactions.js.map +1 -0
  206. package/src/lib/design/system/rules/kit-outside-pages.d.ts +4 -0
  207. package/src/lib/design/system/rules/kit-outside-pages.js +14 -0
  208. package/src/lib/design/system/rules/kit-outside-pages.js.map +1 -0
  209. package/src/lib/design/system/rules/motion.d.ts +4 -0
  210. package/src/lib/design/system/rules/motion.js +13 -0
  211. package/src/lib/design/system/rules/motion.js.map +1 -0
  212. package/src/lib/design/system/rules/stale-comment.d.ts +8 -0
  213. package/src/lib/design/system/rules/stale-comment.js +51 -0
  214. package/src/lib/design/system/rules/stale-comment.js.map +1 -0
  215. package/src/lib/design/system/rules/stale-replace.d.ts +4 -0
  216. package/src/lib/design/system/rules/stale-replace.js +65 -0
  217. package/src/lib/design/system/rules/stale-replace.js.map +1 -0
  218. package/src/lib/design/system/rules/svg-asset.d.ts +6 -0
  219. package/src/lib/design/system/rules/svg-asset.js +30 -0
  220. package/src/lib/design/system/rules/svg-asset.js.map +1 -0
  221. package/src/lib/design/system/rules/token-selectors.d.ts +3 -0
  222. package/src/lib/design/system/rules/token-selectors.js +87 -0
  223. package/src/lib/design/system/rules/token-selectors.js.map +1 -0
  224. package/src/lib/design/system/rules/undefined-token.d.ts +8 -0
  225. package/src/lib/design/system/rules/undefined-token.js +103 -0
  226. package/src/lib/design/system/rules/undefined-token.js.map +1 -0
  227. package/src/lib/design/system/rules/unused-shared-export.d.ts +18 -0
  228. package/src/lib/design/system/rules/unused-shared-export.js +60 -0
  229. package/src/lib/design/system/rules/unused-shared-export.js.map +1 -0
  230. package/src/lib/design/system/rules/upward-dependency.d.ts +4 -0
  231. package/src/lib/design/system/rules/upward-dependency.js +17 -0
  232. package/src/lib/design/system/rules/upward-dependency.js.map +1 -0
  233. package/src/lib/design/system/rules/widths.d.ts +4 -0
  234. package/src/lib/design/system/rules/widths.js +14 -0
  235. package/src/lib/design/system/rules/widths.js.map +1 -0
  236. package/src/lib/design/system/sketch/baseline.d.ts +38 -0
  237. package/src/lib/design/system/sketch/baseline.js +66 -0
  238. package/src/lib/design/system/sketch/baseline.js.map +1 -0
  239. package/src/lib/design/system/sketch/check-format.d.ts +17 -0
  240. package/src/lib/design/system/sketch/check-format.js +56 -0
  241. package/src/lib/design/system/sketch/check-format.js.map +1 -0
  242. package/src/lib/design/system/sketch/check-sketches.d.ts +38 -0
  243. package/src/lib/design/system/sketch/check-sketches.js +104 -0
  244. package/src/lib/design/system/sketch/check-sketches.js.map +1 -0
  245. package/src/lib/design/system/sketch/cli-args.d.ts +26 -0
  246. package/src/lib/design/system/sketch/cli-args.js +63 -0
  247. package/src/lib/design/system/sketch/cli-args.js.map +1 -0
  248. package/src/lib/design/system/sketch/duplicate-class.d.ts +14 -0
  249. package/src/lib/design/system/sketch/duplicate-class.js +57 -0
  250. package/src/lib/design/system/sketch/duplicate-class.js.map +1 -0
  251. package/src/lib/design/system/sketch/merge-preview.d.ts +15 -0
  252. package/src/lib/design/system/sketch/merge-preview.js +43 -0
  253. package/src/lib/design/system/sketch/merge-preview.js.map +1 -0
  254. package/src/lib/design/system/sketch/merge-shared.d.ts +25 -0
  255. package/src/lib/design/system/sketch/merge-shared.js +53 -0
  256. package/src/lib/design/system/sketch/merge-shared.js.map +1 -0
  257. package/src/lib/design/system/sketch/merge.d.ts +31 -0
  258. package/src/lib/design/system/sketch/merge.js +148 -0
  259. package/src/lib/design/system/sketch/merge.js.map +1 -0
  260. package/src/lib/design/system/sketch/merged-parts.d.ts +59 -0
  261. package/src/lib/design/system/sketch/merged-parts.js +134 -0
  262. package/src/lib/design/system/sketch/merged-parts.js.map +1 -0
  263. package/src/lib/design/system/sketch/no-visible-change.d.ts +15 -0
  264. package/src/lib/design/system/sketch/no-visible-change.js +70 -0
  265. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -0
  266. package/src/lib/design/system/sketch/overlay.d.ts +20 -0
  267. package/src/lib/design/system/sketch/overlay.js +38 -0
  268. package/src/lib/design/system/sketch/overlay.js.map +1 -0
  269. package/src/lib/design/system/sketch/part-definition.d.ts +31 -0
  270. package/src/lib/design/system/sketch/part-definition.js +157 -0
  271. package/src/lib/design/system/sketch/part-definition.js.map +1 -0
  272. package/src/lib/design/system/sketch/shared-class.d.ts +9 -0
  273. package/src/lib/design/system/sketch/shared-class.js +65 -0
  274. package/src/lib/design/system/sketch/shared-class.js.map +1 -0
  275. package/src/lib/design/system/sketch/sketch.d.ts +267 -0
  276. package/src/lib/design/system/sketch/sketch.js +568 -0
  277. package/src/lib/design/system/sketch/sketch.js.map +1 -0
  278. package/src/lib/design/system/sketch/unchanged-states.d.ts +23 -0
  279. package/src/lib/design/system/sketch/unchanged-states.js +144 -0
  280. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -0
  281. package/src/lib/design/system/sketch/unused-files.d.ts +10 -0
  282. package/src/lib/design/system/sketch/unused-files.js +56 -0
  283. package/src/lib/design/system/sketch/unused-files.js.map +1 -0
  284. package/src/lib/design/system/system-command.d.ts +9 -0
  285. package/src/lib/design/system/system-command.js +56 -0
  286. package/src/lib/design/system/system-command.js.map +1 -0
  287. package/src/lib/design/system/system-modules.d.ts +58 -0
  288. package/src/lib/design/system/system-modules.js +189 -0
  289. package/src/lib/design/system/system-modules.js.map +1 -0
  290. package/src/lib/design/system/system-tsconfig.d.ts +26 -0
  291. package/src/lib/design/system/system-tsconfig.js +68 -0
  292. package/src/lib/design/system/system-tsconfig.js.map +1 -0
  293. package/src/lib/design/system/ts-source.d.ts +13 -0
  294. package/src/lib/design/system/ts-source.js +108 -0
  295. package/src/lib/design/system/ts-source.js.map +1 -0
  296. package/src/lib/design/system-use.js.map +1 -1
  297. package/src/lib/design/thumb.d.ts +48 -4
  298. package/src/lib/design/thumb.js +127 -37
  299. package/src/lib/design/thumb.js.map +1 -1
  300. package/src/lib/design/typecheck.d.ts +29 -0
  301. package/src/lib/design/typecheck.js +77 -0
  302. package/src/lib/design/typecheck.js.map +1 -0
  303. package/src/lib/design/variant-diff.d.ts +64 -0
  304. package/src/lib/design/variant-diff.js +92 -0
  305. package/src/lib/design/variant-diff.js.map +1 -0
  306. package/src/lib/design/vite-paths.d.ts +2 -0
  307. package/src/lib/design/vite-paths.js +10 -1
  308. package/src/lib/design/vite-paths.js.map +1 -1
  309. package/src/lib/doctor/doctor-command.js.map +1 -1
  310. package/src/lib/doctor/index.js.map +1 -1
  311. package/src/lib/index.js.map +1 -1
  312. package/src/lib/invocation.js +6 -2
  313. package/src/lib/invocation.js.map +1 -1
  314. package/src/lib/playwright/failure-reporter.d.ts +35 -0
  315. package/src/lib/playwright/failure-reporter.js +66 -0
  316. package/src/lib/playwright/failure-reporter.js.map +1 -0
  317. package/src/lib/release.js.map +1 -1
  318. package/src/lib/update/agent-rules-sync.js.map +1 -1
  319. package/src/lib/update/agent-setup.js.map +1 -1
  320. package/src/lib/update/ai.js.map +1 -1
  321. package/src/lib/update/args.js.map +1 -1
  322. package/src/lib/update/available-migrations.js.map +1 -1
  323. package/src/lib/update/commits.js.map +1 -1
  324. package/src/lib/update/gitignore.js.map +1 -1
  325. package/src/lib/update/index.js.map +1 -1
  326. package/src/lib/update/migration-manifest.js.map +1 -1
  327. package/src/lib/update/migration-record.js.map +1 -1
  328. package/src/lib/update/migrations-command.js.map +1 -1
  329. package/src/lib/update/package-manager.d.ts +1 -1
  330. package/src/lib/update/package-manager.js.map +1 -1
  331. package/src/lib/update/packages.js.map +1 -1
  332. package/src/lib/update/pending.js.map +1 -1
  333. package/src/lib/update/plan.js.map +1 -1
  334. package/src/lib/update/registry.js.map +1 -1
  335. package/src/lib/update/run-migrations.js.map +1 -1
  336. package/src/lib/update/scan.js.map +1 -1
  337. package/src/lib/update/semver.js.map +1 -1
  338. package/src/lib/update/tasks.js.map +1 -1
  339. package/src/lib/update/update-command.js.map +1 -1
  340. package/src/lib/utils.js.map +1 -1
@@ -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[];
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.partsReachedFrom = exports.importProblemsOf = exports.sharedFileOf = exports.sharedDirsOf = exports.partDependenciesOf = exports.folderModulesOf = exports.importsOfPart = exports.classifyImport = exports.partSpecifierOf = exports.SHARED_PREFIX = exports.FIXTURES_SPECIFIER = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const vite_paths_1 = require("../vite-paths");
7
+ const assets_1 = require("./assets");
8
+ const resolve_product_1 = require("./resolve-product");
9
+ const ts_source_1 = require("./ts-source");
10
+ const SYSTEM = '@system/';
11
+ exports.FIXTURES_SPECIFIER = '@system/fixtures';
12
+ exports.SHARED_PREFIX = '@shared/';
13
+ const STYLESHEET = /\.css(?:\?.*)?$/u;
14
+ const partSpecifierOf = (part) => `${SYSTEM}${(0, resolve_product_1.partKeyOf)(part)}`;
15
+ exports.partSpecifierOf = partSpecifierOf;
16
+ const classifyImport = (specifier) => {
17
+ if (specifier === exports.FIXTURES_SPECIFIER)
18
+ return { kind: 'fixtures', specifier };
19
+ if (specifier.startsWith(SYSTEM)) {
20
+ const [layer = '', ...path] = specifier.slice(SYSTEM.length).split('/');
21
+ const name = path.join('/');
22
+ const stylesheet = STYLESHEET.exec(name);
23
+ return stylesheet
24
+ ? { kind: 'part', layer, name: name.slice(0, stylesheet.index), specifier, stylesheet: true }
25
+ : { kind: 'part', layer, name, specifier };
26
+ }
27
+ const asset = (0, assets_1.assetPathOf)(specifier);
28
+ if (asset !== null)
29
+ return { kind: 'asset', path: asset, specifier };
30
+ if (specifier.startsWith(exports.SHARED_PREFIX))
31
+ return { kind: 'shared', path: specifier.slice(exports.SHARED_PREFIX.length), specifier };
32
+ if (specifier.startsWith('.'))
33
+ return { kind: 'relative', specifier };
34
+ return { kind: 'other', specifier };
35
+ };
36
+ exports.classifyImport = classifyImport;
37
+ const importsOfPart = (part) => (0, ts_source_1.importsOf)(part.source).map(exports.classifyImport);
38
+ exports.importsOfPart = importsOfPart;
39
+ /** The modules of the part's own folder its file imports, directly or through another such module. */
40
+ const folderModulesOf = (part) => {
41
+ var _a;
42
+ const folder = (0, path_1.dirname)(part.file);
43
+ const seen = new Set([part.file]);
44
+ const queue = [{ file: part.file, source: part.source }];
45
+ const modules = [];
46
+ for (let current = queue.shift(); current !== undefined; current = queue.shift()) {
47
+ for (const specifier of (0, ts_source_1.importsOf)(current.source)) {
48
+ if (!specifier.startsWith('.') || STYLESHEET.test(specifier))
49
+ continue;
50
+ const file = (0, vite_paths_1.sourceFileOf)((0, path_1.resolve)((0, path_1.dirname)(current.file), (_a = specifier.split('?')[0]) !== null && _a !== void 0 ? _a : specifier));
51
+ const path = file === null ? '..' : (0, path_1.relative)(folder, file);
52
+ if (file === null || seen.has(file) || path.startsWith('..') || (0, path_1.isAbsolute)(path))
53
+ continue;
54
+ seen.add(file);
55
+ const module = { file, source: (0, fs_1.readFileSync)(file, 'utf8') };
56
+ modules.push(module);
57
+ queue.push(module);
58
+ }
59
+ }
60
+ return modules;
61
+ };
62
+ exports.folderModulesOf = folderModulesOf;
63
+ /** The parts a part imports, from its file or from a plain module of its own folder that the file imports. */
64
+ const partDependenciesOf = (part) => {
65
+ const seen = new Set();
66
+ return [part, ...(0, exports.folderModulesOf)(part)]
67
+ .flatMap((module) => (0, ts_source_1.importsOf)(module.source).map(exports.classifyImport))
68
+ .flatMap((imported) => {
69
+ if (imported.kind !== 'part' || seen.has(imported.specifier))
70
+ return [];
71
+ seen.add(imported.specifier);
72
+ return [imported];
73
+ });
74
+ };
75
+ exports.partDependenciesOf = partDependenciesOf;
76
+ const leavesFolder = (part, specifier) => {
77
+ var _a;
78
+ const folder = (0, path_1.dirname)(part.file);
79
+ const path = (0, path_1.relative)(folder, (0, path_1.resolve)(folder, (_a = specifier.split('?')[0]) !== null && _a !== void 0 ? _a : specifier));
80
+ return path.startsWith('..') || (0, path_1.isAbsolute)(path);
81
+ };
82
+ /** The folders `@shared/<path>` looks in, the variant's own `shared/` first. */
83
+ const sharedDirsOf = (product) => [product.variantSharedDir, product.sharedDir].filter((dir) => dir !== undefined);
84
+ exports.sharedDirsOf = sharedDirsOf;
85
+ /** The file `@shared/<path>` resolves to, the variant's own copy first; `null` when no folder holds it. */
86
+ const sharedFileOf = (options) => {
87
+ var _a;
88
+ const path = (_a = options.path.split('?')[0]) !== null && _a !== void 0 ? _a : options.path;
89
+ for (const dir of options.dirs) {
90
+ const file = (0, path_1.resolve)(dir, path);
91
+ const found = STYLESHEET.test(file) ? ((0, fs_1.existsSync)(file) ? file : null) : (0, vite_paths_1.sourceFileOf)(file);
92
+ if (found)
93
+ return found;
94
+ }
95
+ return null;
96
+ };
97
+ exports.sharedFileOf = sharedFileOf;
98
+ /**
99
+ * Imports and stylesheet `url(@assets/...)` that name no part, fixture set or asset file, `@shared/` imports outside a sketch variant (`sharedDir` is the
100
+ * sketch's `shared/` folder, `assetsDir` the variant's `assets/`), and relative imports that reach into another part.
101
+ */
102
+ const importProblemsOf = (product) => {
103
+ const parts = new Map(product.parts.map((part) => [(0, resolve_product_1.partKeyOf)(part), part]));
104
+ const missingCssAssets = (part) => {
105
+ var _a;
106
+ return (0, assets_1.cssAssetPathsOf)((_a = part.cssSource) !== null && _a !== void 0 ? _a : '')
107
+ .filter((path) => !(0, assets_1.assetFileOf)({ product, path }))
108
+ .map((path) => {
109
+ var _a;
110
+ return ({
111
+ rule: 'IMPORT',
112
+ file: (_a = part.css) !== null && _a !== void 0 ? _a : part.file,
113
+ message: `url(${assets_1.ASSETS_PREFIX}${path}) resolves to no file in an assets/ folder`,
114
+ });
115
+ });
116
+ };
117
+ return product.parts.flatMap((part) => [
118
+ ...missingCssAssets(part),
119
+ ...(0, exports.importsOfPart)(part).flatMap((imported) => {
120
+ var _a;
121
+ const problem = (message) => [{ rule: 'IMPORT', file: part.file, message }];
122
+ if (imported.kind === 'part' && !parts.has((0, resolve_product_1.partKeyOf)(imported)))
123
+ return problem(`${imported.specifier} resolves to no part`);
124
+ if (imported.kind === 'part' && imported.stylesheet && !((_a = parts.get((0, resolve_product_1.partKeyOf)(imported))) === null || _a === void 0 ? void 0 : _a.css))
125
+ return problem(`${imported.specifier} resolves to a part without ${imported.name}.css`);
126
+ if (imported.kind === 'fixtures' && !product.fixtures)
127
+ return problem(`${exports.FIXTURES_SPECIFIER} resolves to no fixtures.ts`);
128
+ if (imported.kind === 'shared' && !product.sharedDir)
129
+ return problem(`${imported.specifier} - only a part in a sketch variant may import the sketch's ${exports.SHARED_PREFIX}`);
130
+ if (imported.kind === 'shared' && !(0, exports.sharedFileOf)({ dirs: (0, exports.sharedDirsOf)(product), path: imported.path }))
131
+ return problem(`${imported.specifier} resolves to no file in the variant's or the sketch's shared/ folder`);
132
+ if (imported.kind === 'asset' && !(0, assets_1.assetFileOf)({ product, path: imported.path }))
133
+ return problem(`${imported.specifier} resolves to no file in an assets/ folder`);
134
+ if (imported.kind === 'relative' && leavesFolder(part, imported.specifier))
135
+ return problem(`"${imported.specifier}" leaves the part's folder - import another part as @system/<layer>/<name>`);
136
+ return [];
137
+ }),
138
+ ]);
139
+ };
140
+ exports.importProblemsOf = importProblemsOf;
141
+ /** The parts `from` imports, directly or through another part, as the product resolves them. */
142
+ const partsReachedFrom = (options) => {
143
+ const parts = new Map(options.product.parts.map((part) => [(0, resolve_product_1.partKeyOf)(part), part]));
144
+ const reached = new Map();
145
+ const queue = [options.from];
146
+ for (let part = queue.shift(); part !== undefined; part = queue.shift()) {
147
+ for (const dependency of (0, exports.partDependenciesOf)(part)) {
148
+ const key = (0, resolve_product_1.partKeyOf)(dependency);
149
+ const found = parts.get(key);
150
+ if (!found || reached.has(key))
151
+ continue;
152
+ reached.set(key, found);
153
+ queue.push(found);
154
+ }
155
+ }
156
+ return [...reached.values()];
157
+ };
158
+ exports.partsReachedFrom = partsReachedFrom;
159
+ //# sourceMappingURL=imports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imports.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/imports.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const KIT_SPECIFIER = "@design-system/kit";
2
+ export declare const importsKit: (source: string) => boolean;
3
+ /** How many calls of a wireframe kit part a part's source writes, read from the source without a render. */
4
+ export declare const kitUsesOf: (source: string) => number;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.kitUsesOf = exports.importsKit = exports.KIT_SPECIFIER = void 0;
7
+ const typescript_1 = __importDefault(require("typescript"));
8
+ const ts_source_1 = require("./ts-source");
9
+ exports.KIT_SPECIFIER = '@design-system/kit';
10
+ const importsKit = (source) => (0, ts_source_1.importsOf)(source).includes(exports.KIT_SPECIFIER);
11
+ exports.importsKit = importsKit;
12
+ const kitBindingsOf = (file) => {
13
+ var _a;
14
+ const named = new Set();
15
+ const namespaces = new Set();
16
+ for (const statement of file.statements) {
17
+ if (!typescript_1.default.isImportDeclaration(statement) ||
18
+ !typescript_1.default.isStringLiteral(statement.moduleSpecifier) ||
19
+ statement.moduleSpecifier.text !== exports.KIT_SPECIFIER)
20
+ continue;
21
+ const bindings = (_a = statement.importClause) === null || _a === void 0 ? void 0 : _a.namedBindings;
22
+ if (bindings && typescript_1.default.isNamespaceImport(bindings))
23
+ namespaces.add(bindings.name.text);
24
+ if (bindings && typescript_1.default.isNamedImports(bindings))
25
+ bindings.elements.forEach((element) => named.add(element.name.text));
26
+ }
27
+ return { named, namespaces };
28
+ };
29
+ /** How many calls of a wireframe kit part a part's source writes, read from the source without a render. */
30
+ const kitUsesOf = (source) => {
31
+ const file = typescript_1.default.createSourceFile('part.ts', source, typescript_1.default.ScriptTarget.Latest, true);
32
+ const { named, namespaces } = kitBindingsOf(file);
33
+ let uses = 0;
34
+ const visit = (node) => {
35
+ if (typescript_1.default.isCallExpression(node)) {
36
+ const callee = node.expression;
37
+ if (typescript_1.default.isIdentifier(callee) && named.has(callee.text))
38
+ uses++;
39
+ if (typescript_1.default.isPropertyAccessExpression(callee) &&
40
+ typescript_1.default.isIdentifier(callee.expression) &&
41
+ namespaces.has(callee.expression.text))
42
+ uses++;
43
+ }
44
+ typescript_1.default.forEachChild(node, visit);
45
+ };
46
+ if (named.size > 0 || namespaces.size > 0)
47
+ visit(file);
48
+ return uses;
49
+ };
50
+ exports.kitUsesOf = kitUsesOf;
51
+ //# sourceMappingURL=kit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kit.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/kit.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA4B;AAC5B,2CAAwC;AAE3B,QAAA,aAAa,GAAG,oBAAoB,CAAC;AAE3C,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAA,qBAAS,EAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,qBAAa,CAAC,CAAC;AAA3E,QAAA,UAAU,cAAiE;AAExF,MAAM,aAAa,GAAG,CAAC,IAAmB,EAAE,EAAE;;IAC5C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IACE,CAAC,oBAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAClC,CAAC,oBAAE,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,CAAC;YAC9C,SAAS,CAAC,eAAe,CAAC,IAAI,KAAK,qBAAa;YAEhD,SAAS;QAEX,MAAM,QAAQ,GAAG,MAAA,SAAS,CAAC,YAAY,0CAAE,aAAa,CAAC;QAEvD,IAAI,QAAQ,IAAI,oBAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnF,IAAI,QAAQ,IAAI,oBAAE,CAAC,cAAc,CAAC,QAAQ,CAAC;YAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AAC/B,CAAC,CAAC;AAEF,4GAA4G;AACrG,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE;IAC1C,MAAM,IAAI,GAAG,oBAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,oBAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClF,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,EAAE;QAC9B,IAAI,oBAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAE/B,IAAI,oBAAE,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBAAE,IAAI,EAAE,CAAC;YAC9D,IACE,oBAAE,CAAC,0BAA0B,CAAC,MAAM,CAAC;gBACrC,oBAAE,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;gBAClC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;gBAEtC,IAAI,EAAE,CAAC;QACX,CAAC;QAED,oBAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAEvD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAvBW,QAAA,SAAS,aAuBpB"}
@@ -0,0 +1,9 @@
1
+ export declare const LAYERS: readonly ["foundations", "components", "elements", "pages"];
2
+ export type Layer = (typeof LAYERS)[number];
3
+ /** The layers a part of each layer may import. */
4
+ export declare const LAYER_USES: Record<Layer, readonly Layer[]>;
5
+ export declare const isLayer: (name: string) => name is Layer;
6
+ export declare const mayUse: (options: {
7
+ from: Layer;
8
+ to: Layer;
9
+ }) => boolean;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mayUse = exports.isLayer = exports.LAYER_USES = exports.LAYERS = void 0;
4
+ exports.LAYERS = ['foundations', 'components', 'elements', 'pages'];
5
+ /** The layers a part of each layer may import. */
6
+ exports.LAYER_USES = {
7
+ foundations: ['foundations'],
8
+ components: ['foundations', 'components'],
9
+ elements: ['foundations', 'components'],
10
+ pages: ['foundations', 'components', 'elements'],
11
+ };
12
+ const isLayer = (name) => exports.LAYERS.includes(name);
13
+ exports.isLayer = isLayer;
14
+ const mayUse = (options) => exports.LAYER_USES[options.from].includes(options.to);
15
+ exports.mayUse = mayUse;
16
+ //# sourceMappingURL=layers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layers.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/design/system/layers.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAU,CAAC;AAIlF,kDAAkD;AACrC,QAAA,UAAU,GAAoC;IACzD,WAAW,EAAE,CAAC,aAAa,CAAC;IAC5B,UAAU,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;IACzC,QAAQ,EAAE,CAAC,aAAa,EAAE,YAAY,CAAC;IACvC,KAAK,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,UAAU,CAAC;CACjD,CAAC;AAEK,MAAM,OAAO,GAAG,CAAC,IAAY,EAAiB,EAAE,CAAE,cAA4B,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAAxF,QAAA,OAAO,WAAiF;AAE9F,MAAM,MAAM,GAAG,CAAC,OAAmC,EAAE,EAAE,CAAC,kBAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAAhG,QAAA,MAAM,UAA0F"}