@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,26 @@
1
+ // @generated by scripts/sync-api-types.mjs from the JSDoc in api/**/*.mjs.
2
+ // DO NOT EDIT — run `pnpm sync:api-types` to regenerate.
3
+
4
+ /**
5
+ * Find one item of a package: an installed package's own templates, docs,
6
+ * themes, and codemods first, then what a discover source lists for the
7
+ * package. Returns null when neither has it, so the caller can report the
8
+ * component lookup's own error.
9
+ *
10
+ * @param {import('../../_adapter.mjs').InstalledPackage[]} packages
11
+ * @param {string} packageName
12
+ * @param {string} itemName
13
+ * @param {{
14
+ * catalog?: import('../../_catalog-view.mjs').CatalogPackage,
15
+ * version?: string,
16
+ * add?: (name: string, version?: string) => string,
17
+ * installedAs?: string,
18
+ * }} [options]
19
+ * @returns {import('../../discover.type.mjs').DiscoverItemResponse | null}
20
+ */
21
+ export function item(packages: import("../../_adapter.mjs").InstalledPackage[], packageName: string, itemName: string, options?: {
22
+ catalog?: import("../../_catalog-view.mjs").CatalogPackage;
23
+ version?: string;
24
+ add?: (name: string, version?: string) => string;
25
+ installedAs?: string;
26
+ }): import("../../discover.type.mjs").DiscoverItemResponse | null;
@@ -0,0 +1,78 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file discover.item leaf — one item a package adds, when it is not an
5
+ * installed component (those keep resolving to their full doc through
6
+ * ../doc).
7
+ *
8
+ * @position api/discover/detail/item — pure projection over the packages and
9
+ * catalog entry resolved by ../../_adapter.
10
+ */
11
+
12
+ import {KIND_FIELDS} from '../../_adapter.mjs';
13
+ import {defaultVersion} from '../../_catalog-view.mjs';
14
+
15
+ /**
16
+ * Find one item of a package: an installed package's own templates, docs,
17
+ * themes, and codemods first, then what a discover source lists for the
18
+ * package. Returns null when neither has it, so the caller can report the
19
+ * component lookup's own error.
20
+ *
21
+ * @param {import('../../_adapter.mjs').InstalledPackage[]} packages
22
+ * @param {string} packageName
23
+ * @param {string} itemName
24
+ * @param {{
25
+ * catalog?: import('../../_catalog-view.mjs').CatalogPackage,
26
+ * version?: string,
27
+ * add?: (name: string, version?: string) => string,
28
+ * installedAs?: string,
29
+ * }} [options]
30
+ * @returns {import('../../discover.type.mjs').DiscoverItemResponse | null}
31
+ */
32
+ export function item(packages, packageName, itemName, options = {}) {
33
+ const {catalog, version, add, installedAs} = options;
34
+ const pkg = packages.find(p => p.name === packageName);
35
+ if (pkg && (!version || version === pkg.version)) {
36
+ for (const [kind, field] of KIND_FIELDS) {
37
+ if (kind === 'component') continue;
38
+ const names = /** @type {Record<string, unknown>} */ (pkg)[field];
39
+ if (Array.isArray(names) && names.includes(itemName)) {
40
+ return {
41
+ type: 'discover.item',
42
+ data: {
43
+ package: packageName,
44
+ ...(pkg.version ? {version: pkg.version} : {}),
45
+ kind,
46
+ name: itemName,
47
+ installed: true,
48
+ },
49
+ };
50
+ }
51
+ }
52
+ }
53
+
54
+ const lower = itemName.toLowerCase();
55
+ const found =
56
+ catalog?.contributions.find(c => c.name === itemName) ??
57
+ catalog?.contributions.find(c => c.name.toLowerCase() === lower);
58
+ if (!catalog || !found) return null;
59
+ const shown = version ?? defaultVersion(catalog);
60
+ return {
61
+ type: 'discover.item',
62
+ data: {
63
+ package: packageName,
64
+ ...(shown ? {version: shown} : {}),
65
+ kind: found.kind,
66
+ name: found.name,
67
+ ...(found.title ? {title: found.title} : {}),
68
+ ...(found.summary ? {summary: found.summary} : {}),
69
+ ...(found.keywords ? {keywords: found.keywords} : {}),
70
+ installed: pkg != null,
71
+ ...(pkg == null && installedAs ? {installedAs} : {}),
72
+ ...(pkg == null && !installedAs && add
73
+ ? {install: add(packageName, version)}
74
+ : {}),
75
+ source: catalog.source,
76
+ },
77
+ };
78
+ }
@@ -0,0 +1,73 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file Tests for the discover.item leaf, a pure projection over installed
5
+ * packages and a source's catalog entry.
6
+ */
7
+
8
+ import {describe, expect, it} from 'vitest';
9
+ import {item} from './item.mjs';
10
+
11
+ /** @type {any[]} */
12
+ const PACKAGES = [
13
+ {
14
+ name: '@acme/widgets',
15
+ category: '@acme/widgets',
16
+ version: '1.2.3',
17
+ components: ['Alpha'],
18
+ templates: ['pages/Home'],
19
+ docs: ['guide'],
20
+ },
21
+ ];
22
+
23
+ /** @type {any} */
24
+ const CATALOG = {
25
+ package: '@acme/charts',
26
+ integration: 'acme-charts',
27
+ aliases: [],
28
+ latest: '2.0.0',
29
+ source: 'Acme',
30
+ versions: [],
31
+ contributions: [{kind: 'template', name: 'pages/Report', title: 'Report page'}],
32
+ };
33
+
34
+ /** @param {string} name @param {string} [version] */
35
+ const add = (name, version) => `pnpm add ${version ? `${name}@${version}` : name}`;
36
+
37
+ describe('discover.item leaf', () => {
38
+ it("finds an installed package's own template, doc, theme, or codemod", () => {
39
+ expect(item(PACKAGES, '@acme/widgets', 'pages/Home')).toEqual({
40
+ type: 'discover.item',
41
+ data: {
42
+ package: '@acme/widgets',
43
+ version: '1.2.3',
44
+ kind: 'template',
45
+ name: 'pages/Home',
46
+ installed: true,
47
+ },
48
+ });
49
+ });
50
+
51
+ it('finds an item a source lists, with the command that adds its package', () => {
52
+ expect(
53
+ item(PACKAGES, '@acme/charts', 'pages/report', {catalog: CATALOG, add}),
54
+ ).toEqual({
55
+ type: 'discover.item',
56
+ data: {
57
+ package: '@acme/charts',
58
+ version: '2.0.0',
59
+ kind: 'template',
60
+ name: 'pages/Report',
61
+ title: 'Report page',
62
+ installed: false,
63
+ install: 'pnpm add @acme/charts',
64
+ source: 'Acme',
65
+ },
66
+ });
67
+ });
68
+
69
+ it('returns null when neither the project nor a source has it', () => {
70
+ expect(item(PACKAGES, '@acme/widgets', 'Nope')).toBeNull();
71
+ expect(item(PACKAGES, '@acme/charts', 'Nope', {catalog: CATALOG})).toBeNull();
72
+ });
73
+ });
@@ -3,19 +3,13 @@
3
3
 
