@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,15 @@
1
+ import { PictureOf } from '../../merge-compare';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ import { Sketch } from './sketch';
4
+ import { SketchPartLoader } from './unchanged-states';
5
+ /**
6
+ * `true` when every state of every variant of the sketch draws the same pixels as the product does now, in
7
+ * every frame; otherwise why not. A variant that holds another part than the target, or a state that fails to
8
+ * draw, counts as a change.
9
+ */
10
+ export declare const sketchShowsNoChange: (options: {
11
+ product: ResolvedProduct;
12
+ sketch: Sketch;
13
+ load: SketchPartLoader;
14
+ pictureOf: PictureOf;
15
+ }) => Promise<true | string>;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.sketchShowsNoChange = void 0;
13
+ const list_system_1 = require("../list-system");
14
+ const product_1 = require("../product");
15
+ const resolve_product_1 = require("../resolve-product");
16
+ const overlay_1 = require("./overlay");
17
+ const sketch_1 = require("./sketch");
18
+ const unchanged_states_1 = require("./unchanged-states");
19
+ const variantChangeOf = (options) => __awaiter(void 0, void 0, void 0, function* () {
20
+ var _a;
21
+ const { product, sketch, variant, load, pictureOf } = options;
22
+ const others = (0, product_1.partFilesOf)((0, sketch_1.variantDirOf)(sketch, variant))
23
+ .parts.map(resolve_product_1.partKeyOf)
24
+ .filter((key) => key !== sketch.target);
25
+ if (others.length > 0)
26
+ return `variant ${variant} also holds ${others.join(', ')}`;
27
+ const file = (_a = (0, overlay_1.overlaySketch)({ product, sketch, variant }).parts.find((part) => (0, resolve_product_1.partKeyOf)(part) === sketch.target)) === null || _a === void 0 ? void 0 : _a.file;
28
+ if (!file)
29
+ return `variant ${variant} does not draw ${sketch.target}`;
30
+ const read = yield (0, list_system_1.readPartModule)({
31
+ part: { file },
32
+ product: product.name,
33
+ load: () => load({ file, product: product.name, sketch: { target: sketch.target, variant } }),
34
+ });
35
+ if (read.problem)
36
+ return `variant ${variant} does not load: ${read.problem}`;
37
+ if (read.states.length === 0)
38
+ return `variant ${variant} has no states`;
39
+ const failures = new Set();
40
+ const recording = (picture) => __awaiter(void 0, void 0, void 0, function* () {
41
+ try {
42
+ return yield pictureOf(picture);
43
+ }
44
+ catch (error) {
45
+ failures.add(error instanceof Error ? error.message : String(error));
46
+ throw error;
47
+ }
48
+ });
49
+ const unchanged = yield (0, unchanged_states_1.unchangedStatesOf)({ product, sketch, variant, load, pictureOf: recording });
50
+ const changed = read.states.filter((state) => !unchanged.includes(state));
51
+ if (changed.length === 0)
52
+ return null;
53
+ const failed = failures.size > 0 ? ` - a shot failed: ${[...failures].join('; ')}` : '';
54
+ return `variant ${variant} changes ${changed.join(', ')}${failed}`;
55
+ });
56
+ /**
57
+ * `true` when every state of every variant of the sketch draws the same pixels as the product does now, in
58
+ * every frame; otherwise why not. A variant that holds another part than the target, or a state that fails to
59
+ * draw, counts as a change.
60
+ */
61
+ const sketchShowsNoChange = (options) => __awaiter(void 0, void 0, void 0, function* () {
62
+ const { sketch } = options;
63
+ if (sketch.variants.length === 0)
64
+ return 'the sketch has no variant';
65
+ const changes = yield Promise.all(sketch.variants.map((variant) => variantChangeOf(Object.assign(Object.assign({}, options), { variant }))));
66
+ const found = changes.filter((change) => change !== null);
67
+ return found.length === 0 ? true : found.join('; ');
68
+ });
69
+ exports.sketchShowsNoChange = sketchShowsNoChange;
70
+ //# sourceMappingURL=no-visible-change.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-visible-change.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/no-visible-change.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { ResolvedProduct } from '../resolve-product';
2
+ import { Sketch } from './sketch';
3
+ export type SketchedProduct = ResolvedProduct & {
4
+ sketched: string[];
5
+ sharedDir: string;
6
+ variantSharedDir: string;
7
+ assetsDir: string;
8
+ };
9
+ /**
10
+ * The product as one variant of a sketch draws it: each part the variant holds replaces the part the
11
+ * product resolves under the same name, or joins it when the product has none. `sketched` names the
12
+ * parts the variant holds, `sharedDir` the sketch's `shared/` folder its parts import as `@shared/...` (the
13
+ * variant's own `variantSharedDir` first), and
14
+ * `assetsDir` the variant's own `assets/` folder, which `@assets/...` looks in first.
15
+ */
16
+ export declare const overlaySketch: (options: {
17
+ product: ResolvedProduct;
18
+ sketch: Sketch;
19
+ variant: string;
20
+ }) => SketchedProduct;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.overlaySketch = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const assets_1 = require("../assets");
7
+ const layers_1 = require("../layers");
8
+ const product_1 = require("../product");
9
+ const resolve_product_1 = require("../resolve-product");
10
+ const sketch_1 = require("./sketch");
11
+ const mayChange = (sketch, part) => (0, resolve_product_1.partKeyOf)(part) === sketch.target || part.layer === sketch.layer || layers_1.LAYER_USES[sketch.layer].includes(part.layer);
12
+ /**
13
+ * The product as one variant of a sketch draws it: each part the variant holds replaces the part the
14
+ * product resolves under the same name, or joins it when the product has none. `sketched` names the
15
+ * parts the variant holds, `sharedDir` the sketch's `shared/` folder its parts import as `@shared/...` (the
16
+ * variant's own `variantSharedDir` first), and
17
+ * `assetsDir` the variant's own `assets/` folder, which `@assets/...` looks in first.
18
+ */
19
+ const overlaySketch = (options) => {
20
+ var _a;
21
+ const { product, sketch, variant } = options;
22
+ const dir = (0, sketch_1.variantDirOf)(sketch, variant);
23
+ const own = (0, product_1.partFilesOf)(dir);
24
+ const baseKeys = new Set(product.parts.filter((part) => part.origin !== 'product').map(resolve_product_1.partKeyOf));
25
+ const sketched = own.parts.map((file) => (Object.assign(Object.assign({}, file), { origin: baseKeys.has((0, resolve_product_1.partKeyOf)(file)) ? 'overridden' : 'product', source: (0, fs_1.readFileSync)(file.file, 'utf8'), cssSource: file.css && (0, fs_1.existsSync)(file.css) ? (0, fs_1.readFileSync)(file.css, 'utf8') : null })));
26
+ const keys = new Set(sketched.map(resolve_product_1.partKeyOf));
27
+ const parts = [...product.parts.filter((part) => !keys.has((0, resolve_product_1.partKeyOf)(part))), ...sketched].sort((a, b) => layers_1.LAYERS.indexOf(a.layer) - layers_1.LAYERS.indexOf(b.layer) || a.name.localeCompare(b.name));
28
+ const outside = sketched
29
+ .filter((part) => !mayChange(sketch, part))
30
+ .map((part) => ({
31
+ rule: 'SKETCH',
32
+ file: part.file,
33
+ message: `a sketch on ${sketch.target} may change ${sketch.layer} and the layers below it, not ${(0, resolve_product_1.partKeyOf)(part)}`,
34
+ }));
35
+ return Object.assign(Object.assign({}, product), { parts, fixtures: (_a = (0, product_1.fixturesOf)(dir)) !== null && _a !== void 0 ? _a : product.fixtures, problems: [...product.problems, ...own.problems, ...outside], sketched: [...keys], sharedDir: (0, sketch_1.sharedDirOf)(sketch), variantSharedDir: (0, sketch_1.variantSharedDirOf)(sketch, variant), assetsDir: (0, path_1.resolve)(dir, assets_1.ASSETS_FOLDER) });
36
+ };
37
+ exports.overlaySketch = overlaySketch;
38
+ //# sourceMappingURL=overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/overlay.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAA+B;AAC/B,sCAA0C;AAC1C,sCAA+C;AAC/C,wCAAqD;AAErD,wDAA8E;AAC9E,qCAAiF;AASjF,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,IAAsD,EAAE,EAAE,CAC3F,IAAA,2BAAS,EAAC,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,mBAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEpH;;;;;;GAMG;AACI,MAAM,aAAa,GAAG,CAAC,OAI7B,EAAmB,EAAE;;IACpB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,2BAAS,CAAC,CAAC,CAAC;IACnG,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAgB,EAAE,CAAC,iCAClD,IAAI,KACP,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAA,2BAAS,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAChE,MAAM,EAAE,IAAA,iBAAY,EAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EACvC,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI,IAAA,eAAU,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,IACnF,CAAC,CAAC;IACJ,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,2BAAS,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAA,2BAAS,EAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAC7F,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,eAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAC5F,CAAC;IACF,MAAM,OAAO,GAAc,QAAQ;SAChC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SAC1C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACd,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,eAAe,MAAM,CAAC,MAAM,eAAe,MAAM,CAAC,KAAK,iCAAiC,IAAA,2BAAS,EAAC,IAAI,CAAC,EAAE;KACnH,CAAC,CAAC,CAAC;IAEN,uCACK,OAAO,KACV,KAAK,EACL,QAAQ,EAAE,MAAA,IAAA,oBAAU,EAAC,GAAG,CAAC,mCAAI,OAAO,CAAC,QAAQ,EAC7C,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,EAC5D,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,EACnB,SAAS,EAAE,IAAA,oBAAW,EAAC,MAAM,CAAC,EAC9B,gBAAgB,EAAE,IAAA,2BAAkB,EAAC,MAAM,EAAE,OAAO,CAAC,EACrD,SAAS,EAAE,IAAA,cAAO,EAAC,GAAG,EAAE,sBAAa,CAAC,IACtC;AACJ,CAAC,CAAC;AArCW,QAAA,aAAa,iBAqCxB"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The state names a part file declares in `definePart({ states: { … } })`, read without running it.
3
+ * `null` when the states are not written as an object literal there, so they cannot be known.
4
+ */
5
+ export declare const stateNamesOf: (source: string) => string[] | null;
6
+ /** The model ids in the `madeBy` literal of a part file; none when it has no such array of strings. */
7
+ export declare const madeByOf: (source: string) => string[];
8
+ /** The `note` literal of a part file's `definePart({ … })`; `null` when it holds none. */
9
+ export declare const noteOf: (source: string) => string | null;
10
+ /** The part file with its `note` replaced, or `null` when it holds no `definePart({ note: '…' })` literal. */
11
+ export declare const withNote: (source: string, note: string) => string | null;
12
+ /**
13
+ * The part file with `madeBy` in its `definePart({ … })` set to the model ids, written next to `note`; an empty
14
+ * list removes it. `null` when the file holds no `definePart({ note })` to write it next to.
15
+ */
16
+ export declare const withMadeBy: (source: string, madeBy: string[]) => string | null;
17
+ /**
18
+ * Whether the `widths` a part file writes in `definePart({ widths })` break the rule: a literal that
19
+ * is not a non-empty list of positive numbers. A `widths` held in a variable cannot be read and passes.
20
+ */
21
+ export declare const hasBadWidths: (source: string) => boolean;
22
+ /**
23
+ * The widths a part file writes as a literal in `definePart({ widths: [...] })`, read without running it.
24
+ * An empty list when it has none; `null` when they are not a literal list of numbers, so they cannot be known.
25
+ */
26
+ export declare const widthsOf: (source: string) => number[] | null;
27
+ /**
28
+ * The names a part file writes as string literals in `definePart({ interactions: [...] })`, read
29
+ * without running it. An empty list when it has none or they are not written as a literal list.
30
+ */
31
+ export declare const interactionNamesOf: (source: string) => string[];
@@ -0,0 +1,157 @@
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.interactionNamesOf = exports.widthsOf = exports.hasBadWidths = exports.withMadeBy = exports.withNote = exports.noteOf = exports.madeByOf = exports.stateNamesOf = void 0;
7
+ const typescript_1 = __importDefault(require("typescript"));
8
+ const definitionOf = (source) => {
9
+ const file = typescript_1.default.createSourceFile('part.ts', source, typescript_1.default.ScriptTarget.Latest, true);
10
+ let found = null;
11
+ const visit = (node) => {
12
+ if (found)
13
+ return;
14
+ if (typescript_1.default.isCallExpression(node) &&
15
+ typescript_1.default.isIdentifier(node.expression) &&
16
+ node.expression.text === 'definePart' &&
17
+ node.arguments[0] &&
18
+ typescript_1.default.isObjectLiteralExpression(node.arguments[0])) {
19
+ found = node.arguments[0];
20
+ return;
21
+ }
22
+ typescript_1.default.forEachChild(node, visit);
23
+ };
24
+ visit(file);
25
+ return { file, definition: found };
26
+ };
27
+ const nameOf = (name) => typescript_1.default.isIdentifier(name) || typescript_1.default.isStringLiteral(name) || typescript_1.default.isNumericLiteral(name) ? name.text : null;
28
+ const propertyOf = (definition, name) => definition.properties.find((property) => typescript_1.default.isPropertyAssignment(property) && nameOf(property.name) === name);
29
+ /**
30
+ * The state names a part file declares in `definePart({ states: { … } })`, read without running it.
31
+ * `null` when the states are not written as an object literal there, so they cannot be known.
32
+ */
33
+ const stateNamesOf = (source) => {
34
+ var _a;
35
+ const { definition } = definitionOf(source);
36
+ const states = definition ? (_a = propertyOf(definition, 'states')) === null || _a === void 0 ? void 0 : _a.initializer : undefined;
37
+ if (!states || !typescript_1.default.isObjectLiteralExpression(states))
38
+ return null;
39
+ const names = states.properties.map((property) => (typescript_1.default.isPropertyAssignment(property) || typescript_1.default.isShorthandPropertyAssignment(property)) && property.name
40
+ ? nameOf(property.name)
41
+ : null);
42
+ return names.includes(null) ? null : names;
43
+ };
44
+ exports.stateNamesOf = stateNamesOf;
45
+ /** The model ids in the `madeBy` literal of a part file; none when it has no such array of strings. */
46
+ const madeByOf = (source) => {
47
+ var _a;
48
+ const { definition } = definitionOf(source);
49
+ const current = definition ? (_a = propertyOf(definition, 'madeBy')) === null || _a === void 0 ? void 0 : _a.initializer : undefined;
50
+ if (!current || !typescript_1.default.isArrayLiteralExpression(current))
51
+ return [];
52
+ return current.elements.flatMap((element) => (typescript_1.default.isStringLiteralLike(element) ? [element.text] : []));
53
+ };
54
+ exports.madeByOf = madeByOf;
55
+ /** The `note` literal of a part file's `definePart({ … })`; `null` when it holds none. */
56
+ const noteOf = (source) => {
57
+ var _a;
58
+ const { definition } = definitionOf(source);
59
+ const current = definition ? (_a = propertyOf(definition, 'note')) === null || _a === void 0 ? void 0 : _a.initializer : undefined;
60
+ return current && (typescript_1.default.isStringLiteral(current) || typescript_1.default.isNoSubstitutionTemplateLiteral(current)) ? current.text : null;
61
+ };
62
+ exports.noteOf = noteOf;
63
+ const quoted = (text) => `'${text.replace(/\\/gu, '\\\\').replace(/'/gu, "\\'").replace(/\r?\n/gu, '\\n')}'`;
64
+ /** The part file with its `note` replaced, or `null` when it holds no `definePart({ note: '…' })` literal. */
65
+ const withNote = (source, note) => {
66
+ var _a;
67
+ const { file, definition } = definitionOf(source);
68
+ const current = definition ? (_a = propertyOf(definition, 'note')) === null || _a === void 0 ? void 0 : _a.initializer : undefined;
69
+ if (!current || !(typescript_1.default.isStringLiteral(current) || typescript_1.default.isNoSubstitutionTemplateLiteral(current)))
70
+ return null;
71
+ return `${source.slice(0, current.getStart(file))}${quoted(note)}${source.slice(current.getEnd())}`;
72
+ };
73
+ exports.withNote = withNote;
74
+ const lineStartOf = (source, position) => {
75
+ const newline = source.lastIndexOf('\n', position - 1);
76
+ return newline === -1 ? position : newline;
77
+ };
78
+ /**
79
+ * The part file with `madeBy` in its `definePart({ … })` set to the model ids, written next to `note`; an empty
80
+ * list removes it. `null` when the file holds no `definePart({ note })` to write it next to.
81
+ */
82
+ const withMadeBy = (source, madeBy) => {
83
+ var _a, _b;
84
+ const { file, definition } = definitionOf(source);
85
+ const note = definition ? propertyOf(definition, 'note') : undefined;
86
+ if (!definition || !note)
87
+ return null;
88
+ const current = propertyOf(definition, 'madeBy');
89
+ const value = `madeBy: [${madeBy.map(quoted).join(', ')}]`;
90
+ if (current) {
91
+ if (madeBy.length > 0)
92
+ return `${source.slice(0, current.getStart(file))}${value}${source.slice(current.getEnd())}`;
93
+ const end = source[current.getEnd()] === ',' ? current.getEnd() + 1 : current.getEnd();
94
+ return `${source.slice(0, lineStartOf(source, current.getStart(file)))}${source.slice(end)}`;
95
+ }
96
+ if (madeBy.length === 0)
97
+ return source;
98
+ const start = note.getStart(file);
99
+ const indent = (_b = (_a = /^\n?([ \t]*)/u.exec(source.slice(lineStartOf(source, start), start))) === null || _a === void 0 ? void 0 : _a[1]) !== null && _b !== void 0 ? _b : '';
100
+ return `${source.slice(0, note.getEnd())},\n${indent}${value}${source.slice(note.getEnd())}`;
101
+ };
102
+ exports.withMadeBy = withMadeBy;
103
+ const LITERALS = [
104
+ typescript_1.default.SyntaxKind.StringLiteral,
105
+ typescript_1.default.SyntaxKind.NoSubstitutionTemplateLiteral,
106
+ typescript_1.default.SyntaxKind.NumericLiteral,
107
+ typescript_1.default.SyntaxKind.TrueKeyword,
108
+ typescript_1.default.SyntaxKind.FalseKeyword,
109
+ typescript_1.default.SyntaxKind.NullKeyword,
110
+ typescript_1.default.SyntaxKind.ObjectLiteralExpression,
111
+ typescript_1.default.SyntaxKind.TemplateExpression,
112
+ ];
113
+ const isPositiveNumber = (node) => typescript_1.default.isNumericLiteral(node) && Number(node.text) > 0;
114
+ /**
115
+ * Whether the `widths` a part file writes in `definePart({ widths })` break the rule: a literal that
116
+ * is not a non-empty list of positive numbers. A `widths` held in a variable cannot be read and passes.
117
+ */
118
+ const hasBadWidths = (source) => {
119
+ var _a;
120
+ const { definition } = definitionOf(source);
121
+ const widths = definition ? (_a = propertyOf(definition, 'widths')) === null || _a === void 0 ? void 0 : _a.initializer : undefined;
122
+ if (!widths)
123
+ return false;
124
+ if (typescript_1.default.isArrayLiteralExpression(widths))
125
+ return widths.elements.length === 0 || !widths.elements.every(isPositiveNumber);
126
+ return LITERALS.includes(widths.kind);
127
+ };
128
+ exports.hasBadWidths = hasBadWidths;
129
+ /**
130
+ * The widths a part file writes as a literal in `definePart({ widths: [...] })`, read without running it.
131
+ * An empty list when it has none; `null` when they are not a literal list of numbers, so they cannot be known.
132
+ */
133
+ const widthsOf = (source) => {
134
+ var _a;
135
+ const { definition } = definitionOf(source);
136
+ const widths = definition ? (_a = propertyOf(definition, 'widths')) === null || _a === void 0 ? void 0 : _a.initializer : undefined;
137
+ if (!widths)
138
+ return [];
139
+ if (!typescript_1.default.isArrayLiteralExpression(widths) || !widths.elements.every(typescript_1.default.isNumericLiteral))
140
+ return null;
141
+ return widths.elements.map((element) => Number(element.text));
142
+ };
143
+ exports.widthsOf = widthsOf;
144
+ /**
145
+ * The names a part file writes as string literals in `definePart({ interactions: [...] })`, read
146
+ * without running it. An empty list when it has none or they are not written as a literal list.
147
+ */
148
+ const interactionNamesOf = (source) => {
149
+ var _a;
150
+ const { definition } = definitionOf(source);
151
+ const interactions = definition ? (_a = propertyOf(definition, 'interactions')) === null || _a === void 0 ? void 0 : _a.initializer : undefined;
152
+ if (!interactions || !typescript_1.default.isArrayLiteralExpression(interactions))
153
+ return [];
154
+ return interactions.elements.flatMap((element) => typescript_1.default.isStringLiteral(element) || typescript_1.default.isNoSubstitutionTemplateLiteral(element) ? [element.text] : []);
155
+ };
156
+ exports.interactionNamesOf = interactionNamesOf;
157
+ //# sourceMappingURL=part-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"part-definition.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/part-definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { SketchedProduct } from './overlay';
2
+ /**
3
+ * A warning for each selector in a stylesheet of a variant whose subject is a class the sketch's `shared/` stylesheets
4
+ * define: the variant restyles shared code, and that coupling stays hidden after a merge.
5
+ */
6
+ export declare const sharedClassWarningsOf: (options: {
7
+ target: string;
8
+ product: SketchedProduct;
9
+ }) => string[];
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sharedClassWarningsOf = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const css_source_1 = require("../css-source");
7
+ const resolve_product_1 = require("../resolve-product");
8
+ const duplicate_class_1 = require("./duplicate-class");
9
+ const withoutParens = (selector) => {
10
+ let depth = 0;
11
+ let kept = '';
12
+ for (const char of selector) {
13
+ if (char === '(')
14
+ depth++;
15
+ if (depth === 0)
16
+ kept += char;
17
+ if (char === ')')
18
+ depth = Math.max(0, depth - 1);
19
+ }
20
+ return kept;
21
+ };
22
+ const subjectClassesOf = (selector) => selector.split(',').flatMap((part) => {
23
+ var _a;
24
+ return (0, css_source_1.classesOf)((_a = withoutParens(part)
25
+ .trim()
26
+ .split(/\s*[\s>+~]\s*/u)
27
+ .pop()) !== null && _a !== void 0 ? _a : '');
28
+ });
29
+ const sharedCssOf = (sharedDir) => (0, fs_1.existsSync)(sharedDir)
30
+ ? (0, fs_1.readdirSync)(sharedDir, { recursive: true })
31
+ .filter((path) => path.endsWith('.css'))
32
+ .map((path) => (0, path_1.resolve)(sharedDir, path))
33
+ .map((file) => ({
34
+ file,
35
+ classes: new Set((0, css_source_1.cssBlocksOf)((0, fs_1.readFileSync)(file, 'utf8')).selectors.flatMap(css_source_1.classesOf)),
36
+ }))
37
+ : [];
38
+ /**
39
+ * A warning for each selector in a stylesheet of a variant whose subject is a class the sketch's `shared/` stylesheets
40
+ * define: the variant restyles shared code, and that coupling stays hidden after a merge.
41
+ */
42
+ const sharedClassWarningsOf = (options) => {
43
+ const { target, product } = options;
44
+ const shared = [...sharedCssOf(product.variantSharedDir), ...sharedCssOf(product.sharedDir)];
45
+ if (shared.length === 0)
46
+ return [];
47
+ return product.parts
48
+ .filter((part) => product.sketched.includes((0, resolve_product_1.partKeyOf)(part)))
49
+ .flatMap((part) => {
50
+ const stylesheets = (0, duplicate_class_1.stylesheetsOf)({ product, part });
51
+ return stylesheets
52
+ .filter((file) => !shared.some((entry) => entry.file === file))
53
+ .flatMap((file) => (0, css_source_1.cssBlocksOf)((0, fs_1.readFileSync)(file, 'utf8')).selectors.flatMap((selector) => subjectClassesOf(selector).flatMap((name) => {
54
+ const owner = shared.find((entry) => entry.classes.has(name));
55
+ const reportedAsDuplicate = owner && stylesheets.includes(owner.file) && /^\.[\w-]+$/u.test(selector.trim());
56
+ return owner && !reportedAsDuplicate
57
+ ? [
58
+ `WARNING ${(0, resolve_product_1.partKeyOf)(part)}: ${(0, path_1.relative)(target, file)} restyles .${name} of ${(0, path_1.relative)(target, owner.file)} - change it in shared/ or give the variant a class of its own`,
59
+ ]
60
+ : [];
61
+ })));
62
+ });
63
+ };
64
+ exports.sharedClassWarningsOf = sharedClassWarningsOf;
65
+ //# sourceMappingURL=shared-class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-class.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/shared-class.ts"],"names":[],"mappings":"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"}