@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
@@ -35,16 +35,15 @@ import {
35
35
  resolveIntegrationImportPath as resolveIntegrationImport,
36
36
  } from '../../foundation/discovery/component-discovery.mjs';
37
37
  import {Project} from '../../foundation/config/project.mjs';
38
- import {loadDocs} from '../../foundation/discovery/component-loader.mjs';
38
+ import {loadComponentDoc as loadValidatedComponentDoc} from '../../foundation/discovery/component-loader.mjs';
39
39
  import {searchComponents} from '../../foundation/text/string-utils.mjs';
40
40
  import {AstryxError} from '../error.mjs';
41
41
 
42
42
  export {CORE_PACKAGE};
43
43
 
44
44
  /**
45
- * A loaded component doc. `loadDocs` returns the authored `.doc.mjs` shape,
46
- * which is either a single-component or multi-component doc; this loose view
47
- * captures the fields the API reads across both forms.
45
+ * A loaded component doc. The shared validated loader accepts stamped and legacy
46
+ * component docs; this loose view captures the fields the API reads across both.
48
47
  * @typedef {object} LoadedComponentDoc
49
48
  * @property {string} [name]
50
49
  * @property {string} [description]
@@ -56,9 +55,7 @@ export {CORE_PACKAGE};
56
55
  */
57
56
 
58
57
  /**
59
- * Options object for `loadDocs`, matching its declared parameter shape (used
60
- * as a cast target so `lang` (which the API may hold as `string|null`) type
61
- * checks against `loadDocs`'s `lang?: string`).
58
+ * Options object for the shared component-doc loader.
62
59
  * @typedef {{zh?: boolean, dense?: boolean, lang?: string}} LoadDocsOpts
63
60
  */
64
61
 
