@astryxdesign/cli 0.6.3 → 0.6.4-canary.10dd683

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 (643) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/README.md +117 -78
  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 +6 -12
  18. package/api/component/_adapter.mjs +20 -10
  19. package/api/component/component.doc.mjs +13 -3
  20. package/api/component/component.mjs +91 -14
  21. package/api/component/component.test.mjs +38 -0
  22. package/api/component/component.type.d.mts +22 -11
  23. package/api/component/component.type.mjs +32 -24
  24. package/api/component/detail/blocks/blocks.d.mts +2 -1
  25. package/api/component/detail/blocks/blocks.mjs +4 -3
  26. package/api/component/list/list.d.mts +0 -5
  27. package/api/component/list/list.mjs +40 -11
  28. package/api/discover/_adapter.d.mts +114 -6
  29. package/api/discover/_adapter.mjs +372 -17
  30. package/api/discover/_adapter.test.mjs +215 -0
  31. package/api/discover/_catalog-view.d.mts +115 -0
  32. package/api/discover/_catalog-view.mjs +203 -0
  33. package/api/discover/_catalog-view.test.mjs +128 -0
  34. package/api/discover/detail/detail.d.mts +18 -6
  35. package/api/discover/detail/detail.mjs +67 -13
  36. package/api/discover/detail/detail.test.mjs +85 -0
  37. package/api/discover/detail/item/item.d.mts +26 -0
  38. package/api/discover/detail/item/item.mjs +78 -0
  39. package/api/discover/detail/item/item.test.mjs +73 -0
  40. package/api/discover/discover.d.mts +3 -9
  41. package/api/discover/discover.doc.mjs +62 -18
  42. package/api/discover/discover.mjs +220 -36
  43. package/api/discover/discover.test.mjs +11 -2
  44. package/api/discover/discover.type.d.mts +150 -11
  45. package/api/discover/discover.type.mjs +107 -17
  46. package/api/discover/list/list.d.mts +20 -6
  47. package/api/discover/list/list.mjs +45 -12
  48. package/api/discover/list/list.test.mjs +46 -0
  49. package/api/discover/search/search.d.mts +18 -16
  50. package/api/discover/search/search.mjs +102 -56
  51. package/api/discover/search/search.test.mjs +144 -10
  52. package/api/docs/_adapter.d.mts +272 -41
  53. package/api/docs/_adapter.mjs +985 -108
  54. package/api/docs/compiled-topics.test.mjs +78 -0
  55. package/api/docs/detail/detail.mjs +22 -63
  56. package/api/docs/detail/section/section.d.mts +1 -1
  57. package/api/docs/detail/section/section.mjs +54 -19
  58. package/api/docs/detail/section/section.test.mjs +50 -0
  59. package/api/docs/docs.d.mts +10 -3
  60. package/api/docs/docs.doc.mjs +55 -16
  61. package/api/docs/docs.mjs +53 -10
  62. package/api/docs/docs.test.mjs +164 -4
  63. package/api/docs/docs.type.d.mts +221 -5
  64. package/api/docs/docs.type.mjs +153 -11
  65. package/api/docs/index/index.d.mts +18 -0
  66. package/api/docs/index/index.mjs +40 -0
  67. package/api/docs/index/index.test.mjs +62 -0
  68. package/api/docs/integration-tree.test.mjs +555 -0
  69. package/api/docs/integrationDocs.test.mjs +114 -8
  70. package/api/docs/list/list.mjs +28 -12
  71. package/api/docs/node/node.d.mts +43 -0
  72. package/api/docs/node/node.mjs +192 -0
  73. package/api/docs/reference-blocks.test.mjs +406 -0
  74. package/api/doctor/doctor.d.mts +99 -1
  75. package/api/doctor/doctor.doc.mjs +1 -0
  76. package/api/doctor/doctor.mjs +548 -1
  77. package/api/doctor/doctor.test.mjs +610 -1
  78. package/api/gap-report/gap-report.doc.mjs +8 -4
  79. package/api/hook/_adapter.mjs +19 -5
  80. package/api/hook/hook.doc.mjs +1 -0
  81. package/api/hook/hook.type.d.mts +3 -3
  82. package/api/hook/hook.type.mjs +11 -11
  83. package/api/hook/list/list.d.mts +2 -2
  84. package/api/hook/list/list.mjs +69 -17
  85. package/api/index.d.mts +1 -1
  86. package/api/index.mjs +1 -0
  87. package/api/init/init.doc.mjs +6 -1
  88. package/api/init/init.test.mjs +41 -1
  89. package/api/init/remove/remove.mjs +1 -1
  90. package/api/init/run/run.mjs +20 -10
  91. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  92. package/api/integration/add-contribution.d.mts +2 -1
  93. package/api/integration/add-contribution.mjs +130 -15
  94. package/api/integration/add-contribution.test.mjs +258 -7
  95. package/api/integration/add-helpers.d.mts +5 -2
  96. package/api/integration/add-helpers.mjs +36 -9
  97. package/api/integration/add-theme.mjs +34 -64
  98. package/api/integration/add-theme.test.mjs +105 -21
  99. package/api/integration/authoring-checks.mjs +138 -28
  100. package/api/integration/authoring-checks.test.mjs +179 -7
  101. package/api/integration/authoring-checks.type.mjs +6 -1
  102. package/api/integration/integration-authoring.type.d.mts +3 -1
  103. package/api/integration/integration-authoring.type.mjs +2 -0
  104. package/api/integration/integration-block-exports.test.mjs +10 -6
  105. package/api/integration/integrationAdd.doc.mjs +14 -4
  106. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  107. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  108. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  109. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  110. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  111. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  112. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  113. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  114. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  115. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  116. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  117. package/api/integration/pack-check.mjs +83 -7
  118. package/api/integration/pack-check.test.mjs +387 -47
  119. package/api/integration/pack-check.type.d.mts +26 -2
  120. package/api/integration/pack-check.type.mjs +14 -1
  121. package/api/integration/summarizeIssues.doc.mjs +1 -0
  122. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  123. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  124. package/api/integration/validate-integration.mjs +52 -102
  125. package/api/integration/validate-integration.test.mjs +179 -26
  126. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  127. package/api/integration/validateIntegration.doc.mjs +3 -2
  128. package/api/json/assertResponse.doc.mjs +1 -0
  129. package/api/json/envelope-types.test.mjs +76 -0
  130. package/api/json/index.ts +2 -0
  131. package/api/json/isError.doc.mjs +1 -0
  132. package/api/json/parseResponse.doc.mjs +3 -2
  133. package/api/layout/_adapter.mjs +20 -5
  134. package/api/layout/expand/expand.mjs +7 -5
  135. package/api/layout/expand/expand.path-safety.test.mjs +53 -0
  136. package/api/layout/grammar/grammar.mjs +2 -1
  137. package/api/layout/layoutCheck.doc.mjs +1 -0
  138. package/api/layout/layoutExpand.doc.mjs +2 -1
  139. package/api/layout/layoutGrammar.doc.mjs +1 -0
  140. package/api/search/search-return-type.test.mjs +54 -0
  141. package/api/search/search.d.mts +62 -11
  142. package/api/search/search.doc.mjs +8 -2
  143. package/api/search/search.mjs +471 -83
  144. package/api/search/search.test.mjs +124 -1
  145. package/api/search/search.type.d.mts +15 -3
  146. package/api/search/search.type.mjs +5 -2
  147. package/api/swizzle/copy/copy.mjs +28 -11
  148. package/api/swizzle/swizzle.doc.mjs +2 -1
  149. package/api/swizzle/swizzle.type.d.mts +2 -2
  150. package/api/swizzle/swizzle.type.mjs +2 -2
  151. package/api/template/copy/copy.mjs +17 -23
  152. package/api/template/copy/copy.test.mjs +17 -0
  153. package/api/template/list/list.mjs +1 -0
  154. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  155. package/api/template/template-integration.test.mjs +1072 -3
  156. package/api/template/template-suffix.test.mjs +41 -21
  157. package/api/template/template.d.mts +1 -1
  158. package/api/template/template.doc.mjs +30 -8
  159. package/api/template/template.mjs +45 -8
  160. package/api/template/template.type.d.mts +12 -14
  161. package/api/template/template.type.mjs +15 -14
  162. package/api/theme/_adapter.d.mts +2 -3
  163. package/api/theme/_adapter.mjs +4 -5
  164. package/api/theme/add/add.binary.test.mjs +84 -0
  165. package/api/theme/add/add.mjs +31 -22
  166. package/api/theme/add/add.rollback.test.mjs +158 -0
  167. package/api/theme/add/add.staging.test.mjs +83 -0
  168. package/api/theme/add/add.test.mjs +14 -1
  169. package/api/theme/build/build.family.test.mjs +7 -12
  170. package/api/theme/build/build.mjs +140 -59
  171. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  172. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  173. package/api/theme/build/build.rollback.test.mjs +148 -0
  174. package/api/theme/build/build.test.mjs +127 -0
  175. package/api/theme/build/font-warning.mjs +3 -3
  176. package/api/theme/build/font-warning.test.mjs +5 -2
  177. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  178. package/api/theme/integration-themes.test.mjs +39 -28
  179. package/api/theme/list/list.test.mjs +19 -20
  180. package/api/theme/listThemes.doc.mjs +6 -5
  181. package/api/theme/palette/generate/generate.mjs +8 -3
  182. package/api/theme/palette/generate/generate.test.mjs +96 -0
  183. package/api/theme/palette/generate/generator.d.mts +10 -13
  184. package/api/theme/palette/generate/generator.mjs +15 -4
  185. package/api/theme/palette/generate/generator.test.mjs +10 -0
  186. package/api/theme/template/template.mjs +11 -2
  187. package/api/theme/template/template.test.mjs +20 -0
  188. package/api/theme/theme.type.d.mts +170 -11
  189. package/api/theme/theme.type.mjs +94 -27
  190. package/api/theme/themeAdd.doc.mjs +4 -3
  191. package/api/theme/themeBuild.doc.mjs +8 -4
  192. package/api/theme/themeList.doc.mjs +6 -3
  193. package/api/theme/themeListAvailable.doc.mjs +5 -3
  194. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  195. package/api/theme/themeTargets.doc.mjs +1 -0
  196. package/api/theme/themeTemplate.doc.mjs +6 -2
  197. package/api/upgrade/_adapter.d.mts +32 -5
  198. package/api/upgrade/_adapter.mjs +139 -22
  199. package/api/upgrade/list/list.mjs +2 -1
  200. package/api/upgrade/list/list.test.mjs +73 -0
  201. package/api/upgrade/project-context.test.mjs +272 -0
  202. package/api/upgrade/provider-agreement.test.mjs +152 -0
  203. package/api/upgrade/run/run.mjs +356 -59
  204. package/api/upgrade/status/status.mjs +2 -2
  205. package/api/upgrade/upgrade.doc.mjs +12 -5
  206. package/api/upgrade/upgrade.type.d.mts +43 -5
  207. package/api/upgrade/upgrade.type.mjs +27 -11
  208. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  209. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  210. package/assets/codemods/integration-discovery.mjs +48 -4
  211. package/assets/codemods/integration-discovery.test.mjs +73 -0
  212. package/assets/codemods/integration-runner.mjs +56 -4
  213. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  214. package/assets/codemods/registry.mjs +1 -0
  215. package/assets/codemods/run-codemod.mjs +177 -34
  216. package/assets/codemods/runner.mjs +350 -102
  217. package/assets/codemods/term-log.mjs +32 -8
  218. package/assets/codemods/term-log.test.mjs +19 -1
  219. package/assets/codemods/transform-prop.mjs +109 -0
  220. package/assets/codemods/transform-prop.test.mjs +95 -0
  221. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  222. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  223. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  224. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  225. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  226. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  227. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  228. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  229. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  230. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  231. package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
  232. package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
  233. package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
  234. package/assets/docs/README.md +9 -0
  235. package/assets/docs/authoring.doc.mjs +14 -0
  236. package/assets/docs/getting-started.doc.mjs +2 -2
  237. package/assets/docs/internationalization.doc.mjs +7 -5
  238. package/assets/docs/layout.doc.dense.mjs +2 -2
  239. package/assets/docs/layout.doc.mjs +1 -1
  240. package/assets/docs/principles.doc.mjs +6 -6
  241. package/assets/docs/styling-libraries.doc.mjs +4 -4
  242. package/assets/docs/styling.doc.mjs +4 -4
  243. package/assets/docs/theme.doc.mjs +5 -5
  244. package/assets/docs/tokens.doc.mjs +1 -1
  245. package/assets/docs/tree/api.doc.mjs +30 -0
  246. package/assets/docs/tree/cli.doc.mjs +23 -0
  247. package/assets/docs/tree/commands.doc.mjs +25 -0
  248. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +144 -26
  249. package/assets/docs/tree/integrations.test.mjs +62 -0
  250. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  251. package/assets/docs/working-with-ai.doc.mjs +4 -4
  252. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  253. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  254. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  255. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  256. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  257. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  258. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  259. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  260. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  261. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  262. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  263. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  264. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  265. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  266. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  267. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  268. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  269. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  270. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  271. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  272. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  273. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  274. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  275. package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
  276. package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
  277. package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
  278. package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
  279. package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
  280. package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
  281. package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
  282. package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
  283. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
  284. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
  285. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  286. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  287. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  288. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  289. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  290. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  291. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  292. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  293. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  294. package/authoring/_shared/contract.ts +22 -0
  295. package/authoring/codemod/codemod.doc.mjs +7 -2
  296. package/authoring/codemod/parse.d.mts +8 -8
  297. package/authoring/codemod/parse.mjs +8 -6
  298. package/authoring/codemod/type.ts +12 -0
  299. package/authoring/config/config.doc.mjs +10 -2
  300. package/authoring/config/debug-composition.test.mjs +92 -0
  301. package/authoring/config/parse.d.mts +15 -13
  302. package/authoring/config/parse.mjs +27 -8
  303. package/authoring/config/parse.test.mjs +8 -0
  304. package/authoring/config/type.ts +29 -6
  305. package/authoring/debug/debug.doc.d.mts +11 -0
  306. package/authoring/debug/debug.doc.mjs +182 -0
  307. package/authoring/debug/parse.d.mts +8 -8
  308. package/authoring/debug/parse.mjs +3 -3
  309. package/authoring/discover/discover.doc.d.mts +13 -0
  310. package/authoring/discover/discover.doc.mjs +138 -0
  311. package/authoring/discover/parse.d.mts +24 -0
  312. package/authoring/discover/parse.mjs +128 -0
  313. package/authoring/discover/parse.test.mjs +124 -0
  314. package/authoring/discover/type.ts +87 -0
  315. package/authoring/doctypes/_schema.d.mts +790 -23
  316. package/authoring/doctypes/_schema.mjs +543 -39
  317. package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
  318. package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
  319. package/authoring/doctypes/base/type.ts +41 -0
  320. package/authoring/doctypes/command/command.doc.mjs +4 -3
  321. package/authoring/doctypes/command/parse.d.mts +2 -2
  322. package/authoring/doctypes/command/parse.mjs +1 -1
  323. package/authoring/doctypes/command/type.ts +5 -4
  324. package/authoring/doctypes/component/component.doc.mjs +6 -3
  325. package/authoring/doctypes/component/parse.d.mts +2 -2
  326. package/authoring/doctypes/component/parse.mjs +1 -1
  327. package/authoring/doctypes/component/type.ts +6 -5
  328. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  329. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  330. package/authoring/doctypes/enum/parse.d.mts +2 -2
  331. package/authoring/doctypes/enum/parse.mjs +1 -1
  332. package/authoring/doctypes/enum/type.ts +4 -2
  333. package/authoring/doctypes/function/function.doc.mjs +7 -2
  334. package/authoring/doctypes/function/parse.d.mts +2 -2
  335. package/authoring/doctypes/function/parse.mjs +1 -1
  336. package/authoring/doctypes/function/type.ts +9 -4
  337. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  338. package/authoring/doctypes/hook/parse.d.mts +2 -2
  339. package/authoring/doctypes/hook/parse.mjs +1 -1
  340. package/authoring/doctypes/hook/type.ts +5 -4
  341. package/authoring/doctypes/legacy.d.mts +8 -6
  342. package/authoring/doctypes/legacy.mjs +5 -4
  343. package/authoring/doctypes/load-contract.test.mjs +233 -0
  344. package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
  345. package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
  346. package/authoring/doctypes/namespace/parse.d.mts +12 -0
  347. package/authoring/doctypes/namespace/parse.mjs +25 -0
  348. package/authoring/doctypes/namespace/parse.test.mjs +163 -0
  349. package/authoring/doctypes/namespace/type.ts +74 -0
  350. package/authoring/doctypes/parse.d.mts +22 -18
  351. package/authoring/doctypes/parse.mjs +22 -11
  352. package/authoring/doctypes/parse.test.mjs +77 -3
  353. package/authoring/doctypes/reference/parse.d.mts +2 -2
  354. package/authoring/doctypes/reference/parse.mjs +8 -5
  355. package/authoring/doctypes/reference/reference.doc.mjs +48 -6
  356. package/authoring/doctypes/reference/type.ts +70 -7
  357. package/authoring/doctypes/schema/parse.d.mts +2 -2
  358. package/authoring/doctypes/schema/parse.mjs +1 -1
  359. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  360. package/authoring/doctypes/schema/type.ts +4 -4
  361. package/authoring/doctypes/template/parse.d.mts +94 -1
  362. package/authoring/doctypes/template/parse.mjs +40 -2
  363. package/authoring/doctypes/template/parse.test.mjs +26 -2
  364. package/authoring/doctypes/template/template.doc.mjs +13 -3
  365. package/authoring/doctypes/template/type.ts +13 -2
  366. package/authoring/doctypes/theme/parse.d.mts +35 -0
  367. package/authoring/doctypes/theme/parse.mjs +76 -0
  368. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  369. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  370. package/authoring/doctypes/theme/type.ts +42 -0
  371. package/authoring/doctypes/types.ts +12 -10
  372. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  373. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  374. package/authoring/gap-report/parse.d.mts +10 -10
  375. package/authoring/gap-report/parse.mjs +6 -6
  376. package/authoring/gap-report/type.ts +1 -1
  377. package/authoring/identity/identity.doc.d.mts +9 -0
  378. package/authoring/identity/identity.doc.mjs +61 -0
  379. package/authoring/identity/type.ts +132 -0
  380. package/authoring/index.d.mts +3 -0
  381. package/authoring/index.d.ts +62 -17
  382. package/authoring/index.mjs +4 -1
  383. package/authoring/integration/integration.doc.mjs +15 -8
  384. package/authoring/integration/parse.d.mts +2 -2
  385. package/authoring/integration/parse.mjs +1 -1
  386. package/authoring/integration/parse.test.mjs +10 -1
  387. package/authoring/integration/schema.d.mts +6 -4
  388. package/authoring/integration/schema.mjs +9 -3
  389. package/authoring/integration/type.ts +19 -8
  390. package/authoring/shadcn/receipt.d.mts +6 -6
  391. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  392. package/clients/cli/command-load-failure.test.mjs +83 -0
  393. package/clients/cli/commands/blog.doc.mjs +1 -1
  394. package/clients/cli/commands/blog.mjs +23 -8
  395. package/clients/cli/commands/blog.test.mjs +42 -1
  396. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  397. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  398. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  399. package/clients/cli/commands/build-theme.mjs +16 -50
  400. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  401. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  402. package/clients/cli/commands/build.doc.mjs +16 -8
  403. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  404. package/clients/cli/commands/build.mjs +137 -114
  405. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  406. package/clients/cli/commands/build.text-fields.test.mjs +81 -0
  407. package/clients/cli/commands/component/index.mjs +3 -8
  408. package/clients/cli/commands/component-ownership.test.mjs +3 -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 +1 -1
  412. package/clients/cli/commands/component.test.mjs +19 -0
  413. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  414. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  415. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  416. package/clients/cli/commands/discover.doc.mjs +55 -9
  417. package/clients/cli/commands/discover.mjs +393 -118
  418. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  419. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  420. package/clients/cli/commands/docs.doc.mjs +28 -6
  421. package/clients/cli/commands/docs.mjs +240 -26
  422. package/clients/cli/commands/docs.test.mjs +193 -1
  423. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  424. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  425. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  426. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  427. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  428. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  429. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  430. package/clients/cli/commands/doctor.doc.mjs +1 -1
  431. package/clients/cli/commands/doctor.mjs +59 -32
  432. package/clients/cli/commands/doctor.test.mjs +42 -0
  433. package/clients/cli/commands/gap-report.doc.mjs +17 -6
  434. package/clients/cli/commands/gap-report.test.mjs +72 -0
  435. package/clients/cli/commands/hook/index.mjs +7 -17
  436. package/clients/cli/commands/hook.doc.mjs +1 -1
  437. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  438. package/clients/cli/commands/init.doc.mjs +20 -9
  439. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  440. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  441. package/clients/cli/commands/integration-add.doc.mjs +32 -6
  442. package/clients/cli/commands/integration-authoring.test.mjs +13 -9
  443. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  444. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  445. package/clients/cli/commands/integration.doc.mjs +1 -1
  446. package/clients/cli/commands/integration.mjs +1 -0
  447. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  448. package/clients/cli/commands/json-contract.test.mjs +33 -0
  449. package/clients/cli/commands/layout-check.doc.mjs +15 -4
  450. package/clients/cli/commands/layout-expand.doc.mjs +22 -5
  451. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  452. package/clients/cli/commands/layout.doc.mjs +3 -3
  453. package/clients/cli/commands/layout.mjs +21 -9
  454. package/clients/cli/commands/layout.path-help.test.mjs +33 -0
  455. package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
  456. package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
  457. package/clients/cli/commands/manifest.doc.mjs +1 -1
  458. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  459. package/clients/cli/commands/search.doc.mjs +7 -4
  460. package/clients/cli/commands/search.mjs +28 -9
  461. package/clients/cli/commands/search.test.mjs +75 -0
  462. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  463. package/clients/cli/commands/swizzle.doc.mjs +3 -2
  464. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  465. package/clients/cli/commands/template.doc.mjs +52 -13
  466. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  467. package/clients/cli/commands/template.mjs +4 -91
  468. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  469. package/clients/cli/commands/text-json-parity.test.mjs +719 -0
  470. package/clients/cli/commands/theme-add.doc.mjs +4 -3
  471. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  472. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  473. package/clients/cli/commands/theme-palette-generate.doc.mjs +9 -5
  474. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  475. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  476. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  477. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  478. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  479. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  480. package/clients/cli/commands/theme.doc.mjs +1 -1
  481. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  482. package/clients/cli/commands/upgrade.doc.mjs +22 -10
  483. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  484. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  485. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  486. package/clients/cli/commands/upgrade.mjs +29 -7
  487. package/clients/cli/formatters/index.mjs +164 -1
  488. package/clients/cli/formatters/index.test.mjs +97 -0
  489. package/clients/cli/index.mjs +21 -30
  490. package/clients/cli/latest-version-env.test.mjs +50 -0
  491. package/clients/cli/lib/cli-error.test.mjs +7 -0
  492. package/clients/cli/lib/component-format.mjs +9 -9
  493. package/clients/cli/lib/component-format.test.mjs +1 -1
  494. package/clients/cli/lib/define-command.mjs +32 -6
  495. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  496. package/clients/cli/lib/exit-codes.test.mjs +97 -0
  497. package/clients/cli/lib/hook-format.mjs +19 -10
  498. package/clients/cli/lib/json-shim.mjs +38 -2
  499. package/clients/cli/lib/json-shim.test.mjs +83 -0
  500. package/clients/cli/lib/manifest.d.ts +2 -0
  501. package/clients/cli/lib/manifest.mjs +37 -2
  502. package/clients/cli/lib/manifest.test.mjs +17 -0
  503. package/foundation/agent-docs/agent-docs.d.mts +7 -2
  504. package/foundation/agent-docs/agent-docs.mjs +82 -12
  505. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  506. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  507. package/foundation/config/integration-debug.test.mjs +28 -3
  508. package/foundation/config/project-themes.test.mjs +11 -19
  509. package/foundation/config/project.d.mts +20 -11
  510. package/foundation/config/project.mjs +263 -91
  511. package/foundation/config/project.test.mjs +270 -21
  512. package/foundation/discovery/authoring-self-docs.d.mts +87 -0
  513. package/foundation/discovery/authoring-self-docs.mjs +237 -0
  514. package/foundation/discovery/authoring-self-docs.test.mjs +170 -0
  515. package/foundation/discovery/authoring-surface.d.mts +74 -0
  516. package/foundation/discovery/authoring-surface.mjs +525 -0
  517. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  518. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  519. package/foundation/discovery/cli-self-docs.mjs +490 -0
  520. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  521. package/foundation/discovery/component-discovery.d.mts +39 -1
  522. package/foundation/discovery/component-discovery.mjs +50 -1
  523. package/foundation/discovery/component-loader.d.mts +35 -38
  524. package/foundation/discovery/component-loader.mjs +53 -222
  525. package/foundation/discovery/docs-discovery.d.mts +119 -11
  526. package/foundation/discovery/docs-discovery.mjs +423 -108
  527. package/foundation/discovery/docs-discovery.test.mjs +365 -20
  528. package/foundation/discovery/docs-output-budget.d.mts +28 -0
  529. package/foundation/discovery/docs-output-budget.mjs +50 -0
  530. package/foundation/discovery/docs-section-key.d.mts +116 -0
  531. package/foundation/discovery/docs-section-key.mjs +322 -0
  532. package/foundation/discovery/docs-section-key.test.mjs +246 -0
  533. package/foundation/discovery/template-adapter.d.mts +113 -11
  534. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  535. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  536. package/foundation/discovery/template-adapter.mjs +774 -83
  537. package/foundation/discovery/template-adapter.test.mjs +57 -0
  538. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  539. package/foundation/discovery/template-conflict-release.mjs +40 -0
  540. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  541. package/foundation/discovery/theme-discovery.d.mts +67 -7
  542. package/foundation/discovery/theme-discovery.mjs +916 -186
  543. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  544. package/foundation/discovery/theming-targets.test.mjs +4 -0
  545. package/foundation/doc-compiler/bundle.d.mts +47 -0
  546. package/foundation/doc-compiler/bundle.mjs +278 -0
  547. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  548. package/foundation/doc-compiler/compile.d.mts +343 -0
  549. package/foundation/doc-compiler/compile.mjs +558 -0
  550. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  551. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  552. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  553. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  554. package/foundation/doc-compiler/import.d.mts +24 -0
  555. package/foundation/doc-compiler/import.mjs +59 -0
  556. package/foundation/doc-compiler/inputs.d.mts +102 -0
  557. package/foundation/doc-compiler/inputs.mjs +291 -0
  558. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  559. package/foundation/doc-compiler/ir.d.mts +22 -0
  560. package/foundation/doc-compiler/ir.mjs +471 -0
  561. package/foundation/doc-compiler/lenses.d.mts +36 -0
  562. package/foundation/doc-compiler/lenses.mjs +173 -0
  563. package/foundation/doc-compiler/links.d.mts +162 -0
  564. package/foundation/doc-compiler/links.mjs +294 -0
  565. package/foundation/doc-compiler/links.test.mjs +192 -0
  566. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  567. package/foundation/doc-compiler/overlays.d.mts +37 -0
  568. package/foundation/doc-compiler/overlays.mjs +206 -0
  569. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  570. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  571. package/foundation/doc-compiler/read.d.mts +127 -0
  572. package/foundation/doc-compiler/read.mjs +325 -0
  573. package/foundation/doc-compiler/read.test.mjs +313 -0
  574. package/foundation/doc-compiler/source.d.mts +33 -0
  575. package/foundation/doc-compiler/source.mjs +128 -0
  576. package/foundation/doc-compiler/tree.d.mts +288 -0
  577. package/foundation/doc-compiler/tree.mjs +876 -0
  578. package/foundation/doc-compiler/tree.test.mjs +598 -0
  579. package/foundation/fs/file-protection.d.mts +33 -0
  580. package/foundation/fs/file-protection.mjs +825 -0
  581. package/foundation/fs/file-protection.test.mjs +250 -0
  582. package/foundation/fs/module-loader.d.mts +1 -0
  583. package/foundation/fs/module-loader.mjs +50 -1
  584. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  585. package/foundation/fs/path-safety.d.mts +3 -2
  586. package/foundation/fs/path-safety.mjs +49 -19
  587. package/foundation/fs/path-safety.test.mjs +50 -0
  588. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  589. package/foundation/identity/provider-identity.d.mts +90 -0
  590. package/foundation/identity/provider-identity.mjs +320 -0
  591. package/foundation/identity/provider-identity.test.mjs +254 -0
  592. package/foundation/identity/providers.d.mts +7 -0
  593. package/foundation/identity/providers.mjs +16 -0
  594. package/foundation/integrations/autolink.d.mts +58 -1
  595. package/foundation/integrations/autolink.mjs +143 -45
  596. package/foundation/integrations/autolink.test.mjs +1 -1
  597. package/foundation/integrations/cli-requirement.d.mts +45 -0
  598. package/foundation/integrations/cli-requirement.mjs +154 -0
  599. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  600. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  601. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  602. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  603. package/foundation/integrations/contribution-inventory.mjs +27 -24
  604. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  605. package/foundation/integrations/integration-warnings.d.mts +9 -2
  606. package/foundation/integrations/integration-warnings.mjs +52 -21
  607. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  608. package/foundation/integrations/integrations.d.mts +63 -3
  609. package/foundation/integrations/integrations.mjs +122 -9
  610. package/foundation/integrations/integrations.test.mjs +415 -1
  611. package/foundation/integrations/provider-conflicts.test.mjs +125 -0
  612. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  613. package/foundation/integrations/provider-resolution.d.mts +152 -0
  614. package/foundation/integrations/provider-resolution.mjs +576 -0
  615. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  616. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  617. package/foundation/integrations/theme-descriptor.mjs +44 -0
  618. package/foundation/integrations/validate-contributions.d.mts +2 -0
  619. package/foundation/integrations/validate-contributions.mjs +131 -29
  620. package/foundation/response/base.d.ts +8 -4
  621. package/foundation/response/error-codes.d.mts +3 -1
  622. package/foundation/response/error-codes.d.ts +2 -0
  623. package/foundation/response/error-codes.doc.mjs +13 -4
  624. package/foundation/response/error-codes.mjs +8 -2
  625. package/foundation/response/error-codes.test.mjs +137 -10
  626. package/foundation/response/json-contract.test.mjs +57 -17
  627. package/foundation/response/json.d.mts +4 -2
  628. package/foundation/response/json.mjs +8 -10
  629. package/foundation/response/response-types.doc.d.mts +5 -1
  630. package/foundation/response/response-types.doc.mjs +41 -21
  631. package/foundation/response/response-types.doc.test.mjs +158 -0
  632. package/foundation/response/response.doc.mjs +1 -1
  633. package/foundation/text/string-utils.d.mts +8 -0
  634. package/foundation/text/string-utils.mjs +40 -10
  635. package/foundation/xle/expand.d.mts +2 -0
  636. package/foundation/xle/expand.mjs +4 -3
  637. package/foundation/xle/expand.test.mjs +54 -0
  638. package/foundation/xle/xle.test.mjs +13 -0
  639. package/package.json +10 -11
  640. package/assets/templates/themes/manifest.json +0 -95
  641. package/clients/cli/lib/update-check.mjs +0 -83
  642. package/clients/cli/lib/update-check.test.mjs +0 -137
  643. package/clients/cli/update-hint-commands.test.mjs +0 -54
