@astryxdesign/cli 0.6.3-canary.db4e378 → 0.6.3-canary.db52d98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/README.md +38 -15
  2. package/api/blog/blog.doc.mjs +1 -0
  3. package/api/build/_adapter.d.mts +50 -0
  4. package/api/build/_adapter.mjs +60 -0
  5. package/api/build/build.doc.mjs +14 -7
  6. package/api/build/build.test.mjs +184 -6
  7. package/api/build/build.type.d.mts +57 -2
  8. package/api/build/build.type.mjs +30 -7
  9. package/api/build/help/help.d.mts +4 -0
  10. package/api/build/help/help.mjs +24 -11
  11. package/api/build/kit/kit.d.mts +4 -1
  12. package/api/build/kit/kit.mjs +165 -49
  13. package/api/build/kit/rank.d.mts +44 -0
  14. package/api/build/kit/rank.mjs +432 -0
  15. package/api/build/kit/rank.test.mjs +196 -0
  16. package/api/component/_adapter.d.mts +6 -12
  17. package/api/component/_adapter.mjs +20 -10
  18. package/api/component/component.doc.mjs +1 -0
  19. package/api/component/component.mjs +60 -12
  20. package/api/component/list/list.mjs +3 -2
  21. package/api/discover/discover.doc.mjs +1 -0
  22. package/api/docs/_adapter.d.mts +252 -34
  23. package/api/docs/_adapter.mjs +923 -132
  24. package/api/docs/detail/detail.mjs +11 -3
  25. package/api/docs/detail/section/section.mjs +24 -13
  26. package/api/docs/detail/section/section.test.mjs +15 -6
  27. package/api/docs/docs.d.mts +5 -3
  28. package/api/docs/docs.doc.mjs +39 -17
  29. package/api/docs/docs.mjs +44 -8
  30. package/api/docs/docs.test.mjs +158 -4
  31. package/api/docs/docs.type.d.mts +181 -2
  32. package/api/docs/docs.type.mjs +117 -3
  33. package/api/docs/index/index.mjs +11 -3
  34. package/api/docs/index/index.test.mjs +1 -1
  35. package/api/docs/integration-tree.test.mjs +555 -0
  36. package/api/docs/integrationDocs.test.mjs +14 -14
  37. package/api/docs/list/list.mjs +28 -12
  38. package/api/docs/node/node.d.mts +43 -0
  39. package/api/docs/node/node.mjs +192 -0
  40. package/api/docs/reference-blocks.test.mjs +406 -0
  41. package/api/doctor/doctor.d.mts +54 -4
  42. package/api/doctor/doctor.doc.mjs +1 -0
  43. package/api/doctor/doctor.mjs +331 -16
  44. package/api/doctor/doctor.test.mjs +420 -7
  45. package/api/gap-report/gap-report.doc.mjs +1 -0
  46. package/api/hook/_adapter.mjs +19 -5
  47. package/api/hook/hook.doc.mjs +1 -0
  48. package/api/hook/list/list.d.mts +1 -1
  49. package/api/hook/list/list.mjs +69 -17
  50. package/api/index.d.mts +1 -1
  51. package/api/index.mjs +1 -0
  52. package/api/init/init.doc.mjs +2 -1
  53. package/api/integration/add-contribution.d.mts +2 -1
  54. package/api/integration/add-contribution.mjs +114 -12
  55. package/api/integration/add-contribution.test.mjs +174 -3
  56. package/api/integration/add-theme.mjs +34 -64
  57. package/api/integration/add-theme.test.mjs +105 -21
  58. package/api/integration/authoring-checks.mjs +138 -28
  59. package/api/integration/authoring-checks.test.mjs +179 -7
  60. package/api/integration/authoring-checks.type.mjs +6 -1
  61. package/api/integration/integration-authoring.type.d.mts +2 -0
  62. package/api/integration/integration-authoring.type.mjs +2 -0
  63. package/api/integration/integration-block-exports.test.mjs +10 -6
  64. package/api/integration/integrationAdd.doc.mjs +7 -0
  65. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  66. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  67. package/api/integration/integrationAddComponent.doc.mjs +1 -0
  68. package/api/integration/integrationAddDoc.doc.mjs +8 -1
  69. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  70. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  71. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  72. package/api/integration/integrationDocConflicts.doc.mjs +2 -1
  73. package/api/integration/integrationPackCheck.doc.mjs +2 -1
  74. package/api/integration/integrationTemplateConflicts.doc.d.mts +3 -0
  75. package/api/integration/integrationTemplateConflicts.doc.mjs +4 -0
  76. package/api/integration/pack-check.mjs +34 -0
  77. package/api/integration/pack-check.test.mjs +138 -47
  78. package/api/integration/pack-check.type.d.mts +26 -2
  79. package/api/integration/pack-check.type.mjs +14 -1
  80. package/api/integration/summarizeIssues.doc.mjs +1 -0
  81. package/api/integration/template-conflict-compatibility.test.mjs +73 -0
  82. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  83. package/api/integration/validate-integration.mjs +50 -102
  84. package/api/integration/validate-integration.test.mjs +88 -26
  85. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  86. package/api/integration/validateIntegration.doc.mjs +2 -1
  87. package/api/json/assertResponse.doc.mjs +1 -0
  88. package/api/json/index.ts +2 -0
  89. package/api/json/isError.doc.mjs +1 -0
  90. package/api/json/parseResponse.doc.mjs +1 -0
  91. package/api/layout/_adapter.mjs +20 -5
  92. package/api/layout/layoutCheck.doc.mjs +1 -0
  93. package/api/layout/layoutExpand.doc.mjs +1 -0
  94. package/api/layout/layoutGrammar.doc.mjs +1 -0
  95. package/api/search/search.d.mts +59 -1
  96. package/api/search/search.doc.mjs +5 -3
  97. package/api/search/search.mjs +458 -77
  98. package/api/search/search.test.mjs +91 -2
  99. package/api/search/search.type.d.mts +13 -1
  100. package/api/search/search.type.mjs +4 -1
  101. package/api/swizzle/swizzle.doc.mjs +1 -0
  102. package/api/template/list/list.mjs +1 -0
  103. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  104. package/api/template/template-integration.test.mjs +1072 -3
  105. package/api/template/template-suffix.test.mjs +41 -21
  106. package/api/template/template.doc.mjs +28 -7
  107. package/api/template/template.mjs +45 -8
  108. package/api/template/template.type.d.mts +6 -8
  109. package/api/template/template.type.mjs +3 -2
  110. package/api/theme/_adapter.d.mts +2 -3
  111. package/api/theme/_adapter.mjs +4 -5
  112. package/api/theme/add/add.binary.test.mjs +10 -17
  113. package/api/theme/add/add.test.mjs +14 -1
  114. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  115. package/api/theme/integration-themes.test.mjs +39 -28
  116. package/api/theme/list/list.test.mjs +19 -20
  117. package/api/theme/listThemes.doc.mjs +6 -5
  118. package/api/theme/template/template.test.mjs +5 -0
  119. package/api/theme/themeAdd.doc.mjs +4 -3
  120. package/api/theme/themeBuild.doc.mjs +1 -0
  121. package/api/theme/themeList.doc.mjs +6 -3
  122. package/api/theme/themeListAvailable.doc.mjs +5 -3
  123. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  124. package/api/theme/themeTargets.doc.mjs +1 -0
  125. package/api/theme/themeTemplate.doc.mjs +2 -1
  126. package/api/upgrade/_adapter.d.mts +32 -5
  127. package/api/upgrade/_adapter.mjs +97 -69
  128. package/api/upgrade/provider-agreement.test.mjs +152 -0
  129. package/api/upgrade/run/run.mjs +356 -59
  130. package/api/upgrade/upgrade.doc.mjs +6 -1
  131. package/api/upgrade/upgrade.type.d.mts +34 -0
  132. package/api/upgrade/upgrade.type.mjs +15 -0
  133. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  134. package/assets/codemods/integration-discovery.mjs +8 -2
  135. package/assets/codemods/integration-discovery.test.mjs +15 -0
  136. package/assets/codemods/integration-runner.mjs +56 -4
  137. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  138. package/assets/codemods/run-codemod.mjs +177 -34
  139. package/assets/codemods/runner.mjs +350 -102
  140. package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  141. package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  142. package/assets/codemods/transforms/next/index.mjs +19 -1
  143. package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
  144. package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
  145. package/assets/docs/getting-started.doc.mjs +2 -2
  146. package/assets/docs/layout.doc.dense.mjs +2 -2
  147. package/assets/docs/layout.doc.mjs +1 -1
  148. package/assets/docs/principles.doc.mjs +6 -6
  149. package/assets/docs/styling-libraries.doc.mjs +3 -3
  150. package/assets/docs/styling.doc.mjs +4 -4
  151. package/assets/docs/theme.doc.mjs +5 -5
  152. package/assets/docs/tokens.doc.mjs +1 -1
  153. package/assets/docs/tree/api.doc.mjs +30 -0
  154. package/assets/docs/tree/cli.doc.mjs +23 -0
  155. package/assets/docs/tree/commands.doc.mjs +25 -0
  156. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +66 -38
  157. package/assets/docs/tree/integrations.test.mjs +62 -0
  158. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  159. package/assets/docs/working-with-ai.doc.mjs +3 -3
  160. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  161. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  162. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  163. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  164. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  165. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  166. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  167. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  168. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  169. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  170. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  171. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  172. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  173. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  174. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  175. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  176. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  177. package/authoring/codemod/codemod.doc.mjs +1 -1
  178. package/authoring/codemod/type.ts +12 -0
  179. package/authoring/config/config.doc.mjs +1 -1
  180. package/authoring/debug/debug.doc.d.mts +11 -0
  181. package/authoring/debug/debug.doc.mjs +182 -0
  182. package/authoring/debug/parse.d.mts +3 -3
  183. package/authoring/doctypes/_schema.d.mts +119 -117
  184. package/authoring/doctypes/_schema.mjs +54 -3
  185. package/authoring/doctypes/base/graph-fields.doc.mjs +8 -6
  186. package/authoring/doctypes/base/type.ts +6 -5
  187. package/authoring/doctypes/command/command.doc.mjs +1 -1
  188. package/authoring/doctypes/command/type.ts +2 -2
  189. package/authoring/doctypes/component/type.ts +2 -2
  190. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  191. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  192. package/authoring/doctypes/enum/type.ts +1 -1
  193. package/authoring/doctypes/function/function.doc.mjs +3 -2
  194. package/authoring/doctypes/function/type.ts +3 -2
  195. package/authoring/doctypes/hook/type.ts +2 -2
  196. package/authoring/doctypes/load-contract.test.mjs +28 -2
  197. package/authoring/doctypes/namespace/namespace.doc.mjs +6 -10
  198. package/authoring/doctypes/namespace/parse.test.mjs +23 -25
  199. package/authoring/doctypes/namespace/type.ts +5 -2
  200. package/authoring/doctypes/parse.d.mts +4 -2
  201. package/authoring/doctypes/parse.mjs +10 -5
  202. package/authoring/doctypes/reference/reference.doc.mjs +35 -6
  203. package/authoring/doctypes/reference/type.ts +30 -13
  204. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  205. package/authoring/doctypes/schema/type.ts +1 -2
  206. package/authoring/doctypes/template/parse.d.mts +2 -0
  207. package/authoring/doctypes/template/parse.mjs +4 -0
  208. package/authoring/doctypes/template/parse.test.mjs +18 -0
  209. package/authoring/doctypes/template/template.doc.mjs +9 -3
  210. package/authoring/doctypes/template/type.ts +8 -0
  211. package/authoring/doctypes/theme/parse.d.mts +35 -0
  212. package/authoring/doctypes/theme/parse.mjs +76 -0
  213. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  214. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  215. package/authoring/doctypes/theme/type.ts +42 -0
  216. package/authoring/doctypes/types.ts +2 -1
  217. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  218. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  219. package/authoring/identity/identity.doc.mjs +2 -2
  220. package/authoring/index.d.mts +1 -0
  221. package/authoring/index.d.ts +7 -4
  222. package/authoring/index.mjs +2 -1
  223. package/authoring/integration/integration.doc.mjs +2 -2
  224. package/authoring/integration/type.ts +4 -10
  225. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  226. package/clients/cli/commands/blog.doc.mjs +1 -1
  227. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  228. package/clients/cli/commands/build-theme.mjs +11 -45
  229. package/clients/cli/commands/build.doc.mjs +12 -7
  230. package/clients/cli/commands/build.mjs +105 -67
  231. package/clients/cli/commands/build.text-fields.test.mjs +41 -0
  232. package/clients/cli/commands/component/index.mjs +1 -1
  233. package/clients/cli/commands/component-ownership.test.mjs +3 -3
  234. package/clients/cli/commands/component.doc.mjs +1 -1
  235. package/clients/cli/commands/discover.broken-integration.test.mjs +7 -8
  236. package/clients/cli/commands/discover.doc.mjs +1 -1
  237. package/clients/cli/commands/discover.mjs +1 -1
  238. package/clients/cli/commands/docs.doc.mjs +21 -9
  239. package/clients/cli/commands/docs.mjs +184 -70
  240. package/clients/cli/commands/docs.test.mjs +120 -16
  241. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  242. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  243. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  244. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  245. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  246. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  247. package/clients/cli/commands/doctor.doc.mjs +1 -1
  248. package/clients/cli/commands/doctor.mjs +53 -16
  249. package/clients/cli/commands/gap-report.doc.mjs +1 -1
  250. package/clients/cli/commands/hook.doc.mjs +1 -1
  251. package/clients/cli/commands/init.doc.mjs +1 -1
  252. package/clients/cli/commands/integration-add.controls.test.mjs +1 -1
  253. package/clients/cli/commands/integration-add.doc.mjs +11 -1
  254. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  255. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  256. package/clients/cli/commands/integration.doc.mjs +1 -1
  257. package/clients/cli/commands/integration.mjs +1 -0
  258. package/clients/cli/commands/layout-check.doc.mjs +1 -1
  259. package/clients/cli/commands/layout-expand.doc.mjs +1 -1
  260. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  261. package/clients/cli/commands/layout.doc.mjs +1 -1
  262. package/clients/cli/commands/manifest.doc.mjs +1 -1
  263. package/clients/cli/commands/search.doc.mjs +1 -1
  264. package/clients/cli/commands/search.mjs +11 -2
  265. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  266. package/clients/cli/commands/swizzle.doc.mjs +1 -1
  267. package/clients/cli/commands/template.doc.mjs +24 -7
  268. package/clients/cli/commands/template.mjs +4 -91
  269. package/clients/cli/commands/text-json-parity.test.mjs +719 -0
  270. package/clients/cli/commands/theme-add.doc.mjs +2 -2
  271. package/clients/cli/commands/theme-build.doc.mjs +1 -1
  272. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  273. package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
  274. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  275. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  276. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  277. package/clients/cli/commands/theme-template.doc.mjs +1 -1
  278. package/clients/cli/commands/theme.doc.mjs +1 -1
  279. package/clients/cli/commands/upgrade.doc.mjs +3 -2
  280. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  281. package/clients/cli/commands/upgrade.mjs +29 -7
  282. package/clients/cli/formatters/index.mjs +2 -0
  283. package/clients/cli/formatters/index.test.mjs +6 -0
  284. package/clients/cli/index.mjs +8 -0
  285. package/clients/cli/lib/hook-format.mjs +14 -5
  286. package/clients/cli/lib/manifest.mjs +9 -2
  287. package/foundation/agent-docs/agent-docs.d.mts +3 -2
  288. package/foundation/agent-docs/agent-docs.mjs +13 -9
  289. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  290. package/foundation/config/project-themes.test.mjs +11 -19
  291. package/foundation/config/project.d.mts +20 -11
  292. package/foundation/config/project.mjs +123 -80
  293. package/foundation/config/project.test.mjs +144 -21
  294. package/foundation/discovery/authoring-self-docs.d.mts +18 -0
  295. package/foundation/discovery/authoring-self-docs.mjs +37 -15
  296. package/foundation/discovery/authoring-self-docs.test.mjs +25 -9
  297. package/foundation/discovery/authoring-surface.d.mts +74 -0
  298. package/foundation/discovery/authoring-surface.mjs +525 -0
  299. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  300. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  301. package/foundation/discovery/cli-self-docs.mjs +490 -0
  302. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  303. package/foundation/discovery/component-discovery.d.mts +38 -0
  304. package/foundation/discovery/component-discovery.mjs +48 -0
  305. package/foundation/discovery/component-loader.d.mts +35 -38
  306. package/foundation/discovery/component-loader.mjs +53 -222
  307. package/foundation/discovery/docs-discovery.d.mts +112 -11
  308. package/foundation/discovery/docs-discovery.mjs +231 -36
  309. package/foundation/discovery/docs-discovery.test.mjs +111 -32
  310. package/foundation/discovery/docs-output-budget.d.mts +2 -2
  311. package/foundation/discovery/docs-output-budget.mjs +1 -1
  312. package/foundation/discovery/docs-section-key.d.mts +28 -10
  313. package/foundation/discovery/docs-section-key.mjs +134 -33
  314. package/foundation/discovery/docs-section-key.test.mjs +41 -19
  315. package/foundation/discovery/template-adapter.d.mts +99 -6
  316. package/foundation/discovery/template-adapter.mjs +480 -57
  317. package/foundation/discovery/template-adapter.test.mjs +57 -0
  318. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  319. package/foundation/discovery/template-conflict-release.mjs +40 -0
  320. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  321. package/foundation/discovery/theme-discovery.d.mts +67 -7
  322. package/foundation/discovery/theme-discovery.mjs +916 -186
  323. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  324. package/foundation/doc-compiler/bundle.d.mts +47 -0
  325. package/foundation/doc-compiler/bundle.mjs +278 -0
  326. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  327. package/foundation/doc-compiler/compile.d.mts +220 -39
  328. package/foundation/doc-compiler/compile.mjs +311 -15
  329. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  330. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  331. package/foundation/doc-compiler/doc-compiler.test.mjs +28 -1
  332. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  333. package/foundation/doc-compiler/import.d.mts +24 -0
  334. package/foundation/doc-compiler/import.mjs +59 -0
  335. package/foundation/doc-compiler/inputs.d.mts +102 -0
  336. package/foundation/doc-compiler/inputs.mjs +291 -0
  337. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  338. package/foundation/doc-compiler/ir.d.mts +13 -0
  339. package/foundation/doc-compiler/ir.mjs +196 -12
  340. package/foundation/doc-compiler/lenses.d.mts +8 -5
  341. package/foundation/doc-compiler/lenses.mjs +50 -4
  342. package/foundation/doc-compiler/links.d.mts +162 -0
  343. package/foundation/doc-compiler/links.mjs +294 -0
  344. package/foundation/doc-compiler/links.test.mjs +192 -0
  345. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  346. package/foundation/doc-compiler/overlays.d.mts +37 -0
  347. package/foundation/doc-compiler/overlays.mjs +206 -0
  348. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  349. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  350. package/foundation/doc-compiler/read.d.mts +127 -0
  351. package/foundation/doc-compiler/read.mjs +325 -0
  352. package/foundation/doc-compiler/read.test.mjs +313 -0
  353. package/foundation/doc-compiler/source.d.mts +33 -0
  354. package/foundation/doc-compiler/source.mjs +128 -0
  355. package/foundation/doc-compiler/tree.d.mts +288 -0
  356. package/foundation/doc-compiler/tree.mjs +876 -0
  357. package/foundation/doc-compiler/tree.test.mjs +598 -0
  358. package/foundation/fs/file-protection.d.mts +33 -0
  359. package/foundation/fs/file-protection.mjs +825 -0
  360. package/foundation/fs/file-protection.test.mjs +250 -0
  361. package/foundation/integrations/autolink.d.mts +58 -1
  362. package/foundation/integrations/autolink.mjs +143 -57
  363. package/foundation/integrations/autolink.test.mjs +1 -1
  364. package/foundation/integrations/cli-requirement.d.mts +45 -0
  365. package/foundation/integrations/cli-requirement.mjs +154 -0
  366. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  367. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  368. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  369. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  370. package/foundation/integrations/contribution-inventory.mjs +27 -24
  371. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  372. package/foundation/integrations/integration-warnings.d.mts +9 -2
  373. package/foundation/integrations/integration-warnings.mjs +51 -26
  374. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  375. package/foundation/integrations/integrations.d.mts +3 -0
  376. package/foundation/integrations/integrations.mjs +11 -97
  377. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  378. package/foundation/integrations/provider-resolution.d.mts +152 -0
  379. package/foundation/integrations/provider-resolution.mjs +576 -0
  380. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  381. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  382. package/foundation/integrations/theme-descriptor.mjs +44 -0
  383. package/foundation/integrations/validate-contributions.mjs +121 -29
  384. package/foundation/response/error-codes.d.mts +3 -1
  385. package/foundation/response/error-codes.d.ts +2 -0
  386. package/foundation/response/error-codes.doc.mjs +12 -2
  387. package/foundation/response/error-codes.mjs +7 -1
  388. package/foundation/response/error-codes.test.mjs +55 -11
  389. package/foundation/response/response-types.doc.d.mts +5 -1
  390. package/foundation/response/response-types.doc.mjs +20 -11
  391. package/foundation/response/response.doc.mjs +1 -1
  392. package/foundation/text/string-utils.d.mts +8 -0
  393. package/foundation/text/string-utils.mjs +40 -10
  394. package/foundation/xle/expand.mjs +1 -1
  395. package/foundation/xle/xle.test.mjs +13 -0
  396. package/package.json +10 -9
  397. package/assets/templates/themes/manifest.json +0 -95
