@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,320 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file Canonical provider, artifact, and immutable-instance identity helpers.
5
+ *
6
+ * IDs use versioned, RFC 3986-escaped path segments. Provider package names are
7
+ * case-insensitive and normalize to lowercase. Artifact names preserve case and
8
+ * normalize Unicode to NFC.
9
+ */
10
+
11
+ /** @typedef {import('../../authoring/identity/type').ArtifactId} ArtifactId */
12
+ /** @typedef {import('../../authoring/identity/type').ArtifactIdentity} ArtifactIdentity */
13
+ /** @typedef {import('../../authoring/identity/type').AuthoredDoc} AuthoredDoc */
14
+ /** @typedef {import('../../authoring/identity/type').AuthoredDocEntry} AuthoredDocEntry */
15
+ /** @typedef {import('../../authoring/doctypes/base/type').AuthoredDocKind} AuthoredDocKind */
16
+ /** @typedef {import('../../authoring/identity/type').ContentDigest} ContentDigest */
17
+ /** @typedef {import('../../authoring/identity/type').ContributionKind} ContributionKind */
18
+ /** @typedef {import('../../authoring/identity/type').DocId} DocId */
19
+ /** @typedef {import('../../authoring/identity/type').ProviderId} ProviderId */
20
+ /** @typedef {import('../../authoring/identity/type').ProviderInstance} ProviderInstance */
21
+ /** @typedef {import('../../authoring/identity/type').ProviderInstanceId} ProviderInstanceId */
22
+
23
+ const ARTIFACT_PREFIX = 'astryx:artifact:v1/';
24
+ const PROVIDER_INSTANCE_PREFIX = 'astryx:provider-instance:v1/';
25
+ const PACKAGE_NAME_RE =
26
+ /^(?:@[a-z0-9][a-z0-9._~!*'()-]*\/)?[a-z0-9][a-z0-9._~!*'()-]*$/u;
27
+ const SHA256_RE = /^sha256:[0-9a-f]{64}$/u;
28
+
29
+ /** @type {ReadonlySet<ContributionKind>} */
30
+ const CONTRIBUTION_KINDS = new Set([
31
+ 'component',
32
+ 'function',
33
+ 'generic',
34
+ 'page',
35
+ 'block',
36
+ 'schema',
37
+ 'command',
38
+ 'enum',
39
+ 'namespace',
40
+ 'theme',
41
+ 'codemod',
42
+ 'agent-doc',
43
+ ]);
44
+
45
+ /** @type {ReadonlySet<AuthoredDocKind>} */
46
+ const DOC_KINDS = new Set([
47
+ 'component',
48
+ 'function',
49
+ 'generic',
50
+ 'page',
51
+ 'block',
52
+ 'schema',
53
+ 'command',
54
+ 'enum',
55
+ 'namespace',
56
+ ]);
57
+
58
+ /** RFC 3986 path-segment encoding with uppercase escapes. */
59
+ /** @param {string} value @returns {string} */
60
+ function encodeSegment(value) {
61
+ return encodeURIComponent(value).replace(
62
+ /[!'()*]/gu,
63
+ character => `%${character.charCodeAt(0).toString(16).toUpperCase()}`,
64
+ );
65
+ }
66
+
67
+ /** Decode one identity segment or throw a stable, readable error. */
68
+ /** @param {string} value @param {string} label @returns {string} */
69
+ function decodeSegment(value, label) {
70
+ try {
71
+ return decodeURIComponent(value);
72
+ } catch {
73
+ throw new Error(`${label} contains invalid percent escaping.`);
74
+ }
75
+ }
76
+
77
+ /** Normalize a required identity string without changing meaningful case. */
78
+ /** @param {unknown} value @param {string} label @returns {string} */
79
+ function normalizeName(value, label) {
80
+ if (typeof value !== 'string' || value.trim() === '') {
81
+ throw new Error(`${label} must be a non-empty string.`);
82
+ }
83
+ return value.trim().normalize('NFC');
84
+ }
85
+
86
+ /**
87
+ * Normalize an npm package name into a ProviderId.
88
+ * @param {string} packageName
89
+ * @returns {ProviderId}
90
+ */
91
+ export function normalizeProviderId(packageName) {
92
+ const normalized = normalizeName(packageName, 'Provider ID').toLowerCase();
93
+ if (!PACKAGE_NAME_RE.test(normalized)) {
94
+ throw new Error(
95
+ `Provider ID "${packageName}" must be a bare npm package name.`,
96
+ );
97
+ }
98
+ return /** @type {ProviderId} */ (normalized);
99
+ }
100
+
101
+ /**
102
+ * Normalize a SHA-256 digest.
103
+ * @param {string} digest
104
+ * @returns {ContentDigest}
105
+ */
106
+ export function normalizeContentDigest(digest) {
107
+ const normalized = normalizeName(digest, 'Content digest').toLowerCase();
108
+ if (!SHA256_RE.test(normalized)) {
109
+ throw new Error(
110
+ 'Content digest must use sha256:<64 lowercase hex characters>.',
111
+ );
112
+ }
113
+ return /** @type {ContentDigest} */ (normalized);
114
+ }
115
+
116
+ /**
117
+ * Build a stable provider + contribution kind + artifact-name ID.
118
+ * @param {string} provider
119
+ * @param {ContributionKind} kind
120
+ * @param {string} name
121
+ * @returns {ArtifactId}
122
+ */
123
+ export function createArtifactId(provider, kind, name) {
124
+ const providerId = normalizeProviderId(provider);
125
+ if (!CONTRIBUTION_KINDS.has(kind)) {
126
+ throw new Error(`Unknown contribution kind "${String(kind)}".`);
127
+ }
128
+ const stableName = normalizeName(name, 'Artifact name');
129
+ return /** @type {ArtifactId} */ (
130
+ `${ARTIFACT_PREFIX}${encodeSegment(providerId)}/${kind}/${encodeSegment(stableName)}`
131
+ );
132
+ }
133
+
134
+ /**
135
+ * Build a stable document ID from provider + authored kind + stable name.
136
+ * @param {string} provider
137
+ * @param {AuthoredDocKind} kind
138
+ * @param {string} name
139
+ * @returns {DocId}
140
+ */
141
+ export function createDocId(provider, kind, name) {
142
+ if (!DOC_KINDS.has(kind)) {
143
+ throw new Error(`Unknown authored doc kind "${String(kind)}".`);
144
+ }
145
+ return /** @type {DocId} */ (createArtifactId(provider, kind, name));
146
+ }
147
+
148
+ /**
149
+ * Build a normalized logical artifact record.
150
+ * @param {string} provider
151
+ * @param {ContributionKind} kind
152
+ * @param {string} name
153
+ * @returns {ArtifactIdentity}
154
+ */
155
+ export function createArtifactIdentity(provider, kind, name) {
156
+ const providerId = normalizeProviderId(provider);
157
+ const stableName = normalizeName(name, 'Artifact name');
158
+ return Object.freeze({
159
+ id: createArtifactId(providerId, kind, stableName),
160
+ providerId,
161
+ kind,
162
+ name: stableName,
163
+ });
164
+ }
165
+
166
+ /**
167
+ * Parse and canonicalize an ArtifactId.
168
+ * @param {string} value
169
+ * @returns {ArtifactIdentity}
170
+ */
171
+ export function parseArtifactId(value) {
172
+ if (typeof value !== 'string' || !value.startsWith(ARTIFACT_PREFIX)) {
173
+ throw new Error(`Artifact ID must start with "${ARTIFACT_PREFIX}".`);
174
+ }
175
+ const segments = value.slice(ARTIFACT_PREFIX.length).split('/');
176
+ if (segments.length !== 3) {
177
+ throw new Error(
178
+ 'Artifact ID must contain provider, kind, and name segments.',
179
+ );
180
+ }
181
+ const provider = decodeSegment(segments[0], 'Artifact provider');
182
+ const kind = decodeSegment(segments[1], 'Artifact kind');
183
+ const name = decodeSegment(segments[2], 'Artifact name');
184
+ if (!CONTRIBUTION_KINDS.has(/** @type {ContributionKind} */ (kind))) {
185
+ throw new Error(`Unknown contribution kind "${kind}".`);
186
+ }
187
+ const identity = createArtifactIdentity(
188
+ provider,
189
+ /** @type {ContributionKind} */ (kind),
190
+ name,
191
+ );
192
+ if (identity.id !== value) {
193
+ throw new Error('Artifact ID is not in canonical serialized form.');
194
+ }
195
+ return identity;
196
+ }
197
+
198
+ /**
199
+ * Build one immutable provider instance.
200
+ * @param {{providerId: string, packageName: string, packageVersion: string, sourceDigest: string}} input
201
+ * @returns {ProviderInstance}
202
+ */
203
+ export function createProviderInstance(input) {
204
+ const providerId = normalizeProviderId(input.providerId);
205
+ const packageName = normalizeProviderId(input.packageName);
206
+ const packageVersion = normalizeName(input.packageVersion, 'Package version');
207
+ const sourceDigest = normalizeContentDigest(input.sourceDigest);
208
+ const id = /** @type {ProviderInstanceId} */ (
209
+ `${PROVIDER_INSTANCE_PREFIX}${encodeSegment(providerId)}/${encodeSegment(packageName)}/${encodeSegment(packageVersion)}/${encodeSegment(sourceDigest)}`
210
+ );
211
+ return Object.freeze({
212
+ id,
213
+ providerId,
214
+ packageName,
215
+ packageVersion,
216
+ sourceDigest,
217
+ });
218
+ }
219
+
220
+ /** Normalize a package-relative source path to forward slashes. */
221
+ /** @param {unknown} value @returns {string} */
222
+ function normalizeSourcePath(value) {
223
+ const normalized = normalizeName(value, 'Source path').replaceAll('\\', '/');
224
+ const segments = normalized.split('/');
225
+ if (
226
+ normalized.startsWith('/') ||
227
+ /^[A-Za-z]:\//u.test(normalized) ||
228
+ segments.some(
229
+ segment => segment === '' || segment === '.' || segment === '..',
230
+ )
231
+ ) {
232
+ throw new Error('Source path must be a normalized package-relative path.');
233
+ }
234
+ return normalized;
235
+ }
236
+
237
+ /** Infer an unstamped legacy document's kind from its required shape. */
238
+ /** @param {AuthoredDoc} authored @returns {AuthoredDocKind} */
239
+ function authoredKindOf(authored) {
240
+ if (authored.type != null) return authored.type;
241
+ if ('params' in authored && 'returns' in authored) return 'function';
242
+ if (
243
+ 'props' in authored ||
244
+ 'components' in authored ||
245
+ 'subComponentOf' in authored
246
+ ) {
247
+ return 'component';
248
+ }
249
+ if ('sections' in authored && 'title' in authored) return 'generic';
250
+ throw new Error('Cannot infer the kind of an unstamped authored document.');
251
+ }
252
+
253
+ /** Clone and recursively freeze plain authored data. */
254
+ /** @template T @param {T} value @returns {T} */
255
+ function frozenClone(value) {
256
+ const clone = structuredClone(value);
257
+ const seen = new WeakSet();
258
+ /** @param {unknown} current */
259
+ const freeze = current => {
260
+ if (
261
+ current == null ||
262
+ typeof current !== 'object' ||
263
+ Object.isFrozen(current) ||
264
+ seen.has(current)
265
+ ) {
266
+ return;
267
+ }
268
+ seen.add(current);
269
+ for (const nested of Object.values(current)) freeze(nested);
270
+ Object.freeze(current);
271
+ };
272
+ freeze(clone);
273
+ return clone;
274
+ }
275
+
276
+ /**
277
+ * Bind one validated authored document to immutable provider and source
278
+ * provenance. Runtime lifecycle state is intentionally absent.
279
+ * @param {{
280
+ * provider: ProviderInstance,
281
+ * kind: AuthoredDocKind,
282
+ * stableName: string,
283
+ * source: {group: string, path: string, digest: string},
284
+ * authored: AuthoredDoc,
285
+ * }} input
286
+ * @returns {AuthoredDocEntry}
287
+ */
288
+ export function createAuthoredDocEntry(input) {
289
+ const stableName = normalizeName(input.stableName, 'Stable document name');
290
+ const group = normalizeName(input.source.group, 'Source group');
291
+ const sourcePath = normalizeSourcePath(input.source.path);
292
+ const digest = normalizeContentDigest(input.source.digest);
293
+ const authoredKind = authoredKindOf(input.authored);
294
+ if (authoredKind !== input.kind) {
295
+ throw new Error(
296
+ `Document kind "${input.kind}" does not match authored type "${authoredKind}".`,
297
+ );
298
+ }
299
+
300
+ const provider = createProviderInstance({
301
+ providerId: input.provider.providerId,
302
+ packageName: input.provider.packageName,
303
+ packageVersion: input.provider.packageVersion,
304
+ sourceDigest: input.provider.sourceDigest,
305
+ });
306
+ if (provider.id !== input.provider.id) {
307
+ throw new Error(
308
+ 'Provider instance ID does not match its immutable fields.',
309
+ );
310
+ }
311
+
312
+ return Object.freeze({
313
+ id: createDocId(provider.providerId, input.kind, stableName),
314
+ provider,
315
+ kind: input.kind,
316
+ stableName,
317
+ source: Object.freeze({group, path: sourcePath, digest}),
318
+ authored: frozenClone(input.authored),
319
+ });
320
+ }
@@ -0,0 +1,254 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ import {describe, expect, it} from 'vitest';
4
+ import {
5
+ createArtifactId,
6
+ createArtifactIdentity,
7
+ createAuthoredDocEntry,
8
+ createDocId,
9
+ createProviderInstance,
10
+ normalizeContentDigest,
11
+ normalizeProviderId,
12
+ parseArtifactId,
13
+ } from './provider-identity.mjs';
14
+ import {CLI_PROVIDER_ID, CORE_PROVIDER_ID} from './providers.mjs';
15
+
16
+ const DIGEST_A = `sha256:${'a'.repeat(64)}`;
17
+ const DIGEST_B = `sha256:${'b'.repeat(64)}`;
18
+
19
+ describe('provider identity', () => {
20
+ it('uses the same canonical model for built-in providers', () => {
21
+ expect(CORE_PROVIDER_ID).toBe('@astryxdesign/core');
22
+ expect(CLI_PROVIDER_ID).toBe('@astryxdesign/cli');
23
+ });
24
+
25
+ it('normalizes npm package identity once', () => {
26
+ expect(normalizeProviderId(' @AstryxDesign/CLI ')).toBe(
27
+ '@astryxdesign/cli',
28
+ );
29
+ expect(() => normalizeProviderId('../cli')).toThrow(
30
+ /bare npm package name/u,
31
+ );
32
+ });
33
+
34
+ it('normalizes content digests', () => {
35
+ expect(normalizeContentDigest(DIGEST_A.toUpperCase())).toBe(DIGEST_A);
36
+ expect(() => normalizeContentDigest('sha256:nope')).toThrow(/sha256/u);
37
+ });
38
+
39
+ it('keeps provider, kind, and case-sensitive artifact name in the ID', () => {
40
+ const component = createArtifactId('@acme/ui', 'component', 'Button');
41
+ expect(component).not.toBe(
42
+ createArtifactId('@acme/ui', 'component', 'button'),
43
+ );
44
+ expect(component).not.toBe(
45
+ createArtifactId('@acme/ui', 'schema', 'Button'),
46
+ );
47
+ expect(component).not.toBe(
48
+ createArtifactId('@other/ui', 'component', 'Button'),
49
+ );
50
+ });
51
+
52
+ it('escapes segments canonically and round-trips without collisions', () => {
53
+ const identity = createArtifactIdentity(
54
+ '@acme/ui',
55
+ 'generic',
56
+ 'Deploy / 100%',
57
+ );
58
+ expect(identity.id).toContain('Deploy%20%2F%20100%25');
59
+ expect(parseArtifactId(identity.id)).toEqual(identity);
60
+ expect(() => parseArtifactId(identity.id.replace('%2F', '%2f'))).toThrow(
61
+ /canonical/u,
62
+ );
63
+ });
64
+
65
+ it('uses the same stable ID across immutable provider instances', () => {
66
+ const docId = createDocId('@acme/ui', 'schema', 'integration');
67
+ const first = createProviderInstance({
68
+ providerId: '@acme/ui',
69
+ packageName: '@acme/ui',
70
+ packageVersion: '1.0.0',
71
+ sourceDigest: DIGEST_A,
72
+ });
73
+ const second = createProviderInstance({
74
+ providerId: '@acme/ui',
75
+ packageName: '@acme/ui',
76
+ packageVersion: '1.0.1',
77
+ sourceDigest: DIGEST_B,
78
+ });
79
+ expect(first.id).not.toBe(second.id);
80
+ expect(createDocId(first.providerId, 'schema', 'integration')).toBe(docId);
81
+ expect(createDocId(second.providerId, 'schema', 'integration')).toBe(docId);
82
+ });
83
+
84
+ it('supports an explicit stable provider ID across a package rename', () => {
85
+ const instance = createProviderInstance({
86
+ providerId: '@acme/ui',
87
+ packageName: '@acme/design-system',
88
+ packageVersion: '2.0.0',
89
+ sourceDigest: DIGEST_A,
90
+ });
91
+ expect(instance.providerId).toBe('@acme/ui');
92
+ expect(instance.packageName).toBe('@acme/design-system');
93
+ });
94
+
95
+ it('binds a doc to stable identity and immutable source provenance', () => {
96
+ const provider = createProviderInstance({
97
+ providerId: '@acme/ui',
98
+ packageName: '@acme/ui',
99
+ packageVersion: '1.0.0',
100
+ sourceDigest: DIGEST_A,
101
+ });
102
+ const authored = {
103
+ type: 'schema',
104
+ name: 'integration',
105
+ displayName: 'Integration',
106
+ description: 'The integration manifest.',
107
+ fields: [],
108
+ };
109
+
110
+ const entry = createAuthoredDocEntry({
111
+ provider,
112
+ kind: 'schema',
113
+ stableName: 'integration',
114
+ source: {
115
+ group: 'cli-api',
116
+ path: 'authoring/integration/integration.doc.mjs',
117
+ digest: DIGEST_B,
118
+ },
119
+ authored,
120
+ });
121
+
122
+ expect(entry.id).toBe(createDocId('@acme/ui', 'schema', 'integration'));
123
+ expect(entry.provider).toEqual(provider);
124
+ expect(entry.stableName).toBe('integration');
125
+ expect(entry.source.digest).toBe(DIGEST_B);
126
+ expect(Object.isFrozen(entry)).toBe(true);
127
+ expect(Object.isFrozen(entry.provider)).toBe(true);
128
+ expect(Object.isFrozen(entry.source)).toBe(true);
129
+ expect(Object.isFrozen(entry.authored)).toBe(true);
130
+
131
+ authored.name = 'mutated';
132
+ expect(entry.authored.name).toBe('integration');
133
+ });
134
+
135
+ it('uses a discovery-owned stable name when authored display names collide', () => {
136
+ const provider = createProviderInstance({
137
+ providerId: '@astryxdesign/core',
138
+ packageName: '@astryxdesign/core',
139
+ packageVersion: '1.0.0',
140
+ sourceDigest: DIGEST_A,
141
+ });
142
+ const authored = {
143
+ type: 'block',
144
+ name: 'Banner — Statuses',
145
+ description: 'A template.',
146
+ };
147
+ const makeEntry = stableName =>
148
+ createAuthoredDocEntry({
149
+ provider,
150
+ kind: 'block',
151
+ stableName,
152
+ source: {
153
+ group: 'templates',
154
+ path: `templates/${stableName}.doc.mjs`,
155
+ digest: DIGEST_B,
156
+ },
157
+ authored,
158
+ });
159
+
160
+ expect(makeEntry('BannerShowcase').id).not.toBe(
161
+ makeEntry('BannerStatuses').id,
162
+ );
163
+ });
164
+
165
+ it('correlates an unstamped legacy reference doc with generic identity', () => {
166
+ const provider = createProviderInstance({
167
+ providerId: '@acme/ui',
168
+ packageName: '@acme/ui',
169
+ packageVersion: '1.0.0',
170
+ sourceDigest: DIGEST_A,
171
+ });
172
+ const entry = createAuthoredDocEntry({
173
+ provider,
174
+ kind: 'generic',
175
+ stableName: 'theming',
176
+ source: {group: 'guides', path: 'docs/theming.doc.mjs', digest: DIGEST_B},
177
+ authored: {
178
+ name: 'theming',
179
+ title: 'Theming',
180
+ description: 'How theming works.',
181
+ sections: [],
182
+ },
183
+ });
184
+ expect(entry.kind).toBe('generic');
185
+ });
186
+
187
+ it('rejects doc-entry identity that disagrees with stamped or legacy content', () => {
188
+ const provider = createProviderInstance({
189
+ providerId: '@acme/ui',
190
+ packageName: '@acme/ui',
191
+ packageVersion: '1.0.0',
192
+ sourceDigest: DIGEST_A,
193
+ });
194
+ const source = {
195
+ group: 'cli-api',
196
+ path: 'integration.doc.mjs',
197
+ digest: DIGEST_B,
198
+ };
199
+
200
+ expect(() =>
201
+ createAuthoredDocEntry({
202
+ provider,
203
+ kind: 'command',
204
+ stableName: 'integration',
205
+ source,
206
+ authored: {
207
+ type: 'schema',
208
+ name: 'integration',
209
+ displayName: 'Integration',
210
+ description: 'The integration manifest.',
211
+ fields: [],
212
+ },
213
+ }),
214
+ ).toThrow(/does not match authored type/u);
215
+
216
+ expect(() =>
217
+ createAuthoredDocEntry({
218
+ provider,
219
+ kind: 'enum',
220
+ stableName: 'Button',
221
+ source,
222
+ authored: {name: 'Button', props: []},
223
+ }),
224
+ ).toThrow(/does not match authored type "component"/u);
225
+ });
226
+
227
+ it('rejects source paths that escape the provider package', () => {
228
+ const provider = createProviderInstance({
229
+ providerId: '@acme/ui',
230
+ packageName: '@acme/ui',
231
+ packageVersion: '1.0.0',
232
+ sourceDigest: DIGEST_A,
233
+ });
234
+ expect(() =>
235
+ createAuthoredDocEntry({
236
+ provider,
237
+ kind: 'schema',
238
+ stableName: 'integration',
239
+ source: {
240
+ group: 'cli-api',
241
+ path: '../outside.doc.mjs',
242
+ digest: DIGEST_B,
243
+ },
244
+ authored: {
245
+ type: 'schema',
246
+ name: 'integration',
247
+ displayName: 'Integration',
248
+ description: 'The integration manifest.',
249
+ fields: [],
250
+ },
251
+ }),
252
+ ).toThrow(/package-relative path/u);
253
+ });
254
+ });
@@ -0,0 +1,7 @@
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
+ /** Core owns built-in components and templates. */
5
+ export const CORE_PROVIDER_ID: import("../../authoring/index.js").ProviderId;
6
+ /** The CLI owns built-in topic docs and CLI-authored contributions. */
7
+ export const CLI_PROVIDER_ID: import("../../authoring/index.js").ProviderId;
@@ -0,0 +1,16 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file Canonical identities for Astryx's built-in providers.
5
+ * @input Stable npm package names owned by Astryx.
6
+ * @output Branded ProviderId values shared by discovery and compilation.
7
+ * @position foundation/identity — built-in provider identity boundary.
8
+ */
9
+
10
+ import {normalizeProviderId} from './provider-identity.mjs';
11
+
12
+ /** Core owns built-in components and templates. */
13
+ export const CORE_PROVIDER_ID = normalizeProviderId('@astryxdesign/core');
14
+
15
+ /** The CLI owns built-in topic docs and CLI-authored contributions. */
16
+ export const CLI_PROVIDER_ID = normalizeProviderId('@astryxdesign/cli');
@@ -35,6 +35,28 @@ export function resolveInstalledPackageDir(name: string, fromDir: string): {
35
35
  packageDir: string;
36
36
  hostDir: string;
37
37
  } | null;
38
+ /**
39
+ * @typedef {object} AutolinkCandidate
40
+ * @property {string} spec
41
+ * @property {string} field
42
+ * @property {string} packageDir
43
+ * @property {string} hostDir
44
+ * @property {boolean} [repeat] the directory is already loaded or already a
45
+ * candidate under another dependency key; it is not loaded again
46
+ */
47
+ /**
48
+ * Every declared dependency that ships exactly one root manifest, in
49
+ * declaration order, including the ones whose directory is already loaded or
50
+ * already a candidate (`repeat`), so a caller can account for each of them.
51
+ *
52
+ * @param {string} projectDir directory holding the project's package.json
53
+ * @param {{exclude?: Iterable<string>}} [options] `exclude` — package
54
+ * directories already loaded (from config); matched through symlinks
55
+ * @returns {AutolinkCandidate[]}
56
+ */
57
+ export function scanAutolinkCandidates(projectDir: string, { exclude }?: {
58
+ exclude?: Iterable<string>;
59
+ }): AutolinkCandidate[];
38
60
  /**
39
61
  * Declared dependencies that ship an integration manifest and are not already
40
62
  * loaded, in declaration order.
@@ -50,7 +72,7 @@ export function resolveInstalledPackageDir(name: string, fromDir: string): {
50
72
  * directories already loaded (from config); matched through symlinks
51
73
  * @returns {Array<{spec: string, field: string, packageDir: string, hostDir: string}>}
52
74
  */
53
- export function findAutolinkCandidates(projectDir: string, { exclude }?: {
75
+ export function findAutolinkCandidates(projectDir: string, options?: {
54
76
  exclude?: Iterable<string>;
55
77
  }): Array<{
56
78
  spec: string;
@@ -58,6 +80,24 @@ export function findAutolinkCandidates(projectDir: string, { exclude }?: {
58
80
  packageDir: string;
59
81
  hostDir: string;
60
82
  }>;
83
+ /**
84
+ * Load every autolink candidate, each in isolation, as provider candidates for
85
+ * {@link resolveProviders}. Nothing is filtered here: a candidate whose load
86
+ * throws or whose manifest fails comes back with its error, and a repeated
87
+ * directory comes back unloaded, so the resolver records each one.
88
+ *
89
+ * @param {object} options
90
+ * @param {string} options.projectDir directory holding the project's package.json
91
+ * @param {import('./integrations.mjs').LoadedIntegration[]} [options.loaded]
92
+ * integrations already loaded from config
93
+ * @param {boolean} [options.fresh]
94
+ * @returns {Promise<import('./provider-resolution.mjs').ProviderCandidate[]>}
95
+ */
96
+ export function loadAutolinkCandidates({ projectDir, loaded, fresh, }: {
97
+ projectDir: string;
98
+ loaded?: import("./integrations.mjs").LoadedIntegration[] | undefined;
99
+ fresh?: boolean | undefined;
100
+ }): Promise<import("./provider-resolution.mjs").ProviderCandidate[]>;
61
101
  /**
62
102
  * Load every declared dependency that ships an integration manifest and is not
63
103
  * already loaded from config.
@@ -72,6 +112,12 @@ export function findAutolinkCandidates(projectDir: string, { exclude }?: {
72
112
  * consuming project can neither fix nor silence, and which
73
113
  * `astryx doctor integration validate <package>` reports on demand.
74
114
  *
115
+ * One package reached twice (an alias beside the package it aliases, at the
116
+ * same version) loads once. The same name at another version is kept, so the
117
+ * provider pass reports it instead of dropping it. Project.load does not call
118
+ * this; it hands {@link loadAutolinkCandidates} to the resolver, whose ledger
119
+ * records every candidate dropped here.
120
+ *
75
121
  * @param {object} options
76
122
  * @param {string} options.projectDir directory holding the project's package.json
77
123
  * @param {import('./integrations.mjs').LoadedIntegration[]} [options.loaded]
@@ -94,3 +140,14 @@ export function autolinkIntegrations({ projectDir, loaded, fresh, }: {
94
140
  * @type {readonly string[]}
95
141
  */
96
142
  export const DEPENDENCY_FIELDS: readonly string[];
143
+ export type AutolinkCandidate = {
144
+ spec: string;
145
+ field: string;
146
+ packageDir: string;
147
+ hostDir: string;
148
+ /**
149
+ * the directory is already loaded or already a
150
+ * candidate under another dependency key; it is not loaded again
151
+ */
152
+ repeat?: boolean | undefined;
153
+ };