@astryxdesign/cli 0.6.3 → 0.6.4-canary.078fd25

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 (728) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/README.md +152 -107
  3. package/api/blog/blog.doc.mjs +1 -0
  4. package/api/build/_adapter.d.mts +50 -0
  5. package/api/build/_adapter.mjs +60 -0
  6. package/api/build/build.doc.mjs +22 -10
  7. package/api/build/build.test.mjs +219 -8
  8. package/api/build/build.type.d.mts +91 -2
  9. package/api/build/build.type.mjs +52 -8
  10. package/api/build/help/help.d.mts +12 -5
  11. package/api/build/help/help.mjs +69 -6
  12. package/api/build/kit/kit.d.mts +4 -1
  13. package/api/build/kit/kit.mjs +208 -53
  14. package/api/build/kit/rank.d.mts +44 -0
  15. package/api/build/kit/rank.mjs +432 -0
  16. package/api/build/kit/rank.test.mjs +196 -0
  17. package/api/component/_adapter.d.mts +31 -12
  18. package/api/component/_adapter.mjs +79 -15
  19. package/api/component/component.d.mts +6 -3
  20. package/api/component/component.doc.mjs +49 -19
  21. package/api/component/component.mjs +339 -22
  22. package/api/component/component.test.mjs +38 -0
  23. package/api/component/component.type.d.mts +47 -11
  24. package/api/component/component.type.mjs +76 -24
  25. package/api/component/detail/blocks/blocks.d.mts +2 -1
  26. package/api/component/detail/blocks/blocks.mjs +4 -3
  27. package/api/component/list/list.d.mts +0 -5
  28. package/api/component/list/list.mjs +40 -11
  29. package/api/discover/_adapter.d.mts +114 -6
  30. package/api/discover/_adapter.mjs +372 -17
  31. package/api/discover/_adapter.test.mjs +215 -0
  32. package/api/discover/_catalog-view.d.mts +115 -0
  33. package/api/discover/_catalog-view.mjs +203 -0
  34. package/api/discover/_catalog-view.test.mjs +128 -0
  35. package/api/discover/detail/detail.d.mts +18 -6
  36. package/api/discover/detail/detail.mjs +67 -13
  37. package/api/discover/detail/detail.test.mjs +85 -0
  38. package/api/discover/detail/item/item.d.mts +26 -0
  39. package/api/discover/detail/item/item.mjs +78 -0
  40. package/api/discover/detail/item/item.test.mjs +73 -0
  41. package/api/discover/discover.d.mts +3 -9
  42. package/api/discover/discover.doc.mjs +62 -18
  43. package/api/discover/discover.mjs +220 -36
  44. package/api/discover/discover.test.mjs +11 -2
  45. package/api/discover/discover.type.d.mts +150 -11
  46. package/api/discover/discover.type.mjs +107 -17
  47. package/api/discover/list/list.d.mts +20 -6
  48. package/api/discover/list/list.mjs +45 -12
  49. package/api/discover/list/list.test.mjs +46 -0
  50. package/api/discover/search/search.d.mts +18 -16
  51. package/api/discover/search/search.mjs +102 -56
  52. package/api/discover/search/search.test.mjs +144 -10
  53. package/api/docs/_adapter.d.mts +277 -41
  54. package/api/docs/_adapter.mjs +993 -108
  55. package/api/docs/compiled-topics.test.mjs +78 -0
  56. package/api/docs/detail/detail.mjs +22 -63
  57. package/api/docs/detail/section/section.d.mts +1 -1
  58. package/api/docs/detail/section/section.mjs +54 -19
  59. package/api/docs/detail/section/section.test.mjs +50 -0
  60. package/api/docs/docOverlays.test.mjs +27 -1
  61. package/api/docs/docs.d.mts +10 -3
  62. package/api/docs/docs.doc.mjs +55 -16
  63. package/api/docs/docs.mjs +53 -10
  64. package/api/docs/docs.type.d.mts +221 -5
  65. package/api/docs/docs.type.mjs +153 -11
  66. package/api/docs/index/index.d.mts +18 -0
  67. package/api/docs/index/index.mjs +40 -0
  68. package/api/docs/index/index.test.mjs +62 -0
  69. package/api/docs/list/list.mjs +28 -12
  70. package/api/docs/node/node.d.mts +43 -0
  71. package/api/docs/node/node.mjs +192 -0
  72. package/api/docs/reference-blocks.test.mjs +406 -0
  73. package/api/doctor/doctor.d.mts +104 -1
  74. package/api/doctor/doctor.doc.mjs +18 -8
  75. package/api/doctor/doctor.mjs +635 -7
  76. package/api/doctor/doctor.test.mjs +732 -11
  77. package/api/doctor/doctor.type.d.mts +1 -1
  78. package/api/doctor/doctor.type.mjs +1 -1
  79. package/api/gap-report/gap-report.doc.mjs +27 -14
  80. package/api/hook/_adapter.mjs +19 -5
  81. package/api/hook/hook.doc.mjs +7 -3
  82. package/api/hook/hook.type.d.mts +3 -3
  83. package/api/hook/hook.type.mjs +11 -11
  84. package/api/hook/list/list.d.mts +2 -2
  85. package/api/hook/list/list.mjs +69 -17
  86. package/api/index.d.mts +2 -1
  87. package/api/index.mjs +6 -3
  88. package/api/init/init.doc.mjs +22 -12
  89. package/api/init/init.test.mjs +41 -1
  90. package/api/init/remove/remove.mjs +1 -1
  91. package/api/init/run/run.mjs +20 -10
  92. package/api/integration/add-contribution.component-names.test.mjs +120 -0
  93. package/api/integration/add-contribution.d.mts +2 -1
  94. package/api/integration/add-contribution.mjs +130 -15
  95. package/api/integration/add-contribution.test.mjs +258 -7
  96. package/api/integration/add-helpers.d.mts +5 -2
  97. package/api/integration/add-helpers.mjs +36 -9
  98. package/api/integration/add-theme.mjs +56 -65
  99. package/api/integration/add-theme.test.mjs +139 -21
  100. package/api/integration/authoring-checks.mjs +138 -28
  101. package/api/integration/authoring-checks.test.mjs +179 -7
  102. package/api/integration/authoring-checks.type.mjs +6 -1
  103. package/api/integration/integration-authoring.type.d.mts +3 -1
  104. package/api/integration/integration-authoring.type.mjs +2 -0
  105. package/api/integration/integration-block-exports.test.mjs +10 -6
  106. package/api/integration/integrationAdd.doc.mjs +14 -4
  107. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  108. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  109. package/api/integration/integrationAddComponent.doc.mjs +2 -1
  110. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  111. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  112. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  113. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  114. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  115. package/api/integration/integrationPackCheck.doc.mjs +5 -4
  116. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  117. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  118. package/api/integration/pack-check.lifecycle-output.test.mjs +107 -0
  119. package/api/integration/pack-check.mjs +160 -11
  120. package/api/integration/pack-check.test.mjs +477 -47
  121. package/api/integration/pack-check.type.d.mts +26 -2
  122. package/api/integration/pack-check.type.mjs +15 -2
  123. package/api/integration/summarizeIssues.doc.mjs +1 -0
  124. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  125. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  126. package/api/integration/validate-integration.mjs +52 -102
  127. package/api/integration/validate-integration.test.mjs +179 -26
  128. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  129. package/api/integration/validateIntegration.doc.mjs +3 -2
  130. package/api/json/assertResponse.doc.mjs +2 -1
  131. package/api/json/envelope-types.test.mjs +76 -0
  132. package/api/json/index.ts +2 -0
  133. package/api/json/isError.doc.mjs +2 -1
  134. package/api/json/parseResponse.doc.mjs +3 -2
  135. package/api/layout/_adapter.mjs +20 -5
  136. package/api/layout/expand/expand.mjs +7 -5
  137. package/api/layout/expand/expand.path-safety.test.mjs +53 -0
  138. package/api/layout/grammar/grammar.mjs +2 -1
  139. package/api/layout/layoutCheck.doc.mjs +1 -0
  140. package/api/layout/layoutExpand.doc.mjs +2 -1
  141. package/api/layout/layoutGrammar.doc.mjs +1 -0
  142. package/api/search/search-return-type.test.mjs +54 -0
  143. package/api/search/search.d.mts +89 -12
  144. package/api/search/search.doc.mjs +8 -2
  145. package/api/search/search.mjs +697 -97
  146. package/api/search/search.type.d.mts +15 -3
  147. package/api/search/search.type.mjs +5 -2
  148. package/api/swizzle/copy/copy.mjs +28 -11
  149. package/api/swizzle/swizzle.doc.mjs +8 -5
  150. package/api/swizzle/swizzle.type.d.mts +2 -2
  151. package/api/swizzle/swizzle.type.mjs +2 -2
  152. package/api/template/copy/copy.mjs +18 -24
  153. package/api/template/copy/copy.test.mjs +26 -0
  154. package/api/template/list/list.mjs +1 -0
  155. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  156. package/api/template/template-integration.test.mjs +1072 -3
  157. package/api/template/template-suffix.test.mjs +41 -21
  158. package/api/template/template.d.mts +1 -1
  159. package/api/template/template.doc.mjs +32 -9
  160. package/api/template/template.mjs +45 -8
  161. package/api/template/template.type.d.mts +12 -14
  162. package/api/template/template.type.mjs +15 -14
  163. package/api/theme/_adapter.d.mts +2 -3
  164. package/api/theme/_adapter.mjs +4 -5
  165. package/api/theme/add/add.binary.test.mjs +84 -0
  166. package/api/theme/add/add.mjs +31 -22
  167. package/api/theme/add/add.rollback.test.mjs +158 -0
  168. package/api/theme/add/add.staging.test.mjs +83 -0
  169. package/api/theme/add/add.test.mjs +14 -1
  170. package/api/theme/build/build.family.test.mjs +7 -12
  171. package/api/theme/build/build.mjs +140 -59
  172. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  173. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  174. package/api/theme/build/build.rollback.test.mjs +148 -0
  175. package/api/theme/build/build.test.mjs +127 -0
  176. package/api/theme/build/font-warning.mjs +3 -3
  177. package/api/theme/build/font-warning.test.mjs +5 -2
  178. package/api/theme/generateTonalPalette.doc.mjs +2 -2
  179. package/api/theme/integration-themes.test.mjs +39 -28
  180. package/api/theme/list/list.test.mjs +19 -20
  181. package/api/theme/listThemes.doc.mjs +6 -5
  182. package/api/theme/palette/generate/generate.mjs +8 -3
  183. package/api/theme/palette/generate/generate.test.mjs +96 -0
  184. package/api/theme/palette/generate/generator.d.mts +10 -13
  185. package/api/theme/palette/generate/generator.mjs +15 -4
  186. package/api/theme/palette/generate/generator.test.mjs +10 -0
  187. package/api/theme/template/template.mjs +11 -2
  188. package/api/theme/template/template.test.mjs +20 -0
  189. package/api/theme/theme.type.d.mts +170 -11
  190. package/api/theme/theme.type.mjs +94 -27
  191. package/api/theme/themeAdd.doc.mjs +12 -12
  192. package/api/theme/themeBuild.doc.mjs +21 -17
  193. package/api/theme/themeList.doc.mjs +6 -3
  194. package/api/theme/themeListAvailable.doc.mjs +6 -3
  195. package/api/theme/themePaletteGenerate.doc.mjs +16 -8
  196. package/api/theme/themeTargets.doc.mjs +4 -2
  197. package/api/theme/themeTemplate.doc.mjs +8 -3
  198. package/api/upgrade/_adapter.d.mts +32 -5
  199. package/api/upgrade/_adapter.mjs +139 -22
  200. package/api/upgrade/list/list.mjs +2 -1
  201. package/api/upgrade/list/list.test.mjs +73 -0
  202. package/api/upgrade/project-context.test.mjs +272 -0
  203. package/api/upgrade/provider-agreement.test.mjs +152 -0
  204. package/api/upgrade/run/files-changed.test.mjs +111 -0
  205. package/api/upgrade/run/run.mjs +358 -59
  206. package/api/upgrade/status/status.mjs +2 -2
  207. package/api/upgrade/upgrade.doc.mjs +32 -23
  208. package/api/upgrade/upgrade.type.d.mts +43 -5
  209. package/api/upgrade/upgrade.type.mjs +29 -13
  210. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  211. package/assets/codemods/__tests__/runner.test.mjs +332 -8
  212. package/assets/codemods/file-count.test.mjs +163 -0
  213. package/assets/codemods/integration-discovery.mjs +48 -4
  214. package/assets/codemods/integration-discovery.test.mjs +73 -0
  215. package/assets/codemods/integration-runner.mjs +59 -7
  216. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  217. package/assets/codemods/registry.mjs +1 -0
  218. package/assets/codemods/run-codemod.mjs +177 -34
  219. package/assets/codemods/runner.mjs +353 -104
  220. package/assets/codemods/term-log.mjs +32 -8
  221. package/assets/codemods/term-log.test.mjs +19 -1
  222. package/assets/codemods/transform-prop.mjs +109 -0
  223. package/assets/codemods/transform-prop.test.mjs +95 -0
  224. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  225. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  226. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  227. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  228. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  229. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  230. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  231. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  232. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  233. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  234. package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
  235. package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
  236. package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
  237. package/assets/docs/README.md +12 -1
  238. package/assets/docs/authoring.doc.mjs +14 -0
  239. package/assets/docs/browser-support.doc.mjs +11 -11
  240. package/assets/docs/color.doc.mjs +8 -2
  241. package/assets/docs/elevation.doc.mjs +6 -4
  242. package/assets/docs/getting-started.doc.mjs +6 -17
  243. package/assets/docs/icons.doc.mjs +2 -21
  244. package/assets/docs/illustrations.doc.mjs +7 -15
  245. package/assets/docs/internationalization.doc.mjs +7 -5
  246. package/assets/docs/layout.doc.dense.mjs +132 -84
  247. package/assets/docs/layout.doc.mjs +134 -78
  248. package/assets/docs/migration.doc.mjs +19 -21
  249. package/assets/docs/motion.doc.mjs +16 -3
  250. package/assets/docs/principles.doc.dense.mjs +5 -5
  251. package/assets/docs/principles.doc.mjs +14 -6
  252. package/assets/docs/principles.doc.zh.mjs +6 -6
  253. package/assets/docs/shape.doc.mjs +8 -3
  254. package/assets/docs/spacing.doc.mjs +7 -2
  255. package/assets/docs/styling-libraries.doc.mjs +10 -6
  256. package/assets/docs/styling.doc.mjs +22 -26
  257. package/assets/docs/theme.doc.dense.mjs +58 -18
  258. package/assets/docs/theme.doc.mjs +60 -50
  259. package/assets/docs/theme.doc.zh.mjs +9 -8
  260. package/assets/docs/tokens.doc.dense.mjs +2 -2
  261. package/assets/docs/tokens.doc.mjs +390 -9
  262. package/assets/docs/tokens.doc.zh.mjs +2 -2
  263. package/assets/docs/tree/add-a-component.doc.mjs +75 -0
  264. package/assets/docs/tree/add-a-theme.doc.mjs +85 -0
  265. package/assets/docs/tree/add-a-topic.doc.mjs +144 -0
  266. package/assets/docs/tree/agent-guidance.doc.mjs +138 -0
  267. package/assets/docs/tree/api.doc.mjs +30 -0
  268. package/assets/docs/tree/block-template.doc.mjs +130 -0
  269. package/assets/docs/tree/build-the-template.doc.mjs +28 -0
  270. package/assets/docs/tree/building-blocks.doc.mjs +46 -0
  271. package/assets/docs/tree/check-your-docs.doc.mjs +137 -0
  272. package/assets/docs/tree/checks.doc.mjs +119 -0
  273. package/assets/docs/tree/cli.doc.mjs +23 -0
  274. package/assets/docs/tree/codemods.doc.mjs +147 -0
  275. package/assets/docs/tree/commands.doc.mjs +25 -0
  276. package/assets/docs/tree/component-family.doc.mjs +113 -0
  277. package/assets/docs/tree/component-imports.doc.mjs +69 -0
  278. package/assets/docs/tree/component-lookups.doc.mjs +149 -0
  279. package/assets/docs/tree/components.doc.mjs +23 -0
  280. package/assets/docs/tree/configuration.doc.mjs +23 -0
  281. package/assets/docs/tree/debug-and-gap-reports.doc.mjs +182 -0
  282. package/assets/docs/tree/define-the-theme.doc.mjs +118 -0
  283. package/assets/docs/tree/describe-the-component.doc.mjs +57 -0
  284. package/assets/docs/tree/docs.doc.mjs +21 -0
  285. package/assets/docs/tree/document-the-template.doc.mjs +28 -0
  286. package/assets/docs/tree/document-the-theme.doc.mjs +68 -0
  287. package/assets/docs/tree/export-template-assets.doc.mjs +147 -0
  288. package/assets/docs/tree/extend-or-replace.doc.mjs +103 -0
  289. package/assets/docs/tree/fonts-and-assets.doc.mjs +106 -0
  290. package/assets/docs/tree/generate-a-palette.doc.mjs +66 -0
  291. package/assets/docs/tree/grade-template-with-agent.doc.mjs +105 -0
  292. package/assets/docs/tree/help.doc.mjs +16 -0
  293. package/assets/docs/tree/integrations.doc.mjs +40 -0
  294. package/assets/docs/tree/links.doc.mjs +98 -0
  295. package/assets/docs/tree/package-and-test.doc.mjs +32 -0
  296. package/assets/docs/tree/page-template.doc.mjs +71 -0
  297. package/assets/docs/tree/publishing.doc.mjs +111 -0
  298. package/assets/docs/tree/quick-start.doc.mjs +272 -0
  299. package/assets/docs/tree/replace-a-core-component.doc.mjs +104 -0
  300. package/assets/docs/tree/replace-a-core-template.doc.mjs +172 -0
  301. package/assets/docs/tree/sections-and-placement.doc.mjs +108 -0
  302. package/assets/docs/tree/see-it-in-an-app.doc.mjs +59 -0
  303. package/assets/docs/tree/ship.doc.mjs +16 -0
  304. package/assets/docs/tree/short-and-findable.doc.mjs +108 -0
  305. package/assets/docs/tree/single-component.doc.mjs +165 -0
  306. package/assets/docs/tree/start-a-template.doc.mjs +143 -0
  307. package/assets/docs/tree/subcomponent.doc.mjs +115 -0
  308. package/assets/docs/tree/template-assets.doc.mjs +64 -0
  309. package/assets/docs/tree/template-doc-overview.doc.mjs +109 -0
  310. package/assets/docs/tree/template-fonts.doc.mjs +102 -0
  311. package/assets/docs/tree/template-grading-rubric.doc.mjs +452 -0
  312. package/assets/docs/tree/template-icons.doc.mjs +97 -0
  313. package/assets/docs/tree/template-images-media.doc.mjs +127 -0
  314. package/assets/docs/tree/template-styles.doc.mjs +93 -0
  315. package/assets/docs/tree/templates.doc.mjs +34 -0
  316. package/assets/docs/tree/test-in-an-app.doc.mjs +115 -0
  317. package/assets/docs/tree/test-template-in-app.doc.mjs +128 -0
  318. package/assets/docs/tree/themes.doc.mjs +39 -0
  319. package/assets/docs/tree/troubleshooting.doc.mjs +149 -0
  320. package/assets/docs/tree/upgrading.doc.mjs +103 -0
  321. package/assets/docs/tree/use-a-theme-in-an-app.doc.mjs +51 -0
  322. package/assets/docs/tree/verify-packed-template.doc.mjs +77 -0
  323. package/assets/docs/tree/versioning.doc.mjs +161 -0
  324. package/assets/docs/tree/write-good-templates.doc.mjs +64 -0
  325. package/assets/docs/tree/write-the-template-file.doc.mjs +154 -0
  326. package/assets/docs/typography.doc.mjs +24 -4
  327. package/assets/docs/working-with-ai.doc.mjs +34 -26
  328. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  329. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  330. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  331. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  332. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  333. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  334. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  335. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  336. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  337. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  338. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  339. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  340. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  341. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  342. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  343. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  344. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  345. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  346. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  347. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  348. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  349. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  350. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  351. package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
  352. package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
  353. package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
  354. package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
  355. package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
  356. package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
  357. package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
  358. package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
  359. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
  360. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
  361. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  362. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  363. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  364. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  365. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  366. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  367. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  368. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  369. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  370. package/authoring/_shared/contract.ts +22 -0
  371. package/authoring/codemod/codemod.doc.mjs +7 -2
  372. package/authoring/codemod/parse.d.mts +8 -8
  373. package/authoring/codemod/parse.mjs +8 -6
  374. package/authoring/codemod/type.ts +12 -0
  375. package/authoring/config/config.doc.mjs +11 -3
  376. package/authoring/config/debug-composition.test.mjs +92 -0
  377. package/authoring/config/parse.d.mts +15 -13
  378. package/authoring/config/parse.mjs +27 -8
  379. package/authoring/config/parse.test.mjs +8 -0
  380. package/authoring/config/type.ts +29 -6
  381. package/authoring/debug/debug.doc.d.mts +11 -0
  382. package/authoring/debug/debug.doc.mjs +182 -0
  383. package/authoring/debug/parse.d.mts +8 -8
  384. package/authoring/debug/parse.mjs +3 -3
  385. package/authoring/discover/discover.doc.d.mts +13 -0
  386. package/authoring/discover/discover.doc.mjs +138 -0
  387. package/authoring/discover/parse.d.mts +24 -0
  388. package/authoring/discover/parse.mjs +128 -0
  389. package/authoring/discover/parse.test.mjs +124 -0
  390. package/authoring/discover/type.ts +87 -0
  391. package/authoring/doctypes/_schema.d.mts +792 -24
  392. package/authoring/doctypes/_schema.mjs +549 -39
  393. package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
  394. package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
  395. package/authoring/doctypes/base/type.ts +43 -0
  396. package/authoring/doctypes/command/command.doc.mjs +4 -3
  397. package/authoring/doctypes/command/parse.d.mts +2 -2
  398. package/authoring/doctypes/command/parse.mjs +1 -1
  399. package/authoring/doctypes/command/type.ts +5 -4
  400. package/authoring/doctypes/component/component.doc.mjs +12 -3
  401. package/authoring/doctypes/component/parse.d.mts +2 -2
  402. package/authoring/doctypes/component/parse.mjs +1 -1
  403. package/authoring/doctypes/component/type.ts +14 -5
  404. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  405. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  406. package/authoring/doctypes/enum/parse.d.mts +2 -2
  407. package/authoring/doctypes/enum/parse.mjs +1 -1
  408. package/authoring/doctypes/enum/type.ts +4 -2
  409. package/authoring/doctypes/function/function.doc.mjs +7 -2
  410. package/authoring/doctypes/function/parse.d.mts +2 -2
  411. package/authoring/doctypes/function/parse.mjs +1 -1
  412. package/authoring/doctypes/function/type.ts +9 -4
  413. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  414. package/authoring/doctypes/hook/parse.d.mts +2 -2
  415. package/authoring/doctypes/hook/parse.mjs +1 -1
  416. package/authoring/doctypes/hook/type.ts +5 -4
  417. package/authoring/doctypes/legacy.d.mts +8 -6
  418. package/authoring/doctypes/legacy.mjs +5 -4
  419. package/authoring/doctypes/load-contract.test.mjs +233 -0
  420. package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
  421. package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
  422. package/authoring/doctypes/namespace/parse.d.mts +12 -0
  423. package/authoring/doctypes/namespace/parse.mjs +25 -0
  424. package/authoring/doctypes/namespace/parse.test.mjs +163 -0
  425. package/authoring/doctypes/namespace/type.ts +74 -0
  426. package/authoring/doctypes/parse.d.mts +22 -18
  427. package/authoring/doctypes/parse.mjs +22 -11
  428. package/authoring/doctypes/parse.test.mjs +77 -3
  429. package/authoring/doctypes/reference/parse.d.mts +2 -2
  430. package/authoring/doctypes/reference/parse.mjs +8 -5
  431. package/authoring/doctypes/reference/reference.doc.mjs +55 -6
  432. package/authoring/doctypes/reference/type.ts +75 -7
  433. package/authoring/doctypes/schema/parse.d.mts +2 -2
  434. package/authoring/doctypes/schema/parse.mjs +1 -1
  435. package/authoring/doctypes/schema/schema.doc.mjs +2 -2
  436. package/authoring/doctypes/schema/type.ts +4 -4
  437. package/authoring/doctypes/template/parse.d.mts +94 -1
  438. package/authoring/doctypes/template/parse.mjs +40 -2
  439. package/authoring/doctypes/template/parse.test.mjs +26 -2
  440. package/authoring/doctypes/template/template.doc.mjs +13 -3
  441. package/authoring/doctypes/template/type.ts +13 -2
  442. package/authoring/doctypes/theme/parse.d.mts +35 -0
  443. package/authoring/doctypes/theme/parse.mjs +76 -0
  444. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  445. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  446. package/authoring/doctypes/theme/type.ts +42 -0
  447. package/authoring/doctypes/types.ts +12 -10
  448. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  449. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  450. package/authoring/gap-report/parse.d.mts +10 -10
  451. package/authoring/gap-report/parse.mjs +6 -6
  452. package/authoring/gap-report/type.ts +1 -1
  453. package/authoring/identity/identity.doc.d.mts +9 -0
  454. package/authoring/identity/identity.doc.mjs +61 -0
  455. package/authoring/identity/type.ts +132 -0
  456. package/authoring/index.d.mts +3 -0
  457. package/authoring/index.d.ts +62 -17
  458. package/authoring/index.mjs +4 -1
  459. package/authoring/integration/integration.doc.mjs +22 -13
  460. package/authoring/integration/parse.d.mts +2 -2
  461. package/authoring/integration/parse.mjs +1 -1
  462. package/authoring/integration/parse.test.mjs +10 -1
  463. package/authoring/integration/schema.d.mts +6 -4
  464. package/authoring/integration/schema.mjs +9 -3
  465. package/authoring/integration/type.ts +19 -8
  466. package/authoring/shadcn/receipt.d.mts +6 -6
  467. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  468. package/clients/cli/command-load-failure.test.mjs +83 -0
  469. package/clients/cli/commands/blog.doc.mjs +1 -1
  470. package/clients/cli/commands/blog.mjs +23 -8
  471. package/clients/cli/commands/blog.test.mjs +42 -1
  472. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  473. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  474. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  475. package/clients/cli/commands/build-theme.mjs +16 -50
  476. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  477. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  478. package/clients/cli/commands/build.doc.mjs +16 -8
  479. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  480. package/clients/cli/commands/build.mjs +137 -114
  481. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  482. package/clients/cli/commands/build.text-fields.test.mjs +81 -0
  483. package/clients/cli/commands/component/index.mjs +153 -61
  484. package/clients/cli/commands/component-batch.test.mjs +341 -0
  485. package/clients/cli/commands/component-ownership.test.mjs +92 -3
  486. package/clients/cli/commands/component-package.test.mjs +46 -0
  487. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  488. package/clients/cli/commands/component.doc.mjs +28 -10
  489. package/clients/cli/commands/component.test.mjs +19 -0
  490. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  491. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  492. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  493. package/clients/cli/commands/discover.doc.mjs +55 -9
  494. package/clients/cli/commands/discover.mjs +393 -118
  495. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  496. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  497. package/clients/cli/commands/docs.doc.mjs +28 -6
  498. package/clients/cli/commands/docs.mjs +295 -38
  499. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  500. package/clients/cli/commands/doctor-integration-docs.doc.mjs +6 -5
  501. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  502. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  503. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  504. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  505. package/clients/cli/commands/doctor-integration.test.mjs +143 -8
  506. package/clients/cli/commands/doctor.doc.mjs +4 -2
  507. package/clients/cli/commands/doctor.mjs +108 -37
  508. package/clients/cli/commands/doctor.test.mjs +42 -0
  509. package/clients/cli/commands/gap-report.doc.mjs +27 -15
  510. package/clients/cli/commands/gap-report.test.mjs +72 -0
  511. package/clients/cli/commands/hook/index.mjs +7 -17
  512. package/clients/cli/commands/hook.doc.mjs +1 -1
  513. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  514. package/clients/cli/commands/init.doc.mjs +24 -10
  515. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  516. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  517. package/clients/cli/commands/integration-add.doc.mjs +39 -13
  518. package/clients/cli/commands/integration-authoring.test.mjs +74 -19
  519. package/clients/cli/commands/integration-pack.doc.mjs +6 -10
  520. package/clients/cli/commands/integration-real-world.test.mjs +4 -10
  521. package/clients/cli/commands/integration-verify.doc.mjs +22 -0
  522. package/clients/cli/commands/integration.doc.mjs +5 -5
  523. package/clients/cli/commands/integration.mjs +75 -43
  524. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  525. package/clients/cli/commands/json-contract.test.mjs +33 -0
  526. package/clients/cli/commands/layout-check.doc.mjs +15 -4
  527. package/clients/cli/commands/layout-expand.doc.mjs +22 -5
  528. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  529. package/clients/cli/commands/layout.doc.mjs +3 -3
  530. package/clients/cli/commands/layout.mjs +21 -9
  531. package/clients/cli/commands/layout.path-help.test.mjs +33 -0
  532. package/clients/cli/commands/layout.stdin-cap.test.mjs +47 -0
  533. package/clients/cli/commands/layout.text-fields.test.mjs +39 -0
  534. package/clients/cli/commands/manifest.doc.mjs +2 -2
  535. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  536. package/clients/cli/commands/search.doc.mjs +16 -6
  537. package/clients/cli/commands/search.mjs +49 -11
  538. package/clients/cli/commands/search.test.mjs +92 -0
  539. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  540. package/clients/cli/commands/swizzle.doc.mjs +4 -3
  541. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  542. package/clients/cli/commands/template.doc.mjs +53 -14
  543. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  544. package/clients/cli/commands/template.mjs +4 -91
  545. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  546. package/clients/cli/commands/text-json-parity.test.mjs +725 -0
  547. package/clients/cli/commands/theme-add.doc.mjs +5 -4
  548. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  549. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  550. package/clients/cli/commands/theme-palette-generate.doc.mjs +12 -7
  551. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  552. package/clients/cli/commands/theme-palette.doc.mjs +2 -3
  553. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  554. package/clients/cli/commands/theme-targets.doc.mjs +3 -3
  555. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  556. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  557. package/clients/cli/commands/theme.doc.mjs +3 -2
  558. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  559. package/clients/cli/commands/upgrade.doc.mjs +83 -12
  560. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  561. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  562. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  563. package/clients/cli/commands/upgrade.mjs +29 -7
  564. package/clients/cli/formatters/index.mjs +164 -1
  565. package/clients/cli/formatters/index.test.mjs +97 -0
  566. package/clients/cli/index.mjs +47 -34
  567. package/clients/cli/latest-version-env.test.mjs +50 -0
  568. package/clients/cli/lib/cli-error.test.mjs +7 -0
  569. package/clients/cli/lib/component-format.mjs +9 -9
  570. package/clients/cli/lib/component-format.test.mjs +1 -1
  571. package/clients/cli/lib/define-command.mjs +56 -6
  572. package/clients/cli/lib/define-command.test.mjs +54 -0
  573. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  574. package/clients/cli/lib/exit-codes.test.mjs +113 -0
  575. package/clients/cli/lib/hook-format.mjs +19 -10
  576. package/clients/cli/lib/json-shim.mjs +62 -16
  577. package/clients/cli/lib/json-shim.test.mjs +83 -0
  578. package/clients/cli/lib/manifest.d.ts +2 -0
  579. package/clients/cli/lib/manifest.mjs +53 -6
  580. package/clients/cli/lib/manifest.test.mjs +22 -2
  581. package/clients/cli/lib/parse-error-format.test.mjs +81 -0
  582. package/foundation/agent-docs/agent-docs.d.mts +7 -2
  583. package/foundation/agent-docs/agent-docs.mjs +83 -13
  584. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  585. package/foundation/config/integration-debug.test.mjs +28 -3
  586. package/foundation/config/project-themes.test.mjs +11 -19
  587. package/foundation/config/project.d.mts +20 -11
  588. package/foundation/config/project.mjs +263 -91
  589. package/foundation/config/project.test.mjs +270 -21
  590. package/foundation/discovery/authoring-self-docs.d.mts +87 -0
  591. package/foundation/discovery/authoring-self-docs.mjs +237 -0
  592. package/foundation/discovery/authoring-self-docs.test.mjs +174 -0
  593. package/foundation/discovery/authoring-surface.d.mts +74 -0
  594. package/foundation/discovery/authoring-surface.mjs +525 -0
  595. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  596. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  597. package/foundation/discovery/cli-self-docs.mjs +504 -0
  598. package/foundation/discovery/cli-self-docs.test.mjs +395 -0
  599. package/foundation/discovery/component-discovery.d.mts +39 -1
  600. package/foundation/discovery/component-discovery.mjs +50 -1
  601. package/foundation/discovery/component-loader.d.mts +35 -38
  602. package/foundation/discovery/component-loader.mjs +53 -222
  603. package/foundation/discovery/docs-discovery.d.mts +119 -11
  604. package/foundation/discovery/docs-discovery.mjs +427 -108
  605. package/foundation/discovery/docs-discovery.test.mjs +386 -20
  606. package/foundation/discovery/docs-output-budget.d.mts +28 -0
  607. package/foundation/discovery/docs-output-budget.mjs +50 -0
  608. package/foundation/discovery/docs-section-key.d.mts +116 -0
  609. package/foundation/discovery/docs-section-key.mjs +322 -0
  610. package/foundation/discovery/docs-section-key.test.mjs +246 -0
  611. package/foundation/discovery/template-adapter.d.mts +113 -11
  612. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  613. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  614. package/foundation/discovery/template-adapter.mjs +774 -83
  615. package/foundation/discovery/template-adapter.test.mjs +57 -0
  616. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  617. package/foundation/discovery/template-conflict-release.mjs +40 -0
  618. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  619. package/foundation/discovery/theme-discovery.d.mts +67 -7
  620. package/foundation/discovery/theme-discovery.mjs +916 -186
  621. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  622. package/foundation/discovery/theming-targets.test.mjs +4 -0
  623. package/foundation/doc-compiler/bundle.d.mts +47 -0
  624. package/foundation/doc-compiler/bundle.mjs +278 -0
  625. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  626. package/foundation/doc-compiler/compile.d.mts +343 -0
  627. package/foundation/doc-compiler/compile.mjs +558 -0
  628. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  629. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  630. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  631. package/foundation/doc-compiler/doc-loads.test.mjs +1643 -0
  632. package/foundation/doc-compiler/import.d.mts +24 -0
  633. package/foundation/doc-compiler/import.mjs +59 -0
  634. package/foundation/doc-compiler/inputs.d.mts +102 -0
  635. package/foundation/doc-compiler/inputs.mjs +291 -0
  636. package/foundation/doc-compiler/inputs.test.mjs +298 -0
  637. package/foundation/doc-compiler/ir.d.mts +22 -0
  638. package/foundation/doc-compiler/ir.mjs +471 -0
  639. package/foundation/doc-compiler/lenses.d.mts +36 -0
  640. package/foundation/doc-compiler/lenses.mjs +173 -0
  641. package/foundation/doc-compiler/links.d.mts +162 -0
  642. package/foundation/doc-compiler/links.mjs +294 -0
  643. package/foundation/doc-compiler/links.test.mjs +192 -0
  644. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  645. package/foundation/doc-compiler/overlays.d.mts +37 -0
  646. package/foundation/doc-compiler/overlays.mjs +206 -0
  647. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  648. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  649. package/foundation/doc-compiler/read.d.mts +127 -0
  650. package/foundation/doc-compiler/read.mjs +325 -0
  651. package/foundation/doc-compiler/read.test.mjs +313 -0
  652. package/foundation/doc-compiler/source.d.mts +33 -0
  653. package/foundation/doc-compiler/source.mjs +128 -0
  654. package/foundation/doc-compiler/tree.d.mts +292 -0
  655. package/foundation/doc-compiler/tree.mjs +881 -0
  656. package/foundation/fs/file-protection.d.mts +33 -0
  657. package/foundation/fs/file-protection.mjs +825 -0
  658. package/foundation/fs/file-protection.test.mjs +250 -0
  659. package/foundation/fs/module-loader.d.mts +1 -0
  660. package/foundation/fs/module-loader.mjs +50 -1
  661. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  662. package/foundation/fs/path-safety.d.mts +3 -2
  663. package/foundation/fs/path-safety.mjs +49 -19
  664. package/foundation/fs/path-safety.test.mjs +50 -0
  665. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  666. package/foundation/identity/provider-identity.d.mts +90 -0
  667. package/foundation/identity/provider-identity.mjs +320 -0
  668. package/foundation/identity/provider-identity.test.mjs +254 -0
  669. package/foundation/identity/providers.d.mts +7 -0
  670. package/foundation/identity/providers.mjs +16 -0
  671. package/foundation/integrations/autolink.d.mts +58 -1
  672. package/foundation/integrations/autolink.mjs +143 -45
  673. package/foundation/integrations/autolink.test.mjs +1 -1
  674. package/foundation/integrations/cli-requirement.d.mts +65 -0
  675. package/foundation/integrations/cli-requirement.mjs +189 -0
  676. package/foundation/integrations/cli-requirement.test.mjs +89 -0
  677. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  678. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  679. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  680. package/foundation/integrations/contribution-inventory.mjs +28 -25
  681. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  682. package/foundation/integrations/integration-warnings.d.mts +9 -2
  683. package/foundation/integrations/integration-warnings.mjs +52 -21
  684. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  685. package/foundation/integrations/integrations.d.mts +63 -3
  686. package/foundation/integrations/integrations.mjs +122 -9
  687. package/foundation/integrations/integrations.test.mjs +415 -1
  688. package/foundation/integrations/provider-conflicts.test.mjs +125 -0
  689. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  690. package/foundation/integrations/provider-resolution.d.mts +152 -0
  691. package/foundation/integrations/provider-resolution.mjs +576 -0
  692. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  693. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  694. package/foundation/integrations/theme-descriptor.mjs +44 -0
  695. package/foundation/integrations/validate-contributions.d.mts +2 -0
  696. package/foundation/integrations/validate-contributions.mjs +131 -29
  697. package/foundation/response/base.d.ts +8 -4
  698. package/foundation/response/batch.type.d.mts +33 -0
  699. package/foundation/response/batch.type.mjs +34 -0
  700. package/foundation/response/error-codes.d.mts +3 -1
  701. package/foundation/response/error-codes.d.ts +2 -0
  702. package/foundation/response/error-codes.doc.mjs +19 -12
  703. package/foundation/response/error-codes.mjs +8 -2
  704. package/foundation/response/error-codes.test.mjs +166 -14
  705. package/foundation/response/json-contract.test.mjs +57 -17
  706. package/foundation/response/json.d.mts +4 -2
  707. package/foundation/response/json.mjs +8 -10
  708. package/foundation/response/response-types.doc.d.mts +7 -2
  709. package/foundation/response/response-types.doc.mjs +69 -25
  710. package/foundation/response/response-types.doc.test.mjs +181 -0
  711. package/foundation/response/response.doc.mjs +12 -11
  712. package/foundation/text/string-utils.d.mts +8 -0
  713. package/foundation/text/string-utils.mjs +40 -10
  714. package/foundation/xle/expand.d.mts +2 -0
  715. package/foundation/xle/expand.mjs +4 -3
  716. package/foundation/xle/expand.test.mjs +54 -0
  717. package/foundation/xle/xle.test.mjs +13 -0
  718. package/package.json +10 -11
  719. package/api/docs/docs.test.mjs +0 -83
  720. package/api/docs/integrationDocs.test.mjs +0 -208
  721. package/api/search/search.test.mjs +0 -389
  722. package/assets/docs/cli-integrations.doc.mjs +0 -367
  723. package/assets/templates/themes/manifest.json +0 -95
  724. package/clients/cli/commands/docs.test.mjs +0 -102
  725. package/clients/cli/lib/update-check.mjs +0 -83
  726. package/clients/cli/lib/update-check.test.mjs +0 -137
  727. package/clients/cli/update-hint-commands.test.mjs +0 -54
  728. package/foundation/agent-docs/agent-docs.test.mjs +0 -1141
