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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/CHANGELOG.md +180 -0
  2. package/design/assets.d.ts +9 -0
  3. package/design/define-call.ts +20 -11
  4. package/design/define-part.ts +102 -0
  5. package/design/embed-page.ts +70 -0
  6. package/design/interaction-rows.ts +32 -0
  7. package/design/mark-part.ts +66 -0
  8. package/design/svg-asset.ts +36 -0
  9. package/design/systems/config.json +10 -0
  10. package/design/systems/ethlete-components/components/button/button.ts +18 -0
  11. package/design/web/env.d.ts +20 -0
  12. package/design/web/frame.ts +173 -41
  13. package/design/wireframe-kit.ts +386 -0
  14. package/package.json +4 -2
  15. package/src/index.js.map +1 -1
  16. package/src/lib/api/api-command.js.map +1 -1
  17. package/src/lib/api/api-context.js.map +1 -1
  18. package/src/lib/api/api-state.js.map +1 -1
  19. package/src/lib/api/auth-hint.js.map +1 -1
  20. package/src/lib/api/clear.js.map +1 -1
  21. package/src/lib/api/clone.js.map +1 -1
  22. package/src/lib/api/compose.js.map +1 -1
  23. package/src/lib/api/definition.js.map +1 -1
  24. package/src/lib/api/doctor.js.map +1 -1
  25. package/src/lib/api/fingerprint.js.map +1 -1
  26. package/src/lib/api/git.js.map +1 -1
  27. package/src/lib/api/help.js.map +1 -1
  28. package/src/lib/api/index.js.map +1 -1
  29. package/src/lib/api/load-definitions.js.map +1 -1
  30. package/src/lib/api/lock.js.map +1 -1
  31. package/src/lib/api/parse-argv.js.map +1 -1
  32. package/src/lib/api/ports.js.map +1 -1
  33. package/src/lib/api/resolve-checkout.js.map +1 -1
  34. package/src/lib/api/run-locked.js.map +1 -1
  35. package/src/lib/api/run-ready.js.map +1 -1
  36. package/src/lib/api/run-snapshot.js.map +1 -1
  37. package/src/lib/api/run-status.js.map +1 -1
  38. package/src/lib/api/run.js.map +1 -1
  39. package/src/lib/api/seeds.js.map +1 -1
  40. package/src/lib/api/setup.js.map +1 -1
  41. package/src/lib/api/snapshot.js.map +1 -1
  42. package/src/lib/api/state.js.map +1 -1
  43. package/src/lib/api/suggest.js.map +1 -1
  44. package/src/lib/api/validate-definition.js.map +1 -1
  45. package/src/lib/auth/auth-command.js.map +1 -1
  46. package/src/lib/auth/composer-auth.js.map +1 -1
  47. package/src/lib/auth/composer-repositories.js.map +1 -1
  48. package/src/lib/auth/gitlab-token.js.map +1 -1
  49. package/src/lib/auth/index.js.map +1 -1
  50. package/src/lib/config/diagnose.js.map +1 -1
  51. package/src/lib/config/index.js.map +1 -1
  52. package/src/lib/config/local-config.js.map +1 -1
  53. package/src/lib/design/asset-shot.d.ts +26 -0
  54. package/src/lib/design/asset-shot.js +191 -0
  55. package/src/lib/design/asset-shot.js.map +1 -0
  56. package/src/lib/design/browser.js.map +1 -1
  57. package/src/lib/design/calls-tsconfig.d.ts +14 -1
  58. package/src/lib/design/calls-tsconfig.js +23 -18
  59. package/src/lib/design/calls-tsconfig.js.map +1 -1
  60. package/src/lib/design/calls.d.ts +28 -0
  61. package/src/lib/design/calls.js +58 -0
  62. package/src/lib/design/calls.js.map +1 -0
  63. package/src/lib/design/changed-parts.d.ts +51 -0
  64. package/src/lib/design/changed-parts.js +103 -0
  65. package/src/lib/design/changed-parts.js.map +1 -0
  66. package/src/lib/design/check.js +53 -54
  67. package/src/lib/design/check.js.map +1 -1
  68. package/src/lib/design/contact-sheet.d.ts +68 -0
  69. package/src/lib/design/contact-sheet.js +169 -0
  70. package/src/lib/design/contact-sheet.js.map +1 -0
  71. package/src/lib/design/design-command.js +165 -6
  72. package/src/lib/design/design-command.js.map +1 -1
  73. package/src/lib/design/force-interactions.d.ts +13 -0
  74. package/src/lib/design/force-interactions.js +75 -0
  75. package/src/lib/design/force-interactions.js.map +1 -0
  76. package/src/lib/design/inbox-command.d.ts +21 -0
  77. package/src/lib/design/inbox-command.js +156 -0
  78. package/src/lib/design/inbox-command.js.map +1 -0
  79. package/src/lib/design/index.js.map +1 -1
  80. package/src/lib/design/json-layout.d.ts +5 -0
  81. package/src/lib/design/json-layout.js +41 -0
  82. package/src/lib/design/json-layout.js.map +1 -0
  83. package/src/lib/design/legacy.d.ts +7 -0
  84. package/src/lib/design/legacy.js +23 -8
  85. package/src/lib/design/legacy.js.map +1 -1
  86. package/src/lib/design/merge-compare.d.ts +57 -0
  87. package/src/lib/design/merge-compare.js +80 -0
  88. package/src/lib/design/merge-compare.js.map +1 -0
  89. package/src/lib/design/missing-package.js.map +1 -1
  90. package/src/lib/design/new-call.js.map +1 -1
  91. package/src/lib/design/part-marks.d.ts +12 -0
  92. package/src/lib/design/part-marks.js +38 -0
  93. package/src/lib/design/part-marks.js.map +1 -0
  94. package/src/lib/design/paths.d.ts +35 -2
  95. package/src/lib/design/paths.js +62 -4
  96. package/src/lib/design/paths.js.map +1 -1
  97. package/src/lib/design/product-command.d.ts +38 -0
  98. package/src/lib/design/product-command.js +158 -0
  99. package/src/lib/design/product-command.js.map +1 -0
  100. package/src/lib/design/ready-shots.d.ts +13 -0
  101. package/src/lib/design/ready-shots.js +55 -0
  102. package/src/lib/design/ready-shots.js.map +1 -0
  103. package/src/lib/design/render-fields.js.map +1 -1
  104. package/src/lib/design/render-packages.js.map +1 -1
  105. package/src/lib/design/render-worker.js.map +1 -1
  106. package/src/lib/design/render.d.ts +8 -1
  107. package/src/lib/design/render.js +43 -14
  108. package/src/lib/design/render.js.map +1 -1
  109. package/src/lib/design/serve.d.ts +17 -0
  110. package/src/lib/design/serve.js +444 -67
  111. package/src/lib/design/serve.js.map +1 -1
  112. package/src/lib/design/shot-command.d.ts +75 -0
  113. package/src/lib/design/shot-command.js +361 -0
  114. package/src/lib/design/shot-command.js.map +1 -0
  115. package/src/lib/design/shot.d.ts +97 -0
  116. package/src/lib/design/shot.js +346 -0
  117. package/src/lib/design/shot.js.map +1 -0
  118. package/src/lib/design/sketch-at.d.ts +16 -0
  119. package/src/lib/design/sketch-at.js +34 -0
  120. package/src/lib/design/sketch-at.js.map +1 -0
  121. package/src/lib/design/sketch-command.d.ts +9 -0
  122. package/src/lib/design/sketch-command.js +572 -0
  123. package/src/lib/design/sketch-command.js.map +1 -0
  124. package/src/lib/design/ssr-shims.js.map +1 -1
  125. package/src/lib/design/stamp.js.map +1 -1
  126. package/src/lib/design/status.d.ts +2 -2
  127. package/src/lib/design/status.js +2 -2
  128. package/src/lib/design/status.js.map +1 -1
  129. package/src/lib/design/studio-api.d.ts +102 -0
  130. package/src/lib/design/studio-api.js +452 -0
  131. package/src/lib/design/studio-api.js.map +1 -0
  132. package/src/lib/design/system/accept-command.d.ts +7 -0
  133. package/src/lib/design/system/accept-command.js +55 -0
  134. package/src/lib/design/system/accept-command.js.map +1 -0
  135. package/src/lib/design/system/assets.d.ts +34 -0
  136. package/src/lib/design/system/assets.js +64 -0
  137. package/src/lib/design/system/assets.js.map +1 -0
  138. package/src/lib/design/system/base.d.ts +33 -0
  139. package/src/lib/design/system/base.js +49 -0
  140. package/src/lib/design/system/base.js.map +1 -0
  141. package/src/lib/design/system/check-system.d.ts +23 -0
  142. package/src/lib/design/system/check-system.js +151 -0
  143. package/src/lib/design/system/check-system.js.map +1 -0
  144. package/src/lib/design/system/colour.d.ts +2 -0
  145. package/src/lib/design/system/colour.js +9 -0
  146. package/src/lib/design/system/colour.js.map +1 -0
  147. package/src/lib/design/system/comments/comment.d.ts +196 -0
  148. package/src/lib/design/system/comments/comment.js +332 -0
  149. package/src/lib/design/system/comments/comment.js.map +1 -0
  150. package/src/lib/design/system/comments/complete.d.ts +15 -0
  151. package/src/lib/design/system/comments/complete.js +63 -0
  152. package/src/lib/design/system/comments/complete.js.map +1 -0
  153. package/src/lib/design/system/comments/inbox.d.ts +49 -0
  154. package/src/lib/design/system/comments/inbox.js +100 -0
  155. package/src/lib/design/system/comments/inbox.js.map +1 -0
  156. package/src/lib/design/system/css-source.d.ts +12 -0
  157. package/src/lib/design/system/css-source.js +39 -0
  158. package/src/lib/design/system/css-source.js.map +1 -0
  159. package/src/lib/design/system/flows/flow.d.ts +66 -0
  160. package/src/lib/design/system/flows/flow.js +157 -0
  161. package/src/lib/design/system/flows/flow.js.map +1 -0
  162. package/src/lib/design/system/imports.d.ts +70 -0
  163. package/src/lib/design/system/imports.js +159 -0
  164. package/src/lib/design/system/imports.js.map +1 -0
  165. package/src/lib/design/system/kit.d.ts +4 -0
  166. package/src/lib/design/system/kit.js +51 -0
  167. package/src/lib/design/system/kit.js.map +1 -0
  168. package/src/lib/design/system/layers.d.ts +9 -0
  169. package/src/lib/design/system/layers.js +16 -0
  170. package/src/lib/design/system/layers.js.map +1 -0
  171. package/src/lib/design/system/list-system.d.ts +104 -0
  172. package/src/lib/design/system/list-system.js +212 -0
  173. package/src/lib/design/system/list-system.js.map +1 -0
  174. package/src/lib/design/system/notes/note.d.ts +53 -0
  175. package/src/lib/design/system/notes/note.js +116 -0
  176. package/src/lib/design/system/notes/note.js.map +1 -0
  177. package/src/lib/design/system/part-command.d.ts +7 -0
  178. package/src/lib/design/system/part-command.js +134 -0
  179. package/src/lib/design/system/part-command.js.map +1 -0
  180. package/src/lib/design/system/problem.d.ts +5 -0
  181. package/src/lib/design/system/problem.js +3 -0
  182. package/src/lib/design/system/problem.js.map +1 -0
  183. package/src/lib/design/system/product.d.ts +18 -0
  184. package/src/lib/design/system/product.js +35 -0
  185. package/src/lib/design/system/product.js.map +1 -0
  186. package/src/lib/design/system/render-check.d.ts +45 -0
  187. package/src/lib/design/system/render-check.js +427 -0
  188. package/src/lib/design/system/render-check.js.map +1 -0
  189. package/src/lib/design/system/resolve-product.d.ts +32 -0
  190. package/src/lib/design/system/resolve-product.js +62 -0
  191. package/src/lib/design/system/resolve-product.js.map +1 -0
  192. package/src/lib/design/system/rules/component-copy.d.ts +7 -0
  193. package/src/lib/design/system/rules/component-copy.js +53 -0
  194. package/src/lib/design/system/rules/component-copy.js.map +1 -0
  195. package/src/lib/design/system/rules/flow.d.ts +8 -0
  196. package/src/lib/design/system/rules/flow.js +60 -0
  197. package/src/lib/design/system/rules/flow.js.map +1 -0
  198. package/src/lib/design/system/rules/hard-coded-colour.d.ts +7 -0
  199. package/src/lib/design/system/rules/hard-coded-colour.js +27 -0
  200. package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -0
  201. package/src/lib/design/system/rules/interactions.d.ts +4 -0
  202. package/src/lib/design/system/rules/interactions.js +16 -0
  203. package/src/lib/design/system/rules/interactions.js.map +1 -0
  204. package/src/lib/design/system/rules/kit-outside-pages.d.ts +4 -0
  205. package/src/lib/design/system/rules/kit-outside-pages.js +14 -0
  206. package/src/lib/design/system/rules/kit-outside-pages.js.map +1 -0
  207. package/src/lib/design/system/rules/motion.d.ts +4 -0
  208. package/src/lib/design/system/rules/motion.js +13 -0
  209. package/src/lib/design/system/rules/motion.js.map +1 -0
  210. package/src/lib/design/system/rules/stale-comment.d.ts +8 -0
  211. package/src/lib/design/system/rules/stale-comment.js +51 -0
  212. package/src/lib/design/system/rules/stale-comment.js.map +1 -0
  213. package/src/lib/design/system/rules/stale-replace.d.ts +4 -0
  214. package/src/lib/design/system/rules/stale-replace.js +65 -0
  215. package/src/lib/design/system/rules/stale-replace.js.map +1 -0
  216. package/src/lib/design/system/rules/svg-asset.d.ts +6 -0
  217. package/src/lib/design/system/rules/svg-asset.js +30 -0
  218. package/src/lib/design/system/rules/svg-asset.js.map +1 -0
  219. package/src/lib/design/system/rules/token-selectors.d.ts +3 -0
  220. package/src/lib/design/system/rules/token-selectors.js +87 -0
  221. package/src/lib/design/system/rules/token-selectors.js.map +1 -0
  222. package/src/lib/design/system/rules/undefined-token.d.ts +8 -0
  223. package/src/lib/design/system/rules/undefined-token.js +103 -0
  224. package/src/lib/design/system/rules/undefined-token.js.map +1 -0
  225. package/src/lib/design/system/rules/unused-shared-export.d.ts +18 -0
  226. package/src/lib/design/system/rules/unused-shared-export.js +60 -0
  227. package/src/lib/design/system/rules/unused-shared-export.js.map +1 -0
  228. package/src/lib/design/system/rules/upward-dependency.d.ts +4 -0
  229. package/src/lib/design/system/rules/upward-dependency.js +17 -0
  230. package/src/lib/design/system/rules/upward-dependency.js.map +1 -0
  231. package/src/lib/design/system/rules/widths.d.ts +4 -0
  232. package/src/lib/design/system/rules/widths.js +14 -0
  233. package/src/lib/design/system/rules/widths.js.map +1 -0
  234. package/src/lib/design/system/sketch/baseline.d.ts +38 -0
  235. package/src/lib/design/system/sketch/baseline.js +66 -0
  236. package/src/lib/design/system/sketch/baseline.js.map +1 -0
  237. package/src/lib/design/system/sketch/check-format.d.ts +17 -0
  238. package/src/lib/design/system/sketch/check-format.js +56 -0
  239. package/src/lib/design/system/sketch/check-format.js.map +1 -0
  240. package/src/lib/design/system/sketch/check-sketches.d.ts +38 -0
  241. package/src/lib/design/system/sketch/check-sketches.js +104 -0
  242. package/src/lib/design/system/sketch/check-sketches.js.map +1 -0
  243. package/src/lib/design/system/sketch/cli-args.d.ts +26 -0
  244. package/src/lib/design/system/sketch/cli-args.js +63 -0
  245. package/src/lib/design/system/sketch/cli-args.js.map +1 -0
  246. package/src/lib/design/system/sketch/duplicate-class.d.ts +14 -0
  247. package/src/lib/design/system/sketch/duplicate-class.js +57 -0
  248. package/src/lib/design/system/sketch/duplicate-class.js.map +1 -0
  249. package/src/lib/design/system/sketch/merge-preview.d.ts +15 -0
  250. package/src/lib/design/system/sketch/merge-preview.js +43 -0
  251. package/src/lib/design/system/sketch/merge-preview.js.map +1 -0
  252. package/src/lib/design/system/sketch/merge-shared.d.ts +25 -0
  253. package/src/lib/design/system/sketch/merge-shared.js +53 -0
  254. package/src/lib/design/system/sketch/merge-shared.js.map +1 -0
  255. package/src/lib/design/system/sketch/merge.d.ts +31 -0
  256. package/src/lib/design/system/sketch/merge.js +145 -0
  257. package/src/lib/design/system/sketch/merge.js.map +1 -0
  258. package/src/lib/design/system/sketch/merged-parts.d.ts +59 -0
  259. package/src/lib/design/system/sketch/merged-parts.js +134 -0
  260. package/src/lib/design/system/sketch/merged-parts.js.map +1 -0
  261. package/src/lib/design/system/sketch/no-visible-change.d.ts +15 -0
  262. package/src/lib/design/system/sketch/no-visible-change.js +70 -0
  263. package/src/lib/design/system/sketch/no-visible-change.js.map +1 -0
  264. package/src/lib/design/system/sketch/overlay.d.ts +20 -0
  265. package/src/lib/design/system/sketch/overlay.js +38 -0
  266. package/src/lib/design/system/sketch/overlay.js.map +1 -0
  267. package/src/lib/design/system/sketch/part-definition.d.ts +31 -0
  268. package/src/lib/design/system/sketch/part-definition.js +157 -0
  269. package/src/lib/design/system/sketch/part-definition.js.map +1 -0
  270. package/src/lib/design/system/sketch/shared-class.d.ts +9 -0
  271. package/src/lib/design/system/sketch/shared-class.js +65 -0
  272. package/src/lib/design/system/sketch/shared-class.js.map +1 -0
  273. package/src/lib/design/system/sketch/sketch.d.ts +221 -0
  274. package/src/lib/design/system/sketch/sketch.js +481 -0
  275. package/src/lib/design/system/sketch/sketch.js.map +1 -0
  276. package/src/lib/design/system/sketch/unchanged-states.d.ts +23 -0
  277. package/src/lib/design/system/sketch/unchanged-states.js +144 -0
  278. package/src/lib/design/system/sketch/unchanged-states.js.map +1 -0
  279. package/src/lib/design/system/sketch/unused-files.d.ts +10 -0
  280. package/src/lib/design/system/sketch/unused-files.js +56 -0
  281. package/src/lib/design/system/sketch/unused-files.js.map +1 -0
  282. package/src/lib/design/system/system-command.d.ts +9 -0
  283. package/src/lib/design/system/system-command.js +56 -0
  284. package/src/lib/design/system/system-command.js.map +1 -0
  285. package/src/lib/design/system/system-modules.d.ts +58 -0
  286. package/src/lib/design/system/system-modules.js +189 -0
  287. package/src/lib/design/system/system-modules.js.map +1 -0
  288. package/src/lib/design/system/system-tsconfig.d.ts +26 -0
  289. package/src/lib/design/system/system-tsconfig.js +68 -0
  290. package/src/lib/design/system/system-tsconfig.js.map +1 -0
  291. package/src/lib/design/system/ts-source.d.ts +13 -0
  292. package/src/lib/design/system/ts-source.js +108 -0
  293. package/src/lib/design/system/ts-source.js.map +1 -0
  294. package/src/lib/design/system-use.js.map +1 -1
  295. package/src/lib/design/thumb.d.ts +48 -4
  296. package/src/lib/design/thumb.js +127 -37
  297. package/src/lib/design/thumb.js.map +1 -1
  298. package/src/lib/design/typecheck.d.ts +27 -0
  299. package/src/lib/design/typecheck.js +60 -0
  300. package/src/lib/design/typecheck.js.map +1 -0
  301. package/src/lib/design/variant-diff.d.ts +48 -0
  302. package/src/lib/design/variant-diff.js +77 -0
  303. package/src/lib/design/variant-diff.js.map +1 -0
  304. package/src/lib/design/vite-paths.d.ts +2 -0
  305. package/src/lib/design/vite-paths.js +10 -1
  306. package/src/lib/design/vite-paths.js.map +1 -1
  307. package/src/lib/doctor/doctor-command.js.map +1 -1
  308. package/src/lib/doctor/index.js.map +1 -1
  309. package/src/lib/index.js.map +1 -1
  310. package/src/lib/invocation.js +6 -2
  311. package/src/lib/invocation.js.map +1 -1
  312. package/src/lib/release.js.map +1 -1
  313. package/src/lib/update/agent-rules-sync.js.map +1 -1
  314. package/src/lib/update/agent-setup.js.map +1 -1
  315. package/src/lib/update/ai.js.map +1 -1
  316. package/src/lib/update/args.js.map +1 -1
  317. package/src/lib/update/available-migrations.js.map +1 -1
  318. package/src/lib/update/commits.js.map +1 -1
  319. package/src/lib/update/gitignore.js.map +1 -1
  320. package/src/lib/update/index.js.map +1 -1
  321. package/src/lib/update/migration-manifest.js.map +1 -1
  322. package/src/lib/update/migration-record.js.map +1 -1
  323. package/src/lib/update/migrations-command.js.map +1 -1
  324. package/src/lib/update/package-manager.d.ts +1 -1
  325. package/src/lib/update/package-manager.js.map +1 -1
  326. package/src/lib/update/packages.js.map +1 -1
  327. package/src/lib/update/pending.js.map +1 -1
  328. package/src/lib/update/plan.js.map +1 -1
  329. package/src/lib/update/registry.js.map +1 -1
  330. package/src/lib/update/run-migrations.js.map +1 -1
  331. package/src/lib/update/scan.js.map +1 -1
  332. package/src/lib/update/semver.js.map +1 -1
  333. package/src/lib/update/tasks.js.map +1 -1
  334. package/src/lib/update/update-command.js.map +1 -1
  335. package/src/lib/utils.js.map +1 -1
