@astryxdesign/cli 0.6.3-canary.98a2e4e → 0.6.3-canary.9c4d44d

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 (612) hide show
  1. package/README.md +117 -79
  2. package/api/blog/blog.doc.mjs +1 -0
  3. package/api/build/_adapter.d.mts +50 -0
  4. package/api/build/_adapter.mjs +60 -0
  5. package/api/build/build.doc.mjs +16 -9
  6. package/api/build/build.test.mjs +197 -8
  7. package/api/build/build.type.d.mts +91 -2
  8. package/api/build/build.type.mjs +52 -8
  9. package/api/build/help/help.d.mts +12 -5
  10. package/api/build/help/help.mjs +69 -6
  11. package/api/build/kit/kit.d.mts +4 -1
  12. package/api/build/kit/kit.mjs +165 -49
  13. package/api/build/kit/rank.d.mts +44 -0
  14. package/api/build/kit/rank.mjs +432 -0
  15. package/api/build/kit/rank.test.mjs +196 -0
  16. package/api/component/_adapter.d.mts +6 -12
  17. package/api/component/_adapter.mjs +20 -10
  18. package/api/component/component.doc.mjs +13 -3
  19. package/api/component/component.mjs +91 -14
  20. package/api/component/component.test.mjs +38 -0
  21. package/api/component/component.type.d.mts +22 -11
  22. package/api/component/component.type.mjs +32 -24
  23. package/api/component/detail/blocks/blocks.d.mts +2 -1
  24. package/api/component/detail/blocks/blocks.mjs +4 -3
  25. package/api/component/list/list.d.mts +0 -5
  26. package/api/component/list/list.mjs +40 -11
  27. package/api/discover/_adapter.d.mts +114 -6
  28. package/api/discover/_adapter.mjs +372 -17
  29. package/api/discover/_adapter.test.mjs +215 -0
  30. package/api/discover/_catalog-view.d.mts +115 -0
  31. package/api/discover/_catalog-view.mjs +203 -0
  32. package/api/discover/_catalog-view.test.mjs +128 -0
  33. package/api/discover/detail/detail.d.mts +18 -6
  34. package/api/discover/detail/detail.mjs +67 -13
  35. package/api/discover/detail/detail.test.mjs +85 -0
  36. package/api/discover/detail/item/item.d.mts +26 -0
  37. package/api/discover/detail/item/item.mjs +78 -0
  38. package/api/discover/detail/item/item.test.mjs +73 -0
  39. package/api/discover/discover.d.mts +3 -9
  40. package/api/discover/discover.doc.mjs +62 -18
  41. package/api/discover/discover.mjs +220 -36
  42. package/api/discover/discover.test.mjs +11 -2
  43. package/api/discover/discover.type.d.mts +150 -11
  44. package/api/discover/discover.type.mjs +107 -17
  45. package/api/discover/list/list.d.mts +20 -6
  46. package/api/discover/list/list.mjs +45 -12
  47. package/api/discover/list/list.test.mjs +46 -0
  48. package/api/discover/search/search.d.mts +18 -16
  49. package/api/discover/search/search.mjs +102 -56
  50. package/api/discover/search/search.test.mjs +144 -10
  51. package/api/docs/_adapter.d.mts +268 -47
  52. package/api/docs/_adapter.mjs +970 -149
  53. package/api/docs/compiled-topics.test.mjs +78 -0
  54. package/api/docs/detail/detail.d.mts +0 -15
  55. package/api/docs/detail/detail.mjs +22 -78
  56. package/api/docs/detail/section/section.mjs +39 -24
  57. package/api/docs/detail/section/section.test.mjs +19 -9
  58. package/api/docs/docs.d.mts +5 -3
  59. package/api/docs/docs.doc.mjs +39 -17
  60. package/api/docs/docs.mjs +44 -8
  61. package/api/docs/docs.test.mjs +158 -4
  62. package/api/docs/docs.type.d.mts +185 -6
  63. package/api/docs/docs.type.mjs +127 -13
  64. package/api/docs/index/index.mjs +15 -6
  65. package/api/docs/index/index.test.mjs +1 -1
  66. package/api/docs/integration-tree.test.mjs +555 -0
  67. package/api/docs/integrationDocs.test.mjs +14 -14
  68. package/api/docs/list/list.mjs +28 -12
  69. package/api/docs/node/node.d.mts +43 -0
  70. package/api/docs/node/node.mjs +192 -0
  71. package/api/docs/reference-blocks.test.mjs +406 -0
  72. package/api/doctor/doctor.d.mts +54 -4
  73. package/api/doctor/doctor.doc.mjs +1 -0
  74. package/api/doctor/doctor.mjs +332 -21
  75. package/api/doctor/doctor.test.mjs +420 -7
  76. package/api/gap-report/gap-report.doc.mjs +8 -4
  77. package/api/hook/_adapter.mjs +19 -5
  78. package/api/hook/hook.doc.mjs +1 -0
  79. package/api/hook/hook.type.d.mts +3 -3
  80. package/api/hook/hook.type.mjs +11 -11
  81. package/api/hook/list/list.d.mts +1 -1
  82. package/api/hook/list/list.mjs +69 -17
  83. package/api/index.d.mts +1 -1
  84. package/api/index.mjs +1 -0
  85. package/api/init/init.doc.mjs +6 -1
  86. package/api/init/init.test.mjs +41 -1
  87. package/api/init/remove/remove.mjs +1 -1
  88. package/api/init/run/run.mjs +20 -10
  89. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  90. package/api/integration/add-contribution.d.mts +2 -1
  91. package/api/integration/add-contribution.mjs +130 -15
  92. package/api/integration/add-contribution.test.mjs +258 -7
  93. package/api/integration/add-helpers.d.mts +5 -2
  94. package/api/integration/add-helpers.mjs +36 -9
  95. package/api/integration/add-theme.mjs +34 -64
  96. package/api/integration/add-theme.test.mjs +105 -21
  97. package/api/integration/authoring-checks.mjs +138 -28
  98. package/api/integration/authoring-checks.test.mjs +179 -7
  99. package/api/integration/authoring-checks.type.mjs +6 -1
  100. package/api/integration/integration-authoring.type.d.mts +2 -0
  101. package/api/integration/integration-authoring.type.mjs +2 -0
  102. package/api/integration/integration-block-exports.test.mjs +10 -6
  103. package/api/integration/integrationAdd.doc.mjs +14 -4
  104. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  105. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  106. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  107. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  108. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  109. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  110. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  111. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  112. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  113. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  114. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  115. package/api/integration/pack-check.mjs +83 -7
  116. package/api/integration/pack-check.test.mjs +387 -47
  117. package/api/integration/pack-check.type.d.mts +26 -2
  118. package/api/integration/pack-check.type.mjs +14 -1
  119. package/api/integration/summarizeIssues.doc.mjs +1 -0
  120. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  121. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  122. package/api/integration/validate-integration.mjs +52 -102
  123. package/api/integration/validate-integration.test.mjs +179 -26
  124. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  125. package/api/integration/validateIntegration.doc.mjs +3 -2
  126. package/api/json/assertResponse.doc.mjs +1 -0
  127. package/api/json/envelope-types.test.mjs +76 -0
  128. package/api/json/index.ts +2 -0
  129. package/api/json/isError.doc.mjs +1 -0
  130. package/api/json/parseResponse.doc.mjs +3 -2
  131. package/api/layout/_adapter.mjs +20 -5
  132. package/api/layout/expand/expand.mjs +7 -5
  133. package/api/layout/expand/expand.path-safety.test.mjs +53 -0
  134. package/api/layout/grammar/grammar.mjs +2 -1
  135. package/api/layout/layoutCheck.doc.mjs +1 -0
  136. package/api/layout/layoutExpand.doc.mjs +2 -1
  137. package/api/layout/layoutGrammar.doc.mjs +1 -0
  138. package/api/search/search-return-type.test.mjs +54 -0
  139. package/api/search/search.d.mts +61 -10
  140. package/api/search/search.doc.mjs +8 -2
  141. package/api/search/search.mjs +471 -83
  142. package/api/search/search.test.mjs +124 -1
  143. package/api/search/search.type.d.mts +14 -2
  144. package/api/search/search.type.mjs +5 -2
  145. package/api/swizzle/copy/copy.mjs +28 -11
  146. package/api/swizzle/swizzle.doc.mjs +2 -1
  147. package/api/swizzle/swizzle.type.d.mts +2 -2
  148. package/api/swizzle/swizzle.type.mjs +2 -2
  149. package/api/template/copy/copy.mjs +17 -23
  150. package/api/template/copy/copy.test.mjs +17 -0
  151. package/api/template/list/list.mjs +1 -0
  152. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  153. package/api/template/template-integration.test.mjs +1072 -3
  154. package/api/template/template-suffix.test.mjs +41 -21
  155. package/api/template/template.doc.mjs +30 -8
  156. package/api/template/template.mjs +45 -8
  157. package/api/template/template.type.d.mts +11 -13
  158. package/api/template/template.type.mjs +15 -14
  159. package/api/theme/_adapter.d.mts +2 -3
  160. package/api/theme/_adapter.mjs +4 -5
  161. package/api/theme/add/add.binary.test.mjs +84 -0
  162. package/api/theme/add/add.mjs +31 -22
  163. package/api/theme/add/add.rollback.test.mjs +158 -0
  164. package/api/theme/add/add.staging.test.mjs +83 -0
  165. package/api/theme/add/add.test.mjs +14 -1
  166. package/api/theme/build/build.family.test.mjs +7 -12
  167. package/api/theme/build/build.mjs +140 -59
  168. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  169. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  170. package/api/theme/build/build.rollback.test.mjs +148 -0
  171. package/api/theme/build/build.test.mjs +127 -0
  172. package/api/theme/build/font-warning.mjs +3 -3
  173. package/api/theme/build/font-warning.test.mjs +5 -2
  174. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  175. package/api/theme/integration-themes.test.mjs +39 -28
  176. package/api/theme/list/list.test.mjs +19 -20
  177. package/api/theme/listThemes.doc.mjs +6 -5
  178. package/api/theme/palette/generate/generate.mjs +8 -3
  179. package/api/theme/palette/generate/generate.test.mjs +96 -0
  180. package/api/theme/palette/generate/generator.d.mts +10 -13
  181. package/api/theme/palette/generate/generator.mjs +15 -4
  182. package/api/theme/palette/generate/generator.test.mjs +10 -0
  183. package/api/theme/template/template.mjs +11 -2
  184. package/api/theme/template/template.test.mjs +20 -0
  185. package/api/theme/theme.type.d.mts +170 -11
  186. package/api/theme/theme.type.mjs +94 -27
  187. package/api/theme/themeAdd.doc.mjs +4 -3
  188. package/api/theme/themeBuild.doc.mjs +8 -4
  189. package/api/theme/themeList.doc.mjs +6 -3
  190. package/api/theme/themeListAvailable.doc.mjs +5 -3
  191. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  192. package/api/theme/themeTargets.doc.mjs +1 -0
  193. package/api/theme/themeTemplate.doc.mjs +6 -2
  194. package/api/upgrade/_adapter.d.mts +32 -5
  195. package/api/upgrade/_adapter.mjs +124 -73
  196. package/api/upgrade/list/list.mjs +2 -1
  197. package/api/upgrade/list/list.test.mjs +73 -0
  198. package/api/upgrade/provider-agreement.test.mjs +152 -0
  199. package/api/upgrade/run/run.mjs +356 -59
  200. package/api/upgrade/status/status.mjs +2 -2
  201. package/api/upgrade/upgrade.doc.mjs +8 -2
  202. package/api/upgrade/upgrade.type.d.mts +42 -4
  203. package/api/upgrade/upgrade.type.mjs +26 -10
  204. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  205. package/assets/codemods/integration-discovery.mjs +48 -4
  206. package/assets/codemods/integration-discovery.test.mjs +73 -0
  207. package/assets/codemods/integration-runner.mjs +56 -4
  208. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  209. package/assets/codemods/run-codemod.mjs +177 -34
  210. package/assets/codemods/runner.mjs +350 -102
  211. package/assets/codemods/term-log.mjs +32 -8
  212. package/assets/codemods/term-log.test.mjs +19 -1
  213. package/assets/codemods/transform-prop.mjs +109 -0
  214. package/assets/codemods/transform-prop.test.mjs +95 -0
  215. package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  216. package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  217. package/assets/codemods/transforms/next/index.mjs +19 -1
  218. package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
  219. package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
  220. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  221. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  222. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  223. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  224. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  225. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  226. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  227. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  228. package/assets/docs/getting-started.doc.mjs +2 -2
  229. package/assets/docs/internationalization.doc.mjs +7 -5
  230. package/assets/docs/layout.doc.dense.mjs +2 -2
  231. package/assets/docs/layout.doc.mjs +1 -1
  232. package/assets/docs/principles.doc.mjs +6 -6
  233. package/assets/docs/styling-libraries.doc.mjs +4 -4
  234. package/assets/docs/styling.doc.mjs +4 -4
  235. package/assets/docs/theme.doc.mjs +5 -5
  236. package/assets/docs/tokens.doc.mjs +1 -1
  237. package/assets/docs/tree/api.doc.mjs +30 -0
  238. package/assets/docs/tree/cli.doc.mjs +23 -0
  239. package/assets/docs/tree/commands.doc.mjs +25 -0
  240. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +95 -39
  241. package/assets/docs/tree/integrations.test.mjs +62 -0
  242. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  243. package/assets/docs/working-with-ai.doc.mjs +4 -4
  244. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  245. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  246. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  247. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  248. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  249. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  250. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  251. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  252. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  253. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  254. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  255. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  256. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  257. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  258. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  259. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  260. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  261. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  262. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  263. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  264. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  265. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  266. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  267. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  268. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  269. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  270. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  271. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  272. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  273. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  274. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  275. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  276. package/authoring/_shared/contract.ts +22 -0
  277. package/authoring/codemod/codemod.doc.mjs +7 -2
  278. package/authoring/codemod/parse.d.mts +8 -8
  279. package/authoring/codemod/parse.mjs +8 -6
  280. package/authoring/codemod/type.ts +12 -0
  281. package/authoring/config/config.doc.mjs +10 -2
  282. package/authoring/config/debug-composition.test.mjs +92 -0
  283. package/authoring/config/parse.d.mts +15 -13
  284. package/authoring/config/parse.mjs +27 -8
  285. package/authoring/config/parse.test.mjs +8 -0
  286. package/authoring/config/type.ts +29 -6
  287. package/authoring/debug/debug.doc.d.mts +11 -0
  288. package/authoring/debug/debug.doc.mjs +182 -0
  289. package/authoring/debug/parse.d.mts +7 -7
  290. package/authoring/debug/parse.mjs +3 -3
  291. package/authoring/discover/discover.doc.d.mts +13 -0
  292. package/authoring/discover/discover.doc.mjs +138 -0
  293. package/authoring/discover/parse.d.mts +24 -0
  294. package/authoring/discover/parse.mjs +128 -0
  295. package/authoring/discover/parse.test.mjs +124 -0
  296. package/authoring/discover/type.ts +87 -0
  297. package/authoring/doctypes/_schema.d.mts +240 -128
  298. package/authoring/doctypes/_schema.mjs +198 -16
  299. package/authoring/doctypes/base/graph-fields.doc.mjs +15 -6
  300. package/authoring/doctypes/base/type.ts +9 -4
  301. package/authoring/doctypes/command/command.doc.mjs +4 -3
  302. package/authoring/doctypes/command/parse.d.mts +2 -2
  303. package/authoring/doctypes/command/parse.mjs +1 -1
  304. package/authoring/doctypes/command/type.ts +4 -4
  305. package/authoring/doctypes/component/component.doc.mjs +5 -2
  306. package/authoring/doctypes/component/parse.d.mts +2 -2
  307. package/authoring/doctypes/component/parse.mjs +1 -1
  308. package/authoring/doctypes/component/type.ts +3 -3
  309. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  310. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  311. package/authoring/doctypes/enum/parse.d.mts +2 -2
  312. package/authoring/doctypes/enum/parse.mjs +1 -1
  313. package/authoring/doctypes/enum/type.ts +2 -2
  314. package/authoring/doctypes/function/function.doc.mjs +7 -2
  315. package/authoring/doctypes/function/parse.d.mts +2 -2
  316. package/authoring/doctypes/function/parse.mjs +1 -1
  317. package/authoring/doctypes/function/type.ts +4 -3
  318. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  319. package/authoring/doctypes/hook/parse.d.mts +2 -2
  320. package/authoring/doctypes/hook/parse.mjs +1 -1
  321. package/authoring/doctypes/hook/type.ts +3 -3
  322. package/authoring/doctypes/legacy.d.mts +6 -6
  323. package/authoring/doctypes/legacy.mjs +3 -3
  324. package/authoring/doctypes/load-contract.test.mjs +233 -0
  325. package/authoring/doctypes/namespace/namespace.doc.mjs +9 -9
  326. package/authoring/doctypes/namespace/parse.d.mts +2 -2
  327. package/authoring/doctypes/namespace/parse.mjs +1 -1
  328. package/authoring/doctypes/namespace/parse.test.mjs +23 -25
  329. package/authoring/doctypes/namespace/type.ts +6 -3
  330. package/authoring/doctypes/parse.d.mts +22 -20
  331. package/authoring/doctypes/parse.mjs +19 -14
  332. package/authoring/doctypes/reference/parse.d.mts +2 -2
  333. package/authoring/doctypes/reference/parse.mjs +1 -1
  334. package/authoring/doctypes/reference/reference.doc.mjs +39 -6
  335. package/authoring/doctypes/reference/type.ts +31 -14
  336. package/authoring/doctypes/schema/parse.d.mts +2 -2
  337. package/authoring/doctypes/schema/parse.mjs +1 -1
  338. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  339. package/authoring/doctypes/schema/type.ts +3 -4
  340. package/authoring/doctypes/template/parse.d.mts +94 -1
  341. package/authoring/doctypes/template/parse.mjs +37 -1
  342. package/authoring/doctypes/template/parse.test.mjs +18 -0
  343. package/authoring/doctypes/template/template.doc.mjs +13 -3
  344. package/authoring/doctypes/template/type.ts +12 -1
  345. package/authoring/doctypes/theme/parse.d.mts +35 -0
  346. package/authoring/doctypes/theme/parse.mjs +76 -0
  347. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  348. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  349. package/authoring/doctypes/theme/type.ts +42 -0
  350. package/authoring/doctypes/types.ts +12 -11
  351. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  352. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  353. package/authoring/gap-report/parse.d.mts +9 -9
  354. package/authoring/gap-report/parse.mjs +6 -6
  355. package/authoring/gap-report/type.ts +1 -1
  356. package/authoring/identity/identity.doc.mjs +3 -2
  357. package/authoring/identity/type.ts +10 -10
  358. package/authoring/index.d.mts +2 -0
  359. package/authoring/index.d.ts +32 -19
  360. package/authoring/index.mjs +3 -1
  361. package/authoring/integration/integration.doc.mjs +2 -2
  362. package/authoring/integration/parse.d.mts +2 -2
  363. package/authoring/integration/parse.mjs +1 -1
  364. package/authoring/integration/schema.d.mts +4 -4
  365. package/authoring/integration/schema.mjs +3 -3
  366. package/authoring/integration/type.ts +5 -11
  367. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  368. package/clients/cli/command-load-failure.test.mjs +83 -0
  369. package/clients/cli/commands/blog.doc.mjs +1 -1
  370. package/clients/cli/commands/blog.mjs +23 -8
  371. package/clients/cli/commands/blog.test.mjs +42 -1
  372. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  373. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  374. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  375. package/clients/cli/commands/build-theme.mjs +16 -50
  376. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  377. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  378. package/clients/cli/commands/build.doc.mjs +16 -8
  379. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  380. package/clients/cli/commands/build.mjs +137 -114
  381. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  382. package/clients/cli/commands/build.text-fields.test.mjs +81 -0
  383. package/clients/cli/commands/component/index.mjs +3 -8
  384. package/clients/cli/commands/component-ownership.test.mjs +3 -3
  385. package/clients/cli/commands/component-package.test.mjs +46 -0
  386. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  387. package/clients/cli/commands/component.doc.mjs +1 -1
  388. package/clients/cli/commands/component.test.mjs +19 -0
  389. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  390. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  391. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  392. package/clients/cli/commands/discover.doc.mjs +55 -9
  393. package/clients/cli/commands/discover.mjs +393 -118
  394. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  395. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  396. package/clients/cli/commands/docs.doc.mjs +21 -9
  397. package/clients/cli/commands/docs.mjs +184 -70
  398. package/clients/cli/commands/docs.test.mjs +120 -16
  399. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  400. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  401. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  402. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  403. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  404. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  405. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  406. package/clients/cli/commands/doctor.doc.mjs +1 -1
  407. package/clients/cli/commands/doctor.mjs +59 -32
  408. package/clients/cli/commands/doctor.test.mjs +42 -0
  409. package/clients/cli/commands/gap-report.doc.mjs +17 -6
  410. package/clients/cli/commands/gap-report.test.mjs +72 -0
  411. package/clients/cli/commands/hook/index.mjs +7 -17
  412. package/clients/cli/commands/hook.doc.mjs +1 -1
  413. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  414. package/clients/cli/commands/init.doc.mjs +20 -9
  415. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  416. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  417. package/clients/cli/commands/integration-add.doc.mjs +32 -6
  418. package/clients/cli/commands/integration-authoring.test.mjs +13 -9
  419. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  420. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  421. package/clients/cli/commands/integration.doc.mjs +1 -1
  422. package/clients/cli/commands/integration.mjs +1 -0
  423. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  424. package/clients/cli/commands/json-contract.test.mjs +33 -0
  425. package/clients/cli/commands/layout-check.doc.mjs +15 -4
  426. package/clients/cli/commands/layout-expand.doc.mjs +22 -5
  427. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  428. package/clients/cli/commands/layout.doc.mjs +3 -3
  429. package/clients/cli/commands/layout.mjs +21 -9
  430. package/clients/cli/commands/layout.path-help.test.mjs +33 -0
  431. package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
  432. package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
  433. package/clients/cli/commands/manifest.doc.mjs +1 -1
  434. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  435. package/clients/cli/commands/search.doc.mjs +7 -4
  436. package/clients/cli/commands/search.mjs +28 -9
  437. package/clients/cli/commands/search.test.mjs +75 -0
  438. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  439. package/clients/cli/commands/swizzle.doc.mjs +3 -2
  440. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  441. package/clients/cli/commands/template.doc.mjs +52 -13
  442. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  443. package/clients/cli/commands/template.mjs +4 -91
  444. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  445. package/clients/cli/commands/text-json-parity.test.mjs +719 -0
  446. package/clients/cli/commands/theme-add.doc.mjs +4 -3
  447. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  448. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  449. package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
  450. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  451. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  452. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  453. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  454. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  455. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  456. package/clients/cli/commands/theme.doc.mjs +1 -1
  457. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  458. package/clients/cli/commands/upgrade.doc.mjs +20 -8
  459. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  460. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  461. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  462. package/clients/cli/commands/upgrade.mjs +29 -7
  463. package/clients/cli/formatters/index.mjs +2 -0
  464. package/clients/cli/formatters/index.test.mjs +6 -0
  465. package/clients/cli/index.mjs +21 -30
  466. package/clients/cli/latest-version-env.test.mjs +50 -0
  467. package/clients/cli/lib/cli-error.test.mjs +7 -0
  468. package/clients/cli/lib/component-format.mjs +9 -9
  469. package/clients/cli/lib/component-format.test.mjs +1 -1
  470. package/clients/cli/lib/define-command.mjs +32 -6
  471. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  472. package/clients/cli/lib/exit-codes.test.mjs +97 -0
  473. package/clients/cli/lib/hook-format.mjs +19 -10
  474. package/clients/cli/lib/json-shim.mjs +38 -2
  475. package/clients/cli/lib/json-shim.test.mjs +83 -0
  476. package/clients/cli/lib/manifest.d.ts +2 -0
  477. package/clients/cli/lib/manifest.mjs +32 -2
  478. package/clients/cli/lib/manifest.test.mjs +17 -0
  479. package/foundation/agent-docs/agent-docs.d.mts +7 -2
  480. package/foundation/agent-docs/agent-docs.mjs +82 -12
  481. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  482. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  483. package/foundation/config/integration-debug.test.mjs +28 -3
  484. package/foundation/config/project-themes.test.mjs +11 -19
  485. package/foundation/config/project.d.mts +20 -11
  486. package/foundation/config/project.mjs +246 -89
  487. package/foundation/config/project.test.mjs +270 -21
  488. package/foundation/discovery/authoring-self-docs.d.mts +18 -0
  489. package/foundation/discovery/authoring-self-docs.mjs +38 -15
  490. package/foundation/discovery/authoring-self-docs.test.mjs +87 -12
  491. package/foundation/discovery/authoring-surface.d.mts +74 -0
  492. package/foundation/discovery/authoring-surface.mjs +525 -0
  493. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  494. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  495. package/foundation/discovery/cli-self-docs.mjs +490 -0
  496. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  497. package/foundation/discovery/component-discovery.d.mts +38 -0
  498. package/foundation/discovery/component-discovery.mjs +48 -0
  499. package/foundation/discovery/component-loader.d.mts +35 -38
  500. package/foundation/discovery/component-loader.mjs +53 -222
  501. package/foundation/discovery/docs-discovery.d.mts +114 -9
  502. package/foundation/discovery/docs-discovery.mjs +239 -30
  503. package/foundation/discovery/docs-discovery.test.mjs +150 -35
  504. package/foundation/discovery/docs-output-budget.d.mts +2 -2
  505. package/foundation/discovery/docs-output-budget.mjs +1 -1
  506. package/foundation/discovery/docs-section-key.d.mts +28 -10
  507. package/foundation/discovery/docs-section-key.mjs +134 -33
  508. package/foundation/discovery/docs-section-key.test.mjs +41 -19
  509. package/foundation/discovery/template-adapter.d.mts +113 -11
  510. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  511. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  512. package/foundation/discovery/template-adapter.mjs +772 -82
  513. package/foundation/discovery/template-adapter.test.mjs +57 -0
  514. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  515. package/foundation/discovery/template-conflict-release.mjs +40 -0
  516. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  517. package/foundation/discovery/theme-discovery.d.mts +67 -7
  518. package/foundation/discovery/theme-discovery.mjs +916 -186
  519. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  520. package/foundation/discovery/theming-targets.test.mjs +4 -0
  521. package/foundation/doc-compiler/bundle.d.mts +47 -0
  522. package/foundation/doc-compiler/bundle.mjs +278 -0
  523. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  524. package/foundation/doc-compiler/compile.d.mts +343 -0
  525. package/foundation/doc-compiler/compile.mjs +558 -0
  526. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  527. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  528. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  529. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  530. package/foundation/doc-compiler/import.d.mts +24 -0
  531. package/foundation/doc-compiler/import.mjs +59 -0
  532. package/foundation/doc-compiler/inputs.d.mts +102 -0
  533. package/foundation/doc-compiler/inputs.mjs +291 -0
  534. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  535. package/foundation/doc-compiler/ir.d.mts +22 -0
  536. package/foundation/doc-compiler/ir.mjs +471 -0
  537. package/foundation/doc-compiler/lenses.d.mts +36 -0
  538. package/foundation/doc-compiler/lenses.mjs +173 -0
  539. package/foundation/doc-compiler/links.d.mts +162 -0
  540. package/foundation/doc-compiler/links.mjs +294 -0
  541. package/foundation/doc-compiler/links.test.mjs +192 -0
  542. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  543. package/foundation/doc-compiler/overlays.d.mts +37 -0
  544. package/foundation/doc-compiler/overlays.mjs +206 -0
  545. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  546. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  547. package/foundation/doc-compiler/read.d.mts +127 -0
  548. package/foundation/doc-compiler/read.mjs +325 -0
  549. package/foundation/doc-compiler/read.test.mjs +313 -0
  550. package/foundation/doc-compiler/source.d.mts +33 -0
  551. package/foundation/doc-compiler/source.mjs +128 -0
  552. package/foundation/doc-compiler/tree.d.mts +288 -0
  553. package/foundation/doc-compiler/tree.mjs +876 -0
  554. package/foundation/doc-compiler/tree.test.mjs +598 -0
  555. package/foundation/fs/file-protection.d.mts +33 -0
  556. package/foundation/fs/file-protection.mjs +825 -0
  557. package/foundation/fs/file-protection.test.mjs +250 -0
  558. package/foundation/fs/module-loader.d.mts +1 -0
  559. package/foundation/fs/module-loader.mjs +50 -1
  560. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  561. package/foundation/fs/path-safety.d.mts +3 -2
  562. package/foundation/fs/path-safety.mjs +49 -19
  563. package/foundation/fs/path-safety.test.mjs +50 -0
  564. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  565. package/foundation/integrations/autolink.d.mts +58 -1
  566. package/foundation/integrations/autolink.mjs +143 -52
  567. package/foundation/integrations/autolink.test.mjs +1 -1
  568. package/foundation/integrations/cli-requirement.d.mts +45 -0
  569. package/foundation/integrations/cli-requirement.mjs +154 -0
  570. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  571. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  572. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  573. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  574. package/foundation/integrations/contribution-inventory.mjs +27 -24
  575. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  576. package/foundation/integrations/integration-warnings.d.mts +9 -2
  577. package/foundation/integrations/integration-warnings.mjs +51 -26
  578. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  579. package/foundation/integrations/integrations.d.mts +17 -1
  580. package/foundation/integrations/integrations.mjs +52 -98
  581. package/foundation/integrations/integrations.test.mjs +31 -0
  582. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  583. package/foundation/integrations/provider-resolution.d.mts +152 -0
  584. package/foundation/integrations/provider-resolution.mjs +576 -0
  585. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  586. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  587. package/foundation/integrations/theme-descriptor.mjs +44 -0
  588. package/foundation/integrations/validate-contributions.mjs +121 -29
  589. package/foundation/response/base.d.ts +8 -4
  590. package/foundation/response/error-codes.d.mts +3 -1
  591. package/foundation/response/error-codes.d.ts +2 -0
  592. package/foundation/response/error-codes.doc.mjs +13 -4
  593. package/foundation/response/error-codes.mjs +8 -2
  594. package/foundation/response/error-codes.test.mjs +137 -10
  595. package/foundation/response/json-contract.test.mjs +11 -0
  596. package/foundation/response/json.d.mts +4 -2
  597. package/foundation/response/json.mjs +8 -10
  598. package/foundation/response/response-types.doc.d.mts +5 -1
  599. package/foundation/response/response-types.doc.mjs +37 -22
  600. package/foundation/response/response-types.doc.test.mjs +158 -0
  601. package/foundation/response/response.doc.mjs +1 -1
  602. package/foundation/text/string-utils.d.mts +8 -0
  603. package/foundation/text/string-utils.mjs +40 -10
  604. package/foundation/xle/expand.d.mts +2 -0
  605. package/foundation/xle/expand.mjs +4 -3
  606. package/foundation/xle/expand.test.mjs +54 -0
  607. package/foundation/xle/xle.test.mjs +13 -0
  608. package/package.json +10 -11
  609. package/assets/templates/themes/manifest.json +0 -95
  610. package/clients/cli/lib/update-check.mjs +0 -83
  611. package/clients/cli/lib/update-check.test.mjs +0 -137
  612. package/clients/cli/update-hint-commands.test.mjs +0 -54
