@astryxdesign/cli 0.6.3 → 0.6.4-canary.0e1fbdb

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,206 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file Translation overlays for component and hook docs.
5
+ *
6
+ * @input An authored component or hook doc and the translation its module
7
+ * exports for the reading language (`docsZh`, `docsDense`).
8
+ * @output The doc in that language: translated text laid over the authored
9
+ * doc, never dropping a prop, param, or field the translation has not
10
+ * caught up with.
11
+ * @position Used by ./compile.mjs when it lowers a component or hook doc, so
12
+ * every reader sees one overlay rule. Reference topics overlay by section in
13
+ * ./compile.mjs instead.
14
+ */
15
+
16
+ /**
17
+ * The translation a doc module exports for `lang`, or null.
18
+ * @param {Record<string, any>} mod
19
+ * @param {string | null} lang
20
+ * @returns {any}
21
+ */
22
+ export function translationFor(mod, lang) {
23
+ const key = lang === 'zh' ? 'docsZh' : lang === 'dense' ? 'docsDense' : null;
24
+ return key && mod?.[key] ? mod[key] : null;
25
+ }
26
+
27
+ /**
28
+ * Lay a translation over an authored component or hook doc. A translation
29
+ * that carries props is a full translated doc, overlaid prop by prop; any other
30
+ * is a set of translated strings merged onto the doc.
31
+ * @param {any} docs
32
+ * @param {any} translation
33
+ * @returns {any}
34
+ */
35
+ export function overlayAuthoredDoc(docs, translation) {
36
+ if (
37
+ translation.props ||
38
+ translation.components?.some((/** @type {any} */ c) => c.props)
39
+ ) {
40
+ return overlayComponentDoc(docs, translation);
41
+ }
42
+ return mergeTranslation(docs, translation);
43
+ }
44
+
45
+ /**
46
+ * @param {any} docs
47
+ * @param {any} translation
48
+ * @returns {any}
49
+ */
50
+ export function mergeTranslation(docs, translation) {
51
+ if (!translation) return docs;
52
+
53
+ /** @type {any} */
54
+ const merged = {...docs};
55
+
56
+ // Merge prose into usage
57
+ if (merged.usage) {
58
+ merged.usage = {...merged.usage};
59
+ if (translation.usage?.description)
60
+ merged.usage.description = translation.usage.description;
61
+ else if (translation.description)
62
+ merged.usage.description = translation.description;
63
+ if (translation.usage?.bestPractices)
64
+ merged.usage.bestPractices = translation.usage.bestPractices;
65
+ if (translation.usage?.accessibility)
66
+ merged.usage.accessibility = translation.usage.accessibility;
67
+ }
68
+
69
+ // Legacy top-level fields (for docsZh that are full ComponentDoc clones)
70
+ if (translation.description && !merged.usage)
71
+ merged.description = translation.description;
72
+
73
+ // Merge prop descriptions for single-component docs
74
+ if (translation.propDescriptions && merged.props) {
75
+ merged.props = merged.props.map((/** @type {any} */ prop) => {
76
+ const desc = translation.propDescriptions[prop.name];
77
+ return desc != null ? {...prop, description: desc} : prop;
78
+ });
79
+ }
80
+
81
+ // Merge hook param descriptions (HookTranslationDoc). Params are an array of
82
+ // {name, type, description, required}; override description by name where the
83
+ // translation has an entry. Names may include dots (e.g. 'options.isActive');
84
+ // the lookup is keyed by the exact param name.
85
+ if (translation.paramDescriptions && merged.params) {
86
+ merged.params = merged.params.map((/** @type {any} */ param) => {
87
+ const desc = translation.paramDescriptions[param.name];
88
+ return desc != null ? {...param, description: desc} : param;
89
+ });
90
+ }
91
+
92
+ // Merge hook return descriptions (HookTranslationDoc). Returns are an array
93
+ // of {name, type, description}; override description by name where present.
94
+ if (translation.returnDescriptions && merged.returns) {
95
+ merged.returns = merged.returns.map((/** @type {any} */ ret) => {
96
+ const desc = translation.returnDescriptions[ret.name];
97
+ return desc != null ? {...ret, description: desc} : ret;
98
+ });
99
+ }
100
+
101
+ // Merge sub-component translations
102
+ if (translation.components && merged.components) {
103
+ merged.components = merged.components.map(
104
+ (/** @type {any} */ comp, /** @type {any} */ i) => {
105
+ const trans =
106
+ translation.components.find(
107
+ (/** @type {any} */ t) => t.name === comp.name,
108
+ ) || translation.components[i];
109
+ if (!trans) return comp;
110
+
111
+ const mergedComp = {...comp};
112
+ if (trans.description) mergedComp.description = trans.description;
113
+ if (trans.propDescriptions && comp.props) {
114
+ mergedComp.props = comp.props.map((/** @type {any} */ prop) => {
115
+ const desc = trans.propDescriptions[prop.name];
116
+ return desc != null ? {...prop, description: desc} : prop;
117
+ });
118
+ }
119
+ return mergedComp;
120
+ },
121
+ );
122
+ }
123
+
124
+ return merged;
125
+ }
126
+
127
+ /**
128
+ * Overlay a full-ComponentDoc-shaped translation onto the English doc.
129
+ *
130
+ * Base order and completeness win; the translation supplies text for the
131
+ * entries it covers. Props are matched by name, never by position, so a
132
+ * translation that is missing entries (or lists them in another order) can no
133
+ * longer drop or misattribute one.
134
+ *
135
+ * @param {any} docs Base (English) component doc.
136
+ * @param {any} translation Translated doc, possibly covering only some props.
137
+ * @returns {any} Merged doc with every base prop present.
138
+ */
139
+ function overlayComponentDoc(docs, translation) {
140
+ /** Merge one prop list: keep base entries and order, translate what's covered.
141
+ * @param {any[] | undefined} baseProps
142
+ * @param {any[] | undefined} tProps
143
+ */
144
+ const overlayProps = (baseProps, tProps) => {
145
+ if (!baseProps) return baseProps;
146
+ const byName = new Map(
147
+ (tProps ?? []).map((/** @type {any} */ p) => [p.name, p]),
148
+ );
149
+ return baseProps.map((/** @type {any} */ prop) => {
150
+ const t = byName.get(prop.name);
151
+ // Take the translated text, but never let it drop the prop's contract
152
+ // (type/default/required stay authoritative from the English doc).
153
+ return t ? {...prop, ...t, name: prop.name, type: prop.type} : prop;
154
+ });
155
+ };
156
+
157
+ /** Preserve canonical structured guidance added after legacy full-doc translations,
158
+ * without changing established translated prose behavior.
159
+ * @param {any} baseUsage
160
+ * @param {any} translatedUsage
161
+ */
162
+ const mergeUsage = (baseUsage, translatedUsage) => {
163
+ if (!translatedUsage) return baseUsage;
164
+ return {
165
+ ...translatedUsage,
166
+ ...(translatedUsage.accessibility === undefined &&
167
+ baseUsage?.accessibility !== undefined
168
+ ? {accessibility: baseUsage.accessibility}
169
+ : null),
170
+ ...(translatedUsage.accessibilityThemeCoverage === undefined &&
171
+ baseUsage?.accessibilityThemeCoverage !== undefined
172
+ ? {accessibilityThemeCoverage: baseUsage.accessibilityThemeCoverage}
173
+ : null),
174
+ ...(translatedUsage.anatomy === undefined &&
175
+ baseUsage?.anatomy !== undefined
176
+ ? {anatomy: baseUsage.anatomy}
177
+ : null),
178
+ };
179
+ };
180
+
181
+ const merged = {
182
+ ...docs,
183
+ ...translation,
184
+ usage: mergeUsage(docs.usage, translation.usage),
185
+ };
186
+
187
+ merged.props = overlayProps(docs.props, translation.props);
188
+
189
+ if (docs.components) {
190
+ const tByName = new Map(
191
+ (translation.components ?? []).map((/** @type {any} */ c) => [c.name, c]),
192
+ );
193
+ merged.components = docs.components.map((/** @type {any} */ base) => {
194
+ const t = tByName.get(base.name);
195
+ if (!t) return base;
196
+ return {
197
+ ...base,
198
+ ...t,
199
+ usage: mergeUsage(base.usage, t.usage),
200
+ props: overlayProps(base.props, t.props),
201
+ };
202
+ });
203
+ }
204
+
205
+ return merged;
206
+ }
@@ -0,0 +1,9 @@
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 {unknown} input
6
+ * @param {string} [label]
7
+ * @returns {any}
8
+ */
9
+ export function parseReadableDoc(input: unknown, label?: string): any;
@@ -0,0 +1,29 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file parseDoc as every reader outside the themes root has always seen it.
5
+ *
6
+ * @input Any authored doc value and a label for messages.
7
+ * @output The parsed doc, or the parser's error.
8
+ * @position The public `parseDoc` also accepts theme descriptors. Component,
9
+ * hook, self-doc, and topic readers never did: to them a theme descriptor is
10
+ * an unsupported type, with the message they have always printed.
11
+ */
12
+
13
+ import {parseDoc} from '../../authoring/doctypes/parse.mjs';
14
+
15
+ /**
16
+ * @param {unknown} input
17
+ * @param {string} [label]
18
+ * @returns {any}
19
+ */
20
+ export function parseReadableDoc(input, label = 'doc') {
21
+ const type =
22
+ input && typeof input === 'object' && 'type' in input
23
+ ? /** @type {{type?: unknown}} */ (input).type
24
+ : undefined;
25
+ if (type === 'theme') {
26
+ throw new Error(`${label} has unsupported type ${JSON.stringify(type)}.`);
27
+ }
28
+ return parseDoc(input, label);
29
+ }
@@ -0,0 +1,127 @@
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
+ * Lower one descriptor file. Memoized per file and options for the life of the
6
+ * process; a file that failed to load is tried again on the next read, as a
7
+ * fresh import would be.
8
+ * @param {string} file absolute path
9
+ * @param {ReadOptions} options
10
+ * @param {{node?: boolean}} [want] also build the sealed node
11
+ * @returns {Promise<import('./compile.mjs').LoweredDoc>}
12
+ */
13
+ export function compileDocFile(file: string, options: ReadOptions, { node }?: {
14
+ node?: boolean;
15
+ }): Promise<import("./compile.mjs").LoweredDoc>;
16
+ /**
17
+ * What a reader gets for one descriptor: the view it has always read.
18
+ *
19
+ * `strict` readers check the doc and throw what they always threw: the import
20
+ * error, the parser's error (for an empty export too), then a failed
21
+ * translation. Other readers skip the check, throw only what importing or
22
+ * translating threw, and read an empty export as the empty value itself.
23
+ * The view is shared, as the module's own export always was.
24
+ * @param {string} file absolute path
25
+ * @param {ReadOptions & {strict?: boolean}} options
26
+ * @returns {Promise<any>}
27
+ */
28
+ export function readDocView(file: string, options: ReadOptions & {
29
+ strict?: boolean;
30
+ }): Promise<any>;
31
+ /**
32
+ * Freeze a value and everything in it.
33
+ * @template T
34
+ * @param {T} value
35
+ * @returns {T}
36
+ */
37
+ export function deepFreeze<T>(value: T): T;
38
+ /**
39
+ * Where the `lang` overlay of a doc file lives: `{topic}.doc.{lang}.mjs`.
40
+ * @param {string} docPath
41
+ * @param {string} lang
42
+ * @returns {string}
43
+ */
44
+ export function overlayPath(docPath: string, lang: string): string;
45
+ /**
46
+ * The overlay languages a topic ships for its own file or any extension.
47
+ * @param {import('../discovery/docs-discovery.mjs').DocsTopicEntry} entry
48
+ * @returns {string[]}
49
+ */
50
+ export function overlayLanguages(entry: import("../discovery/docs-discovery.mjs").DocsTopicEntry): string[];
51
+ /**
52
+ * Load one topic file and the overlay for `lang`. A failure is recorded on the
53
+ * result, not thrown, so the compiler reports it in reading order.
54
+ * @param {string} docPath
55
+ * @param {string | null} lang
56
+ * @returns {Promise<import('./compile.mjs').AuthoredFile>}
57
+ */
58
+ export function loadTopicFile(docPath: string, lang: string | null): Promise<import("./compile.mjs").AuthoredFile>;
59
+ /**
60
+ * Everything the compiler needs for one topic, read from disk.
61
+ * @param {import('../discovery/docs-discovery.mjs').DocsTopicEntry} entry
62
+ * @param {string | null} lang
63
+ * @returns {Promise<import('./compile.mjs').ReferenceTopicInput>}
64
+ */
65
+ export function loadTopicInput(entry: import("../discovery/docs-discovery.mjs").DocsTopicEntry, lang: string | null): Promise<import("./compile.mjs").ReferenceTopicInput>;
66
+ /**
67
+ * How each root's module names its doc, in precedence order: the `??` chain
68
+ * each reader has always used, so a file that exports two docs keeps serving
69
+ * the one it served before.
70
+ */
71
+ export const DOC_EXPORTS: Readonly<{
72
+ components: string[];
73
+ hooks: string[];
74
+ templates: string[];
75
+ 'self-docs': string[];
76
+ tree: string[];
77
+ }>;
78
+ /** The localized overlays a docs read can apply. */
79
+ export const OVERLAY_LANGUAGES: string[];
80
+ export type ReadOptions = {
81
+ root: "components" | "hooks" | "templates" | "themes" | "self-docs" | "tree";
82
+ /**
83
+ * overlay language; null reads the authored
84
+ * text
85
+ */
86
+ lang?: string | null | undefined;
87
+ /**
88
+ * how a parse error names the file (default: its
89
+ * file name)
90
+ */
91
+ label?: string | undefined;
92
+ /**
93
+ * the owning package, when the caller knows it
94
+ */
95
+ provider?: string | undefined;
96
+ /**
97
+ * the node's id (default: provider, root, and file
98
+ * name)
99
+ */
100
+ id?: string | undefined;
101
+ /**
102
+ * how to import the module (default
103
+ * `user`)
104
+ */
105
+ loader?: "template" | "native" | "user" | undefined;
106
+ /**
107
+ * which exports name the doc, in
108
+ * precedence order, for a reader that has always read a narrower set than its
109
+ * root's default ({@link DOC_EXPORTS})
110
+ */
111
+ exports?: readonly string[] | undefined;
112
+ /**
113
+ * for themes: the descriptor value, read
114
+ * without executing the file
115
+ */
116
+ readStatic?: (() => unknown) | undefined;
117
+ /**
118
+ * which value the view carries: the
119
+ * authored export (default) or its parser's result, for a reader that has
120
+ * always read the checked value
121
+ */
122
+ value?: "authored" | "parsed" | undefined;
123
+ /**
124
+ * hold the doc to its kind's parser
125
+ */
126
+ check?: boolean | undefined;
127
+ };
@@ -0,0 +1,325 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file Doc reader — authored files in, lowered docs out, for every doc kind.
5
+ *
6
+ * @input A descriptor file, the root that reads it (components, hooks,
7
+ * templates, themes, self-docs, or doc topics), the reading language, and
8
+ * how strictly the reader checks.
9
+ * @output The lowered doc for that file. Readers get the view they have always
10
+ * read, lowered afresh on every read; a whole-project compile also gets the
11
+ * sealed node, memoized per file for the life of the process. For doc
12
+ * topics: the compiler input for a topic, with its extensions and overlays
13
+ * loaded.
14
+ * @position Loads authored doc files for the readers in api/ and clients/ and
15
+ * hands each to ./compile.mjs. Each reader keeps its own loader, export
16
+ * order, and strictness, so what it prints is what it printed before.
17
+ * ./doc-loads.test.mjs lists, site by site, every other place the CLI runs
18
+ * anything but its static imports of other CLI code, the doc reads that skip
19
+ * this module among them: discovery's catalog fields, each command's
20
+ * self-docs for its help text, and the build-time README. A new site fails
21
+ * it. It catches every ordinary way of running code, whatever the local
22
+ * names; deliberate obfuscation is out of scope. Internal to the CLI:
23
+ * nothing here is public API.
24
+ */
25
+
26
+ import * as fs from 'node:fs';
27
+ import * as path from 'node:path';
28
+ import {
29
+ importDocModule,
30
+ importNativeModule,
31
+ importTemplateModule,
32
+ } from './import.mjs';
33
+ import {lowerDoc, parserFor} from './compile.mjs';
34
+ import {translationFor} from './overlays.mjs';
35
+ import {parseReadableDoc} from './parse-readable.mjs';
36
+ import {packageOf, packageSource} from './source.mjs';
37
+
38
+ /**
39
+ * How each root's module names its doc, in precedence order: the `??` chain
40
+ * each reader has always used, so a file that exports two docs keeps serving
41
+ * the one it served before.
42
+ */
43
+ export const DOC_EXPORTS = Object.freeze({
44
+ components: ['default', 'docs'],
45
+ hooks: ['default', 'docs'],
46
+ templates: ['default', 'doc'],
47
+ 'self-docs': ['doc', 'docs', 'default'],
48
+ // The docs tree's own files: namespace docs and the guides it places.
49
+ tree: ['docs', 'default'],
50
+ });
51
+
52
+ /** How a reader imports a doc module. */
53
+ const LOADERS = Object.freeze({
54
+ // jiti for `.ts`, native otherwise: the checked loaders' import.
55
+ user: importDocModule,
56
+ // A plain `import()`: what the unchecked readers have always used.
57
+ native: importNativeModule,
58
+ // jiti with JSX for `.ts`: template discovery's import.
59
+ template: importTemplateModule,
60
+ });
61
+
62
+ /**
63
+ * @typedef {object} ReadOptions
64
+ * @property {'components' | 'hooks' | 'templates' | 'themes' | 'self-docs' | 'tree'} root
65
+ * @property {string | null} [lang] overlay language; null reads the authored
66
+ * text
67
+ * @property {string} [label] how a parse error names the file (default: its
68
+ * file name)
69
+ * @property {string} [provider] the owning package, when the caller knows it
70
+ * @property {string} [id] the node's id (default: provider, root, and file
71
+ * name)
72
+ * @property {keyof typeof LOADERS} [loader] how to import the module (default
73
+ * `user`)
74
+ * @property {readonly string[]} [exports] which exports name the doc, in
75
+ * precedence order, for a reader that has always read a narrower set than its
76
+ * root's default ({@link DOC_EXPORTS})
77
+ * @property {() => unknown} [readStatic] for themes: the descriptor value, read
78
+ * without executing the file
79
+ * @property {'authored' | 'parsed'} [value] which value the view carries: the
80
+ * authored export (default) or its parser's result, for a reader that has
81
+ * always read the checked value
82
+ * @property {boolean} [check] hold the doc to its kind's parser
83
+ */
84
+
85
+ /** @type {Map<string, Promise<import('./compile.mjs').LoweredDoc>>} */
86
+ const lowered = new Map();
87
+
88
+ /**
89
+ * Lower one descriptor file. Memoized per file and options for the life of the
90
+ * process; a file that failed to load is tried again on the next read, as a
91
+ * fresh import would be.
92
+ * @param {string} file absolute path
93
+ * @param {ReadOptions} options
94
+ * @param {{node?: boolean}} [want] also build the sealed node
95
+ * @returns {Promise<import('./compile.mjs').LoweredDoc>}
96
+ */
97
+ export function compileDocFile(file, options, {node = false} = {}) {
98
+ const lang = options.lang ?? null;
99
+ const check = options.check === true;
100
+ const key = JSON.stringify([
101
+ path.resolve(file),
102
+ options.root,
103
+ lang,
104
+ options.label ?? null,
105
+ options.provider ?? null,
106
+ options.id ?? null,
107
+ options.loader ?? 'user',
108
+ options.exports ?? null,
109
+ options.value ?? 'authored',
110
+ check,
111
+ node,
112
+ ]);
113
+ let result = lowered.get(key);
114
+ if (!result) {
115
+ result = loadAuthored(file, options, lang).then(authored => {
116
+ const provider = options.provider ?? packageOf(file);
117
+ const out = lowerDoc(
118
+ {
119
+ id:
120
+ options.id ?? `${provider}:${options.root}:${path.basename(file)}`,
121
+ root: options.root,
122
+ provider,
123
+ source: packageSource(file),
124
+ lang,
125
+ file: authored,
126
+ ...(options.label ? {label: options.label} : {}),
127
+ ...(options.value === 'parsed' ? {useParsed: true} : {}),
128
+ },
129
+ {check, node},
130
+ );
131
+ if (out.node) deepFreeze(out.node);
132
+ if (out.loadFailed || 'overlayError' in authored) {
133
+ lowered.delete(key);
134
+ }
135
+ return out;
136
+ });
137
+ lowered.set(key, result);
138
+ }
139
+ return result;
140
+ }
141
+
142
+ /**
143
+ * What a reader gets for one descriptor: the view it has always read.
144
+ *
145
+ * `strict` readers check the doc and throw what they always threw: the import
146
+ * error, the parser's error (for an empty export too), then a failed
147
+ * translation. Other readers skip the check, throw only what importing or
148
+ * translating threw, and read an empty export as the empty value itself.
149
+ * The view is shared, as the module's own export always was.
150
+ * @param {string} file absolute path
151
+ * @param {ReadOptions & {strict?: boolean}} options
152
+ * @returns {Promise<any>}
153
+ */
154
+ export async function readDocView(file, options) {
155
+ const strict = options.strict === true;
156
+ const lang = options.lang ?? null;
157
+ // Lowered on every read, as the readers always loaded: Node caches the
158
+ // module, and the translation and the check run fresh each time, so a
159
+ // reader never shares a translated or parsed result with the next one.
160
+ const provider = options.provider ?? packageOf(file);
161
+ const result = lowerDoc(
162
+ {
163
+ id: options.id ?? `${provider}:${options.root}:${path.basename(file)}`,
164
+ root: options.root,
165
+ provider,
166
+ source: packageSource(file),
167
+ lang,
168
+ file: await loadAuthored(file, options, lang),
169
+ ...(options.label ? {label: options.label} : {}),
170
+ ...(options.value === 'parsed' ? {useParsed: true} : {}),
171
+ },
172
+ {check: strict || options.check === true, node: false},
173
+ );
174
+ if (result.loadFailed) throw result.loadFailure;
175
+ if (result.missing) {
176
+ if (strict)
177
+ parserFor(options.root)(result.missingValue, options.label ?? file);
178
+ return result.missingValue;
179
+ }
180
+ if (strict && result.failed) throw result.failure;
181
+ if (result.overlayFailed) throw result.overlayFailure;
182
+ return result.view;
183
+ }
184
+
185
+ /**
186
+ * Load one file as its root reads it: the doc its module exports and, for a
187
+ * component or hook, the translation it exports for `lang`.
188
+ * @param {string} file
189
+ * @param {ReadOptions} options
190
+ * @param {string | null} lang
191
+ * @returns {Promise<import('./compile.mjs').AuthoredFile>}
192
+ */
193
+ async function loadAuthored(file, options, lang) {
194
+ const name = path.basename(file);
195
+ if (options.root === 'themes') {
196
+ if (!options.readStatic) {
197
+ throw new Error(
198
+ 'A theme descriptor is read statically; pass readStatic.',
199
+ );
200
+ }
201
+ try {
202
+ return {file: name, doc: options.readStatic()};
203
+ } catch (error) {
204
+ return {file: name, error};
205
+ }
206
+ }
207
+ let mod;
208
+ try {
209
+ mod = await LOADERS[options.loader ?? 'user'](file);
210
+ } catch (error) {
211
+ return {file: name, error};
212
+ }
213
+ // `a ?? b ?? c`, exactly: the first value that is not null or undefined,
214
+ // else the last one.
215
+ const [first, ...rest] = options.exports ?? DOC_EXPORTS[options.root];
216
+ let doc = mod?.[first];
217
+ for (const key of rest) doc = doc ?? mod?.[key];
218
+ const overlay =
219
+ lang && (options.root === 'components' || options.root === 'hooks')
220
+ ? translationFor(mod, lang)
221
+ : null;
222
+ return overlay ? {file: name, doc, overlay} : {file: name, doc};
223
+ }
224
+
225
+ /**
226
+ * Freeze a value and everything in it.
227
+ * @template T
228
+ * @param {T} value
229
+ * @returns {T}
230
+ */
231
+ export function deepFreeze(value) {
232
+ if (value !== null && typeof value === 'object' && !Object.isFrozen(value)) {
233
+ Object.freeze(value);
234
+ for (const child of Object.values(value)) deepFreeze(child);
235
+ }
236
+ return value;
237
+ }
238
+
239
+ // ── Doc topics ─────────────────────────────────────────────────────────────
240
+
241
+ /** The localized overlays a docs read can apply. */
242
+ export const OVERLAY_LANGUAGES = ['zh', 'dense'];
243
+
244
+ /**
245
+ * Where the `lang` overlay of a doc file lives: `{topic}.doc.{lang}.mjs`.
246
+ * @param {string} docPath
247
+ * @param {string} lang
248
+ * @returns {string}
249
+ */
250
+ export function overlayPath(docPath, lang) {
251
+ return path.join(
252
+ path.dirname(docPath),
253
+ `${path.basename(docPath, '.doc.mjs')}.doc.${lang}.mjs`,
254
+ );
255
+ }
256
+
257
+ /**
258
+ * The overlay languages a topic ships for its own file or any extension.
259
+ * @param {import('../discovery/docs-discovery.mjs').DocsTopicEntry} entry
260
+ * @returns {string[]}
261
+ */
262
+ export function overlayLanguages(entry) {
263
+ const files = [entry.path, ...entry.extensions.map(ext => ext.path)];
264
+ return OVERLAY_LANGUAGES.filter(lang =>
265
+ files.some(file => fs.existsSync(overlayPath(file, lang))),
266
+ );
267
+ }
268
+
269
+ /**
270
+ * Load one topic file and the overlay for `lang`. A failure is recorded on the
271
+ * result, not thrown, so the compiler reports it in reading order.
272
+ * @param {string} docPath
273
+ * @param {string | null} lang
274
+ * @returns {Promise<import('./compile.mjs').AuthoredFile>}
275
+ */
276
+ export async function loadTopicFile(docPath, lang) {
277
+ const file = path.basename(docPath);
278
+ let doc;
279
+ try {
280
+ const mod = await importNativeModule(docPath);
281
+ doc = parseReadableDoc(mod.docs ?? mod.default, file);
282
+ } catch (error) {
283
+ return {file, error};
284
+ }
285
+ if (!lang) return {file, doc};
286
+ const translationPath = overlayPath(docPath, lang);
287
+ if (!fs.existsSync(translationPath)) return {file, doc};
288
+ try {
289
+ const translationMod = await importNativeModule(translationPath);
290
+ return {
291
+ file,
292
+ doc,
293
+ overlay: translationMod.docsZh || translationMod.docsDense || null,
294
+ };
295
+ } catch (overlayError) {
296
+ return {file, doc, overlayError};
297
+ }
298
+ }
299
+
300
+ /**
301
+ * Everything the compiler needs for one topic, read from disk.
302
+ * @param {import('../discovery/docs-discovery.mjs').DocsTopicEntry} entry
303
+ * @param {string | null} lang
304
+ * @returns {Promise<import('./compile.mjs').ReferenceTopicInput>}
305
+ */
306
+ export async function loadTopicInput(entry, lang) {
307
+ const extensions = [];
308
+ for (const extension of entry.extensions) {
309
+ extensions.push({
310
+ ...(await loadTopicFile(extension.path, lang)),
311
+ provider: extension.package,
312
+ providerId: extension.providerId ?? extension.package,
313
+ });
314
+ }
315
+ return {
316
+ id: entry.name,
317
+ provider: entry.package,
318
+ providerId: entry.providerId ?? entry.package,
319
+ replaces: entry.replaces ?? null,
320
+ lang,
321
+ base: await loadTopicFile(entry.path, lang),
322
+ extensions,
323
+ ...(entry.tree === true ? {tree: true} : {}),
324
+ };
325
+ }