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

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 (276) hide show
  1. package/README.md +22 -1
  2. package/api/blog/blog.doc.mjs +1 -0
  3. package/api/build/build.doc.mjs +1 -0
  4. package/api/component/component.doc.mjs +1 -0
  5. package/api/discover/discover.doc.mjs +1 -0
  6. package/api/docs/_adapter.d.mts +3 -8
  7. package/api/docs/_adapter.mjs +13 -105
  8. package/api/docs/detail/section/section.mjs +9 -15
  9. package/api/docs/detail/section/section.test.mjs +15 -6
  10. package/api/docs/docs.doc.mjs +1 -0
  11. package/api/docs/list/list.mjs +3 -7
  12. package/api/doctor/doctor.d.mts +25 -3
  13. package/api/doctor/doctor.doc.mjs +1 -0
  14. package/api/doctor/doctor.mjs +186 -14
  15. package/api/doctor/doctor.test.mjs +332 -7
  16. package/api/gap-report/gap-report.doc.mjs +1 -0
  17. package/api/hook/_adapter.mjs +19 -5
  18. package/api/hook/hook.doc.mjs +1 -0
  19. package/api/hook/list/list.d.mts +1 -1
  20. package/api/hook/list/list.mjs +69 -17
  21. package/api/init/init.doc.mjs +1 -0
  22. package/api/integration/add-contribution.mjs +7 -7
  23. package/api/integration/add-contribution.test.mjs +37 -3
  24. package/api/integration/add-theme.mjs +34 -64
  25. package/api/integration/add-theme.test.mjs +105 -21
  26. package/api/integration/authoring-checks.test.mjs +8 -4
  27. package/api/integration/integration-block-exports.test.mjs +10 -6
  28. package/api/integration/integrationAdd.doc.mjs +1 -0
  29. package/api/integration/integrationAddAgentDoc.doc.mjs +1 -0
  30. package/api/integration/integrationAddCodemod.doc.mjs +1 -0
  31. package/api/integration/integrationAddComponent.doc.mjs +1 -0
  32. package/api/integration/integrationAddDoc.doc.mjs +1 -0
  33. package/api/integration/integrationAddTemplate.doc.mjs +1 -0
  34. package/api/integration/integrationAddTheme.doc.mjs +6 -5
  35. package/api/integration/integrationComponentConflicts.doc.mjs +1 -0
  36. package/api/integration/integrationDocConflicts.doc.mjs +1 -0
  37. package/api/integration/integrationPackCheck.doc.mjs +1 -0
  38. package/api/integration/integrationTemplateConflicts.doc.mjs +1 -0
  39. package/api/integration/pack-check.test.mjs +17 -47
  40. package/api/integration/summarizeIssues.doc.mjs +1 -0
  41. package/api/integration/validate-integration-fixes.test.mjs +1389 -0
  42. package/api/integration/validate-integration.mjs +50 -102
  43. package/api/integration/validate-integration.test.mjs +85 -23
  44. package/api/integration/validate-unread-theme-folders.test.mjs +110 -0
  45. package/api/integration/validateIntegration.doc.mjs +1 -0
  46. package/api/json/assertResponse.doc.mjs +1 -0
  47. package/api/json/isError.doc.mjs +1 -0
  48. package/api/json/parseResponse.doc.mjs +1 -0
  49. package/api/layout/layoutCheck.doc.mjs +1 -0
  50. package/api/layout/layoutExpand.doc.mjs +1 -0
  51. package/api/layout/layoutGrammar.doc.mjs +1 -0
  52. package/api/search/search.doc.mjs +1 -0
  53. package/api/search/search.mjs +16 -6
  54. package/api/swizzle/swizzle.doc.mjs +1 -0
  55. package/api/template/template-suffix.test.mjs +41 -21
  56. package/api/template/template.doc.mjs +1 -0
  57. package/api/theme/_adapter.d.mts +2 -3
  58. package/api/theme/_adapter.mjs +4 -5
  59. package/api/theme/add/add.binary.test.mjs +10 -17
  60. package/api/theme/add/add.test.mjs +14 -1
  61. package/api/theme/generateTonalPalette.doc.mjs +1 -0
  62. package/api/theme/integration-themes.test.mjs +39 -28
  63. package/api/theme/list/list.test.mjs +19 -20
  64. package/api/theme/listThemes.doc.mjs +6 -5
  65. package/api/theme/themeAdd.doc.mjs +4 -3
  66. package/api/theme/themeBuild.doc.mjs +1 -0
  67. package/api/theme/themeList.doc.mjs +6 -3
  68. package/api/theme/themeListAvailable.doc.mjs +5 -3
  69. package/api/theme/themePaletteGenerate.doc.mjs +1 -0
  70. package/api/theme/themeTargets.doc.mjs +1 -0
  71. package/api/theme/themeTemplate.doc.mjs +1 -0
  72. package/api/upgrade/_adapter.d.mts +32 -5
  73. package/api/upgrade/_adapter.mjs +97 -69
  74. package/api/upgrade/provider-agreement.test.mjs +152 -0
  75. package/api/upgrade/run/run.mjs +356 -59
  76. package/api/upgrade/upgrade.doc.mjs +6 -1
  77. package/api/upgrade/upgrade.type.d.mts +34 -0
  78. package/api/upgrade/upgrade.type.mjs +15 -0
  79. package/assets/codemods/__tests__/runner.test.mjs +330 -8
  80. package/assets/codemods/integration-discovery.mjs +8 -2
  81. package/assets/codemods/integration-discovery.test.mjs +15 -0
  82. package/assets/codemods/integration-runner.mjs +56 -4
  83. package/assets/codemods/integration-runner.protection.test.mjs +153 -0
  84. package/assets/codemods/run-codemod.mjs +177 -34
  85. package/assets/codemods/runner.mjs +350 -102
  86. package/assets/codemods/transforms/next/__tests__/migrate-native-picker-to-presentation.test.mjs +63 -0
  87. package/assets/codemods/transforms/next/__tests__/migrate-theme-catalog-to-descriptors.test.mjs +220 -0
  88. package/assets/codemods/transforms/next/index.mjs +19 -1
  89. package/assets/codemods/transforms/next/migrate-native-picker-to-presentation.mjs +148 -0
  90. package/assets/codemods/transforms/next/migrate-theme-catalog-to-descriptors.mjs +141 -0
  91. package/assets/docs/cli-integrations.doc.mjs +30 -30
  92. package/assets/docs/cli.doc.mjs +15 -0
  93. package/assets/docs/theme.doc.mjs +1 -1
  94. package/assets/templates/blocks/components/DateInput/DateInputDateRange.tsx +1 -1
  95. package/assets/templates/blocks/components/Item/ItemDocumentTabs.doc.mjs +14 -0
  96. package/assets/templates/blocks/components/Item/ItemDocumentTabs.tsx +100 -0
  97. package/assets/templates/blocks/components/TimeInput/TimeInputConstrained.tsx +1 -0
  98. package/assets/templates/themes/butter/butterTheme.doc.mjs +11 -0
  99. package/assets/templates/themes/chocolate/chocolateTheme.doc.mjs +11 -0
  100. package/assets/templates/themes/gothic/gothicTheme.doc.mjs +11 -0
  101. package/assets/templates/themes/matcha/matchaTheme.doc.mjs +11 -0
  102. package/assets/templates/themes/neutral/neutralTheme.doc.mjs +11 -0
  103. package/assets/templates/themes/stone/stoneTheme.doc.mjs +11 -0
  104. package/assets/templates/themes/y2k/y2kTheme.doc.mjs +11 -0
  105. package/authoring/codemod/codemod.doc.mjs +1 -1
  106. package/authoring/codemod/type.ts +12 -0
  107. package/authoring/config/config.doc.mjs +1 -1
  108. package/authoring/debug/debug.doc.d.mts +11 -0
  109. package/authoring/debug/debug.doc.mjs +182 -0
  110. package/authoring/doctypes/_schema.d.mts +71 -141
  111. package/authoring/doctypes/_schema.mjs +29 -2
  112. package/authoring/doctypes/base/graph-fields.doc.mjs +1 -1
  113. package/authoring/doctypes/command/command.doc.mjs +1 -1
  114. package/authoring/doctypes/command/type.ts +1 -1
  115. package/authoring/doctypes/component/type.ts +2 -2
  116. package/authoring/doctypes/doctypes-new.test.mjs +48 -6
  117. package/authoring/doctypes/enum/enum.doc.mjs +1 -1
  118. package/authoring/doctypes/enum/type.ts +1 -1
  119. package/authoring/doctypes/function/function.doc.mjs +1 -1
  120. package/authoring/doctypes/function/type.ts +1 -1
  121. package/authoring/doctypes/hook/type.ts +2 -2
  122. package/authoring/doctypes/load-contract.test.mjs +3 -2
  123. package/authoring/doctypes/namespace/namespace.doc.mjs +2 -2
  124. package/authoring/doctypes/namespace/parse.test.mjs +23 -25
  125. package/authoring/doctypes/namespace/type.ts +5 -2
  126. package/authoring/doctypes/parse.d.mts +4 -2
  127. package/authoring/doctypes/parse.mjs +10 -5
  128. package/authoring/doctypes/reference/reference.doc.mjs +6 -4
  129. package/authoring/doctypes/reference/type.ts +9 -10
  130. package/authoring/doctypes/schema/schema.doc.mjs +1 -1
  131. package/authoring/doctypes/schema/type.ts +1 -2
  132. package/authoring/doctypes/template/template.doc.mjs +3 -3
  133. package/authoring/doctypes/theme/parse.d.mts +35 -0
  134. package/authoring/doctypes/theme/parse.mjs +76 -0
  135. package/authoring/doctypes/theme/theme.doc.d.mts +9 -0
  136. package/authoring/doctypes/theme/theme.doc.mjs +79 -0
  137. package/authoring/doctypes/theme/type.ts +42 -0
  138. package/authoring/doctypes/types.ts +2 -1
  139. package/authoring/gap-report/gap-report.doc.d.mts +12 -0
  140. package/authoring/gap-report/gap-report.doc.mjs +183 -0
  141. package/authoring/index.d.mts +1 -0
  142. package/authoring/index.d.ts +7 -4
  143. package/authoring/index.mjs +2 -1
  144. package/authoring/integration/integration.doc.mjs +2 -2
  145. package/authoring/integration/type.ts +3 -9
  146. package/clients/cli/__tests__/cliManifest.test.ts +27 -29
  147. package/clients/cli/commands/blog.doc.mjs +1 -1
  148. package/clients/cli/commands/build-theme.adaptations.test.mjs +100 -1
  149. package/clients/cli/commands/build-theme.mjs +10 -44
  150. package/clients/cli/commands/build.doc.mjs +1 -1
  151. package/clients/cli/commands/component.doc.mjs +1 -1
  152. package/clients/cli/commands/discover.doc.mjs +1 -1
  153. package/clients/cli/commands/docs.doc.mjs +1 -1
  154. package/clients/cli/commands/docs.mjs +15 -58
  155. package/clients/cli/commands/docs.test.mjs +11 -14
  156. package/clients/cli/commands/doctor-integration-components.doc.mjs +1 -1
  157. package/clients/cli/commands/doctor-integration-docs.doc.mjs +1 -1
  158. package/clients/cli/commands/doctor-integration-templates.doc.mjs +1 -1
  159. package/clients/cli/commands/doctor-integration-validate.doc.mjs +1 -1
  160. package/clients/cli/commands/doctor-integration.doc.mjs +1 -1
  161. package/clients/cli/commands/doctor-integration.test.mjs +15 -7
  162. package/clients/cli/commands/doctor.doc.mjs +1 -1
  163. package/clients/cli/commands/gap-report.doc.mjs +1 -1
  164. package/clients/cli/commands/hook.doc.mjs +1 -1
  165. package/clients/cli/commands/init.doc.mjs +1 -1
  166. package/clients/cli/commands/integration-add.controls.test.mjs +1 -1
  167. package/clients/cli/commands/integration-add.doc.mjs +1 -1
  168. package/clients/cli/commands/integration-pack.doc.mjs +1 -1
  169. package/clients/cli/commands/integration-real-world.test.mjs +3 -9
  170. package/clients/cli/commands/integration.doc.mjs +1 -1
  171. package/clients/cli/commands/layout-check.doc.mjs +1 -1
  172. package/clients/cli/commands/layout-expand.doc.mjs +1 -1
  173. package/clients/cli/commands/layout-grammar.doc.mjs +1 -1
  174. package/clients/cli/commands/layout.doc.mjs +1 -1
  175. package/clients/cli/commands/manifest.doc.mjs +1 -1
  176. package/clients/cli/commands/search.doc.mjs +1 -1
  177. package/clients/cli/commands/swizzle.doc.mjs +1 -1
  178. package/clients/cli/commands/template.doc.mjs +1 -1
  179. package/clients/cli/commands/text-json-parity.test.mjs +718 -0
  180. package/clients/cli/commands/theme-add.doc.mjs +2 -2
  181. package/clients/cli/commands/theme-build.doc.mjs +1 -1
  182. package/clients/cli/commands/theme-list.doc.mjs +2 -2
  183. package/clients/cli/commands/theme-palette-generate.doc.mjs +3 -3
  184. package/clients/cli/commands/theme-palette.doc.mjs +1 -1
  185. package/clients/cli/commands/theme-targets.behavior.test.mjs +4 -3
  186. package/clients/cli/commands/theme-targets.doc.mjs +1 -1
  187. package/clients/cli/commands/theme-template.doc.mjs +1 -1
  188. package/clients/cli/commands/theme.doc.mjs +1 -1
  189. package/clients/cli/commands/upgrade.doc.mjs +3 -2
  190. package/clients/cli/commands/upgrade.file-protection.test.mjs +228 -0
  191. package/clients/cli/commands/upgrade.mjs +29 -7
  192. package/clients/cli/formatters/index.mjs +2 -0
  193. package/clients/cli/formatters/index.test.mjs +6 -0
  194. package/clients/cli/lib/hook-format.mjs +14 -5
  195. package/foundation/config/project-themes.test.mjs +11 -19
  196. package/foundation/config/project.d.mts +8 -0
  197. package/foundation/config/project.mjs +50 -21
  198. package/foundation/config/project.test.mjs +3 -16
  199. package/foundation/discovery/authoring-self-docs.d.mts +6 -0
  200. package/foundation/discovery/authoring-self-docs.mjs +17 -7
  201. package/foundation/discovery/authoring-self-docs.test.mjs +3 -2
  202. package/foundation/discovery/authoring-surface.d.mts +74 -0
  203. package/foundation/discovery/authoring-surface.mjs +525 -0
  204. package/foundation/discovery/authoring-surface.test.mjs +392 -0
  205. package/foundation/discovery/cli-self-docs.d.mts +113 -0
  206. package/foundation/discovery/cli-self-docs.mjs +514 -0
  207. package/foundation/discovery/cli-self-docs.test.mjs +437 -0
  208. package/foundation/discovery/component-loader.d.mts +35 -38
  209. package/foundation/discovery/component-loader.mjs +53 -222
  210. package/foundation/discovery/docs-discovery.d.mts +3 -2
  211. package/foundation/discovery/docs-discovery.mjs +14 -17
  212. package/foundation/discovery/docs-discovery.test.mjs +15 -15
  213. package/foundation/discovery/docs-section-key.d.mts +19 -8
  214. package/foundation/discovery/docs-section-key.mjs +119 -32
  215. package/foundation/discovery/docs-section-key.test.mjs +41 -19
  216. package/foundation/discovery/template-adapter.d.mts +7 -0
  217. package/foundation/discovery/template-adapter.mjs +27 -40
  218. package/foundation/discovery/template-adapter.test.mjs +15 -0
  219. package/foundation/discovery/theme-discovery.d.mts +67 -7
  220. package/foundation/discovery/theme-discovery.mjs +916 -186
  221. package/foundation/discovery/theme-discovery.test.mjs +613 -219
  222. package/foundation/doc-compiler/bundle.d.mts +47 -0
  223. package/foundation/doc-compiler/bundle.mjs +218 -0
  224. package/foundation/doc-compiler/bundle.test.mjs +255 -0
  225. package/foundation/doc-compiler/compile.d.mts +200 -0
  226. package/foundation/doc-compiler/compile.mjs +259 -9
  227. package/foundation/doc-compiler/diagnostics.d.mts +126 -0
  228. package/foundation/doc-compiler/diagnostics.mjs +277 -0
  229. package/foundation/doc-compiler/doc-compiler.test.mjs +28 -1
  230. package/foundation/doc-compiler/doc-loads.test.mjs +1642 -0
  231. package/foundation/doc-compiler/import.d.mts +24 -0
  232. package/foundation/doc-compiler/import.mjs +59 -0
  233. package/foundation/doc-compiler/inputs.d.mts +102 -0
  234. package/foundation/doc-compiler/inputs.mjs +286 -0
  235. package/foundation/doc-compiler/inputs.test.mjs +299 -0
  236. package/foundation/doc-compiler/ir.d.mts +13 -0
  237. package/foundation/doc-compiler/ir.mjs +189 -12
  238. package/foundation/doc-compiler/lower-doc.test.mjs +492 -0
  239. package/foundation/doc-compiler/overlays.d.mts +37 -0
  240. package/foundation/doc-compiler/overlays.mjs +206 -0
  241. package/foundation/doc-compiler/parse-readable.d.mts +9 -0
  242. package/foundation/doc-compiler/parse-readable.mjs +29 -0
  243. package/foundation/doc-compiler/read.d.mts +126 -0
  244. package/foundation/doc-compiler/read.mjs +320 -0
  245. package/foundation/doc-compiler/read.test.mjs +313 -0
  246. package/foundation/doc-compiler/source.d.mts +33 -0
  247. package/foundation/doc-compiler/source.mjs +128 -0
  248. package/foundation/fs/file-protection.d.mts +33 -0
  249. package/foundation/fs/file-protection.mjs +825 -0
  250. package/foundation/fs/file-protection.test.mjs +250 -0
  251. package/foundation/integrations/autolink.d.mts +58 -1
  252. package/foundation/integrations/autolink.mjs +143 -57
  253. package/foundation/integrations/contribution-fixes.d.mts +145 -0
  254. package/foundation/integrations/contribution-fixes.mjs +1284 -0
  255. package/foundation/integrations/contribution-inventory.d.mts +1 -1
  256. package/foundation/integrations/contribution-inventory.mjs +17 -20
  257. package/foundation/integrations/contribution-inventory.test.mjs +67 -27
  258. package/foundation/integrations/integrations.d.mts +3 -0
  259. package/foundation/integrations/integrations.mjs +11 -97
  260. package/foundation/integrations/provider-ledger.test.mjs +275 -0
  261. package/foundation/integrations/provider-resolution.d.mts +152 -0
  262. package/foundation/integrations/provider-resolution.mjs +576 -0
  263. package/foundation/integrations/provider-resolution.test.mjs +369 -0
  264. package/foundation/integrations/theme-descriptor.d.mts +8 -0
  265. package/foundation/integrations/theme-descriptor.mjs +44 -0
  266. package/foundation/integrations/validate-contributions.mjs +104 -10
  267. package/foundation/response/error-codes.d.mts +3 -1
  268. package/foundation/response/error-codes.d.ts +2 -0
  269. package/foundation/response/error-codes.doc.mjs +12 -2
  270. package/foundation/response/error-codes.mjs +7 -1
  271. package/foundation/response/error-codes.test.mjs +55 -11
  272. package/foundation/response/response-types.doc.mjs +1 -1
  273. package/foundation/response/response.doc.mjs +1 -1
  274. package/foundation/text/string-utils.mjs +22 -10
  275. package/package.json +10 -9
  276. package/assets/templates/themes/manifest.json +0 -95