@@ -1,7 +1,7 @@
1
1
  // @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
- /** @typedef {import('../types').EnumDoc} EnumDoc */
4
+ /** @typedef {import('../types.js').EnumDoc} EnumDoc */
5
5
  /**
6
6
  * Validate an unknown value as a stamped enum doc, or throw.
7
7
  *
@@ -10,4 +10,4 @@
10
10
  * @returns {EnumDoc}
11
11
  */
12
12
  export function parseEnum(input: unknown, label?: string): EnumDoc;
13
- export type EnumDoc = import("../types").EnumDoc;
13
+ export type EnumDoc = import("../types.js").EnumDoc;
@@ -8,7 +8,7 @@
8
8
  import {EnumDocKindSchema} from '../_schema.mjs';
9
9
  import {formatZodError} from '../../_shared/errors.mjs';
10
10
 
11
- /** @typedef {import('../types').EnumDoc} EnumDoc */
11
+ /** @typedef {import('../types.js').EnumDoc} EnumDoc */
12
12
 
13
13
  /**
14
14
  * Validate an unknown value as a stamped enum doc, or throw.
@@ -5,7 +5,7 @@
5
5
  * discriminants). Colocated next to the source of truth it documents.
6
6
  */
7
7
 
8
- import type {AuthoredDocGraphFields} from '../base/type';
8
+ import type {AuthoredDocGraphFields} from '../base/type.js';
9
9
 
