@astryxdesign/cli 0.6.3 → 0.6.4-canary.06c8fa3

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 (670) hide show
  1. package/CHANGELOG.md +194 -0
  2. package/README.md +121 -85
  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 +16 -9
  7. package/api/build/build.test.mjs +197 -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 +165 -49
  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 +36 -13
  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 +272 -41
  54. package/api/docs/_adapter.mjs +985 -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/docs.d.mts +10 -3
  61. package/api/docs/docs.doc.mjs +55 -16
  62. package/api/docs/docs.mjs +53 -10
  63. package/api/docs/docs.test.mjs +166 -4
  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/integration-tree.test.mjs +555 -0
  70. package/api/docs/integrationDocs.test.mjs +114 -8
  71. package/api/docs/list/list.mjs +28 -12
  72. package/api/docs/node/node.d.mts +43 -0
  73. package/api/docs/node/node.mjs +192 -0
  74. package/api/docs/reference-blocks.test.mjs +406 -0
  75. package/api/doctor/doctor.d.mts +104 -1
  76. package/api/doctor/doctor.doc.mjs +1 -0
  77. package/api/doctor/doctor.mjs +635 -7
  78. package/api/doctor/doctor.test.mjs +732 -11
  79. package/api/gap-report/gap-report.doc.mjs +8 -4
  80. package/api/hook/_adapter.mjs +19 -5
  81. package/api/hook/hook.doc.mjs +1 -0
  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 -3
  87. package/api/index.mjs +5 -4
  88. package/api/init/init.doc.mjs +6 -1
  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 +34 -64
  99. package/api/integration/add-theme.test.mjs +105 -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 +2 -1
  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 +105 -0
  119. package/api/integration/pack-check.mjs +111 -10
  120. package/api/integration/pack-check.test.mjs +387 -47
  121. package/api/integration/pack-check.type.d.mts +26 -2
  122. package/api/integration/pack-check.type.mjs +14 -1
  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 +1 -0
  131. package/api/json/envelope-types.test.mjs +76 -0
  132. package/api/json/index.ts +2 -1
  133. package/api/json/isError.doc.mjs +1 -0
  134. package/api/json/parseResponse.doc.mjs +3 -2
  135. package/api/search/search-return-type.test.mjs +54 -0
  136. package/api/search/search.d.mts +62 -11
  137. package/api/search/search.doc.mjs +8 -2
  138. package/api/search/search.mjs +471 -83
  139. package/api/search/search.test.mjs +142 -1
  140. package/api/search/search.type.d.mts +15 -3
  141. package/api/search/search.type.mjs +5 -2
  142. package/api/swizzle/copy/copy.mjs +28 -11
  143. package/api/swizzle/swizzle.doc.mjs +2 -1
  144. package/api/swizzle/swizzle.type.d.mts +2 -2
  145. package/api/swizzle/swizzle.type.mjs +2 -2
  146. package/api/template/copy/copy.mjs +17 -23
  147. package/api/template/copy/copy.test.mjs +17 -0
  148. package/api/template/list/list.mjs +1 -0
  149. package/api/template/table-floating-bulk-actions.test.mjs +66 -0
  150. package/api/template/template-integration.test.mjs +1008 -3
  151. package/api/template/template-suffix.test.mjs +41 -21
  152. package/api/template/template.d.mts +1 -1
  153. package/api/template/template.doc.mjs +30 -8
  154. package/api/template/template.mjs +46 -9
  155. package/api/template/template.type.d.mts +12 -14
  156. package/api/template/template.type.mjs +15 -14
  157. package/api/theme/_adapter.d.mts +2 -3
  158. package/api/theme/_adapter.mjs +4 -5
  159. package/api/theme/add/add.binary.test.mjs +84 -0
  160. package/api/theme/add/add.mjs +31 -22
  161. package/api/theme/add/add.rollback.test.mjs +158 -0
  162. package/api/theme/add/add.staging.test.mjs +83 -0
  163. package/api/theme/add/add.test.mjs +14 -1
  164. package/api/theme/build/build.family.test.mjs +7 -12
  165. package/api/theme/build/build.mjs +140 -59
  166. package/api/theme/build/build.public-component-vars.test.mjs +1 -1
  167. package/api/theme/build/build.receipt-doc.test.mjs +111 -0
  168. package/api/theme/build/build.rollback.test.mjs +148 -0
  169. package/api/theme/build/build.test.mjs +127 -0
  170. package/api/theme/build/font-warning.mjs +3 -3
  171. package/api/theme/build/font-warning.test.mjs +5 -2
  172. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  173. package/api/theme/integration-themes.test.mjs +39 -28
  174. package/api/theme/list/list.test.mjs +19 -20
  175. package/api/theme/listThemes.doc.mjs +6 -5
  176. package/api/theme/palette/generate/generate.mjs +8 -3
  177. package/api/theme/palette/generate/generate.test.mjs +96 -0
  178. package/api/theme/palette/generate/generator.d.mts +10 -13
  179. package/api/theme/palette/generate/generator.mjs +15 -4
  180. package/api/theme/palette/generate/generator.test.mjs +10 -0
  181. package/api/theme/template/template.mjs +11 -2
  182. package/api/theme/template/template.test.mjs +20 -0
  183. package/api/theme/theme.type.d.mts +170 -11
  184. package/api/theme/theme.type.mjs +94 -27
  185. package/api/theme/themeAdd.doc.mjs +4 -3
  186. package/api/theme/themeBuild.doc.mjs +8 -4
  187. package/api/theme/themeList.doc.mjs +6 -3
  188. package/api/theme/themeListAvailable.doc.mjs +5 -3
  189. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  190. package/api/theme/themeTargets.doc.mjs +1 -0
  191. package/api/theme/themeTemplate.doc.mjs +6 -2
  192. package/api/upgrade/_adapter.d.mts +32 -5
  193. package/api/upgrade/_adapter.mjs +139 -22
  194. package/api/upgrade/list/list.mjs +2 -1
  195. package/api/upgrade/list/list.test.mjs +73 -0
  196. package/api/upgrade/project-context.test.mjs +272 -0
  197. package/api/upgrade/provider-agreement.test.mjs +152 -0
  198. package/api/upgrade/run/files-changed.test.mjs +111 -0
  199. package/api/upgrade/run/run.mjs +359 -60
  200. package/api/upgrade/status/status.mjs +2 -2
  201. package/api/upgrade/upgrade.doc.mjs +12 -5
  202. package/api/upgrade/upgrade.type.d.mts +43 -5
  203. package/api/upgrade/upgrade.type.mjs +29 -13
  204. package/assets/codemods/__tests__/registry.test.mjs +1 -0
  205. package/assets/codemods/__tests__/runner.test.mjs +332 -8
  206. package/assets/codemods/file-count.test.mjs +163 -0
  207. package/assets/codemods/integration-discovery.mjs +48 -4
  208. package/assets/codemods/integration-discovery.test.mjs +73 -0
  209. package/assets/codemods/integration-runner.mjs +59 -7
  210. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  211. package/assets/codemods/registry.mjs +1 -0
  212. package/assets/codemods/run-codemod.mjs +177 -34
  213. package/assets/codemods/runner.mjs +353 -104
  214. package/assets/codemods/term-log.mjs +32 -8
  215. package/assets/codemods/term-log.test.mjs +19 -1
  216. package/assets/codemods/transform-prop.mjs +109 -0
  217. package/assets/codemods/transform-prop.test.mjs +95 -0
  218. package/assets/codemods/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +86 -165
  219. package/assets/codemods/transforms/v0.0.14/rename-status-variants.mjs +72 -210
  220. package/assets/codemods/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +83 -115
  221. package/assets/codemods/transforms/v0.1.8/rename-avatar-size-scale.mjs +57 -186
  222. package/assets/codemods/transforms/v0.3.0/__tests__/unwrap-authoring-factories.test.mjs +27 -5
  223. package/assets/codemods/transforms/v0.3.0/unwrap-authoring-factories.mjs +20 -5
  224. package/assets/codemods/transforms/v0.6.0/__tests__/next-codemods.test.mjs +47 -0
  225. package/assets/codemods/transforms/v0.6.0/rename-resizable-pixel-bounds.mjs +57 -10
  226. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  227. package/assets/codemods/transforms/v0.6.4/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  228. package/assets/codemods/transforms/v0.6.4/index.mjs +31 -0
  229. package/assets/codemods/transforms/v0.6.4/migrate-native-picker-to-presentation.mjs +148 -0
  230. package/assets/codemods/transforms/v0.6.4/migrate-theme-catalog-to-descriptors.mjs +141 -0
  231. package/assets/docs/README.md +9 -0
  232. package/assets/docs/authoring.doc.mjs +14 -0
  233. package/assets/docs/getting-started.doc.mjs +2 -2
  234. package/assets/docs/internationalization.doc.mjs +7 -5
  235. package/assets/docs/layout.doc.dense.mjs +2 -2
  236. package/assets/docs/layout.doc.mjs +1 -1
  237. package/assets/docs/principles.doc.mjs +6 -6
  238. package/assets/docs/styling-libraries.doc.mjs +4 -4
  239. package/assets/docs/styling.doc.mjs +4 -4
  240. package/assets/docs/theme.doc.mjs +5 -5
  241. package/assets/docs/tokens.doc.mjs +1 -1
  242. package/assets/docs/tree/api.doc.mjs +30 -0
  243. package/assets/docs/tree/cli.doc.mjs +23 -0
  244. package/assets/docs/tree/commands.doc.mjs +25 -0
  245. package/assets/docs/tree/component-lookups.doc.mjs +149 -0
  246. package/assets/docs/{cli-integrations.doc.mjs → tree/integrations.doc.mjs} +144 -26
  247. package/assets/docs/tree/integrations.test.mjs +62 -0
  248. package/assets/docs/tree/writing-docs.doc.mjs +286 -0
  249. package/assets/docs/working-with-ai.doc.mjs +4 -4
  250. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.doc.mjs +1 -1
  251. package/assets/templates/blocks/components/CheckboxList/CheckboxListSelectAllPattern.tsx +1 -3
  252. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  253. package/assets/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +1 -1
  254. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  255. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  256. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.doc.mjs +14 -0
  257. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaInlineRail.tsx +61 -0
  258. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.doc.mjs +14 -0
  259. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaOverscrollChaining.tsx +126 -0
  260. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.doc.mjs +15 -0
  261. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaShowcase.tsx +86 -0
  262. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.doc.mjs +14 -0
  263. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyGroupHeaders.tsx +99 -0
  264. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.doc.mjs +14 -0
  265. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaStickyPassthrough.tsx +122 -0
  266. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.doc.mjs +14 -0
  267. package/assets/templates/blocks/components/ScrollableArea/ScrollableAreaTwoAxisBoard.tsx +95 -0
  268. package/assets/templates/blocks/components/Table/TableBulkActionsTable.doc.mjs +14 -0
  269. package/assets/templates/blocks/components/Table/TableBulkActionsTable.tsx +71 -0
  270. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.doc.mjs +19 -0
  271. package/assets/templates/blocks/components/Table/TableFloatingBulkActionsTable.tsx +139 -0
  272. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  273. package/assets/templates/blocks/components/Timer/TimerFormats.doc.mjs +14 -0
  274. package/assets/templates/blocks/components/Timer/TimerFormats.tsx +34 -0
  275. package/assets/templates/blocks/components/Timer/TimerInline.doc.mjs +14 -0
  276. package/assets/templates/blocks/components/Timer/TimerInline.tsx +14 -0
  277. package/assets/templates/blocks/components/Timer/TimerShowcase.doc.mjs +13 -0
  278. package/assets/templates/blocks/components/Timer/TimerShowcase.tsx +47 -0
  279. package/assets/templates/blocks/components/Timer/TimerTypography.doc.mjs +14 -0
  280. package/assets/templates/blocks/components/Timer/TimerTypography.tsx +31 -0
  281. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.doc.mjs +19 -3
  282. package/assets/templates/blocks/components/Toolbar/ToolbarTableFilter.tsx +383 -65
  283. package/assets/templates/pages/table-tree/page.tsx +1704 -0
  284. package/assets/templates/pages/table-tree/template.doc.mjs +12 -0
  285. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  286. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  287. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  288. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  289. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  290. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  291. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  292. package/authoring/_shared/contract.ts +22 -0
  293. package/authoring/codemod/codemod.doc.mjs +7 -2
  294. package/authoring/codemod/parse.d.mts +8 -8
  295. package/authoring/codemod/parse.mjs +8 -6
  296. package/authoring/codemod/type.ts +12 -0
  297. package/authoring/config/config.doc.mjs +11 -3
  298. package/authoring/config/debug-composition.test.mjs +92 -0
  299. package/authoring/config/parse.d.mts +15 -13
  300. package/authoring/config/parse.mjs +27 -8
  301. package/authoring/config/parse.test.mjs +8 -0
  302. package/authoring/config/type.ts +31 -8
  303. package/authoring/debug/debug.doc.d.mts +11 -0
  304. package/authoring/debug/debug.doc.mjs +182 -0
  305. package/authoring/debug/parse.d.mts +8 -8
  306. package/authoring/debug/parse.mjs +3 -3
  307. package/authoring/discover/discover.doc.d.mts +13 -0
  308. package/authoring/discover/discover.doc.mjs +138 -0
  309. package/authoring/discover/parse.d.mts +24 -0
  310. package/authoring/discover/parse.mjs +128 -0
  311. package/authoring/discover/parse.test.mjs +124 -0
  312. package/authoring/discover/type.ts +87 -0
  313. package/authoring/doctypes/_schema.d.mts +790 -23
  314. package/authoring/doctypes/_schema.mjs +543 -39
  315. package/authoring/doctypes/base/graph-fields.doc.d.mts +9 -0
  316. package/authoring/doctypes/base/graph-fields.doc.mjs +64 -0
  317. package/authoring/doctypes/base/type.ts +41 -0
  318. package/authoring/doctypes/command/command.doc.mjs +5 -4
  319. package/authoring/doctypes/command/parse.d.mts +2 -2
  320. package/authoring/doctypes/command/parse.mjs +1 -1
  321. package/authoring/doctypes/command/type.ts +6 -5
  322. package/authoring/doctypes/component/component.doc.mjs +6 -3
  323. package/authoring/doctypes/component/parse.d.mts +2 -2
  324. package/authoring/doctypes/component/parse.mjs +1 -1
  325. package/authoring/doctypes/component/type.ts +6 -5
  326. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  327. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  328. package/authoring/doctypes/enum/parse.d.mts +2 -2
  329. package/authoring/doctypes/enum/parse.mjs +1 -1
  330. package/authoring/doctypes/enum/type.ts +4 -2
  331. package/authoring/doctypes/function/function.doc.mjs +7 -2
  332. package/authoring/doctypes/function/parse.d.mts +2 -2
  333. package/authoring/doctypes/function/parse.mjs +1 -1
  334. package/authoring/doctypes/function/type.ts +9 -4
  335. package/authoring/doctypes/hook/hook.doc.mjs +4 -0
  336. package/authoring/doctypes/hook/parse.d.mts +2 -2
  337. package/authoring/doctypes/hook/parse.mjs +1 -1
  338. package/authoring/doctypes/hook/type.ts +5 -4
  339. package/authoring/doctypes/legacy.d.mts +8 -6
  340. package/authoring/doctypes/legacy.mjs +5 -4
  341. package/authoring/doctypes/load-contract.test.mjs +233 -0
  342. package/authoring/doctypes/namespace/namespace.doc.d.mts +9 -0
  343. package/authoring/doctypes/namespace/namespace.doc.mjs +128 -0
  344. package/authoring/doctypes/namespace/parse.d.mts +12 -0
  345. package/authoring/doctypes/namespace/parse.mjs +25 -0
  346. package/authoring/doctypes/namespace/parse.test.mjs +163 -0
  347. package/authoring/doctypes/namespace/type.ts +74 -0
  348. package/authoring/doctypes/parse.d.mts +22 -18
  349. package/authoring/doctypes/parse.mjs +22 -11
  350. package/authoring/doctypes/parse.test.mjs +77 -3
  351. package/authoring/doctypes/reference/parse.d.mts +2 -2
  352. package/authoring/doctypes/reference/parse.mjs +8 -5
  353. package/authoring/doctypes/reference/reference.doc.mjs +48 -6
  354. package/authoring/doctypes/reference/type.ts +70 -7
  355. package/authoring/doctypes/schema/parse.d.mts +2 -2
  356. package/authoring/doctypes/schema/parse.mjs +1 -1
  357. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  358. package/authoring/doctypes/schema/type.ts +4 -4
  359. package/authoring/doctypes/template/parse.d.mts +94 -1
  360. package/authoring/doctypes/template/parse.mjs +40 -2
  361. package/authoring/doctypes/template/parse.test.mjs +26 -2
  362. package/authoring/doctypes/template/template.doc.mjs +13 -3
  363. package/authoring/doctypes/template/type.ts +13 -2
  364. package/authoring/doctypes/theme/parse.d.mts +35 -0
  365. package/authoring/doctypes/theme/parse.mjs +76 -0
  366. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  367. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  368. package/authoring/doctypes/theme/type.ts +42 -0
  369. package/authoring/doctypes/types.ts +12 -10
  370. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  371. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  372. package/authoring/gap-report/parse.d.mts +10 -10
  373. package/authoring/gap-report/parse.mjs +6 -6
  374. package/authoring/gap-report/type.ts +1 -1
  375. package/authoring/identity/identity.doc.d.mts +9 -0
  376. package/authoring/identity/identity.doc.mjs +61 -0
  377. package/authoring/identity/type.ts +132 -0
  378. package/authoring/index.d.mts +3 -0
  379. package/authoring/index.d.ts +62 -17
  380. package/authoring/index.mjs +4 -1
  381. package/authoring/integration/integration.doc.mjs +15 -8
  382. package/authoring/integration/parse.d.mts +2 -2
  383. package/authoring/integration/parse.mjs +1 -1
  384. package/authoring/integration/parse.test.mjs +10 -1
  385. package/authoring/integration/schema.d.mts +6 -4
  386. package/authoring/integration/schema.mjs +9 -3
  387. package/authoring/integration/type.ts +19 -8
  388. package/authoring/shadcn/receipt.d.mts +6 -6
  389. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  390. package/clients/cli/command-load-failure.test.mjs +83 -0
  391. package/clients/cli/command-result-coverage.test.mjs +7 -7
  392. package/clients/cli/commands/blog.doc.mjs +1 -1
  393. package/clients/cli/commands/blog.mjs +23 -8
  394. package/clients/cli/commands/blog.test.mjs +42 -1
  395. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  396. package/clients/cli/commands/build-theme.ascii-output.test.mjs +161 -0
  397. package/clients/cli/commands/build-theme.flag-docs.test.mjs +110 -0
  398. package/clients/cli/commands/build-theme.mjs +16 -50
  399. package/clients/cli/commands/build-theme.path-safety.test.mjs +86 -1
  400. package/clients/cli/commands/build-theme.variants.test.mjs +76 -0
  401. package/clients/cli/commands/build.doc.mjs +16 -8
  402. package/clients/cli/commands/build.exit-codes-doc.test.mjs +50 -0
  403. package/clients/cli/commands/build.mjs +137 -114
  404. package/clients/cli/commands/build.playbook.test.mjs +75 -0
  405. package/clients/cli/commands/build.text-fields.test.mjs +81 -0
  406. package/clients/cli/commands/component/index.mjs +153 -61
  407. package/clients/cli/commands/component-batch.test.mjs +341 -0
  408. package/clients/cli/commands/component-ownership.test.mjs +92 -3
  409. package/clients/cli/commands/component-package.test.mjs +46 -0
  410. package/clients/cli/commands/component-resolution.test.mjs +21 -0
  411. package/clients/cli/commands/component.doc.mjs +24 -7
  412. package/clients/cli/commands/component.test.mjs +19 -0
  413. package/clients/cli/commands/debug-result-summary.test.mjs +2 -2
  414. package/clients/cli/commands/detail-levels.test.mjs +2 -2
  415. package/clients/cli/commands/discover.broken-integration.test.mjs +52 -5
  416. package/clients/cli/commands/discover.components-flag.test.mjs +97 -0
  417. package/clients/cli/commands/discover.doc.mjs +55 -9
  418. package/clients/cli/commands/discover.mjs +393 -118
  419. package/clients/cli/commands/discover.sources.test.mjs +267 -0
  420. package/clients/cli/commands/discover.text-projection.test.mjs +103 -0
  421. package/clients/cli/commands/docs.doc.mjs +28 -6
  422. package/clients/cli/commands/docs.mjs +240 -26
  423. package/clients/cli/commands/docs.test.mjs +222 -1
  424. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  425. package/clients/cli/commands/doctor-integration-docs.doc.mjs +3 -3
  426. package/clients/cli/commands/doctor-integration-templates.doc.mjs +15 -8
  427. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  428. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  429. package/clients/cli/commands/doctor-integration.package-json.test.mjs +53 -0
  430. package/clients/cli/commands/doctor-integration.test.mjs +90 -8
  431. package/clients/cli/commands/doctor.doc.mjs +1 -1
  432. package/clients/cli/commands/doctor.mjs +59 -32
  433. package/clients/cli/commands/doctor.test.mjs +42 -0
  434. package/clients/cli/commands/gap-report.doc.mjs +17 -6
  435. package/clients/cli/commands/gap-report.test.mjs +72 -0
  436. package/clients/cli/commands/hook/index.mjs +7 -17
  437. package/clients/cli/commands/hook.doc.mjs +1 -1
  438. package/clients/cli/commands/hook.text-projection.test.mjs +45 -0
  439. package/clients/cli/commands/init.doc.mjs +20 -9
  440. package/clients/cli/commands/init.flag-help.test.mjs +153 -0
  441. package/clients/cli/commands/integration-add.controls.test.mjs +132 -0
  442. package/clients/cli/commands/integration-add.doc.mjs +32 -6
  443. package/clients/cli/commands/integration-authoring.test.mjs +13 -9
  444. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  445. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  446. package/clients/cli/commands/integration.doc.mjs +1 -1
  447. package/clients/cli/commands/integration.mjs +1 -0
  448. package/clients/cli/commands/interactive-guard.test.mjs +101 -24
  449. package/clients/cli/commands/json-contract.test.mjs +33 -0
  450. package/clients/cli/commands/manifest.doc.mjs +1 -1
  451. package/clients/cli/commands/no-prompt-wording.test.mjs +94 -0
  452. package/clients/cli/commands/search.doc.mjs +7 -4
  453. package/clients/cli/commands/search.mjs +28 -9
  454. package/clients/cli/commands/search.test.mjs +75 -0
  455. package/clients/cli/commands/setup-nudge.test.mjs +6 -0
  456. package/clients/cli/commands/swizzle.doc.mjs +3 -2
  457. package/clients/cli/commands/swizzle.path-safety.test.mjs +42 -0
  458. package/clients/cli/commands/template.doc.mjs +52 -13
  459. package/clients/cli/commands/template.flag-help.test.mjs +117 -0
  460. package/clients/cli/commands/template.mjs +4 -91
  461. package/clients/cli/commands/template.path-help.test.mjs +40 -0
  462. package/clients/cli/commands/text-json-parity.test.mjs +702 -0
  463. package/clients/cli/commands/theme-add.doc.mjs +4 -3
  464. package/clients/cli/commands/theme-build.doc.mjs +8 -7
  465. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  466. package/clients/cli/commands/theme-palette-generate.doc.mjs +9 -5
  467. package/clients/cli/commands/theme-palette-generate.test.mjs +19 -0
  468. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  469. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  470. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  471. package/clients/cli/commands/theme-template.behavior.test.mjs +12 -0
  472. package/clients/cli/commands/theme-template.doc.mjs +2 -2
  473. package/clients/cli/commands/theme.doc.mjs +1 -1
  474. package/clients/cli/commands/upgrade.ascii-output.test.mjs +87 -0
  475. package/clients/cli/commands/upgrade.doc.mjs +22 -10
  476. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  477. package/clients/cli/commands/upgrade.flag-help.test.mjs +188 -0
  478. package/clients/cli/commands/upgrade.hook-output.test.mjs +88 -0
  479. package/clients/cli/commands/upgrade.mjs +29 -7
  480. package/clients/cli/formatters/index.mjs +164 -1
  481. package/clients/cli/formatters/index.test.mjs +97 -0
  482. package/clients/cli/index.mjs +21 -34
  483. package/clients/cli/latest-version-env.test.mjs +50 -0
  484. package/clients/cli/lib/cli-error.test.mjs +7 -0
  485. package/clients/cli/lib/component-format.mjs +9 -9
  486. package/clients/cli/lib/component-format.test.mjs +1 -1
  487. package/clients/cli/lib/define-command.mjs +32 -6
  488. package/clients/cli/lib/doc-text-ascii.test.mjs +82 -0
  489. package/clients/cli/lib/exit-codes.test.mjs +90 -0
  490. package/clients/cli/lib/hook-format.mjs +19 -10
  491. package/clients/cli/lib/json-shim.mjs +62 -16
  492. package/clients/cli/lib/json-shim.test.mjs +69 -0
  493. package/clients/cli/lib/manifest.d.ts +2 -0
  494. package/clients/cli/lib/manifest.mjs +39 -10
  495. package/clients/cli/lib/manifest.test.mjs +22 -2
  496. package/clients/cli/lib/parse-error-format.test.mjs +81 -0
  497. package/foundation/agent-docs/agent-docs.d.mts +7 -2
  498. package/foundation/agent-docs/agent-docs.mjs +82 -12
  499. package/foundation/agent-docs/agent-docs.path-safety.test.mjs +266 -4
  500. package/foundation/agent-docs/agent-docs.test.mjs +19 -1
  501. package/foundation/config/integration-debug.test.mjs +28 -3
  502. package/foundation/config/project-themes.test.mjs +11 -19
  503. package/foundation/config/project.d.mts +20 -11
  504. package/foundation/config/project.mjs +263 -91
  505. package/foundation/config/project.test.mjs +270 -21
  506. package/foundation/discovery/authoring-self-docs.d.mts +87 -0
  507. package/foundation/discovery/authoring-self-docs.mjs +237 -0
  508. package/foundation/discovery/authoring-self-docs.test.mjs +170 -0
  509. package/foundation/discovery/authoring-surface.d.mts +74 -0
  510. package/foundation/discovery/authoring-surface.mjs +525 -0
  511. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  512. package/foundation/discovery/cli-self-docs.d.mts +119 -0
  513. package/foundation/discovery/cli-self-docs.mjs +490 -0
  514. package/foundation/discovery/cli-self-docs.test.mjs +375 -0
  515. package/foundation/discovery/component-discovery.d.mts +39 -1
  516. package/foundation/discovery/component-discovery.mjs +50 -1
  517. package/foundation/discovery/component-loader.d.mts +35 -38
  518. package/foundation/discovery/component-loader.mjs +53 -222
  519. package/foundation/discovery/docs-discovery.d.mts +119 -11
  520. package/foundation/discovery/docs-discovery.mjs +423 -108
  521. package/foundation/discovery/docs-discovery.test.mjs +365 -20
  522. package/foundation/discovery/docs-output-budget.d.mts +28 -0
  523. package/foundation/discovery/docs-output-budget.mjs +50 -0
  524. package/foundation/discovery/docs-section-key.d.mts +116 -0
  525. package/foundation/discovery/docs-section-key.mjs +322 -0
  526. package/foundation/discovery/docs-section-key.test.mjs +246 -0
  527. package/foundation/discovery/template-adapter.d.mts +113 -11
  528. package/foundation/discovery/template-adapter.fixture-refs.test.mjs +248 -0
  529. package/foundation/discovery/template-adapter.integration-isolation.test.mjs +94 -0
  530. package/foundation/discovery/template-adapter.mjs +775 -84
  531. package/foundation/discovery/template-adapter.test.mjs +57 -0
  532. package/foundation/discovery/template-conflict-release.d.mts +13 -0
  533. package/foundation/discovery/template-conflict-release.mjs +40 -0
  534. package/foundation/discovery/template-conflict-release.test.mjs +40 -0
  535. package/foundation/discovery/theme-discovery.d.mts +67 -7
  536. package/foundation/discovery/theme-discovery.mjs +916 -186
  537. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  538. package/foundation/discovery/theming-targets.test.mjs +4 -0
  539. package/foundation/doc-compiler/bundle.d.mts +47 -0
  540. package/foundation/doc-compiler/bundle.mjs +278 -0
  541. package/foundation/doc-compiler/bundle.test.mjs +266 -0
  542. package/foundation/doc-compiler/compile.d.mts +343 -0
  543. package/foundation/doc-compiler/compile.mjs +558 -0
  544. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  545. package/foundation/doc-compiler/diagnostics.mjs +305 -0
  546. package/foundation/doc-compiler/doc-compiler.test.mjs +714 -0
  547. package/foundation/doc-compiler/doc-loads.test.mjs +1630 -0
  548. package/foundation/doc-compiler/import.d.mts +24 -0
  549. package/foundation/doc-compiler/import.mjs +59 -0
  550. package/foundation/doc-compiler/inputs.d.mts +102 -0
  551. package/foundation/doc-compiler/inputs.mjs +291 -0
  552. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  553. package/foundation/doc-compiler/ir.d.mts +22 -0
  554. package/foundation/doc-compiler/ir.mjs +471 -0
  555. package/foundation/doc-compiler/lenses.d.mts +36 -0
  556. package/foundation/doc-compiler/lenses.mjs +173 -0
  557. package/foundation/doc-compiler/links.d.mts +162 -0
  558. package/foundation/doc-compiler/links.mjs +294 -0
  559. package/foundation/doc-compiler/links.test.mjs +192 -0
  560. package/foundation/doc-compiler/lower-doc.test.mjs +495 -0
  561. package/foundation/doc-compiler/overlays.d.mts +37 -0
  562. package/foundation/doc-compiler/overlays.mjs +206 -0
  563. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  564. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  565. package/foundation/doc-compiler/read.d.mts +127 -0
  566. package/foundation/doc-compiler/read.mjs +325 -0
  567. package/foundation/doc-compiler/read.test.mjs +313 -0
  568. package/foundation/doc-compiler/source.d.mts +33 -0
  569. package/foundation/doc-compiler/source.mjs +128 -0
  570. package/foundation/doc-compiler/tree.d.mts +288 -0
  571. package/foundation/doc-compiler/tree.mjs +876 -0
  572. package/foundation/doc-compiler/tree.test.mjs +606 -0
  573. package/foundation/fs/file-protection.d.mts +33 -0
  574. package/foundation/fs/file-protection.mjs +825 -0
  575. package/foundation/fs/file-protection.test.mjs +250 -0
  576. package/foundation/fs/module-loader.d.mts +1 -0
  577. package/foundation/fs/module-loader.mjs +50 -1
  578. package/foundation/fs/module-loader.stdout.test.mjs +332 -0
  579. package/foundation/fs/path-safety.d.mts +3 -2
  580. package/foundation/fs/path-safety.mjs +49 -19
  581. package/foundation/fs/path-safety.test.mjs +50 -0
  582. package/foundation/fs/publish-file-hardlink-unavailable.test.mjs +129 -94
  583. package/foundation/identity/provider-identity.d.mts +90 -0
  584. package/foundation/identity/provider-identity.mjs +320 -0
  585. package/foundation/identity/provider-identity.test.mjs +254 -0
  586. package/foundation/identity/providers.d.mts +7 -0
  587. package/foundation/identity/providers.mjs +16 -0
  588. package/foundation/integrations/autolink.d.mts +58 -1
  589. package/foundation/integrations/autolink.mjs +143 -45
  590. package/foundation/integrations/autolink.test.mjs +1 -1
  591. package/foundation/integrations/cli-requirement.d.mts +45 -0
  592. package/foundation/integrations/cli-requirement.mjs +154 -0
  593. package/foundation/integrations/cli-requirement.test.mjs +84 -0
  594. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  595. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  596. package/foundation/integrations/contribution-inventory.d.mts +3 -2
  597. package/foundation/integrations/contribution-inventory.mjs +27 -24
  598. package/foundation/integrations/contribution-inventory.test.mjs +86 -27
  599. package/foundation/integrations/integration-warnings.d.mts +9 -2
  600. package/foundation/integrations/integration-warnings.mjs +52 -21
  601. package/foundation/integrations/integration-warnings.test.mjs +74 -1
  602. package/foundation/integrations/integrations.d.mts +63 -3
  603. package/foundation/integrations/integrations.mjs +122 -9
  604. package/foundation/integrations/integrations.test.mjs +415 -1
  605. package/foundation/integrations/provider-conflicts.test.mjs +125 -0
  606. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  607. package/foundation/integrations/provider-resolution.d.mts +152 -0
  608. package/foundation/integrations/provider-resolution.mjs +576 -0
  609. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  610. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  611. package/foundation/integrations/theme-descriptor.mjs +44 -0
  612. package/foundation/integrations/validate-contributions.d.mts +2 -0
  613. package/foundation/integrations/validate-contributions.mjs +131 -29
  614. package/foundation/response/base.d.ts +8 -4
  615. package/foundation/response/batch.type.d.mts +33 -0
  616. package/foundation/response/batch.type.mjs +34 -0
  617. package/foundation/response/error-codes.d.mts +3 -1
  618. package/foundation/response/error-codes.d.ts +2 -0
  619. package/foundation/response/error-codes.doc.mjs +13 -4
  620. package/foundation/response/error-codes.mjs +8 -2
  621. package/foundation/response/error-codes.test.mjs +137 -10
  622. package/foundation/response/json-contract.test.mjs +57 -17
  623. package/foundation/response/json.d.mts +4 -2
  624. package/foundation/response/json.mjs +8 -10
  625. package/foundation/response/response-types.doc.d.mts +5 -1
  626. package/foundation/response/response-types.doc.mjs +46 -38
  627. package/foundation/response/response-types.doc.test.mjs +181 -0
  628. package/foundation/response/response.doc.mjs +1 -1
  629. package/foundation/text/string-utils.d.mts +8 -0
  630. package/foundation/text/string-utils.mjs +40 -10
  631. package/foundation/xle/browser.d.mts +3 -3
  632. package/foundation/xle/browser.mjs +3 -3
  633. package/foundation/xle/expand.d.mts +2 -0
  634. package/foundation/xle/expand.mjs +6 -5
  635. package/foundation/xle/expand.test.mjs +54 -0
  636. package/foundation/xle/parse.mjs +1 -1
  637. package/foundation/xle/print.mjs +2 -2
  638. package/foundation/xle/splice.mjs +1 -1
  639. package/foundation/xle/xle.test.mjs +13 -0
  640. package/package.json +10 -11
  641. package/api/layout/_adapter.d.mts +0 -34
  642. package/api/layout/_adapter.mjs +0 -133
  643. package/api/layout/check/check.d.mts +0 -16
  644. package/api/layout/check/check.mjs +0 -40
  645. package/api/layout/expand/expand.d.mts +0 -22
  646. package/api/layout/expand/expand.mjs +0 -153
  647. package/api/layout/grammar/grammar.d.mts +0 -13
  648. package/api/layout/grammar/grammar.mjs +0 -86
  649. package/api/layout/layout.d.mts +0 -6
  650. package/api/layout/layout.mjs +0 -17
  651. package/api/layout/layout.test.mjs +0 -297
  652. package/api/layout/layout.type.d.mts +0 -89
  653. package/api/layout/layout.type.mjs +0 -103
  654. package/api/layout/layoutCheck.doc.d.mts +0 -11
  655. package/api/layout/layoutCheck.doc.mjs +0 -84
  656. package/api/layout/layoutExpand.doc.d.mts +0 -11
  657. package/api/layout/layoutExpand.doc.mjs +0 -106
  658. package/api/layout/layoutGrammar.doc.d.mts +0 -11
  659. package/api/layout/layoutGrammar.doc.mjs +0 -56
  660. package/assets/templates/themes/manifest.json +0 -95
  661. package/clients/cli/commands/layout-check.doc.mjs +0 -54
  662. package/clients/cli/commands/layout-expand.doc.mjs +0 -66
  663. package/clients/cli/commands/layout-grammar.doc.mjs +0 -30
  664. package/clients/cli/commands/layout.doc.mjs +0 -34
  665. package/clients/cli/commands/layout.error-codes.test.mjs +0 -66
  666. package/clients/cli/commands/layout.exit-parity.test.mjs +0 -41
  667. package/clients/cli/commands/layout.mjs +0 -263
  668. package/clients/cli/lib/update-check.mjs +0 -83
  669. package/clients/cli/lib/update-check.test.mjs +0 -137
  670. package/clients/cli/update-hint-commands.test.mjs +0 -54