@@ -53,25 +53,10 @@ function writePackage({
53
53
  "import {defineTheme} from '@astryxdesign/core/theme';\n\nexport const oceanTheme = defineTheme({name: 'ocean'});\n",
54
54
  );
55
55
  fs.writeFileSync(
56
- path.join(root, 'manifest.json'),
57
- JSON.stringify(
58
- {
59
- version: 1,
60
- themes: [
61
- {
62
- slug: 'ocean',
63
- displayName: 'Ocean',
64
- description: 'Ocean theme.',
65
- maintained: true,
66
- entry: 'oceanTheme.ts',
67
- exportName: 'oceanTheme',
68
- files: ['oceanTheme.ts'],
69
- },
70
- ],
71
- },
72
- null,
73
- 2,
74
- ) + '\n',
56
+ path.join(root, 'ocean', 'oceanTheme.doc.mjs'),
57
+ `/** @type {import('@astryxdesign/cli/authoring').ThemeDoc} */
58
+ export default {type: 'theme', name: 'ocean', displayName: 'Ocean', description: 'Ocean theme.', maintained: true};
59
+ `,
75
60
  );
76
61
  }
77
62
  if (components) {
@@ -109,7 +94,7 @@ describe('integrationPackCheck', () => {
109
94
  );
110
95
  });
