@astryxdesign/cli 0.6.3-canary.db4e378 → 0.6.3-canary.db52d98

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 (397) hide show
  1. package/README.md +38 -15
  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 +14 -7
  6. package/api/build/build.test.mjs +184 -6
  7. package/api/build/build.type.d.mts +57 -2
  8. package/api/build/build.type.mjs +30 -7
  9. package/api/build/help/help.d.mts +4 -0
  10. package/api/build/help/help.mjs +24 -11
  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 +1 -0
  19. package/api/component/component.mjs +60 -12
  20. package/api/component/list/list.mjs +3 -2
  21. package/api/discover/discover.doc.mjs +1 -0
  22. package/api/docs/_adapter.d.mts +252 -34
  23. package/api/docs/_adapter.mjs +923 -132
  24. package/api/docs/detail/detail.mjs +11 -3
  25. package/api/docs/detail/section/section.mjs +24 -13
  26. package/api/docs/detail/section/section.test.mjs +15 -6
  27. package/api/docs/docs.d.mts +5 -3
  28. package/api/docs/docs.doc.mjs +39 -17
  29. package/api/docs/docs.mjs +44 -8
  30. package/api/docs/docs.test.mjs +158 -4
  31. package/api/docs/docs.type.d.mts +181 -2
  32. package/api/docs/docs.type.mjs +117 -3
  33. package/api/docs/index/index.mjs +11 -3
  34. package/api/docs/index/index.test.mjs +1 -1
  35. package/api/docs/integration-tree.test.mjs +555 -0
  36. package/api/docs/integrationDocs.test.mjs +14 -14
  37. package/api/docs/list/list.mjs +28 -12
  38. package/api/docs/node/node.d.mts +43 -0
  39. package/api/docs/node/node.mjs +192 -0
  40. package/api/docs/reference-blocks.test.mjs +406 -0
  41. package/api/doctor/doctor.d.mts +54 -4
  42. package/api/doctor/doctor.doc.mjs +1 -0
  43. package/api/doctor/doctor.mjs +331 -16
  44. package/api/doctor/doctor.test.mjs +420 -7
  45. package/api/gap-report/gap-report.doc.mjs +1 -0
  46. package/api/hook/_adapter.mjs +19 -5
  47. package/api/hook/hook.doc.mjs +1 -0
  48. package/api/hook/list/list.d.mts +1 -1
  49. package/api/hook/list/list.mjs +69 -17
  50. package/api/index.d.mts +1 -1
  51. package/api/index.mjs +1 -0
  52. package/api/init/init.doc.mjs +2 -1
  53. package/api/integration/add-contribution.d.mts +2 -1
  54. package/api/integration/add-contribution.mjs +114 -12
  55. package/api/integration/add-contribution.test.mjs +174 -3
  56. package/api/integration/add-theme.mjs +34 -64
  57. package/api/integration/add-theme.test.mjs +105 -21
  58. package/api/integration/authoring-checks.mjs +138 -28
  59. package/api/integration/authoring-checks.test.mjs +179 -7
  60. package/api/integration/authoring-checks.type.mjs +6 -1
  61. package/api/integration/integration-authoring.type.d.mts +2 -0
  62. package/api/integration/integration-authoring.type.mjs +2 -0
  63. package/api/integration/integration-block-exports.test.mjs +10 -6
  64. package/api/integration/integrationAdd.doc.mjs +7 -0
  65. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  66. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  67. package/api/integration/integrationAddComponent.doc.mjs +1 -0
  68. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  69. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  70. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  71. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  72. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  73. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  74. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  75. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  76. package/api/integration/pack-check.mjs +34 -0
  77. package/api/integration/pack-check.test.mjs +138 -47
  78. package/api/integration/pack-check.type.d.mts +26 -2
  79. package/api/integration/pack-check.type.mjs +14 -1
  80. package/api/integration/summarizeIssues.doc.mjs +1 -0
  81. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  82. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  83. package/api/integration/validate-integration.mjs +50 -102
  84. package/api/integration/validate-integration.test.mjs +88 -26
  85. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  86. package/api/integration/validateIntegration.doc.mjs +2 -1
  87. package/api/json/assertResponse.doc.mjs +1 -0
  88. package/api/json/index.ts +2 -0
  89. package/api/json/isError.doc.mjs +1 -0
  90. package/api/json/parseResponse.doc.mjs +1 -0
  91. package/api/layout/_adapter.mjs +20 -5
  92. package/api/layout/layoutCheck.doc.mjs +1 -0
  93. package/api/layout/layoutExpand.doc.mjs +1 -0
  94. package/api/layout/layoutGrammar.doc.mjs +1 -0
  95. package/api/search/search.d.mts +59 -1
  96. package/api/search/search.doc.mjs +5 -3
  97. package/api/search/search.mjs +458 -77
  98. package/api/search/search.test.mjs +91 -2
  99. package/api/search/search.type.d.mts +13 -1
  100. package/api/search/search.type.mjs +4 -1
  101. package/api/swizzle/swizzle.doc.mjs +1 -0
  102. package/api/template/list/list.mjs +1 -0
  103. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  104. package/api/template/template-integration.test.mjs +1072 -3
  105. package/api/template/template-suffix.test.mjs +41 -21
  106. package/api/template/template.doc.mjs +28 -7
  107. package/api/template/template.mjs +45 -8
  108. package/api/template/template.type.d.mts +6 -8
  109. package/api/template/template.type.mjs +3 -2
  110. package/api/theme/_adapter.d.mts +2 -3
  111. package/api/theme/_adapter.mjs +4 -5
  112. package/api/theme/add/add.binary.test.mjs +10 -17
  113. package/api/theme/add/add.test.mjs +14 -1
  114. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  115. package/api/theme/integration-themes.test.mjs +39 -28
  116. package/api/theme/list/list.test.mjs +19 -20
  117. package/api/theme/listThemes.doc.mjs +6 -5
  118. package/api/theme/template/template.test.mjs +5 -0
  119. package/api/theme/themeAdd.doc.mjs +4 -3
  120. package/api/theme/themeBuild.doc.mjs +1 -0
  121. package/api/theme/themeList.doc.mjs +6 -3
  122. package/api/theme/themeListAvailable.doc.mjs +5 -3
  123. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  124. package/api/theme/themeTargets.doc.mjs +1 -0
  125. package/api/theme/themeTemplate.doc.mjs +2 -1
  126. package/api/upgrade/_adapter.d.mts +32 -5
  127. package/api/upgrade/_adapter.mjs +97 -69
  128. package/api/upgrade/provider-agreement.test.mjs +152 -0
  129. package/api/upgrade/run/run.mjs +356 -59
  130. package/api/upgrade/upgrade.doc.mjs +6 -1
  131. package/api/upgrade/upgrade.type.d.mts +34 -0
  132. package/api/upgrade/upgrade.type.mjs +15 -0
  133. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  134. package/assets/codemods/integration-discovery.mjs +8 -2
  135. package/assets/codemods/integration-discovery.test.mjs +15 -0
  136. package/assets/codemods/integration-runner.mjs +56 -4
  137. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  138. package/assets/codemods/run-codemod.mjs +177 -34
  139. package/assets/codemods/runner.mjs +350 -102
  140. package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  141. package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  142. package/assets/codemods/transforms/next/index.mjs +19 -1
  143. package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
  144. package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
  145. package/assets/docs/getting-started.doc.mjs +2 -2
  146. package/assets/docs/layout.doc.dense.mjs +2 -2
  147. package/assets/docs/layout.doc.mjs +1 -1
  148. package/assets/docs/principles.doc.mjs +6 -6
  149. package/assets/docs/styling-libraries.doc.mjs +3 -3
  150. package/assets/docs/styling.doc.mjs +4 -4
  151. package/assets/docs/theme.doc.mjs +5 -5
  152. package/assets/docs/tokens.doc.mjs +1 -1
  153. package/assets/docs/tree/api.doc.mjs +30 -0
  154. package/assets/docs/tree/cli.doc.mjs +23 -0
  155. package/assets/docs/tree/commands.doc.mjs +25 -0
  156. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +66 -38
  157. package/assets/docs/tree/integrations.test.mjs +62 -0
  158. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  159. package/assets/docs/working-with-ai.doc.mjs +3 -3
  160. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  161. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  162. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  163. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  164. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  165. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  166. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  167. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  168. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  169. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  170. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  171. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  172. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  173. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  174. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  175. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  176. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  177. package/authoring/codemod/codemod.doc.mjs +1 -1
  178. package/authoring/codemod/type.ts +12 -0
  179. package/authoring/config/config.doc.mjs +1 -1
  180. package/authoring/debug/debug.doc.d.mts +11 -0
  181. package/authoring/debug/debug.doc.mjs +182 -0
  182. package/authoring/debug/parse.d.mts +3 -3
  183. package/authoring/doctypes/_schema.d.mts +119 -117
  184. package/authoring/doctypes/_schema.mjs +54 -3
  185. package/authoring/doctypes/base/graph-fields.doc.mjs +8 -6
  186. package/authoring/doctypes/base/type.ts +6 -5
  187. package/authoring/doctypes/command/command.doc.mjs +1 -1
  188. package/authoring/doctypes/command/type.ts +2 -2
  189. package/authoring/doctypes/component/type.ts +2 -2
  190. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  191. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  192. package/authoring/doctypes/enum/type.ts +1 -1
  193. package/authoring/doctypes/function/function.doc.mjs +3 -2
  194. package/authoring/doctypes/function/type.ts +3 -2
  195. package/authoring/doctypes/hook/type.ts +2 -2
  196. package/authoring/doctypes/load-contract.test.mjs +28 -2
  197. package/authoring/doctypes/namespace/namespace.doc.mjs +6 -10
  198. package/authoring/doctypes/namespace/parse.test.mjs +23 -25
  199. package/authoring/doctypes/namespace/type.ts +5 -2
  200. package/authoring/doctypes/parse.d.mts +4 -2
  201. package/authoring/doctypes/parse.mjs +10 -5
  202. package/authoring/doctypes/reference/reference.doc.mjs +35 -6
  203. package/authoring/doctypes/reference/type.ts +30 -13
  204. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  205. package/authoring/doctypes/schema/type.ts +1 -2
  206. package/authoring/doctypes/template/parse.d.mts +2 -0
  207. package/authoring/doctypes/template/parse.mjs +4 -0
  208. package/authoring/doctypes/template/parse.test.mjs +18 -0
  209. package/authoring/doctypes/template/template.doc.mjs +9 -3
  210. package/authoring/doctypes/template/type.ts +8 -0
  211. package/authoring/doctypes/theme/parse.d.mts +35 -0
  212. package/authoring/doctypes/theme/parse.mjs +76 -0
  213. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  214. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  215. package/authoring/doctypes/theme/type.ts +42 -0
  216. package/authoring/doctypes/types.ts +2 -1
  217. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  218. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  219. package/authoring/identity/identity.doc.mjs +2 -2
  220. package/authoring/index.d.mts +1 -0
  221. package/authoring/index.d.ts +7 -4
  222. package/authoring/index.mjs +2 -1
  223. package/authoring/integration/integration.doc.mjs +2 -2
  224. package/authoring/integration/type.ts +4 -10
  225. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  226. package/clients/cli/commands/blog.doc.mjs +1 -1
  227. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  228. package/clients/cli/commands/build-theme.mjs +11 -45
  229. package/clients/cli/commands/build.doc.mjs +12 -7
  230. package/clients/cli/commands/build.mjs +105 -67
  231. package/clients/cli/commands/build.text-fields.test.mjs +41 -0
  232. package/clients/cli/commands/component/index.mjs +1 -1
  233. package/clients/cli/commands/component-ownership.test.mjs +3 -3
  234. package/clients/cli/commands/component.doc.mjs +1 -1
  235. package/clients/cli/commands/discover.broken-integration.test.mjs +7 -8
  236. package/clients/cli/commands/discover.doc.mjs +1 -1
  237. package/clients/cli/commands/discover.mjs +1 -1
  238. package/clients/cli/commands/docs.doc.mjs +21 -9
  239. package/clients/cli/commands/docs.mjs +184 -70
  240. package/clients/cli/commands/docs.test.mjs +120 -16
  241. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  242. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  243. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  244. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  245. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  246. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  247. package/clients/cli/commands/doctor.doc.mjs +1 -1
  248. package/clients/cli/commands/doctor.mjs +53 -16
  249. package/clients/cli/commands/gap-report.doc.mjs +1 -1
  250. package/clients/cli/commands/hook.doc.mjs +1 -1
  251. package/clients/cli/commands/init.doc.mjs +1 -1
  252. package/clients/cli/commands/integration-add.controls.test.mjs +1 -1
  253. package/clients/cli/commands/integration-add.doc.mjs +11 -1
  254. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  255. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  256. package/clients/cli/commands/integration.doc.mjs +1 -1
  257. package/clients/cli/commands/integration.mjs +1 -0
  258. package/clients/cli/commands/layout-check.doc.mjs +1 -1
  259. package/clients/cli/commands/layout-expand.doc.mjs +1 -1
  260. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  261. package/clients/cli/commands/layout.doc.mjs +1 -1
  262. package/clients/cli/commands/manifest.doc.mjs +1 -1
  263. package/clients/cli/commands/search.doc.mjs +1 -1
  264. package/clients/cli/commands/search.mjs +11 -2
  265. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  266. package/clients/cli/commands/swizzle.doc.mjs +1 -1
  267. package/clients/cli/commands/template.doc.mjs +24 -7
  268. package/clients/cli/commands/template.mjs +4 -91
  269. package/clients/cli/commands/text-json-parity.test.mjs +719 -0
  270. package/clients/cli/commands/theme-add.doc.mjs +2 -2
  271. package/clients/cli/commands/theme-build.doc.mjs +1 -1
  272. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  273. package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
  274. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  275. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  276. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  277. package/clients/cli/commands/theme-template.doc.mjs +1 -1
  278. package/clients/cli/commands/theme.doc.mjs +1 -1
  279. package/clients/cli/commands/upgrade.doc.mjs +3 -2
  280. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  281. package/clients/cli/commands/upgrade.mjs +29 -7
  282. package/clients/cli/formatters/index.mjs +2 -0
  283. package/clients/cli/formatters/index.test.mjs +6 -0
  284. package/clients/cli/index.mjs +8 -0
  285. package/clients/cli/lib/hook-format.mjs +14 -5
  286. package/clients/cli/lib/manifest.mjs +9 -2
  287. package/foundation/agent-docs/agent-docs.d.mts +3 -2
  288. package/foundation/agent-docs/agent-docs.mjs +13 -9
  289. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  290. package/foundation/config/project-themes.test.mjs +11 -19
  291. package/foundation/config/project.d.mts +20 -11
  292. package/foundation/config/project.mjs +123 -80
  293. package/foundation/config/project.test.mjs +144 -21
  294. package/foundation/discovery/authoring-self-docs.d.mts +18 -0
  295. package/foundation/discovery/authoring-self-docs.mjs +37 -15
  296. package/foundation/discovery/authoring-self-docs.test.mjs +25 -9
  297. package/foundation/discovery/authoring-surface.d.mts +74 -0
  298. package/foundation/discovery/authoring-surface.mjs +525 -0
  299. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  300. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  301. package/foundation/discovery/cli-self-docs.mjs +490 -0
  302. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  303. package/foundation/discovery/component-discovery.d.mts +38 -0
  304. package/foundation/discovery/component-discovery.mjs +48 -0
  305. package/foundation/discovery/component-loader.d.mts +35 -38
  306. package/foundation/discovery/component-loader.mjs +53 -222
  307. package/foundation/discovery/docs-discovery.d.mts +112 -11
  308. package/foundation/discovery/docs-discovery.mjs +231 -36
  309. package/foundation/discovery/docs-discovery.test.mjs +111 -32
  310. package/foundation/discovery/docs-output-budget.d.mts +2 -2
  311. package/foundation/discovery/docs-output-budget.mjs +1 -1
  312. package/foundation/discovery/docs-section-key.d.mts +28 -10
  313. package/foundation/discovery/docs-section-key.mjs +134 -33
  314. package/foundation/discovery/docs-section-key.test.mjs +41 -19
  315. package/foundation/discovery/template-adapter.d.mts +99 -6
  316. package/foundation/discovery/template-adapter.mjs +480 -57
  317. package/foundation/discovery/template-adapter.test.mjs +57 -0
  318. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  319. package/foundation/discovery/template-conflict-release.mjs +40 -0
  320. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  321. package/foundation/discovery/theme-discovery.d.mts +67 -7
  322. package/foundation/discovery/theme-discovery.mjs +916 -186
  323. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  324. package/foundation/doc-compiler/bundle.d.mts +47 -0
  325. package/foundation/doc-compiler/bundle.mjs +278 -0
  326. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  327. package/foundation/doc-compiler/compile.d.mts +220 -39
  328. package/foundation/doc-compiler/compile.mjs +311 -15
  329. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  330. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  331. package/foundation/doc-compiler/doc-compiler.test.mjs +28 -1
  332. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  333. package/foundation/doc-compiler/import.d.mts +24 -0
  334. package/foundation/doc-compiler/import.mjs +59 -0
  335. package/foundation/doc-compiler/inputs.d.mts +102 -0
  336. package/foundation/doc-compiler/inputs.mjs +291 -0
  337. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  338. package/foundation/doc-compiler/ir.d.mts +13 -0
  339. package/foundation/doc-compiler/ir.mjs +196 -12
  340. package/foundation/doc-compiler/lenses.d.mts +8 -5
  341. package/foundation/doc-compiler/lenses.mjs +50 -4
  342. package/foundation/doc-compiler/links.d.mts +162 -0
  343. package/foundation/doc-compiler/links.mjs +294 -0
  344. package/foundation/doc-compiler/links.test.mjs +192 -0
  345. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  346. package/foundation/doc-compiler/overlays.d.mts +37 -0
  347. package/foundation/doc-compiler/overlays.mjs +206 -0
  348. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  349. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  350. package/foundation/doc-compiler/read.d.mts +127 -0
  351. package/foundation/doc-compiler/read.mjs +325 -0
  352. package/foundation/doc-compiler/read.test.mjs +313 -0
  353. package/foundation/doc-compiler/source.d.mts +33 -0
  354. package/foundation/doc-compiler/source.mjs +128 -0
  355. package/foundation/doc-compiler/tree.d.mts +288 -0
  356. package/foundation/doc-compiler/tree.mjs +876 -0
  357. package/foundation/doc-compiler/tree.test.mjs +598 -0
  358. package/foundation/fs/file-protection.d.mts +33 -0
  359. package/foundation/fs/file-protection.mjs +825 -0
  360. package/foundation/fs/file-protection.test.mjs +250 -0
  361. package/foundation/integrations/autolink.d.mts +58 -1
  362. package/foundation/integrations/autolink.mjs +143 -57
  363. package/foundation/integrations/autolink.test.mjs +1 -1
  364. package/foundation/integrations/cli-requirement.d.mts +45 -0
  365. package/foundation/integrations/cli-requirement.mjs +154 -0
  366. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  367. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  368. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  369. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  370. package/foundation/integrations/contribution-inventory.mjs +27 -24
  371. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  372. package/foundation/integrations/integration-warnings.d.mts +9 -2
  373. package/foundation/integrations/integration-warnings.mjs +51 -26
  374. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  375. package/foundation/integrations/integrations.d.mts +3 -0
  376. package/foundation/integrations/integrations.mjs +11 -97
  377. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  378. package/foundation/integrations/provider-resolution.d.mts +152 -0
  379. package/foundation/integrations/provider-resolution.mjs +576 -0
  380. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  381. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  382. package/foundation/integrations/theme-descriptor.mjs +44 -0
  383. package/foundation/integrations/validate-contributions.mjs +121 -29
  384. package/foundation/response/error-codes.d.mts +3 -1
  385. package/foundation/response/error-codes.d.ts +2 -0
  386. package/foundation/response/error-codes.doc.mjs +12 -2
  387. package/foundation/response/error-codes.mjs +7 -1
  388. package/foundation/response/error-codes.test.mjs +55 -11
  389. package/foundation/response/response-types.doc.d.mts +5 -1
  390. package/foundation/response/response-types.doc.mjs +20 -11
  391. package/foundation/response/response.doc.mjs +1 -1
  392. package/foundation/text/string-utils.d.mts +8 -0
  393. package/foundation/text/string-utils.mjs +40 -10
  394. package/foundation/xle/expand.mjs +1 -1
  395. package/foundation/xle/xle.test.mjs +13 -0
  396. package/package.json +10 -9
  397. package/assets/templates/themes/manifest.json +0 -95
