@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
@@ -6,6 +6,7 @@ import * as path from 'node:path';
6
6
  import {Project, DEFAULT_ISSUES_URL, findConfigPath} from './project.mjs';
7
7
  import {InMemoryConfigCache} from './config-cache.mjs';
8
8
  import * as componentDiscovery from '../discovery/component-discovery.mjs';
9
+ import {discoverCoreTemplates} from '../discovery/template-adapter.mjs';
9
10
 
10
11
  let tmpDir;
11
12
  let originalCwd;
@@ -21,6 +22,9 @@ function scaffold({
21
22
  issuesUrl,
22
23
  withComponents = true,
23
24
  withTemplates = true,
25
+ templateId = 'hero',
26
+ templateType = 'block',
27
+ templateReplaces = null,
24
28
  withCodemods = true,
25
29
  brokenComponent = false,
26
30
  brokenCodemod = false,
@@ -65,7 +69,7 @@ function scaffold({
65
69
  fs.mkdirSync(compDir, {recursive: true});
66
70
  fs.writeFileSync(
67
71
  path.join(compDir, 'Widget.doc.mjs'),
68
- `export const docs = { name: 'Widget', usage: {description: 'A widget'} };\n`,
72
+ `export const docs = { name: 'Widget', usage: {description: 'A widget'}, props: [] };\n`,
69
73
  );
70
74
  if (!brokenComponent) {
71
75
  fs.writeFileSync(
@@ -80,12 +84,12 @@ function scaffold({
80
84
  const tDir = path.join(pkgDir, 'templates');
81
85
  fs.mkdirSync(tDir, {recursive: true});
82
86
  fs.writeFileSync(
83
- path.join(tDir, 'hero.doc.mjs'),
84
- `export default { type: 'block', name: 'Hero', description: 'A hero' };\n`,
87
+ path.join(tDir, `${templateId}.doc.mjs`),
88
+ `export default { type: '${templateType}', name: 'Fixture template', description: 'A fixture template'${templateReplaces == null ? '' : `, replaces: ${JSON.stringify(templateReplaces)}`} };\n`,
85
89
  );
86
90
  fs.writeFileSync(
87
- path.join(tDir, 'hero.tsx'),
88
- `export default function Hero() { return null; }\n`,
91
+ path.join(tDir, `${templateId}.tsx`),
92
+ `export default function FixtureTemplate() { return null; }\n`,
89
93
  );
90
94
  }
91
95
 
@@ -163,7 +167,7 @@ function scaffoldLocalPackage({name = '@acme/local'} = {}) {
163
167
 
164
168
  fs.mkdirSync(path.join(tmpDir, 'templates'));
165
169
  fs.writeFileSync(
166
- path.join(tmpDir, 'templates', 'local-page.template.mjs'),
170
+ path.join(tmpDir, 'templates', 'local-page.doc.mjs'),
167
171
  `export default {type: 'page', name: 'Local page', description: 'Local page.'};\n`,
168
172
  );
169
173
  fs.writeFileSync(
@@ -181,21 +185,8 @@ function scaffoldLocalPackage({name = '@acme/local'} = {}) {
181
185
 
182
186
  fs.mkdirSync(path.join(tmpDir, 'themes', 'ocean'), {recursive: true});
183
187
  fs.writeFileSync(
184
- path.join(tmpDir, 'themes', 'manifest.json'),
185
- JSON.stringify({
186
- version: 1,
187
- themes: [
188
- {
189
- slug: 'ocean',
190
- displayName: 'Ocean',
191
- description: 'Ocean theme.',
192
- maintained: true,
193
- entry: 'oceanTheme.ts',
194
- exportName: 'oceanTheme',
195
- files: ['oceanTheme.ts'],
196
- },
197
- ],
198
- }),
188
+ path.join(tmpDir, 'themes', 'ocean', 'oceanTheme.doc.mjs'),
189
+ `/** @type {import('@astryxdesign/cli/authoring').ThemeDoc} */\nexport default {type: 'theme', name: 'ocean', displayName: 'Ocean', description: 'Ocean theme.', maintained: true};\n`,
199
190
  );
200
191
  fs.writeFileSync(
201
192
  path.join(tmpDir, 'themes', 'ocean', 'oceanTheme.ts'),
@@ -337,6 +328,91 @@ describe('Project discovery', () => {
337
328
  expect(hero.type).toBe('block');
338
329
  });
339
330
 
331
+ it('templates() projects a valid integration replacement instead of its Core target', async () => {
332
+ const corePage = (await discoverCoreTemplates()).find(
333
+ template => template.type === 'page',
334
+ );
335
+ expect(corePage).toBeDefined();
336
+ scaffold({
337
+ templateId: 'acme-app-shell',
338
+ templateType: 'page',
339
+ templateReplaces: corePage.dirName,
340
+ });
341
+ const project = await Project.load(tmpDir);
342
+
343
+ const templates = await project.templates();
344
+
345
+ expect(
346
+ templates.find(template => template.dirName === 'acme-app-shell'),
347
+ ).toMatchObject({
348
+ package: '@acme/widgets',
349
+ replaces: corePage.dirName,
350
+ });
351
+ expect(
352
+ templates.find(
353
+ template =>
354
+ template.dirName === corePage.dirName &&
355
+ template.package !== '@acme/widgets',
356
+ ),
357
+ ).toBeUndefined();
358
+ expect(await project.issues()).toEqual([]);
359
+ });
360
+
361
+ it('reports replacement issues regardless of discovery call order without hiding other contributions', async () => {
362
+ scaffold({
363
+ templateReplaces: 'missing-core-template',
364
+ });
365
+
366
+ const componentsFirst = await Project.load(tmpDir);
367
+ expect(
368
+ (await componentsFirst.components()).some(
369
+ component => component.package === '@acme/widgets',
370
+ ),
371
+ ).toBe(true);
372
+ expect(await componentsFirst.issues()).toEqual(
373
+ expect.arrayContaining([
374
+ expect.objectContaining({
375
+ code: 'missing_template_replacement_target',
376
+ package: '@acme/widgets',
377
+ }),
378
+ ]),
379
+ );
380
+
381
+ const issuesFirst = await Project.load(tmpDir, {fresh: true});
382
+ expect(await issuesFirst.issues()).toEqual(
383
+ expect.arrayContaining([
384
+ expect.objectContaining({
385
+ code: 'missing_template_replacement_target',
386
+ package: '@acme/widgets',
387
+ }),
388
+ ]),
389
+ );
390
+ expect(
391
+ (await issuesFirst.components()).some(
392
+ component => component.package === '@acme/widgets',
393
+ ),
394
+ ).toBe(true);
395
+ const ownTemplate = (await issuesFirst.templates()).find(
396
+ template =>
397
+ template.package === '@acme/widgets' && template.dirName === 'hero',
398
+ );
399
+ expect(ownTemplate).toBeDefined();
400
+ expect(ownTemplate).not.toHaveProperty('replaces');
401
+
402
+ const sharedCache = new InMemoryConfigCache();
403
+ const warm = await Project.load(tmpDir, {cache: sharedCache});
404
+ await warm.templates();
405
+ const cached = await Project.load(tmpDir, {cache: sharedCache});
406
+ expect(await cached.issues()).toEqual(
407
+ expect.arrayContaining([
408
+ expect.objectContaining({
409
+ code: 'missing_template_replacement_target',
410
+ package: '@acme/widgets',
411
+ }),
412
+ ]),
413
+ );
414
+ });
415
+
340
416
  it('codemods() returns core registry groups + integration groups', async () => {
341
417
  scaffold();
342
418
  const project = await Project.load(tmpDir);
@@ -481,6 +557,53 @@ describe('Project issues (skip + warn)', () => {
481
557
  expect(issues.some(i => i.package === '@acme/widgets')).toBe(true);
482
558
  });
483
559
 
560
+ it('keeps valid contribution kinds and siblings when others are broken', async () => {
561
+ const pkgDir = scaffold({brokenComponent: true});
562
+ fs.writeFileSync(
563
+ path.join(pkgDir, 'templates', 'broken.template.mjs'),
564
+ `export default {type: 'block', name: 'Broken', description: 'Missing source'};\n`,
565
+ );
566
+ fs.writeFileSync(
567
+ path.join(pkgDir, 'components', 'ValidWidget.doc.mjs'),
568
+ `export default {type: 'component', name: 'ValidWidget', props: []};\n`,
569
+ );
570
+ fs.writeFileSync(
571
+ path.join(pkgDir, 'components', 'ValidWidget.tsx'),
572
+ `export function ValidWidget() { return null; }\n`,
573
+ );
574
+ const project = await Project.load(tmpDir);
575
+
576
+ const templates = await project.templates();
577
+ const components = await project.components();
578
+ const issues = await project.issues();
579
+
580
+ expect(
581
+ templates.find(
582
+ template =>
583
+ template.dirName === 'hero' && template.package === '@acme/widgets',
584
+ ),
585
+ ).toBeDefined();
586
+ expect(
587
+ components.find(
588
+ component =>
589
+ component.name === 'ValidWidget' &&
590
+ component.package === '@acme/widgets',
591
+ ),
592
+ ).toBeDefined();
593
+ expect(
594
+ components.find(
595
+ component =>
596
+ component.name === 'Widget' && component.package === '@acme/widgets',
597
+ ),
598
+ ).toBeUndefined();
599
+ expect(issues).toEqual(
600
+ expect.arrayContaining([
601
+ expect.objectContaining({code: 'invalid_component'}),
602
+ expect.objectContaining({code: 'invalid_template'}),
603
+ ]),
604
+ );
605
+ });
606
+
484
607
  it('does not throw when an integration codemod is broken', async () => {
485
608
  scaffold({brokenCodemod: true});
486
609
  const project = await Project.load(tmpDir);
@@ -24,6 +24,24 @@ export function loadAuthoringSelfDocs(sources?: string[], root?: string): Promis
24
24
  error: string;
25
25
  }[];
26
26
  }>;
27
+ /**
28
+ * A schema's fields as the table its section prints, each nested field on the
29
+ * row after its parent; null when there are none. A reference block that
30
+ * names some of a schema's fields includes this table of just those.
31
+ * @param {any[]} fields
32
+ * @returns {{type: 'table', headers: string[], rows: string[][]} | null}
33
+ */
34
+ export function schemaFieldTable(fields: any[]): {
35
+ type: "table";
36
+ headers: string[];
37
+ rows: string[][];
38
+ } | null;
39
+ /**
40
+ * One self-doc as a topic section, keyed by the doc's own name.
41
+ * @param {any} doc
42
+ * @returns {import('../../authoring/doctypes/reference/type').ReferenceSection}
43
+ */
44
+ export function selfDocSection(doc: any): import("../../authoring/doctypes/reference/type").ReferenceSection;
27
45
  /**
28
46
  * The `authoring` topic: one section per self-doc, in the order given.
29
47
  * @param {any[]} docs
@@ -17,8 +17,8 @@
17
17
 
18
18
  import * as fs from 'node:fs';
19
19
  import * as path from 'node:path';
20
- import {pathToFileURL} from 'node:url';
21
20
  import {CLI_ROOT} from '../fs/paths.mjs';
21
+ import {readDocView} from '../doc-compiler/read.mjs';
22
22
  import {
23
23
  DOC_OUTPUT_BUDGET_BYTES,
24
24
  oversizedDocSections,
@@ -31,6 +31,8 @@ export const AUTHORING_ROOT = path.join(CLI_ROOT, 'authoring');
31
31
  export const AUTHORING_SELF_DOCS = [
32
32
  'integration/integration.doc.mjs',
33
33
  'config/config.doc.mjs',
34
+ 'debug/debug.doc.mjs',
35
+ 'gap-report/gap-report.doc.mjs',
34
36
  'codemod/codemod.doc.mjs',
35
37
  'identity/identity.doc.mjs',
36
38
  'doctypes/base/graph-fields.doc.mjs',
@@ -43,6 +45,7 @@ export const AUTHORING_SELF_DOCS = [
43
45
  'doctypes/reference/reference.doc.mjs',
44
46
  'doctypes/schema/schema.doc.mjs',
45
47
  'doctypes/template/template.doc.mjs',
48
+ 'doctypes/theme/theme.doc.mjs',
46
49
  ];
47
50
 
48
51
  /** Blocks a self-doc note may carry that a topic section can render. */
@@ -59,7 +62,8 @@ export function discoverAuthoringSelfDocSources(root = AUTHORING_ROOT) {
59
62
  /** @param {string} dir */
60
63
  const walk = dir => {
61
64
  for (const entry of fs.readdirSync(dir, {withFileTypes: true})) {
62
- if (entry.name === 'node_modules' || entry.name.startsWith('__')) continue;
65
+ if (entry.name === 'node_modules' || entry.name.startsWith('__'))
66
+ continue;
63
67
  const full = path.join(dir, entry.name);
64
68
  if (entry.isDirectory()) walk(full);
65
69
  else if (entry.name.endsWith('.doc.mjs')) {
@@ -86,9 +90,14 @@ export async function loadAuthoringSelfDocs(
86
90
  const failed = [];
87
91
  for (const source of sources) {
88
92
  try {
89
- const mod = await import(pathToFileURL(path.join(root, source)).href);
90
- const doc = mod.doc ?? mod.docs ?? mod.default;
91
- if (typeof doc?.name !== 'string' || typeof doc?.description !== 'string') {
93
+ const doc = await readDocView(path.join(root, source), {
94
+ root: 'self-docs',
95
+ loader: 'native',
96
+ });
97
+ if (
98
+ typeof doc?.name !== 'string' ||
99
+ typeof doc?.description !== 'string'
100
+ ) {
92
101
  throw new Error('exports no doc with a name and a description');
93
102
  }
94
103
  loaded.push({source, doc});
@@ -124,27 +133,40 @@ function fieldRows(fields) {
124
133
  ]);
125
134
  }
126
135
 
136
+ /**
137
+ * A schema's fields as the table its section prints, each nested field on the
138
+ * row after its parent; null when there are none. A reference block that
139
+ * names some of a schema's fields includes this table of just those.
140
+ * @param {any[]} fields
141
+ * @returns {{type: 'table', headers: string[], rows: string[][]} | null}
142
+ */
143
+ export function schemaFieldTable(fields) {
144
+ const rows = fieldRows(fields);
145
+ return rows.length > 0
146
+ ? {
147
+ type: 'table',
148
+ headers: ['Field', 'Type', 'Required', 'Description'],
149
+ rows,
150
+ }
151
+ : null;
152
+ }
153
+
127
154
  /**
128
155
  * One self-doc as a topic section, keyed by the doc's own name.
129
156
  * @param {any} doc
130
157
  * @returns {import('../../authoring/doctypes/reference/type').ReferenceSection}
131
158
  */
132
- function selfDocSection(doc) {
159
+ export function selfDocSection(doc) {
133
160
  /** @type {any[]} */
134
161
  const content = [{type: 'prose', text: doc.description}];
135
162
  if (doc.appliesTo) {
136
163
  content.push({type: 'prose', text: `Applies to: ${doc.appliesTo}`});
137
164
  }
138
- const rows = fieldRows(doc.fields ?? []);
139
- if (rows.length > 0) {
140
- content.push({
141
- type: 'table',
142
- headers: ['Field', 'Type', 'Required', 'Description'],
143
- rows,
144
- });
145
- }
165
+ const table = schemaFieldTable(doc.fields ?? []);
166
+ if (table) content.push(table);
146
167
  for (const example of doc.examples ?? []) {
147
- if (typeof example?.code !== 'string' || example.code.trim() === '') continue;
168
+ if (typeof example?.code !== 'string' || example.code.trim() === '')
169
+ continue;
148
170
  content.push({
149
171
  type: 'code',
150
172
  lang: example.lang ?? 'js',
@@ -60,32 +60,48 @@ describe('authoring self-docs', () => {
60
60
  );
61
61
  });
62
62
 
63
- describe('what the authoring docs say about the unbuilt docs graph', () => {
64
- it('marks exactly the fields topic loading rejects as not read yet', () => {
63
+ describe('what the authoring docs say about the docs tree', () => {
64
+ it('marks exactly the fields the docs tree does not read yet', () => {
65
65
  const notReadYet = graphFieldsDoc.fields
66
66
  .filter(field => /Not read yet/.test(field.description))
67
67
  .map(field => field.name);
68
- expect(notReadYet.sort()).toEqual([...GRAPH_ONLY_FIELDS].sort());
68
+ // The tree reads `placement` for every guide (spec:AST-046); the other
69
+ // graph fields are still refused by every topic reader.
70
+ expect(notReadYet.sort()).toEqual(
71
+ GRAPH_ONLY_FIELDS.filter(field => field !== 'placement').sort(),
72
+ );
69
73
  for (const field of graphFieldsDoc.fields) {
70
- if (notReadYet.includes(field.name)) {
74
+ if (GRAPH_ONLY_FIELDS.includes(field.name)) {
71
75
  expect(field.description).toMatch(/fails to load/);
72
76
  }
73
77
  }
78
+ const placement = graphFieldsDoc.fields.find(f => f.name === 'placement');
79
+ expect(placement.description).toMatch(
80
+ /Read for every guide, the CLI's and each integration's/,
81
+ );
74
82
  expect(graphFieldsDoc.description).toMatch(/not built yet/);
75
83
  });
76
84
 
77
- it('says a topic using a graph block fails to load', () => {
85
+ it('keeps graph blocks behind the separate GraphContentBlock type, and a section takes a reference block', () => {
78
86
  const content = referenceDoc.fields
79
87
  .flatMap(field => [field, ...(field.fields ?? [])])
80
88
  .find(field => field.name === 'sections[].content');
89
+ expect(content.type).toBe('(ReferenceContentBlock | ReferenceDocBlock)[]');
90
+ expect(content.description).toContain('GraphContentBlock');
81
91
  for (const type of GRAPH_BLOCK_TYPES) {
82
92
  expect(content.description).toContain(type);
83
93
  }
84
- expect(content.description).toMatch(/fails to load/);
94
+ // A section's reference block reads as the doc it includes.
95
+ expect(GRAPH_BLOCK_TYPES.has('reference')).toBe(false);
96
+ expect(content.description).toMatch(
97
+ /A `reference` block .* includes another doc/,
98
+ );
85
99
  });
86
100
 
87
- it('says namespace docs are not loaded yet', () => {
88
- expect(namespaceDoc.description).toMatch(/Not loaded yet/);
101
+ it('says where namespace docs live: the CLI tree, and each integration', () => {
102
+ expect(namespaceDoc.description).toMatch(
103
+ /an integration ships its own in its docs directory/,
104
+ );
89
105
  expect(
90
106
  problemsInTopic({
91
107
  ...namespaceDoc.examples?.[0],
@@ -93,7 +109,7 @@ describe('what the authoring docs say about the unbuilt docs graph', () => {
93
109
  name: 'x',
94
110
  }),
95
111
  ).toEqual([
96
- '"x" is a namespace doc. Only the docs graph reads namespace docs, and it is not built yet; remove this file from the docs directory.',
112
+ '"x" is a namespace doc, which the docs tree reads, not the topic list. The CLI keeps its own in assets/docs/tree; an integration ships its namespace docs in its docs directory.',
97
113
  ]);
98
114
  });
99
115
  });
@@ -0,0 +1,74 @@
1
+ // @generated by scripts/sync-api-types.mjs from the JSDoc in foundation/**/*.mjs.
2
+ // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
+
4
+ /**
5
+ * Every type `@astryxdesign/cli/authoring` exports, in the order index.d.ts
6
+ * lists them, each traced to the module that declares it. A value export that
7
+ * traces to a JavaScript module (a parser) is not a type and is left out;
8
+ * anything else that cannot be traced is reported, never dropped.
9
+ * @param {string} [root]
10
+ * @returns {{
11
+ * types: {name: string, module: string}[],
12
+ * untraced: {name: string, reason: string}[],
13
+ * }} `module` is relative to `root`
14
+ */
15
+ export function tracePublicAuthoringTypes(root?: string): {
16
+ types: {
17
+ name: string;
18
+ module: string;
19
+ }[];
20
+ untraced: {
21
+ name: string;
22
+ reason: string;
23
+ }[];
24
+ };
25
+ /**
26
+ * What stands between each type `@astryxdesign/cli/authoring` exports and a
27
+ * reader of `astryx docs authoring`. A type is readable when a self-doc beside
28
+ * the module that declares it is listed in AUTHORING_SELF_DOCS, loads, and
29
+ * renders a section the topic's index lists. A registered self-doc must
30
+ * document something public: a public type declared beside it, and, when its
31
+ * title is the name of a type declared beside it, that type.
32
+ * @param {{root?: string, sources?: string[], topicKeys?: Set<string> | null}} [options]
33
+ * `topicKeys` are the keys `astryx docs authoring --index` lists; null skips
34
+ * that comparison.
35
+ * @returns {Promise<{
36
+ * types: number,
37
+ * unreadable: {module: string, names: string[], reason: UnreadableReason, source?: string, key?: string}[],
38
+ * untraced: {name: string, reason: string}[],
39
+ * unmatched: {source: string, key?: string, subject?: string}[],
40
+ * }>}
41
+ */
42
+ export function auditAuthoringSurface({ root, sources, topicKeys, }?: {
43
+ root?: string;
44
+ sources?: string[];
45
+ topicKeys?: Set<string> | null;
46
+ }): Promise<{
47
+ types: number;
48
+ unreadable: {
49
+ module: string;
50
+ names: string[];
51
+ reason: UnreadableReason;
52
+ source?: string;
53
+ key?: string;
54
+ }[];
55
+ untraced: {
56
+ name: string;
57
+ reason: string;
58
+ }[];
59
+ unmatched: {
60
+ source: string;
61
+ key?: string;
62
+ subject?: string;
63
+ }[];
64
+ }>;
65
+ /** The barrel the `types` condition of `@astryxdesign/cli/authoring` names. */
66
+ export const AUTHORING_SURFACE: "index.d.ts";
67
+ export type Tracer = {
68
+ root: string;
69
+ /**
70
+ * top-level statements by absolute path
71
+ */
72
+ parsed: Map<string, any[]>;
73
+ };
74
+ export type UnreadableReason = "no-self-doc" | "unregistered" | "failed" | "missing-section";