@astryxdesign/cli 0.1.8-canary.0c4d8d7 → 0.1.8-canary.0db5dfd

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 (303) hide show
  1. package/{src/api → api/blog}/blog.mjs +42 -6
  2. package/{src/api → api/blog}/blog.test.mjs +2 -2
  3. package/api/build/build.mjs +92 -0
  4. package/api/build/build.test.mjs +92 -0
  5. package/{src/api → api/component}/component.mjs +49 -26
  6. package/{src/api → api/discover}/discover.mjs +55 -18
  7. package/{src/api → api/docs}/docs.mjs +47 -21
  8. package/{src/api → api/doctor}/doctor.mjs +11 -8
  9. package/{src/api → api/hook}/hook.mjs +11 -11
  10. package/{src/api → api}/index.mjs +16 -9
  11. package/{src/api → api/integration}/validate-integration.mjs +48 -15
  12. package/{src/api → api/integration}/validate-integration.test.mjs +1 -1
  13. package/{src/api → api/layout}/layout.mjs +66 -17
  14. package/{src/api → api/layout}/layout.test.mjs +1 -1
  15. package/{src/api → api/search}/search.mjs +71 -12
  16. package/api/swizzle/swizzle.mjs +283 -0
  17. package/{src/commands → api/swizzle}/swizzle.test.mjs +26 -1
  18. package/{src/api → api/template}/template-integration.test.mjs +2 -2
  19. package/{src/api → api/template}/template-suffix.test.mjs +3 -3
  20. package/{src/api → api/template}/template.mjs +96 -19
  21. package/{src/api → api/theme}/theme-add.mjs +35 -7
  22. package/{src → authoring}/codemod.mjs +6 -6
  23. package/{src → authoring}/config.test.mjs +1 -1
  24. package/{src → authoring}/doc.mjs +1 -1
  25. package/{src → authoring}/doc.test.mjs +1 -1
  26. package/{src → authoring}/template.mjs +1 -1
  27. package/bin/astryx.mjs +12 -10
  28. package/{src → cli}/commands/blog.mjs +48 -7
  29. package/{src → cli}/commands/build-theme.mjs +125 -46
  30. package/{src → cli}/commands/build.mjs +33 -57
  31. package/{src → cli}/commands/component/index.mjs +49 -22
  32. package/{src → cli}/commands/component-ownership.test.mjs +3 -3
  33. package/{src → cli}/commands/component-package.test.mjs +1 -1
  34. package/{src → cli}/commands/component-resolution.test.mjs +2 -2
  35. package/{src → cli}/commands/discover.mjs +17 -8
  36. package/{src → cli}/commands/docs.mjs +39 -7
  37. package/{src → cli}/commands/docs.test.mjs +1 -1
  38. package/{src → cli}/commands/doctor.mjs +3 -3
  39. package/{src → cli}/commands/doctor.test.mjs +2 -2
  40. package/{src → cli}/commands/ensure-core-built.mjs +3 -2
  41. package/{src → cli}/commands/external-showcase.test.mjs +1 -1
  42. package/{src → cli}/commands/hook/index.mjs +37 -14
  43. package/{src → cli}/commands/import-hint-correctness.test.mjs +1 -1
  44. package/{src → cli}/commands/init.mjs +20 -9
  45. package/{src → cli}/commands/layout.mjs +58 -18
  46. package/{src → cli}/commands/search.mjs +19 -12
  47. package/{src → cli}/commands/search.test.mjs +1 -1
  48. package/{src → cli}/commands/setup-nudge.test.mjs +1 -1
  49. package/cli/commands/swizzle.mjs +103 -0
  50. package/{src → cli}/commands/template.mjs +73 -22
  51. package/{src → cli}/commands/template.path-safety.test.mjs +2 -2
  52. package/{src → cli}/commands/upgrade.integration-policy.test.mjs +1 -1
  53. package/{src → cli}/commands/upgrade.mjs +160 -52
  54. package/{src → cli}/commands/upgrade.test.mjs +1 -1
  55. package/{src → cli}/commands/validate-integration.mjs +17 -37
  56. package/{src → cli}/index.mjs +17 -15
  57. package/{src/codemods → codemods}/ensure-jscodeshift.mjs +1 -1
  58. package/{src/codemods → codemods}/integration-discovery.mjs +6 -3
  59. package/{src/codemods → codemods}/integration-discovery.test.mjs +1 -1
  60. package/{src/codemods → codemods}/integration-runner.mjs +8 -3
  61. package/{src/codemods → codemods}/registry.mjs +3 -1
  62. package/{src/codemods → codemods}/run-codemod.mjs +17 -10
  63. package/{src/codemods → codemods}/runner.mjs +22 -12
  64. package/{src/codemods → codemods}/transforms/v0.0.10/remove-size-props.mjs +9 -4
  65. package/{src/codemods → codemods}/transforms/v0.0.12/add-is-icon-only.mjs +27 -22
  66. package/{src/codemods → codemods}/transforms/v0.0.13/icon-name-deprecations.mjs +12 -5
  67. package/{src/codemods → codemods}/transforms/v0.0.13/rename-attachments-to-drawer.mjs +15 -8
  68. package/{src/codemods → codemods}/transforms/v0.0.13/toolbar-density-to-size.mjs +10 -4
  69. package/{src/codemods → codemods}/transforms/v0.0.14/rename-action-props.mjs +11 -5
  70. package/{src/codemods → codemods}/transforms/v0.0.14/rename-section-wash-to-muted.mjs +11 -6
  71. package/{src/codemods → codemods}/transforms/v0.0.14/rename-status-variants.mjs +15 -10
  72. package/{src/codemods → codemods}/transforms/v0.0.15/migrate-item-children-to-endcontent.mjs +13 -8
  73. package/{src/codemods → codemods}/transforms/v0.0.15/migrate-selector-children-to-render-option.mjs +18 -13
  74. package/{src/codemods → codemods}/transforms/v0.0.15/migrate-theme-selectors-to-data-attrs.mjs +8 -4
  75. package/{src/codemods → codemods}/transforms/v0.0.15/rename-date-picker-to-input.mjs +11 -6
  76. package/{src/codemods → codemods}/transforms/v0.0.15/rename-imperative-ref-to-handleRef.mjs +6 -1
  77. package/{src/codemods → codemods}/transforms/v0.0.15/rename-isStreaming-to-isStopShown.mjs +6 -1
  78. package/{src/codemods → codemods}/transforms/v0.0.15/rename-stack-element-to-as.mjs +8 -3
  79. package/{src/codemods → codemods}/transforms/v0.0.2/migrate-badge-dot-to-statusdot.mjs +17 -10
  80. package/{src/codemods → codemods}/transforms/v0.0.2/migrate-gap-to-numeric.mjs +7 -1
  81. package/{src/codemods → codemods}/transforms/v0.0.2/migrate-isFullBleed-to-padding.mjs +9 -4
  82. package/{src/codemods → codemods}/transforms/v0.0.2/migrate-useXDSIcon-to-getIcon.mjs +12 -7
  83. package/{src/codemods → codemods}/transforms/v0.0.2/rename-banner-endButton-to-endContent.mjs +7 -2
  84. package/{src/codemods → codemods}/transforms/v0.0.2/rename-form-tooltip-startIcon.mjs +8 -2
  85. package/{src/codemods → codemods}/transforms/v0.0.2/rename-isShown-to-isOpen.mjs +7 -2
  86. package/{src/codemods → codemods}/transforms/v0.0.2/rename-selector-items-to-options.mjs +7 -2
  87. package/{src/codemods → codemods}/transforms/v0.0.2/rename-sidenav-header-to-heading.mjs +11 -4
  88. package/{src/codemods → codemods}/transforms/v0.0.2/rename-topnav-title-to-heading.mjs +10 -4
  89. package/{src/codemods → codemods}/transforms/v0.0.2/unify-uncontrolled-to-defaultX.mjs +7 -2
  90. package/{src/codemods → codemods}/transforms/v0.0.2/unify-visibility-to-onOpenChange.mjs +10 -5
  91. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-badge-children-to-label.mjs +7 -2
  92. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-collapse-to-collapsible.mjs +9 -3
  93. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-radius-tokens.mjs +11 -5
  94. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-shadow-tokens.mjs +13 -6
  95. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-skeleton-radius.mjs +7 -1
  96. package/{src/codemods → codemods}/transforms/v0.0.6/migrate-token-names.mjs +11 -5
  97. package/{src/codemods → codemods}/transforms/v0.0.7/rename-banner-variant-to-container.mjs +8 -3
  98. package/{src/codemods → codemods}/transforms/v0.0.8/migrate-token-renames.mjs +15 -8
  99. package/{src/codemods → codemods}/transforms/v0.0.8/rename-endslot-to-endcontent.mjs +7 -2
  100. package/{src/codemods → codemods}/transforms/v0.1.0/drop-xds-prefix-imports.mjs +19 -14
  101. package/{src/codemods → codemods}/transforms/v0.1.0/migrate-xds-css-surfaces.mjs +21 -17
  102. package/{src/codemods → codemods}/transforms/v0.1.0/migrate-xds-declare-module.mjs +7 -2
  103. package/{src/codemods → codemods}/transforms/v0.1.0/migrate-xds-module-specifiers.mjs +16 -11
  104. package/{src/codemods → codemods}/transforms/v0.1.2/rename-text-color-active-to-accent.mjs +15 -9
  105. package/{src/codemods → codemods}/transforms/v0.1.3/migrate-layout-components-to-experimental.mjs +17 -12
  106. package/{src/codemods → codemods}/transforms/v0.1.5/rename-switch-label-spacing-default-to-hug.mjs +15 -9
  107. package/{src/codemods → codemods}/transforms/v0.1.7/migrate-table-tableprops-to-direct-props.mjs +17 -10
  108. package/{src/codemods → codemods}/transforms/v0.1.7/rename-table-renderprops-styles-to-xstyle.mjs +18 -13
  109. package/{src/codemods → codemods}/transforms/v0.1.8/rename-avatar-size-scale.mjs +15 -10
  110. package/docs/internationalization.doc.mjs +92 -46
  111. package/{src/commands → lib/agent-docs}/agent-docs.mjs +30 -11
  112. package/{src/commands → lib/agent-docs}/agent-docs.path-safety.test.mjs +1 -1
  113. package/{src/lib → lib}/component-discovery.mjs +44 -2
  114. package/{src/lib → lib}/component-format.mjs +65 -24
  115. package/{src/lib → lib}/component-loader.mjs +27 -13
  116. package/{src/lib → lib}/componentDocOverlay.test.mjs +0 -1
  117. package/{src/lib → lib}/error-codes.test.mjs +1 -1
  118. package/{src/lib → lib}/hook-discovery.mjs +14 -1
  119. package/{src/lib → lib}/hook-format.mjs +29 -5
  120. package/{src/lib → lib}/integration-warnings.mjs +2 -2
  121. package/{src/lib → lib}/integrations.mjs +20 -0
  122. package/{src/lib → lib}/integrations.test.mjs +1 -1
  123. package/{src/lib → lib}/json-contract.test.mjs +1 -1
  124. package/{src/lib → lib}/json-shim.mjs +10 -5
  125. package/{src/lib → lib}/json-shim.test.mjs +1 -1
  126. package/{src/lib → lib}/levenshtein.mjs +6 -0
  127. package/{src/lib → lib}/manifest.mjs +7 -5
  128. package/{src/lib → lib}/manifest.test.mjs +2 -2
  129. package/{src/lib → lib}/module-loader.mjs +1 -0
  130. package/{src/lib → lib}/package-scanner.mjs +47 -0
  131. package/{src/lib → lib}/project.mjs +48 -18
  132. package/{src/lib → lib}/project.test.mjs +1 -1
  133. package/{src/lib → lib}/resolve-theme.mjs +5 -0
  134. package/{src/lib → lib}/string-utils.mjs +15 -0
  135. package/{src/lib → lib}/term-log.mjs +12 -3
  136. package/{src/lib → lib}/xle/browser.mjs +18 -8
  137. package/{src/lib → lib}/xle/expand.mjs +155 -22
  138. package/{src/lib → lib}/xle/parse.mjs +119 -13
  139. package/{src/lib → lib}/xle/print.mjs +54 -14
  140. package/{src/lib → lib}/xle/registry-core.mjs +28 -3
  141. package/{src/lib → lib}/xle/registry.mjs +9 -4
  142. package/{src/lib → lib}/xle/splice.mjs +13 -2
  143. package/{src/lib → lib}/xle/validate.mjs +95 -14
  144. package/lib/xle/xle-ast.d.ts +214 -0
  145. package/package.json +33 -26
  146. package/scripts/postinstall.mjs +4 -4
  147. package/templates/blocks/components/Avatar/AvatarShowcase.tsx +1 -1
  148. package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.doc.mjs +19 -0
  149. package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider01ShippedLocale.tsx +46 -0
  150. package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider02Overrides.doc.mjs +14 -0
  151. package/templates/blocks/components/InternationalizationProvider/InternationalizationProvider02Overrides.tsx +33 -0
  152. package/{src/types → types}/api.contract.assert.ts +17 -8
  153. package/{src/types → types}/api.d.ts +106 -0
  154. package/{src/types → types}/base.d.ts +17 -2
  155. package/types/build.d.ts +53 -0
  156. package/types/codemod.d.ts +166 -0
  157. package/{src/types → types}/component.d.ts +1 -1
  158. package/{src/types → types}/discover.d.ts +1 -1
  159. package/{src/types → types}/docs.d.ts +1 -4
  160. package/{src/types → types}/hook.d.ts +1 -1
  161. package/types/jscodeshift.d.ts +19 -0
  162. package/types/layout.d.ts +74 -0
  163. package/types/theme.d.ts +53 -0
  164. package/{src/types → types}/upgrade.d.ts +8 -1
  165. package/{src/utils → utils}/paths.mjs +4 -1
  166. package/src/commands/swizzle.mjs +0 -417
  167. package/src/types/build.d.ts +0 -23
  168. package/src/types/codemod.d.ts +0 -81
  169. package/src/types/theme.d.ts +0 -23
  170. /package/{src/api → api/docs}/docOverlays.test.mjs +0 -0
  171. /package/{src/api → api}/error.mjs +0 -0
  172. /package/{src/api → api/integration}/integration-block-exports.test.mjs +0 -0
  173. /package/{src/api → api/template}/template.test.mjs +0 -0
  174. /package/{src → authoring}/codemod.test.mjs +0 -0
  175. /package/{src → authoring}/config.mjs +0 -0
  176. /package/{src → authoring}/integration.mjs +0 -0
  177. /package/{src → authoring}/template.test.mjs +0 -0
  178. /package/{src → cli}/cli-exit-codes.test.mjs +0 -0
  179. /package/{src → cli}/commands/build-theme.color-scheme.test.mjs +0 -0
  180. /package/{src → cli}/commands/build-theme.import-path.test.mjs +0 -0
  181. /package/{src → cli}/commands/build-theme.path-safety.test.mjs +0 -0
  182. /package/{src → cli}/commands/build-theme.prose.test.mjs +0 -0
  183. /package/{src → cli}/commands/build-theme.variants.test.mjs +0 -0
  184. /package/{src → cli}/commands/build-theme.watch.test.mjs +0 -0
  185. /package/{src → cli}/commands/cli-postinstall.test.mjs +0 -0
  186. /package/{src → cli}/commands/component.test.mjs +0 -0
  187. /package/{src → cli}/commands/detail-levels.test.mjs +0 -0
  188. /package/{src → cli}/commands/init.next-steps.test.mjs +0 -0
  189. /package/{src → cli}/commands/interactive-guard.test.mjs +0 -0
  190. /package/{src → cli}/commands/json-contract.test.mjs +0 -0
  191. /package/{src → cli}/commands/swizzle.path-safety.test.mjs +0 -0
  192. /package/{src → cli}/commands/swizzle.routing.test.mjs +0 -0
  193. /package/{src → cli}/commands/template.test.mjs +0 -0
  194. /package/{src → cli}/commands/upgrade.config-ordering.test.mjs +0 -0
  195. /package/{src → cli}/commands/validate-integration.test.mjs +0 -0
  196. /package/{src → cli}/update-hint-commands.test.mjs +0 -0
  197. /package/{src/codemods → codemods}/__tests__/registry.test.mjs +0 -0
  198. /package/{src/codemods → codemods}/__tests__/rename-imperative-ref-to-handleRef.test.mjs +0 -0
  199. /package/{src/codemods → codemods}/__tests__/rename-isStreaming-to-isStopShown.test.mjs +0 -0
  200. /package/{src/codemods → codemods}/__tests__/rename-section-wash-to-muted.test.mjs +0 -0
  201. /package/{src/codemods → codemods}/__tests__/runner.test.mjs +0 -0
  202. /package/{src/codemods → codemods}/__tests__/toolbar-density-to-size.test.mjs +0 -0
  203. /package/{src/codemods → codemods}/__tests__/validation.test.mjs +0 -0
  204. /package/{src/codemods → codemods}/transforms/v0.0.10/__tests__/remove-size-props.test.mjs +0 -0
  205. /package/{src/codemods → codemods}/transforms/v0.0.10/index.mjs +0 -0
  206. /package/{src/codemods → codemods}/transforms/v0.0.12/__tests__/add-is-icon-only.test.mjs +0 -0
  207. /package/{src/codemods → codemods}/transforms/v0.0.12/index.mjs +0 -0
  208. /package/{src/codemods → codemods}/transforms/v0.0.13/__tests__/icon-name-deprecations.test.mjs +0 -0
  209. /package/{src/codemods → codemods}/transforms/v0.0.13/__tests__/rename-attachments-to-drawer.test.mjs +0 -0
  210. /package/{src/codemods → codemods}/transforms/v0.0.13/index.mjs +0 -0
  211. /package/{src/codemods → codemods}/transforms/v0.0.14/__tests__/rename-action-props.test.mjs +0 -0
  212. /package/{src/codemods → codemods}/transforms/v0.0.14/__tests__/rename-status-variants.test.mjs +0 -0
  213. /package/{src/codemods → codemods}/transforms/v0.0.14/index.mjs +0 -0
  214. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/migrate-item-children-to-endcontent.test.mjs +0 -0
  215. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/migrate-selector-children-to-render-option.test.mjs +0 -0
  216. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/migrate-theme-selectors-to-data-attrs.test.mjs +0 -0
  217. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/rename-date-picker-to-input.test.mjs +0 -0
  218. /package/{src/codemods → codemods}/transforms/v0.0.15/__tests__/rename-stack-element-to-as.test.mjs +0 -0
  219. /package/{src/codemods → codemods}/transforms/v0.0.15/index.mjs +0 -0
  220. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-badge-dot-to-statusdot.test.mjs +0 -0
  221. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-gap-to-numeric.test.mjs +0 -0
  222. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-isFullBleed-to-padding.test.mjs +0 -0
  223. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/migrate-useXDSIcon-to-getIcon.test.mjs +0 -0
  224. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-banner-endButton-to-endContent.test.mjs +0 -0
  225. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-form-tooltip-startIcon.test.mjs +0 -0
  226. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-isShown-to-isOpen.test.mjs +0 -0
  227. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-selector-items-to-options.test.mjs +0 -0
  228. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-sidenav-header-to-heading.test.mjs +0 -0
  229. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/rename-topnav-title-to-heading.test.mjs +0 -0
  230. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/unify-uncontrolled-to-defaultX.test.mjs +0 -0
  231. /package/{src/codemods → codemods}/transforms/v0.0.2/__tests__/unify-visibility-to-onOpenChange.test.mjs +0 -0
  232. /package/{src/codemods → codemods}/transforms/v0.0.2/index.mjs +0 -0
  233. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-collapse-to-collapsible.test.mjs +0 -0
  234. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-radius-tokens.test.mjs +0 -0
  235. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-shadow-tokens.test.mjs +0 -0
  236. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-skeleton-radius.test.mjs +0 -0
  237. /package/{src/codemods → codemods}/transforms/v0.0.6/__tests__/migrate-token-names.test.mjs +0 -0
  238. /package/{src/codemods → codemods}/transforms/v0.0.6/index.mjs +0 -0
  239. /package/{src/codemods → codemods}/transforms/v0.0.7/__tests__/rename-banner-variant-to-container.test.mjs +0 -0
  240. /package/{src/codemods → codemods}/transforms/v0.0.7/index.mjs +0 -0
  241. /package/{src/codemods → codemods}/transforms/v0.0.8/__tests__/migrate-token-renames.test.mjs +0 -0
  242. /package/{src/codemods → codemods}/transforms/v0.0.8/__tests__/rename-endslot-to-endcontent.test.mjs +0 -0
  243. /package/{src/codemods → codemods}/transforms/v0.0.8/index.mjs +0 -0
  244. /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/drop-xds-prefix-imports.test.mjs +0 -0
  245. /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/migrate-xds-css-surfaces.test.mjs +0 -0
  246. /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/migrate-xds-declare-module.test.mjs +0 -0
  247. /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/migrate-xds-module-specifiers.test.mjs +0 -0
  248. /package/{src/codemods → codemods}/transforms/v0.1.0/__tests__/v0.1.0-ordering.test.mjs +0 -0
  249. /package/{src/codemods → codemods}/transforms/v0.1.0/index.mjs +0 -0
  250. /package/{src/codemods → codemods}/transforms/v0.1.2/__tests__/rename-text-color-active-to-accent.test.mjs +0 -0
  251. /package/{src/codemods → codemods}/transforms/v0.1.2/index.mjs +0 -0
  252. /package/{src/codemods → codemods}/transforms/v0.1.3/__tests__/migrate-layout-components-to-experimental.test.mjs +0 -0
  253. /package/{src/codemods → codemods}/transforms/v0.1.3/index.mjs +0 -0
  254. /package/{src/codemods → codemods}/transforms/v0.1.5/__tests__/rename-switch-label-spacing-default-to-hug.test.mjs +0 -0
  255. /package/{src/codemods → codemods}/transforms/v0.1.5/index.mjs +0 -0
  256. /package/{src/codemods → codemods}/transforms/v0.1.7/__tests__/migrate-table-tableprops-to-direct-props.test.mjs +0 -0
  257. /package/{src/codemods → codemods}/transforms/v0.1.7/__tests__/rename-table-renderprops-styles-to-xstyle.test.mjs +0 -0
  258. /package/{src/codemods → codemods}/transforms/v0.1.7/index.mjs +0 -0
  259. /package/{src/codemods → codemods}/transforms/v0.1.8/__tests__/rename-avatar-size-scale.test.mjs +0 -0
  260. /package/{src/codemods → codemods}/transforms/v0.1.8/index.mjs +0 -0
  261. /package/{src/commands → lib/agent-docs}/agent-docs.test.mjs +0 -0
  262. /package/{src/lib → lib}/cli-error.mjs +0 -0
  263. /package/{src/lib → lib}/cli-error.test.mjs +0 -0
  264. /package/{src/lib → lib}/component-discovery.importpath.test.mjs +0 -0
  265. /package/{src/lib → lib}/component-format.test.mjs +0 -0
  266. /package/{src/lib → lib}/component-loader.test.mjs +0 -0
  267. /package/{src/lib → lib}/config-cache.mjs +0 -0
  268. /package/{src/lib → lib}/config-cache.test.mjs +0 -0
  269. /package/{src/lib → lib}/config-schema.mjs +0 -0
  270. /package/{src/lib → lib}/error-codes.mjs +0 -0
  271. /package/{src/lib → lib}/integration-warnings.test.mjs +0 -0
  272. /package/{src/lib → lib}/json.mjs +0 -0
  273. /package/{src/lib → lib}/module-loader.test.mjs +0 -0
  274. /package/{src/lib → lib}/node-version.mjs +0 -0
  275. /package/{src/lib → lib}/node-version.test.mjs +0 -0
  276. /package/{src/lib → lib}/parse.mjs +0 -0
  277. /package/{src/lib → lib}/site.mjs +0 -0
  278. /package/{src/lib → lib}/xle/browser.d.ts +0 -0
  279. /package/{src/lib → lib}/xle/xle.test.mjs +0 -0
  280. /package/{src/schemas → schemas}/doc-schema.mjs +0 -0
  281. /package/{src/schemas → schemas}/template-schema.mjs +0 -0
  282. /package/{src/types → types}/config.d.ts +0 -0
  283. /package/{src/types → types}/doc.d.ts +0 -0
  284. /package/{src/types → types}/doctor.d.ts +0 -0
  285. /package/{src/types → types}/error-codes.d.ts +0 -0
  286. /package/{src/types → types}/index.d.ts +0 -0
  287. /package/{src/types → types}/integration.d.ts +0 -0
  288. /package/{src/types → types}/manifest.d.ts +0 -0
  289. /package/{src/types → types}/search.d.ts +0 -0
  290. /package/{src/types → types}/swizzle.d.ts +0 -0
  291. /package/{src/types → types}/template-api.d.ts +0 -0
  292. /package/{src/types → types}/template.d.ts +0 -0
  293. /package/{src/types → types}/validate-integration.d.ts +0 -0
  294. /package/{src/utils → utils}/github.mjs +0 -0
  295. /package/{src/utils → utils}/package-manager.mjs +0 -0
  296. /package/{src/utils → utils}/package-manager.test.mjs +0 -0
  297. /package/{src/utils → utils}/path-safety.mjs +0 -0
  298. /package/{src/utils → utils}/path-safety.test.mjs +0 -0
  299. /package/{src/utils → utils}/paths.test.mjs +0 -0
  300. /package/{src/utils → utils}/semver.mjs +0 -0
  301. /package/{src/utils → utils}/semver.test.mjs +0 -0
  302. /package/{src/utils → utils}/update-check.mjs +0 -0
  303. /package/{src/utils → utils}/update-check.test.mjs +0 -0
