@astryxdesign/cli 0.6.3 → 0.6.4-canary.06c8fa3

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 (670) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/README.md +121 -85
  3. package/api/blog/blog.doc.mjs +1 -0
  4. package/api/build/_adapter.d.mts +50 -0
  5. package/api/build/_adapter.mjs +60 -0
  6. package/api/build/build.doc.mjs +16 -9
  7. package/api/build/build.test.mjs +197 -8
  8. package/api/build/build.type.d.mts +91 -2
  9. package/api/build/build.type.mjs +52 -8
  10. package/api/build/help/help.d.mts +12 -5
  11. package/api/build/help/help.mjs +69 -6
  12. package/api/build/kit/kit.d.mts +4 -1
  13. package/api/build/kit/kit.mjs +165 -49
  14. package/api/build/kit/rank.d.mts +44 -0
  15. package/api/build/kit/rank.mjs +432 -0
  16. package/api/build/kit/rank.test.mjs +196 -0
  17. package/api/component/_adapter.d.mts +31 -12
  18. package/api/component/_adapter.mjs +79 -15
  19. package/api/component/component.d.mts +6 -3
  20. package/api/component/component.doc.mjs +36 -13
  21. package/api/component/component.mjs +339 -22
  22. package/api/component/component.test.mjs +38 -0
  23. package/api/component/component.type.d.mts +47 -11
  24. package/api/component/component.type.mjs +76 -24
  25. package/api/component/detail/blocks/blocks.d.mts +2 -1
  26. package/api/component/detail/blocks/blocks.mjs +4 -3
  27. package/api/component/list/list.d.mts +0 -5
  28. package/api/component/list/list.mjs +40 -11
  29. package/api/discover/_adapter.d.mts +114 -6
  30. package/api/discover/_adapter.mjs +372 -17
  31. package/api/discover/_adapter.test.mjs +215 -0
  32. package/api/discover/_catalog-view.d.mts +115 -0
  33. package/api/discover/_catalog-view.mjs +203 -0
  34. package/api/discover/_catalog-view.test.mjs +128 -0
  35. package/api/discover/detail/detail.d.mts +18 -6
  36. package/api/discover/detail/detail.mjs +67 -13
  37. package/api/discover/detail/detail.test.mjs +85 -0
  38. package/api/discover/detail/item/item.d.mts +26 -0
  39. package/api/discover/detail/item/item.mjs +78 -0
  40. package/api/discover/detail/item/item.test.mjs +73 -0
  41. package/api/discover/discover.d.mts +3 -9
  42. package/api/discover/discover.doc.mjs +62 -18
  43. package/api/discover/discover.mjs +220 -36
  44. package/api/discover/discover.test.mjs +11 -2
  45. package/api/discover/discover.type.d.mts +150 -11
  46. package/api/discover/discover.type.mjs +107 -17
  47. package/api/discover/list/list.d.mts +20 -6
  48. package/api/discover/list/list.mjs +45 -12
  49. package/api/discover/list/list.test.mjs +46 -0
  50. package/api/discover/search/search.d.mts +18 -16
  51. package/api/discover/search/search.mjs +102 -56
  52. package/api/discover/search/search.test.mjs +144 -10
  53. package/api/docs/_adapter.d.mts +272 -41
  54. package/api/docs/_adapter.mjs +985 -108
  55. package/api/docs/compiled-topics.test.mjs +78 -0
  56. package/api/docs/detail/detail.mjs +22 -63
  57. package/api/docs/detail/section/section.d.mts +1 -1
  58. package/api/docs/detail/section/section.mjs +54 -19
  59. package/api/docs/detail/section/section.test.mjs +50 -0
  60. package/api/docs/docs.d.mts +10 -3
  61. package/api/docs/docs.doc.mjs +55 -16
  62. package/api/docs/docs.mjs +53 -10
  63. package/api/docs/docs.test.mjs +166 -4
  64. package/api/docs/docs.type.d.mts +221 -5
  65. package/api/docs/docs.type.mjs +153 -11
  66. package/api/docs/index/index.d.mts +18 -0
  67. package/api/docs/index/index.mjs +40 -0
  68. package/api/docs/index/index.test.mjs +62 -0
  69. package/api/docs/integration-tree.test.mjs +555 -0
  70. package/api/docs/integrationDocs.test.mjs +114 -8
  71. package/api/docs/list/list.mjs +28 -12
  72. package/api/docs/node/node.d.mts +43 -0
  73. package/api/docs/node/node.mjs +192 -0
  74. package/api/docs/reference-blocks.test.mjs +406 -0
  75. package/api/doctor/doctor.d.mts +104 -1
  76. package/api/doctor/doctor.doc.mjs +1 -0
  77. package/api/doctor/doctor.mjs +635 -7
  78. package/api/doctor/doctor.test.mjs +732 -11
  79. package/api/gap-report/gap-report.doc.mjs +8 -4
  80. package/api/hook/_adapter.mjs +19 -5
  81. package/api/hook/hook.doc.mjs +1 -0
  82. package/api/hook/hook.type.d.mts +3 -3
  83. package/api/hook/hook.type.mjs +11 -11
  84. package/api/hook/list/list.d.mts +2 -2
  85. package/api/hook/list/list.mjs +69 -17
  86. package/api/index.d.mts +2 -3
  87. package/api/index.mjs +5 -4
  88. package/api/init/init.doc.mjs +6 -1
  89. package/api/init/init.test.mjs +41 -1
  90. package/api/init/remove/remove.mjs +1 -1
  91. package/api/init/run/run.mjs +20 -10
  92. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  93. package/api/integration/add-contribution.d.mts +2 -1
  94. package/api/integration/add-contribution.mjs +130 -15
  95. package/api/integration/add-contribution.test.mjs +258 -7
  96. package/api/integration/add-helpers.d.mts +5 -2
  97. package/api/integration/add-helpers.mjs +36 -9
  98. package/api/integration/add-theme.mjs +34 -64
  99. package/api/integration/add-theme.test.mjs +105 -21
  100. package/api/integration/authoring-checks.mjs +138 -28
  101. package/api/integration/authoring-checks.test.mjs +179 -7
  102. package/api/integration/authoring-checks.type.mjs +6 -1
  103. package/api/integration/integration-authoring.type.d.mts +3 -1
  104. package/api/integration/integration-authoring.type.mjs +2 -0
  105. package/api/integration/integration-block-exports.test.mjs +10 -6
  106. package/api/integration/integrationAdd.doc.mjs +14 -4
  107. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  108. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  109. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  110. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  111. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  112. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  113. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  114. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  115. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  116. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  117. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  118. package/api/integration/pack-check.lifecycle-output.test.mjs +105 -0
  119. package/api/integration/pack-check.mjs +111 -10
  120. package/api/integration/pack-check.test.mjs +387 -47
  121. package/api/integration/pack-check.type.d.mts +26 -2
  122. package/api/integration/pack-check.type.mjs +14 -1
  123. package/api/integration/summarizeIssues.doc.mjs +1 -0
  124. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  125. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  126. package/api/integration/validate-integration.mjs +52 -102
  127. package/api/integration/validate-integration.test.mjs +179 -26
  128. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  129. package/api/integration/validateIntegration.doc.mjs +3 -2
  130. package/api/json/assertResponse.doc.mjs +1 -0
  131. package/api/json/envelope-types.test.mjs +76 -0
  132. package/api/json/index.ts +2 -1
  133. package/api/json/isError.doc.mjs +1 -0
  134. package/api/json/parseResponse.doc.mjs +3 -2
  135. package/api/search/search-return-type.test.mjs +54 -0
  136. package/api/search/search.d.mts +62 -11
  137. package/api/search/search.doc.mjs +8 -2
  138. package/api/search/search.mjs +471 -83
  139. package/api/search/search.test.mjs +142 -1
  140. package/api/search/search.type.d.mts +15 -3
  141. package/api/search/search.type.mjs +5 -2
  142. package/api/swizzle/copy/copy.mjs +28 -11
  143. package/api/swizzle/swizzle.doc.mjs +2 -1
  144. package/api/swizzle/swizzle.type.d.mts +2 -2
  145. package/api/swizzle/swizzle.type.mjs +2 -2
  146. package/api/template/copy/copy.mjs +17 -23
  147. package/api/template/copy/copy.test.mjs +17 -0
  148. package/api/template/list/list.mjs +1 -0
  149. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  150. package/api/template/template-integration.test.mjs +1008 -3
  151. package/api/template/template-suffix.test.mjs +41 -21
  152. package/api/template/template.d.mts +1 -1
  153. package/api/template/template.doc.mjs +30 -8
  154. package/api/template/template.mjs +46 -9
  155. package/api/template/template.type.d.mts +12 -14
  156. package/api/template/template.type.mjs +15 -14
  157. package/api/theme/_adapter.d.mts +2 -3
  158. package/api/theme/_adapter.mjs +4 -5
  159. package/api/theme/add/add.binary.test.mjs +84 -0
  160. package/api/theme/add/add.mjs +31 -22
  161. package/api/theme/add/add.rollback.test.mjs +158 -0
  162. package/api/theme/add/add.staging.test.mjs +83 -0
  163. package/api/theme/add/add.test.mjs +14 -1
  164. package/api/theme/build/build.family.test.mjs +7 -12
  165. package/api/theme/build/build.mjs +140 -59
  166. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  167. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  168. package/api/theme/build/build.rollback.test.mjs +148 -0
  169. package/api/theme/build/build.test.mjs +127 -0
  170. package/api/theme/build/font-warning.mjs +3 -3
  171. package/api/theme/build/font-warning.test.mjs +5 -2
  172. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  173. package/api/theme/integration-themes.test.mjs +39 -28
  174. package/api/theme/list/list.test.mjs +19 -20
  175. package/api/theme/listThemes.doc.mjs +6 -5
  176. package/api/theme/palette/generate/generate.mjs +8 -3
  177. package/api/theme/palette/generate/generate.test.mjs +96 -0
  178. package/api/theme/palette/generate/generator.d.mts +10 -13
  179. package/api/theme/palette/generate/generator.mjs +15 -4
  180. package/api/theme/palette/generate/generator.test.mjs +10 -0
  181. package/api/theme/template/template.mjs +11 -2
  182. package/api/theme/template/template.test.mjs +20 -0
  183. package/api/theme/theme.type.d.mts +170 -11
  184. package/api/theme/theme.type.mjs +94 -27
  185. package/api/theme/themeAdd.doc.mjs +4 -3
  186. package/api/theme/themeBuild.doc.mjs +8 -4
  187. package/api/theme/themeList.doc.mjs +6 -3
  188. package/api/theme/themeListAvailable.doc.mjs +5 -3
  189. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  190. package/api/theme/themeTargets.doc.mjs +1 -0
  191. package/api/theme/themeTemplate.doc.mjs +6 -2
  192. package/api/upgrade/_adapter.d.mts +32 -5
  193. package/api/upgrade/_adapter.mjs +139 -22
  194. package/api/upgrade/list/list.mjs +2 -1
  195. package/api/upgrade/list/list.test.mjs +73 -0
  196. package/api/upgrade/project-context.test.mjs +272 -0
  197. package/api/upgrade/provider-agreement.test.mjs +152 -0
  198. package/api/upgrade/run/files-changed.test.mjs +111 -0
  199. package/api/upgrade/run/run.mjs +359 -60
  200. package/api/upgrade/status/status.mjs +2 -2
  201. package/api/upgrade/upgrade.doc.mjs +12 -5
  202. package/api/upgrade/upgrade.type.d.mts +43 -5
  203. package/api/upgrade/upgrade.type.mjs +29 -13
  204. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  205. package/assets/codemods/__tests__/runner.test.mjs +332 -8
  206. package/assets/codemods/file-count.test.mjs +163 -0
  207. package/assets/codemods/integration-discovery.mjs +48 -4
  208. package/assets/codemods/integration-discovery.test.mjs +73 -0
  209. package/assets/codemods/integration-runner.mjs +59 -7
  210. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  211. package/assets/codemods/registry.mjs +1 -0
  212. package/assets/codemods/run-codemod.mjs +177 -34
  213. package/assets/codemods/runner.mjs +353 -104
  214. package/assets/codemods/term-log.mjs +32 -8
  215. package/assets/codemods/term-log.test.mjs +19 -1
  216. package/assets/codemods/transform-prop.mjs +109 -0
  217. package/assets/codemods/transform-prop.test.mjs +95 -0
  218. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  219. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  220. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  221. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  222. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  223. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  224. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  225. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  226. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  227. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  228. package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
  229. package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
  230. package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
  231. package/assets/docs/README.md +9 -0
  232. package/assets/docs/authoring.doc.mjs +14 -0
  233. package/assets/docs/getting-started.doc.mjs +2 -2
  234. package/assets/docs/internationalization.doc.mjs +7 -5
  235. package/assets/docs/layout.doc.dense.mjs +2 -2
  236. package/assets/docs/layout.doc.mjs +1 -1
  237. package/assets/docs/principles.doc.mjs +6 -6
  238. package/assets/docs/styling-libraries.doc.mjs +4 -4
  239. package/assets/docs/styling.doc.mjs +4 -4
  240. package/assets/docs/theme.doc.mjs +5 -5
  241. package/assets/docs/tokens.doc.mjs +1 -1
  242. package/assets/docs/tree/api.doc.mjs +30 -0
  243. package/assets/docs/tree/cli.doc.mjs +23 -0
  244. package/assets/docs/tree/commands.doc.mjs +25 -0
  245. package/assets/docs/tree/component-lookups.doc.mjs +149 -0
  246. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +144 -26
  247. package/assets/docs/tree/integrations.test.mjs +62 -0
  248. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  249. package/assets/docs/working-with-ai.doc.mjs +4 -4
  250. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  251. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  252. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  253. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  254. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  255. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  256. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  257. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  258. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  259. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  260. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  261. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  262. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  263. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  264. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  265. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  266. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  267. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  268. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  269. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  270. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  271. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  272. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  273. package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
  274. package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
  275. package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
  276. package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
  277. package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
  278. package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
  279. package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
  280. package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
  281. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
  282. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
  283. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  284. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  285. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  286. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  287. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  288. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  289. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  290. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  291. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  292. package/authoring/_shared/contract.ts +22 -0
  293. package/authoring/codemod/codemod.doc.mjs +7 -2
  294. package/authoring/codemod/parse.d.mts +8 -8
  295. package/authoring/codemod/parse.mjs +8 -6
  296. package/authoring/codemod/type.ts +12 -0
  297. package/authoring/config/config.doc.mjs +11 -3
  298. package/authoring/config/debug-composition.test.mjs +92 -0
  299. package/authoring/config/parse.d.mts +15 -13
  300. package/authoring/config/parse.mjs +27 -8
  301. package/authoring/config/parse.test.mjs +8 -0
  302. package/authoring/config/type.ts +31 -8
  303. package/authoring/debug/debug.doc.d.mts +11 -0
  304. package/authoring/debug/debug.doc.mjs +182 -0
  305. package/authoring/debug/parse.d.mts +8 -8
  306. package/authoring/debug/parse.mjs +3 -3
  307. package/authoring/discover/discover.doc.d.mts +13 -0
  308. package/authoring/discover/discover.doc.mjs +138 -0
  309. package/authoring/discover/parse.d.mts +24 -0
  310. package/authoring/discover/parse.mjs +128 -0
  311. package/authoring/discover/parse.test.mjs +124 -0
  312. package/authoring/discover/type.ts +87 -0
  313. package/authoring/doctypes/_schema.d.mts +790 -23
  314. package/authoring/doctypes/_schema.mjs +543 -39
  315. package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
  316. package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
  317. package/authoring/doctypes/base/type.ts +41 -0
  318. package/authoring/doctypes/command/command.doc.mjs +5 -4
  319. package/authoring/doctypes/command/parse.d.mts +2 -2
  320. package/authoring/doctypes/command/parse.mjs +1 -1
  321. package/authoring/doctypes/command/type.ts +6 -5
  322. package/authoring/doctypes/component/component.doc.mjs +6 -3
  323. package/authoring/doctypes/component/parse.d.mts +2 -2
  324. package/authoring/doctypes/component/parse.mjs +1 -1
  325. package/authoring/doctypes/component/type.ts +6 -5
  326. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  327. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  328. package/authoring/doctypes/enum/parse.d.mts +2 -2
  329. package/authoring/doctypes/enum/parse.mjs +1 -1
  330. package/authoring/doctypes/enum/type.ts +4 -2
  331. package/authoring/doctypes/function/function.doc.mjs +7 -2
  332. package/authoring/doctypes/function/parse.d.mts +2 -2
  333. package/authoring/doctypes/function/parse.mjs +1 -1
  334. package/authoring/doctypes/function/type.ts +9 -4
  335. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  336. package/authoring/doctypes/hook/parse.d.mts +2 -2
  337. package/authoring/doctypes/hook/parse.mjs +1 -1
  338. package/authoring/doctypes/hook/type.ts +5 -4
  339. package/authoring/doctypes/legacy.d.mts +8 -6
  340. package/authoring/doctypes/legacy.mjs +5 -4
  341. package/authoring/doctypes/load-contract.test.mjs +233 -0
  342. package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
  343. package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
  344. package/authoring/doctypes/namespace/parse.d.mts +12 -0
  345. package/authoring/doctypes/namespace/parse.mjs +25 -0
  346. package/authoring/doctypes/namespace/parse.test.mjs +163 -0
  347. package/authoring/doctypes/namespace/type.ts +74 -0
  348. package/authoring/doctypes/parse.d.mts +22 -18
  349. package/authoring/doctypes/parse.mjs +22 -11
  350. package/authoring/doctypes/parse.test.mjs +77 -3
  351. package/authoring/doctypes/reference/parse.d.mts +2 -2
  352. package/authoring/doctypes/reference/parse.mjs +8 -5
  353. package/authoring/doctypes/reference/reference.doc.mjs +48 -6
  354. package/authoring/doctypes/reference/type.ts +70 -7
  355. package/authoring/doctypes/schema/parse.d.mts +2 -2
  356. package/authoring/doctypes/schema/parse.mjs +1 -1
  357. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  358. package/authoring/doctypes/schema/type.ts +4 -4
  359. package/authoring/doctypes/template/parse.d.mts +94 -1
  360. package/authoring/doctypes/template/parse.mjs +40 -2
  361. package/authoring/doctypes/template/parse.test.mjs +26 -2
  362. package/authoring/doctypes/template/template.doc.mjs +13 -3
  363. package/authoring/doctypes/template/type.ts +13 -2
  364. package/authoring/doctypes/theme/parse.d.mts +35 -0
  365. package/authoring/doctypes/theme/parse.mjs +76 -0
  366. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  367. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  368. package/authoring/doctypes/theme/type.ts +42 -0
  369. package/authoring/doctypes/types.ts +12 -10
  370. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  371. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  372. package/authoring/gap-report/parse.d.mts +10 -10
  373. package/authoring/gap-report/parse.mjs +6 -6
  374. package/authoring/gap-report/type.ts +1 -1
  375. package/authoring/identity/identity.doc.d.mts +9 -0
  376. package/authoring/identity/identity.doc.mjs +61 -0
  377. package/authoring/identity/type.ts +132 -0
  378. package/authoring/index.d.mts +3 -0
  379. package/authoring/index.d.ts +62 -17
  380. package/authoring/index.mjs +4 -1
  381. package/authoring/integration/integration.doc.mjs +15 -8
  382. package/authoring/integration/parse.d.mts +2 -2
  383. package/authoring/integration/parse.mjs +1 -1
  384. package/authoring/integration/parse.test.mjs +10 -1
  385. package/authoring/integration/schema.d.mts +6 -4
  386. package/authoring/integration/schema.mjs +9 -3
  387. package/authoring/integration/type.ts +19 -8
  388. package/authoring/shadcn/receipt.d.mts +6 -6
  389. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  390. package/clients/cli/command-load-failure.test.mjs +83 -0
  391. package/clients/cli/command-result-coverage.test.mjs +7 -7
  392. package/clients/cli/commands/blog.doc.mjs +1 -1
  393. package/clients/cli/commands/blog.mjs +23 -8
  394. package/clients/cli/commands/blog.test.mjs +42 -1
  395. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  396. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  397. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  398. package/clients/cli/commands/build-theme.mjs +16 -50
  399. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  400. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  401. package/clients/cli/commands/build.doc.mjs +16 -8
  402. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  403. package/clients/cli/commands/build.mjs +137 -114
  404. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  405. package/clients/cli/commands/build.text-fields.test.mjs +81 -0
  406. package/clients/cli/commands/component/index.mjs +153 -61
  407. package/clients/cli/commands/component-batch.test.mjs +341 -0
  408. package/clients/cli/commands/component-ownership.test.mjs +92 -3
  409. package/clients/cli/commands/component-package.test.mjs +46 -0
  410. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  411. package/clients/cli/commands/component.doc.mjs +24 -7
  412. package/clients/cli/commands/component.test.mjs +19 -0
  413. package/clients/cli/commands/debug-result-summary.test.mjs +2 -2
  414. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  415. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  416. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  417. package/clients/cli/commands/discover.doc.mjs +55 -9
  418. package/clients/cli/commands/discover.mjs +393 -118
  419. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  420. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  421. package/clients/cli/commands/docs.doc.mjs +28 -6
  422. package/clients/cli/commands/docs.mjs +240 -26
  423. package/clients/cli/commands/docs.test.mjs +222 -1
  424. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  425. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  426. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  427. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  428. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  429. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  430. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  431. package/clients/cli/commands/doctor.doc.mjs +1 -1
  432. package/clients/cli/commands/doctor.mjs +59 -32
  433. package/clients/cli/commands/doctor.test.mjs +42 -0
  434. package/clients/cli/commands/gap-report.doc.mjs +17 -6
  435. package/clients/cli/commands/gap-report.test.mjs +72 -0
  436. package/clients/cli/commands/hook/index.mjs +7 -17
  437. package/clients/cli/commands/hook.doc.mjs +1 -1
  438. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  439. package/clients/cli/commands/init.doc.mjs +20 -9
  440. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  441. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  442. package/clients/cli/commands/integration-add.doc.mjs +32 -6
  443. package/clients/cli/commands/integration-authoring.test.mjs +13 -9
  444. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  445. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  446. package/clients/cli/commands/integration.doc.mjs +1 -1
  447. package/clients/cli/commands/integration.mjs +1 -0
  448. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  449. package/clients/cli/commands/json-contract.test.mjs +33 -0
  450. package/clients/cli/commands/manifest.doc.mjs +1 -1
  451. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  452. package/clients/cli/commands/search.doc.mjs +7 -4
  453. package/clients/cli/commands/search.mjs +28 -9
  454. package/clients/cli/commands/search.test.mjs +75 -0
  455. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  456. package/clients/cli/commands/swizzle.doc.mjs +3 -2
  457. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  458. package/clients/cli/commands/template.doc.mjs +52 -13
  459. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  460. package/clients/cli/commands/template.mjs +4 -91
  461. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  462. package/clients/cli/commands/text-json-parity.test.mjs +702 -0
  463. package/clients/cli/commands/theme-add.doc.mjs +4 -3
  464. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  465. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  466. package/clients/cli/commands/theme-palette-generate.doc.mjs +9 -5
  467. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  468. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  469. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  470. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  471. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  472. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  473. package/clients/cli/commands/theme.doc.mjs +1 -1
  474. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  475. package/clients/cli/commands/upgrade.doc.mjs +22 -10
  476. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  477. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  478. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  479. package/clients/cli/commands/upgrade.mjs +29 -7
  480. package/clients/cli/formatters/index.mjs +164 -1
  481. package/clients/cli/formatters/index.test.mjs +97 -0
  482. package/clients/cli/index.mjs +21 -34
  483. package/clients/cli/latest-version-env.test.mjs +50 -0
  484. package/clients/cli/lib/cli-error.test.mjs +7 -0
  485. package/clients/cli/lib/component-format.mjs +9 -9
  486. package/clients/cli/lib/component-format.test.mjs +1 -1
  487. package/clients/cli/lib/define-command.mjs +32 -6
  488. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  489. package/clients/cli/lib/exit-codes.test.mjs +90 -0
  490. package/clients/cli/lib/hook-format.mjs +19 -10
  491. package/clients/cli/lib/json-shim.mjs +62 -16
  492. package/clients/cli/lib/json-shim.test.mjs +69 -0
  493. package/clients/cli/lib/manifest.d.ts +2 -0
  494. package/clients/cli/lib/manifest.mjs +39 -10
  495. package/clients/cli/lib/manifest.test.mjs +22 -2
  496. package/clients/cli/lib/parse-error-format.test.mjs +81 -0
  497. package/foundation/agent-docs/agent-docs.d.mts +7 -2
  498. package/foundation/agent-docs/agent-docs.mjs +82 -12
  499. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  500. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  501. package/foundation/config/integration-debug.test.mjs +28 -3
  502. package/foundation/config/project-themes.test.mjs +11 -19
  503. package/foundation/config/project.d.mts +20 -11
  504. package/foundation/config/project.mjs +263 -91
  505. package/foundation/config/project.test.mjs +270 -21
  506. package/foundation/discovery/authoring-self-docs.d.mts +87 -0
  507. package/foundation/discovery/authoring-self-docs.mjs +237 -0
  508. package/foundation/discovery/authoring-self-docs.test.mjs +170 -0
  509. package/foundation/discovery/authoring-surface.d.mts +74 -0
  510. package/foundation/discovery/authoring-surface.mjs +525 -0
  511. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  512. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  513. package/foundation/discovery/cli-self-docs.mjs +490 -0
  514. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  515. package/foundation/discovery/component-discovery.d.mts +39 -1
  516. package/foundation/discovery/component-discovery.mjs +50 -1
  517. package/foundation/discovery/component-loader.d.mts +35 -38
  518. package/foundation/discovery/component-loader.mjs +53 -222
  519. package/foundation/discovery/docs-discovery.d.mts +119 -11
  520. package/foundation/discovery/docs-discovery.mjs +423 -108
  521. package/foundation/discovery/docs-discovery.test.mjs +365 -20
  522. package/foundation/discovery/docs-output-budget.d.mts +28 -0
  523. package/foundation/discovery/docs-output-budget.mjs +50 -0
  524. package/foundation/discovery/docs-section-key.d.mts +116 -0
  525. package/foundation/discovery/docs-section-key.mjs +322 -0
  526. package/foundation/discovery/docs-section-key.test.mjs +246 -0
  527. package/foundation/discovery/template-adapter.d.mts +113 -11
  528. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  529. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  530. package/foundation/discovery/template-adapter.mjs +775 -84
  531. package/foundation/discovery/template-adapter.test.mjs +57 -0
  532. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  533. package/foundation/discovery/template-conflict-release.mjs +40 -0
  534. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  535. package/foundation/discovery/theme-discovery.d.mts +67 -7
  536. package/foundation/discovery/theme-discovery.mjs +916 -186
  537. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  538. package/foundation/discovery/theming-targets.test.mjs +4 -0
  539. package/foundation/doc-compiler/bundle.d.mts +47 -0
  540. package/foundation/doc-compiler/bundle.mjs +278 -0
  541. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  542. package/foundation/doc-compiler/compile.d.mts +343 -0
  543. package/foundation/doc-compiler/compile.mjs +558 -0
  544. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  545. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  546. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  547. package/foundation/doc-compiler/doc-loads.test.mjs +1630 -0
  548. package/foundation/doc-compiler/import.d.mts +24 -0
  549. package/foundation/doc-compiler/import.mjs +59 -0
  550. package/foundation/doc-compiler/inputs.d.mts +102 -0
  551. package/foundation/doc-compiler/inputs.mjs +291 -0
  552. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  553. package/foundation/doc-compiler/ir.d.mts +22 -0
  554. package/foundation/doc-compiler/ir.mjs +471 -0
  555. package/foundation/doc-compiler/lenses.d.mts +36 -0
  556. package/foundation/doc-compiler/lenses.mjs +173 -0
  557. package/foundation/doc-compiler/links.d.mts +162 -0
  558. package/foundation/doc-compiler/links.mjs +294 -0
  559. package/foundation/doc-compiler/links.test.mjs +192 -0
  560. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  561. package/foundation/doc-compiler/overlays.d.mts +37 -0
  562. package/foundation/doc-compiler/overlays.mjs +206 -0
  563. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  564. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  565. package/foundation/doc-compiler/read.d.mts +127 -0
  566. package/foundation/doc-compiler/read.mjs +325 -0
  567. package/foundation/doc-compiler/read.test.mjs +313 -0
  568. package/foundation/doc-compiler/source.d.mts +33 -0
  569. package/foundation/doc-compiler/source.mjs +128 -0
  570. package/foundation/doc-compiler/tree.d.mts +288 -0
  571. package/foundation/doc-compiler/tree.mjs +876 -0
  572. package/foundation/doc-compiler/tree.test.mjs +606 -0
  573. package/foundation/fs/file-protection.d.mts +33 -0
  574. package/foundation/fs/file-protection.mjs +825 -0
  575. package/foundation/fs/file-protection.test.mjs +250 -0
  576. package/foundation/fs/module-loader.d.mts +1 -0
  577. package/foundation/fs/module-loader.mjs +50 -1
  578. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  579. package/foundation/fs/path-safety.d.mts +3 -2
  580. package/foundation/fs/path-safety.mjs +49 -19
  581. package/foundation/fs/path-safety.test.mjs +50 -0
  582. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  583. package/foundation/identity/provider-identity.d.mts +90 -0
  584. package/foundation/identity/provider-identity.mjs +320 -0
  585. package/foundation/identity/provider-identity.test.mjs +254 -0
  586. package/foundation/identity/providers.d.mts +7 -0
  587. package/foundation/identity/providers.mjs +16 -0
  588. package/foundation/integrations/autolink.d.mts +58 -1
  589. package/foundation/integrations/autolink.mjs +143 -45
  590. package/foundation/integrations/autolink.test.mjs +1 -1
  591. package/foundation/integrations/cli-requirement.d.mts +45 -0
  592. package/foundation/integrations/cli-requirement.mjs +154 -0
  593. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  594. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  595. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  596. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  597. package/foundation/integrations/contribution-inventory.mjs +27 -24
  598. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  599. package/foundation/integrations/integration-warnings.d.mts +9 -2
  600. package/foundation/integrations/integration-warnings.mjs +52 -21
  601. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  602. package/foundation/integrations/integrations.d.mts +63 -3
  603. package/foundation/integrations/integrations.mjs +122 -9
  604. package/foundation/integrations/integrations.test.mjs +415 -1
  605. package/foundation/integrations/provider-conflicts.test.mjs +125 -0
  606. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  607. package/foundation/integrations/provider-resolution.d.mts +152 -0
  608. package/foundation/integrations/provider-resolution.mjs +576 -0
  609. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  610. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  611. package/foundation/integrations/theme-descriptor.mjs +44 -0
  612. package/foundation/integrations/validate-contributions.d.mts +2 -0
  613. package/foundation/integrations/validate-contributions.mjs +131 -29
  614. package/foundation/response/base.d.ts +8 -4
  615. package/foundation/response/batch.type.d.mts +33 -0
  616. package/foundation/response/batch.type.mjs +34 -0
  617. package/foundation/response/error-codes.d.mts +3 -1
  618. package/foundation/response/error-codes.d.ts +2 -0
  619. package/foundation/response/error-codes.doc.mjs +13 -4
  620. package/foundation/response/error-codes.mjs +8 -2
  621. package/foundation/response/error-codes.test.mjs +137 -10
  622. package/foundation/response/json-contract.test.mjs +57 -17
  623. package/foundation/response/json.d.mts +4 -2
  624. package/foundation/response/json.mjs +8 -10
  625. package/foundation/response/response-types.doc.d.mts +5 -1
  626. package/foundation/response/response-types.doc.mjs +46 -38
  627. package/foundation/response/response-types.doc.test.mjs +181 -0
  628. package/foundation/response/response.doc.mjs +1 -1
  629. package/foundation/text/string-utils.d.mts +8 -0
  630. package/foundation/text/string-utils.mjs +40 -10
  631. package/foundation/xle/browser.d.mts +3 -3
  632. package/foundation/xle/browser.mjs +3 -3
  633. package/foundation/xle/expand.d.mts +2 -0
  634. package/foundation/xle/expand.mjs +6 -5
  635. package/foundation/xle/expand.test.mjs +54 -0
  636. package/foundation/xle/parse.mjs +1 -1
  637. package/foundation/xle/print.mjs +2 -2
  638. package/foundation/xle/splice.mjs +1 -1
  639. package/foundation/xle/xle.test.mjs +13 -0
  640. package/package.json +10 -11
  641. package/api/layout/_adapter.d.mts +0 -34
  642. package/api/layout/_adapter.mjs +0 -133
  643. package/api/layout/check/check.d.mts +0 -16
  644. package/api/layout/check/check.mjs +0 -40
  645. package/api/layout/expand/expand.d.mts +0 -22
  646. package/api/layout/expand/expand.mjs +0 -153
  647. package/api/layout/grammar/grammar.d.mts +0 -13
  648. package/api/layout/grammar/grammar.mjs +0 -86
  649. package/api/layout/layout.d.mts +0 -6
  650. package/api/layout/layout.mjs +0 -17
  651. package/api/layout/layout.test.mjs +0 -297
  652. package/api/layout/layout.type.d.mts +0 -89
  653. package/api/layout/layout.type.mjs +0 -103
  654. package/api/layout/layoutCheck.doc.d.mts +0 -11
  655. package/api/layout/layoutCheck.doc.mjs +0 -84
  656. package/api/layout/layoutExpand.doc.d.mts +0 -11
  657. package/api/layout/layoutExpand.doc.mjs +0 -106
  658. package/api/layout/layoutGrammar.doc.d.mts +0 -11
  659. package/api/layout/layoutGrammar.doc.mjs +0 -56
  660. package/assets/templates/themes/manifest.json +0 -95
  661. package/clients/cli/commands/layout-check.doc.mjs +0 -54
  662. package/clients/cli/commands/layout-expand.doc.mjs +0 -66
  663. package/clients/cli/commands/layout-grammar.doc.mjs +0 -30
  664. package/clients/cli/commands/layout.doc.mjs +0 -34
  665. package/clients/cli/commands/layout.error-codes.test.mjs +0 -66
  666. package/clients/cli/commands/layout.exit-parity.test.mjs +0 -41
  667. package/clients/cli/commands/layout.mjs +0 -263
  668. package/clients/cli/lib/update-check.mjs +0 -83
  669. package/clients/cli/lib/update-check.test.mjs +0 -137
  670. package/clients/cli/update-hint-commands.test.mjs +0 -54