@@ -0,0 +1,375 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file Tests for the CLI's own typed docs. Every command, API function,
5
+ * schema, and enum doc this package ships declares the group that reads it,
6
+ * and each way one can fail to be read is reported: no namespace, a namespace
7
+ * nothing reads, a clash with the authoring topic's list, a doc that does not
8
+ * load, and a leaf too large for one read. What `astryx docs <route>` prints
9
+ * for one doc is pinned here; where the tree puts it is tree.test.mjs's job.
10
+ *
11
+ * @input This package's own docs, and fixture doc trees written under the
12
+ * working directory.
13
+ * @output Assertions on the audit and on each doc's rendered content.
14
+ * @position packages/cli/foundation/discovery — tests for cli-self-docs.mjs.
15
+ */
16
+
17
+ import * as fs from 'node:fs';
18
+ import * as path from 'node:path';
19
+ import {afterAll, describe, expect, it} from 'vitest';
20
+ import {
21
+ CLI_DOC_NAMESPACES,
22
+ auditCliSelfDocs,
23
+ cliDocIndex,
24
+ cliDocSection,
25
+ discoverCliSelfDocSources,
26
+ } from './cli-self-docs.mjs';
27
+ import {routeSegment} from './docs-section-key.mjs';
28
+
29
+ const SLOW = 60_000;
30
+
31
+ /** @type {string[]} */
32
+ const tmpRoots = [];
33
+ afterAll(() => {
34
+ for (const root of tmpRoots) fs.rmSync(root, {recursive: true, force: true});
35
+ });
36
+
37
+ /** Write `files` (relative path -> content) under a fresh directory. */
38
+ function writeTree(/** @type {Record<string, string>} */ files) {
39
+ const root = fs.mkdtempSync(path.join(process.cwd(), '.astryx-cli-docs-'));
40
+ tmpRoots.push(root);
41
+ for (const [rel, content] of Object.entries(files)) {
42
+ const file = path.join(root, rel);
43
+ fs.mkdirSync(path.dirname(file), {recursive: true});
44
+ fs.writeFileSync(file, content);
45
+ }
46
+ return root;
47
+ }
48
+
49
+ const docModule = (/** @type {any} */ doc) =>
50
+ `export const doc = ${JSON.stringify(doc, null, 2)};\n`;
51
+
52
+ const command = (/** @type {string} */ name, extra = {}) => ({
53
+ type: 'command',
54
+ name,
55
+ displayName: `astryx ${name}`,
56
+ namespace: 'cli/commands',
57
+ summary: `Do ${name}`,
58
+ ...extra,
59
+ });
60
+
61
+ const fn = (/** @type {string} */ name, extra = {}) => ({
62
+ type: 'function',
63
+ kind: 'api',
64
+ name,
65
+ displayName: `${name}()`,
66
+ namespace: 'cli/api',
67
+ summary: `The ${name} function.`,
68
+ importPath: '@astryxdesign/cli/api',
69
+ params: [],
70
+ returns: [{type: name, description: 'The result.'}],
71
+ ...extra,
72
+ });
73
+
74
+ const enumDoc = (/** @type {string} */ name, extra = {}) => ({
75
+ type: 'enum',
76
+ name,
77
+ displayName: name,
78
+ namespace: 'cli/api',
79
+ description: `The ${name}.`,
80
+ members: [{value: 'A', description: 'The a.'}],
81
+ ...extra,
82
+ });
83
+
84
+ const schema = (/** @type {string} */ name, extra = {}) => ({
85
+ type: 'schema',
86
+ name,
87
+ displayName: name,
88
+ namespace: 'authoring',
89
+ description: `The ${name} file.`,
90
+ fields: [{name: 'x', type: 'string', description: 'The x.'}],
91
+ ...extra,
92
+ });
93
+
94
+ /** Audit a fixture tree with nothing in the authoring topic's list. */
95
+ const audit = (/** @type {string} */ root, authoringSources = []) =>
96
+ auditCliSelfDocs({root, authoringSources});
97
+
98
+ describe('the CLI docs this package ships', () => {
99
+ it(
100
+ 'each declare a namespace something reads, and none fails, clashes, or overflows',
101
+ async () => {
102
+ const result = await auditCliSelfDocs();
103
+ expect({
104
+ missing: result.missing,
105
+ unknown: result.unknown,
106
+ misfiled: result.misfiled,
107
+ failed: result.failed,
108
+ oversized: result.oversized,
109
+ }).toEqual({
110
+ missing: [],
111
+ unknown: [],
112
+ misfiled: [],
113
+ failed: [],
114
+ oversized: [],
115
+ });
116
+ expect(result.docs).toBeGreaterThan(0);
117
+ expect(result.tree + result.authoring).toBe(result.docs);
118
+ },
119
+ SLOW,
120
+ );
121
+ });
122
+
123
+ describe('auditCliSelfDocs', () => {
124
+ it('reports a doc with no namespace, and one nothing reads', async () => {
125
+ const root = writeTree({
126
+ 'api/alpha/alpha.doc.mjs': docModule(fn('alpha', {namespace: undefined})),
127
+ 'clients/cli/commands/beta.doc.mjs': docModule(
128
+ command('beta', {namespace: 'cli'}),
129
+ ),
130
+ 'api/gamma/gamma.doc.mjs': docModule(fn('gamma')),
131
+ });
132
+ const result = await audit(root);
133
+ expect(result.missing).toEqual(['api/alpha/alpha.doc.mjs']);
134
+ expect(result.unknown).toEqual([
135
+ {source: 'clients/cli/commands/beta.doc.mjs', namespace: 'cli'},
136
+ ]);
137
+ expect(result.tree).toBe(1);
138
+ });
139
+
140
+ it('holds the authoring namespace to the authoring topic list', async () => {
141
+ const root = writeTree({
142
+ 'authoring/x/x.doc.mjs': docModule(schema('x')),
143
+ 'authoring/y/y.doc.mjs': docModule(schema('y', {namespace: 'cli/api'})),
144
+ 'authoring/z/z.doc.mjs': docModule(schema('z')),
145
+ });
146
+ const result = await audit(root, ['y/y.doc.mjs', 'z/z.doc.mjs']);
147
+ expect(result.misfiled.map(entry => entry.message)).toEqual([
148
+ 'authoring/x/x.doc.mjs has namespace "authoring", but `astryx docs authoring` does not list it',
149
+ 'authoring/y/y.doc.mjs is read in `astryx docs authoring`, but its namespace is "cli/api"',
150
+ ]);
151
+ expect(result.authoring).toBe(1);
152
+ expect(result.tree).toBe(0);
153
+ });
154
+
155
+ it('reports a doc that fails to load, and skips fixture directories', async () => {
156
+ const root = writeTree({
157
+ 'api/bad/bad.doc.mjs': 'throw new Error("boom");\n',
158
+ 'api/__fixtures__/ghost.doc.mjs': docModule(fn('ghost')),
159
+ 'foundation/.hidden/hidden.doc.mjs': docModule(fn('hidden')),
160
+ 'foundation/codes.doc.mjs': docModule(enumDoc('codes')),
161
+ });
162
+ expect(discoverCliSelfDocSources(root)).toEqual([
163
+ 'api/bad/bad.doc.mjs',
164
+ 'foundation/codes.doc.mjs',
165
+ ]);
166
+ const result = await audit(root);
167
+ expect(result.failed).toEqual([
168
+ expect.objectContaining({
169
+ source: 'api/bad/bad.doc.mjs',
170
+ error: expect.stringContaining('boom'),
171
+ }),
172
+ ]);
173
+ expect(result.tree).toBe(1);
174
+ });
175
+
176
+ it('reports a tree doc too large for one read', async () => {
177
+ const root = writeTree({
178
+ 'api/big/big.doc.mjs': docModule(
179
+ fn('big', {description: 'x'.repeat(2_000)}),
180
+ ),
181
+ 'api/small/small.doc.mjs': docModule(fn('small')),
182
+ });
183
+ const result = await auditCliSelfDocs({root, authoringSources: [], budget: 1_000});
184
+ expect(result.oversized.map(entry => entry.key)).toEqual(['big']);
185
+ });
186
+
187
+ it('names every namespace a CLI doc may declare, and what reads it', () => {
188
+ expect(CLI_DOC_NAMESPACES).toEqual({
189
+ 'cli/commands': {reader: 'tree'},
190
+ 'cli/api': {reader: 'tree'},
191
+ authoring: {reader: 'authoring'},
192
+ });
193
+ });
194
+ });
195
+
196
+ /**
197
+ * An index whose routes are the ones the docs tree gives the CLI's own docs.
198
+ * @param {any[]} docs
199
+ */
200
+ const indexOf = docs =>
201
+ cliDocIndex(docs, (kind, name) =>
202
+ kind === 'command'
203
+ ? `cli/commands/${routeSegment(name)}`
204
+ : kind === 'function'
205
+ ? `cli/api/functions/${routeSegment(name)}`
206
+ : null,
207
+ );
208
+
209
+ describe('cliDocSection', () => {
210
+ it('links a command and the function it runs by identity, never by route', () => {
211
+ const docs = [fn('docs', {command: 'docs'}), command('docs', {fn: 'docs'})];
212
+ const index = indexOf(docs);
213
+ expect(JSON.stringify(cliDocSection(docs[1], index).content)).toContain(
214
+ 'It runs `docs()` from `@astryxdesign/cli/api`. Read it with {@link function:docs}.',
215
+ );
216
+ expect(JSON.stringify(cliDocSection(docs[0], index).content)).toContain(
217
+ '`astryx docs` runs it. Read it with {@link command:docs}.',
218
+ );
219
+ });
220
+
221
+ it("links a function to the command its command line starts with, or to none", () => {
222
+ const docs = [
223
+ fn('integrationAddTheme', {command: 'integration add theme'}),
224
+ command('integration add'),
225
+ fn('gone', {command: 'gone away'}),
226
+ ];
227
+ const index = cliDocIndex(docs);
228
+ expect(JSON.stringify(cliDocSection(docs[0], index).content)).toContain(
229
+ '`astryx integration add theme` runs it. Read it with {@link command:integration add}.',
230
+ );
231
+ expect(JSON.stringify(cliDocSection(docs[2], index).content)).not.toContain(
232
+ 'runs it',
233
+ );
234
+ });
235
+
236
+ it('renders a command: usage, arguments, options, examples, exit codes, subcommands', () => {
237
+ const docs = [
238
+ command('grp', {subcommands: ['sub', 'gone']}),
239
+ command('grp sub', {
240
+ description: 'The long form.',
241
+ fn: 'grpSub',
242
+ args: [
243
+ {name: 'files', required: true, variadic: true, description: 'Files.'},
244
+ ],
245
+ options: [
246
+ {flag: '--fast', description: 'Go fast'},
247
+ {
248
+ flag: '--mode <m>',
249
+ description: 'Mode',
250
+ choices: ['a', 'b'],
251
+ default: 'a',
252
+ },
253
+ {flag: '--limit <n>', param: 'options.limit'},
254
+ {flag: '--dry', description: 'Dry run.', default: false},
255
+ ],
256
+ examples: [
257
+ {label: 'Run it', cli: 'astryx grp sub x'},
258
+ {cli: 'astryx grp sub y'},
259
+ ],
260
+ exitCodes: [{code: 1, when: 'it fails'}],
261
+ }),
262
+ fn('grpSub', {
263
+ params: [{name: 'options.limit', type: 'number', description: 'Max.'}],
264
+ }),
265
+ ];
266
+ // `grp gone` has no doc, so it gets no line.
267
+ const index = cliDocIndex(docs, (kind, name) =>
268
+ kind === 'command' && name === 'grp gone'
269
+ ? null
270
+ : kind === 'command'
271
+ ? `cli/commands/${routeSegment(name)}`
272
+ : `cli/api/functions/${routeSegment(name)}`,
273
+ );
274
+ const group = cliDocSection(docs[0], index);
275
+ const sub = cliDocSection(docs[1], index);
276
+ expect(group.content).toContainEqual({
277
+ type: 'list',
278
+ style: 'unordered',
279
+ items: ['`astryx grp sub`: {@link command:grp sub}'],
280
+ });
281
+ expect(sub).toMatchObject({id: 'grp-sub', title: 'astryx grp sub'});
282
+ expect(sub.content).toEqual([
283
+ {type: 'prose', text: 'Do grp sub'},
284
+ {type: 'prose', text: 'The long form.'},
285
+ {type: 'code', lang: 'bash', code: 'astryx grp sub <files...>'},
286
+ {
287
+ type: 'table',
288
+ headers: ['Argument', 'Description'],
289
+ rows: [['`files`', 'Files.']],
290
+ },
291
+ {
292
+ type: 'table',
293
+ headers: ['Option', 'Description'],
294
+ rows: [
295
+ ['`--fast`', 'Go fast'],
296
+ ['`--mode <m>`', 'Mode. One of: `a`, `b`. Default: `a`.'],
297
+ ['`--limit <n>`', 'Max.'],
298
+ ['`--dry`', 'Dry run.'],
299
+ ],
300
+ },
301
+ {
302
+ type: 'code',
303
+ lang: 'bash',
304
+ code: '# Run it\nastryx grp sub x\nastryx grp sub y',
305
+ },
306
+ {
307
+ type: 'table',
308
+ headers: ['Exit code', 'When'],
309
+ rows: [['1', 'it fails']],
310
+ },
311
+ {
312
+ type: 'prose',
313
+ text: 'It runs `grpSub()` from `@astryxdesign/cli/api`. Read it with {@link function:grpSub}.',
314
+ },
315
+ ]);
316
+ });
317
+
318
+ it('renders an API function, an enum, and a schema', () => {
319
+ const alpha = fn('alpha', {
320
+ description: 'Longer.',
321
+ signature: 'alpha(x: string): Promise<Alpha>',
322
+ params: [{name: 'x', type: 'string', description: 'The x.'}],
323
+ throws: [{code: 'ERR_X', when: 'x is bad'}],
324
+ examples: [{label: 'Call it', code: "await alpha('x');"}],
325
+ });
326
+ const codes = enumDoc('codes', {
327
+ members: [
328
+ {value: 'A', description: 'The a.'},
329
+ {value: 'B', description: 'The b.', deprecated: 'Use A.'},
330
+ ],
331
+ });
332
+ const output = schema('output', {namespace: 'cli/api'});
333
+ const index = indexOf([alpha, codes, output]);
334
+ expect(cliDocSection(alpha, index).content).toEqual([
335
+ {type: 'prose', text: 'The alpha function.'},
336
+ {type: 'prose', text: 'Longer.'},
337
+ {type: 'code', lang: 'ts', code: 'alpha(x: string): Promise<Alpha>'},
338
+ {type: 'prose', text: 'Import it from `@astryxdesign/cli/api`.'},
339
+ {
340
+ type: 'table',
341
+ headers: ['Parameter', 'Type', 'Description'],
342
+ rows: [['`x`', '`string`', 'The x.']],
343
+ },
344
+ {
345
+ type: 'table',
346
+ headers: ['Returns', 'Description'],
347
+ rows: [['`alpha`', 'The result.']],
348
+ },
349
+ {
350
+ type: 'table',
351
+ headers: ['Throws', 'When'],
352
+ rows: [['`ERR_X`', 'x is bad']],
353
+ },
354
+ {type: 'code', lang: 'ts', label: 'Call it', code: "await alpha('x');"},
355
+ ]);
356
+ expect(cliDocSection(codes, index)).toEqual({
357
+ id: 'codes',
358
+ title: 'codes',
359
+ content: [
360
+ {type: 'prose', text: 'The codes.'},
361
+ {
362
+ type: 'table',
363
+ headers: ['Value', 'Meaning'],
364
+ rows: [
365
+ ['`A`', 'The a.'],
366
+ ['`B`', 'The b. Deprecated: Use A.'],
367
+ ],
368
+ },
369
+ ],
370
+ });
371
+ const rendered = cliDocSection(output, index);
372
+ expect(rendered.id).toBe('output');
373
+ expect(JSON.stringify(rendered.content)).toContain('The output file.');
374
+ });
375
+ });
@@ -124,6 +124,44 @@ export function discoverIntegrationComponents(integration: {
124
124
  issuesUrl: string | undefined;
125
125
  group: string | null;
126
126
  }>;
127
+ /**
128
+ * Load and validate every discovered integration component independently.
129
+ * Invalid metadata or a missing same-stem source removes only that component;
130
+ * callers can report the returned errors while retaining valid siblings.
131
+ *
132
+ * @param {{name: string, components?: string, issuesUrl?: string}} integration
133
+ * @returns {Promise<{
134
+ * components: Array<{name: string, package: string, docPath: string, sourcePath: string, issuesUrl: string|undefined, group: string|null}>,
135
+ * discovered: Array<{name: string, package: string, docPath: string, sourcePath: string|null, issuesUrl: string|undefined, group: string|null}>,
136
+ * errors: Array<{name: string, message: string}>,
137
+ * }>}
138
+ */
139
+ export function discoverValidIntegrationComponents(integration: {
140
+ name: string;
141
+ components?: string;
142
+ issuesUrl?: string;
143
+ }): Promise<{
144
+ components: Array<{
145
+ name: string;
146
+ package: string;
147
+ docPath: string;
148
+ sourcePath: string;
149
+ issuesUrl: string | undefined;
150
+ group: string | null;
151
+ }>;
152
+ discovered: Array<{
153
+ name: string;
154
+ package: string;
155
+ docPath: string;
156
+ sourcePath: string | null;
157
+ issuesUrl: string | undefined;
158
+ group: string | null;
159
+ }>;
160
+ errors: Array<{
161
+ name: string;
162
+ message: string;
163
+ }>;
164
+ }>;
127
165
  /**
128
166
  * Find an integration component's doc file by name within a loaded
129
167
  * integration's resolved `components` dir. Honors the same-stem convention
@@ -175,4 +213,4 @@ export function discoverOwnedComponents(coreDir: string, loadedIntegrations?: Ar
175
213
  issuesUrl: string | undefined;
176
214
  }>;
177
215
  /** The owner package name for built-in (core) components. */
178
- export const CORE_PACKAGE: "@astryxdesign/core";
216
+ export const CORE_PACKAGE: import("../../authoring/index.js").ProviderId;
@@ -7,11 +7,13 @@
7
7
  import * as fs from 'node:fs';
8
8
  import * as path from 'node:path';
9
9
  import {existsCaseExact} from '../fs/paths.mjs';
10
+ import {CORE_PROVIDER_ID} from '../identity/providers.mjs';
11
+ import {loadComponentDoc} from './component-loader.mjs';
10
12
 
11
13
  const SKIP_DIRS = new Set(['hooks', 'utils', '__tests__', 'node_modules']);
12
14
 
13
15
  /** The owner package name for built-in (core) components. */
14
- export const CORE_PACKAGE = '@astryxdesign/core';
16
+ export const CORE_PACKAGE = CORE_PROVIDER_ID;
15
17
 
16
18
  /** Conventional doc-file suffixes for integration components (same-stem). */
17
19
  const INTEGRATION_DOC_SUFFIXES = ['.doc.ts', '.doc.mjs', '.doc.js'];
@@ -691,6 +693,53 @@ export function discoverIntegrationComponents(integration) {
691
693
  return [...byName.values()];
692
694
  }
693
695
 
696
+ /**
697
+ * Load and validate every discovered integration component independently.
698
+ * Invalid metadata or a missing same-stem source removes only that component;
699
+ * callers can report the returned errors while retaining valid siblings.
700
+ *
701
+ * @param {{name: string, components?: string, issuesUrl?: string}} integration
702
+ * @returns {Promise<{
703
+ * components: Array<{name: string, package: string, docPath: string, sourcePath: string, issuesUrl: string|undefined, group: string|null}>,
704
+ * discovered: Array<{name: string, package: string, docPath: string, sourcePath: string|null, issuesUrl: string|undefined, group: string|null}>,
705
+ * errors: Array<{name: string, message: string}>,
706
+ * }>}
707
+ */
708
+ export async function discoverValidIntegrationComponents(integration) {
709
+ const discovered = discoverIntegrationComponents(integration);
710
+ /** @type {Array<{name: string, package: string, docPath: string, sourcePath: string, issuesUrl: string|undefined, group: string|null}>} */
711
+ const components = [];
712
+ /** @type {Array<{name: string, message: string}>} */
713
+ const errors = [];
714
+
715
+ for (const record of discovered) {
716
+ if (record.sourcePath == null) {
717
+ errors.push({
718
+ name: record.name,
719
+ message: `Component "${record.name}" is missing its same-stem source file ${record.name}.tsx.`,
720
+ });
721
+ continue;
722
+ }
723
+ try {
724
+ await loadComponentDoc(record.docPath);
725
+ components.push(
726
+ /** @type {{name: string, package: string, docPath: string, sourcePath: string, issuesUrl: string|undefined, group: string|null}} */ (
727
+ record
728
+ ),
729
+ );
730
+ } catch (err) {
731
+ errors.push({
732
+ name: record.name,
733
+ message: `Component "${record.name}" has invalid metadata: ${
734
+ err instanceof Error ? err.message : String(err)
735
+ }`,
736
+ });
737
+ }
738
+ }
739
+
740
+ return {components, discovered, errors};
741
+ }
742
+
694
743
  /**
695
744
  * Find an integration component's doc file by name within a loaded
696
745
  * integration's resolved `components` dir. Honors the same-stem convention
@@ -2,49 +2,46 @@
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
4
  /**
5
- * Load a component doc through the shared load/validation boundary.
5
+ * Load a component or hook doc and check it against its kind's parser.
6
6
  *
7
- * This is the typed counterpart to {@link loadDocs}: it loads `.doc.ts` via
8
- * jiti (and `.doc.mjs`/`.doc.js` via native import) and validates via
9
- * `parseDoc`, which accepts BOTH formats, so this loader reads whichever the
10
- * file uses:
11
- * - NEW: a stamped default export (`export default {type: 'component', ...}`
12
- * / `'function'` / `'generic'`) — the same single-export convention the
13
- * other authoring parsers use for config/integration/template. These carry
14
- * a stamped `type` and validate against the matching per-kind parser.
15
- * - OLD: the legacy loose `export const docs = {...}` (no `type`), validated
16
- * against the permissive legacy union.
17
- * The default export wins when both are present. Throws a readable
18
- * `formatZodError`-style message on failure. Translations (`docsZh`/
19
- * `docsDense`) are merged exactly as {@link loadDocs} does so callers see
20
- * identical output.
7
+ * Reads `.doc.ts` through jiti and `.doc.mjs`/`.doc.js` natively. Both formats
8
+ * load: a stamped default export (`export default {type: 'component', ...}`)
9
+ * checked against its kind, and the legacy `export const docs = {...}` checked
10
+ * against the permissive legacy union. The default export wins when both are
11
+ * present. Throws the parser's readable message when the doc fails.
21
12
  *
22
13
  * @param {string} docPath absolute path to a `.doc.{ts,mjs,js}` file
23
- * @param {{zh?: boolean, dense?: boolean, lang?: string}} [opts]
24
- * @returns {Promise<object>} the validated (and optionally translated) doc
14
+ * @param {LoadDocOptions} [opts]
15
+ * @returns {Promise<any>} the checked (and optionally translated) doc
25
16
  */
26
- export function loadComponentDoc(docPath: string, { zh, dense, lang }?: {
27
- zh?: boolean;
28
- dense?: boolean;
29
- lang?: string;
30
- }): Promise<object>;
17
+ export function loadComponentDoc(docPath: string, opts?: LoadDocOptions): Promise<any>;
31
18
  /**
32
- * @param {any} docs
33
- * @param {any} translation
34
- * @returns {any}
35
- */
36
- export function mergeTranslation(docs: any, translation: any): any;
37
- /**
38
- * Load the typed docs object from a .doc.mjs file.
39
- * Supports --lang flag: 'zh' for Chinese, 'dense' for compressed format.
40
- * Also supports legacy --zh and --dense flags.
41
- * Translations are merged onto the base docs, keeping structure intact.
19
+ * Load a component or hook doc without checking it. Supports `lang` ('zh' for
20
+ * Chinese, 'dense' for compressed) and the legacy `zh`/`dense` flags; the
21
+ * translation is laid over the doc, keeping its structure. A file that exports
22
+ * no doc reads as `undefined`.
42
23
  * @param {string} readmePath
43
- * @param {{zh?: boolean, dense?: boolean, lang?: string}} [opts]
24
+ * @param {LoadDocOptions} [opts]
44
25
  * @returns {Promise<any>}
45
26
  */
46
- export function loadDocs(readmePath: string, { zh, dense, lang }?: {
47
- zh?: boolean;
48
- dense?: boolean;
49
- lang?: string;
50
- }): Promise<any>;
27
+ export function loadDocs(readmePath: string, opts?: LoadDocOptions): Promise<any>;
28
+ export { mergeTranslation } from "../doc-compiler/overlays.mjs";
29
+ export type LoadDocOptions = {
30
+ /**
31
+ * legacy flag for `lang: 'zh'`
32
+ */
33
+ zh?: boolean | undefined;
34
+ /**
35
+ * legacy flag for `lang: 'dense'`
36
+ */
37
+ dense?: boolean | undefined;
38
+ /**
39
+ * wins over the legacy flags
40
+ */
41
+ lang?: string | null | undefined;
42
+ /**
43
+ * which root reads the doc
44
+ * (default: components)
45
+ */
46
+ root?: "hooks" | "components" | undefined;
47
+ };