111
96
 
112
- it('fails when a theme entry omits its catalog export', async () => {
97
+ it('fails when a theme entry omits its inferred runtime export', async () => {
113
98
  writePackage({files: ['astryx.integration.mjs', 'themes']});
114
99
  fs.writeFileSync(
115
100
  path.join(tmpDir, 'themes', 'ocean', 'oceanTheme.ts'),
@@ -129,19 +114,12 @@ describe('integrationPackCheck', () => {
129
114
  );
130
115
  });
131
116
 
132
- it('fails when a theme imports a file omitted from its catalog', async () => {
117
+ it('fails when a theme imports a missing local file', async () => {
133
118
  writePackage({files: ['astryx.integration.mjs', 'themes']});
134
- fs.mkdirSync(path.join(tmpDir, 'themes', 'ocean', 'tokens'), {
135
- recursive: true,
136
- });
137
119
  fs.writeFileSync(
138
120
  path.join(tmpDir, 'themes', 'ocean', 'oceanTheme.ts'),
139
121
  "import {oceanPalette} from './tokens/ocean.palette';\nexport const oceanTheme = {oceanPalette};\n",
140
122
  );
141
- fs.writeFileSync(
142
- path.join(tmpDir, 'themes', 'ocean', 'tokens', 'ocean.palette.ts'),
143
- 'export const oceanPalette = {};\n',
144
- );
145
123
 
146
124
  const result = await integrationPackCheck({cwd: tmpDir});
147
125
 
@@ -150,7 +128,7 @@ describe('integrationPackCheck', () => {
150
128
  expect.objectContaining({
151
129
  code: 'invalid_theme',
152
130
  message: expect.stringContaining(
153
- 'must resolve to a listed file inside the theme directory',
131
+ 'must resolve to a file inside the theme directory',
154
132
  ),
155
133
  }),
156
134
  );
@@ -231,7 +209,7 @@ describe('integrationPackCheck', () => {
231
209
  );
232
210
  fs.mkdirSync(path.join(tmpDir, 'templates'));
233
211
  fs.writeFileSync(
234
- path.join(tmpDir, 'templates', 'account-page.template.mjs'),
212
+ path.join(tmpDir, 'templates', 'account-page.doc.mjs'),
235
213
  "export default {type: 'page', name: 'Account page', description: 'Account page.'};\n",
236
214
  );
237
215
  fs.writeFileSync(
@@ -302,6 +280,93 @@ describe('integrationPackCheck', () => {
302
280
  expect(fileErrors.length).toBeGreaterThan(0);
303
281
  });
304
282
 
283
+ it('fails a package that ships a namespace doc on a CLI range that cannot read it', async () => {
284
+ writePackage({manifest: "export default {docs: './docs'};\n", themes: false});
285
+ fs.mkdirSync(path.join(tmpDir, 'docs'), {recursive: true});
286
+ fs.writeFileSync(
287
+ path.join(tmpDir, 'docs', 'acme.doc.mjs'),
288
+ "export default {type: 'namespace', name: 'acme', title: 'Acme', summary: 'Acme guides.', slots: {guides: {title: 'Guides', accepts: {kinds: ['generic']}}}};\n",
289
+ );
290
+ fs.writeFileSync(
291
+ path.join(tmpDir, 'docs', 'deploying.doc.mjs'),
292
+ "export default {type: 'generic', name: 'deploying', title: 'Deploying', description: 'Ship it.', placement: {parent: 'namespace:acme', slot: 'guides'}, sections: [{title: 'Overview', content: [{type: 'prose', text: 'Ship it.'}]}]};\n",
293
+ );
294
+ const file = path.join(tmpDir, 'package.json');
295
+ const peer = (/** @type {string | undefined} */ range) => {
296
+ const pkg = JSON.parse(fs.readFileSync(file, 'utf-8'));
297
+ if (range == null) delete pkg.peerDependencies;
298
+ else pkg.peerDependencies = {'@astryxdesign/cli': range};
299
+ fs.writeFileSync(file, `${JSON.stringify(pkg, null, 2)}\n`);
300
+ };
301
+ const codes = async () =>
302
+ (await integrationPackCheck({cwd: tmpDir})).data.issues.map(
303
+ (/** @type {{code: string}} */ issue) => issue.code,
304
+ );
305
+
306
+ peer(undefined);
307
+ expect(await codes()).toContain('docs_tree_needs_cli');
308
+ peer('^0.6.0 || >=0.7.0');
309
+ expect(await codes()).toContain('docs_tree_needs_cli');
310
+ peer('>=0.7.0');
311
+ expect(await codes()).not.toContain('docs_tree_needs_cli');
312
+ }, 120_000);
313
+
314
+ it('fails a package with only a placed guide on a CLI range that cannot read the docs tree, and passes flat topics', async () => {
315
+ writePackage({manifest: "export default {docs: './docs'};\n", themes: false});
316
+ fs.mkdirSync(path.join(tmpDir, 'docs'), {recursive: true});
317
+ fs.writeFileSync(
318
+ path.join(tmpDir, 'docs', 'notes.doc.mjs'),
319
+ "export default {type: 'generic', name: 'notes', title: 'Notes', description: 'Notes.', sections: [{title: 'Overview', content: [{type: 'prose', text: 'Notes.'}]}]};\n",
320
+ );
321
+ const codes = async () =>
322
+ (await integrationPackCheck({cwd: tmpDir})).data.issues.map(
323
+ (/** @type {{code: string}} */ issue) => issue.code,
324
+ );
325
+ // Flat topics alone need no CLI peer.
326
+ expect(await codes()).not.toContain('docs_tree_needs_cli');
327
+ fs.writeFileSync(
328
+ path.join(tmpDir, 'docs', 'setup.doc.mjs'),
329
+ "export default {type: 'generic', name: 'setup', title: 'Setup', description: 'Set up.', placement: {parent: 'namespace:acme', slot: 'guides'}, sections: [{title: 'Overview', content: [{type: 'prose', text: 'Set up.'}]}]};\n",
330
+ );
331
+ expect(await codes()).toContain('docs_tree_needs_cli');
332
+ const file = path.join(tmpDir, 'package.json');
333
+ const pkg = JSON.parse(fs.readFileSync(file, 'utf-8'));
334
+ pkg.peerDependencies = {'@astryxdesign/cli': '>=0.7.0'};
335
+ fs.writeFileSync(file, `${JSON.stringify(pkg, null, 2)}\n`);
336
+ expect(await codes()).not.toContain('docs_tree_needs_cli');
337
+ }, 120_000);
338
+
339
+ it('fails a package with a template that sets replaces on a CLI range that rejects the field', async () => {
340
+ writePackage({manifest: "export default {templates: './templates'};\n", themes: false});
341
+ fs.mkdirSync(path.join(tmpDir, 'templates'), {recursive: true});
342
+ fs.writeFileSync(
343
+ path.join(tmpDir, 'templates', 'acme-shell.doc.mjs'),
344
+ "export default {type: 'page', name: 'acme-shell', description: 'Acme shell.', replaces: 'shell-side-nav'};\n",
345
+ );
346
+ fs.writeFileSync(
347
+ path.join(tmpDir, 'templates', 'acme-shell.tsx'),
348
+ 'export default function AcmeShell() { return null; }\n',
349
+ );
350
+ const file = path.join(tmpDir, 'package.json');
351
+ const peer = (/** @type {string | undefined} */ range) => {
352
+ const pkg = JSON.parse(fs.readFileSync(file, 'utf-8'));
353
+ if (range == null) delete pkg.peerDependencies;
354
+ else pkg.peerDependencies = {'@astryxdesign/cli': range};
355
+ fs.writeFileSync(file, `${JSON.stringify(pkg, null, 2)}\n`);
356
+ };
357
+ const codes = async () =>
358
+ (await integrationPackCheck({cwd: tmpDir})).data.issues.map(
359
+ (/** @type {{code: string}} */ issue) => issue.code,
360
+ );
361
+
362
+ peer(undefined);
363
+ expect(await codes()).toContain('replaces_needs_cli');
364
+ peer('^0.6.0');
365
+ expect(await codes()).toContain('replaces_needs_cli');
366
+ peer('>=0.7.0');
367
+ expect(await codes()).not.toContain('replaces_needs_cli');
368
+ }, 120_000);
369
+
305
370
  it('passes when package.json has no files field', async () => {
306
371
  writePackage({files: undefined});
307
372
  const result = await integrationPackCheck({cwd: tmpDir});
@@ -310,14 +375,48 @@ describe('integrationPackCheck', () => {
310
375
  expect(result.data.packable).toBe(true);
311
376
  });
312
377
 
378
+ it('detects a lifecycle script that changes packed template replacements', async () => {
379
+ const script = [
380
+ "const fs=require('fs')",
381
+ "const p='templates/acme-shell.template.mjs'",
382
+ "const s=fs.readFileSync(p,'utf8')",
383
+ "fs.writeFileSync(p,s.replace('shell-side-nav','shell-top-nav'))",
384
+ ].join(';');
385
+ writePackage({
386
+ manifest: "export default {templates: './templates'};\n",
387
+ files: ['astryx.integration.mjs', 'templates'],
388
+ themes: false,
389
+ scripts: {prepack: `node -e "${script}"`},
390
+ });
391
+ fs.mkdirSync(path.join(tmpDir, 'templates'));
392
+ fs.writeFileSync(
393
+ path.join(tmpDir, 'templates', 'acme-shell.template.mjs'),
394
+ "export default {type: 'page', name: 'Acme shell', description: 'Fixture.', replaces: 'shell-side-nav'};\n",
395
+ );
396
+ fs.writeFileSync(
397
+ path.join(tmpDir, 'templates', 'acme-shell.tsx'),
398
+ 'export default function AcmeShell() { return null; }\n',
399
+ );
400
+
401
+ const result = await integrationPackCheck({cwd: tmpDir});
402
+
403
+ expect(result.data.packable).toBe(false);
404
+ expect(result.data.issues).toContainEqual(
405
+ expect.objectContaining({
406
+ code: 'identity_mismatch',
407
+ message: expect.stringContaining('acme-shell'),
408
+ }),
409
+ );
410
+ });
411
+
313
412
  it('detects a lifecycle script that changes the packed identity', async () => {
314
413
  const script = [
315
414
  "const fs=require('fs')",
316
415
  "fs.renameSync('themes/ocean','themes/storm')",
317
- "const p='themes/manifest.json'",
318
- 'const x=JSON.parse(fs.readFileSync(p))',
319
- "x.themes[0].slug='storm'",
320
- 'fs.writeFileSync(p,JSON.stringify(x))',
416
+ "const p='themes/storm/oceanTheme.doc.mjs'",
417
+ "let x=fs.readFileSync(p,'utf8')",
418
+ "x=x.replace(/name: 'ocean'/, 'name: '+String.fromCharCode(39)+'storm'+String.fromCharCode(39))",
419
+ 'fs.writeFileSync(p,x)',
321
420
  ].join(';');
322
421
  writePackage({
323
422
  files: ['astryx.integration.mjs', 'themes'],
@@ -513,23 +612,15 @@ describe('integrationPackCheck', () => {
513
612
  });
514
613
 
515
614
  describe('pack-check mutation tests', () => {
516
- it('detects when a theme file is deleted after initial add', async () => {
615
+ it('detects when a theme source is deleted after initial authoring', async () => {
517
616
  writePackage({files: ['astryx.integration.mjs', 'themes']});
518
-
519
- // Write a second theme file then delete it — catalog still references it
520
- const catalog = JSON.parse(
521
- fs.readFileSync(path.join(tmpDir, 'themes', 'manifest.json'), 'utf-8'),
522
- );
523
- catalog.themes[0].files.push('tokens.ts');
524
- fs.writeFileSync(
525
- path.join(tmpDir, 'themes', 'manifest.json'),
526
- JSON.stringify(catalog, null, 2) + '\n',
527
- );
528
- // tokens.ts doesn't exist on disk → will be in inventory but not on disk
529
- // (Phase 1 catches this; the file won't be in the pack list either)
617
+ fs.rmSync(path.join(tmpDir, 'themes', 'ocean', 'oceanTheme.ts'));
530
618
 
531
619
  const result = await integrationPackCheck({cwd: tmpDir});
532
620
  expect(result.data.packable).toBe(false);
621
+ expect(result.data.issues).toContainEqual(
622
+ expect.objectContaining({code: 'invalid_theme'}),
623
+ );
533
624
  });
534
625
 
535
626
  it('detects when files[] is narrowed after add removes themes', async () => {
@@ -9,6 +9,30 @@ export type IntegrationPackCheckResponse = {
9
9
  data: PackCheckData;
10
10
  };
11
11
  export type PackCheckResponse = IntegrationPackCheckResponse;
12
+ /**
13
+ * Public contribution inventory returned by pack-check. Kept here rather than
14
+ * importing the runtime inventory module so the type-only `/json` surface does
15
+ * not pull implementation dependencies into downstream type checking.
16
+ */
17
+ export type PackCheckContributionIdentities = {
18
+ themes: {
19
+ slug: string;
20
+ exportName: string;
21
+ }[];
22
+ components: string[];
23
+ templates: {
24
+ id: string;
25
+ type: string;
26
+ name: string;
27
+ replaces?: string;
28
+ }[];
29
+ codemods: {
30
+ version: string;
31
+ id: string;
32
+ }[];
33
+ docs: string[];
34
+ agentDocsAppend: string[];
35
+ };
12
36
  export type PackCheckData = {
13
37
  name: string | null;
14
38
  version: string | null;
@@ -19,8 +43,8 @@ export type PackCheckData = {
19
43
  tarball: PackCheckTarball | null;
20
44
  inventory: PackCheckInventory;
21
45
  contributions: {
22
- local: import("../../foundation/integrations/contribution-inventory.mjs").ContributionIdentities | null;
23
- packed: import("../../foundation/integrations/contribution-inventory.mjs").ContributionIdentities | null;
46
+ local: PackCheckContributionIdentities | null;
47
+ packed: PackCheckContributionIdentities | null;
24
48
  };
25
49
  issues: import("../../foundation/integrations/issue").AstryxIntegrationIssue[];
26
50
  };
@@ -17,6 +17,19 @@
17
17
 
18
18
  /** @typedef {IntegrationPackCheckResponse} PackCheckResponse */
19
19
 
20
+ /**
21
+ * Public contribution inventory returned by pack-check. Kept here rather than
22
+ * importing the runtime inventory module so the type-only `/json` surface does
23
+ * not pull implementation dependencies into downstream type checking.
24
+ * @typedef {object} PackCheckContributionIdentities
25
+ * @property {{slug: string, exportName: string}[]} themes
26
+ * @property {string[]} components
27
+ * @property {{id: string, type: string, name: string, replaces?: string}[]} templates
28
+ * @property {{version: string, id: string}[]} codemods
29
+ * @property {string[]} docs
30
+ * @property {string[]} agentDocsAppend
31
+ */
32
+
20
33
  /**
21
34
  * @typedef {object} PackCheckData
22
35
  * @property {string|null} name
@@ -24,7 +37,7 @@
24
37
  * @property {boolean} packable — true when zero error-severity issues
25
38
  * @property {PackCheckTarball|null} tarball
26
39
  * @property {PackCheckInventory} inventory
27
- * @property {{local: import('../../foundation/integrations/contribution-inventory.mjs').ContributionIdentities|null, packed: import('../../foundation/integrations/contribution-inventory.mjs').ContributionIdentities|null}} contributions
40
+ * @property {{local: PackCheckContributionIdentities|null, packed: PackCheckContributionIdentities|null}} contributions
28
41
  * @property {import('../../foundation/integrations/issue').AstryxIntegrationIssue[]} issues
29
42
  */
30
43
 
@@ -12,6 +12,7 @@ export const doc = {
12
12
  type: 'function',
13
13
  kind: 'api',
14
14
  name: 'summarizeIssues',
15
+ namespace: 'cli/api',
15
16
  displayName: 'summarizeIssues()',
16
17
  summary:
17
18
  'Tally integration issues by severity into error and warning counts.',
@@ -0,0 +1,73 @@
1
+ // Copyright (c) Meta Platforms, Inc. and affiliates.
2
+
3
+ /**
4
+ * @file Final-0.6.x compatibility coverage for integration-template conflicts.
5
+ * @input A future replacement declaration plus an ordinary released conflict.
6
+ * @output Proof that 0.6.x omits replacement-specific public fields.
7
+ * @position Regression fixture for the stable conflict response boundary.
8
+ */
9
+
10
+ import {afterEach, beforeEach, describe, expect, it} from 'vitest';
11
+ import * as fs from 'node:fs';
12
+ import * as path from 'node:path';
13
+ import {discoverCoreTemplates} from '../../foundation/discovery/template-adapter.mjs';
14
+ import {integrationTemplateConflicts} from './authoring-checks.mjs';
15
+
16
+ let tmpDir;
17
+
18
+ function writeTemplate(pkgDir, id, type, replaces) {
19
+ const stem = path.join(pkgDir, 'templates', id);
20
+ fs.mkdirSync(path.dirname(stem), {recursive: true});
21
+ fs.writeFileSync(
22
+ `${stem}.doc.mjs`,
23
+ `export default {type: ${JSON.stringify(type)}, name: ${JSON.stringify(id)}, description: 'fixture'${replaces == null ? '' : `, replaces: ${JSON.stringify(replaces)}`}};\n`,
24
+ );
25
+ fs.writeFileSync(
26
+ `${stem}.tsx`,
27
+ `export default function Fixture() { return ${JSON.stringify(id)}; }\n`,
28
+ );
29
+ }
30
+
31
+ beforeEach(() => {
32
+ tmpDir = fs.mkdtempSync(
33
+ path.join(process.cwd(), '.astryx-template-conflict-compat-'),
34
+ );
35
+ });
36
+
37
+ afterEach(() => {
38
+ fs.rmSync(tmpDir, {recursive: true, force: true});
39
+ });
40
+
41
+ describe('integration-template conflict compatibility on 0.6.x', () => {
42
+ it('preserves the released warning-only conflict shape', async () => {
43
+ const corePages = (await discoverCoreTemplates()).filter(
44
+ candidate => candidate.type === 'page',
45
+ );
46
+ const target = corePages[0];
47
+ const accidental = corePages[1];
48
+ expect(target).toBeDefined();
49
+ expect(accidental).toBeDefined();
50
+
51
+ fs.writeFileSync(
52
+ path.join(tmpDir, 'package.json'),
53
+ JSON.stringify({name: '@acme/widgets', version: '1.0.0'}),
54
+ );
55
+ fs.writeFileSync(
56
+ path.join(tmpDir, 'astryx.integration.mjs'),
57
+ `export default {templates: './templates'};\n`,
58
+ );
59
+ writeTemplate(tmpDir, 'acme-future-shell', target.type, target.dirName);
60
+ writeTemplate(tmpDir, accidental.dirName, accidental.type);
61
+
62
+ const report = await integrationTemplateConflicts(undefined, {cwd: tmpDir});
63
+
64
+ expect(report.data.issues).toEqual([]);
65
+ expect(report.data.conflicts).toHaveLength(1);
66
+ expect(report.data.conflicts[0]).toMatchObject({
67
+ id: accidental.dirName,
68
+ severity: 'warning',
69
+ });
70
+ expect(report.data.conflicts[0]).not.toHaveProperty('relationship');
71
+ expect(report.data.conflicts[0]).not.toHaveProperty('replaces');
72
+ });
73
+ });