@@ -0,0 +1,558 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file Doc compiler — authored docs in, compiled nodes out.
5
+ *
6
+ * @input A {@link ReferenceTopicInput}: one topic's own file and the files of
7
+ * the extensions merged onto it, each already through the authored-doc parser
8
+ * and each carrying the overlay for the language being read. Discovery
9
+ * assembles it, and records a file that failed to load instead of throwing,
10
+ * so problems surface here in the order a reader meets them.
11
+ * @output A compiled reference node: plain JSON carrying a schema version, the
12
+ * topic after overlay, extension merge and key stamping, and the authored
13
+ * title of every section. Linking then resolves each token reference against
14
+ * its target. Nothing in a node is a function, a symbol, or a file path: an
15
+ * authored value JSON cannot hold (a function, a Date, `undefined`) takes its
16
+ * JSON form, the one `--json` output has always shown.
17
+ * @position The one step between authored docs and every docs reader. The docs
18
+ * API, doctor and search read compiled nodes, and ./lenses.mjs turns them into
19
+ * response shapes. Every other doc kind (components, hooks, templates, themes,
20
+ * and the CLI's self-docs) lowers through {@link lowerDoc}, which ./read.mjs
21
+ * feeds. Internal to the CLI: the public way in is the docs API.
22
+ */
23
+
24
+ import {parseTemplate} from '../../authoring/doctypes/template/parse.mjs';
25
+ import {parseTheme} from '../../authoring/doctypes/theme/parse.mjs';
26
+ import {mergeTopic, problemsInTopic} from '../discovery/docs-discovery.mjs';
27
+ import {
28
+ sectionKey,
29
+ sectionKeyErrors,
30
+ sourceTitle,
31
+ withSectionKeys,
32
+ withSourceTitle,
33
+ } from '../discovery/docs-section-key.mjs';
34
+ import {diagnostic as rawDiagnostic} from './diagnostics.mjs';
35
+ import {scrubPaths} from './source.mjs';
36
+ import {overlayAuthoredDoc} from './overlays.mjs';
37
+ import {parseReadableDoc} from './parse-readable.mjs';
38
+
39
+ /**
40
+ * A compiler diagnostic whose message names files by package, never by their
41
+ * location on this machine.
42
+ * @param {string} code
43
+ * @param {Parameters<typeof rawDiagnostic>[1]} at
44
+ */
45
+ function diagnostic(code, at) {
46
+ return rawDiagnostic(code, {
47
+ ...at,
48
+ message: scrubPaths(at.message) || '(the error had no message)',
49
+ });
50
+ }
51
+
52
+ /** Bumped whenever the shape of a compiled node changes. */
53
+ export const COMPILED_DOC_SCHEMA_VERSION = 1;
54
+
55
+ /** Every kind a compiled node has: one per authored doc kind a root reads. */
56
+ export const COMPILED_DOC_KINDS = /** @type {const} */ ([
57
+ 'component',
58
+ 'function',
59
+ 'reference',
60
+ 'page',
61
+ 'block',
62
+ 'schema',
63
+ 'command',
64
+ 'enum',
65
+ 'theme',
66
+ 'namespace',
67
+ ]);
68
+
69
+ /**
70
+ * The roots that read docs, and the kinds each may hold. A doc without a
71
+ * stamped `type` (the legacy form) takes its root's first kind.
72
+ * @type {Readonly<Record<string, readonly string[]>>}
73
+ */
74
+ export const ROOT_KINDS = Object.freeze({
75
+ components: ['component'],
76
+ hooks: ['function'],
77
+ templates: ['page', 'block'],
78
+ themes: ['theme'],
79
+ 'self-docs': ['command', 'function', 'schema', 'enum'],
80
+ tree: ['namespace', 'generic'],
81
+ });
82
+
83
+ /**
84
+ * One authored file, as discovery loaded it.
85
+ * @typedef {object} AuthoredFile
86
+ * @property {string} file the file's name, for messages only
87
+ * @property {any} [doc] the parsed doc, when it loaded
88
+ * @property {unknown} [error] why it did not load or parse
89
+ * @property {any} [overlay] the language overlay's export, when one applies
90
+ * @property {unknown} [overlayError] why the overlay did not load
91
+ */
92
+
93
+ /**
94
+ * @typedef {object} ReferenceTopicInput
95
+ * @property {string} id the topic's name in the catalog
96
+ * @property {string} provider the package that owns the topic
97
+ * @property {string | null} replaces the topic it took the place of
98
+ * @property {string | null} lang the overlay language, or null for authored text
99
+ * @property {string} [providerId] the owner's provider id; the package name
100
+ * when absent. The base file's sections resolve their links against it.
101
+ * @property {AuthoredFile} base
102
+ * @property {Array<AuthoredFile & {provider: string, providerId?: string}>} extensions
103
+ * in merge order; each extension's sections resolve their links against its
104
+ * own provider id
105
+ * @property {boolean} [tree] a guide the docs tree places: its `placement` is
106
+ * read by the tree, so the topic reader accepts it
107
+ */
108
+
109
+ /**
110
+ * A token reference after linking: the target section's content, or why it
111
+ * has none.
112
+ * @typedef {{status: 'resolved', topic: string, section: string, previewType?: string, content: any[]}
113
+ * | {status: 'unknown-topic'}
114
+ * | {status: 'unknown-section'}} TokenRefResolution
115
+ */
116
+
117
+ /**
118
+ * @typedef {object} CompiledReferenceNode
119
+ * @property {number} schemaVersion
120
+ * @property {'reference'} kind
121
+ * @property {'lowered' | 'linked'} stage `linked` once every token reference
122
+ * carries its resolution; a lowered node carries none
123
+ * @property {string} id the topic's name in the catalog
124
+ * @property {string | null} lang
125
+ * @property {{provider: string, replaces: string | null, extensions: string[]}} provenance
126
+ * @property {Record<string, string>} sourceTitles section key -> authored title
127
+ * @property {Record<string, string>} sectionProviders section key -> the
128
+ * provider id that wrote the section: a topic merges sections from its base
129
+ * and its extensions, and each section's links resolve against its own
130
+ * provider (spec:AST-047 FR9)
131
+ * @property {any} doc the topic: authored fields in authored order, every
132
+ * section keyed; a linked node's token references carry `resolved`
133
+ */
134
+
135
+ /** Which provider wrote a section, until lowering records it by key. */
136
+ const SECTION_PROVIDER = Symbol('astryx.docs.sectionProvider');
137
+
138
+ /**
139
+ * Mark each section of one authored file with the provider that wrote it. The
140
+ * overlay, the merge, and the key stamp copy the mark with the section.
141
+ * @param {any} doc
142
+ * @param {string} provider
143
+ * @returns {any}
144
+ */
145
+ function markProvider(doc, provider) {
146
+ return {
147
+ ...doc,
148
+ sections: doc.sections.map((/** @type {any} */ section) =>
149
+ withSourceTitle({...section, [SECTION_PROVIDER]: provider}, sourceTitle(section)),
150
+ ),
151
+ };
152
+ }
153
+
154
+ /**
155
+ * Lower one topic: overlay each file, merge the extensions in order, and stamp
156
+ * every section with its key.
157
+ * @param {ReferenceTopicInput} input
158
+ * @returns {CompiledReferenceNode}
159
+ */
160
+ export function lowerReferenceTopic(input) {
161
+ let doc = markProvider(
162
+ readAuthoredFile(input.base, {placement: input.tree === true}),
163
+ input.providerId ?? input.provider,
164
+ );
165
+ for (const extension of input.extensions) {
166
+ doc = mergeTopic(
167
+ doc,
168
+ markProvider(
169
+ readAuthoredFile(extension),
170
+ extension.providerId ?? extension.provider,
171
+ ),
172
+ );
173
+ // Explicit authored IDs remain strict. Legacy title-derived collisions are
174
+ // assigned deterministic compatibility keys after every extension merges.
175
+ const problems = sectionKeyErrors(doc.sections);
176
+ if (problems.length > 0) {
177
+ throw new Error(
178
+ `${extension.file}, extending ${input.id}, leaves duplicate authored section IDs: ${problems.join('; ')}`,
179
+ );
180
+ }
181
+ }
182
+ // Derived keys are stamped only now, so they never take part in merging.
183
+ const keyed = withSectionKeys(doc);
184
+ /** @type {Record<string, string>} */
185
+ const sourceTitles = {};
186
+ /** @type {Record<string, string>} */
187
+ const sectionProviders = {};
188
+ for (const section of keyed.sections) {
189
+ sourceTitles[section.id] = sourceTitle(section);
190
+ sectionProviders[section.id] =
191
+ section[SECTION_PROVIDER] ?? input.providerId ?? input.provider;
192
+ }
193
+ return {
194
+ schemaVersion: COMPILED_DOC_SCHEMA_VERSION,
195
+ kind: 'reference',
196
+ stage: 'lowered',
197
+ id: input.id,
198
+ lang: input.lang,
199
+ provenance: {
200
+ provider: input.provider,
201
+ replaces: input.replaces,
202
+ extensions: input.extensions.map(extension => extension.provider),
203
+ },
204
+ sourceTitles,
205
+ sectionProviders,
206
+ // The authored title and provider travel in sourceTitles and
207
+ // sectionProviders; JSON drops the symbols.
208
+ doc: asJson(keyed, input.id),
209
+ };
210
+ }
211
+
212
+ /**
213
+ * Link every section of a lowered node.
214
+ * @param {CompiledReferenceNode} node
215
+ * @param {(topic: string) => Promise<CompiledReferenceNode | null>} lowerTarget
216
+ * the lowered node a reference names, or null when no topic has that name
217
+ * @returns {Promise<CompiledReferenceNode>}
218
+ */
219
+ export async function linkReferenceTopic(node, lowerTarget) {
220
+ const sections = [];
221
+ for (const section of node.doc.sections) {
222
+ sections.push(await linkReferenceSection(section, lowerTarget));
223
+ }
224
+ return {...node, stage: 'linked', doc: {...node.doc, sections}};
225
+ }
226
+
227
+ /**
228
+ * Resolve the token references in one section. A section with none comes back
229
+ * as it went in.
230
+ * @template {{content: any[]}} S
231
+ * @param {S} section
232
+ * @param {(topic: string) => Promise<CompiledReferenceNode | null>} lowerTarget
233
+ * @returns {Promise<S>}
234
+ */
235
+ export async function linkReferenceSection(section, lowerTarget) {
236
+ if (!section.content.some(block => block?.type === 'token-ref')) {
237
+ return section;
238
+ }
239
+ const content = [];
240
+ for (const block of section.content) {
241
+ content.push(
242
+ block?.type === 'token-ref'
243
+ ? {...block, resolved: await resolveTokenRef(block, lowerTarget)}
244
+ : block,
245
+ );
246
+ }
247
+ return {...section, content};
248
+ }
249
+
250
+ /**
251
+ * The section a token reference names — by key, or by authored title in any
252
+ * letter case — in the target topic lowered for the same language.
253
+ * @param {any} block
254
+ * @param {(topic: string) => Promise<CompiledReferenceNode | null>} lowerTarget
255
+ * @returns {Promise<TokenRefResolution>}
256
+ */
257
+ async function resolveTokenRef(block, lowerTarget) {
258
+ const target = await lowerTarget(block.topic);
259
+ if (!target) return {status: 'unknown-topic'};
260
+ const wanted = block.section.toLowerCase();
261
+ const found = target.doc.sections.find(
262
+ (/** @type {any} */ section) =>
263
+ sectionKey(section) === block.section ||
264
+ (target.sourceTitles[section.id] ?? section.title).toLowerCase() ===
265
+ wanted,
266
+ );
267
+ if (!found) return {status: 'unknown-section'};
268
+ return {
269
+ status: 'resolved',
270
+ topic: target.id,
271
+ section: found.id,
272
+ ...(found.previewType ? {previewType: found.previewType} : {}),
273
+ content: found.content,
274
+ };
275
+ }
276
+
277
+ /**
278
+ * A value as JSON carries it: functions, symbols and `undefined` dropped,
279
+ * Dates as ISO strings.
280
+ * @param {any} value
281
+ * @param {string} topic for the message when the value cannot be serialized
282
+ * @returns {any}
283
+ */
284
+ function asJson(value, topic) {
285
+ try {
286
+ return JSON.parse(JSON.stringify(value));
287
+ } catch (err) {
288
+ throw Object.assign(
289
+ new Error(
290
+ `${topic} cannot be compiled: ${err instanceof Error ? err.message : String(err)}`,
291
+ {cause: err},
292
+ ),
293
+ {compilerCode: 'not_json'},
294
+ );
295
+ }
296
+ }
297
+
298
+ /**
299
+ * One file's doc, checked and in the reading language. Problems throw in the
300
+ * order a reader meets them: the file itself, then its overlay.
301
+ * @param {AuthoredFile} file
302
+ * @returns {any}
303
+ */
304
+ function readAuthoredFile(file, {placement = false} = {}) {
305
+ if ('error' in file) throw file.error;
306
+ const parsed = file.doc;
307
+ if (!('sections' in parsed)) {
308
+ throw new Error(`${file.file} is not a reference document.`);
309
+ }
310
+ const problems = problemsInTopic(parsed, {placement});
311
+ if (problems.length > 0) {
312
+ throw new Error(`${file.file} is invalid: ${problems.join('; ')}`);
313
+ }
314
+ if ('overlayError' in file) throw file.overlayError;
315
+ return file.overlay ? applyOverlay(parsed, file.overlay) : parsed;
316
+ }
317
+
318
+ /**
319
+ * Lay a translation over a doc. Overlays are keyed to a base section by title
320
+ * (`section`), not by array position: position keying grafted each overlay
321
+ * title onto whatever base section shared its index, so an overlay that omitted
322
+ * or reordered a section corrupted every section after it (#2182). An overlay
323
+ * may cover any subset of sections, in any order; the rest keep their base
324
+ * content.
325
+ * @param {any} docs
326
+ * @param {any} translation
327
+ * @returns {any}
328
+ */
329
+ function applyOverlay(docs, translation) {
330
+ /** @type {Map<string, any>} */
331
+ const bySection = new Map();
332
+ for (const ts of translation.sections ?? []) {
333
+ if (ts?.section != null) bySection.set(ts.section, ts);
334
+ }
335
+ return {
336
+ ...docs,
337
+ description: translation.description || docs.description,
338
+ sections: docs.sections.map((/** @type {any} */ section) => {
339
+ const ts = bySection.get(section.title);
340
+ if (!ts) return section;
341
+ const localized = {
342
+ ...section,
343
+ title: ts.title || section.title,
344
+ content: section.content.map(
345
+ (/** @type {any} */ block, /** @type {number} */ bi) => {
346
+ const tb = ts.content?.[bi];
347
+ if (!tb) return block;
348
+ if (tb.type === 'prose' && block.type === 'prose')
349
+ return {...block, text: tb.text};
350
+ if (tb.type === 'list' && block.type === 'list')
351
+ return {...block, items: tb.items};
352
+ return block;
353
+ },
354
+ ),
355
+ };
356
+ return withSourceTitle(localized, section.title);
357
+ }),
358
+ };
359
+ }
360
+
361
+ /**
362
+ * @typedef {import('./diagnostics.mjs').CompilerDiagnostic} CompilerDiagnostic
363
+ */
364
+
365
+ /**
366
+ * One authored doc of any kind but a reference topic, as its root loaded it.
367
+ * @typedef {object} DocFileInput
368
+ * @property {string} id the input's id: provider, root, and name
369
+ * @property {keyof typeof ROOT_KINDS} root
370
+ * @property {string} provider the package that contributes it
371
+ * @property {string} source `<package>/<path>` of the file
372
+ * @property {string | null} lang the overlay language, or null
373
+ * @property {AuthoredFile} file `doc` is the authored export, not a parse
374
+ * result; `overlay` is the translation the module exports for `lang`
375
+ * @property {string} [label] how a parse error names the file (default: its
376
+ * file name)
377
+ * @property {boolean} [useParsed] carry the parser's result instead of the
378
+ * authored export, for a reader that has always read the checked value
379
+ */
380
+
381
+ /**
382
+ * The parser that checks a root's docs. Templates and themes have their own;
383
+ * every other root dispatches on the stamped type.
384
+ * @param {string} root
385
+ * @returns {(input: unknown, label?: string) => any}
386
+ */
387
+ export function parserFor(root) {
388
+ if (root === 'themes') return parseTheme;
389
+ if (root === 'templates') return parseTemplate;
390
+ return parseReadableDoc;
391
+ }
392
+
393
+ /**
394
+ * A compiled node for any kind but a reference topic.
395
+ * @typedef {object} CompiledDocNode
396
+ * @property {number} schemaVersion
397
+ * @property {Exclude<typeof COMPILED_DOC_KINDS[number], 'reference'>} kind
398
+ * @property {'lowered'} stage
399
+ * @property {string} id
400
+ * @property {string | null} lang
401
+ * @property {{provider: string, source: string}} provenance
402
+ * @property {any} doc the authored doc, overlaid for `lang`, as JSON carries
403
+ * it: key order kept, `undefined` and functions dropped
404
+ */
405
+
406
+ /**
407
+ * The result of lowering one doc.
408
+ *
409
+ * `view` is the doc as readers have always read it: the authored export (or,
410
+ * where a reader has always read it, the parser's result), with its
411
+ * translation laid over it, not copied and not converted. Readers print from
412
+ * the view, so nothing they print depends on JSON. `node` is the sealed,
413
+ * JSON-only form a whole-project compile collects.
414
+ *
415
+ * @typedef {object} LoweredDoc
416
+ * @property {any} [view] absent when the file could not be read
417
+ * @property {CompiledDocNode | null} node null when not asked for, or when a
418
+ * problem is fatal to the node
419
+ * @property {CompilerDiagnostic[]} diagnostics
420
+ * @property {boolean} [loadFailed] importing the file threw
421
+ * @property {unknown} [loadFailure] what importing the file threw (any value,
422
+ * `undefined` included)
423
+ * @property {boolean} [missing] the file exports no doc
424
+ * @property {null | undefined} [missingValue] the empty export, as the reader
425
+ * picked it
426
+ * @property {boolean} [failed] the kind's parser threw
427
+ * @property {unknown} [failure] what the kind's parser threw
428
+ * @property {boolean} [overlayFailed] laying the translation over threw
429
+ * @property {unknown} [overlayFailure] what laying the translation over threw
430
+ */
431
+
432
+ /**
433
+ * Lower one doc of any kind but a reference topic.
434
+ *
435
+ * With `check`, the doc is held to its kind's parser, and a failure is
436
+ * recorded, not fatal: readers that never checked docs keep reading it, and a
437
+ * checked reader turns it into the error it has always thrown. A doc stamped
438
+ * with a kind its root does not read keeps its root's kind and carries a
439
+ * `wrong_kind` diagnostic. With `node`, the view is also carried as JSON; a
440
+ * value JSON cannot hold withdraws the node, never the view.
441
+ *
442
+ * @param {DocFileInput} input
443
+ * @param {{check?: boolean, node?: boolean}} [options]
444
+ * @returns {LoweredDoc}
445
+ */
446
+ export function lowerDoc(input, {check = true, node: wantNode = true} = {}) {
447
+ const {file} = input;
448
+ const at = {provider: input.provider, source: input.source};
449
+ /** @type {CompilerDiagnostic[]} */
450
+ const diagnostics = [];
451
+ if ('error' in file) {
452
+ diagnostics.push(
453
+ diagnostic('load_failed', {
454
+ ...at,
455
+ message: `${file.file} could not be loaded: ${messageOf(file.error)}`,
456
+ }),
457
+ );
458
+ return {node: null, diagnostics, loadFailed: true, loadFailure: file.error};
459
+ }
460
+ if (file.doc == null) {
461
+ diagnostics.push(
462
+ diagnostic('missing_export', {
463
+ ...at,
464
+ message: `${file.file} exports no doc.`,
465
+ }),
466
+ );
467
+ return {node: null, diagnostics, missing: true, missingValue: file.doc};
468
+ }
469
+ const allowed = ROOT_KINDS[input.root];
470
+ if (!allowed) throw new Error(`No doc root is named "${input.root}".`);
471
+ const stamped =
472
+ typeof file.doc === 'object' && 'type' in file.doc
473
+ ? file.doc.type
474
+ : undefined;
475
+ const kindFits = stamped === undefined || allowed.includes(stamped);
476
+ if (!kindFits) {
477
+ diagnostics.push(
478
+ diagnostic('wrong_kind', {
479
+ ...at,
480
+ message: `${file.file} is stamped type ${JSON.stringify(stamped)}, which the ${input.root} root does not read (it reads ${allowed.join(', ')}).`,
481
+ }),
482
+ );
483
+ }
484
+ /** @type {LoweredDoc} */
485
+ const result = {node: null, diagnostics};
486
+ let view = file.doc;
487
+ // A theme descriptor is read statically; its parse result is the doc.
488
+ if (check || input.root === 'themes') {
489
+ try {
490
+ const parsed = parserFor(input.root)(file.doc, input.label ?? file.file);
491
+ if (input.useParsed || input.root === 'themes') view = parsed;
492
+ } catch (error) {
493
+ result.failed = true;
494
+ result.failure = error;
495
+ diagnostics.push(
496
+ diagnostic('invalid_doc', {...at, message: messageOf(error)}),
497
+ );
498
+ }
499
+ }
500
+ if ('overlayError' in file) {
501
+ result.overlayFailed = true;
502
+ result.overlayFailure = file.overlayError;
503
+ } else if (file.overlay) {
504
+ try {
505
+ view = overlayAuthoredDoc(view, file.overlay);
506
+ } catch (error) {
507
+ result.overlayFailed = true;
508
+ result.overlayFailure = error;
509
+ }
510
+ }
511
+ if (result.overlayFailed) {
512
+ diagnostics.push(
513
+ diagnostic('overlay_failed', {
514
+ ...at,
515
+ message: `${file.file}'s translation could not be applied: ${messageOf(result.overlayFailure)}`,
516
+ }),
517
+ );
518
+ return result;
519
+ }
520
+ result.view = view;
521
+ if (!wantNode) return result;
522
+ let json;
523
+ try {
524
+ const text = JSON.stringify(view);
525
+ if (text === undefined) throw new TypeError('the doc is not a JSON value');
526
+ json = JSON.parse(text);
527
+ } catch (error) {
528
+ diagnostics.push(
529
+ diagnostic('not_json', {
530
+ ...at,
531
+ message: `${file.file} cannot be compiled: ${messageOf(error)}`,
532
+ }),
533
+ );
534
+ return result;
535
+ }
536
+ result.node = {
537
+ schemaVersion: COMPILED_DOC_SCHEMA_VERSION,
538
+ kind: /** @type {CompiledDocNode['kind']} */ (
539
+ kindFits && stamped !== undefined ? stamped : allowed[0]
540
+ ),
541
+ stage: 'lowered',
542
+ id: input.id,
543
+ lang: input.lang,
544
+ provenance: {provider: input.provider, source: input.source},
545
+ doc: json,
546
+ };
547
+ return result;
548
+ }
549
+
550
+ /** @param {unknown} error */
551
+ function messageOf(error) {
552
+ // Any value can be thrown; describing one must never throw in its place.
553
+ try {
554
+ return error instanceof Error ? String(error.message) : String(error);
555
+ } catch {
556
+ return Object.prototype.toString.call(error);
557
+ }
558
+ }
@@ -0,0 +1,126 @@
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
+ * @param {string} code
6
+ * @param {object} at
7
+ * @param {string | null} [at.provider]
8
+ * @param {string | null} [at.source]
9
+ * @param {string | null} [at.field]
10
+ * @param {string} at.message
11
+ * @returns {CompilerDiagnostic}
12
+ */
13
+ export function diagnostic(code: string, { provider, source, field, message }: {
14
+ provider?: string | null | undefined;
15
+ source?: string | null | undefined;
16
+ field?: string | null | undefined;
17
+ message: string;
18
+ }): CompilerDiagnostic;
19
+ /**
20
+ * Diagnostics in one order, whatever order the phases found them in: by
21
+ * source, then phase, then code, field, and message.
22
+ * @param {CompilerDiagnostic[]} list
23
+ * @returns {CompilerDiagnostic[]} a new array
24
+ */
25
+ export function sortDiagnostics(list: CompilerDiagnostic[]): CompilerDiagnostic[];
26
+ /**
27
+ * What is wrong with a value that claims to be a diagnostic, or null. A known
28
+ * code must carry its own phase, severity, scope, and remediation: a reader
29
+ * never reinterprets them.
30
+ * @param {unknown} value
31
+ * @returns {string | null}
32
+ */
33
+ export function diagnosticProblem(value: unknown): string | null;
34
+ /**
35
+ * A `<package>/<path>` that names no location on one machine: not absolute,
36
+ * no drive letter or URL scheme, no backslash, no `..` segment.
37
+ * @param {string} source
38
+ * @returns {boolean}
39
+ */
40
+ export function isPortableSource(source: string): boolean;
41
+ /**
42
+ * @file Compiler diagnostics — one shape for every problem the doc compiler
43
+ * finds.
44
+ *
45
+ * @input A diagnostic code, the package and file it concerns, and a message.
46
+ * @output A plain-JSON diagnostic: a stable code, the phase that found it,
47
+ * severity, provider, source, field, message, remediation, and the scope of
48
+ * what it invalidates. Lists sort into one deterministic order.
49
+ * @position Shared by every compiler phase: listing inputs, loading, parsing,
50
+ * overlaying, lowering, linking, serializing, and reading a bundle back. A
51
+ * code fixes its phase, severity, scope, and remediation, so no phase or
52
+ * reader can report the same problem two ways or downgrade it.
53
+ */
54
+ /** Compiler phases, in the order a descriptor passes through them. */
55
+ export const DIAGNOSTIC_PHASES: readonly ["discover", "load", "parse", "overlay", "lower", "link", "serialize", "bundle"];
56
+ /**
57
+ * What a failure invalidates: the one node it concerns, or the whole
58
+ * compilation (a bundle that cannot be read at all).
59
+ * @typedef {'node' | 'compilation'} DiagnosticScope
60
+ */
61
+ /**
62
+ * @typedef {typeof DIAGNOSTIC_PHASES[number]} DiagnosticPhase
63
+ * @typedef {'error' | 'warning'} DiagnosticSeverity
64
+ */
65
+ /**
66
+ * @typedef {object} CompilerDiagnostic
67
+ * @property {string} code stable; one of {@link DIAGNOSTIC_CODES}
68
+ * @property {DiagnosticPhase} phase
69
+ * @property {DiagnosticSeverity} severity
70
+ * @property {DiagnosticScope} scope
71
+ * @property {string | null} provider the package the problem is in
72
+ * @property {string | null} source `<package>/<path>` of the file, never a
73
+ * machine path
74
+ * @property {string | null} field the field or reference at fault, when known
75
+ * @property {string} message
76
+ * @property {string} remediation what to do about it
77
+ */
78
+ /**
79
+ * @typedef {object} DiagnosticRule
80
+ * @property {DiagnosticPhase} phase
81
+ * @property {DiagnosticSeverity} severity
82
+ * @property {DiagnosticScope} scope
83
+ * @property {string} remediation
84
+ */
85
+ /** Every code the compiler emits, with the facts it fixes. */
86
+ export const DIAGNOSTIC_CODES: Readonly<Record<string, DiagnosticRule>>;
87
+ /**
88
+ * What a failure invalidates: the one node it concerns, or the whole
89
+ * compilation (a bundle that cannot be read at all).
90
+ */
91
+ export type DiagnosticScope = "node" | "compilation";
92
+ export type DiagnosticPhase = (typeof DIAGNOSTIC_PHASES)[number];
93
+ export type DiagnosticSeverity = "error" | "warning";
94
+ export type CompilerDiagnostic = {
95
+ /**
96
+ * stable; one of {@link DIAGNOSTIC_CODES}
97
+ */
98
+ code: string;
99
+ phase: DiagnosticPhase;
100
+ severity: DiagnosticSeverity;
101
+ scope: DiagnosticScope;
102
+ /**
103
+ * the package the problem is in
104
+ */
105
+ provider: string | null;
106
+ /**
107
+ * `<package>/<path>` of the file, never a
108
+ * machine path
109
+ */
110
+ source: string | null;
111
+ /**
112
+ * the field or reference at fault, when known
113
+ */
114
+ field: string | null;
115
+ message: string;
116
+ /**
117
+ * what to do about it
118
+ */
119
+ remediation: string;
120
+ };
121
+ export type DiagnosticRule = {
122
+ phase: DiagnosticPhase;
123
+ severity: DiagnosticSeverity;
124
+ scope: DiagnosticScope;
125
+ remediation: string;
126
+ };