@@ -1,263 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file layout command — thin CLI wrapper around api/layout.mjs.
5
- *
6
- * Subcommands:
7
- * astryx layout expand "<expr>" [path] compressed expression → validated TSX
8
- * astryx layout check "<expr>" validate + echo both canonical surfaces
9
- * astryx layout grammar agent cheatsheet (alias table is branch-generated)
10
- *
11
- * The expression argument may also come from --file or stdin (`-`),
12
- * which is how multi-line outline (XLO) input usually arrives.
13
- *
14
- * The command surface (group + subcommand descriptions, args, flags) is sourced
15
- * from the colocated CommandDocs via `defineCommand`; this file supplies only the
16
- * actions.
17
- */
18
-
19
- import * as fs from 'node:fs';
20
- import * as path from 'node:path';
21
- import {jsonOut} from '../../../foundation/response/json.mjs';
22
- import {emit, section, text, list, record, code, WARN} from '../formatters/index.mjs';
23
- import {cliError} from '../lib/cli-error.mjs';
24
- import {ERROR_CODES} from '../../../foundation/response/error-codes.mjs';
25
- import {layoutExpand, layoutCheck, layoutGrammar} from '../../../api/layout/layout.mjs';
26
- import {defineCommand} from '../lib/define-command.mjs';
27
- import {doc as layoutGroup} from './layout.doc.mjs';
28
- import {doc as layoutExpandCommand} from './layout-expand.doc.mjs';
29
- import {doc as layoutCheckCommand} from './layout-check.doc.mjs';
30
- import {doc as layoutGrammarCommand} from './layout-grammar.doc.mjs';
31
- import {doc as layoutExpandFn} from '../../../api/layout/layoutExpand.doc.mjs';
32
- import {doc as layoutCheckFn} from '../../../api/layout/layoutCheck.doc.mjs';
33
- import {doc as layoutGrammarFn} from '../../../api/layout/layoutGrammar.doc.mjs';
34
- import {NO_RESULT_SET, resultSet} from '../../../foundation/debug/index.mjs';
35
-
36
- /**
37
- * The api layer's @returns for these functions widen the `type` discriminator
38
- * to `string`, so annotate the command-local result with the precise response
39
- * shapes from the colocated api/layout/layout.type.mjs so narrowing + jsonOut
40
- * typecheck.
41
- *
42
- * @typedef {import('../../../api/layout/layout.type.mjs').LayoutExpandResponse} LayoutExpandResponse
43
- * @typedef {import('../../../api/layout/layout.type.mjs').LayoutCheckResponse} LayoutCheckResponse
44
- * @typedef {import('../../../api/layout/layout.type.mjs').LayoutGrammarResponse} LayoutGrammarResponse
45
- */
46
-
47
- /**
48
- * @typedef {object} LayoutExpandOptions
49
- * @property {string} [file]
50
- * @property {'compact'|'outline'|'auto'} [form]
51
- * @property {string} [name]
52
- * @property {boolean} [loose]
53
- */
54
-
55
- /**
56
- * @typedef {object} LayoutCheckOptions
57
- * @property {string} [file]
58
- * @property {'compact'|'outline'|'auto'} [form]
59
- * @property {boolean} [loose]
60
- */
61
-
62
- /**
63
- * Resolve the expression from arg, --file, or stdin ('-').
64
- * @param {string} [expr]
65
- * @param {{file?: string}} [options]
66
- * @returns {Promise<string>}
67
- */
68
- async function readExpression(expr, options = {}) {
69
- if (options.file) {
70
- // Validate the file exists + is a regular file + is reasonably sized.
71
- // We intentionally do NOT confine the read path (the user running the CLI
72
- // controls --file; this is a read, not a write). The size cap prevents OOM
73
- // from infinite streams like /dev/zero.
74
- const filePath = path.resolve(process.cwd(), options.file);
75
- const stat = fs.statSync(filePath, {throwIfNoEntry: false});
76
- if (!stat || !stat.isFile()) {
77
- cliError(`File not found: ${options.file}`, {
78
- code: ERROR_CODES.ERR_FILE_NOT_FOUND,
79
- });
80
- }
81
- const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5 MB
82
- if (stat.size > MAX_FILE_SIZE) {
83
- cliError(
84
- `File "${options.file}" is too large (${(stat.size / 1024 / 1024).toFixed(1)} MB, max 5 MB)`,
85
- {code: ERROR_CODES.ERR_FILE_NOT_FOUND},
86
- );
87
- }
88
- try {
89
- return fs.readFileSync(filePath, 'utf-8');
90
- } catch (e) {
91
- const errno = /** @type {NodeJS.ErrnoException} */ (e);
92
- if (errno && errno.code === 'ENOENT') {
93
- // A --file pointing at a missing file is foreseeable — surface a
94
- // stable code, not the raw ENOENT errno (and no stack in human mode).
95
- cliError(`File not found: ${options.file}`, {
96
- code: ERROR_CODES.ERR_FILE_NOT_FOUND,
97
- });
98
- }
99
- throw e;
100
- }
101
- }
102
- if (expr === '-') {
103
- /** @type {Buffer[]} */
104
- const chunks = [];
105
- for await (const chunk of process.stdin) chunks.push(/** @type {Buffer} */ (chunk));
106
- return Buffer.concat(chunks).toString('utf-8');
107
- }
108
- return expr ?? '';
109
- }
110
-
111
- /**
112
- * @param {import('commander').Command} program
113
- */
114
- export function registerLayout(program) {
115
- const layoutCmd = defineCommand(program, layoutGroup);
116
-
117
- defineCommand(layoutCmd, layoutExpandCommand, {
118
- fn: layoutExpandFn,
119
- action: async (/** @type {string} */ expression, /** @type {string} */ targetPath, /** @type {LayoutExpandOptions} */ options) => {
120
- const json = program.opts().json || false;
121
- const source = await readExpression(expression, options);
122
- if (!source || source.trim() === '') {
123
- return cliError(
124
- 'No layout expression given — pass it as an argument, via --file, or on stdin',
125
- {code: ERROR_CODES.ERR_MISSING_ARGUMENT},
126
- );
127
- }
128
- /** @type {LayoutExpandResponse} */
129
- let result;
130
- try {
131
- result = /** @type {LayoutExpandResponse} */ (await layoutExpand(source, {
132
- targetPath,
133
- form: options.form,
134
- loose: options.loose || false,
135
- name: options.name,
136
- cwd: process.cwd(),
137
- }));
138
- } catch (e) {
139
- const err = /** @type {import('../../../api/error.mjs').AstryxError} */ (e);
140
- return cliError(err.message, {suggestions: err.suggestions || [], code: err.code});
141
- }
142
- // Expanding turns an expression into TSX — a transformation, not a
143
- // lookup. What it produced is in the output; there is no set to count.
144
- if (json) {
145
- jsonOut(result);
146
- return NO_RESULT_SET;
147
- }
148
-
149
- /** @type {import('../formatters/index.mjs').Block[]} */
150
- const out = [];
151
- if (result.data.warnings.length > 0) {
152
- out.push(text(result.data.warnings.map(w => `${WARN} ${w}`).join('\n')));
153
- }
154
- if (result.data.written) {
155
- out.push(
156
- text(`[ok] Expanded to ${result.data.written}`),
157
- record(
158
- {
159
- components: result.data.componentsUsed,
160
- todos:
161
- result.data.todos.length > 0
162
- ? `${result.data.todos.length} (search for "TODO(xle)")`
163
- : '',
164
- },
165
- {labels: {components: 'Components', todos: 'TODOs'}},
166
- ),
167
- );
168
- } else {
169
- // Raw expanded TSX (no target path) — preformatted, emitted verbatim.
170
- out.push(code(result.data.code));
171
- }
172
- emit(...out);
173
- return NO_RESULT_SET;
174
- },
175
- });
176
-
177
- defineCommand(layoutCmd, layoutCheckCommand, {
178
- fn: layoutCheckFn,
179
- action: async (/** @type {string} */ expression, /** @type {LayoutCheckOptions} */ options) => {
180
- const json = program.opts().json || false;
181
- const source = await readExpression(expression, options);
182
- if (!source || source.trim() === '') {
183
- return cliError(
184
- 'No layout expression given — pass it as an argument, via --file, or on stdin',
185
- {code: ERROR_CODES.ERR_MISSING_ARGUMENT},
186
- );
187
- }
188
- /** @type {LayoutCheckResponse} */
189
- let result;
190
- try {
191
- result = /** @type {LayoutCheckResponse} */ (await layoutCheck(source, {
192
- form: options.form,
193
- loose: options.loose || false,
194
- cwd: process.cwd(),
195
- }));
196
- } catch (e) {
197
- const err = /** @type {import('../../../api/error.mjs').AstryxError} */ (e);
198
- return cliError(err.message, {suggestions: err.suggestions || [], code: err.code});
199
- }
200
- // Exit code is the contract and must NOT depend on --json vs human: an
201
- // invalid (but parseable) layout exits 1 in BOTH modes so `layout check`
202
- // works as a CI gate / agent check without parsing stdout. Decide it
203
- // before the JSON return (parity with doctor integration validate).
204
- if (!result.data.valid) process.exitCode = 1;
205
-
206
- // A verdict on one expression: valid or not, with the errors that made
207
- // it so. Nothing was looked up.
208
- if (json) {
209
- jsonOut(result);
210
- return NO_RESULT_SET;
211
- }
212
-
213
- const {valid, form, errors, warnings, compact, outline} = result.data;
214
- if (!valid) {
215
- // Each error: the formatted issue, with a hanging "did you mean" line.
216
- const items = errors.map(e =>
217
- e.suggestions && e.suggestions.length > 0
218
- ? [e.formatted, `did you mean: ${e.suggestions.join(', ')}?`]
219
- : [e.formatted],
220
- );
221
- emit(
222
- text(`[fail] Invalid (${errors.length} error${errors.length === 1 ? '' : 's'}):`),
223
- list(items),
224
- );
225
- return NO_RESULT_SET;
226
- }
227
-
228
- /** @type {import('../formatters/index.mjs').Block[]} */
229
- const out = [text(`[ok] Valid (parsed as ${form})`)];
230
- if (warnings.length > 0) {
231
- out.push(text(warnings.map(w => `${WARN} ${w}`).join('\n')));
232
- }
233
- // The canonical compact/outline surfaces are preformatted — emit verbatim.
234
- out.push(section('compact'), code(compact), section('outline'), code(outline));
235
- emit(...out);
236
- return NO_RESULT_SET;
237
- },
238
- });
239
-
240
- defineCommand(layoutCmd, layoutGrammarCommand, {
241
- fn: layoutGrammarFn,
242
- action: async () => {
243
- const json = program.opts().json || false;
244
- /** @type {LayoutGrammarResponse} */
245
- let result;
246
- try {
247
- result = /** @type {LayoutGrammarResponse} */ (await layoutGrammar({cwd: process.cwd()}));
248
- } catch (e) {
249
- const err = /** @type {import('../../../api/error.mjs').AstryxError} */ (e);
250
- return cliError(err.message, {suggestions: err.suggestions || [], code: err.code});
251
- }
252
- // One document, the same one every time: the grammar cheatsheet.
253
- const answered = resultSet({count: 1, resultKind: 'doc'});
254
- if (json) {
255
- jsonOut(result);
256
- return answered;
257
- }
258
- // The cheatsheet is a preformatted document — emit verbatim.
259
- emit(code(result.data.text));
260
- return answered;
261
- },
262
- });
263
- }
@@ -1,83 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file Check for newer @astryxdesign/core versions via local signals.
5
- *
6
- * Resolution order:
7
- * 1. $ASTRYX_LATEST_VERSION env var
8
- * 2. If unset: no hint (no network calls from this module)
9
- *
10
- * When a newer version is detected, returns a hint string for CLI output.
11
- * Also sets $ASTRYX_LATEST_VERSION for subsequent commands in the same shell.
12
- */
13
-
14
- import * as fs from 'node:fs';
15
- import * as path from 'node:path';
16
- import {semverGt} from '../../../foundation/env/semver.mjs';
17
- import {getCliInvocation} from '../../../foundation/env/package-manager.mjs';
18
-
19
- /**
20
- * Read the latest available version from local signals.
21
- * No network calls — purely an env-var check ($ASTRYX_LATEST_VERSION),
22
- * so it takes no arguments.
23
- *
24
- * @returns {string|null} Latest version string, or null if unknown
25
- */
26
- export function getLatestVersion() {
27
- // 1. Check env var (fastest — set by previous CLI run)
28
- const envVersion = process.env.ASTRYX_LATEST_VERSION;
29
- if (envVersion && /^\d+\.\d+\.\d+/.test(envVersion)) {
30
- return envVersion;
31
- }
32
-
33
- return null;
34
- }
35
-
36
- /**
37
- * Get the currently installed @astryxdesign/core version from the consumer's package.json.
38
- *
39
- * @param {string} [cwd] - Project directory
40
- * @returns {string|null} Installed version, or null
41
- */
42
- export function getInstalledVersion(cwd = process.cwd()) {
43
- try {
44
- const pkgPath = path.resolve(cwd, 'package.json');
45
- if (!fs.existsSync(pkgPath)) return null;
46
-
47
- const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
48
- const deps = {...pkg.dependencies, ...pkg.devDependencies};
49
- const version = deps['@astryxdesign/core'];
50
- if (!version) return null;
51
-
52
- // Strip semver range prefix
53
- return version.replace(/^[^\d]*/, '');
54
- } catch {
55
- return null;
56
- }
57
- }
58
-
59
- /**
60
- * Check for available updates and return a hint string if one exists.
61
- * Also sets $ASTRYX_LATEST_VERSION env var for subsequent commands.
62
- *
63
- * @param {string} [cwd] - Project directory
64
- * @returns {string|null} FYI hint string, or null if up to date / unknown
65
- */
66
- export function checkForUpdate(cwd = process.cwd()) {
67
- const latest = getLatestVersion();
68
- if (!latest) return null;
69
-
70
- // Persist for subsequent commands in this shell session
71
- process.env.ASTRYX_LATEST_VERSION = latest;
72
-
73
- const installed = getInstalledVersion(cwd);
74
- if (!installed) return null;
75
-
76
- // Use semver-aware comparison so '0.0.20' is correctly treated as greater
77
- // than '0.0.5' (lexicographic compare gets that backwards).
78
- if (semverGt(latest, installed)) {
79
- return `FYI: A newer version of @astryxdesign/core (${latest}) is available. Install the new package version, then run: ${getCliInvocation()} upgrade --from <old-version> --apply`;
80
- }
81
-
82
- return null;
83
- }
@@ -1,137 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- import {describe, it, expect, beforeEach, afterEach} from 'vitest';
4
- import * as fs from 'node:fs';
5
- import * as path from 'node:path';
6
- import * as os from 'node:os';
7
- import {
8
- getLatestVersion,
9
- getInstalledVersion,
10
- checkForUpdate,
11
- } from './update-check.mjs';
12
-
13
- let tmpDir;
14
- const originalEnv = {};
15
-
16
- beforeEach(() => {
17
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'astryx-update-check-'));
18
- // Save and clear env
19
- originalEnv.ASTRYX_LATEST_VERSION = process.env.ASTRYX_LATEST_VERSION;
20
- delete process.env.ASTRYX_LATEST_VERSION;
21
- });
22
-
23
- afterEach(() => {
24
- fs.rmSync(tmpDir, {recursive: true, force: true});
25
- // Restore env
26
- if (originalEnv.ASTRYX_LATEST_VERSION !== undefined) {
27
- process.env.ASTRYX_LATEST_VERSION = originalEnv.ASTRYX_LATEST_VERSION;
28
- } else {
29
- delete process.env.ASTRYX_LATEST_VERSION;
30
- }
31
- });
32
-
33
- describe('getLatestVersion', () => {
34
- it('reads from ASTRYX_LATEST_VERSION env var', () => {
35
- process.env.ASTRYX_LATEST_VERSION = '0.0.8';
36
- expect(getLatestVersion()).toBe('0.0.8');
37
- });
38
-
39
- it('ignores invalid env var values', () => {
40
- process.env.ASTRYX_LATEST_VERSION = 'not-a-version';
41
- expect(getLatestVersion()).toBeNull();
42
- });
43
-
44
- it('returns null when no signals exist', () => {
45
- fs.writeFileSync(
46
- path.join(tmpDir, 'package.json'),
47
- JSON.stringify({name: 'test'}),
48
- );
49
- expect(getLatestVersion()).toBeNull();
50
- });
51
- });
52
-
53
- describe('getInstalledVersion', () => {
54
- it('reads @astryxdesign/core version from dependencies', () => {
55
- fs.writeFileSync(
56
- path.join(tmpDir, 'package.json'),
57
- JSON.stringify({dependencies: {'@astryxdesign/core': '^0.0.7'}}),
58
- );
59
- expect(getInstalledVersion(tmpDir)).toBe('0.0.7');
60
- });
61
-
62
- it('strips semver range prefix', () => {
63
- fs.writeFileSync(
64
- path.join(tmpDir, 'package.json'),
65
- JSON.stringify({dependencies: {'@astryxdesign/core': '~0.0.5'}}),
66
- );
67
- expect(getInstalledVersion(tmpDir)).toBe('0.0.5');
68
- });
69
-
70
- it('returns null when @astryxdesign/core is not a dependency', () => {
71
- fs.writeFileSync(
72
- path.join(tmpDir, 'package.json'),
73
- JSON.stringify({dependencies: {react: '^19.0.0'}}),
74
- );
75
- expect(getInstalledVersion(tmpDir)).toBeNull();
76
- });
77
- });
78
-
79
- describe('checkForUpdate', () => {
80
- it('returns hint when newer version is available', () => {
81
- process.env.ASTRYX_LATEST_VERSION = '0.0.8';
82
- fs.writeFileSync(
83
- path.join(tmpDir, 'package.json'),
84
- JSON.stringify({dependencies: {'@astryxdesign/core': '^0.0.7'}}),
85
- );
86
-
87
- const hint = checkForUpdate(tmpDir);
88
- expect(hint).toContain('0.0.8');
89
- expect(hint).toContain('astryx upgrade --from <old-version> --apply');
90
- expect(hint).toContain('FYI');
91
- });
92
-
93
- it('returns null when up to date', () => {
94
- process.env.ASTRYX_LATEST_VERSION = '0.0.7';
95
- fs.writeFileSync(
96
- path.join(tmpDir, 'package.json'),
97
- JSON.stringify({dependencies: {'@astryxdesign/core': '^0.0.7'}}),
98
- );
99
-
100
- expect(checkForUpdate(tmpDir)).toBeNull();
101
- });
102
-
103
- it('returns null when no latest version is known', () => {
104
- fs.writeFileSync(
105
- path.join(tmpDir, 'package.json'),
106
- JSON.stringify({dependencies: {'@astryxdesign/core': '^0.0.7'}}),
107
- );
108
-
109
- expect(checkForUpdate(tmpDir)).toBeNull();
110
- });
111
-
112
- it('uses semver (not lexicographic) comparison for double-digit patches', () => {
113
- // Regression: with string compare, '0.0.20' > '0.0.5' is false because
114
- // '2' < '5' lexicographically. Users on 0.0.5 would never be told that
115
- // 0.0.20 is available.
116
- process.env.ASTRYX_LATEST_VERSION = '0.0.20';
117
- fs.writeFileSync(
118
- path.join(tmpDir, 'package.json'),
119
- JSON.stringify({dependencies: {'@astryxdesign/core': '^0.0.5'}}),
120
- );
121
-
122
- const hint = checkForUpdate(tmpDir);
123
- expect(hint).toContain('0.0.20');
124
- });
125
-
126
- it('does not suggest an upgrade when latest < installed (semver)', () => {
127
- // The mirror-image bug: '0.0.9' > '0.0.10' is true under string compare,
128
- // so a stale env hint of 0.0.9 would falsely claim it's "newer" than 0.0.10.
129
- process.env.ASTRYX_LATEST_VERSION = '0.0.9';
130
- fs.writeFileSync(
131
- path.join(tmpDir, 'package.json'),
132
- JSON.stringify({dependencies: {'@astryxdesign/core': '^0.0.10'}}),
133
- );
134
-
135
- expect(checkForUpdate(tmpDir)).toBeNull();
136
- });
137
- });
@@ -1,54 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file Guards the update-hint command allowlist.
5
- *
6
- * The post-action update hint only fires for a small set of commands
7
- * (see UPDATE_HINT_COMMANDS in index.mjs). Every name in that set must
8
- * map to a real, registered command — otherwise the entry is dead and
9
- * the hint can never fire for it. This test imports the assembled
10
- * program and verifies the invariant so a stale reference can't creep in.
11
- *
12
- * Historically there was a dead 'doctor' entry in UPDATE_HINT_COMMANDS that
13
- * referenced a command that didn't exist. `doctor` is now a real command
14
- * (the health check), but it is intentionally NOT in the update-hint set —
15
- * the hint is for content commands (component/docs) that agents read, not
16
- * for the diagnostic command. This test pins both invariants.
17
- */
18
-
19
- import {describe, it, expect} from 'vitest';
20
- import {program} from './index.mjs';
21
-
22
- /** Commands the update hint is expected to fire for. */
23
- const HINTED_COMMANDS = ['component', 'docs'];
24
-
25
- /** Real commands that must NOT trigger the update hint. */
26
- const NON_HINTED_COMMANDS = ['doctor'];
27
-
28
- function registeredCommandNames() {
29
- return program.commands.map((c) => c.name());
30
- }
31
-
32
- describe('update hint commands', () => {
33
- it('fires only for real, registered commands', () => {
34
- const registered = new Set(registeredCommandNames());
35
- for (const name of HINTED_COMMANDS) {
36
- expect(registered.has(name)).toBe(true);
37
- }
38
- });
39
-
40
- it('registers the real "doctor" command', () => {
41
- const registered = new Set(registeredCommandNames());
42
- expect(registered.has('doctor')).toBe(true);
43
- });
44
-
45
- it('does not fire the update hint for the doctor command', () => {
46
- // UPDATE_HINT_COMMANDS is intentionally limited to content commands.
47
- // Doctor is a diagnostic; its output should not carry an update hint.
48
- expect(NON_HINTED_COMMANDS).not.toContain('component');
49
- expect(NON_HINTED_COMMANDS).not.toContain('docs');
50
- for (const name of NON_HINTED_COMMANDS) {
51
- expect(HINTED_COMMANDS).not.toContain(name);
52
- }
53
- });
54
- });