10
10
  /** One member of an enumerated vocabulary. */
11
11
  export interface EnumMemberDoc {
@@ -32,7 +32,7 @@ export interface EnumDoc extends AuthoredDocGraphFields {
32
32
  displayName: string;
33
33
  /** One-line summary shown in listings. */
34
34
  description: string;
35
- /** Docs namespace path. Defaults to 'cli' when applied by the docs index. */
35
+ /** The group that reads this doc. The CLI's enums use 'cli/api', which the docs tree adopts by kind: each is the leaf `cli/api/enums/<name>`. Every enum doc the CLI ships declares one, and `astryx doctor` fails on one that is missing or that nothing reads. */
36
36
  namespace?: string;
37
37
  /** Alternate slugs that also resolve to this doc. */
38
38
  aliases?: string[];
@@ -57,7 +57,7 @@ export const doc = {
57
57
  name: 'namespace',
58
58
  type: 'string',
59
59
  description:
60
- "Docs namespace path. Defaults (e.g. 'cli/api') applied by the docs index.",
60
+ "Optional in the type, but every doc the CLI ships declares it. The group that reads this doc. The CLI's API functions use 'cli/api', which the docs tree adopts by kind: each is the leaf `cli/api/functions/<name>`. Every function doc the CLI ships declares one, and `astryx doctor` fails on one that is missing or that nothing reads.",
61
61
  },
62
62
  {
63
63
  name: 'aliases',
@@ -201,7 +201,8 @@ export const doc = {
201
201
  {
202
202
  name: 'related',
203
203
  type: 'string[]',
204
- description: 'Related function/command names.',
204
+ description:
205
+ 'Related function names; the CLI links each to its doc. Name the CLI command with `command`, not here.',
205
206
  },
206
207
  {
207
208
  name: 'relatedComponents',
@@ -250,6 +251,10 @@ export const doc = {
250
251
  },
251
252
  ],
252
253
  notes: [
254
+ {
255
+ type: 'prose',
256
+ text: 'When it loads, a stamped function doc may leave out `displayName`, and its `usage` is not checked. Write to the type anyway; it is the contract.',
257
+ },
253
258
  {
254
259
  type: 'prose',
255
260
  text: "The `type` discriminant is 'function' for both flavors. Set `kind: 'hook'` or `kind: 'api'` to drive docsite sectioning; it is inferred from `importPath` when omitted.",
@@ -1,7 +1,7 @@
1
1
  // @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
- /** @typedef {import('../types').FunctionDoc} FunctionDoc */
4
+ /** @typedef {import('../types.js').FunctionDoc} FunctionDoc */
5
5
  /**
6
6
  * Validate an unknown value as a stamped function doc, or throw.
7
7
  *
@@ -10,4 +10,4 @@
10
10
  * @returns {FunctionDoc}
11
11
  */
12
12
  export function parseFunction(input: unknown, label?: string): FunctionDoc;
13
- export type FunctionDoc = import("../types").FunctionDoc;
13
+ export type FunctionDoc = import("../types.js").FunctionDoc;
@@ -14,7 +14,7 @@
14
14
 
15
15
  import {parseHook} from '../hook/parse.mjs';
16
16
 
17
- /** @typedef {import('../types').FunctionDoc} FunctionDoc */
17
+ /** @typedef {import('../types.js').FunctionDoc} FunctionDoc */
18
18
 
19
19
  /**
20
20
  * Validate an unknown value as a stamped function doc, or throw.
@@ -14,7 +14,7 @@ import type {
14
14
  AuthoredDocGraphFields,
15
15
  HookParamDoc,
16
16
  UsageDoc,
17
- } from '../base/type';
17
+ } from '../base/type.js';
18
18
 
19
19
  /**
20
20
  * A documented return. Hooks list named return fields (`name` set); CLI/API
@@ -62,7 +62,7 @@ export interface FunctionDoc extends AuthoredDocGraphFields {
62
62
  summary?: string;
63
63
  /** Longer description. */
64
64
  description?: string;
65
- /** Docs namespace path. Defaults (e.g. 'cli/api') applied by the docs index. */
65
+ /** The group that reads this doc. The CLI's API functions use 'cli/api', which the docs tree adopts by kind: each is the leaf `cli/api/functions/<name>`. Every function doc the CLI ships declares one, and `astryx doctor` fails on one that is missing or that nothing reads. */
66
66
  namespace?: string;
67
67
  /** Alternate slugs that also resolve to this doc. */
68
68
  aliases?: string[];
@@ -84,7 +84,8 @@ export interface FunctionDoc extends AuthoredDocGraphFields {
84
84
  usage?: UsageDoc;
85
85
  /** The CLI command that wraps this function, e.g. 'search'. */
86
86
  command?: string;
87
- /** Related function/command names. */
87
+ /** Related function names; the CLI links each to its doc. Name the CLI
88
+ * command with `command`, not here. */
88
89
  related?: string[];
89
90
  /** Component names this is commonly used with (hooks). */
90
91
  relatedComponents?: string[];
@@ -200,6 +200,10 @@ export const docs = {
200
200
  },
201
201
  ],
202
202
  notes: [
203
+ {
204
+ type: 'prose',
205
+ text: 'When it loads, a hook doc may leave out `displayName`, and its `usage` is not checked. Write to the type anyway; it is the contract.',
206
+ },
203
207
  {
204
208
  type: 'prose',
205
209
  text: "A hook's discriminant is `type: 'function'`: HookDoc and FunctionDoc share the generalized function kind. HookDoc is the hook-flavored view: named `returns` fields and a required `usage` block.",
@@ -1,7 +1,7 @@
1
1
  // @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
- /** @typedef {import('../types').HookDoc} HookDoc */
4
+ /** @typedef {import('../types.js').HookDoc} HookDoc */
5
5
  /**
6
6
  * Validate an unknown value as a stamped function/hook doc, or throw.
7
7
  *
@@ -10,4 +10,4 @@
10
10
  * @returns {HookDoc}
11
11
  */
12
12
  export function parseHook(input: unknown, label?: string): HookDoc;
13
- export type HookDoc = import("../types").HookDoc;
13
+ export type HookDoc = import("../types.js").HookDoc;
@@ -8,7 +8,7 @@
8
8
  import {FunctionDocKindSchema} from '../_schema.mjs';
9
9
  import {formatZodError} from '../../_shared/errors.mjs';
10
10
 
11
- /** @typedef {import('../types').HookDoc} HookDoc */
11
+ /** @typedef {import('../types.js').HookDoc} HookDoc */
12
12
 
13
13
  /**
14
14
  * Validate an unknown value as a stamped function/hook doc, or throw.
@@ -12,7 +12,7 @@ import type {
12
12
  HookReturnDoc,
13
13
  RegistryDocIdentity,
14
14
  UsageDoc,
15
- } from '../base/type';
15
+ } from '../base/type.js';
16
16
 
17
17
  /**
18
18
  * Documentation for a standalone hook's .doc.mjs file.
@@ -23,10 +23,10 @@ import type {
23
23
  * Standalone hooks (e.g. useMediaQuery, useFocusTrap, useOverflow) get
24
24
  * their own {hookName}.doc.mjs file and use this type.
25
25
  *
26
- * Every hook .doc.mjs must export a single `docs` constant:
26
+ * Every new hook .doc.mjs default-exports a stamped object:
27
27
  *
28
28
  * /\*\* @type {import('@astryxdesign/cli/authoring').HookDoc} \*\/
29
- * export const docs = { ... };
29
+ * export default { type: 'function', ... };
30
30
  */
31
31
  export interface HookDoc extends AuthoredDocGraphFields {
32
32
  /** Doc-kind discriminant for the stamped default-export format
@@ -1,9 +1,9 @@
1
1
  // @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
- /** @typedef {import('./types').ComponentDoc} ComponentDoc */
5
- /** @typedef {import('./types').HookDoc} HookDoc */
6
- /** @typedef {import('./types').ReferenceDoc} ReferenceDoc */
4
+ /** @typedef {import('./types.js').ComponentDoc} ComponentDoc */
5
+ /** @typedef {import('./types.js').HookDoc} HookDoc */
6
+ /** @typedef {import('./types.js').ReferenceDoc} ReferenceDoc */
7
7
  /**
8
8
  * Validate an unknown value as a legacy (unstamped) doc, or throw.
9
9
  *
@@ -12,6 +12,6 @@
12
12
  * @returns {ComponentDoc | HookDoc | ReferenceDoc}
13
13
  */
14
14
  export function parseLegacyDoc(input: unknown, label?: string): ComponentDoc | HookDoc | ReferenceDoc;
15
- export type ComponentDoc = import("./types").ComponentDoc;
16
- export type HookDoc = import("./types").HookDoc;
17
- export type ReferenceDoc = import("./types").ReferenceDoc;
15
+ export type ComponentDoc = import("./types.js").ComponentDoc;
16
+ export type HookDoc = import("./types.js").HookDoc;
17
+ export type ReferenceDoc = import("./types.js").ReferenceDoc;
@@ -10,9 +10,9 @@
10
10
  import {LegacyDocSchema} from './_schema.mjs';
11
11
  import {formatZodError} from '../_shared/errors.mjs';
12
12
 
13
- /** @typedef {import('./types').ComponentDoc} ComponentDoc */
14
- /** @typedef {import('./types').HookDoc} HookDoc */
15
- /** @typedef {import('./types').ReferenceDoc} ReferenceDoc */
13
+ /** @typedef {import('./types.js').ComponentDoc} ComponentDoc */
14
+ /** @typedef {import('./types.js').HookDoc} HookDoc */
15
+ /** @typedef {import('./types.js').ReferenceDoc} ReferenceDoc */
16
16
 
17
17
  /**
18
18
  * Validate an unknown value as a legacy (unstamped) doc, or throw.
@@ -0,0 +1,233 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file Every authored doc kind has a compile-time lock between its load check
5
+ * and its published type: the `_*DriftLock` typedefs in `_schema.mjs` and
6
+ * `template/parse.mjs`, which the strict typecheck evaluates. A lock names each
7
+ * place the loader is deliberately looser than the type. These tests pin that
8
+ * looser behavior and the published unknown-field policy, so tightening a load
9
+ * check is a reviewed change rather than a silent one.
10
+ */
11
+
12
+ import * as fs from 'node:fs';
13
+ import * as path from 'node:path';
14
+ import {fileURLToPath, pathToFileURL} from 'node:url';
15
+ import {describe, expect, it} from 'vitest';
16
+ import {parseDoc} from './parse.mjs';
17
+ import {AuthoredDocKindSchema} from './_schema.mjs';
18
+ import {doc as graphFieldsDoc} from './base/graph-fields.doc.mjs';
19
+ import {problemsInTopic} from '../../foundation/discovery/docs-discovery.mjs';
20
+
21
+ const HERE = path.dirname(fileURLToPath(import.meta.url));
22
+ const KINDS = AuthoredDocKindSchema.options;
23
+
24
+ /** The lock that pins each kind's load check to its published type. */
25
+ const LOCKS = {
26
+ component: '_ComponentDocDriftLock',
27
+ function: '_FunctionDocDriftLock',
28
+ generic: '_ReferenceDocDriftLock',
29
+ page: '_PageTemplateDocDriftLock',
30
+ block: '_BlockTemplateDocDriftLock',
31
+ schema: '_SchemaDocDriftLock',
32
+ command: '_CommandDocDriftLock',
33
+ enum: '_EnumDocDriftLock',
34
+ namespace: '_NamespaceDocDriftLock',
35
+ };
36
+
37
+ /** One valid example doc per kind, from the typed examples. */
38
+ const EXAMPLES = Object.fromEntries(
39
+ await Promise.all(
40
+ KINDS.map(async kind => {
41
+ const file = {generic: 'reference', function: 'function'}[kind] ?? kind;
42
+ const url = pathToFileURL(
43
+ path.join(HERE, '../../test/authoring-types', `${file}.doc.mjs`),
44
+ );
45
+ return [kind, (await import(url.href)).docs];
46
+ }),
47
+ ),
48
+ );
49
+
50
+ describe('load check vs published type', () => {
51
+ it('locks every doc kind', () => {
52
+ const source = ['_schema.mjs', 'template/parse.mjs', 'theme/parse.mjs']
53
+ .map(file => fs.readFileSync(path.join(HERE, file), 'utf8'))
54
+ .join('\n');
55
+ expect(Object.keys(LOCKS).sort()).toEqual([...KINDS].sort());
56
+ const locks = [
57
+ ...Object.values(LOCKS),
58
+ '_AuthoredDocKindDriftLock',
59
+ '_HookDocIsFunctionDocLock',
60
+ '_ThemeDocDriftLock',
61
+ ];
62
+ for (const lock of locks) {
63
+ expect(source, `${lock} is missing`).toMatch(
64
+ new RegExp(`\\}\\s*${lock}\\b`),
65
+ );
66
+ }
67
+ });
68
+
69
+ it('dispatches every doc kind and refuses any other', () => {
70
+ for (const kind of KINDS) {
71
+ expect(() => parseDoc(EXAMPLES[kind], `${kind}.doc.mjs`)).not.toThrow();
72
+ }
73
+ expect(() => parseDoc({type: 'widget', name: 'x'}, 'x.doc.mjs')).toThrow(
74
+ /x\.doc\.mjs is invalid/u,
75
+ );
76
+ });
77
+ });
78
+
79
+ describe('where loading is deliberately looser than the type', () => {
80
+ it('a stamped component needs no displayName; usage, theming and examples are unchecked', () => {
81
+ expect(() =>
82
+ parseDoc(
83
+ {
84
+ type: 'component',
85
+ name: 'Badge',
86
+ category: 'badges',
87
+ props: [],
88
+ usage: 'free text',
89
+ theming: 5,
90
+ examples: [{title: 'Basic'}],
91
+ },
92
+ 'Badge.doc.mjs',
93
+ ),
94
+ ).not.toThrow();
95
+ });
96
+
97
+ it('each entry of a stamped group doc needs a name, and nothing more', () => {
98
+ const group = (/** @type {unknown[]} */ components) => ({
99
+ type: 'component',
100
+ name: 'Tabs',
101
+ components,
102
+ });
103
+ expect(() =>
104
+ parseDoc(
105
+ group([{name: 'Tab'}, {name: 'TabPanel', description: 'x'}]),
106
+ 'Tabs.doc.mjs',
107
+ ),
108
+ ).not.toThrow();
109
+ for (const bad of [null, 5, 'Tab', {}, {name: ''}, {displayName: 'Tab'}]) {
110
+ expect(() => parseDoc(group([bad]), 'Tabs.doc.mjs')).toThrow(
111
+ /components\.0/,
112
+ );
113
+ }
114
+ });
115
+
116
+ it('a stamped function needs no displayName; usage is unchecked', () => {
117
+ expect(() =>
118
+ parseDoc(
119
+ {type: 'function', name: 'useX', params: [], returns: [], usage: 5},
120
+ 'useX.doc.mjs',
121
+ ),
122
+ ).not.toThrow();
123
+ });
124
+
125
+ it('a stamped generic doc loads without title, description or sections, but is no topic', () => {
126
+ const doc = parseDoc({type: 'generic', name: 'notes'}, 'notes.doc.mjs');
127
+ expect(doc.title).toBe('notes');
128
+ expect(problemsInTopic(doc)).toEqual([
129
+ 'description: expected a non-empty string',
130
+ 'sections: expected at least one section',
131
+ ]);
132
+ });
133
+
134
+ it('a template needs no displayName or aspectRatio and may use its own category', () => {
135
+ expect(() =>
136
+ parseDoc(
137
+ {type: 'block', name: 'widget-demo', category: 'components/Widget'},
138
+ 'widget-demo.doc.mjs',
139
+ ),
140
+ ).not.toThrow();
141
+ expect(() =>
142
+ parseDoc(
143
+ {type: 'page', name: 'widget-page', category: 'Widgets'},
144
+ 'widget-page.doc.mjs',
145
+ ),
146
+ ).not.toThrow();
147
+ });
148
+
149
+ it('schema, command and enum docs load only as their type allows', () => {
150
+ const {fields, ...schemaDoc} = EXAMPLES.schema;
151
+ const {summary, ...commandDoc} = EXAMPLES.command;
152
+ const {members, ...enumDoc} = EXAMPLES.enum;
153
+ expect(() => parseDoc(schemaDoc, 's.doc.mjs')).toThrow(/fields/);
154
+ expect(() => parseDoc(commandDoc, 'c.doc.mjs')).toThrow(/summary/);
155
+ expect(() => parseDoc(enumDoc, 'e.doc.mjs')).toThrow(/members/);
156
+ });
157
+ });
158
+
159
+ describe('unknown fields', () => {
160
+ const keeps = KINDS.filter(kind => {
161
+ try {
162
+ parseDoc({...EXAMPLES[kind], notAField: true}, `${kind}.doc.mjs`);
163
+ return true;
164
+ } catch {
165
+ return false;
166
+ }
167
+ });
168
+
169
+ it('match the published policy', () => {
170
+ const policy = graphFieldsDoc.notes
171
+ .map(note => ('text' in note ? note.text : ''))
172
+ .find(text => text.startsWith('Unknown fields'));
173
+ expect(policy, 'graph-fields.doc.mjs states the policy').toBeDefined();
174
+ const [kept, refused] = /** @type {string} */ (policy).split(
175
+ ' docs accept',
176
+ );
177
+ const named = (/** @type {string} */ text) =>
178
+ [...text.matchAll(/`([a-z]+)`/g)].map(match => match[1]).sort();
179
+ expect(named(kept)).toEqual([...keeps].sort());
180
+ expect(named(refused).filter(kind => KINDS.includes(kind))).toEqual(
181
+ KINDS.filter(kind => !keeps.includes(kind)).sort(),
182
+ );
183
+ });
184
+
185
+ it("are refused inside a section's reference block, which a section takes", () => {
186
+ const [section] = EXAMPLES.generic.sections;
187
+ const reference = {
188
+ type: 'reference',
189
+ target: '@astryxdesign/cli:schema:integration',
190
+ projection: {fields: ['docs']},
191
+ presentation: 'compact',
192
+ };
193
+ /** @param {object} block */
194
+ const withBlock = block =>
195
+ parseDoc(
196
+ {...EXAMPLES.generic, sections: [{...section, content: [block]}]},
197
+ 'r.doc.mjs',
198
+ );
199
+ expect(() => withBlock(reference)).not.toThrow();
200
+ expect(() => withBlock({...reference, notAField: true})).toThrow();
201
+ expect(() =>
202
+ withBlock({...reference, projection: {fields: ['docs'], rows: []}}),
203
+ ).toThrow();
204
+ // Workflow and collection blocks belong to a namespace doc.
205
+ expect(() =>
206
+ withBlock({type: 'collection', source: {slot: 'guides'}}),
207
+ ).toThrow();
208
+ });
209
+
210
+ it('are refused inside sections and content blocks', () => {
211
+ const [section] = EXAMPLES.generic.sections;
212
+ expect(() =>
213
+ parseDoc(
214
+ {...EXAMPLES.generic, sections: [{...section, notAField: true}]},
215
+ 'r.doc.mjs',
216
+ ),
217
+ ).toThrow();
218
+ expect(() =>
219
+ parseDoc(
220
+ {
221
+ ...EXAMPLES.generic,
222
+ sections: [
223
+ {
224
+ ...section,
225
+ content: [{type: 'prose', text: 'x', notAField: true}],
226
+ },
227
+ ],
228
+ },
229
+ 'r.doc.mjs',
230
+ ),
231
+ ).toThrow();
232
+ });
233
+ });
@@ -12,7 +12,7 @@ export const doc = {
12
12
  displayName: 'NamespaceDoc',
13
13
  namespace: 'authoring',
14
14
  description:
15
- 'Declares named navigation slots and renderer-neutral layout blocks for already-discovered docs. It never scans folders or copies child documents.',
15
+ "Declares one level of the docs tree: named slots, and adoption rules for already-discovered docs. It never scans folders, lists its children, or copies child documents: a child names its parent with `placement`, or a namespace adopts a discovery group. `astryx docs <route>` lists each slot's children one level down. The CLI keeps its namespace docs in its docs tree directory; an integration ships its own in its docs directory, and they appear in `astryx docs` beside the CLI's.",
16
16
  appliesTo: '<namespace>.doc.mjs',
17
17
  fields: [
18
18
  {
@@ -44,13 +44,13 @@ export const doc = {
44
44
  name: 'placement',
45
45
  type: 'DocPlacement',
46
46
  description:
47
- 'Optional canonical parent request: {parent, slot?, order?}. Invalid explicit placement fails compilation instead of falling back.',
47
+ 'Optional canonical parent: {parent, slot?, order?}. `parent` names a namespace of the same package as `namespace:<name>`. An invalid placement withdraws the namespace with a diagnostic; it never falls back.',
48
48
  },
49
49
  {
50
50
  name: 'aliases',
51
51
  type: 'string[]',
52
52
  description:
53
- 'Prior names or routes that must keep resolving to this doc.',
53
+ 'Prior names or routes the docs tree will keep resolving to this doc. Not read yet.',
54
54
  },
55
55
  {
56
56
  name: 'audience',
@@ -78,9 +78,9 @@ export const doc = {
78
78
  },
79
79
  {
80
80
  name: 'blocks',
81
- type: 'ReferenceContentBlock[]',
81
+ type: '(ReferenceContentBlock | GraphContentBlock)[]',
82
82
  description:
83
- 'Ordered layout content. V1 adds only workflow, collection, and reference to the existing prose, heading, code, table, list, and token-ref blocks.',
83
+ 'Ordered layout content for the namespace page. Graph-only workflow, collection, and reference blocks are available here without widening the stable ReferenceContentBlock union used by existing topic renderers. Not rendered yet: `astryx docs <route>` lists every slot and its children in order.',
84
84
  },
85
85
  ],
86
86
  examples: [
@@ -103,14 +103,14 @@ export const docs = {
103
103
  source: {group: 'cli-commands', kinds: ['command']},
104
104
  into: 'reference',
105
105
  }],
106
- blocks: [
107
- {type: 'collection', source: {slot: 'guides'}, presentation: 'cards'},
108
- {type: 'collection', source: {slot: 'reference'}, presentation: 'compact'},
109
- ],
110
106
  };`,
111
107
  },
112
108
  ],
113
109
  notes: [
110
+ {
111
+ type: 'prose',
112
+ text: "The docs tree reads namespace docs from the CLI and from every configured integration. An integration's namespace doc is a top-level level of the tree, and its guides name it with `placement`; a doc can be placed only in a namespace of its own package. When two packages claim one route, the CLI's own docs win, then integrations in configured order, and `astryx doctor` names the loser.",
113
+ },
114
114
  {
115
115
  type: 'prose',
116
116
  text: 'Child docs request one canonical home with placement. Collections store and render stable references to those docs; they never create a second identity or parent.',
@@ -1,7 +1,7 @@
1
1
  // @generated by scripts/sync-api-types.mjs from the JSDoc in authoring/**/*.mjs.
2
2
  // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
3
 
4
- /** @typedef {import('../types').NamespaceDoc} NamespaceDoc */
4
+ /** @typedef {import('../types.js').NamespaceDoc} NamespaceDoc */
5
5
  /**
6
6
  * Validate an unknown value as a NamespaceDoc, or throw a readable error.
7
7
  * @param {unknown} input
@@ -9,4 +9,4 @@
9
9
  * @returns {NamespaceDoc}
10
10
  */
11
11
  export function parseNamespace(input: unknown, label?: string): NamespaceDoc;
12
- export type NamespaceDoc = import("../types").NamespaceDoc;
12
+ export type NamespaceDoc = import("../types.js").NamespaceDoc;
@@ -8,7 +8,7 @@
8
8
  import {NamespaceDocKindSchema} from '../_schema.mjs';
9
9
  import {formatZodError} from '../../_shared/errors.mjs';
10
10
 
11
- /** @typedef {import('../types').NamespaceDoc} NamespaceDoc */
11
+ /** @typedef {import('../types.js').NamespaceDoc} NamespaceDoc */
12
12
 
13
13
  /**
14
14
  * Validate an unknown value as a NamespaceDoc, or throw a readable error.
@@ -134,32 +134,30 @@ describe('NamespaceDoc', () => {
134
134
  });
135
135
  });
136
136
 
137
- describe('semantic blocks in existing docs', () => {
138
- it('accepts workflow, collection, and reference in a ReferenceDoc section', () => {
139
- const parsed = parseReference({
140
- type: 'generic',
141
- name: 'publishing',
142
- title: 'Publishing',
143
- description: 'Publish an integration.',
144
- sections: [
145
- {
146
- id: 'start',
147
- title: 'Start',
148
- content: namespaceDoc.blocks,
149
- },
150
- ],
151
- });
152
- expect(parsed.sections[0].id).toBe('start');
153
- expect(parsed.sections[0].content.map(block => block.type)).toEqual([
154
- 'workflow',
155
- 'collection',
156
- 'reference',
157
- ]);
137
+ describe('semantic graph blocks', () => {
138
+ it('keeps graph-only blocks out of the stable ReferenceDoc section union', () => {
139
+ expect(() =>
140
+ parseReference({
141
+ type: 'generic',
142
+ name: 'publishing',
143
+ title: 'Publishing',
144
+ description: 'Publish an integration.',
145
+ sections: [
146
+ {
147
+ id: 'start',
148
+ title: 'Start',
149
+ content: namespaceDoc.blocks,
150
+ },
151
+ ],
152
+ }),
153
+ ).toThrow(/Invalid discriminator value/u);
158
154
  });
159
155
 
160
- it('rejects an unknown stamped doc kind instead of treating it as legacy', () => {
161
- expect(() => parseDoc({type: 'choice', name: 'x', props: []})).toThrow(
162
- /unsupported type "choice"/u,
163
- );
156
+ it('keeps shape-sniffing an unknown stamp for 0.6.x compatibility', () => {
157
+ expect(parseDoc({type: 'choice', name: 'x', props: []})).toMatchObject({
158
+ type: 'choice',
159
+ name: 'x',
160
+ props: [],
161
+ });
164
162
  });
165
163
  });
@@ -6,8 +6,11 @@
6
6
  * or copies child documents.
7
7
  */
8
8
 
9
- import type {AuthoredDocGraphFields, AuthoredDocKind} from '../base/type';
10
- import type {ReferenceContentBlock} from '../reference/type';
9
+ import type {AuthoredDocGraphFields, AuthoredDocKind} from '../base/type.js';
10
+ import type {
11
+ GraphContentBlock,
12
+ ReferenceContentBlock,
13
+ } from '../reference/type.js';
11
14
 
12
15
  /** Which providers may contribute appearances to a namespace slot. */
13
16
  export type NamespaceProviderScope = 'same' | 'configured';
@@ -67,5 +70,5 @@ export interface NamespaceDoc extends AuthoredDocGraphFields {
67
70
  /** Optional source-adoption rules for otherwise-unplaced docs. */
68
71
  adopts?: NamespaceAdoptionRule[];
69
72
  /** Ordered renderer-neutral content and collection blocks. */
70
- blocks?: ReferenceContentBlock[];
73
+ blocks?: (ReferenceContentBlock | GraphContentBlock)[];
71
74
  }