@@ -64,6 +64,8 @@
64
64
  * | 'ERR_UNKNOWN_FEATURE'
65
65
  * | 'ERR_UNKNOWN_CODEMOD'
66
66
  * | 'ERR_CODEMOD_FAILED'
67
+ * | 'ERR_CODEMOD_PROTECTED'
68
+ * | 'ERR_CODEMOD_PROTECTION_SOURCE'
67
69
  * | 'ERR_NOT_FOUND'
68
70
  * | 'ERR_NO_DOC'
69
71
  * | 'ERR_NO_SHOWCASE'
@@ -161,6 +163,10 @@ export const ERROR_CODES = Object.freeze({
161
163
  ERR_UNKNOWN_CODEMOD: 'ERR_UNKNOWN_CODEMOD',
162
164
  /** One or more codemods failed during an upgrade run. */
163
165
  ERR_CODEMOD_FAILED: 'ERR_CODEMOD_FAILED',
166
+ /** A required codemod change remains blocked by a protected consumer file. */
167
+ ERR_CODEMOD_PROTECTED: 'ERR_CODEMOD_PROTECTED',
168
+ /** A working-tree protection declaration could not be read or parsed. */
169
+ ERR_CODEMOD_PROTECTION_SOURCE: 'ERR_CODEMOD_PROTECTION_SOURCE',
164
170
  /** A generic discover/lookup query matched nothing in any package. */
165
171
  ERR_NOT_FOUND: 'ERR_NOT_FOUND',
166
172
 
@@ -185,7 +191,7 @@ export const ERROR_CODES = Object.freeze({
185
191
  ERR_WRITE_FAILED: 'ERR_WRITE_FAILED',
186
192
 
187
193
  // ── Theme build ──────────────────────────────────────────────────
188
- /** A theme definition or contributed theme catalog is invalid. */
194
+ /** A theme definition or contributed theme descriptor is invalid. */
189
195
  ERR_THEME_INVALID: 'ERR_THEME_INVALID',
190
196
  /** A theme file could not be loaded / parsed into a defineTheme result. */
191
197
  ERR_THEME_LOAD: 'ERR_THEME_LOAD',
@@ -86,6 +86,8 @@ describe('error codes: shipped set', () => {
86
86
  'ERR_AMBIGUOUS_TEMPLATE',
87
87
  'ERR_AMBIGUOUS_THEME',
88
88
  'ERR_CODEMOD_FAILED',
89
+ 'ERR_CODEMOD_PROTECTED',
90
+ 'ERR_CODEMOD_PROTECTION_SOURCE',
89
91
  'ERR_CORE_INCOMPATIBLE',
90
92
  'ERR_CORE_NOT_FOUND',
91
93
  'ERR_DEP_MISSING',
@@ -135,25 +137,67 @@ describe('error codes: shipped set', () => {
135
137
  ];
136
138
 
137
139
  it('still carries every shipped code, spelled the same', () => {
138
- const missing = SHIPPED.filter(code => !isErrorCode(code) || ERROR_CODES[code] !== code);
140
+ const missing = SHIPPED.filter(
141
+ code => !isErrorCode(code) || ERROR_CODES[code] !== code,
142
+ );
139
143
  expect(missing, 'shipped codes removed or respelled').toEqual([]);
140
144
  });
141
145
  });
142
146
 
143
147
  describe('error codes: end-to-end JSON envelopes', () => {
144
148
  const cases = [
145
- {name: 'unknown component', args: ['component', 'Bogus', '--json'], code: 'ERR_UNKNOWN_COMPONENT'},
146
- {name: 'unknown hook', args: ['hook', 'bogusHook', '--json'], code: 'ERR_UNKNOWN_HOOK'},
147
- {name: 'unknown topic', args: ['docs', 'bogusTopic', '--json'], code: 'ERR_UNKNOWN_TOPIC'},
148
- {name: 'unknown template', args: ['template', 'bogusTemplate', '--json'], code: 'ERR_UNKNOWN_TEMPLATE'},
149
- {name: 'unknown command', args: ['bogus-cmd', '--json'], code: 'ERR_UNKNOWN_COMMAND'},
150
- {name: 'invalid --lang', args: ['docs', 'color', '--lang', 'fr', '--json'], code: 'ERR_INVALID_LANG'},
151
- {name: 'invalid --detail', args: ['docs', 'color', '--detail', 'bogus', '--json'], code: 'ERR_INVALID_DETAIL'},
152
- {name: 'unknown option', args: ['component', 'Button', '--bogus-flag', '--json'], code: 'ERR_INVALID_OPTION'},
153
- {name: 'missing argument', args: ['theme', 'build', '--json'], code: 'ERR_MISSING_ARGUMENT'},
149
+ {
150
+ name: 'unknown component',
151
+ args: ['component', 'Bogus', '--json'],
152
+ code: 'ERR_UNKNOWN_COMPONENT',
153
+ },
154
+ {
155
+ name: 'unknown hook',
156
+ args: ['hook', 'bogusHook', '--json'],
157
+ code: 'ERR_UNKNOWN_HOOK',
158
+ },
159
+ {
160
+ name: 'unknown topic',
161
+ args: ['docs', 'bogusTopic', '--json'],
162
+ code: 'ERR_UNKNOWN_TOPIC',
163
+ },
164
+ {
165
+ name: 'unknown template',
166
+ args: ['template', 'bogusTemplate', '--json'],
167
+ code: 'ERR_UNKNOWN_TEMPLATE',
168
+ },
169
+ {
170
+ name: 'unknown command',
171
+ args: ['bogus-cmd', '--json'],
172
+ code: 'ERR_UNKNOWN_COMMAND',
173
+ },
174
+ {
175
+ name: 'invalid --lang',
176
+ args: ['docs', 'color', '--lang', 'fr', '--json'],
177
+ code: 'ERR_INVALID_LANG',
178
+ },
179
+ {
180
+ name: 'invalid --detail',
181
+ args: ['docs', 'color', '--detail', 'bogus', '--json'],
182
+ code: 'ERR_INVALID_DETAIL',
183
+ },
184
+ {
185
+ name: 'unknown option',
186
+ args: ['component', 'Button', '--bogus-flag', '--json'],
187
+ code: 'ERR_INVALID_OPTION',
188
+ },
189
+ {
190
+ name: 'missing argument',
191
+ args: ['theme', 'build', '--json'],
192
+ code: 'ERR_MISSING_ARGUMENT',
193
+ },
154
194
  // `theme` is not on the --json allowlist, so --json on any theme subcommand
155
195
  // is rejected at the preAction gate with a stable invalid-option code.
156
- {name: 'json not supported', args: ['theme', 'bogus-sub', '--json'], code: 'ERR_INVALID_OPTION'},
196
+ {
197
+ name: 'json not supported',
198
+ args: ['theme', 'bogus-sub', '--json'],
199
+ code: 'ERR_INVALID_OPTION',
200
+ },
157
201
  ];
158
202
 
159
203
  for (const {name, args, code} of cases) {
@@ -13,7 +13,7 @@ export const doc = {
13
13
  type: 'enum',
14
14
  name: 'response-types',
15
15
  displayName: 'Response Types',
16
- namespace: 'cli',
16
+ namespace: 'cli/api',
17
17
  description:
18
18
  'The `type` discriminant present on every --json success envelope. Consumers switch on it to narrow `data`.',
19
19
  members: [
@@ -12,7 +12,7 @@ export const doc = {
12
12
  type: 'schema',
13
13
  name: 'output',
14
14
  displayName: 'Output Envelope',
15
- namespace: 'cli',
15
+ namespace: 'cli/api',
16
16
  description:
17
17
  'The single JSON envelope every command emits under --json. Success is ' +
18
18
  '{ apiVersion, type, data, meta? }; failure is { apiVersion, error, code, ' +
@@ -56,7 +56,7 @@ export function findClosestComponents(name, components, maxDistance = 3) {
56
56
  * @returns {Promise<{name: string, score: number, reason: string}[]>}
57
57
  */
58
58
  export async function searchComponents(needle, coreDir, components) {
59
- const {pathToFileURL} = await import('node:url');
59
+ const {readDocView} = await import('../doc-compiler/read.mjs');
60
60
  const fs = await import('node:fs');
61
61
  const path = await import('node:path');
62
62
 
@@ -100,8 +100,10 @@ export async function searchComponents(needle, coreDir, components) {
100
100
  // Levenshtein on name
101
101
  const dist = levenshteinDistance(term, compLower);
102
102
  if (dist === 1) addMatch(comp, 80, 'similar name (distance ' + dist + ')');
103
- else if (dist === 2) addMatch(comp, 40, 'similar name (distance ' + dist + ')');
104
- else if (dist === 3) addMatch(comp, 20, 'similar name (distance ' + dist + ')');
103
+ else if (dist === 2)
104
+ addMatch(comp, 40, 'similar name (distance ' + dist + ')');
105
+ else if (dist === 3)
106
+ addMatch(comp, 20, 'similar name (distance ' + dist + ')');
105
107
  }
106
108
 
107
109
  // --- Pass 2: Keyword + description matching (async, reads doc files) ---
@@ -124,15 +126,22 @@ export async function searchComponents(needle, coreDir, components) {
124
126
  for (const entry of entries) {
125
127
  if (!entry.isDirectory()) continue;
126
128
  const nested = path.join(srcDir, entry.name, comp, comp + '.doc.mjs');
127
- if (fs.existsSync(nested)) { docPath = nested; break; }
129
+ if (fs.existsSync(nested)) {
130
+ docPath = nested;
131
+ break;
132
+ }
128
133
  }
129
134
  }
130
135
 
131
136
  if (!docPath) continue;
132
137
 
133
138
  try {
134
- const mod = await import(pathToFileURL(docPath).href);
135
- const docs = mod.docs;
139
+ // Only the legacy `docs` export has ever been indexed here.
140
+ const docs = await readDocView(docPath, {
141
+ root: 'components',
142
+ loader: 'native',
143
+ exports: ['docs'],
144
+ });
136
145
  if (!docs) continue;
137
146
 
138
147
  // Keyword matching
@@ -157,8 +166,10 @@ export async function searchComponents(needle, coreDir, components) {
157
166
  }
158
167
 
159
168
  const dist = levenshteinDistance(term, kwLower);
160
- if (dist === 1) addMatch(comp, 70, 'keyword "' + kw + '" (distance ' + dist + ')');
161
- else if (dist === 2) addMatch(comp, 30, 'keyword "' + kw + '" (distance ' + dist + ')');
169
+ if (dist === 1)
170
+ addMatch(comp, 70, 'keyword "' + kw + '" (distance ' + dist + ')');
171
+ else if (dist === 2)
172
+ addMatch(comp, 30, 'keyword "' + kw + '" (distance ' + dist + ')');
162
173
  }
163
174
  }
164
175
 
@@ -191,8 +202,9 @@ export async function searchComponents(needle, coreDir, components) {
191
202
  }
192
203
  }
193
204
 
194
- const results = Array.from(scored.values())
195
- .sort((a, b) => b.score - a.score || a.name.localeCompare(b.name));
205
+ const results = Array.from(scored.values()).sort(
206
+ (a, b) => b.score - a.score || a.name.localeCompare(b.name),
207
+ );
196
208
 
197
209
  return results;
198
210
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astryxdesign/cli",
3
- "version": "0.6.3-canary.db4e378",
3
+ "version": "0.6.3-canary.db7b338",
4
4
  "displayName": "CLI",
5
5
  "description": "Scaffold projects, browse templates, generate themes, and get agent-ready docs from the command line.",
6
6
  "author": "Meta Open Source",
@@ -91,6 +91,7 @@
91
91
  "@babel/types": "7.29.8",
92
92
  "ast-types": "0.16.3",
93
93
  "commander": "^12.1.0",
94
+ "ignore": "^7.0.5",
94
95
  "jiti": "^2.7.0",
95
96
  "jscodeshift": "^17.3.0",
96
97
  "node-diff3": "3.2.1",
@@ -100,10 +101,10 @@
100
101
  "zod": "^4.4.3"
101
102
  },
102
103
  "peerDependencies": {
103
- "@astryxdesign/charts": "0.6.3-canary.db4e378",
104
- "@astryxdesign/core": "0.6.3-canary.db4e378",
105
- "@astryxdesign/lab": "0.6.3-canary.db4e378",
106
- "@astryxdesign/theme-neutral": "0.6.3-canary.db4e378"
104
+ "@astryxdesign/charts": "0.6.3-canary.db7b338",
105
+ "@astryxdesign/core": "0.6.3-canary.db7b338",
106
+ "@astryxdesign/lab": "0.6.3-canary.db7b338",
107
+ "@astryxdesign/theme-neutral": "0.6.3-canary.db7b338"
107
108
  },
108
109
  "peerDependenciesMeta": {
109
110
  "@astryxdesign/charts": {
@@ -120,10 +121,10 @@
120
121
  }
121
122
  },
122
123
  "devDependencies": {
123
- "@astryxdesign/charts": "0.6.3-canary.db4e378",
124
- "@astryxdesign/core": "0.6.3-canary.db4e378",
125
- "@astryxdesign/lab": "0.6.3-canary.db4e378",
126
- "@astryxdesign/theme-neutral": "0.6.3-canary.db4e378",
124
+ "@astryxdesign/charts": "0.6.3-canary.db7b338",
125
+ "@astryxdesign/core": "0.6.3-canary.db7b338",
126
+ "@astryxdesign/lab": "0.6.3-canary.db7b338",
127
+ "@astryxdesign/theme-neutral": "0.6.3-canary.db7b338",
127
128
  "@heroicons/react": "^2.2.0",
128
129
  "@stylexjs/stylex": "^0.19.0",
129
130
  "@types/babel__core": "^7.20.5",
@@ -1,95 +0,0 @@
1
- {
2
- "version": 1,
3
- "generatedBy": "scripts/generate-cli-themes.mjs",
4
- "themes": [
5
- {
6
- "slug": "butter",
7
- "displayName": "Butter",
8
- "description": "Warm, creamy yellows with a friendly blue accent. Playful enough for consumer surfaces, soft enough to stay readable.",
9
- "maintained": false,
10
- "entry": "butterTheme.ts",
11
- "exportName": "butterTheme",
12
- "files": [
13
- "butterTheme.ts",
14
- "icons.tsx"
15
- ]
16
- },
17
- {
18
- "slug": "chocolate",
19
- "displayName": "Chocolate",
20
- "description": "Warm chocolate theme for Astryx — rich brown palette with Fraunces headings, Albert Sans body, and Lucide icons",
21
- "maintained": false,
22
- "entry": "chocolateTheme.ts",
23
- "exportName": "chocolateTheme",
24
- "files": [
25
- "chocolateTheme.ts",
26
- "icons.tsx"
27
- ]
28
- },
29
- {
30
- "slug": "gothic",
31
- "displayName": "Gothic",
32
- "description": "Deep blue-grays and a signature display serif. Dramatic and editorial, for surfaces that want to be remembered.",
33
- "maintained": false,
34
- "entry": "gothicTheme.ts",
35
- "exportName": "gothicTheme",
36
- "files": [
37
- "gothicTheme.ts",
38
- "icons.tsx"
39
- ]
40
- },
41
- {
42
- "slug": "matcha",
43
- "displayName": "Matcha",
44
- "description": "Earthy greens with a calm, organic feel. Naturalistic and grounded, great for wellness or content-first apps.",
45
- "maintained": false,
46
- "entry": "matchaTheme.ts",
47
- "exportName": "matchaTheme",
48
- "files": [
49
- "matchaTheme.ts",
50
- "icons.tsx"
51
- ]
52
- },
53
- {
54
- "slug": "neutral",
55
- "displayName": "Neutral",
56
- "description": "Restrained warm grays. Minimal and quiet, so the content stays the focus.",
57
- "maintained": true,
58
- "entry": "neutralTheme.ts",
59
- "exportName": "neutralTheme",
60
- "files": [
61
- "neutralTheme.ts",
62
- "icons.tsx",
63
- "neutralPalettes.ts",
64
- "neutralPalettes.generated.ts",
65
- "neutralPaletteRefs.generated.ts",
66
- "neutralPalettes.generated.receipt.json",
67
- "palette.config.json"
68
- ]
69
- },
70
- {
71
- "slug": "stone",
72
- "displayName": "Stone",
73
- "description": "Warm stone and slate, earthy and understated, with just enough character to feel handcrafted.",
74
- "maintained": false,
75
- "entry": "stoneTheme.ts",
76
- "exportName": "stoneTheme",
77
- "files": [
78
- "stoneTheme.ts",
79
- "icons.tsx"
80
- ]
81
- },
82
- {
83
- "slug": "y2k",
84
- "displayName": "Y2K",
85
- "description": "Hot pinks, lime greens, and Poppins. Bubbly, playful, and unmistakably retro.",
86
- "maintained": false,
87
- "entry": "y2kTheme.ts",
88
- "exportName": "y2kTheme",
89
- "files": [
90
- "y2kTheme.ts",
91
- "icons.tsx"
92
- ]
93
- }
94
- ]
95
- }