@ethlete/cli 3.0.0-next.20 → 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 (337) hide show
  1. package/CHANGELOG.md +190 -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 +446 -62
  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 +67 -0
  296. package/src/lib/design/thumb.js +222 -0
  297. package/src/lib/design/thumb.js.map +1 -0
  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 +14 -4
  324. package/src/lib/update/migrations-command.js.map +1 -1
  325. package/src/lib/update/package-manager.d.ts +1 -1
  326. package/src/lib/update/package-manager.js.map +1 -1
  327. package/src/lib/update/packages.js.map +1 -1
  328. package/src/lib/update/pending.js.map +1 -1
  329. package/src/lib/update/plan.js.map +1 -1
  330. package/src/lib/update/registry.js.map +1 -1
  331. package/src/lib/update/run-migrations.js.map +1 -1
  332. package/src/lib/update/scan.js +8 -3
  333. package/src/lib/update/scan.js.map +1 -1
  334. package/src/lib/update/semver.js.map +1 -1
  335. package/src/lib/update/tasks.js.map +1 -1
  336. package/src/lib/update/update-command.js.map +1 -1
  337. package/src/lib/utils.js.map +1 -1
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flowProblemsOf = void 0;
4
+ const comment_1 = require("../comments/comment");
5
+ const flow_1 = require("../flows/flow");
6
+ const resolve_product_1 = require("../resolve-product");
7
+ const overlay_1 = require("../sketch/overlay");
8
+ const sketch_1 = require("../sketch/sketch");
9
+ const nameOf = (state) => `${state.part} "${state.state}"`;
10
+ const sketchOnlyOf = (product, key) => (0, sketch_1.listSketches)({ productDir: product.dir, product: product.name }).find((sketch) => typeof sketch !== 'string' && sketch.target === key && sketch.variants.length > 0);
11
+ /** Why a frame points at nothing; a part the product lacks is looked up in the first variant of its open sketch. */
12
+ const goneFrameOf = (product, frame) => {
13
+ const reason = (0, comment_1.goneStateOf)({ product, part: frame.part, state: frame.state });
14
+ const sketch = reason && !product.parts.some((part) => (0, resolve_product_1.partKeyOf)(part) === frame.part) && sketchOnlyOf(product, frame.part);
15
+ if (!sketch)
16
+ return reason;
17
+ const variant = sketch.variants[0];
18
+ const sketched = (0, overlay_1.overlaySketch)({ product, sketch, variant });
19
+ const gone = (0, comment_1.goneStateOf)({ product: sketched, part: frame.part, state: frame.state });
20
+ return gone && `${gone} in sketch variant ${variant}`;
21
+ };
22
+ const problemsOfFlow = (product, flow) => {
23
+ const seen = new Set();
24
+ const doubled = flow.frames.flatMap((frame) => {
25
+ const key = (0, flow_1.flowStateKeyOf)(frame);
26
+ if (seen.has(key))
27
+ return [`shows ${nameOf(frame)} twice - a state is one frame per flow`];
28
+ seen.add(key);
29
+ return [];
30
+ });
31
+ const gone = flow.frames.flatMap((frame) => {
32
+ const reason = goneFrameOf(product, frame);
33
+ return reason ? [`${reason} - fix or drop the frame`] : [];
34
+ });
35
+ const loose = flow.lines.flatMap((line, index) => [line.from, line.to]
36
+ .filter((end) => !seen.has((0, flow_1.flowStateKeyOf)(end)))
37
+ .map((end) => `lines[${index}] names ${nameOf(end)}, which is no frame of the flow - add it to frames`));
38
+ const ids = new Set();
39
+ const twice = flow.notes.flatMap((note) => {
40
+ if (ids.has(note.id))
41
+ return [`has two notes with the id "${note.id}" - give each its own`];
42
+ ids.add(note.id);
43
+ return [];
44
+ });
45
+ return [...doubled, ...gone, ...loose, ...twice];
46
+ };
47
+ /**
48
+ * A flow file that cannot be read, a frame whose part or state is gone (a part that exists only as a sketch
49
+ * counts with the states of its first variant), a line between states the flow does not show,
50
+ * and two free notes with one id.
51
+ */
52
+ const flowProblemsOf = (product) => {
53
+ const { flows, unreadable } = (0, flow_1.listFlows)(product.dir);
54
+ return [
55
+ ...unreadable.map(({ file, problem }) => ({ rule: 'FLOW', file, message: problem })),
56
+ ...flows.flatMap((flow) => problemsOfFlow(product, flow).map((message) => ({ rule: 'FLOW', file: flow.file, message }))),
57
+ ];
58
+ };
59
+ exports.flowProblemsOf = flowProblemsOf;
60
+ //# sourceMappingURL=flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/flow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /**
4
+ * A hex colour or colour function in a declaration value of a part outside foundations, in its
5
+ * CSS or in the markup and inline CSS of its TS. A fallback inside `var()` counts.
6
+ */
7
+ export declare const hardCodedColoursOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hardCodedColoursOf = void 0;
4
+ const colour_1 = require("../colour");
5
+ const css_source_1 = require("../css-source");
6
+ const ts_source_1 = require("../ts-source");
7
+ const valueColoursOf = (css) => (0, css_source_1.cssBlocksOf)(css).declarations.flatMap((declaration) => { var _a; return (0, colour_1.coloursIn)((_a = (0, css_source_1.declarationValueOf)(declaration)) !== null && _a !== void 0 ? _a : ''); });
8
+ const textColoursOf = (text) => {
9
+ const whole = (0, colour_1.coloursIn)(text.trim());
10
+ return whole.length === 1 && whole[0] === text.trim() ? whole : valueColoursOf(text);
11
+ };
12
+ const problemsOf = (file, colours) => [...new Set(colours)].map((colour) => ({
13
+ rule: 'HARD-CODED-COLOUR',
14
+ file,
15
+ message: `${colour} outside foundations - use a foundations token`,
16
+ }));
17
+ const partProblemsOf = (part) => [
18
+ ...problemsOf(part.file, (0, ts_source_1.textsOf)(part.source).flatMap(textColoursOf)),
19
+ ...(part.css && part.cssSource ? problemsOf(part.css, valueColoursOf(part.cssSource)) : []),
20
+ ];
21
+ /**
22
+ * A hex colour or colour function in a declaration value of a part outside foundations, in its
23
+ * CSS or in the markup and inline CSS of its TS. A fallback inside `var()` counts.
24
+ */
25
+ const hardCodedColoursOf = (product) => product.parts.filter((part) => part.layer !== 'foundations').flatMap(partProblemsOf);
26
+ exports.hardCodedColoursOf = hardCodedColoursOf;
27
+ //# sourceMappingURL=hard-coded-colour.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hard-coded-colour.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/hard-coded-colour.ts"],"names":[],"mappings":";;;AAAA,sCAAsC;AACtC,8CAAgE;AAGhE,4CAAuC;AAEvC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE,CACrC,IAAA,wBAAW,EAAC,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,WAAC,OAAA,IAAA,kBAAS,EAAC,MAAA,IAAA,+BAAkB,EAAC,WAAW,CAAC,mCAAI,EAAE,CAAC,CAAA,EAAA,CAAC,CAAC;AAE3G,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE;IACrC,MAAM,KAAK,GAAG,IAAA,kBAAS,EAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAErC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,OAAiB,EAAa,EAAE,CAChE,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,IAAI,EAAE,mBAAmB;IACzB,IAAI;IACJ,OAAO,EAAE,GAAG,MAAM,gDAAgD;CACnE,CAAC,CAAC,CAAC;AAEN,MAAM,cAAc,GAAG,CAAC,IAAkB,EAAE,EAAE,CAAC;IAC7C,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAA,mBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACrE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;CAC5F,CAAC;AAEF;;;GAGG;AACI,MAAM,kBAAkB,GAAG,CAAC,OAAwB,EAAa,EAAE,CACxE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAD1E,QAAA,kBAAkB,sBACwD"}
@@ -0,0 +1,4 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /** A part whose `interactions` name one Studio does not know. */
4
+ export declare const unknownInteractionsOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unknownInteractionsOf = void 0;
4
+ const force_interactions_1 = require("../../force-interactions");
5
+ const part_definition_1 = require("../sketch/part-definition");
6
+ const isKnown = (name) => force_interactions_1.INTERACTIONS.some((known) => known === name);
7
+ /** A part whose `interactions` name one Studio does not know. */
8
+ const unknownInteractionsOf = (product) => product.parts.flatMap((part) => (0, part_definition_1.interactionNamesOf)(part.source)
9
+ .filter((name) => !isKnown(name))
10
+ .map((name) => ({
11
+ rule: 'INTERACTIONS',
12
+ file: part.file,
13
+ message: `unknown interaction "${name}" - interactions are ${force_interactions_1.INTERACTIONS.join(', ')}; rest is always drawn, and pressed or loading is a state`,
14
+ })));
15
+ exports.unknownInteractionsOf = unknownInteractionsOf;
16
+ //# sourceMappingURL=interactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/interactions.ts"],"names":[],"mappings":";;;AAAA,iEAAwD;AAGxD,+DAA+D;AAE/D,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,iCAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;AAE/E,iEAAiE;AAC1D,MAAM,qBAAqB,GAAG,CAAC,OAAwB,EAAa,EAAE,CAC3E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,IAAA,oCAAkB,EAAC,IAAI,CAAC,MAAM,CAAC;KAC5B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAChC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACd,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,OAAO,EAAE,wBAAwB,IAAI,wBAAwB,iCAAY,CAAC,IAAI,CAAC,IAAI,CAAC,2DAA2D;CAChJ,CAAC,CAAC,CACN,CAAC;AATS,QAAA,qBAAqB,yBAS9B"}
@@ -0,0 +1,4 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /** A component or foundation that imports the wireframe kit, which only elements and pages may use. */
4
+ export declare const kitOutsidePagesOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kitOutsidePagesOf = void 0;
4
+ const kit_1 = require("../kit");
5
+ /** A component or foundation that imports the wireframe kit, which only elements and pages may use. */
6
+ const kitOutsidePagesOf = (product) => product.parts
7
+ .filter((part) => (part.layer === 'components' || part.layer === 'foundations') && (0, kit_1.importsKit)(part.source))
8
+ .map((part) => ({
9
+ rule: 'WIREFRAME-KIT',
10
+ file: part.file,
11
+ message: `${part.layer} may not use ${kit_1.KIT_SPECIFIER} - only elements and pages draw with the wireframe kit`,
12
+ }));
13
+ exports.kitOutsidePagesOf = kitOutsidePagesOf;
14
+ //# sourceMappingURL=kit-outside-pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kit-outside-pages.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/kit-outside-pages.ts"],"names":[],"mappings":";;;AAAA,gCAAmD;AAInD,uGAAuG;AAChG,MAAM,iBAAiB,GAAG,CAAC,OAAwB,EAAa,EAAE,CACvE,OAAO,CAAC,KAAK;KACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,IAAI,IAAA,gBAAU,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC1G,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACd,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,gBAAgB,mBAAa,wDAAwD;CAC5G,CAAC,CAAC,CAAC;AAPK,QAAA,iBAAiB,qBAOtB"}
@@ -0,0 +1,4 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /** A part that drives motion from script frames, which a timeline cannot stop at a given time. */
4
+ export declare const scriptedMotionOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scriptedMotionOf = void 0;
4
+ const ts_source_1 = require("../ts-source");
5
+ const TIMED = ['requestAnimationFrame', 'setInterval'];
6
+ /** A part that drives motion from script frames, which a timeline cannot stop at a given time. */
7
+ const scriptedMotionOf = (product) => product.parts.flatMap((part) => [...new Set((0, ts_source_1.calledNamesOf)(part.source).filter((name) => TIMED.includes(name)))].map((name) => ({
8
+ rule: 'MOTION',
9
+ file: part.file,
10
+ message: `calls ${name} - motion must be CSS animation, CSS transition or the Web Animations API`,
11
+ })));
12
+ exports.scriptedMotionOf = scriptedMotionOf;
13
+ //# sourceMappingURL=motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/motion.ts"],"names":[],"mappings":";;;AAEA,4CAA6C;AAE7C,MAAM,KAAK,GAAG,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC;AAEvD,kGAAkG;AAC3F,MAAM,gBAAgB,GAAG,CAAC,OAAwB,EAAa,EAAE,CACtE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,CAAC,GAAG,IAAI,GAAG,CAAC,IAAA,yBAAa,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7F,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,OAAO,EAAE,SAAS,IAAI,2EAA2E;CAClG,CAAC,CAAC,CACJ,CAAC;AAPS,QAAA,gBAAgB,oBAOzB"}
@@ -0,0 +1,8 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /** An open comment whose part, state, size or sketch variant is gone, and a comment file that cannot be read. */
4
+ export declare const staleCommentsOf: (product: ResolvedProduct) => Problem[];
5
+ /** An open comment made on a sketch that was merged, discarded or replaced: it needs a reply or the user's resolve, but blocks nothing. */
6
+ export declare const goneSketchCommentWarningsOf: (product: ResolvedProduct) => string[];
7
+ /** A note whose part, state or size is gone, a pointed note without a size, and a note file that cannot be read. */
8
+ export declare const staleNotesOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.staleNotesOf = exports.goneSketchCommentWarningsOf = exports.staleCommentsOf = void 0;
4
+ const path_1 = require("path");
5
+ const comment_1 = require("../comments/comment");
6
+ const note_1 = require("../notes/note");
7
+ /** An open comment whose part, state, size or sketch variant is gone, and a comment file that cannot be read. */
8
+ const staleCommentsOf = (product) => {
9
+ const { comments, unreadable } = (0, comment_1.listComments)({ productDir: product.dir, product: product.name });
10
+ return [
11
+ ...unreadable.map(({ file, problem }) => ({ rule: 'COMMENT', file, message: problem })),
12
+ ...comments.flatMap((comment) => {
13
+ if ((0, comment_1.sketchGoneOf)({ product, comment }))
14
+ return [];
15
+ const reason = (0, comment_1.staleReasonOf)({ product, comment });
16
+ return reason ? [{ rule: 'COMMENT', file: comment.file, message: `${reason} - answer or drop the comment` }] : [];
17
+ }),
18
+ ];
19
+ };
20
+ exports.staleCommentsOf = staleCommentsOf;
21
+ /** An open comment made on a sketch that was merged, discarded or replaced: it needs a reply or the user's resolve, but blocks nothing. */
22
+ const goneSketchCommentWarningsOf = (product) => (0, comment_1.listComments)({ productDir: product.dir, product: product.name }).comments.flatMap((comment) => {
23
+ var _a;
24
+ return (0, comment_1.sketchGoneOf)({ product, comment })
25
+ ? [
26
+ `COMMENT ${(0, path_1.relative)(product.dir, comment.file)}: the sketch on ${(_a = comment.sketch) === null || _a === void 0 ? void 0 : _a.target} no longer exists - reply with \`comment reply --by\`, or the user resolves the comment in Studio`,
27
+ ]
28
+ : [];
29
+ });
30
+ exports.goneSketchCommentWarningsOf = goneSketchCommentWarningsOf;
31
+ /** A note whose part, state or size is gone, a pointed note without a size, and a note file that cannot be read. */
32
+ const staleNotesOf = (product) => {
33
+ const { notes, unreadable } = (0, note_1.listNotes)(product.dir);
34
+ return [
35
+ ...unreadable.map(({ file, problem }) => ({ rule: 'NOTE', file, message: problem })),
36
+ ...notes.flatMap((note) => {
37
+ const gone = (0, note_1.noteProblemOf)({ product, note });
38
+ if (!gone)
39
+ return [];
40
+ return [
41
+ {
42
+ rule: 'NOTE',
43
+ file: note.file,
44
+ message: gone === note_1.MISSING_NOTE_SIZE ? gone : `${gone} - move or drop the note`,
45
+ },
46
+ ];
47
+ }),
48
+ ];
49
+ };
50
+ exports.staleNotesOf = staleNotesOf;
51
+ //# sourceMappingURL=stale-comment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale-comment.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/stale-comment.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAChC,iDAAgF;AAChF,wCAA4E;AAI5E,iHAAiH;AAC1G,MAAM,eAAe,GAAG,CAAC,OAAwB,EAAa,EAAE;IACrE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAA,sBAAY,EAAC,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAElG,OAAO;QACL,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACvF,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,IAAI,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAAE,OAAO,EAAE,CAAC;YAElD,MAAM,MAAM,GAAG,IAAA,uBAAa,EAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAEnD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,+BAA+B,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpH,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAbW,QAAA,eAAe,mBAa1B;AAEF,2IAA2I;AACpI,MAAM,2BAA2B,GAAG,CAAC,OAAwB,EAAY,EAAE,CAChF,IAAA,sBAAY,EAAC,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;;IAC5F,OAAA,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;QAChC,CAAC,CAAC;YACE,WAAW,IAAA,eAAQ,EAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,mBAAmB,MAAA,OAAO,CAAC,MAAM,0CAAE,MAAM,mGAAmG;SAC3L;QACH,CAAC,CAAC,EAAE,CAAA;CAAA,CACP,CAAC;AAPS,QAAA,2BAA2B,+BAOpC;AAEJ,oHAAoH;AAC7G,MAAM,YAAY,GAAG,CAAC,OAAwB,EAAa,EAAE;IAClE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAA,gBAAS,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAErD,OAAO;QACL,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACpF,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,IAAI,GAAG,IAAA,oBAAa,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAE9C,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC;YAErB,OAAO;gBACL;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,IAAI,KAAK,wBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,0BAA0B;iBAC/E;aACF,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,YAAY,gBAmBvB"}
@@ -0,0 +1,4 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /** A `.replace` or `.replaceAll` on markup that neither the part nor any part it uses draws, so it changes nothing. */
4
+ export declare const staleReplacesOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,65 @@
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.staleReplacesOf = void 0;
7
+ const typescript_1 = __importDefault(require("typescript"));
8
+ const imports_1 = require("../imports");
9
+ const resolve_product_1 = require("../resolve-product");
10
+ const REPLACE_METHODS = new Set(['replace', 'replaceAll']);
11
+ const matcherOf = (pattern) => {
12
+ if (typescript_1.default.isStringLiteral(pattern) || typescript_1.default.isNoSubstitutionTemplateLiteral(pattern)) {
13
+ const text = pattern.text;
14
+ return { label: `'${text}'`, matches: (source) => source.includes(text) };
15
+ }
16
+ if (!typescript_1.default.isRegularExpressionLiteral(pattern))
17
+ return null;
18
+ const slash = pattern.text.lastIndexOf('/');
19
+ try {
20
+ const regex = new RegExp(pattern.text.slice(1, slash), pattern.text.slice(slash + 1).replace(/[gy]/g, ''));
21
+ return { label: pattern.text, matches: (source) => regex.test(source) };
22
+ }
23
+ catch (_a) {
24
+ return null;
25
+ }
26
+ };
27
+ const replacesOf = (source) => {
28
+ const replaces = [];
29
+ const visit = (node) => {
30
+ if (typescript_1.default.isCallExpression(node) &&
31
+ typescript_1.default.isPropertyAccessExpression(node.expression) &&
32
+ REPLACE_METHODS.has(node.expression.name.text) &&
33
+ node.arguments[0]) {
34
+ const matcher = matcherOf(node.arguments[0]);
35
+ if (matcher && matcher.label.includes('<'))
36
+ replaces.push(Object.assign({ method: node.expression.name.text, start: node.arguments[0].getStart(), end: node.arguments[0].getEnd() }, matcher));
37
+ }
38
+ typescript_1.default.forEachChild(node, visit);
39
+ };
40
+ visit(typescript_1.default.createSourceFile('part.ts', source, typescript_1.default.ScriptTarget.Latest, true));
41
+ return replaces.sort((a, b) => a.start - b.start);
42
+ };
43
+ const modulesOf = (part) => [{ file: part.file, source: part.source }, ...(0, imports_1.folderModulesOf)(part)];
44
+ const withoutPatterns = (source) => replacesOf(source)
45
+ .reverse()
46
+ .reduce((text, { start, end }) => text.slice(0, start) + text.slice(end), source);
47
+ /** A `.replace` or `.replaceAll` on markup that neither the part nor any part it uses draws, so it changes nothing. */
48
+ const staleReplacesOf = (product) => product.parts.flatMap((part) => {
49
+ const own = modulesOf(part);
50
+ const replaces = own.flatMap((module) => replacesOf(module.source).map((replace) => ({ module, replace })));
51
+ if (replaces.length === 0)
52
+ return [];
53
+ const used = (0, imports_1.partsReachedFrom)({ product, from: part });
54
+ const sources = [...own, ...used.flatMap(modulesOf)].map((module) => withoutPatterns(module.source));
55
+ const scope = `${(0, resolve_product_1.partKeyOf)(part)}${used.length > 0 ? ` or the parts it uses (${used.map(resolve_product_1.partKeyOf).join(', ')})` : ''}`;
56
+ return replaces
57
+ .filter(({ replace }) => !sources.some((source) => replace.matches(source)))
58
+ .map(({ module, replace }) => ({
59
+ rule: 'STALE-REPLACE',
60
+ file: module.file,
61
+ message: `${replace.method}(${replace.label}) matches no markup of ${scope}, so it changes nothing`,
62
+ }));
63
+ });
64
+ exports.staleReplacesOf = staleReplacesOf;
65
+ //# sourceMappingURL=stale-replace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale-replace.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/stale-replace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /** An SVG in the product's `assets/`, or in a sketch variant's own `assets/` when the product is one, that is not a usable SVG. */
4
+ export declare const badSvgAssetsOf: (product: ResolvedProduct & {
5
+ assetsDir?: string;
6
+ }) => Problem[];
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.badSvgAssetsOf = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const assets_1 = require("../assets");
7
+ const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
8
+ const ROOT_SVG = /<svg\b(?:[^>"']|"[^"]*"|'[^']*')*>/u;
9
+ const XMLNS = /\sxmlns\s*=\s*(["'])(.*?)\1/u;
10
+ const problemOf = (source) => {
11
+ var _a;
12
+ const root = ROOT_SVG.exec(source.replace(/<!--[\s\S]*?-->/gu, ''));
13
+ if (!root)
14
+ return 'has no root <svg> element';
15
+ return ((_a = XMLNS.exec(root[0])) === null || _a === void 0 ? void 0 : _a[2]) === SVG_NAMESPACE
16
+ ? null
17
+ : `the root <svg> has no xmlns="${SVG_NAMESPACE}" - an image viewer or <img src> does not draw it`;
18
+ };
19
+ /** An SVG in the product's `assets/`, or in a sketch variant's own `assets/` when the product is one, that is not a usable SVG. */
20
+ const badSvgAssetsOf = (product) => {
21
+ var _a;
22
+ return (0, assets_1.filesBelow)((_a = product.assetsDir) !== null && _a !== void 0 ? _a : (0, path_1.resolve)(product.dir, assets_1.ASSETS_FOLDER))
23
+ .filter((file) => file.endsWith('.svg'))
24
+ .flatMap((file) => {
25
+ const message = problemOf((0, fs_1.readFileSync)(file, 'utf8'));
26
+ return message ? [{ rule: 'SVG-ASSET', file, message }] : [];
27
+ });
28
+ };
29
+ exports.badSvgAssetsOf = badSvgAssetsOf;
30
+ //# sourceMappingURL=svg-asset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg-asset.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/svg-asset.ts"],"names":[],"mappings":";;;AAAA,2BAAkC;AAClC,+BAA+B;AAC/B,sCAAsD;AAItD,MAAM,aAAa,GAAG,4BAA4B,CAAC;AACnD,MAAM,QAAQ,GAAG,qCAAqC,CAAC;AACvD,MAAM,KAAK,GAAG,8BAA8B,CAAC;AAE7C,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE;;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC;IAEpE,IAAI,CAAC,IAAI;QAAE,OAAO,2BAA2B,CAAC;IAE9C,OAAO,CAAA,MAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,0CAAG,CAAC,CAAC,MAAK,aAAa;QAC/C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,gCAAgC,aAAa,mDAAmD,CAAC;AACvG,CAAC,CAAC;AAEF,mIAAmI;AAC5H,MAAM,cAAc,GAAG,CAAC,OAAiD,EAAa,EAAE;;IAC7F,OAAA,IAAA,mBAAU,EAAC,MAAA,OAAO,CAAC,SAAS,mCAAI,IAAA,cAAO,EAAC,OAAO,CAAC,GAAG,EAAE,sBAAa,CAAC,CAAC;SACjE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;SACvC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,OAAO,GAAG,SAAS,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAEtD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC,CAAC,CAAA;CAAA,CAAC;AAPM,QAAA,cAAc,kBAOpB"}
@@ -0,0 +1,3 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ export declare const tokenSelectorsOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,87 @@
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.tokenSelectorsOf = void 0;
7
+ const postcss_1 = __importDefault(require("postcss"));
8
+ const postcss_selector_parser_1 = __importDefault(require("postcss-selector-parser"));
9
+ const resolve_product_1 = require("../resolve-product");
10
+ const sdkNode = (node) => {
11
+ var _a, _b;
12
+ if (node.type === 'class')
13
+ return node.value.startsWith('et-');
14
+ if (node.type === 'attribute')
15
+ return (node.attribute === 'class' &&
16
+ !!((_a = node.value) === null || _a === void 0 ? void 0 : _a.startsWith('et-')) &&
17
+ ['=', '~=', '^=', '*='].includes((_b = node.operator) !== null && _b !== void 0 ? _b : ''));
18
+ if (node.type === 'pseudo' && [':is', ':where'].includes(node.value))
19
+ return node.nodes.length > 0 && node.nodes.every((selector) => selector.nodes.some(sdkNode));
20
+ return false;
21
+ };
22
+ const allowedSelector = (selector, parentScoped) => {
23
+ if (selector.nodes.some(sdkNode))
24
+ return true;
25
+ if (parentScoped)
26
+ return true;
27
+ const nodes = selector.nodes.filter((node) => node.type !== 'comment');
28
+ return (nodes.length === 1 &&
29
+ nodes.some((node) => (node.type === 'tag' && ['html', 'body'].includes(node.value)) ||
30
+ (node.type === 'pseudo' && node.value === ':root')));
31
+ };
32
+ const selectorsOf = (rule) => {
33
+ try {
34
+ return (0, postcss_selector_parser_1.default)().astSync(rule.selector).nodes;
35
+ }
36
+ catch (_a) {
37
+ return [];
38
+ }
39
+ };
40
+ const parentRuleOf = (rule) => {
41
+ let parent = rule.parent;
42
+ while (parent && parent.type !== 'rule')
43
+ parent = parent.parent;
44
+ return (parent === null || parent === void 0 ? void 0 : parent.type) === 'rule' ? parent : undefined;
45
+ };
46
+ const sdkScoped = (rule) => {
47
+ const selectors = selectorsOf(rule);
48
+ const parentRule = parentRuleOf(rule);
49
+ const parent = parentRule ? sdkScoped(parentRule) : false;
50
+ return selectors.length > 0 && selectors.every((selector) => selector.nodes.some(sdkNode) || parent);
51
+ };
52
+ const tokenSelectorsOf = (product) => {
53
+ const tokens = new Set((0, resolve_product_1.tokenPartsOf)(product.config));
54
+ return product.parts
55
+ .filter((part) => tokens.has((0, resolve_product_1.partKeyOf)(part)) && part.css && part.cssSource !== null)
56
+ .flatMap((part) => {
57
+ var _a;
58
+ let root;
59
+ try {
60
+ root = postcss_1.default.parse((_a = part.cssSource) !== null && _a !== void 0 ? _a : '');
61
+ }
62
+ catch (_b) {
63
+ return [];
64
+ }
65
+ const problems = [];
66
+ root.walkRules((rule) => {
67
+ var _a;
68
+ for (let ancestor = rule.parent; ancestor; ancestor = ancestor.parent) {
69
+ if (ancestor.type === 'atrule' && /^(?:-\w+-)?keyframes$/u.test(ancestor.name))
70
+ return;
71
+ }
72
+ const parentRule = parentRuleOf(rule);
73
+ const parent = parentRule ? sdkScoped(parentRule) : false;
74
+ for (const selector of selectorsOf(rule)) {
75
+ if (!allowedSelector(selector, parent))
76
+ problems.push({
77
+ rule: 'TOKEN-SELECTOR',
78
+ file: (_a = part.css) !== null && _a !== void 0 ? _a : part.file,
79
+ message: `${selector.toString().trim()} in a globally loaded token stylesheet may affect other parts`,
80
+ });
81
+ }
82
+ });
83
+ return problems;
84
+ });
85
+ };
86
+ exports.tokenSelectorsOf = tokenSelectorsOf;
87
+ //# sourceMappingURL=token-selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-selectors.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/token-selectors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { SharedDirs } from '../imports';
2
+ import { Problem } from '../problem';
3
+ import { ResolvedProduct } from '../resolve-product';
4
+ /**
5
+ * Finds undefined tokens in part stylesheets and their reachable relative, shared and system imports.
6
+ * Fallbacks and SDK runtime `--et-*` tokens are permitted.
7
+ */
8
+ export declare const undefinedTokensOf: (product: ResolvedProduct & SharedDirs) => Problem[];
@@ -0,0 +1,103 @@
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.undefinedTokensOf = void 0;
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ const postcss_1 = __importDefault(require("postcss"));
10
+ const vite_paths_1 = require("../../vite-paths");
11
+ const css_source_1 = require("../css-source");
12
+ const imports_1 = require("../imports");
13
+ const resolve_product_1 = require("../resolve-product");
14
+ const ts_source_1 = require("../ts-source");
15
+ const RUNTIME_PREFIX = '--et-';
16
+ const stylesTextsOf = (source) => {
17
+ var _a;
18
+ const root = (0, path_1.resolve)((0, path_1.dirname)(source.configFile), '../..');
19
+ return ((_a = source.config.styles) !== null && _a !== void 0 ? _a : [])
20
+ .map((style) => (0, path_1.resolve)(root, style))
21
+ .filter((file) => (0, fs_1.existsSync)(file))
22
+ .map((file) => (0, fs_1.readFileSync)(file, 'utf8'));
23
+ };
24
+ const stylesheetImportsOf = (css) => {
25
+ const imports = [];
26
+ try {
27
+ postcss_1.default.parse(css).walkAtRules('import', (rule) => {
28
+ var _a;
29
+ const match = /^(?:url\(\s*)?(?:['"]([^'"]+)['"]|([^'"\s)]+))/u.exec(rule.params.trim());
30
+ const specifier = (_a = match === null || match === void 0 ? void 0 : match[1]) !== null && _a !== void 0 ? _a : match === null || match === void 0 ? void 0 : match[2];
31
+ if (specifier)
32
+ imports.push(specifier);
33
+ });
34
+ }
35
+ catch (_a) {
36
+ return [];
37
+ }
38
+ return imports;
39
+ };
40
+ const reachableFilesOf = (product) => {
41
+ var _a, _b, _c;
42
+ const parts = new Map(product.parts.map((part) => [(0, resolve_product_1.partKeyOf)(part), part]));
43
+ const files = new Map();
44
+ const queue = product.parts.flatMap((part) => [part.file, ...(part.css ? [part.css] : [])]);
45
+ for (let file = queue.shift(); file !== undefined; file = queue.shift()) {
46
+ if (files.has(file) || !(0, fs_1.existsSync)(file))
47
+ continue;
48
+ const source = (0, fs_1.readFileSync)(file, 'utf8');
49
+ files.set(file, source);
50
+ const specifiers = file.endsWith('.css') ? stylesheetImportsOf(source) : (0, ts_source_1.importsOf)(source);
51
+ for (const specifier of specifiers) {
52
+ const imported = (0, imports_1.classifyImport)(specifier);
53
+ let found = null;
54
+ if (imported.kind === 'relative') {
55
+ const path = (0, path_1.resolve)((0, path_1.dirname)(file), (_a = specifier.split('?')[0]) !== null && _a !== void 0 ? _a : specifier);
56
+ found = path.endsWith('.css') ? ((0, fs_1.existsSync)(path) ? path : null) : (0, vite_paths_1.sourceFileOf)(path);
57
+ }
58
+ else if (imported.kind === 'shared') {
59
+ found = (0, imports_1.sharedFileOf)({ dirs: (0, imports_1.sharedDirsOf)(product), path: imported.path });
60
+ }
61
+ else if (imported.kind === 'part') {
62
+ const part = parts.get((0, resolve_product_1.partKeyOf)(imported));
63
+ found = imported.stylesheet ? ((_b = part === null || part === void 0 ? void 0 : part.css) !== null && _b !== void 0 ? _b : null) : ((_c = part === null || part === void 0 ? void 0 : part.file) !== null && _c !== void 0 ? _c : null);
64
+ }
65
+ if (found && !files.has(found))
66
+ queue.push(found);
67
+ }
68
+ }
69
+ return files;
70
+ };
71
+ const folderTextsOf = (dir) => (0, fs_1.existsSync)(dir)
72
+ ? (0, fs_1.readdirSync)(dir, { recursive: true })
73
+ .filter((path) => /\.(ts|css)$/u.test(path))
74
+ .map((path) => (0, fs_1.readFileSync)((0, path_1.resolve)(dir, path), 'utf8'))
75
+ : [];
76
+ const definedTokensOf = (product, files) => {
77
+ const texts = [
78
+ ...product.parts.flatMap((part) => [part.source, ...folderTextsOf((0, path_1.dirname)(part.file))]),
79
+ ...files.values(),
80
+ ...stylesTextsOf(product),
81
+ ...(product.base ? stylesTextsOf(product.base) : []),
82
+ ];
83
+ return new Set(texts.flatMap((text) => [...text.matchAll(/(--[\w-]+)['"]?\s*:/g)].map((match) => { var _a; return (_a = match[1]) !== null && _a !== void 0 ? _a : ''; })));
84
+ };
85
+ const usedTokensOf = (css) => (0, css_source_1.cssBlocksOf)(css).declarations.flatMap((declaration) => { var _a; return [...((_a = (0, css_source_1.declarationValueOf)(declaration)) !== null && _a !== void 0 ? _a : '').matchAll(/var\(\s*(--[\w-]+)\s*\)/g)].map((match) => { var _a; return (_a = match[1]) !== null && _a !== void 0 ? _a : ''; }); });
86
+ const stylesheetProblemsOf = (options) => [...new Set(usedTokensOf(options.css))]
87
+ .filter((token) => !options.defined.has(token) && !token.startsWith(RUNTIME_PREFIX))
88
+ .map((token) => ({
89
+ rule: 'UNDEFINED-TOKEN',
90
+ file: options.file,
91
+ message: `var(${token}) has no fallback, and no stylesheet of the product or its base defines ${token}`,
92
+ }));
93
+ /**
94
+ * Finds undefined tokens in part stylesheets and their reachable relative, shared and system imports.
95
+ * Fallbacks and SDK runtime `--et-*` tokens are permitted.
96
+ */
97
+ const undefinedTokensOf = (product) => {
98
+ const files = reachableFilesOf(product);
99
+ const defined = definedTokensOf(product, files);
100
+ return [...files].flatMap(([file, source]) => file.endsWith('.css') ? stylesheetProblemsOf({ file, css: source, defined }) : []);
101
+ };
102
+ exports.undefinedTokensOf = undefinedTokensOf;
103
+ //# sourceMappingURL=undefined-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undefined-token.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/undefined-token.ts"],"names":[],"mappings":"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"}