4
4
  /**
5
5
  * @param {string} [query]
6
- * @param {object} [options]
7
- * @param {boolean} [options.components]
8
- * @param {string} [options.lang]
9
- * @param {boolean} [options.zh]
6
+ * @param {import('./discover.type.mjs').DiscoverOptions} [options]
10
7
  * @returns {Promise<
11
8
  * import('./discover.type.mjs').DiscoverListResponse |
12
9
  * import('./discover.type.mjs').DiscoverDetailResponse |
13
10
  * import('./discover.type.mjs').DiscoverDetailDocResponse |
11
+ * import('./discover.type.mjs').DiscoverItemResponse |
14
12
  * import('./discover.type.mjs').DiscoverSearchResponse
15
13
  * >}
16
14
  */
17
- export function discover(query?: string, options?: {
18
- components?: boolean | undefined;
19
- lang?: string | undefined;
20
- zh?: boolean | undefined;
21
- }): Promise<import("./discover.type.mjs").DiscoverListResponse | import("./discover.type.mjs").DiscoverDetailResponse | import("./discover.type.mjs").DiscoverDetailDocResponse | import("./discover.type.mjs").DiscoverSearchResponse>;
15
+ export function discover(query?: string, options?: import("./discover.type.mjs").DiscoverOptions): Promise<import("./discover.type.mjs").DiscoverListResponse | import("./discover.type.mjs").DiscoverDetailResponse | import("./discover.type.mjs").DiscoverDetailDocResponse | import("./discover.type.mjs").DiscoverItemResponse | import("./discover.type.mjs").DiscoverSearchResponse>;
@@ -11,23 +11,27 @@ export const doc = {
11
11
  type: 'function',
12
12
  kind: 'api',
13
13
  name: 'discover',
14
+ namespace: 'cli/api',
14
15
  displayName: 'discover()',
15
- summary: 'Browse and search components from configured external packages.',
16
+ summary:
17
+ 'Browse and search integrations: the ones a project has and, through discover sources, the ones it could add.',
16
18
  description:
17
- 'Explores components contributed by configured external packages and integrations ' +
18
- 'the ones that declare a components root. With no query it lists those packages; ' +
19
- 'an @scope/name query browses one package; @scope/name/Component (or a free-text ' +
20
- "term that resolves to a single component) returns that component's validated doc; " +
21
- 'a free-text term with several matches returns the candidate list.',
19
+ 'Lists the integrations a project loads and, when the project or an integration provides a discover source, ' +
20
+ 'the packages it could add, with what each one adds per kind. An @scope/name query shows one package with every ' +
21
+ 'version its source knows; @scope/name@version shows one version; @scope/name/Component returns an installed ' +
22
+ "component's validated doc, and any other item path returns that item. A free-text term searches every item and " +
23
+ 'package. Discover only reads: it prints the command that adds a package and never runs it.',
22
24
  importPath: '@astryxdesign/cli/api',
23
25
  signature:
24
- 'discover(query?: string, options?: DiscoverOptions): Promise<DiscoverListResponse | DiscoverDetailResponse | DiscoverDetailDocResponse | DiscoverSearchResponse>',
26
+ 'discover(query?: string, options?: DiscoverOptions): Promise<DiscoverListResponse | DiscoverDetailResponse | DiscoverDetailDocResponse | DiscoverItemResponse | DiscoverSearchResponse>',
25
27
  keywords: [
26
28
  'discover',
27
29
  'packages',
28
30
  'integrations',
29
31
  'external',
30
32
  'components',
33
+ 'catalog',
34
+ 'versions',
31
35
  'search',
32
36
  ],
33
37
  params: [
@@ -35,13 +39,39 @@ export const doc = {
35
39
  name: 'query',
36
40
  type: 'string',
37
41
  description:
38
- 'An @scope/name package, an @scope/name/Component path, or a free-text term. Omit to list all configured packages.',
42
+ 'A package (@scope/name, optionally @version), an item path (@scope/name/<item>), or a free-text term. Omit to list packages.',
39
43
  },
40
44
  {
41
45
  name: 'options.components',
42
46
  type: 'boolean',
43
47
  description:
44
- 'List components only. A CLI display flag consumed by the renderer; the programmatic response shape is unchanged.',
48
+ 'In the CLI package list, print every component, and every other item, of each package instead of the first 10. A display flag for the CLI renderer; the programmatic response is unchanged.',
49
+ },
50
+ {
51
+ name: 'options.type',
52
+ type: "'component' | 'template' | 'doc' | 'theme' | 'codemod' | 'agent-doc'",
53
+ description:
54
+ 'Only one kind: in the list, packages that add it; in a search, items of that kind.',
55
+ },
56
+ {
57
+ name: 'options.installed',
58
+ type: 'boolean',
59
+ description:
60
+ 'Only what the project has. Cannot be set with options.available.',
61
+ default: 'false',
62
+ },
63
+ {
64
+ name: 'options.available',
65
+ type: 'boolean',
66
+ description:
67
+ 'Only what the project could add. Cannot be set with options.installed.',
68
+ default: 'false',
69
+ },
70
+ {
71
+ name: 'options.limit',
72
+ type: 'number',
73
+ description: 'Max number of search results, a positive integer.',
74
+ default: '20',
45
75
  },
46
76
  {
47
77
  name: 'options.lang',
@@ -59,21 +89,27 @@ export const doc = {
59
89
  {
60
90
  type: 'discover.list',
61
91
  description:
62
- 'The configured external packages (name, category, components, version, description). When empty it carries meta.configured to distinguish "nothing configured" from "configured but nothing discovered".',
92
+ 'The installed integrations (name, category, components, version, and a list per other kind they add). With a discover source, meta.available lists what the project could add and meta.sources reports each source. When the list is empty it carries meta.configured.',
63
93
  },
64
94
  {
65
95
  type: 'discover.detail',
66
- description: 'A single package entry, for an @scope/name query.',
96
+ description:
97
+ 'One package: what the shown version adds, whether the project has it, its versions and latest release when a source knows them, and the command that adds it when the project does not have it.',
67
98
  },
68
99
  {
69
100
  type: 'discover.detail.doc',
70
101
  description:
71
- 'The validated ComponentDoc for one external component: an @scope/name/Component query, or a free-text term that resolves to exactly one component.',
102
+ 'The validated ComponentDoc for one installed component, for an @scope/name/Component query.',
103
+ },
104
+ {
105
+ type: 'discover.item',
106
+ description:
107
+ 'One item that is not an installed component: its kind, name, the package and version that add it, and whether the project has the package.',
72
108
  },
73
109
  {
74
110
  type: 'discover.search',
75
111
  description:
76
- 'The query echoed back plus the matching {package, component} pairs, when a free-text term matches several components.',
112
+ 'The query echoed back plus every matching item and package, each with its kind and whether the project has it, even when one name matches exactly or only one item matches; total is set when the limit cut the list.',
77
113
  },
78
114
  ],
79
115
  throws: [
@@ -81,17 +117,21 @@ export const doc = {
81
117
  code: 'ERR_INVALID_ARGUMENT',
82
118
  when: 'the query is a non-string value, or a free-text search is run with an empty query',
83
119
  },
120
+ {
121
+ code: 'ERR_INVALID_OPTION',
122
+ when: 'options.type is not a known kind, options.limit is not a positive integer, or options.installed and options.available are both set',
123
+ },
84
124
  {
85
125
  code: 'ERR_UNKNOWN_PACKAGE',
86
- when: 'the @scope/name package is not among the configured packages',
126
+ when: 'neither the project nor any discover source has the package',
87
127
  },
88
128
  {
89
129
  code: 'ERR_UNKNOWN_COMPONENT',
90
- when: 'the component is not found in the named @scope/name package',
130
+ when: 'the item is not in the named package',
91
131
  },
92
132
  {
93
133
  code: 'ERR_NOT_FOUND',
94
- when: 'a free-text term matches no component in any package',
134
+ when: 'a free-text term matches nothing, or the requested version is not published',
95
135
  },
96
136
  {
97
137
  code: 'ERR_INVALID_DOC',
@@ -99,10 +139,14 @@ export const doc = {
99
139
  },
100
140
  ],
101
141
  examples: [
102
- {label: 'List packages', code: 'const {data} = await discover();'},
142
+ {label: 'List packages', code: 'const {data, meta} = await discover();'},
103
143
  {label: 'Browse a package', code: "await discover('@acme/ui');"},
144
+ {label: 'One version', code: "await discover('@acme/ui@2.1.0');"},
104
145
  {label: 'Show a component doc', code: "await discover('@acme/ui/Button');"},
105
- {label: 'Free-text search', code: "await discover('button');"},
146
+ {
147
+ label: 'Search templates to add',
148
+ code: "await discover('dashboard', {type: 'template', available: true});",
149
+ },
106
150
  ],
107
151
  command: 'discover',
108
152
  related: ['component', 'search', 'template'],
@@ -3,55 +3,193 @@
3
3
  /**
4
4
  * @file Programmatic API for the discover command — dispatcher + barrel.
5
5
  *
6
- * `discover()` keeps the exact same signature and response union it always had,
7
- * so `api/index.mjs` and the CLI consumer are untouched. Its only job now is to
8
- * discover the external packages (via ./_adapter) and route to the leaf that
9
- * owns each response shape:
6
+ * `discover()` browses the integrations a project has and, through discover
7
+ * sources, the ones it could add. It only reads: the package manager installs.
8
+ * Its job is to resolve the project and its sources (via ./_adapter) and route
9
+ * to the leaf that owns each response shape:
10
10
  *
11
- * discover.list -> ./list/list.mjs
12
- * discover.detail -> ./detail/detail.mjs
13
- * discover.detail.doc -> ./detail/doc/doc.mjs
14
- * discover.search -> ./search/search.mjs
11
+ * discover -> ./list/list.mjs discover.list
12
+ * discover <package>[@<version>] -> ./detail/detail.mjs discover.detail
13
+ * discover <package>/<Component> -> ./detail/doc/doc.mjs discover.detail.doc
14
+ * discover <package>/<item> -> ./detail/item/item.mjs discover.item
15
+ * discover <words> -> ./search/search.mjs discover.search (always a list)
15
16
  *
16
- * @position api/discover — thin router over ./_adapter + the discover leaves.
17
+ * Source results are additive: they ride in `meta.available`/`meta.sources`,
18
+ * in extra fields, or as extra search matches, so every existing field keeps
19
+ * its meaning.
20
+ *
21
+ * @position api/discover — thin router over ./_adapter, ./_catalog-view, and
22
+ * the discover leaves.
17
23
  */
18
24
 
19
- import {discoverPackages} from './_adapter.mjs';
25
+ import {
26
+ addCommand,
27
+ callSources,
28
+ declaredDependencies,
29
+ describeInstalled,
30
+ discoverPackages,
31
+ findComponent,
32
+ hasSources,
33
+ } from './_adapter.mjs';
34
+ import {
35
+ availableEntries,
36
+ catalogState,
37
+ searchItems,
38
+ withLatest,
39
+ } from './_catalog-view.mjs';
20
40
  import {list} from './list/list.mjs';
21
41
  import {detail} from './detail/detail.mjs';
22
- import {doc} from './detail/doc/doc.mjs';
42
+ import {doc, docFromResult} from './detail/doc/doc.mjs';
43
+ import {item} from './detail/item/item.mjs';
23
44
  import {search} from './search/search.mjs';
24
45
  import {AstryxError} from '../error.mjs';
25
46
  import {ERROR_CODES} from '../../foundation/response/error-codes.mjs';
47
+ import {levenshteinDistance} from '../../foundation/text/string-utils.mjs';
48
+ import {DISCOVER_KINDS} from '../../authoring/discover/parse.mjs';
49
+
50
+ const DEFAULT_LIMIT = 20;
51
+
52
+ /** @type {import('./_adapter.mjs').CatalogResult} */
53
+ const NO_CATALOG = {sources: [], packages: []};
54
+
55
+ /**
56
+ * Split a package-shaped query: `name`, `name@version`, or `name/item`, with an
57
+ * optional `@scope/` prefix on the name.
58
+ * @param {string} query
59
+ * @returns {{scoped: boolean, name: string, version?: string, item?: string}}
60
+ */
61
+ function splitTarget(query) {
62
+ const scoped = query.startsWith('@');
63
+ const firstSlash = query.indexOf('/');
64
+ let head = query;
65
+ /** @type {string | undefined} */
66
+ let rest;
67
+ const split = scoped
68
+ ? firstSlash < 0
69
+ ? -1
70
+ : query.indexOf('/', firstSlash + 1)
71
+ : firstSlash;
72
+ if (split > 0) {
73
+ head = query.slice(0, split);
74
+ rest = query.slice(split + 1) || undefined;
75
+ }
76
+ const at = head.indexOf('@', 1);
77
+ return {
78
+ scoped,
79
+ name: at > 0 ? head.slice(0, at) : head,
80
+ ...(at > 0 && head.slice(at + 1) ? {version: head.slice(at + 1)} : {}),
81
+ ...(rest ? {item: rest} : {}),
82
+ };
83
+ }
84
+
85
+ /**
86
+ * @param {{type?: unknown, installed?: boolean, available?: boolean, limit?: unknown}} options
87
+ */
88
+ function checkOptions({type, installed, available, limit}) {
89
+ if (
90
+ type != null &&
91
+ !(/** @type {readonly unknown[]} */ (DISCOVER_KINDS).includes(type))
92
+ ) {
93
+ throw new AstryxError(
94
+ `Unknown --type "${String(type)}"`,
95
+ DISCOVER_KINDS.map(kind => ({name: kind, reason: 'item kind'})),
96
+ ERROR_CODES.ERR_INVALID_OPTION,
97
+ );
98
+ }
99
+ if (installed && available) {
100
+ throw new AstryxError(
101
+ '--installed and --available cannot be used together',
102
+ undefined,
103
+ ERROR_CODES.ERR_INVALID_OPTION,
104
+ );
105
+ }
106
+ if (
107
+ limit != null &&
108
+ !(typeof limit === 'number' && Number.isInteger(limit) && limit > 0)
109
+ ) {
110
+ throw new AstryxError(
111
+ `--limit must be a positive integer, not "${String(limit)}"`,
112
+ undefined,
113
+ ERROR_CODES.ERR_INVALID_OPTION,
114
+ );
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Items a source lists for a package that look like the one asked for: names
120
+ * that contain it, else the closest few by spelling.
121
+ * @param {import('../../authoring/discover/type.js').DiscoverPackage} entry
122
+ * @param {string} wanted
123
+ * @returns {Array<{name: string, reason: string}>}
124
+ */
125
+ function similarItems(entry, wanted) {
126
+ const lower = wanted.toLowerCase();
127
+ const names = [...new Set(entry.contributions.map(c => c.name))];
128
+ const hits = names.filter(name => name.toLowerCase().includes(lower));
129
+ const picked =
130
+ hits.length > 0
131
+ ? hits.slice(0, 5)
132
+ : names
133
+ .map(name => ({
134
+ name,
135
+ distance: levenshteinDistance(lower, name.toLowerCase()),
136
+ }))
137
+ .filter(m => m.distance <= 3)
138
+ .sort((a, b) => a.distance - b.distance)
139
+ .slice(0, 5)
140
+ .map(m => m.name);
141
+ return picked.map(name => ({
142
+ name: `${entry.package}/${name}`,
143
+ reason: 'similar name',
144
+ }));
145
+ }
26
146
 
27
147
  /**
28
148
  * @param {string} [query]
29
- * @param {object} [options]
30
- * @param {boolean} [options.components]
31
- * @param {string} [options.lang]
32
- * @param {boolean} [options.zh]
149
+ * @param {import('./discover.type.mjs').DiscoverOptions} [options]
33
150
  * @returns {Promise<
34
151
  * import('./discover.type.mjs').DiscoverListResponse |
35
152
  * import('./discover.type.mjs').DiscoverDetailResponse |
36
153
  * import('./discover.type.mjs').DiscoverDetailDocResponse |
154
+ * import('./discover.type.mjs').DiscoverItemResponse |
37
155
  * import('./discover.type.mjs').DiscoverSearchResponse
38
156
  * >}
39
157
  */
40
158
  export async function discover(query, options = {}) {
41
- const {lang = null, zh = false} = options;
42
- const {packages, configured} = await discoverPackages();
159
+ const {lang = null, zh = false, type, limit} = options;
160
+ checkOptions(options);
161
+ const only = options.installed
162
+ ? /** @type {const} */ ('installed')
163
+ : options.available
164
+ ? /** @type {const} */ ('available')
165
+ : undefined;
166
+
167
+ const {packages: scanned, configured, project} = await discoverPackages();
168
+ const withSources = hasSources(project);
169
+ const packages = await describeInstalled(project, scanned);
170
+ const declared = declaredDependencies(project);
171
+ const add = addCommand(project);
43
172
 
44
- // No discoverable packages — either nothing configured, or configured but
45
- // empty. The list leaf owns the empty envelope + `configured` flag. This
46
- // short-circuits before query parsing, exactly as the flat command did.
47
- if (packages.length === 0) return list(packages, {configured});
173
+ /** @param {{package?: string, version?: string}} [request] */
174
+ const catalogFor = async request =>
175
+ withSources ? await callSources(project, request) : NO_CATALOG;
48
176
 
49
- // No query: the full package list.
50
- if (!query) return list(packages, {configured});
177
+ // No query, or nothing to look through: the list.
178
+ if (!query || (packages.length === 0 && !withSources)) {
179
+ if (!withSources) return list(packages, {configured, type, only});
180
+ const catalog = await catalogFor();
181
+ return list(withLatest(packages, catalog), {
182
+ configured,
183
+ type,
184
+ only,
185
+ available: availableEntries(catalog, packages, declared),
186
+ sources: catalog.sources,
187
+ });
188
+ }
51
189
 
52
- // A non-string (truthy) query would crash `.startsWith`/`.indexOf` below
53
- // with a raw TypeError (no ERR_* code → downgrades to ERR_UNKNOWN). The CLI
54
- // only ever passes a string, but the public API must fail with a code.
190
+ // A non-string (truthy) query would crash the parsing below with a raw
191
+ // TypeError (no ERR_* code → downgrades to ERR_UNKNOWN). The CLI only ever
192
+ // passes a string, but the public API must fail with a code.
55
193
  if (typeof query !== 'string') {
56
194
  throw new AstryxError(
57
195
  `Invalid query "${String(query)}"`,
@@ -60,17 +198,63 @@ export async function discover(query, options = {}) {
60
198
  );
61
199
  }
62
200
 
63
- // Scoped package query: @scope/name or @scope/name/Component
64
- if (query.startsWith('@')) {
65
- const slashIdx = query.indexOf('/', query.indexOf('/') + 1);
66
- if (slashIdx > 0) {
67
- const pkgName = query.slice(0, slashIdx);
68
- const compName = query.slice(slashIdx + 1);
69
- return await doc(packages, pkgName, compName, {lang, zh});
201
+ const target = splitTarget(query);
202
+ const installedNames = new Set(packages.map(p => p.name));
203
+
204
+ /**
205
+ * One package, one version, or one item, once `target.name` is known to be
206
+ * a package the project or a source has.
207
+ * @param {import('./_adapter.mjs').CatalogResult} catalog
208
+ */
209
+ const packageView = async catalog => {
210
+ const entry = catalog.packages.find(p => p.package === target.name);
211
+ const installedAs = entry
212
+ ? catalogState(entry, installedNames, declared).installedAs
213
+ : undefined;
214
+ const context = {catalog: entry, version: target.version, add, installedAs};
215
+ if (!target.item) return detail(packages, target.name, context);
216
+ const found = item(packages, target.name, target.item, context);
217
+ if (found) return found;
218
+ // Only an installed package has docs to fall back to. For one that is
219
+ // only in a source, the item is what is unknown, not the package.
220
+ if (entry && !packages.some(p => p.name === target.name)) {
221
+ throw new AstryxError(
222
+ `"${target.item}" not found in ${target.name}`,
223
+ similarItems(entry, target.item),
224
+ ERROR_CODES.ERR_UNKNOWN_COMPONENT,
225
+ );
70
226
  }
71
- return detail(packages, query);
227
+ return await doc(packages, target.name, target.item, {lang, zh});
228
+ };
229
+
230
+ // An installed component keeps resolving to its full doc, before any source
231
+ // is asked anything.
232
+ const installedPkg = packages.find(p => p.name === target.name);
233
+ if (installedPkg && target.item && !target.version) {
234
+ const resolved = findComponent([installedPkg], target.item);
235
+ if (resolved) return await docFromResult(resolved, {lang, zh});
236
+ }
237
+
238
+ if (target.scoped) {
239
+ return await packageView(
240
+ await catalogFor({package: target.name, version: target.version}),
241
+ );
242
+ }
243
+
244
+ const listing = await catalogFor();
245
+ const isPackage =
246
+ installedPkg != null ||
247
+ listing.packages.some(p => p.package === target.name);
248
+ if (isPackage && (target.version || target.item || target.name === query)) {
249
+ return await packageView(
250
+ await catalogFor({package: target.name, version: target.version}),
251
+ );
72
252
  }
73
253
 
74
- // Free-text search across all packages.
75
- return await search(packages, query, {lang, zh});
254
+ return await search(packages, query, {
255
+ items: searchItems(packages, listing, declared),
256
+ type,
257
+ only,
258
+ limit: limit ?? DEFAULT_LIMIT,
259
+ });
76
260
  }