@@ -14,37 +14,34 @@
14
14
  * an integration package is not a failure).
15
15
  */
16
16
 
17
- import {jsonOut, humanLog} from '../lib/json.mjs';
17
+ import {jsonOut, humanLog} from '../../lib/json.mjs';
18
18
  import {
19
- validateLocalIntegration,
20
- validateInstalledIntegration,
19
+ validateIntegration,
21
20
  summarizeIssues,
22
- } from '../api/validate-integration.mjs';
21
+ } from '../../api/integration/validate-integration.mjs';
23
22
 
24
23
  /**
25
24
  * Render a validation result for humans.
26
- * @param {import('../api/validate-integration.mjs').ValidateResult} result
25
+ * @param {import('../../types/validate-integration').ValidateIntegrationResponse['data']} data
27
26
  */
28
- function printHuman(result) {
27
+ function printHuman(data) {
29
28
  const label =
30
- result.version != null
31
- ? `${result.name}@${result.version}`
32
- : result.name;
29
+ data.version != null ? `${data.name}@${data.version}` : data.name;
33
30
  humanLog(`Validating integration: ${label}`);
34
31
 
35
- if (result.issues.length === 0) {
32
+ if (data.issues.length === 0) {
36
33
  humanLog('\n\u2713 No issues found.');
37
34
  return;
38
35
  }
39
36
 
40
37
  humanLog('');
41
- for (const issue of result.issues) {
38
+ for (const issue of data.issues) {
42
39
  humanLog(` ${issue.severity} ${issue.code}: ${issue.message}`);
43
40
  }
44
41
 
45
- const {errors, warnings} = summarizeIssues(result.issues);
42
+ const {errors, warnings} = summarizeIssues(data.issues);
46
43
  humanLog(
47
- `\n${result.issues.length} issue(s): ${errors} error(s), ${warnings} warning(s)`,
44
+ `\n${data.issues.length} issue(s): ${errors} error(s), ${warnings} warning(s)`,
48
45
  );
49
46
  }
50
47
 
@@ -74,35 +71,18 @@ export function registerValidateIntegration(program) {
74
71
  .action(async pkg => {
75
72
  const json = program.opts().json || false;
76
73
 
77
- const result = pkg
78
- ? await validateInstalledIntegration(pkg)
79
- : await validateLocalIntegration();
80
-
81
- // No-arg + no local manifest: guidance, not an error.
82
- if (!result.found) {
83
- if (json) {
84
- jsonOut('integration.validate', {
85
- name: null,
86
- version: null,
87
- issues: [],
88
- });
89
- } else {
90
- humanLog(NO_MANIFEST_GUIDANCE);
91
- }
92
- return;
93
- }
74
+ const result = await validateIntegration(pkg);
94
75
 
95
76
  if (json) {
96
- jsonOut('integration.validate', {
97
- name: result.name ?? null,
98
- version: result.version ?? null,
99
- issues: result.issues,
100
- });
77
+ jsonOut(result.type, result.data);
78
+ } else if (result.data.name === null) {
79
+ // No-arg + no local manifest: guidance, not an error.
80
+ humanLog(NO_MANIFEST_GUIDANCE);
101
81
  } else {
102
- printHuman(result);
82
+ printHuman(result.data);
103
83
  }
104
84
 
105
- const {errors} = summarizeIssues(result.issues);
85
+ const {errors} = summarizeIssues(result.data.issues);
106
86
  if (errors > 0) {
107
87
  process.exitCode = 1;
108
88
  }
@@ -11,15 +11,15 @@ import {Command, Option} from 'commander';
11
11
  import {fileURLToPath} from 'node:url';
12
12
  import * as fs from 'node:fs';
13
13
  import * as path from 'node:path';
14
- import {checkForUpdate} from './utils/update-check.mjs';
15
- import {getCliInvocation} from './utils/package-manager.mjs';
16
- import {API_VERSION, setJsonMode} from './lib/json.mjs';
17
- import {buildManifest} from './lib/manifest.mjs';
18
- import {cliError} from './lib/cli-error.mjs';
19
- import {ERROR_CODES} from './lib/error-codes.mjs';
20
- import {levenshteinDistance} from './lib/string-utils.mjs';
21
- import {installJsonShim} from './lib/json-shim.mjs';
22
- import {isAstryxInitialized} from './commands/agent-docs.mjs';
14
+ import {checkForUpdate} from '../utils/update-check.mjs';
15
+ import {getCliInvocation} from '../utils/package-manager.mjs';
16
+ import {API_VERSION, setJsonMode} from '../lib/json.mjs';
17
+ import {buildManifest} from '../lib/manifest.mjs';
18
+ import {cliError} from '../lib/cli-error.mjs';
19
+ import {ERROR_CODES} from '../lib/error-codes.mjs';
20
+ import {levenshteinDistance} from '../lib/string-utils.mjs';
21
+ import {installJsonShim} from '../lib/json-shim.mjs';
22
+ import {isAstryxInitialized} from '../lib/agent-docs/agent-docs.mjs';
23
23
 
24
24
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
25
25
 
@@ -56,6 +56,7 @@ export const JSON_SUPPORTED = new Set([
56
56
  'docs',
57
57
  'discover',
58
58
  'search',
59
+ 'build',
59
60
  'swizzle',
60
61
  'template',
61
62
  'hook',
@@ -102,7 +103,7 @@ program
102
103
  if (extras.length > 0) {
103
104
  const unknown = String(extras[0]);
104
105
  const known = (program.commands || [])
105
- .filter((c) => !c._hidden && c.name() !== 'help')
106
+ .filter((c) => !(/** @type {any} */ (c)._hidden) && c.name() !== 'help')
106
107
  .map((c) => c.name());
107
108
  const close = known
108
109
  .map((name) => ({name, distance: levenshteinDistance(unknown.toLowerCase(), name.toLowerCase())}))
@@ -162,6 +163,7 @@ program
162
163
  */
163
164
  function fullCommandName(actionCommand) {
164
165
  const parts = [];
166
+ /** @type {import('commander').Command | null} */
165
167
  let cmd = actionCommand;
166
168
  while (cmd && cmd !== program) {
167
169
  parts.unshift(cmd.name());
@@ -307,10 +309,10 @@ for (const cmd of commands) {
307
309
  // Command fails to load but CLI still works
308
310
  program
309
311
  .command(cmd.name)
310
- .description(`(failed to load: ${e.message})`)
312
+ .description(`(failed to load: ${/** @type {any} */ (e).message})`)
311
313
  .action(() => {
312
314
  console.error(`Command "${cmd.name}" failed to load:`);
313
- console.error(e.message);
315
+ console.error(/** @type {any} */ (e).message);
314
316
  process.exit(1);
315
317
  });
316
318
  }
@@ -348,9 +350,9 @@ program
348
350
  .command('postinstall', {hidden: true})
349
351
  .action(() => {
350
352
  const r = getCliInvocation();
351
- const pad = (s, len) => s + ' '.repeat(Math.max(0, len - s.length));
353
+ const pad = (/** @type {string} */ s, /** @type {number} */ len) => s + ' '.repeat(Math.max(0, len - s.length));
352
354
  const W = 49; // inner width of the box
353
- const line = (s) => ` │ ${pad(s, W)}│`;
355
+ const line = (/** @type {string} */ s) => ` │ ${pad(s, W)}│`;
354
356
  console.log(`
355
357
  ╭${'─'.repeat(W + 2)}╮
356
358
  ${line('')}
@@ -376,5 +378,5 @@ ${line('')}
376
378
  // patch outputHelp on every command (root + subcommands). The shim
377
379
  // extends the --json contract to cover Commander's parse-time short
378
380
  // circuits (parse errors, unknown options, --help, unknown commands).
379
- // See packages/cli/src/lib/json-shim.mjs for the rationale.
381
+ // See packages/cli/lib/json-shim.mjs for the rationale.
380
382
  installJsonShim(program);
@@ -64,7 +64,7 @@ function installJscodeshift(silent = false) {
64
64
  log.success('jscodeshift installed.');
65
65
  return true;
66
66
  } catch (err) {
67
- log.error(`Failed to install jscodeshift: ${err.message}`);
67
+ log.error(`Failed to install jscodeshift: ${/** @type {any} */ (err).message}`);
68
68
  return false;
69
69
  }
70
70
  }
@@ -27,7 +27,7 @@
27
27
  import * as fs from 'node:fs';
28
28
  import * as path from 'node:path';
29
29
  import {loadModuleWithSchema} from '../lib/module-loader.mjs';
30
- import {CodemodEnvelopeSchema} from '../codemod.mjs';
30
+ import {CodemodEnvelopeSchema} from '../authoring/codemod.mjs';
31
31
  import {semverCompare} from '../utils/semver.mjs';
32
32
 
33
33
  /** File extensions recognized as codemod modules. */
@@ -41,6 +41,7 @@ const CODEMOD_EXTENSIONS = ['.ts', '.mjs', '.js'];
41
41
  * @returns {Array<{id: string, file: string}>}
42
42
  */
43
43
  function collectCodemodFiles(versionDir) {
44
+ /** @type {Array<{id: string, file: string}>} */
44
45
  const out = [];
45
46
 
46
47
  /** @param {string} dir */
@@ -74,7 +75,7 @@ function collectCodemodFiles(versionDir) {
74
75
  * for that version (across all integrations).
75
76
  */
76
77
  export async function discoverIntegrationCodemods(loadedIntegrations = []) {
77
- /** @type {Map<string, Array<{id: string, type: string, codemod: object, package: string}>>} */
78
+ /** @type {Map<string, Array<{id: string, type: 'code'|'config', codemod: object, package: string}>>} */
78
79
  const byVersion = new Map();
79
80
 
80
81
  for (const integration of loadedIntegrations ?? []) {
@@ -158,10 +159,12 @@ export async function discoverIntegrationCodemods(loadedIntegrations = []) {
158
159
  */
159
160
  export function selectIntegrationCodemods(byVersion, from, to) {
160
161
  const versions = [...byVersion.keys()].sort(semverCompare);
162
+ /** @type {Array<{version: string, codemods: Array<object>}>} */
161
163
  const results = [];
162
164
  for (const version of versions) {
163
165
  if (semverCompare(version, from) > 0 && semverCompare(version, to) <= 0) {
164
- results.push({version, codemods: byVersion.get(version)});
166
+ const codemods = byVersion.get(version);
167
+ if (codemods) results.push({version, codemods});
165
168
  }
166
169
  }
167
170
  return results;
@@ -54,7 +54,7 @@ function scaffold(codemodFiles) {
54
54
  // from the vitest cwd (the repo root) instead.
55
55
  const codemodModulePath = path.resolve(
56
56
  process.cwd(),
57
- 'packages/cli/src/codemod.mjs',
57
+ 'packages/cli/authoring/codemod.mjs',
58
58
  );
59
59
  const codemodModuleUrl = pathToFileURL(codemodModulePath).href;
60
60
 
@@ -31,15 +31,15 @@ import {
31
31
  * Optional codemods (isOptional) are skipped unless explicitly requested via
32
32
  * `codemod` (matched against the codemod id).
33
33
  *
34
- * @param {Array<{version: string, codemods: Array<object>}>} versionGroups
34
+ * @param {Array<{version: string, codemods: Array<import('../types/codemod').CodemodEntry>}>} versionGroups
35
35
  * @param {object} options
36
36
  * @param {boolean} options.apply
37
37
  * @param {string} options.path source directory to scan
38
38
  * @param {string} [options.codemod] run only this codemod id
39
39
  * @param {Set<string>} [options.skipCodemods] codemod ids to exclude
40
- * @param {Function} options.jscodeshift
40
+ * @param {import('../types/codemod').JscodeshiftFactory} options.jscodeshift
41
41
  * @param {boolean} [options.silent]
42
- * @returns {{totalFilesChanged: number, totalTransformsApplied: number, writtenFiles: string[], errors: Array, skippedOptional: Array}}
42
+ * @returns {{totalFilesChanged: number, totalTransformsApplied: number, writtenFiles: string[], errors: Array<{file: string, codemod: string, error: string}>, skippedOptional: Array<import('../types/codemod').CodemodEntry>}}
43
43
  */
44
44
  export function runIntegrationCodemods(
45
45
  versionGroups,
@@ -49,12 +49,17 @@ export function runIntegrationCodemods(
49
49
 
50
50
  let totalFilesChanged = 0;
51
51
  let totalTransformsApplied = 0;
52
+ /** @type {string[]} */
52
53
  const writtenFiles = [];
54
+ /** @type {Array<{file: string, codemod: string, error: string}>} */
53
55
  const errors = [];
56
+ /** @type {Array<import('../types/codemod').CodemodEntry>} */
54
57
  const skippedOptional = [];
55
58
 
56
59
  // Flatten and split by type, preserving version ordering.
60
+ /** @type {Array<import('../types/codemod').CodemodEntry>} */
57
61
  const configEntries = [];
62
+ /** @type {Array<import('../types/codemod').CodemodEntry>} */
58
63
  const codeEntries = [];
59
64
  for (const {version, codemods} of versionGroups) {
60
65
  for (const entry of codemods) {
@@ -45,16 +45,18 @@ export const latestVersion = versions[versions.length - 1];
45
45
  *
46
46
  * @param {string} from - Current version (exclusive)
47
47
  * @param {string} to - Target version (inclusive)
48
- * @returns {Promise<Array<{version: string, transforms: Array<{name: string, module: Function}>}>>}
48
+ * @returns {Promise<Array<{version: string, transforms: Array<{name: string, transform: import('../types/codemod').CodemodTransform, meta: {title: string, description?: string}}>}>>}
49
49
  */
50
50
  export async function getTransformsBetween(from, to) {
51
51
  const applicable = versions.filter(
52
52
  v => semverCompare(v, from) > 0 && semverCompare(v, to) <= 0,
53
53
  );
54
+ /** @type {Array<{version: string, transforms: Array<{name: string, transform: import('../types/codemod').CodemodTransform, meta: {title: string, description?: string}}>}>} */
54
55
  const results = [];
55
56
 
56
57
  for (const version of applicable) {
57
58
  const loader = registry.get(version);
59
+ if (!loader) continue;
58
60
  const manifest = await loader();
59
61
  results.push({
60
62
  version,
@@ -49,7 +49,9 @@ const PARSEABLE_EXTENSIONS = ['.tsx', '.ts', '.jsx', '.js', '.mjs', '.cjs'];
49
49
  * @returns {string[]}
50
50
  */
51
51
  export function findSourceFiles(dir) {
52
+ /** @type {string[]} */
52
53
  const results = [];
54
+ /** @param {string} currentDir */
53
55
  function walk(currentDir) {
54
56
  let entries;
55
57
  try {
@@ -74,6 +76,7 @@ export function findSourceFiles(dir) {
74
76
  /**
75
77
  * No-op log surface for silent (`--json`) mode.
76
78
  * @param {boolean} silent
79
+ * @returns {import('../types/codemod').CliLog}
77
80
  */
78
81
  export function makeLog(silent) {
79
82
  return silent
@@ -84,9 +87,9 @@ export function makeLog(silent) {
84
87
  /**
85
88
  * Apply a config codemod to the consumer's astryx.config.* file.
86
89
  *
87
- * @param {object} entry normalized codemod entry {id, codemod, package}
88
- * @param {{apply: boolean, log: object, jscodeshift: Function}} ctx
89
- * @returns {{filesChanged: number, writtenFiles: string[], errors: Array}}
90
+ * @param {import('../types/codemod').CodemodEntry} entry normalized codemod entry {id, codemod, package}
91
+ * @param {{apply: boolean, log: import('../types/codemod').CliLog, jscodeshift: import('../types/codemod').JscodeshiftFactory}} ctx
92
+ * @returns {import('../types/codemod').CodemodRunResult}
90
93
  */
91
94
  export function runConfigCodemod(entry, {apply, log, jscodeshift}) {
92
95
  const {codemod, id, package: pkg} = entry;
@@ -135,11 +138,12 @@ export function runConfigCodemod(entry, {apply, log, jscodeshift}) {
135
138
  errors: [],
136
139
  };
137
140
  } catch (err) {
138
- log.error(` ✗ ${relativePath} — ${err.message}`);
141
+ const message = /** @type {any} */ (err).message;
142
+ log.error(` ✗ ${relativePath} — ${message}`);
139
143
  return {
140
144
  filesChanged: 0,
141
145
  writtenFiles: [],
142
- errors: [{file: relativePath, codemod: name, error: err.message}],
146
+ errors: [{file: relativePath, codemod: name, error: message}],
143
147
  };
144
148
  }
145
149
  }
@@ -147,10 +151,10 @@ export function runConfigCodemod(entry, {apply, log, jscodeshift}) {
147
151
  /**
148
152
  * Apply a code codemod to discovered source files.
149
153
  *
150
- * @param {object} entry normalized codemod entry {id, codemod, package}
154
+ * @param {import('../types/codemod').CodemodEntry} entry normalized codemod entry {id, codemod, package}
151
155
  * @param {string[]} files
152
- * @param {{apply: boolean, log: object, jscodeshift: Function}} ctx
153
- * @returns {{filesChanged: number, writtenFiles: string[], errors: Array}}
156
+ * @param {{apply: boolean, log: import('../types/codemod').CliLog, jscodeshift: import('../types/codemod').JscodeshiftFactory}} ctx
157
+ * @returns {import('../types/codemod').CodemodRunResult}
154
158
  */
155
159
  export function runCodeCodemod(entry, files, {apply, log, jscodeshift}) {
156
160
  const {codemod, id, package: pkg} = entry;
@@ -158,7 +162,9 @@ export function runCodeCodemod(entry, files, {apply, log, jscodeshift}) {
158
162
  const extensions = new Set(codemod.fileExtensions ?? DEFAULT_CODE_EXTENSIONS);
159
163
 
160
164
  let filesChanged = 0;
165
+ /** @type {string[]} */
161
166
  const writtenFiles = [];
167
+ /** @type {Array<{file: string, codemod: string, error: string}>} */
162
168
  const errors = [];
163
169
 
164
170
  for (const filePath of files) {
@@ -198,8 +204,9 @@ export function runCodeCodemod(entry, files, {apply, log, jscodeshift}) {
198
204
  log.warn(` ~ ${relativePath} (would change)`);
199
205
  }
200
206
  } catch (err) {
201
- log.error(` ✗ ${relativePath} — ${err.message}`);
202
- errors.push({file: relativePath, codemod: name, error: err.message});
207
+ const message = /** @type {any} */ (err).message;
208
+ log.error(` ✗ ${relativePath} — ${message}`);
209
+ errors.push({file: relativePath, codemod: name, error: message});
203
210
  }
204
211
  }
205
212
 
@@ -51,6 +51,7 @@ export function fixDirectiveCorruption(code) {
51
51
  * @returns {string[]}
52
52
  */
53
53
  function findSourceFiles(dir) {
54
+ /** @type {string[]} */
54
55
  const results = [];
55
56
  const extensions = new Set([
56
57
  '.tsx',
@@ -65,6 +66,7 @@ function findSourceFiles(dir) {
65
66
  '.less',
66
67
  ]);
67
68
 
69
+ /** @param {string} currentDir */
68
70
  function walk(currentDir) {
69
71
  let entries;
70
72
  try {
@@ -96,8 +98,9 @@ function findSourceFiles(dir) {
96
98
  *
97
99
  * @param {string} result - The transformed source code
98
100
  * @param {string} source - The original source code
99
- * @param {Function} j - jscodeshift instance (with parser configured)
100
- * @returns {{ valid: boolean, reason?: string }}
101
+ * @param {import('../types/codemod').JscodeshiftFactory} j - jscodeshift instance (with parser configured)
102
+ * @param {{parse?: boolean}} [options]
103
+ * @returns {{ valid: true } | { valid: false, reason: string }}
101
104
  */
102
105
  export function validateOutput(result, source, j, {parse = true} = {}) {
103
106
  // Check 1: Re-parse the output — catches syntax-breaking corruption
@@ -105,9 +108,10 @@ export function validateOutput(result, source, j, {parse = true} = {}) {
105
108
  try {
106
109
  j(result);
107
110
  } catch (parseError) {
111
+ const message = /** @type {any} */ (parseError).message;
108
112
  return {
109
113
  valid: false,
110
- reason: `transform produced unparseable output: ${parseError.message}`,
114
+ reason: `transform produced unparseable output: ${message}`,
111
115
  };
112
116
  }
113
117
  }
@@ -147,9 +151,9 @@ export function validateOutput(result, source, j, {parse = true} = {}) {
147
151
  * with the same `(file, api) => string | null | undefined` contract used by
148
152
  * `createConfigCodemod`.
149
153
  *
150
- * @param {{name: string, transform: Function, meta: object, optional?: boolean}} transformEntry
154
+ * @param {{name: string, transform: import('../types/codemod').CodemodTransform, meta: {title: string, description?: string, fileExtensions?: string[], codemodType?: string}, optional?: boolean}} transformEntry
151
155
  * @param {string} version
152
- * @returns {{id: string, type: 'code'|'config', codemod: object, package: string, version: string}}
156
+ * @returns {import('../types/codemod').CodemodEntry}
153
157
  */
154
158
  function toUnifiedEntry(transformEntry, version) {
155
159
  const {name, transform, meta, optional} = transformEntry;
@@ -171,14 +175,14 @@ function toUnifiedEntry(transformEntry, version) {
171
175
  /**
172
176
  * Run codemods against source files.
173
177
  *
174
- * @param {Array<{version: string, transforms: Array}>} versionManifests
178
+ * @param {Array<{version: string, transforms: Array<{name: string, transform: import('../types/codemod').CodemodTransform, meta: {title: string, description?: string, fileExtensions?: string[], codemodType?: string}, optional?: boolean}>}>} versionManifests
175
179
  * @param {object} options
176
180
  * @param {boolean} options.apply - Write changes to disk
177
181
  * @param {string} options.path - Source directory to scan
178
182
  * @param {string|undefined} options.codemod - Run only this specific transform
179
183
  * @param {Set<string>} [options.skipCodemods] - Transform names to exclude
180
184
  * @param {boolean} [options.silent] - Suppress all human-facing output (for --json)
181
- * @returns {{totalFilesChanged: number, totalTransformsApplied: number, totalValidationBlocked: number, writtenFiles: string[], errors: Array, skippedOptional: Array}}
185
+ * @returns {Promise<{totalFilesChanged: number, totalTransformsApplied: number, totalValidationBlocked: number, writtenFiles: string[], errors: Array<{file: string, codemod: string, error: string}>, skippedOptional: Array<{name: string, meta: {title: string, description?: string, fileExtensions?: string[], codemodType?: string}, version: string}>} | {ok: false, reason: string, resolvedPath: string}>}
182
186
  */
183
187
  export async function runCodemods(
184
188
  versionManifests,
@@ -208,11 +212,11 @@ export async function runCodemods(
208
212
  return {ok: false, reason: 'source_path_missing', resolvedPath};
209
213
  }
210
214
 
215
+ /** @type {string[]} */
211
216
  let files = [];
212
217
  if (sourcePathExists) {
213
218
  log.step(`Scanning ${resolvedPath} for source files...`);
214
219
  files = findSourceFiles(resolvedPath);
215
-
216
220
  if (files.length === 0) {
217
221
  log.warn('No source files found.');
218
222
  } else {
@@ -223,15 +227,20 @@ export async function runCodemods(
223
227
  }
224
228
 
225
229
  // Dynamically import jscodeshift
226
- const jscodeshift = (await import('jscodeshift')).default;
230
+ const jscodeshift =
231
+ /** @type {import('../types/codemod').JscodeshiftFactory} */ (
232
+ (await import('jscodeshift')).default
233
+ );
227
234
 
228
235
  let totalFilesChanged = 0;
229
236
  let totalTransformsApplied = 0;
230
237
  let totalValidationBlocked = 0;
238
+ /** @type {Array<{file: string, codemod: string, error: string}>} */
231
239
  const errors = [];
240
+ /** @type {string[]} */
232
241
  const writtenFiles = [];
242
+ /** @type {Array<{name: string, meta: {title: string, description?: string, fileExtensions?: string[], codemodType?: string}, version: string}>} */
233
243
  const skippedOptional = [];
234
-
235
244
  for (const {version, transforms} of versionManifests) {
236
245
  log.step(`Applying v${version} codemods...`);
237
246
 
@@ -333,8 +342,9 @@ export async function runCodemods(
333
342
  }
334
343
  }
335
344
  } catch (err) {
336
- log.error(` ✗ ${relativePath} — ${err.message}`);
337
- errors.push({file: relativePath, codemod: name, error: err.message});
345
+ const message = /** @type {any} */ (err).message;
346
+ log.error(` ✗ ${relativePath} — ${message}`);
347
+ errors.push({file: relativePath, codemod: name, error: message});
338
348
  }
339
349
  }
340
350
 
@@ -32,6 +32,11 @@ export const meta = {
32
32
  pr: '#966',
33
33
  };
34
34
 
35
+ /**
36
+ * @param {import('../../../types/codemod').AstryxCodemodFile} file
37
+ * @param {import('../../../types/codemod').CodemodTransformApi} api
38
+ * @returns {string | null | undefined}
39
+ */
35
40
  export default function transformer(file, api) {
36
41
  const j = api.jscodeshift;
37
42
  const root = j(file.source);
@@ -40,7 +45,7 @@ export default function transformer(file, api) {
40
45
  // 1. Remove size JSX prop from target components
41
46
  root
42
47
  .find(j.JSXOpeningElement)
43
- .filter((path) => {
48
+ .filter((/** @type {any} */ path) => {
44
49
  const name = path.node.name;
45
50
  // Handle simple names like <XDSStatusDot>
46
51
  if (name.type === 'JSXIdentifier') {
@@ -48,10 +53,10 @@ export default function transformer(file, api) {
48
53
  }
49
54
  return false;
50
55
  })
51
- .forEach((path) => {
56
+ .forEach((/** @type {any} */ path) => {
52
57
  const attrs = path.node.attributes;
53
58
  const sizeIdx = attrs.findIndex(
54
- (attr) =>
59
+ (/** @type {any} */ attr) =>
55
60
  attr.type === 'JSXAttribute' &&
56
61
  attr.name &&
57
62
  attr.name.name === 'size',
@@ -63,7 +68,7 @@ export default function transformer(file, api) {
63
68
  });
64
69
 
65
70
  // 2. Remove size type imports (XDSStatusDotSize, XDSProgressBarSize)
66
- root.find(j.ImportDeclaration).forEach((path) => {
71
+ root.find(j.ImportDeclaration).forEach((/** @type {any} */ path) => {
67
72
  const specifiers = path.node.specifiers;
68
73
  if (!specifiers) return;
69
74