@@ -25,7 +25,7 @@ export namespace AuthoredDocGraphFields {
25
25
  internal: "internal";
26
26
  }>>;
27
27
  }
28
- /** Runtime schema for every existing and V1 semantic content block. */
28
+ /** Runtime schema for the stable content-block union published in 0.6.x. */
29
29
  export const ReferenceContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
30
30
  type: z.ZodLiteral<"prose">;
31
31
  text: z.ZodString;
@@ -55,6 +55,120 @@ export const ReferenceContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
55
55
  type: z.ZodLiteral<"token-ref">;
56
56
  topic: z.ZodString;
57
57
  section: z.ZodString;
58
+ }, z.core.$strict>], "type">;
59
+ /** Runtime schema for graph-only blocks used by NamespaceDoc. */
60
+ export const GraphContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
61
+ type: z.ZodLiteral<"workflow">;
62
+ title: z.ZodOptional<z.ZodString>;
63
+ steps: z.ZodArray<z.ZodObject<{
64
+ title: z.ZodString;
65
+ description: z.ZodOptional<z.ZodString>;
66
+ references: z.ZodOptional<z.ZodArray<z.ZodString>>;
67
+ }, z.core.$strict>>;
68
+ }, z.core.$strict>, z.ZodObject<{
69
+ type: z.ZodLiteral<"collection">;
70
+ title: z.ZodOptional<z.ZodString>;
71
+ source: z.ZodObject<{
72
+ slot: z.ZodString;
73
+ }, z.core.$strict>;
74
+ presentation: z.ZodOptional<z.ZodEnum<{
75
+ list: "list";
76
+ cards: "cards";
77
+ compact: "compact";
78
+ }>>;
79
+ whenEmpty: z.ZodOptional<z.ZodEnum<{
80
+ show: "show";
81
+ omit: "omit";
82
+ }>>;
83
+ }, z.core.$strict>, z.ZodObject<{
84
+ type: z.ZodLiteral<"reference">;
85
+ target: z.ZodString;
86
+ projection: z.ZodOptional<z.ZodObject<{
87
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
88
+ sections: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
+ }, z.core.$strict>>;
90
+ presentation: z.ZodOptional<z.ZodEnum<{
91
+ compact: "compact";
92
+ summary: "summary";
93
+ full: "full";
94
+ }>>;
95
+ }, z.core.$strict>], "type">;
96
+ /**
97
+ * A topic section's blocks: the stable union, plus a reference block, which a
98
+ * read inlines as the doc it includes.
99
+ */
100
+ export const SectionContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
101
+ type: z.ZodLiteral<"prose">;
102
+ text: z.ZodString;
103
+ }, z.core.$strict>, z.ZodObject<{
104
+ type: z.ZodLiteral<"heading">;
105
+ level: z.ZodUnion<readonly [z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>;
106
+ text: z.ZodString;
107
+ }, z.core.$strict>, z.ZodObject<{
108
+ type: z.ZodLiteral<"code">;
109
+ lang: z.ZodString;
110
+ code: z.ZodString;
111
+ label: z.ZodOptional<z.ZodString>;
112
+ }, z.core.$strict>, z.ZodObject<{
113
+ type: z.ZodLiteral<"table">;
114
+ headers: z.ZodArray<z.ZodString>;
115
+ rows: z.ZodArray<z.ZodArray<z.ZodString>>;
116
+ }, z.core.$strict>, z.ZodObject<{
117
+ type: z.ZodLiteral<"list">;
118
+ style: z.ZodEnum<{
119
+ ordered: "ordered";
120
+ unordered: "unordered";
121
+ do: "do";
122
+ dont: "dont";
123
+ }>;
124
+ items: z.ZodArray<z.ZodString>;
125
+ }, z.core.$strict>, z.ZodObject<{
126
+ type: z.ZodLiteral<"token-ref">;
127
+ topic: z.ZodString;
128
+ section: z.ZodString;
129
+ }, z.core.$strict>, z.ZodObject<{
130
+ type: z.ZodLiteral<"reference">;
131
+ target: z.ZodString;
132
+ projection: z.ZodOptional<z.ZodObject<{
133
+ fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
134
+ sections: z.ZodOptional<z.ZodArray<z.ZodString>>;
135
+ }, z.core.$strict>>;
136
+ presentation: z.ZodOptional<z.ZodEnum<{
137
+ compact: "compact";
138
+ summary: "summary";
139
+ full: "full";
140
+ }>>;
141
+ }, z.core.$strict>], "type">;
142
+ /** Namespace content accepts both stable reference blocks and graph-only blocks. */
143
+ export const NamespaceContentBlockSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
144
+ type: z.ZodLiteral<"prose">;
145
+ text: z.ZodString;
146
+ }, z.core.$strict>, z.ZodObject<{
147
+ type: z.ZodLiteral<"heading">;
148
+ level: z.ZodUnion<readonly [z.ZodLiteral<3>, z.ZodLiteral<4>, z.ZodLiteral<5>, z.ZodLiteral<6>]>;
149
+ text: z.ZodString;
150
+ }, z.core.$strict>, z.ZodObject<{
151
+ type: z.ZodLiteral<"code">;
152
+ lang: z.ZodString;
153
+ code: z.ZodString;
154
+ label: z.ZodOptional<z.ZodString>;
155
+ }, z.core.$strict>, z.ZodObject<{
156
+ type: z.ZodLiteral<"table">;
157
+ headers: z.ZodArray<z.ZodString>;
158
+ rows: z.ZodArray<z.ZodArray<z.ZodString>>;
159
+ }, z.core.$strict>, z.ZodObject<{
160
+ type: z.ZodLiteral<"list">;
161
+ style: z.ZodEnum<{
162
+ ordered: "ordered";
163
+ unordered: "unordered";
164
+ do: "do";
165
+ dont: "dont";
166
+ }>;
167
+ items: z.ZodArray<z.ZodString>;
168
+ }, z.core.$strict>, z.ZodObject<{
169
+ type: z.ZodLiteral<"token-ref">;
170
+ topic: z.ZodString;
171
+ section: z.ZodString;
58
172
  }, z.core.$strict>, z.ZodObject<{
59
173
  type: z.ZodLiteral<"workflow">;
60
174
  title: z.ZodOptional<z.ZodString>;
@@ -235,29 +349,6 @@ export const GenericDocKindSchema: z.ZodObject<{
235
349
  type: z.ZodLiteral<"token-ref">;
236
350
  topic: z.ZodString;
237
351
  section: z.ZodString;
238
- }, z.core.$strict>, z.ZodObject<{
239
- type: z.ZodLiteral<"workflow">;
240
- title: z.ZodOptional<z.ZodString>;
241
- steps: z.ZodArray<z.ZodObject<{
242
- title: z.ZodString;
243
- description: z.ZodOptional<z.ZodString>;
244
- references: z.ZodOptional<z.ZodArray<z.ZodString>>;
245
- }, z.core.$strict>>;
246
- }, z.core.$strict>, z.ZodObject<{
247
- type: z.ZodLiteral<"collection">;
248
- title: z.ZodOptional<z.ZodString>;
249
- source: z.ZodObject<{
250
- slot: z.ZodString;
251
- }, z.core.$strict>;
252
- presentation: z.ZodOptional<z.ZodEnum<{
253
- list: "list";
254
- cards: "cards";
255
- compact: "compact";
256
- }>>;
257
- whenEmpty: z.ZodOptional<z.ZodEnum<{
258
- show: "show";
259
- omit: "omit";
260
- }>>;
261
352
  }, z.core.$strict>, z.ZodObject<{
262
353
  type: z.ZodLiteral<"reference">;
263
354
  target: z.ZodString;
@@ -351,41 +442,6 @@ export const SchemaDocKindSchema: z.ZodObject<{
351
442
  type: z.ZodLiteral<"token-ref">;
352
443
  topic: z.ZodString;
353
444
  section: z.ZodString;
354
- }, z.core.$strict>, z.ZodObject<{
355
- type: z.ZodLiteral<"workflow">;
356
- title: z.ZodOptional<z.ZodString>;
357
- steps: z.ZodArray<z.ZodObject<{
358
- title: z.ZodString;
359
- description: z.ZodOptional<z.ZodString>;
360
- references: z.ZodOptional<z.ZodArray<z.ZodString>>;
361
- }, z.core.$strict>>;
362
- }, z.core.$strict>, z.ZodObject<{
363
- type: z.ZodLiteral<"collection">;
364
- title: z.ZodOptional<z.ZodString>;
365
- source: z.ZodObject<{
366
- slot: z.ZodString;
367
- }, z.core.$strict>;
368
- presentation: z.ZodOptional<z.ZodEnum<{
369
- list: "list";
370
- cards: "cards";
371
- compact: "compact";
372
- }>>;
373
- whenEmpty: z.ZodOptional<z.ZodEnum<{
374
- show: "show";
375
- omit: "omit";
376
- }>>;
377
- }, z.core.$strict>, z.ZodObject<{
378
- type: z.ZodLiteral<"reference">;
379
- target: z.ZodString;
380
- projection: z.ZodOptional<z.ZodObject<{
381
- fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
382
- sections: z.ZodOptional<z.ZodArray<z.ZodString>>;
383
- }, z.core.$strict>>;
384
- presentation: z.ZodOptional<z.ZodEnum<{
385
- compact: "compact";
386
- summary: "summary";
387
- full: "full";
388
- }>>;
389
445
  }, z.core.$strict>], "type">>>;
390
446
  placement: z.ZodOptional<z.ZodObject<{
391
447
  parent: z.ZodString;
@@ -470,41 +526,6 @@ export const CommandDocKindSchema: z.ZodObject<{
470
526
  type: z.ZodLiteral<"token-ref">;
471
527
  topic: z.ZodString;
472
528
  section: z.ZodString;
473
- }, z.core.$strict>, z.ZodObject<{
474
- type: z.ZodLiteral<"workflow">;
475
- title: z.ZodOptional<z.ZodString>;
476
- steps: z.ZodArray<z.ZodObject<{
477
- title: z.ZodString;
478
- description: z.ZodOptional<z.ZodString>;
479
- references: z.ZodOptional<z.ZodArray<z.ZodString>>;
480
- }, z.core.$strict>>;
481
- }, z.core.$strict>, z.ZodObject<{
482
- type: z.ZodLiteral<"collection">;
483
- title: z.ZodOptional<z.ZodString>;
484
- source: z.ZodObject<{
485
- slot: z.ZodString;
486
- }, z.core.$strict>;
487
- presentation: z.ZodOptional<z.ZodEnum<{
488
- list: "list";
489
- cards: "cards";
490
- compact: "compact";
491
- }>>;
492
- whenEmpty: z.ZodOptional<z.ZodEnum<{
493
- show: "show";
494
- omit: "omit";
495
- }>>;
496
- }, z.core.$strict>, z.ZodObject<{
497
- type: z.ZodLiteral<"reference">;
498
- target: z.ZodString;
499
- projection: z.ZodOptional<z.ZodObject<{
500
- fields: z.ZodOptional<z.ZodArray<z.ZodString>>;
501
- sections: z.ZodOptional<z.ZodArray<z.ZodString>>;
502
- }, z.core.$strict>>;
503
- presentation: z.ZodOptional<z.ZodEnum<{
504
- compact: "compact";
505
- summary: "summary";
506
- full: "full";
507
- }>>;
508
529
  }, z.core.$strict>], "type">>>;
509
530
  placement: z.ZodOptional<z.ZodObject<{
510
531
  parent: z.ZodString;
@@ -877,29 +898,6 @@ export const LegacyDocSchema: z.ZodUnion<readonly [z.ZodObject<{
877
898
  type: z.ZodLiteral<"token-ref">;
878
899
  topic: z.ZodString;
879
900
  section: z.ZodString;
880
- }, z.core.$strict>, z.ZodObject<{
881
- type: z.ZodLiteral<"workflow">;
882
- title: z.ZodOptional<z.ZodString>;
883
- steps: z.ZodArray<z.ZodObject<{
884
- title: z.ZodString;
885
- description: z.ZodOptional<z.ZodString>;
886
- references: z.ZodOptional<z.ZodArray<z.ZodString>>;
887
- }, z.core.$strict>>;
888
- }, z.core.$strict>, z.ZodObject<{
889
- type: z.ZodLiteral<"collection">;
890
- title: z.ZodOptional<z.ZodString>;
891
- source: z.ZodObject<{
892
- slot: z.ZodString;
893
- }, z.core.$strict>;
894
- presentation: z.ZodOptional<z.ZodEnum<{
895
- list: "list";
896
- cards: "cards";
897
- compact: "compact";
898
- }>>;
899
- whenEmpty: z.ZodOptional<z.ZodEnum<{
900
- show: "show";
901
- omit: "omit";
902
- }>>;
903
901
  }, z.core.$strict>, z.ZodObject<{
904
902
  type: z.ZodLiteral<"reference">;
905
903
  target: z.ZodString;
@@ -933,6 +931,8 @@ export type AuthoredDocGraphFieldsType = import("./base/type.js").AuthoredDocGra
933
931
  export type AuthoredDocKind = import("./base/type.js").AuthoredDocKind;
934
932
  export type NamespaceDoc = import("./namespace/type.js").NamespaceDoc;
935
933
  export type ReferenceContentBlock = import("./reference/type.js").ReferenceContentBlock;
934
+ export type GraphContentBlock = import("./reference/type.js").GraphContentBlock;
935
+ export type ReferenceSection = import("./reference/type.js").ReferenceSection;
936
936
  export type ReferenceDoc = import("./reference/type.js").ReferenceDoc;
937
937
  export type SingleComponentDoc = import("./component/type.js").SingleComponentDoc;
938
938
  export type ComponentPropDoc = import("./base/type.js").ComponentPropDoc;
@@ -944,6 +944,8 @@ export type EnumDoc = import("./enum/type.js").EnumDoc;
944
944
  export type _AuthoredDocKindDriftLock = import("../_shared/contract.js").Expect<import("../_shared/contract.js").Equal<z.infer<typeof AuthoredDocKindSchema>, AuthoredDocKind>>;
945
945
  export type _AuthoredDocGraphDriftLock = import("../_shared/contract.js").Expect<import("../_shared/contract.js").MutuallyAssignable<z.infer<typeof _AuthoredDocGraphSchema>, AuthoredDocGraphFieldsType>>;
946
946
  export type _ReferenceContentBlockDriftLock = import("../_shared/contract.js").Expect<import("../_shared/contract.js").Equal<z.infer<typeof ReferenceContentBlockSchema>, ReferenceContentBlock>>;
947
+ export type _GraphContentBlockDriftLock = import("../_shared/contract.js").Expect<import("../_shared/contract.js").Equal<z.infer<typeof GraphContentBlockSchema>, GraphContentBlock>>;
948
+ export type _SectionContentBlockDriftLock = import("../_shared/contract.js").Expect<import("../_shared/contract.js").Equal<z.infer<typeof SectionContentBlockSchema>, ReferenceSection["content"][number]>>;
947
949
  /**
948
950
  * A stamped component doc as it loads. The loader accepts what the unstamped
949
951
  * format always accepted, so stamping an existing doc never breaks it:
@@ -15,6 +15,8 @@ import {z} from 'zod';
15
15
  /** @typedef {import('./base/type.js').AuthoredDocKind} AuthoredDocKind */
16
16
  /** @typedef {import('./namespace/type.js').NamespaceDoc} NamespaceDoc */
17
17
  /** @typedef {import('./reference/type.js').ReferenceContentBlock} ReferenceContentBlock */
18
+ /** @typedef {import('./reference/type.js').GraphContentBlock} GraphContentBlock */
19
+ /** @typedef {import('./reference/type.js').ReferenceSection} ReferenceSection */
18
20
  /** @typedef {import('./reference/type.js').ReferenceDoc} ReferenceDoc */
19
21
  /** @typedef {import('./component/type.js').SingleComponentDoc} SingleComponentDoc */
20
22
  /** @typedef {import('./base/type.js').ComponentPropDoc} ComponentPropDoc */
@@ -161,7 +163,7 @@ const ReferenceBlockSchema = z
161
163
  })
162
164
  .strict();
163
165
 
164
- /** Runtime schema for every existing and V1 semantic content block. */
166
+ /** Runtime schema for the stable content-block union published in 0.6.x. */
165
167
  export const ReferenceContentBlockSchema = z.discriminatedUnion('type', [
166
168
  ProseBlockSchema,
167
169
  HeadingBlockSchema,
@@ -169,6 +171,37 @@ export const ReferenceContentBlockSchema = z.discriminatedUnion('type', [
169
171
  TableBlockSchema,
170
172
  ListBlockSchema,
171
173
  TokenReferenceBlockSchema,
174
+ ]);
175
+
176
+ /** Runtime schema for graph-only blocks used by NamespaceDoc. */
177
+ export const GraphContentBlockSchema = z.discriminatedUnion('type', [
178
+ WorkflowBlockSchema,
179
+ CollectionBlockSchema,
180
+ ReferenceBlockSchema,
181
+ ]);
182
+
183
+ /**
184
+ * A topic section's blocks: the stable union, plus a reference block, which a
185
+ * read inlines as the doc it includes.
186
+ */
187
+ export const SectionContentBlockSchema = z.discriminatedUnion('type', [
188
+ ProseBlockSchema,
189
+ HeadingBlockSchema,
190
+ CodeBlockSchema,
191
+ TableBlockSchema,
192
+ ListBlockSchema,
193
+ TokenReferenceBlockSchema,
194
+ ReferenceBlockSchema,
195
+ ]);
196
+
197
+ /** Namespace content accepts both stable reference blocks and graph-only blocks. */
198
+ export const NamespaceContentBlockSchema = z.discriminatedUnion('type', [
199
+ ProseBlockSchema,
200
+ HeadingBlockSchema,
201
+ CodeBlockSchema,
202
+ TableBlockSchema,
203
+ ListBlockSchema,
204
+ TokenReferenceBlockSchema,
172
205
  WorkflowBlockSchema,
173
206
  CollectionBlockSchema,
174
207
  ReferenceBlockSchema,
@@ -183,12 +216,30 @@ export const ReferenceContentBlockSchema = z.discriminatedUnion('type', [
183
216
  * >} _ReferenceContentBlockDriftLock
184
217
  */
185
218
 
219
+ /**
220
+ * @typedef {import('../_shared/contract.js').Expect<
221
+ * import('../_shared/contract.js').Equal<
222
+ * z.infer<typeof GraphContentBlockSchema>,
223
+ * GraphContentBlock
224
+ * >
225
+ * >} _GraphContentBlockDriftLock
226
+ */
227
+
228
+ /**
229
+ * @typedef {import('../_shared/contract.js').Expect<
230
+ * import('../_shared/contract.js').Equal<
231
+ * z.infer<typeof SectionContentBlockSchema>,
232
+ * ReferenceSection['content'][number]
233
+ * >
234
+ * >} _SectionContentBlockDriftLock
235
+ */
236
+
186
237
  const ReferenceSectionSchema = z
187
238
  .object({
188
239
  id: nonEmptyString.optional(),
189
240
  title: nonEmptyString,
190
241
  category: z.string().optional(),
191
- content: z.array(ReferenceContentBlockSchema),
242
+ content: z.array(SectionContentBlockSchema),
192
243
  previewType: z
193
244
  .enum([
194
245
  'swatch',
@@ -605,7 +656,7 @@ export const NamespaceDocKindSchema = z
605
656
  .strict(),
606
657
  )
607
658
  .optional(),
608
- blocks: z.array(ReferenceContentBlockSchema).optional(),
659
+ blocks: z.array(NamespaceContentBlockSchema).optional(),
609
660
  })
610
661
  .strict()
611
662
  .superRefine((doc, context) => {
@@ -12,25 +12,27 @@ export const doc = {
12
12
  displayName: 'Authored doc graph fields',
13
13
  namespace: 'authoring',
14
14
  description:
15
- 'Placement, compatibility aliases, and audience: fields every authored doc kind declares for the docs graph. The docs graph is not built yet, so nothing reads them: a reference topic that sets one fails to load, and other doc kinds accept them and ignore them.',
15
+ "Placement, compatibility aliases, and audience: fields every authored doc kind declares for the docs tree. The docs tree reads `placement` for every guide, the CLI's and each integration's; aliases and audience are not built yet. A reference topic outside the docs tree that sets one fails to load, and other doc kinds accept them and ignore them.",
16
16
  appliesTo: 'Every supported .doc.mjs object',
17
17
  fields: [
18
18
  {
19
19
  name: 'placement',
20
20
  type: 'DocPlacement',
21
21
  description:
22
- 'Requests one canonical parent in the docs graph. Not read yet: a topic that sets it fails to load.',
22
+ "Names the doc's one parent in the docs tree: a namespace of the same package, one of its slots, and an order. Read for every guide, the CLI's and each integration's: a guide with `placement` gets a route in the tree instead of a flat topic name, and cannot also `replaces` or `extends` a topic. In the CLI's own topic directory a topic that sets it fails to load: the CLI keeps its guides in its docs tree directory. Commands, API functions, schemas, and enums do not set it: the tree adopts each by its `namespace`.",
23
23
  fields: [
24
24
  {
25
25
  name: 'placement.parent',
26
26
  type: 'string',
27
- description: 'Stable reference to the requested parent namespace.',
27
+ description:
28
+ 'The parent namespace: `namespace:<name>` in the same package.',
28
29
  required: true,
29
30
  },
30
31
  {
31
32
  name: 'placement.slot',
32
33
  type: 'string',
33
- description: 'Named slot owned by the parent namespace.',
34
+ description:
35
+ "A slot the parent namespace declares; it must accept this doc's kind. Optional when the parent has one slot.",
34
36
  },
35
37
  {
36
38
  name: 'placement.order',
@@ -43,7 +45,7 @@ export const doc = {
43
45
  name: 'aliases',
44
46
  type: 'string[]',
45
47
  description:
46
- 'Prior names or routes the docs graph will keep resolving to this doc, without creating another identity. Not read yet: a topic that sets it fails to load.',
48
+ 'Prior names or routes the docs tree will keep resolving to this doc, without creating another identity. Not read yet: a topic that sets it fails to load.',
47
49
  },
48
50
  {
49
51
  name: 'audience',
@@ -56,7 +58,7 @@ export const doc = {
56
58
  notes: [
57
59
  {
58
60
  type: 'prose',
59
- text: 'Unknown fields: `component`, `function`, `generic`, `schema`, `command` and `enum` docs accept a field they do not know, and nothing reads it, so a doc written for a newer CLI still loads here. `page`, `block` and `namespace` docs refuse one. Sections and content blocks refuse one in every doc.',
61
+ text: 'Unknown fields: `component`, `function`, `generic`, `schema`, `command` and `enum` docs accept a field they do not know, and nothing reads it, so a doc written for a newer CLI still loads here. `page`, `block` and `namespace` docs refuse one, as do `theme` descriptors. Sections and content blocks refuse one in every doc.',
60
62
  },
61
63
  ],
62
64
  };
@@ -31,14 +31,15 @@ export interface DocPlacement {
31
31
  }
32
32
 
33
33
  /**
34
- * Graph metadata shared by every authored doc kind. Reserved for the docs
35
- * graph, which is not built yet: nothing reads these fields, and a reference
36
- * topic that sets one fails to load.
34
+ * Tree metadata shared by every authored doc kind. The docs tree reads
35
+ * `placement` for every guide, the CLI's and each integration's
36
+ * (spec:AST-046); nothing reads `aliases` or `audience` yet. A reference topic
37
+ * outside the docs tree that sets one fails to load.
37
38
  */
38
39
  export interface AuthoredDocGraphFields {
39
- /** Requested canonical parent in the docs graph. Not read yet. */
40
+ /** The doc's one parent in the docs tree: a namespace of its own package. */
40
41
  placement?: DocPlacement;
41
- /** Prior routes or names the docs graph will keep resolving. Not read yet. */
42
+ /** Prior routes or names the docs tree will keep resolving. Not read yet. */
42
43
  aliases?: string[];
43
44
  /** Docs bundle audience; omit for public docs. Not read yet. */
44
45
  audience?: DocAudience;
@@ -54,7 +54,7 @@ export const doc = {
54
54
  name: 'namespace',
55
55
  type: 'string',
56
56
  description:
57
- "Docs namespace path. Defaults to 'cli' when applied by the docs index.",
57
+ "Optional in the type, but every doc the CLI ships declares it. The group that reads this doc. The CLI's commands use 'cli/commands', which the docs tree adopts: each is the leaf `cli/commands/<name>`. Every command doc the CLI ships declares one, and `astryx doctor` fails on one that is missing or that nothing reads.",
58
58
  },
59
59
  {
60
60
  name: 'aliases',
@@ -65,7 +65,7 @@ export interface CommandDoc extends AuthoredDocGraphFields {
65
65
  summary: string;
66
66
  /** Longer help body / when-to-use. */
67
67
  description?: string;
68
- /** Docs namespace path. Defaults to 'cli' when applied by the docs index. */
68
+ /** The group that reads this doc. The CLI's commands use 'cli/commands', which the docs tree adopts: each is the leaf `cli/commands/<name>`. Every command doc the CLI ships declares one, and `astryx doctor` fails on one that is missing or that nothing reads. */
69
69
  namespace?: string;
70
70
  /** Alternate slugs that also resolve to this doc. */
71
71
  aliases?: string[];
@@ -81,7 +81,7 @@ export interface CommandDoc extends AuthoredDocGraphFields {
81
81
  examples?: CommandExampleDoc[];
82
82
  /** Documented exit codes. */
83
83
  exitCodes?: {code: number; when: string}[];
84
- /** Related command names. */
84
+ /** Related command names; the CLI links each to its doc. */
85
85
  related?: string[];
86
86
  /** Freeform prose/notes. */
87
87
  notes?: ReferenceContentBlock[];
@@ -146,10 +146,10 @@ export interface ComponentBaseDoc extends AuthoredDocGraphFields {
146
146
  /**
147
147
  * The documentation type for a component directory's {Name}.doc.mjs file.
148
148
  *
149
- * Every .doc.mjs must export a single `docs` constant of this type:
149
+ * Every new .doc.mjs default-exports a stamped object of this type:
150
150
  *
151
151
  * /\*\* \@type \{import('@astryxdesign/cli/authoring').ComponentDoc\} *\/
152
- * export const docs = \{ ... \};
152
+ * export default \{ type: 'component', ... \};
153
153
  *
154
154
  * Use SingleComponentDoc (with `props`) for single-component directories.
155
155
  * Use MultiComponentDoc (with `components`) for multi-component directories.
@@ -1,7 +1,7 @@
1
1
  // Copyright (c) Meta Platforms, Inc. and affiliates.
2
2
 
3
3
  /**
4
- * @file Tests for the new authoring doc-types (schema/command/enum) and the
4
+ * @file Tests for the new authoring doc-types (schema/command/enum/theme) and the
5
5
  * generalized `function` doc (hooks + CLI/API functions sharing the schema).
6
6
  */
7
7
 
@@ -12,6 +12,7 @@ import {
12
12
  parseCommand,
13
13
  parseEnum,
14
14
  parseFunction,
15
+ parseTheme,
15
16
  } from '../index.mjs';
16
17
 
17
18
  describe('SchemaDoc', () => {
@@ -22,13 +23,21 @@ describe('SchemaDoc', () => {
22
23
  description: 'Project config.',
23
24
  appliesTo: 'astryx.config.{ts,mjs,js}',
24
25
  fields: [
25
- {name: 'integrations', type: 'string[]', description: 'Packages to load.'},
26
+ {
27
+ name: 'integrations',
28
+ type: 'string[]',
29
+ description: 'Packages to load.',
30
+ },
26
31
  {
27
32
  name: 'hooks',
28
33
  type: 'object',
29
34
  description: 'Lifecycle hooks.',
30
35
  fields: [
31
- {name: 'hooks.postCodemod', type: 'PostCodemodHook[]', description: 'Runs after codemods.'},
36
+ {
37
+ name: 'hooks.postCodemod',
38
+ type: 'PostCodemodHook[]',
39
+ description: 'Runs after codemods.',
40
+ },
32
41
  ],
33
42
  },
34
43
  ],
@@ -63,8 +72,16 @@ describe('CommandDoc', () => {
63
72
  fn: 'search',
64
73
  args: [{name: 'query', param: 'query', required: true}],
65
74
  options: [
66
- {flag: '--type <domain>', param: 'options.type', choices: ['component', 'hook']},
67
- {flag: '--json', cliOnly: true, description: 'Emit the typed JSON envelope.'},
75
+ {
76
+ flag: '--type <domain>',
77
+ param: 'options.type',
78
+ choices: ['component', 'hook'],
79
+ },
80
+ {
81
+ flag: '--json',
82
+ cliOnly: true,
83
+ description: 'Emit the typed JSON envelope.',
84
+ },
68
85
  ],
69
86
  examples: [{label: 'Terminal', cli: 'astryx search button --json'}],
70
87
  exitCodes: [{code: 1, when: 'invalid --type'}],
@@ -90,6 +107,29 @@ describe('EnumDoc', () => {
90
107
  });
91
108
  });
92
109
 
110
+ describe('ThemeDoc', () => {
111
+ const doc = {
112
+ type: 'theme',
113
+ name: 'ocean',
114
+ displayName: 'Ocean',
115
+ description: 'Cool blue surfaces with crisp contrast.',
116
+ maintained: true,
117
+ };
118
+
119
+ it('accepts a complete theme descriptor and dispatches through parseDoc', () => {
120
+ expect(parseTheme(doc)).toEqual(doc);
121
+ expect(parseDoc(doc)).toEqual(doc);
122
+ });
123
+
124
+ it('rejects non-kebab identity and missing required metadata', () => {
125
+ expect(() => parseTheme({...doc, name: 'OceanTheme'})).toThrow(
126
+ /lowercase kebab-case/,
127
+ );
128
+ const {maintained: _maintained, ...missingMaintained} = doc;
129
+ expect(() => parseTheme(missingMaintained)).toThrow(/maintained/);
130
+ });
131
+ });
132
+
93
133
  describe('generalized FunctionDoc', () => {
94
134
  it('accepts an API function whose returns are envelope entries (no field name)', () => {
95
135
  const apiFn = {
@@ -98,7 +138,9 @@ describe('generalized FunctionDoc', () => {
98
138
  name: 'search',
99
139
  displayName: 'search()',
100
140
  importPath: '@astryxdesign/cli/api',
101
- params: [{name: 'query', type: 'string', description: 'Term.', required: true}],
141
+ params: [
142
+ {name: 'query', type: 'string', description: 'Term.', required: true},
143
+ ],
102
144
  returns: [{type: 'search', description: 'query + ranked results[]'}],
103
145
  throws: [{code: 'ERR_INVALID_ARGUMENT', when: 'empty query'}],
104
146
  };
@@ -49,7 +49,7 @@ export const doc = {
49
49
  name: 'namespace',
50
50
  type: 'string',
51
51
  description:
52
- "Docs namespace path. Defaults to 'cli' when applied by the docs index.",
52
+ "Optional in the type, but every doc the CLI ships declares it. 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.",
53
53
  },
54
54
  {
55
55
  name: 'aliases',
@@ -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',
@@ -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[];