@@ -0,0 +1,18 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /**
4
+ * Each export of a `shared/` file that no file of `importers` imports, named or through the whole module.
5
+ * `resolveSpecifier` turns a specifier of an importing file into a path, or `null` for one that cannot reach `shared/`;
6
+ * `scope` names the importers in the message, as in "nothing in variant a imports it".
7
+ */
8
+ export declare const unusedExportsOf: (options: {
9
+ sharedDir: string;
10
+ importers: string[];
11
+ resolveSpecifier: (options: {
12
+ file: string;
13
+ specifier: string;
14
+ }) => string | null;
15
+ scope?: string;
16
+ }) => Problem[];
17
+ /** Each export of a file in a part's own `shared/` folder that no file of the part imports. */
18
+ export declare const unusedSharedExportsOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unusedSharedExportsOf = exports.unusedExportsOf = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const sketch_1 = require("../sketch/sketch");
7
+ const ts_source_1 = require("../ts-source");
8
+ const tsFilesIn = (dir) => (0, fs_1.existsSync)(dir)
9
+ ? (0, fs_1.readdirSync)(dir, { recursive: true })
10
+ .filter((path) => path.endsWith('.ts') && !path.endsWith('.d.ts'))
11
+ .map((path) => (0, path_1.resolve)(dir, path))
12
+ .sort()
13
+ : [];
14
+ const candidatesOf = (path) => [path, `${path}.ts`, (0, path_1.resolve)(path, 'index.ts')];
15
+ /**
16
+ * Each export of a `shared/` file that no file of `importers` imports, named or through the whole module.
17
+ * `resolveSpecifier` turns a specifier of an importing file into a path, or `null` for one that cannot reach `shared/`;
18
+ * `scope` names the importers in the message, as in "nothing in variant a imports it".
19
+ */
20
+ const unusedExportsOf = (options) => {
21
+ var _a, _b;
22
+ const { sharedDir, importers, resolveSpecifier, scope } = options;
23
+ const shared = tsFilesIn(sharedDir);
24
+ if (shared.length === 0)
25
+ return [];
26
+ const taken = new Map();
27
+ for (const file of new Set([...importers, ...shared]))
28
+ for (const [specifier, names] of (0, ts_source_1.importedNamesOf)((0, fs_1.readFileSync)(file, 'utf8'))) {
29
+ const path = resolveSpecifier({ file, specifier: (_a = specifier.split('?')[0]) !== null && _a !== void 0 ? _a : specifier });
30
+ const target = path === null ? undefined : candidatesOf(path).find((candidate) => shared.includes(candidate));
31
+ if (!target)
32
+ continue;
33
+ const known = (_b = taken.get(target)) !== null && _b !== void 0 ? _b : new Set();
34
+ names.forEach((name) => known.add(name));
35
+ taken.set(target, known);
36
+ }
37
+ return shared.flatMap((file) => {
38
+ var _a;
39
+ const used = (_a = taken.get(file)) !== null && _a !== void 0 ? _a : new Set();
40
+ return used.has('*')
41
+ ? []
42
+ : (0, ts_source_1.exportedNamesOf)((0, fs_1.readFileSync)(file, 'utf8'))
43
+ .filter((name) => !used.has(name))
44
+ .map((name) => ({
45
+ rule: 'UNUSED-EXPORT',
46
+ file,
47
+ message: `${name} is exported, but nothing ${scope ? `${scope} ` : ''}imports it - delete it or drop the export`,
48
+ }));
49
+ });
50
+ };
51
+ exports.unusedExportsOf = unusedExportsOf;
52
+ const relativeOf = ({ file, specifier }) => specifier.startsWith('.') ? (0, path_1.resolve)((0, path_1.dirname)(file), specifier) : null;
53
+ /** Each export of a file in a part's own `shared/` folder that no file of the part imports. */
54
+ const unusedSharedExportsOf = (product) => [...new Set(product.parts.map((part) => (0, path_1.dirname)(part.file)))].flatMap((folder) => (0, exports.unusedExportsOf)({
55
+ sharedDir: (0, path_1.resolve)(folder, sketch_1.SHARED_FOLDER),
56
+ importers: tsFilesIn(folder),
57
+ resolveSpecifier: relativeOf,
58
+ }));
59
+ exports.unusedSharedExportsOf = unusedSharedExportsOf;
60
+ //# sourceMappingURL=unused-shared-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unused-shared-export.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/unused-shared-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /** A part that imports a part of a layer its own layer may not use. */
4
+ export declare const upwardDependenciesOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.upwardDependenciesOf = void 0;
4
+ const imports_1 = require("../imports");
5
+ const layers_1 = require("../layers");
6
+ /** A part that imports a part of a layer its own layer may not use. */
7
+ const upwardDependenciesOf = (product) => product.parts.flatMap((part) => (0, imports_1.partDependenciesOf)(part).flatMap((dependency) => (0, layers_1.isLayer)(dependency.layer) && !(0, layers_1.mayUse)({ from: part.layer, to: dependency.layer })
8
+ ? [
9
+ {
10
+ rule: 'UPWARD-DEPENDENCY',
11
+ file: part.file,
12
+ message: `${part.layer} may use ${layers_1.LAYER_USES[part.layer].join(', ') || 'no other layer'}, not ${dependency.specifier}`,
13
+ },
14
+ ]
15
+ : []));
16
+ exports.upwardDependenciesOf = upwardDependenciesOf;
17
+ //# sourceMappingURL=upward-dependency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upward-dependency.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/upward-dependency.ts"],"names":[],"mappings":";;;AAAA,wCAAgD;AAChD,sCAAwD;AAIxD,uEAAuE;AAChE,MAAM,oBAAoB,GAAG,CAAC,OAAwB,EAAa,EAAE,CAC1E,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7B,IAAA,4BAAkB,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAC9C,IAAA,gBAAO,EAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAA,eAAM,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;IAC9E,CAAC,CAAC;QACE;YACE,IAAI,EAAE,mBAAmB;YACzB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,YAAY,mBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,SAAS,UAAU,CAAC,SAAS,EAAE;SACvH;KACF;IACH,CAAC,CAAC,EAAE,CACP,CACF,CAAC;AAbS,QAAA,oBAAoB,wBAa7B"}
@@ -0,0 +1,4 @@
1
+ import { Problem } from '../problem';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /** A part whose `widths` are not a non-empty list of positive numbers. */
4
+ export declare const badWidthsOf: (product: ResolvedProduct) => Problem[];
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.badWidthsOf = void 0;
4
+ const part_definition_1 = require("../sketch/part-definition");
5
+ /** A part whose `widths` are not a non-empty list of positive numbers. */
6
+ const badWidthsOf = (product) => product.parts
7
+ .filter((part) => (0, part_definition_1.hasBadWidths)(part.source))
8
+ .map((part) => ({
9
+ rule: 'WIDTHS',
10
+ file: part.file,
11
+ message: 'widths must be a non-empty list of positive numbers, for example widths: [280, 480, 720]',
12
+ }));
13
+ exports.badWidthsOf = badWidthsOf;
14
+ //# sourceMappingURL=widths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widths.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/rules/widths.ts"],"names":[],"mappings":";;;AAEA,+DAAyD;AAEzD,0EAA0E;AACnE,MAAM,WAAW,GAAG,CAAC,OAAwB,EAAa,EAAE,CACjE,OAAO,CAAC,KAAK;KACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,8BAAY,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACd,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,IAAI,CAAC,IAAI;IACf,OAAO,EAAE,0FAA0F;CACpG,CAAC,CAAC,CAAC;AAPK,QAAA,WAAW,eAOhB"}
@@ -0,0 +1,38 @@
1
+ import { PartFile } from '../product';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ export declare const FIXTURES_KEY = "fixtures.ts";
4
+ /**
5
+ * The content hash of a part folder together with the bytes of each `@assets/` file it imports, as `product` resolves
6
+ * them. A part that imports no asset hashes as its folder alone.
7
+ */
8
+ export declare const partHashOf: (options: {
9
+ product: Pick<ResolvedProduct, "dir" | "base">;
10
+ dir: string;
11
+ }) => string;
12
+ /**
13
+ * The content hash of each part the product resolves (its folder and the assets it imports), and of its fixture set,
14
+ * under the part key and `fixtures.ts`. A sketch keeps it to tell when a part it replaces changed in the product.
15
+ */
16
+ export declare const baselineOf: (product: ResolvedProduct) => Record<string, string>;
17
+ /**
18
+ * The parts, and `fixtures.ts`, a variant replaces whose state in the product differs from the
19
+ * sketch's baseline: changed, added or removed since the sketch was created.
20
+ */
21
+ export declare const conflictsOf: (options: {
22
+ product: ResolvedProduct;
23
+ baseline: Record<string, string>;
24
+ parts: PartFile[];
25
+ fixtures: boolean;
26
+ }) => string[];
27
+ /**
28
+ * The parts, and `fixtures.ts`, any variant of the sketch replaces that changed in the product since its
29
+ * baseline, or `[]` when it records none. `null` while the baseline is current and a merge needs no rebase.
30
+ */
31
+ export declare const staleBaselineOf: (options: {
32
+ product: ResolvedProduct;
33
+ sketch: {
34
+ dir: string;
35
+ variants: string[];
36
+ baseline?: Record<string, string>;
37
+ };
38
+ }) => string[] | null;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.staleBaselineOf = exports.conflictsOf = exports.baselineOf = exports.partHashOf = exports.FIXTURES_KEY = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const assets_1 = require("../assets");
8
+ const product_1 = require("../product");
9
+ const resolve_product_1 = require("../resolve-product");
10
+ exports.FIXTURES_KEY = 'fixtures.ts';
11
+ const hashOf = (paths) => {
12
+ var _a;
13
+ const hash = (0, crypto_1.createHash)('sha256');
14
+ for (const file of paths.files)
15
+ hash.update(`${(0, path_1.relative)(paths.root, file)}\0`).update((0, fs_1.readFileSync)(file));
16
+ for (const asset of (_a = paths.assets) !== null && _a !== void 0 ? _a : [])
17
+ hash.update(`${assets_1.ASSETS_PREFIX}${asset.path}\0`).update((0, fs_1.readFileSync)(asset.file));
18
+ return hash.digest('hex').slice(0, 16);
19
+ };
20
+ /**
21
+ * The content hash of a part folder together with the bytes of each `@assets/` file it imports, as `product` resolves
22
+ * them. A part that imports no asset hashes as its folder alone.
23
+ */
24
+ const partHashOf = (options) => {
25
+ const files = (0, assets_1.filesBelow)(options.dir);
26
+ return hashOf({ root: options.dir, files, assets: (0, assets_1.importedAssetsOf)({ product: options.product, files }) });
27
+ };
28
+ exports.partHashOf = partHashOf;
29
+ /**
30
+ * The content hash of each part the product resolves (its folder and the assets it imports), and of its fixture set,
31
+ * under the part key and `fixtures.ts`. A sketch keeps it to tell when a part it replaces changed in the product.
32
+ */
33
+ const baselineOf = (product) => (Object.assign(Object.assign({}, Object.fromEntries(product.parts.map((part) => [(0, resolve_product_1.partKeyOf)(part), (0, exports.partHashOf)({ product, dir: (0, path_1.dirname)(part.file) })]))), (product.fixtures
34
+ ? { [exports.FIXTURES_KEY]: hashOf({ root: (0, path_1.dirname)(product.fixtures), files: [product.fixtures] }) }
35
+ : {})));
36
+ exports.baselineOf = baselineOf;
37
+ /**
38
+ * The parts, and `fixtures.ts`, a variant replaces whose state in the product differs from the
39
+ * sketch's baseline: changed, added or removed since the sketch was created.
40
+ */
41
+ const conflictsOf = (options) => {
42
+ const { product, baseline, parts, fixtures } = options;
43
+ const now = (0, exports.baselineOf)(product);
44
+ return [...parts.map(resolve_product_1.partKeyOf), ...(fixtures ? [exports.FIXTURES_KEY] : [])].filter((key) => now[key] !== baseline[key]);
45
+ };
46
+ exports.conflictsOf = conflictsOf;
47
+ /**
48
+ * The parts, and `fixtures.ts`, any variant of the sketch replaces that changed in the product since its
49
+ * baseline, or `[]` when it records none. `null` while the baseline is current and a merge needs no rebase.
50
+ */
51
+ const staleBaselineOf = (options) => {
52
+ const { product, sketch } = options;
53
+ if (!sketch.baseline)
54
+ return [];
55
+ const dirs = sketch.variants.map((variant) => (0, path_1.resolve)(sketch.dir, variant));
56
+ const changed = (0, exports.conflictsOf)({
57
+ product,
58
+ baseline: sketch.baseline,
59
+ parts: dirs.flatMap((dir) => (0, product_1.partFilesOf)(dir).parts),
60
+ fixtures: dirs.some((dir) => (0, product_1.fixturesOf)(dir) !== null),
61
+ });
62
+ const unique = [...new Set(changed)];
63
+ return unique.length > 0 ? unique : null;
64
+ };
65
+ exports.staleBaselineOf = staleBaselineOf;
66
+ //# sourceMappingURL=baseline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/baseline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Problem } from '../problem';
2
+ import { Sketch } from './sketch';
3
+ /**
4
+ * The source files of a variant that the checkout's own Prettier would reformat. A checkout
5
+ * without Prettier has no format to hold a variant to, so it reports nothing.
6
+ */
7
+ export declare const formatProblemsOf: (options: {
8
+ target: string;
9
+ sketch: Sketch;
10
+ variant: string;
11
+ }) => Problem[];
12
+ /** Writes the variants, the `shared/` folder and `sketch.json` of a sketch in the checkout's Prettier format, when the checkout has Prettier. */
13
+ export declare const formatSketch: (options: {
14
+ target: string;
15
+ sketch: Sketch;
16
+ variants: string[];
17
+ }) => void;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatSketch = exports.formatProblemsOf = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const fs_1 = require("fs");
6
+ const path_1 = require("path");
7
+ const typecheck_1 = require("../../typecheck");
8
+ const sketch_1 = require("./sketch");
9
+ const FORMATTED = /\.(ts|css|html|json)$/u;
10
+ const filesOf = (dir) => (0, fs_1.readdirSync)(dir, { withFileTypes: true }).flatMap((entry) => entry.isDirectory() ? filesOf((0, path_1.join)(dir, entry.name)) : FORMATTED.test(entry.name) ? [(0, path_1.join)(dir, entry.name)] : []);
11
+ /**
12
+ * The source files of a variant that the checkout's own Prettier would reformat. A checkout
13
+ * without Prettier has no format to hold a variant to, so it reports nothing.
14
+ */
15
+ const formatProblemsOf = (options) => {
16
+ const { target, sketch, variant } = options;
17
+ const prettier = (0, typecheck_1.binaryOf)({ target, pkg: 'prettier', bin: 'prettier' });
18
+ if (!prettier)
19
+ return [];
20
+ const files = filesOf((0, sketch_1.variantDirOf)(sketch, variant));
21
+ if (files.length === 0)
22
+ return [];
23
+ const result = (0, child_process_1.spawnSync)(process.execPath, [prettier, '--list-different', ...files], {
24
+ cwd: target,
25
+ encoding: 'utf8',
26
+ });
27
+ if (result.status !== 1)
28
+ return [];
29
+ return result.stdout
30
+ .split('\n')
31
+ .filter((line) => line.trim() !== '')
32
+ .map((line) => {
33
+ const file = (0, path_1.resolve)(target, line.trim());
34
+ return {
35
+ rule: 'FORMAT',
36
+ file,
37
+ message: `is not formatted - run sketch check ${sketch.target} --fix`,
38
+ };
39
+ });
40
+ };
41
+ exports.formatProblemsOf = formatProblemsOf;
42
+ /** Writes the variants, the `shared/` folder and `sketch.json` of a sketch in the checkout's Prettier format, when the checkout has Prettier. */
43
+ const formatSketch = (options) => {
44
+ const { target, sketch, variants } = options;
45
+ const prettier = (0, typecheck_1.binaryOf)({ target, pkg: 'prettier', bin: 'prettier' });
46
+ if (!prettier)
47
+ return;
48
+ const dirs = [...variants.map((variant) => (0, sketch_1.variantDirOf)(sketch, variant)), (0, sketch_1.sharedDirOf)(sketch)].filter(fs_1.existsSync);
49
+ const files = [...dirs.flatMap(filesOf), (0, path_1.resolve)(sketch.dir, sketch_1.SKETCH_FILE)];
50
+ (0, child_process_1.spawnSync)(process.execPath, [prettier, '--write', '--log-level', 'warn', ...files], {
51
+ cwd: target,
52
+ encoding: 'utf8',
53
+ });
54
+ };
55
+ exports.formatSketch = formatSketch;
56
+ //# sourceMappingURL=check-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-format.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/check-format.ts"],"names":[],"mappings":";;;AAAA,iDAA0C;AAC1C,2BAA6C;AAC7C,+BAAqC;AACrC,+CAA2C;AAE3C,qCAA0E;AAE1E,MAAM,SAAS,GAAG,wBAAwB,CAAC;AAE3C,MAAM,OAAO,GAAG,CAAC,GAAW,EAAY,EAAE,CACxC,IAAA,gBAAW,EAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1D,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAA,WAAI,EAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACjH,CAAC;AAEJ;;;GAGG;AACI,MAAM,gBAAgB,GAAG,CAAC,OAA4D,EAAa,EAAE;IAC1G,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAA,oBAAQ,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IAExE,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAA,qBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAErD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElC,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC,EAAE;QACnF,GAAG,EAAE,MAAM;QACX,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,OAAO,MAAM,CAAC,MAAM;SACjB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;SACpC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,IAAI,GAAG,IAAA,cAAO,EAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE1C,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,OAAO,EAAE,uCAAuC,MAAM,CAAC,MAAM,QAAQ;SACtE,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AA7BW,QAAA,gBAAgB,oBA6B3B;AAEF,iJAAiJ;AAC1I,MAAM,YAAY,GAAG,CAAC,OAA+D,EAAE,EAAE;IAC9F,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,QAAQ,GAAG,IAAA,oBAAQ,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;IAExE,IAAI,CAAC,QAAQ;QAAE,OAAO;IAEtB,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAA,qBAAY,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,eAAU,CAAC,CAAC;IACnH,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAA,cAAO,EAAC,MAAM,CAAC,GAAG,EAAE,oBAAW,CAAC,CAAC,CAAC;IAE3E,IAAA,yBAAS,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE;QAClF,GAAG,EAAE,MAAM;QACX,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;AACL,CAAC,CAAC;AAbW,QAAA,YAAY,gBAavB"}
@@ -0,0 +1,38 @@
1
+ import { TypecheckResult } from '../../typecheck';
2
+ import { Problem } from '../problem';
3
+ import { ResolvedProduct } from '../resolve-product';
4
+ import { Sketch } from './sketch';
5
+ /** `problems` are the ones a variant brings in; `before` are the ones the product already has, which do not fail the variant. */
6
+ export type VariantProblems = {
7
+ sketch: Sketch;
8
+ variant: string;
9
+ problems: Problem[];
10
+ before: Problem[];
11
+ };
12
+ /** The rule problems of each variant of a sketch laid over the product, and the states it drops from a part. */
13
+ export declare const variantProblemsOf: (options: {
14
+ product: ResolvedProduct;
15
+ sketch: Sketch;
16
+ }) => VariantProblems[];
17
+ /** Warnings that do not fail a variant: a class two stylesheets of one part both define, a class of `shared/` the variant restyles, a file nothing imports. */
18
+ export declare const variantWarningsOf: (options: {
19
+ target: string;
20
+ product: ResolvedProduct;
21
+ sketch: Sketch;
22
+ variant: string;
23
+ }) => string[];
24
+ /**
25
+ * The rule problems of every variant of every open sketch of a product. A sketch folder that
26
+ * cannot be read is a `SKETCH` problem of its own.
27
+ */
28
+ export declare const openSketchProblemsOf: (product: ResolvedProduct) => {
29
+ unreadable: Problem[];
30
+ variants: VariantProblems[];
31
+ };
32
+ /** Runs `tsc` over one variant laid over the product, with a tsconfig of its own. */
33
+ export declare const typecheckVariant: (options: {
34
+ target: string;
35
+ product: ResolvedProduct;
36
+ sketch: Sketch;
37
+ variant: string;
38
+ }) => TypecheckResult;
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.typecheckVariant = exports.openSketchProblemsOf = exports.variantWarningsOf = exports.variantProblemsOf = void 0;
4
+ const check_system_1 = require("../check-system");
5
+ const path_1 = require("path");
6
+ const resolve_product_1 = require("../resolve-product");
7
+ const stale_comment_1 = require("../rules/stale-comment");
8
+ const system_tsconfig_1 = require("../system-tsconfig");
9
+ const duplicate_class_1 = require("./duplicate-class");
10
+ const overlay_1 = require("./overlay");
11
+ const shared_class_1 = require("./shared-class");
12
+ const unused_files_1 = require("./unused-files");
13
+ const part_definition_1 = require("./part-definition");
14
+ const sketch_1 = require("./sketch");
15
+ const droppedStatesOf = (options) => {
16
+ const { product, overlaid, allowed } = options;
17
+ return overlaid.parts
18
+ .filter((part) => overlaid.sketched.includes((0, resolve_product_1.partKeyOf)(part)))
19
+ .flatMap((part) => {
20
+ const own = product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === (0, resolve_product_1.partKeyOf)(part));
21
+ const before = own ? (0, part_definition_1.stateNamesOf)(own.source) : null;
22
+ const after = (0, part_definition_1.stateNamesOf)(part.source);
23
+ if (before === null || after === null)
24
+ return [];
25
+ const dropped = before.filter((state) => !after.includes(state) && !allowed.includes(state));
26
+ return dropped.length === 0
27
+ ? []
28
+ : [
29
+ {
30
+ rule: 'STATES',
31
+ file: part.file,
32
+ message: `drops the state${dropped.length === 1 ? '' : 's'} ${dropped.join(', ')} that ${(0, resolve_product_1.partKeyOf)(part)} has in ${product.name} - a variant keeps every state of the part`,
33
+ },
34
+ ];
35
+ });
36
+ };
37
+ /** The rule problems of each variant of a sketch laid over the product, and the states it drops from a part. */
38
+ const variantProblemsOf = (options) => {
39
+ const keyOf = (dir, problem) => `${problem.rule} ${(0, path_1.relative)(dir, problem.file)}: ${problem.message}`;
40
+ const had = new Set((0, check_system_1.ruleProblemsOf)(options.product).map((problem) => keyOf(options.product.dir, problem)));
41
+ return options.sketch.variants.map((variant) => {
42
+ var _a;
43
+ const overlaid = (0, overlay_1.overlaySketch)(Object.assign(Object.assign({}, options), { variant }));
44
+ const round = options.sketch.rounds.find((entry) => { var _a; return entry.key === ((_a = options.sketch.variantInfo[variant]) === null || _a === void 0 ? void 0 : _a.round); });
45
+ const variantDir = (0, sketch_1.variantDirOf)(options.sketch, variant);
46
+ const wasThere = (problem) => had.has(keyOf((0, path_1.relative)(variantDir, problem.file).startsWith('..') ? options.product.dir : variantDir, problem));
47
+ const found = (0, check_system_1.ruleProblemsOf)(overlaid);
48
+ const target = overlaid.parts.find((part) => (0, resolve_product_1.partKeyOf)(part) === options.sketch.target);
49
+ const metadataProblem = target && ((0, part_definition_1.withNote)(target.source, '') === null || (0, part_definition_1.withMadeBy)(target.source, ['author']) === null)
50
+ ? [
51
+ {
52
+ rule: 'SKETCH',
53
+ file: target.file,
54
+ message: `merge cannot write metadata to ${options.sketch.target} - define it with definePart({ ..., note: '...' }) in this file`,
55
+ },
56
+ ]
57
+ : [];
58
+ return {
59
+ sketch: options.sketch,
60
+ variant,
61
+ problems: [
62
+ ...found.filter((problem) => !wasThere(problem)),
63
+ ...metadataProblem,
64
+ ...droppedStatesOf({ product: options.product, overlaid, allowed: (_a = round === null || round === void 0 ? void 0 : round.drops) !== null && _a !== void 0 ? _a : [] }),
65
+ ],
66
+ before: found.filter(wasThere),
67
+ };
68
+ });
69
+ };
70
+ exports.variantProblemsOf = variantProblemsOf;
71
+ /** Warnings that do not fail a variant: a class two stylesheets of one part both define, a class of `shared/` the variant restyles, a file nothing imports. */
72
+ const variantWarningsOf = (options) => {
73
+ const overlaid = (0, overlay_1.overlaySketch)(options);
74
+ return [
75
+ ...(0, duplicate_class_1.duplicateClassWarningsOf)({ target: options.target, product: overlaid }),
76
+ ...(0, shared_class_1.sharedClassWarningsOf)({ target: options.target, product: overlaid }),
77
+ ...(0, unused_files_1.unusedFileWarningsOf)(options),
78
+ ...(0, stale_comment_1.goneSketchCommentWarningsOf)(options.product),
79
+ ];
80
+ };
81
+ exports.variantWarningsOf = variantWarningsOf;
82
+ /**
83
+ * The rule problems of every variant of every open sketch of a product. A sketch folder that
84
+ * cannot be read is a `SKETCH` problem of its own.
85
+ */
86
+ const openSketchProblemsOf = (product) => {
87
+ const sketches = (0, sketch_1.listSketches)({ productDir: product.dir, product: product.name });
88
+ return {
89
+ unreadable: sketches.flatMap((sketch) => typeof sketch === 'string' ? [{ rule: 'SKETCH', file: product.dir, message: sketch }] : []),
90
+ variants: sketches.flatMap((sketch) => (typeof sketch === 'string' ? [] : (0, exports.variantProblemsOf)({ product, sketch }))),
91
+ };
92
+ };
93
+ exports.openSketchProblemsOf = openSketchProblemsOf;
94
+ /** Runs `tsc` over one variant laid over the product, with a tsconfig of its own. */
95
+ const typecheckVariant = (options) => {
96
+ const { target, product, sketch, variant } = options;
97
+ const overlaid = (0, overlay_1.overlaySketch)({ product, sketch, variant });
98
+ return (0, system_tsconfig_1.typecheckProduct)({
99
+ target,
100
+ product: Object.assign(Object.assign({}, overlaid), { name: `${product.name}.sketch.${(0, sketch_1.sketchFolderOf)(sketch)}.${variant}` }),
101
+ });
102
+ };
103
+ exports.typecheckVariant = typecheckVariant;
104
+ //# sourceMappingURL=check-sketches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-sketches.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/check-sketches.ts"],"names":[],"mappings":";;;AACA,kDAAiD;AAEjD,+BAAgC;AAChC,wDAAgE;AAChE,0DAAqE;AACrE,wDAAsD;AACtD,uDAA6D;AAC7D,uCAA2D;AAC3D,iDAAuD;AACvD,iDAAsD;AACtD,uDAAuE;AACvE,qCAA8E;AAK9E,MAAM,eAAe,GAAG,CAAC,OAIxB,EAAa,EAAE;IACd,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAE/C,OAAO,QAAQ,CAAC,KAAK;SAClB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAA,2BAAS,EAAC,IAAI,CAAC,CAAC,CAAC;SAC7D,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAChB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,2BAAS,EAAC,SAAS,CAAC,KAAK,IAAA,2BAAS,EAAC,IAAI,CAAC,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAA,8BAAY,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,MAAM,KAAK,GAAG,IAAA,8BAAY,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAEjD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAE7F,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,kBAAkB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAA,2BAAS,EAAC,IAAI,CAAC,WAAW,OAAO,CAAC,IAAI,4CAA4C;iBAC5K;aACF,CAAC;IACR,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,gHAAgH;AACzG,MAAM,iBAAiB,GAAG,CAAC,OAAqD,EAAqB,EAAE;IAC5G,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,OAAgB,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,IAAA,eAAQ,EAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;IACtH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAA,6BAAc,EAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAE3G,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;;QAC7C,MAAM,QAAQ,GAAG,IAAA,uBAAa,kCAAM,OAAO,KAAE,OAAO,IAAG,CAAC;QACxD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,WAAC,OAAA,KAAK,CAAC,GAAG,MAAK,MAAA,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,0CAAE,KAAK,CAAA,CAAA,EAAA,CAAC,CAAC;QAC9G,MAAM,UAAU,GAAG,IAAA,qBAAY,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,CAAC,OAAgB,EAAE,EAAE,CACpC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAA,eAAQ,EAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAClH,MAAM,KAAK,GAAG,IAAA,6BAAc,EAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,2BAAS,EAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxF,MAAM,eAAe,GACnB,MAAM,IAAI,CAAC,IAAA,0BAAQ,EAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,IAAA,4BAAU,EAAC,MAAM,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,KAAK,IAAI,CAAC;YAChG,CAAC,CAAC;gBACE;oBACE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,OAAO,EAAE,kCAAkC,OAAO,CAAC,MAAM,CAAC,MAAM,iEAAiE;iBAClI;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QAET,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO;YACP,QAAQ,EAAE;gBACR,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAChD,GAAG,eAAe;gBAClB,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,EAAE,EAAE,CAAC;aACxF;YACD,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,iBAAiB,qBAkC5B;AAEF,+JAA+J;AACxJ,MAAM,iBAAiB,GAAG,CAAC,OAKjC,EAAY,EAAE;IACb,MAAM,QAAQ,GAAG,IAAA,uBAAa,EAAC,OAAO,CAAC,CAAC;IAExC,OAAO;QACL,GAAG,IAAA,0CAAwB,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC1E,GAAG,IAAA,oCAAqB,EAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACvE,GAAG,IAAA,mCAAoB,EAAC,OAAO,CAAC;QAChC,GAAG,IAAA,2CAA2B,EAAC,OAAO,CAAC,OAAO,CAAC;KAChD,CAAC;AACJ,CAAC,CAAC;AAdW,QAAA,iBAAiB,qBAc5B;AAEF;;;GAGG;AACI,MAAM,oBAAoB,GAAG,CAAC,OAAwB,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,IAAA,qBAAY,EAAC,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAElF,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAa,EAAE,CACjD,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAC3F;QACD,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAA,yBAAiB,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;KACnH,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,oBAAoB,wBAS/B;AAEF,qFAAqF;AAC9E,MAAM,gBAAgB,GAAG,CAAC,OAKhC,EAAmB,EAAE;IACpB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAA,uBAAa,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAE7D,OAAO,IAAA,kCAAgB,EAAC;QACtB,MAAM;QACN,OAAO,kCAAO,QAAQ,KAAE,IAAI,EAAE,GAAG,OAAO,CAAC,IAAI,WAAW,IAAA,uBAAc,EAAC,MAAM,CAAC,IAAI,OAAO,EAAE,GAAE;KAC9F,CAAC,CAAC;AACL,CAAC,CAAC;AAbW,QAAA,gBAAgB,oBAa3B"}
@@ -0,0 +1,26 @@
1
+ import { DesignConfig } from '../../paths';
2
+ import { ResolvedProduct } from '../resolve-product';
3
+ /** `values` holds the last value of each flag, `repeated` every value in order. */
4
+ export type Args = {
5
+ positional: string[];
6
+ values: Record<string, string>;
7
+ repeated: Record<string, string[]>;
8
+ flags: Set<string>;
9
+ };
10
+ /** Splits an argument list into positionals, the flags that take a value, and switches. */
11
+ export declare const argsOf: (argv: string[], valueFlags: string[]) => Args | string;
12
+ /** The model id `--by` names, the agent that runs a write command; `null` when it is missing or blank. */
13
+ export declare const authorOf: (args: Args) => string | null;
14
+ export declare const NEEDS_AUTHOR = "needs --by <model id>: the exact model id the coordinator gave you, e.g. claude-opus-5-5. Never guess it.";
15
+ export declare const configOf: (target: string) => DesignConfig | string;
16
+ /** The products a command runs on: the one `--product` names, else every product of the config. */
17
+ export declare const productNamesOf: (options: {
18
+ config: DesignConfig;
19
+ asked: string | undefined;
20
+ }) => string[] | string;
21
+ /** The one product a command works on: the one `--product` names, or the only one the config declares. */
22
+ export declare const oneProductOf: (options: {
23
+ target: string;
24
+ config: DesignConfig;
25
+ asked: string | undefined;
26
+ }) => ResolvedProduct | string;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.oneProductOf = exports.productNamesOf = exports.configOf = exports.NEEDS_AUTHOR = exports.authorOf = exports.argsOf = void 0;
4
+ const paths_1 = require("../../paths");
5
+ const resolve_product_1 = require("../resolve-product");
6
+ /** Splits an argument list into positionals, the flags that take a value, and switches. */
7
+ const argsOf = (argv, valueFlags) => {
8
+ var _a, _b;
9
+ const args = { positional: [], values: {}, repeated: {}, flags: new Set() };
10
+ for (let index = 0; index < argv.length; index++) {
11
+ const arg = (_a = argv[index]) !== null && _a !== void 0 ? _a : '';
12
+ if (valueFlags.includes(arg)) {
13
+ const value = argv[index + 1];
14
+ if (value === undefined)
15
+ return `${arg} needs a value`;
16
+ args.values[arg] = value;
17
+ args.repeated[arg] = [...((_b = args.repeated[arg]) !== null && _b !== void 0 ? _b : []), value];
18
+ index++;
19
+ }
20
+ else if (arg.startsWith('--')) {
21
+ args.flags.add(arg);
22
+ }
23
+ else {
24
+ args.positional.push(arg);
25
+ }
26
+ }
27
+ return args;
28
+ };
29
+ exports.argsOf = argsOf;
30
+ /** The model id `--by` names, the agent that runs a write command; `null` when it is missing or blank. */
31
+ const authorOf = (args) => { var _a; return ((_a = args.values['--by']) === null || _a === void 0 ? void 0 : _a.trim()) || null; };
32
+ exports.authorOf = authorOf;
33
+ exports.NEEDS_AUTHOR = 'needs --by <model id>: the exact model id the coordinator gave you, e.g. claude-opus-5-5. Never guess it.';
34
+ const configOf = (target) => { var _a; return (_a = (0, paths_1.readConfig)(target)) !== null && _a !== void 0 ? _a : `design-explore: no config at ${(0, paths_1.configPathOf)(target)}`; };
35
+ exports.configOf = configOf;
36
+ const declaredOf = (config) => { var _a; return Object.keys((_a = config.products) !== null && _a !== void 0 ? _a : {}); };
37
+ /** The products a command runs on: the one `--product` names, else every product of the config. */
38
+ const productNamesOf = (options) => {
39
+ const declared = declaredOf(options.config);
40
+ if (options.asked === undefined)
41
+ return declared;
42
+ if (!declared.includes(options.asked))
43
+ return `NO PRODUCT "${options.asked}" - config.json declares ${declared.join(', ') || 'none'}.`;
44
+ return [options.asked];
45
+ };
46
+ exports.productNamesOf = productNamesOf;
47
+ /** The one product a command works on: the one `--product` names, or the only one the config declares. */
48
+ const oneProductOf = (options) => {
49
+ var _a;
50
+ const { target, config, asked } = options;
51
+ const declared = declaredOf(config);
52
+ const name = asked !== null && asked !== void 0 ? asked : (declared.length === 1 ? declared[0] : undefined);
53
+ if (name === undefined)
54
+ return declared.length > 1
55
+ ? `more than one product - pass --product <name>; config.json declares ${declared.join(', ')}.`
56
+ : `pass --product <name> - config.json declares none.`;
57
+ const entry = (_a = config.products) === null || _a === void 0 ? void 0 : _a[name];
58
+ if (!entry)
59
+ return `NO PRODUCT "${name}" - config.json declares ${declared.join(', ') || 'none'}.`;
60
+ return (0, resolve_product_1.resolveProduct)({ target, name, config: entry });
61
+ };
62
+ exports.oneProductOf = oneProductOf;
63
+ //# sourceMappingURL=cli-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../../../../../../../libs/cli/src/lib/design/system/sketch/cli-args.ts"],"names":[],"mappings":";;;AAAA,uCAAqE;AACrE,wDAAqE;AAUrE,2FAA2F;AACpF,MAAM,MAAM,GAAG,CAAC,IAAc,EAAE,UAAoB,EAAiB,EAAE;;IAC5E,MAAM,IAAI,GAAS,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;IAElF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,MAAA,IAAI,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC;QAE9B,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAE9B,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,GAAG,GAAG,gBAAgB,CAAC;YAEvD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,mCAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC5D,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAtBW,QAAA,MAAM,UAsBjB;AAEF,0GAA0G;AACnG,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,0CAAE,IAAI,EAAE,KAAI,IAAI,CAAA,EAAA,CAAC;AAA/D,QAAA,QAAQ,YAAuD;AAE/D,QAAA,YAAY,GACvB,2GAA2G,CAAC;AAEvG,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAyB,EAAE,WAChE,OAAA,MAAA,IAAA,kBAAU,EAAC,MAAM,CAAC,mCAAI,gCAAgC,IAAA,oBAAY,EAAC,MAAM,CAAC,EAAE,CAAA,EAAA,CAAC;AADlE,QAAA,QAAQ,YAC0D;AAE/E,MAAM,UAAU,GAAG,CAAC,MAAoB,EAAE,EAAE,WAAC,OAAA,MAAM,CAAC,IAAI,CAAC,MAAA,MAAM,CAAC,QAAQ,mCAAI,EAAE,CAAC,CAAA,EAAA,CAAC;AAEhF,mGAAmG;AAC5F,MAAM,cAAc,GAAG,CAAC,OAA4D,EAAqB,EAAE;IAChH,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QACnC,OAAO,eAAe,OAAO,CAAC,KAAK,4BAA4B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC;IAElG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC;AARW,QAAA,cAAc,kBAQzB;AAEF,0GAA0G;AACnG,MAAM,YAAY,GAAG,CAAC,OAI5B,EAA4B,EAAE;;IAC7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAExE,IAAI,IAAI,KAAK,SAAS;QACpB,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC;YACxB,CAAC,CAAC,uEAAuE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;YAC/F,CAAC,CAAC,oDAAoD,CAAC;IAE3D,MAAM,KAAK,GAAG,MAAA,MAAM,CAAC,QAAQ,0CAAG,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,KAAK;QAAE,OAAO,eAAe,IAAI,4BAA4B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC;IAEnG,OAAO,IAAA,gCAAc,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC;AAnBW,QAAA,YAAY,gBAmBvB"}
@@ -0,0 +1,14 @@
1
+ import { ResolvedPart } from '../resolve-product';
2
+ import { SketchedProduct } from './overlay';
3
+ export declare const stylesheetsOf: (options: {
4
+ product: SketchedProduct;
5
+ part: ResolvedPart;
6
+ }) => string[];
7
+ /**
8
+ * A warning for each class that two stylesheets loaded by one part of a variant both define as a
9
+ * selector of its own: the later one silently changes the earlier.
10
+ */
11
+ export declare const duplicateClassWarningsOf: (options: {
12
+ target: string;
13
+ product: SketchedProduct;
14
+ }) => string[];