@@ -1,297 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file Integration tests for the layout API against the real @astryxdesign/core
5
- * registry and real template blocks. Every expansion is additionally
6
- * checked for TSX syntactic validity with the TypeScript parser, so the
7
- * "expansion emits compilable JSX" contract is enforced, not assumed.
8
- */
9
-
10
- import {describe, it, expect, beforeAll} from 'vitest';
11
- import {mkdtempSync, writeFileSync, rmSync} from 'node:fs';
12
- import {tmpdir} from 'node:os';
13
- import {join} from 'node:path';
14
- import ts from 'typescript';
15
- import {layoutExpand, layoutCheck, layoutGrammar} from './layout.mjs';
16
- import {buildRegistry} from '../../foundation/xle/registry.mjs';
17
-
18
- // The registry imports ~140 .doc.mjs modules on first use; under full-suite
19
- // parallel load that can exceed the default 5s test timeout. Warm it once.
20
- beforeAll(async () => {
21
- await buildRegistry();
22
- }, 120_000);
23
-
24
- const SLOW = 30_000;
25
-
26
- /** Assert TSX parses cleanly; returns the source file for inspection. */
27
- function expectValidTsx(code) {
28
- const sourceFile = ts.createSourceFile('generated.tsx', code, ts.ScriptTarget.Latest, true, ts.ScriptKind.TSX);
29
- const diagnostics = sourceFile.parseDiagnostics || [];
30
- const messages = diagnostics.map(d => ts.flattenDiagnosticMessageText(d.messageText, ' '));
31
- expect(messages).toEqual([]);
32
- return sourceFile;
33
- }
34
-
35
- const LOGIN_COMPACT =
36
- 'Ctr[h="100dvh"] > C[w=400 p8] > V[g6] > ' +
37
- '(V[g1] > Tx"Welcome back" + Tx[t=supporting]"Sign in to your account") + ' +
38
- '(F > TI"Email"[t=email req] + TI"Password"[t=password req]) + ' +
39
- '(H[j=between a=center] > CB"Remember me" + Lk[href="/forgot"]"Forgot password?") + ' +
40
- 'B.primary"Sign in"';
41
-
42
- const CHAT_OUTLINE = `
43
- AppShell
44
- topNav: TN
45
- Layout > LC !scroll
46
- ChL
47
- composer:
48
- ChC
49
- ChML
50
- ChS "Today"
51
- repeat 2:
52
- ChM
53
- ChB "Reply $"
54
- Tbar "Actions"
55
- B "Delete" opens=#confirm
56
-
57
- overlays:
58
- AD#confirm "Delete item?"
59
- `;
60
-
61
- const DASHBOARD_COMPACT =
62
- 'A[@topNav=TN @sideNav=SN] > L > V[g6] > ' +
63
- '(G[c4 g4] > C{card-callout}*4) + ' +
64
- '(C[p0] > T[striped] > (TR > THC"Name" + THC"Amount") + (TR > TC"Order $" + TC"\\$12.00")*3)';
65
-
66
- describe('layoutExpand', () => {
67
- it('expands the login card with typed state scaffolds', async () => {
68
- const result = await layoutExpand(LOGIN_COMPACT);
69
- expect(result.type).toBe('layout.expand');
70
- const {code} = result.data;
71
- expectValidTsx(code);
72
-
73
- expect(code).toContain(`const [email, setEmail] = useState('');`);
74
- expect(code).toContain(`const [rememberMe, setRememberMe] = useState(false);`);
75
- expect(code).toContain('<XDSCenter height="100dvh">');
76
- expect(code).toContain('variant="primary"');
77
- // axis-neutral j/a resolved onto the HStack's real props
78
- expect(code).toContain('hAlign="between"');
79
- expect(code).toContain('vAlign="center"');
80
- // payload routed to label props, not duplicated as children
81
- expect(code).not.toMatch(/label="Forgot password\?"[\s\S]{0,80}Forgot password\?/);
82
- }, SLOW);
83
-
84
- it('expands the outline chat page: slots, repeat blocks, overlays, triggers', async () => {
85
- const result = await layoutExpand(CHAT_OUTLINE);
86
- const {code, form} = result.data;
87
- expect(form).toBe('outline');
88
- expectValidTsx(code);
89
-
90
- expect(code).toContain('composer={');
91
- // slot satisfied required prop — no double assignment, no TODO for it
92
- expect(code.match(/composer=/g)).toHaveLength(1);
93
- expect(code).toContain('TODO(xle): open #confirm');
94
- expect(code).toContain('overlays — wire open state');
95
- expect((code.match(/<XDSChatMessage\b/g) || [])).toHaveLength(2);
96
- }, SLOW);
97
-
98
- it('expands the dashboard: table partition, repeats with $ counter and \\$ escape', async () => {
99
- const result = await layoutExpand(DASHBOARD_COMPACT);
100
- const {code} = result.data;
101
- expectValidTsx(code);
102
-
103
- expect(code).toContain('<XDSTableHeader>');
104
- expect(code).toContain('<XDSTableBody>');
105
- expect(code).toContain('Order 1');
106
- expect(code).toContain('Order 3');
107
- expect(code).toContain('$12.00');
108
- expect(code).not.toContain('112.00');
109
- // {card-callout} now splices: the block is co-defined once and referenced
110
- // four times — no TODO marker.
111
- expect((code.match(/^function CardCallout\(\)/gm) || [])).toHaveLength(1);
112
- expect((code.match(/<CardCallout \/>/g) || [])).toHaveLength(4);
113
- expect(code).not.toContain("TODO(xle): content block 'CardCallout'");
114
- }, SLOW);
115
-
116
- it('compact and outline surfaces expand to identical TSX', async () => {
117
- const check = await layoutCheck(LOGIN_COMPACT);
118
- const fromCompact = await layoutExpand(LOGIN_COMPACT);
119
- const fromOutline = await layoutExpand(check.data.outline, {form: 'outline'});
120
- expect(fromOutline.data.code).toEqual(fromCompact.data.code);
121
- }, SLOW);
122
-
123
- it('expansion is deterministic', async () => {
124
- const a = await layoutExpand(DASHBOARD_COMPACT);
125
- const b = await layoutExpand(DASHBOARD_COMPACT);
126
- expect(a.data.code).toEqual(b.data.code);
127
- }, SLOW);
128
-
129
- it('throws structured errors with suggestions on invalid expressions', async () => {
130
- await expect(layoutExpand('A[p6] > Grdi')).rejects.toMatchObject({
131
- code: 'ERR_LAYOUT_INVALID',
132
- message: expect.stringMatching(/AppShell has no prop 'padding'/),
133
- });
134
- });
135
-
136
- it('rejects non-PascalCase --name', async () => {
137
- await expect(layoutExpand('V > C', {name: 'not pascal'})).rejects.toMatchObject({
138
- code: 'ERR_INVALID_ARGUMENT',
139
- });
140
- });
141
-
142
- it('surfaces parse errors with positions', async () => {
143
- await expect(layoutExpand('V > > C')).rejects.toMatchObject({
144
- code: 'ERR_LAYOUT_PARSE',
145
- message: expect.stringMatching(/line 1/),
146
- });
147
- });
148
-
149
- it('maps pathologically deep nesting to a coded parse error, not ERR_UNKNOWN', async () => {
150
- await expect(layoutCheck('V > '.repeat(2000) + 'C')).rejects.toMatchObject({
151
- code: 'ERR_LAYOUT_PARSE',
152
- });
153
- });
154
-
155
- it('wraps top-level repeats and groups in a fragment (valid JSX)', async () => {
156
- for (const expr of ['B"Sign in"*3', '(B"a" + B"b")', '(B"a" + B"b")*2']) {
157
- const {data} = await layoutExpand(expr);
158
- expectValidTsx(data.code);
159
- expect(data.code).toContain('<>');
160
- }
161
- }, SLOW);
162
-
163
- it('wraps a top-level outline repeat block in a fragment', async () => {
164
- const {data} = await layoutExpand('repeat 3:\n B "x"', {form: 'outline'});
165
- expectValidTsx(data.code);
166
- }, SLOW);
167
-
168
- it('emits JSX-safe TSX for text payloads containing < and >', async () => {
169
- const result = await layoutExpand('Text"5 < 3 and 3 > 1"');
170
- expectValidTsx(result.data.code);
171
- }, SLOW);
172
-
173
- it('emits JSX-safe TSX for text payloads containing { and }', async () => {
174
- const result = await layoutExpand('Text"cost is {price}"');
175
- expectValidTsx(result.data.code);
176
- }, SLOW);
177
-
178
- it('emits JSX-safe TSX when a text payload looks like a closing tag', async () => {
179
- const result = await layoutExpand('Text"end</Text><img/>"');
180
- expectValidTsx(result.data.code);
181
- }, SLOW);
182
-
183
- it('emits JSX-safe TSX for JSX-special chars in outline form', async () => {
184
- const result = await layoutExpand('VStack\n Text "a < b"', {form: 'outline'});
185
- expectValidTsx(result.data.code);
186
- }, SLOW);
187
- });
188
-
189
- describe('layoutCheck', () => {
190
- it('returns both canonical surfaces for valid input', async () => {
191
- const result = await layoutCheck('V[g6] > C{card-callout}*2');
192
- expect(result.data.valid).toBe(true);
193
- expect(result.data.compact).toContain('{card-callout}');
194
- expect(result.data.outline).toContain('C {card-callout} x2');
195
- });
196
-
197
- it('collects all errors instead of stopping at the first', async () => {
198
- const result = await layoutCheck('A[p6] > V[g7] > Bd.sucess"x" + C{not-a-block}');
199
- expect(result.data.valid).toBe(false);
200
- expect(result.data.errors.length).toBeGreaterThanOrEqual(4);
201
- const all = result.data.errors.map(e => e.message).join('\n');
202
- expect(all).toMatch(/no prop 'padding'/);
203
- expect(all).toMatch(/must be one of/);
204
- expect(all).toMatch(/Unknown block/);
205
- });
206
- });
207
-
208
- describe('template referencing', () => {
209
- it('splices a template block: co-defined once, referenced, imports merged', async () => {
210
- const result = await layoutExpand('S[p6] > C{card-callout}*3', {name: 'Demo'});
211
- const {code} = result.data;
212
- expectValidTsx(code);
213
- // co-defined exactly once, referenced three times, no TODO
214
- expect((code.match(/^function CardCallout\(\)/gm) || [])).toHaveLength(1);
215
- expect((code.match(/<CardCallout \/>/g) || [])).toHaveLength(3);
216
- expect(code).not.toContain('TODO(xle)');
217
- // the block's own import is hoisted, and shared specifiers dedupe
218
- expect((code.match(/from '@astryxdesign\/core\/Card'/g) || [])).toHaveLength(1);
219
- // the block lost its export — it's a local declaration now
220
- expect(code).not.toContain('export default function CardCallout');
221
- expect(result.data.blocksReferenced).toEqual([{name: 'CardCallout', mode: 'splice'}]);
222
- }, SLOW);
223
-
224
- it('merges a stateful block useState into a single react import', async () => {
225
- const result = await layoutExpand(
226
- 'V > TI"Search"[t=text] + {table-column-settings-table}',
227
- {name: 'Demo'},
228
- );
229
- const {code} = result.data;
230
- expectValidTsx(code);
231
- // page TextInput scaffolds useState; block also uses useState → one import
232
- expect((code.match(/^import \{useState\} from 'react';$/gm) || [])).toHaveLength(1);
233
- expect(code).toContain('function TableColumnSettingsTable()');
234
- }, SLOW);
235
-
236
- it('imports app-registered local components (the local-component bridge)', async () => {
237
- // Inside the workspace so @astryxdesign/core resolves; cleaned up after.
238
- // A package.json beside the config makes Project.load resolve it as the
239
- // sibling-of-nearest-package.json (the standard config resolution).
240
- const cwd = mkdtempSync(join(process.cwd(), '.xle-imp-test-'));
241
- try {
242
- writeFileSync(join(cwd, 'package.json'), '{"name": "xle-imp-fixture"}\n');
243
- writeFileSync(
244
- join(cwd, 'astryx.config.mjs'),
245
- `export default {experimental: {xle: {components: {KpiCard: {from: '@/components/KpiCard'}, TimeRangePicker: {from: '@/components/TimeRangePicker'}}}}};\n`,
246
- );
247
- const result = await layoutExpand('S[p6] > (G[c4 g4] > {kpi-card}*4) + {time-range-picker}', {
248
- name: 'Demo',
249
- cwd,
250
- });
251
- const {code} = result.data;
252
- expectValidTsx(code);
253
- expect(code).toContain("import {KpiCard} from '@/components/KpiCard';");
254
- expect(code).toContain("import {TimeRangePicker} from '@/components/TimeRangePicker';");
255
- expect((code.match(/<KpiCard \/>/g) || [])).toHaveLength(4);
256
- expect(code).toContain('<TimeRangePicker />');
257
- expect(result.data.blocksReferenced).toContainEqual({name: 'KpiCard', mode: 'import'});
258
- } finally {
259
- rmSync(cwd, {recursive: true, force: true});
260
- }
261
- }, SLOW);
262
-
263
- it('parses a standalone {block} in both surfaces', async () => {
264
- const check = await layoutCheck('G[c4 g4] > {card-callout}*2');
265
- expect(check.data.valid).toBe(true);
266
- expect(check.data.compact).toContain('{card-callout}*2');
267
- expect(check.data.outline).toMatch(/\{card-callout\} x2/);
268
- });
269
- });
270
-
271
- describe('layoutGrammar', () => {
272
- it('emits the cheatsheet with branch-generated aliases', async () => {
273
- const result = await layoutGrammar();
274
- expect(result.data.text).toContain('TWO SURFACES');
275
- expect(result.data.aliases.V).toBe('VStack');
276
- expect(result.data.aliases.TB).toBe('TableBody');
277
- // every alias target must exist — the table is registry-filtered
278
- expect(Object.values(result.data.aliases)).not.toContain(undefined);
279
- });
280
- });
281
-
282
-
283
- describe('layout — input validation (API matches CLI)', () => {
284
- it('rejects an invalid --form value instead of silently parsing as compact', async () => {
285
- await expect(layoutCheck('V > C', {form: /** @type {any} */ ('xml')})).rejects.toMatchObject({
286
- code: 'ERR_INVALID_OPTION',
287
- });
288
- await expect(layoutExpand('V > C', {form: /** @type {any} */ ('nonsense')})).rejects.toMatchObject({
289
- code: 'ERR_INVALID_OPTION',
290
- });
291
- });
292
-
293
- it('rejects an empty expression at the API layer', async () => {
294
- await expect(layoutCheck('')).rejects.toMatchObject({code: 'ERR_INVALID_ARGUMENT'});
295
- await expect(layoutExpand(' ')).rejects.toMatchObject({code: 'ERR_INVALID_ARGUMENT'});
296
- });
297
- });
@@ -1,89 +0,0 @@
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
- * The input surface an expression was parsed as.
6
- */
7
- export type LayoutForm = "compact" | "outline" | "auto";
8
- /**
9
- * A validation issue with its formatted, human-readable rendering.
10
- */
11
- export type LayoutIssue = {
12
- line?: number | undefined;
13
- col?: number | undefined;
14
- message: string;
15
- formatted: string;
16
- suggestions?: string[] | undefined;
17
- };
18
- /**
19
- * A block referenced by a layout expression and how it was spliced in.
20
- */
21
- export type LayoutBlockReference = {
22
- name: string;
23
- mode: string;
24
- };
25
- /**
26
- * astryx --json layout expand "<expr>" [path]
27
- */
28
- export type LayoutExpandResponse = {
29
- type: "layout.expand";
30
- data: {
31
- form: LayoutForm;
32
- code: string;
33
- componentsUsed: string[];
34
- states: number;
35
- todos: string[];
36
- blocksReferenced: LayoutBlockReference[];
37
- warnings: string[];
38
- written: string | null;
39
- };
40
- };
41
- /**
42
- * astryx --json layout check "<expr>"
43
- */
44
- export type LayoutCheckResponse = {
45
- type: "layout.check";
46
- data: {
47
- valid: boolean;
48
- form: LayoutForm;
49
- errors: LayoutIssue[];
50
- warnings: string[];
51
- compact: string;
52
- outline: string;
53
- };
54
- };
55
- /**
56
- * astryx --json layout grammar
57
- */
58
- export type LayoutGrammarResponse = {
59
- type: "layout.grammar";
60
- data: {
61
- text: string;
62
- aliases: Record<string, string>;
63
- };
64
- };
65
- export type LayoutResponse = LayoutExpandResponse | LayoutCheckResponse | LayoutGrammarResponse;
66
- /**
67
- * Options for `layoutExpand()`.
68
- */
69
- export type LayoutExpandOptions = {
70
- targetPath?: string | undefined;
71
- form?: LayoutForm | undefined;
72
- loose?: boolean | undefined;
73
- name?: string | undefined;
74
- cwd?: string | undefined;
75
- };
76
- /**
77
- * Options for `layoutCheck()`.
78
- */
79
- export type LayoutCheckOptions = {
80
- form?: LayoutForm | undefined;
81
- loose?: boolean | undefined;
82
- cwd?: string | undefined;
83
- };
84
- /**
85
- * Options for `layoutGrammar()`.
86
- */
87
- export type LayoutGrammarOptions = {
88
- cwd?: string | undefined;
89
- };
@@ -1,103 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file Colocated types for the `layout` command — source of truth for its JSON
5
- * responses. `astryx layout expand|check|grammar` turn compressed XLE/XLO
6
- * expressions into validated XDS TSX (or echo canonical surfaces / a grammar
7
- * cheatsheet). The `types/layout.d.ts` barrel re-exports from here.
8
- *
9
- * Invocation -> type discriminator
10
- * -----------------------------------------------------------------
11
- * astryx --json layout expand "<expr>" -> layout.expand
12
- * astryx --json layout check "<expr>" -> layout.check
13
- * astryx --json layout grammar -> layout.grammar
14
- */
15
-
16
- /**
17
- * The input surface an expression was parsed as.
18
- * @typedef {'compact' | 'outline' | 'auto'} LayoutForm
19
- */
20
-
21
- /**
22
- * A validation issue with its formatted, human-readable rendering.
23
- * @typedef {object} LayoutIssue
24
- * @property {number} [line]
25
- * @property {number} [col]
26
- * @property {string} message
27
- * @property {string} formatted
28
- * @property {string[]} [suggestions]
29
- */
30
-
31
- /**
32
- * A block referenced by a layout expression and how it was spliced in.
33
- * @typedef {object} LayoutBlockReference
34
- * @property {string} name
35
- * @property {string} mode
36
- */
37
-
38
- /**
39
- * astryx --json layout expand "<expr>" [path]
40
- * @typedef {object} LayoutExpandResponse
41
- * @property {'layout.expand'} type
42
- * @property {object} data
43
- * @property {LayoutForm} data.form
44
- * @property {string} data.code
45
- * @property {string[]} data.componentsUsed
46
- * @property {number} data.states Number of useState hooks the expansion scaffolded.
47
- * @property {string[]} data.todos
48
- * @property {LayoutBlockReference[]} data.blocksReferenced
49
- * @property {string[]} data.warnings
50
- * @property {string | null} data.written
51
- */
52
-
53
- /**
54
- * astryx --json layout check "<expr>"
55
- * @typedef {object} LayoutCheckResponse
56
- * @property {'layout.check'} type
57
- * @property {object} data
58
- * @property {boolean} data.valid
59
- * @property {LayoutForm} data.form
60
- * @property {LayoutIssue[]} data.errors
61
- * @property {string[]} data.warnings
62
- * @property {string} data.compact
63
- * @property {string} data.outline
64
- */
65
-
66
- /**
67
- * astryx --json layout grammar
68
- * @typedef {object} LayoutGrammarResponse
69
- * @property {'layout.grammar'} type
70
- * @property {object} data
71
- * @property {string} data.text
72
- * @property {Record<string, string>} data.aliases Alias table (short name -> canonical component), from the registry.
73
- */
74
-
75
- /**
76
- * @typedef {LayoutExpandResponse | LayoutCheckResponse | LayoutGrammarResponse} LayoutResponse
77
- */
78
-
79
- /**
80
- * Options for `layoutExpand()`.
81
- * @typedef {object} LayoutExpandOptions
82
- * @property {string} [targetPath]
83
- * @property {LayoutForm} [form]
84
- * @property {boolean} [loose]
85
- * @property {string} [name]
86
- * @property {string} [cwd]
87
- */
88
-
89
- /**
90
- * Options for `layoutCheck()`.
91
- * @typedef {object} LayoutCheckOptions
92
- * @property {LayoutForm} [form]
93
- * @property {boolean} [loose]
94
- * @property {string} [cwd]
95
- */
96
-
97
- /**
98
- * Options for `layoutGrammar()`.
99
- * @typedef {object} LayoutGrammarOptions
100
- * @property {string} [cwd]
101
- */
102
-
103
- export {};
@@ -1,11 +0,0 @@
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
- * @file FunctionDoc for `layoutCheck()` / `astryx layout check`. Colocated with
6
- * the API function it documents; the response-shape source of truth stays in
7
- * `layout.type.mjs`.
8
- * @position packages/cli/api/layout — function documentation
9
- */
10
- /** @type {import('@astryxdesign/cli/authoring').FunctionDoc} */
11
- export const doc: import("@astryxdesign/cli/authoring").FunctionDoc;
@@ -1,84 +0,0 @@
1
- // Copyright (c) Meta Platforms, Inc. and affiliates.
2
-
3
- /**
4
- * @file FunctionDoc for `layoutCheck()` / `astryx layout check`. Colocated with
5
- * the API function it documents; the response-shape source of truth stays in
6
- * `layout.type.mjs`.
7
- * @position packages/cli/api/layout — function documentation
8
- */
9
-
10
- /** @type {import('@astryxdesign/cli/authoring').FunctionDoc} */
11
- export const doc = {
12
- type: 'function',
13
- kind: 'api',
14
- name: 'layoutCheck',
15
- displayName: 'layoutCheck()',
16
- summary: 'Validate a layout expression without expanding it.',
17
- description:
18
- 'The validator behind `astryx layout check`. Parses and validates a compressed XLE/XLO ' +
19
- 'expression without generating any TSX, and echoes it back in both canonical surfaces ' +
20
- '(compact and outline). Validation failures are reported in the layout.check envelope ' +
21
- '(valid: false) with line/col and suggestions (not thrown) so callers can lint an ' +
22
- 'expression and surface fixes.',
23
- importPath: '@astryxdesign/cli/api',
24
- signature:
25
- 'layoutCheck(expression: string, options?: LayoutCheckOptions): Promise<LayoutCheckResponse>',
26
- keywords: ['layout', 'check', 'validate', 'xle', 'xlo', 'lint'],
27
- params: [
28
- {
29
- name: 'expression',
30
- type: 'string',
31
- description: 'The layout expression to validate.',
32
- required: true,
33
- },
34
- {
35
- name: 'options.form',
36
- type: "'compact' | 'outline' | 'auto'",
37
- description:
38
- 'Force which input surface the expression is parsed as, or auto-detect it.',
39
- default: "'auto'",
40
- },
41
- {
42
- name: 'options.loose',
43
- type: 'boolean',
44
- description:
45
- 'Treat unknown {hint} references as warnings instead of errors.',
46
- default: 'false',
47
- },
48
- {
49
- name: 'options.cwd',
50
- type: 'string',
51
- description: 'Directory the block catalog and registry resolve against.',
52
- },
53
- ],
54
- returns: [
55
- {
56
- type: 'layout.check',
57
- description:
58
- 'The validation result: a valid flag, the detected form, errors (each with line/col, message, formatted text, and suggestions), warnings, and the expression re-printed in both canonical surfaces (compact and outline).',
59
- },
60
- ],
61
- throws: [
62
- {code: 'ERR_INVALID_ARGUMENT', when: 'the expression is empty'},
63
- {
64
- code: 'ERR_INVALID_OPTION',
65
- when: 'form is not one of "compact", "outline", or "auto"',
66
- },
67
- {
68
- code: 'ERR_LAYOUT_PARSE',
69
- when: 'the expression has a syntax error (reported with line/col)',
70
- },
71
- ],
72
- examples: [
73
- {
74
- label: 'Validate an expression',
75
- code: 'const r = await layoutCheck(\'VStack[g4] > Text"Hi"\');',
76
- },
77
- {
78
- label: 'Read the canonical forms',
79
- code: 'const {data} = await layoutCheck(\'Card > Text"Hi"\');',
80
- },
81
- ],
82
- command: 'layout check',
83
- related: ['layoutExpand', 'layoutGrammar'],
84
- };
@@ -1,11 +0,0 @@
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
- * @file FunctionDoc for `layoutExpand()` / `astryx layout expand`. Colocated
6
- * with the API function it documents; the response-shape source of truth stays
7
- * in `layout.type.mjs`.
8
- * @position packages/cli/api/layout — function documentation
9
- */
10
- /** @type {import('@astryxdesign/cli/authoring').FunctionDoc} */
11
- export const doc: import("@astryxdesign/cli/authoring").FunctionDoc;