@@ -381,9 +378,22 @@ export async function resolveUnscopedDoc(dirName, {coreDir, cwd, name}) {
381
378
  */
382
379
  export async function loadComponentDoc(docPath, opts = {}) {
383
380
  const {zh = false, dense = false, lang = null} = opts;
384
- return /** @type {LoadedComponentDoc} */ (
385
- await loadDocs(docPath, /** @type {LoadDocsOpts} */ ({zh, dense, lang}))
386
- );
381
+ try {
382
+ return /** @type {LoadedComponentDoc} */ (
383
+ await loadValidatedComponentDoc(
384
+ docPath,
385
+ /** @type {LoadDocsOpts} */ ({zh, dense, lang}),
386
+ )
387
+ );
388
+ } catch (err) {
389
+ throw new AstryxError(
390
+ `Cannot load component metadata: ${
391
+ err instanceof Error ? err.message : String(err)
392
+ }`,
393
+ undefined,
394
+ ERROR_CODES.ERR_INVALID_DOC,
395
+ );
396
+ }
387
397
  }
388
398
 
389
399
  /**
@@ -12,6 +12,7 @@ export const doc = {
12
12
  type: 'function',
13
13
  kind: 'api',
14
14
  name: 'component',
15
+ namespace: 'cli/api',
15
16
  displayName: 'component()',
16
17
  summary:
17
18
  'Resolve a component by name, or list the catalog, with optional focused slices (props, source, showcase, blocks).',
@@ -143,14 +143,20 @@ export async function component(name, options = {}) {
143
143
  // Searches that package first — critical for names that exist in both core
144
144
  // and an external package (AppShell, Button, SideNav).
145
145
  if (packageScope) {
146
- const scoped = classifyScope(packageScope, {owners, loadedIntegrations, cwd, name});
146
+ const scoped = classifyScope(packageScope, {
147
+ owners,
148
+ loadedIntegrations,
149
+ cwd,
150
+ name,
151
+ });
147
152
 
148
153
  if (scoped.kind === 'core' || scoped.kind === 'integration') {
149
154
  const owner = scoped.owner;
150
155
  if (source) {
151
156
  return componentDetailSource(dirName, owner.sourcePath, {
152
157
  name,
153
- notFoundInPackage: scoped.kind === 'integration' ? packageScope : null,
158
+ notFoundInPackage:
159
+ scoped.kind === 'integration' ? packageScope : null,
154
160
  });
155
161
  }
156
162
  // showcase/blocks were previously dropped on the scoped path — a
@@ -187,17 +193,48 @@ export async function component(name, options = {}) {
187
193
  }
188
194
  const docs = await loadComponentDoc(extDocPath, docOpts);
189
195
  if (props) return componentDetailProps(docs);
190
- return componentDetail(docs, {package: scoped.ext.name, sourcePath: null}, dirName, coreDir);
196
+ return componentDetail(
197
+ docs,
198
+ {package: scoped.ext.name, sourcePath: null},
199
+ dirName,
200
+ coreDir,
201
+ );
202
+ }
203
+ throw new AstryxError(
204
+ `No component "${name}" in package "${packageScope}"`,
205
+ undefined,
206
+ ERROR_CODES.ERR_UNKNOWN_COMPONENT,
207
+ );
208
+ }
209
+
210
+ // Invalid integration metadata does not create ambiguity against a valid
211
+ // owner. Keep raw owners only when no doc owner is valid, so an integration-
212
+ // only component still exposes its source and returns ERR_INVALID_DOC for
213
+ // detail instead of degrading to an unrelated unknown-component error.
214
+ const validOwners = [];
215
+ for (const owner of owners) {
216
+ if (owner.package === CORE_PACKAGE) {
217
+ validOwners.push(owner);
218
+ continue;
219
+ }
220
+ try {
221
+ await loadComponentDoc(owner.docPath);
222
+ validOwners.push(owner);
223
+ } catch {
224
+ // Project/Doctor report invalid metadata; it is not an effective owner.
191
225
  }
192
- throw new AstryxError(`No component "${name}" in package "${packageScope}"`, undefined, ERROR_CODES.ERR_UNKNOWN_COMPONENT);
193
226
  }
227
+ const effectiveOwners = validOwners.length > 0 ? validOwners : owners;
194
228
 
195
- // ── Ambiguity: owned by MORE THAN ONE package, no --package ─────
196
- assertUnambiguousOwners(owners, dirName);
229
+ // ── Ambiguity: owned by MORE THAN ONE valid package, no --package ──
230
+ assertUnambiguousOwners(effectiveOwners, dirName);
197
231
 
198
232
  // ── Single non-core owner (an integration provides it, core does not) ──
199
- if (owners.length === 1 && owners[0].package !== CORE_PACKAGE) {
200
- const owner = owners[0];
233
+ if (
234
+ effectiveOwners.length === 1 &&
235
+ effectiveOwners[0].package !== CORE_PACKAGE
236
+ ) {
237
+ const owner = effectiveOwners[0];
201
238
  if (source) {
202
239
  return componentDetailSource(dirName, owner.sourcePath, {name});
203
240
  }
@@ -213,7 +250,11 @@ export async function component(name, options = {}) {
213
250
  // ── No-scope core path ─────────────────────────────────────────
214
251
  // `--source` reads core directly (no external/fuzzy fallback).
215
252
  if (source) {
216
- return componentDetailSource(dirName, resolveCoreSourcePath(coreDir, dirName), {name});
253
+ return componentDetailSource(
254
+ dirName,
255
+ resolveCoreSourcePath(coreDir, dirName),
256
+ {name},
257
+ );
217
258
  }
218
259
  if (showcase) {
219
260
  return componentDetailShowcase(dirName, {cwd, name});
@@ -232,10 +273,14 @@ export async function component(name, options = {}) {
232
273
  // scope the response to just the matching sub-component.
233
274
  const sub = scopeSubComponent(docs, dirName, coreDir);
234
275
  if (sub) {
235
- if (props) return componentDetailProps({props: sub.matchingComponent.props});
276
+ if (props)
277
+ return componentDetailProps({props: sub.matchingComponent.props});
236
278
  return componentDetail(
237
279
  sub.scoped,
238
- {package: resolved.resolvedOwnerPackage, sourcePath: resolved.resolvedSourcePath},
280
+ {
281
+ package: resolved.resolvedOwnerPackage,
282
+ sourcePath: resolved.resolvedSourcePath,
283
+ },
239
284
  dirName,
240
285
  coreDir,
241
286
  );
@@ -244,7 +289,10 @@ export async function component(name, options = {}) {
244
289
  if (props) return componentDetailProps(docs);
245
290
  return componentDetail(
246
291
  docs,
247
- {package: resolved.resolvedOwnerPackage, sourcePath: resolved.resolvedSourcePath},
292
+ {
293
+ package: resolved.resolvedOwnerPackage,
294
+ sourcePath: resolved.resolvedSourcePath,
295
+ },
248
296
  resolved.resolvedName,
249
297
  coreDir,
250
298
  );
@@ -15,7 +15,7 @@ import {
15
15
  CORE_PACKAGE,
16
16
  discoverComponents,
17
17
  discoverExternalComponentsGrouped,
18
- discoverIntegrationComponents,
18
+ discoverValidIntegrationComponents,
19
19
  findComponentReadme,
20
20
  findExternalComponentDoc,
21
21
  resolveImportPath,
@@ -228,7 +228,8 @@ export async function componentList(
228
228
  const seenIntegration = new Set();
229
229
  for (const integration of loadedIntegrations) {
230
230
  seenIntegration.add(integration.name);
231
- const owned = discoverIntegrationComponents(integration);
231
+ const {components: owned} =
232
+ await discoverValidIntegrationComponents(integration);
232
233
  // Group integration components by their doc `group`, falling back to the
233
234
  // package name. Keys are package-qualified so they never collide with
234
235
  // core groups or each other.
@@ -11,6 +11,7 @@ export const doc = {
11
11
  type: 'function',
12
12
  kind: 'api',
13
13
  name: 'discover',
14
+ namespace: 'cli/api',
14
15
  displayName: 'discover()',
15
16
  summary: 'Browse and search components from configured external packages.',
16
17
  description:
@@ -16,22 +16,79 @@
16
16
  */
17
17
  export function loadDocsCatalog(cwd?: string): Promise<DocsCatalog>;
18
18
  /**
19
- * The overlay languages a topic ships for its own file or any extension.
20
- * @param {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} entry
21
- * @returns {string[]}
19
+ * The CLI's own topics alone, for a check that runs without a project.
20
+ * @returns {DocsCatalog}
22
21
  */
23
- export function overlayLanguages(entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry): string[];
22
+ export function builtinCatalog(): DocsCatalog;
24
23
  /**
25
- * One topic, lowered for `lang`: overlaid, extensions merged, keys stamped.
26
- * Memoized per catalog, so a read that references a topic twice loads it once.
27
- * Every read of the catalog shares the memoized node, so it is frozen; the
28
- * lenses hand readers copies.
24
+ * One topic, lowered for `lang` with every link between docs resolved
25
+ * (spec:AST-047 FR9): an inline `{@link <target>}` reads as the command that
26
+ * opens its doc, and a `reference` block carries the doc it names and the
27
+ * `content` it includes of it. Memoized per catalog and frozen, like the
28
+ * lowered node.
29
29
  * @param {DocsCatalog} catalog
30
- * @param {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} entry
30
+ * @param {DocsTopicEntry} entry
31
31
  * @param {string | null} [lang]
32
32
  * @returns {Promise<import('../../foundation/doc-compiler/compile.mjs').CompiledReferenceNode>}
33
33
  */
34
- export function lowerTopic(catalog: DocsCatalog, entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry, lang?: string | null): Promise<import("../../foundation/doc-compiler/compile.mjs").CompiledReferenceNode>;
34
+ export function lowerTopic(catalog: DocsCatalog, entry: DocsTopicEntry, lang?: string | null): Promise<import("../../foundation/doc-compiler/compile.mjs").CompiledReferenceNode>;
35
+ /**
36
+ * Each link in a topic that names no doc.
37
+ * @param {DocsCatalog} catalog
38
+ * @param {DocsTopicEntry} entry
39
+ * @returns {Promise<LinkProblem[]>}
40
+ */
41
+ export function topicLinkProblems(catalog: DocsCatalog, entry: DocsTopicEntry): Promise<LinkProblem[]>;
42
+ /**
43
+ * The project's docs tree: the CLI's own docs plus the namespace docs and
44
+ * placed guides the configured integrations ship (spec:AST-046), built once
45
+ * per catalog. Without integration docs it is the CLI's tree, built once per
46
+ * process.
47
+ * @param {DocsCatalog} catalog
48
+ * @param {{fresh?: boolean}} [options] `fresh`: reread the CLI's tree files
49
+ * @returns {Promise<DocsTree>}
50
+ */
51
+ export function projectTree(catalog: DocsCatalog, { fresh }?: {
52
+ fresh?: boolean;
53
+ }): Promise<DocsTree>;
54
+ /**
55
+ * How a doc's links find their targets (spec:AST-047 FR9), as
56
+ * {@link docFinder} finds them: each resolves to the link a read shows.
57
+ * @param {DocsCatalog} catalog
58
+ * @param {string} fromProvider the provider id of the doc the links sit in
59
+ * @returns {Promise<LinkResolver>}
60
+ */
61
+ export function linkResolver(catalog: DocsCatalog, fromProvider: string): Promise<LinkResolver>;
62
+ /**
63
+ * Every link in the project's docs that names no doc: in each topic, each
64
+ * guide the tree places, and each typed doc.
65
+ * @param {DocsCatalog} catalog
66
+ * @param {DocsTree} tree
67
+ * @param {{owner?: string, references?: boolean}} [options] `owner`: only the
68
+ * docs this package owns. `references`: instead of the links, each reference
69
+ * block that cannot include what it names; a reader loses that content,
70
+ * where a link that names no doc still prints as written
71
+ * @returns {Promise<string[]>}
72
+ */
73
+ export function docsLinkProblems(catalog: DocsCatalog, tree: DocsTree, { owner, references }?: {
74
+ owner?: string;
75
+ references?: boolean;
76
+ }): Promise<string[]>;
77
+ /**
78
+ * What \`astryx doctor integration docs\` checks in one integration's docs: the
79
+ * docs tree they build beside the CLI's (namespaces, placements, routes) and
80
+ * every link in them (spec:AST-046, spec:AST-047).
81
+ * @param {{name: string}} integration
82
+ * @param {{records: import('../../foundation/discovery/docs-discovery.mjs').DocsTopicRecord[], namespaces: import('../../foundation/doc-compiler/tree.mjs').TreeNamespaceInput[], guides: import('../../foundation/doc-compiler/tree.mjs').TreeDocInput[]}} discovered
83
+ * @returns {Promise<string[]>}
84
+ */
85
+ export function packageDocsProblems(integration: {
86
+ name: string;
87
+ }, discovered: {
88
+ records: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicRecord[];
89
+ namespaces: import("../../foundation/doc-compiler/tree.mjs").TreeNamespaceInput[];
90
+ guides: import("../../foundation/doc-compiler/tree.mjs").TreeDocInput[];
91
+ }): Promise<string[]>;
35
92
  /**
36
93
  * How a token reference finds its target: the topic it names in `catalog`,
37
94
  * lowered for the same language.
@@ -40,6 +97,22 @@ export function lowerTopic(catalog: DocsCatalog, entry: import("../../foundation
40
97
  * @returns {(topic: string) => Promise<import('../../foundation/doc-compiler/compile.mjs').CompiledReferenceNode | null>}
41
98
  */
42
99
  export function referenceTargets(catalog: DocsCatalog, lang: string | null): (topic: string) => Promise<import("../../foundation/doc-compiler/compile.mjs").CompiledReferenceNode | null>;
100
+ /**
101
+ * Each reference block in one integration's docs that cannot include what it
102
+ * names (spec:AST-047 FR9): a target that names no doc, a field its schema
103
+ * does not have, or a projection its doc cannot take. A reader would lose
104
+ * that content, so `astryx doctor integration docs` fails on each.
105
+ * @param {{name: string}} integration
106
+ * @param {{records: import('../../foundation/discovery/docs-discovery.mjs').DocsTopicRecord[], namespaces: import('../../foundation/doc-compiler/tree.mjs').TreeNamespaceInput[], guides: import('../../foundation/doc-compiler/tree.mjs').TreeDocInput[]}} discovered
107
+ * @returns {Promise<string[]>}
108
+ */
109
+ export function packageReferenceProblems(integration: {
110
+ name: string;
111
+ }, discovered: {
112
+ records: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicRecord[];
113
+ namespaces: import("../../foundation/doc-compiler/tree.mjs").TreeNamespaceInput[];
114
+ guides: import("../../foundation/doc-compiler/tree.mjs").TreeDocInput[];
115
+ }): Promise<string[]>;
43
116
  /**
44
117
  * One topic, compiled for `lang`: lowered, then every token reference linked.
45
118
  * @param {DocsCatalog} catalog
@@ -49,33 +122,178 @@ export function referenceTargets(catalog: DocsCatalog, lang: string | null): (to
49
122
  */
50
123
  export function compileTopic(catalog: DocsCatalog, entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry, lang?: string | null): Promise<import("../../foundation/doc-compiler/compile.mjs").CompiledReferenceNode>;
51
124
  /**
52
- * Resolve `topic` against the project's catalog (throwing `ERR_UNKNOWN_TOPIC`
53
- * when unmatched) and lower it with any --dense/--zh overlay and any
54
- * integration extension applied. Shared by the leaves so topic normalization
55
- * and unknown-topic handling live in exactly one place.
56
- *
57
- * @param {string} topic
58
- * @param {object} [options]
59
- * @param {string} [options.lang]
60
- * @param {boolean} [options.zh]
61
- * @param {boolean} [options.dense]
62
- * @param {string} [options.cwd]
63
- * @returns {Promise<{
64
- * catalog: DocsCatalog,
65
- * node: import('../../foundation/doc-compiler/compile.mjs').CompiledReferenceNode,
66
- * lang: string | null,
67
- * }>}
68
- */
69
- export function resolveTopicDocs(topic: string, options?: {
70
- lang?: string | undefined;
71
- zh?: boolean | undefined;
72
- dense?: boolean | undefined;
73
- cwd?: string | undefined;
125
+ * A guide the docs tree places, as a topic entry the topic readers open by its
126
+ * route. It is never a flat topic: `astryx docs <route>` is its only name.
127
+ * @param {import('../../foundation/doc-compiler/tree.mjs').TreeNode} node
128
+ * @returns {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry}
129
+ */
130
+ export function guideEntry(node: import("../../foundation/doc-compiler/tree.mjs").TreeNode): import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry;
131
+ /**
132
+ * What a typed doc in the docs tree prints: its content, with every link to
133
+ * another doc resolved (spec:AST-047 FR9). A namespace has no content. The
134
+ * CLI's doc modules are discovery, so this lives in the adapter
135
+ * (architecture:cli-surface INV21).
136
+ * @param {DocsCatalog} catalog
137
+ * @param {DocsTree} tree
138
+ * @param {TreeNode} node
139
+ * @returns {Promise<{content: any[], problems: LinkProblem[]}>}
140
+ */
141
+ export function nodeContent(catalog: DocsCatalog, tree: DocsTree, node: TreeNode): Promise<{
142
+ content: any[];
143
+ problems: LinkProblem[];
144
+ }>;
145
+ /**
146
+ * The command that opens the level a topic sits in when the tree cannot say:
147
+ * a guide's parent namespace, or the topic list.
148
+ * @param {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} entry
149
+ * @returns {import('./docs.type.mjs').DocsCommand}
150
+ */
151
+ export function topicUp(entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry): import("./docs.type.mjs").DocsCommand;
152
+ /**
153
+ * The moves from a node's place in the tree (spec:AST-047 FR2, FR4): up to its
154
+ * parent (the topic list, at the top), and across to the nodes before and
155
+ * after it in its parent's slot.
156
+ * @param {DocsTree} tree
157
+ * @param {TreeNode} node
158
+ * @returns {import('./docs.type.mjs').DocsLinks}
159
+ */
160
+ export function placeLinks(tree: DocsTree, node: TreeNode): import("./docs.type.mjs").DocsLinks;
161
+ /**
162
+ * The moves a topic read offers: from its place in the tree, where a guide
163
+ * sits in its namespace and a flat topic in the Unorganized level.
164
+ * @param {DocsCatalog} catalog
165
+ * @param {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} entry
166
+ * @returns {Promise<import('./docs.type.mjs').DocsLinks>}
167
+ */
168
+ export function topicLinks(catalog: DocsCatalog, entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry): Promise<import("./docs.type.mjs").DocsLinks>;
169
+ /**
170
+ * What a docs argument names: a topic (a flat one, or a guide the docs tree
171
+ * places), a namespace or typed doc in the tree, or nothing, as nameOwner
172
+ * decides.
173
+ * @param {unknown} topic
174
+ * @param {{cwd?: string}} [options]
175
+ * @returns {Promise<
176
+ * | {kind: 'topic', catalog: DocsCatalog, entry: import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry}
177
+ * | {kind: 'node', catalog: DocsCatalog, tree: import('../../foundation/doc-compiler/tree.mjs').DocsTree, node: import('../../foundation/doc-compiler/tree.mjs').TreeNode}
178
+ * | {kind: 'unknown', catalog: DocsCatalog}
179
+ * >}
180
+ */
181
+ export function resolveDocsArgument(topic: unknown, { cwd }?: {
182
+ cwd?: string;
183
+ }): Promise<{
184
+ kind: "topic";
185
+ catalog: DocsCatalog;
186
+ entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry;
187
+ } | {
188
+ kind: "node";
189
+ catalog: DocsCatalog;
190
+ tree: import("../../foundation/doc-compiler/tree.mjs").DocsTree;
191
+ node: import("../../foundation/doc-compiler/tree.mjs").TreeNode;
192
+ } | {
193
+ kind: "unknown";
194
+ catalog: DocsCatalog;
195
+ }>;
196
+ /**
197
+ * Who answers to a name a reader types (spec:AST-046 FR5, FR11). The tree
198
+ * decides first: the node at that route, compared without case, holds it. A
199
+ * name with no node of its own is a topic's other name (its `replaces`
200
+ * alias), and that topic answers, unless the tree gave the topic's own route
201
+ * to another doc. Reads, the topic list, and search all ask this, so they
202
+ * agree on every name.
203
+ * @param {DocsTree} tree
204
+ * @param {DocsCatalog} catalog
205
+ * @param {string} name
206
+ * @returns {{kind: 'topic', entry: import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} | {kind: 'node', node: TreeNode} | null}
207
+ */
208
+ export function nameOwner(tree: DocsTree, catalog: DocsCatalog, name: string): {
209
+ kind: "topic";
210
+ entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry;
211
+ } | {
212
+ kind: "node";
213
+ node: TreeNode;
214
+ } | null;
215
+ /**
216
+ * Whether a topic answers to its own name: what the topic list and search
217
+ * offer must open that topic.
218
+ * @param {DocsTree} tree
219
+ * @param {DocsCatalog} catalog
220
+ * @param {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} entry
221
+ * @returns {boolean}
222
+ */
223
+ export function holdsOwnName(tree: DocsTree, catalog: DocsCatalog, entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry): boolean;
224
+ /**
225
+ * The doc that took a flat topic's route in the docs tree, when it is not
226
+ * that topic (spec:AST-046 FR11): the CLI keeps its routes, such as `cli`
227
+ * and `unorganized`, and a namespace keeps its route over a topic of the same
228
+ * name. Null when the topic owns its route, or the tree has no node there.
229
+ * @param {DocsTree} tree
230
+ * @param {import('../../foundation/discovery/docs-discovery.mjs').DocsTopicEntry} entry
231
+ * @returns {TreeNode | null}
232
+ */
233
+ export function routeOwner(tree: DocsTree, entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry): TreeNode | null;
234
+ /**
235
+ * The error for a docs argument that names nothing. For a route, it suggests
236
+ * the children of the deepest namespace the route reaches; otherwise, every
237
+ * topic and every top-level namespace.
238
+ * @param {unknown} topic
239
+ * @param {DocsCatalog} catalog
240
+ * @returns {Promise<AstryxError>}
241
+ */
242
+ export function unknownTopicError(topic: unknown, catalog: DocsCatalog): Promise<AstryxError>;
243
+ /**
244
+ * A sentence naming the packages whose docs did not load, or nothing: a doc
245
+ * that fails to load withdraws its package's docs, so a reader who cannot
246
+ * find one learns where to look.
247
+ * @param {DocsCatalog} catalog
248
+ * @returns {string}
249
+ */
250
+ export function notLoaded(catalog: DocsCatalog): string;
251
+ /**
252
+ * Resolve a topic (a flat one, or a guide the docs tree places by its route)
253
+ * and lower it for the topic readers.
254
+ * @param {unknown} topic
255
+ * @param {{lang?: string | null, zh?: boolean, dense?: boolean, cwd?: string}} [options]
256
+ */
257
+ export function resolveTopicDocs(topic: unknown, options?: {
258
+ lang?: string | null;
259
+ zh?: boolean;
260
+ dense?: boolean;
261
+ cwd?: string;
74
262
  }): Promise<{
75
263
  catalog: DocsCatalog;
76
264
  node: import("../../foundation/doc-compiler/compile.mjs").CompiledReferenceNode;
77
265
  lang: string | null;
266
+ entry: import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry;
78
267
  }>;
79
- /** The localized overlays a docs read can apply. */
80
- export const OVERLAY_LANGUAGES: string[];
268
+ /**
269
+ * A doc a link found: what a read shows of the link, and the typed doc behind
270
+ * it when a reference block can include it.
271
+ */
272
+ export type FoundDoc = {
273
+ link: import("../../foundation/doc-compiler/links.mjs").DocLink;
274
+ /**
275
+ * the doc's kind
276
+ */
277
+ kind: string;
278
+ /**
279
+ * a
280
+ * schema, command, function, or enum doc: a leaf of the docs tree (`tree`),
281
+ * or a section of `astryx docs authoring`; null for any other kind
282
+ */
283
+ typed: {
284
+ doc: any;
285
+ providerId: string;
286
+ tree: boolean;
287
+ } | null;
288
+ };
289
+ export type DocsTree = import("../../foundation/doc-compiler/tree.mjs").DocsTree;
290
+ export type TreeNode = import("../../foundation/doc-compiler/tree.mjs").TreeNode;
291
+ export type LinkProblem = import("../../foundation/doc-compiler/links.mjs").LinkProblem;
292
+ export type LinkResolver = import("../../foundation/doc-compiler/links.mjs").LinkResolver;
293
+ export type DocIncluder = import("../../foundation/doc-compiler/links.mjs").DocIncluder;
294
+ export type DocsTopicEntry = import("../../foundation/discovery/docs-discovery.mjs").DocsTopicEntry;
81
295
  import { DocsCatalog } from '../../foundation/discovery/docs-discovery.mjs';
296
+ import { AstryxError } from '../error.mjs';
297
+ import { OVERLAY_LANGUAGES } from '../../foundation/doc-compiler/read.mjs';
298
+ import { overlayLanguages } from '../../foundation/doc-compiler/read.mjs';
299
+ export { OVERLAY_LANGUAGES, overlayLanguages };