@typestyles/migrate 0.0.0-unstable.5e4858efecfc → 0.0.0-unstable.608d633c0934

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.
package/README.md CHANGED
@@ -8,18 +8,18 @@ Full migration guide: [typestyles.dev/docs/migration](https://typestyles.dev/doc
8
8
 
9
9
  ## What it transforms
10
10
 
11
- | Source | Becomes |
12
- | ----------------------------------- | --------------------------------------------------- |
13
- | `styled.div\`...\`` | `styles.class('div', { ... })` + `className` on JSX |
14
- | `styled(Button)\`...\`` | `styles.class('button', { ... })` + `className` |
15
- | `` css`...` `` (Emotion) | `styles.class(...)` |
16
- | Static template literals | CSS object properties (via PostCSS parser) |
17
- | `` `${props => props.x}` `` | `createVar` + `assignVars` + `styles.class` |
18
- | `` `${props => props.x ? A : B}` `` | `styles.component` variants + JSX rewrite |
19
- | `` `${({ x }) => x}` `` | `createVar` + `assignVars` (destructured params) |
20
- | `@media` in templates | Nested `'@media (…)'` objects in style definitions |
21
-
22
- The codemod rewrites JSX usage for styled components it can safely transform and adds the required `import { styles } from 'typestyles'`.
11
+ | Source | Becomes |
12
+ | ----------------------------------- | -------------------------------------------------- |
13
+ | `styled.div\`...\`` | `style('div', { ... })` + `className` on JSX |
14
+ | `styled(Button)\`...\`` | `style('button', { ... })` + `className` |
15
+ | `` css`...` `` (Emotion) | `style(...)` |
16
+ | Static template literals | CSS object properties (via PostCSS parser) |
17
+ | `` `${props => props.x}` `` | `createVar` + `assignVars` + `style` |
18
+ | `` `${props => props.x ? A : B}` `` | `recipe` variants + JSX rewrite |
19
+ | `` `${({ x }) => x}` `` | `createVar` + `assignVars` (destructured params) |
20
+ | `@media` in templates | Nested `'@media (…)'` objects in style definitions |
21
+
22
+ The codemod rewrites JSX usage for styled components it can safely transform and adds `createTypeStyles` plus a `style` binding when needed (`import { createTypeStyles } from 'typestyles'`).
23
23
 
24
24
  ## What it skips (with warnings)
25
25
 
@@ -29,7 +29,7 @@ Honest automation beats silent breakage:
29
29
  - **Exported styled components** — avoids changing your public API shape without review
30
30
  - **Non-JSX references** to styled component variables
31
31
 
32
- Prop-based patterns like `` `${props => props.color}` `` and `` `${(props) => props.width}px` `` are converted to [`createVar` + `assignVars`](https://typestyles.dev/docs/dynamic-styles). Boolean prop ternaries like `` `${props => props.primary ? '#0066ff' : '#6b7280'}` `` become `styles.component` variants. Suffix text after the interpolation (e.g. `px`) is applied at the call site.
32
+ Prop-based patterns like `` `${props => props.color}` `` and `` `${(props) => props.width}px` `` are converted to [`createVar` + `assignVars`](https://typestyles.dev/docs/dynamic-styles). Boolean prop ternaries like `` `${props => props.primary ? '#0066ff' : '#6b7280'}` `` become `recipe` variants. Suffix text after the interpolation (e.g. `px`) is applied at the call site.
33
33
 
34
34
  ## Installation
35
35
 
@@ -107,9 +107,11 @@ export function App() {
107
107
  **After:**
108
108
 
109
109
  ```tsx
110
- import { styles } from 'typestyles';
110
+ import { createTypeStyles } from 'typestyles';
111
111
 
112
- const button = styles.class('button', {
112
+ const { style } = createTypeStyles();
113
+
114
+ const button = style('button', {
113
115
  padding: '8px 16px',
114
116
  background: '#0066ff',
115
117
  color: 'white',
@@ -124,7 +126,7 @@ export function App() {
124
126
  }
125
127
  ```
126
128
 
127
- For components with variants, follow up manually with `styles.component()` — see the [styled-components migration section](https://typestyles.dev/docs/migration#from-styled-components).
129
+ For components with variants, follow up manually with `recipe()` — see the [styled-components migration section](https://typestyles.dev/docs/migration#from-styled-components). Consider `createTypeStyles({ scopeId: 'your-app' })` for production apps.
128
130
 
129
131
  ## Programmatic API
130
132
 
@@ -150,7 +152,7 @@ await runMigration(process.cwd(), {
150
152
  1. **Dry-run** on a branch and review diffs
151
153
  2. **Fix warnings** — convert dynamic templates to vars or inline styles
152
154
  3. **Apply with `--write`**
153
- 4. **Refactor** repeated `styles.class` calls into `styles.component` with variants
155
+ 4. **Refactor** repeated `style()` calls into `recipe()` with variants
154
156
  5. **Add tokens** — replace hard-coded colors/spacing with `tokens.create`
155
157
  6. **Enable extraction** — add `@typestyles/vite` or your bundler plugin for production zero-runtime
156
158
 
@@ -340,17 +340,37 @@ function updateClassNameAttribute(openingElement, classNameExpression) {
340
340
  );
341
341
  }
342
342
  }
343
- function ensureTypestylesImport(ast, needsVars) {
344
- const requiredSpecifiers = /* @__PURE__ */ new Set(["styles"]);
345
- if (needsVars) {
343
+ function hasLocalBinding(ast, name) {
344
+ for (const statement of ast.program.body) {
345
+ if (!t4.isVariableDeclaration(statement)) continue;
346
+ for (const declarator of statement.declarations) {
347
+ if (t4.isIdentifier(declarator.id) && declarator.id.name === name) return true;
348
+ if (t4.isObjectPattern(declarator.id)) {
349
+ for (const prop of declarator.id.properties) {
350
+ if (t4.isObjectProperty(prop) && t4.isIdentifier(prop.value) && prop.value.name === name) {
351
+ return true;
352
+ }
353
+ }
354
+ }
355
+ }
356
+ }
357
+ return false;
358
+ }
359
+ function ensureTypestylesRuntime(ast, needs) {
360
+ const requiredSpecifiers = /* @__PURE__ */ new Set(["createTypeStyles"]);
361
+ if (needs.vars) {
346
362
  requiredSpecifiers.add("createVar");
347
363
  requiredSpecifiers.add("assignVars");
348
364
  }
349
365
  let typestylesImport = null;
350
- for (const statement of ast.program.body) {
351
- if (t4.isImportDeclaration(statement) && statement.source.value === "typestyles") {
352
- typestylesImport = statement;
353
- break;
366
+ let lastImportIndex = -1;
367
+ for (let i = 0; i < ast.program.body.length; i++) {
368
+ const statement = ast.program.body[i];
369
+ if (t4.isImportDeclaration(statement)) {
370
+ lastImportIndex = i;
371
+ if (statement.source.value === "typestyles" && typestylesImport == null) {
372
+ typestylesImport = statement;
373
+ }
354
374
  }
355
375
  }
356
376
  const buildSpecifiers = (names) => [...names].map((name) => t4.importSpecifier(t4.identifier(name), t4.identifier(name)));
@@ -358,16 +378,36 @@ function ensureTypestylesImport(ast, needsVars) {
358
378
  ast.program.body.unshift(
359
379
  t4.importDeclaration(buildSpecifiers(requiredSpecifiers), t4.stringLiteral("typestyles"))
360
380
  );
361
- return;
381
+ lastImportIndex = 0;
382
+ } else {
383
+ for (const name of requiredSpecifiers) {
384
+ const hasSpecifier = typestylesImport.specifiers.some(
385
+ (specifier) => t4.isImportSpecifier(specifier) && t4.isIdentifier(specifier.imported, { name }) && t4.isIdentifier(specifier.local, { name })
386
+ );
387
+ if (!hasSpecifier) {
388
+ typestylesImport.specifiers.push(t4.importSpecifier(t4.identifier(name), t4.identifier(name)));
389
+ }
390
+ }
362
391
  }
363
- for (const name of requiredSpecifiers) {
364
- const hasSpecifier = typestylesImport.specifiers.some(
365
- (specifier) => t4.isImportSpecifier(specifier) && t4.isIdentifier(specifier.imported, { name }) && t4.isIdentifier(specifier.local, { name })
392
+ const destructureProps = [];
393
+ if (needs.style && !hasLocalBinding(ast, "style")) {
394
+ destructureProps.push(
395
+ t4.objectProperty(t4.identifier("style"), t4.identifier("style"), false, true)
396
+ );
397
+ }
398
+ if (needs.recipe && !hasLocalBinding(ast, "recipe")) {
399
+ destructureProps.push(
400
+ t4.objectProperty(t4.identifier("recipe"), t4.identifier("recipe"), false, true)
366
401
  );
367
- if (!hasSpecifier) {
368
- typestylesImport.specifiers.push(t4.importSpecifier(t4.identifier(name), t4.identifier(name)));
369
- }
370
402
  }
403
+ if (destructureProps.length === 0) return;
404
+ const factoryDecl = t4.variableDeclaration("const", [
405
+ t4.variableDeclarator(
406
+ t4.objectPattern(destructureProps),
407
+ t4.callExpression(t4.identifier("createTypeStyles"), [])
408
+ )
409
+ ]);
410
+ ast.program.body.splice(lastImportIndex + 1, 0, factoryDecl);
371
411
  }
372
412
  function cleanupUnusedImports(ast) {
373
413
  traverse(ast, {
@@ -376,7 +416,7 @@ function cleanupUnusedImports(ast) {
376
416
  },
377
417
  ImportDeclaration(path) {
378
418
  const unusedLocals = path.node.specifiers.filter((specifier) => {
379
- if (path.node.source.value === "typestyles" && t4.isImportSpecifier(specifier) && (specifier.local.name === "styles" || specifier.local.name === "createVar" || specifier.local.name === "assignVars")) {
419
+ if (path.node.source.value === "typestyles" && t4.isImportSpecifier(specifier) && (specifier.local.name === "createTypeStyles" || specifier.local.name === "createVar" || specifier.local.name === "assignVars")) {
380
420
  return false;
381
421
  }
382
422
  const local = specifier.local.name;
@@ -487,7 +527,7 @@ function migrateBooleanVariantTemplate(path, variableName, template, styledTarge
487
527
  declaration.node.declarations = [
488
528
  t4.variableDeclarator(
489
529
  t4.identifier(componentConstName),
490
- t4.callExpression(t4.memberExpression(t4.identifier("styles"), t4.identifier("component")), [
530
+ t4.callExpression(t4.identifier("recipe"), [
491
531
  t4.stringLiteral(toKebabCase(variableName)),
492
532
  componentConfig
493
533
  ])
@@ -548,7 +588,7 @@ function migrateInterpolatedTemplate(path, variableName, template, styledTarget,
548
588
  ...varDeclarators,
549
589
  t4.variableDeclarator(
550
590
  t4.identifier(classConstName),
551
- t4.callExpression(t4.memberExpression(t4.identifier("styles"), t4.identifier("class")), [
591
+ t4.callExpression(t4.identifier("style"), [
552
592
  t4.stringLiteral(toKebabCase(variableName)),
553
593
  objectExpression4
554
594
  ])
@@ -582,6 +622,8 @@ function migrateSource(filePath, source) {
582
622
  const cssTagNames = /* @__PURE__ */ new Set();
583
623
  const styledTransforms = /* @__PURE__ */ new Map();
584
624
  let needsVars = false;
625
+ let needsStyle = false;
626
+ let needsRecipe = false;
585
627
  traverse(ast, {
586
628
  ImportDeclaration(path) {
587
629
  if (path.node.source.value === "styled-components" || path.node.source.value === "@emotion/styled") {
@@ -643,6 +685,7 @@ function migrateSource(filePath, source) {
643
685
  warnings,
644
686
  styledTransforms
645
687
  )) {
688
+ needsRecipe = true;
646
689
  changed = true;
647
690
  return;
648
691
  }
@@ -655,6 +698,7 @@ function migrateSource(filePath, source) {
655
698
  styledTransforms
656
699
  )) {
657
700
  needsVars = true;
701
+ needsStyle = true;
658
702
  changed = true;
659
703
  }
660
704
  return;
@@ -681,10 +725,10 @@ function migrateSource(filePath, source) {
681
725
  }
682
726
  const classConstName = path.scope.generateUidIdentifier(`${variableName}Class`).name;
683
727
  path.node.id = t4.identifier(classConstName);
684
- path.node.init = t4.callExpression(
685
- t4.memberExpression(t4.identifier("styles"), t4.identifier("class")),
686
- [t4.stringLiteral(toKebabCase(variableName)), objectExpression4]
687
- );
728
+ path.node.init = t4.callExpression(t4.identifier("style"), [
729
+ t4.stringLiteral(toKebabCase(variableName)),
730
+ objectExpression4
731
+ ]);
688
732
  styledTransforms.set(variableName, {
689
733
  originalName: variableName,
690
734
  mode: "class",
@@ -693,14 +737,16 @@ function migrateSource(filePath, source) {
693
737
  propVars: [],
694
738
  variantProps: []
695
739
  });
740
+ needsStyle = true;
696
741
  changed = true;
697
742
  return;
698
743
  }
699
744
  if (t4.isIdentifier(path.node.init.tag) && cssTagNames.has(path.node.init.tag.name)) {
700
- path.node.init = t4.callExpression(
701
- t4.memberExpression(t4.identifier("styles"), t4.identifier("class")),
702
- [t4.stringLiteral(toKebabCase(variableName)), objectExpression4]
703
- );
745
+ path.node.init = t4.callExpression(t4.identifier("style"), [
746
+ t4.stringLiteral(toKebabCase(variableName)),
747
+ objectExpression4
748
+ ]);
749
+ needsStyle = true;
704
750
  changed = true;
705
751
  }
706
752
  }
@@ -738,7 +784,11 @@ function migrateSource(filePath, source) {
738
784
  });
739
785
  }
740
786
  if (changed) {
741
- ensureTypestylesImport(ast, needsVars);
787
+ ensureTypestylesRuntime(ast, {
788
+ style: needsStyle,
789
+ recipe: needsRecipe,
790
+ vars: needsVars
791
+ });
742
792
  cleanupUnusedImports(ast);
743
793
  }
744
794
  const output = generate(
@@ -864,5 +914,5 @@ Scanned ${summary.filesScanned} files, changed ${summary.filesChanged}, warnings
864
914
  }
865
915
 
866
916
  export { migrateSource, runMigration };
867
- //# sourceMappingURL=chunk-D2W3OEBT.js.map
868
- //# sourceMappingURL=chunk-D2W3OEBT.js.map
917
+ //# sourceMappingURL=chunk-3USMLGWZ.js.map
918
+ //# sourceMappingURL=chunk-3USMLGWZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/css.ts","../src/interpolations.ts","../src/variants.ts","../src/transform.ts","../src/files.ts","../src/migrate.ts"],"names":["t","camelCaseProperty","t2","t3","toKeyNode","objectExpression","relative"],"mappings":"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","file":"chunk-3USMLGWZ.js","sourcesContent":["import postcss, { type ChildNode, type Container } from 'postcss';\nimport * as t from '@babel/types';\nimport type { MigrationWarning } from './types';\n\nfunction camelCaseProperty(property: string): string {\n return property.replace(/-([a-z])/g, (_, letter: string) => letter.toUpperCase());\n}\n\nfunction toValueNode(value: string, varReplacements?: Map<string, t.Identifier>): t.Expression {\n const trimmed = value.trim();\n if (varReplacements?.has(trimmed)) {\n return varReplacements.get(trimmed)!;\n }\n if (/^-?\\d+(\\.\\d+)?$/.test(trimmed)) {\n return t.numericLiteral(Number(trimmed));\n }\n return t.stringLiteral(trimmed);\n}\n\nfunction toKeyNode(key: string): t.Expression {\n if (/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key)) {\n return t.identifier(key);\n }\n return t.stringLiteral(key);\n}\n\nfunction nodesToObject(\n nodes: ChildNode[] | undefined,\n warnings: MigrationWarning[],\n varReplacements?: Map<string, t.Identifier>,\n): t.ObjectExpression {\n const properties: t.ObjectProperty[] = [];\n\n for (const node of nodes ?? []) {\n if (node.type === 'decl') {\n const normalized = node.prop.startsWith('--') ? node.prop : camelCaseProperty(node.prop);\n properties.push(\n t.objectProperty(toKeyNode(normalized), toValueNode(node.value, varReplacements)),\n );\n continue;\n }\n\n if (node.type === 'rule') {\n const nested = nodesToObject(node.nodes, warnings, varReplacements);\n properties.push(t.objectProperty(t.stringLiteral(node.selector.trim()), nested));\n continue;\n }\n\n if (node.type === 'atrule') {\n const nested = nodesToObject(node.nodes, warnings, varReplacements);\n const atRuleKey = `@${node.name}${node.params ? ` ${node.params}` : ''}`;\n properties.push(t.objectProperty(t.stringLiteral(atRuleKey), nested));\n continue;\n }\n\n warnings.push({\n message: `Unsupported CSS node \"${node.type}\" skipped.`,\n });\n }\n\n return t.objectExpression(properties);\n}\n\nexport function cssToObjectExpression(\n cssText: string,\n warnings: MigrationWarning[],\n varReplacements?: Map<string, t.Identifier>,\n): t.ObjectExpression | null {\n try {\n const root = postcss.parse(cssText);\n return nodesToObject((root as unknown as Container).nodes, warnings, varReplacements);\n } catch (error) {\n warnings.push({\n message: `Could not parse CSS template literal: ${(error as Error).message}`,\n });\n return null;\n }\n}\n","import * as t from '@babel/types';\n\nexport type PropInterpolation = {\n index: number;\n propName: string;\n suffix: string;\n};\n\nexport type BooleanTernaryInterpolation = {\n index: number;\n propName: string;\n trueValue: string;\n falseValue: string;\n cssProperty: string;\n};\n\nconst PLACEHOLDER_PREFIX = '__ts_migrate_var_';\n\nfunction camelCaseProperty(property: string): string {\n return property.replace(/-([a-z])/g, (_, letter: string) => letter.toUpperCase());\n}\n\nexport function placeholderToken(index: number): string {\n return `${PLACEHOLDER_PREFIX}${index}__`;\n}\n\nfunction extractSuffixFromQuasi(quasiText: string): string {\n const match = quasiText.match(/^([^;\\n]*)/);\n return match?.[1] ?? '';\n}\n\nfunction literalToCssValue(node: t.Node): string | null {\n if (t.isStringLiteral(node)) return node.value;\n if (t.isNumericLiteral(node)) return String(node.value);\n return null;\n}\n\nfunction unwrapExpression(expression: t.Expression): t.Expression {\n if (t.isParenthesizedExpression(expression)) {\n return unwrapExpression(expression.expression);\n }\n return expression;\n}\n\nfunction extractCssPropertyBeforeInterpolation(quasiText: string): string | null {\n const match = quasiText.match(/([a-zA-Z-]+)\\s*:\\s*$/);\n return match?.[1] ?? null;\n}\n\nfunction stripTrailingPropertyDeclaration(quasiText: string): string {\n return quasiText.replace(/[a-zA-Z-]+\\s*:\\s*$/, '');\n}\n\nfunction stripLeadingDeclarationRemainder(quasiText: string): string {\n const semiIdx = quasiText.indexOf(';');\n if (semiIdx === -1) return quasiText;\n return quasiText.slice(semiIdx + 1).trimStart();\n}\n\n/**\n * Parse a styled-components prop interpolation such as\n * `(props) => props.color`, `props => props.width`, or `({ color }) => color`.\n */\nexport function parsePropInterpolation(expression: t.Expression): { propName: string } | null {\n if (!t.isArrowFunctionExpression(expression)) return null;\n\n const param = expression.params[0];\n if (!param) return null;\n\n const body = unwrapExpression(expression.body as t.Expression);\n if (!t.isExpression(body)) return null;\n\n if (t.isIdentifier(param)) {\n if (\n t.isMemberExpression(body) &&\n !body.computed &&\n t.isIdentifier(body.object, { name: param.name }) &&\n t.isIdentifier(body.property)\n ) {\n return { propName: body.property.name };\n }\n return null;\n }\n\n if (t.isObjectPattern(param) && t.isIdentifier(body)) {\n const propName = body.name;\n const hasProp = param.properties.some((property) => {\n if (!t.isObjectProperty(property)) return false;\n const keyName = t.isIdentifier(property.key)\n ? property.key.name\n : t.isStringLiteral(property.key)\n ? property.key.value\n : null;\n return keyName === propName;\n });\n if (!hasProp) return null;\n return { propName };\n }\n\n return null;\n}\n\n/**\n * Parse `${(props) => (props.primary ? '#0066ff' : '#6b7280')}` style interpolations.\n */\nexport function parseBooleanTernaryInterpolation(\n expression: t.Expression,\n): { propName: string; trueValue: string; falseValue: string } | null {\n if (!t.isArrowFunctionExpression(expression)) return null;\n\n const param = expression.params[0];\n if (!t.isIdentifier(param)) return null;\n\n const body = unwrapExpression(expression.body as t.Expression);\n if (!t.isConditionalExpression(body)) return null;\n\n if (\n !t.isMemberExpression(body.test) ||\n body.test.computed ||\n !t.isIdentifier(body.test.object, { name: param.name }) ||\n !t.isIdentifier(body.test.property)\n ) {\n return null;\n }\n\n const trueValue = literalToCssValue(body.consequent);\n const falseValue = literalToCssValue(body.alternate);\n if (trueValue === null || falseValue === null) return null;\n\n return {\n propName: body.test.property.name,\n trueValue,\n falseValue,\n };\n}\n\nexport function parseTemplateInterpolations(\n template: t.TemplateLiteral,\n): PropInterpolation[] | null {\n const interpolations: PropInterpolation[] = [];\n\n for (let i = 0; i < template.expressions.length; i++) {\n const expression = template.expressions[i];\n if (!t.isExpression(expression)) return null;\n\n const parsed = parsePropInterpolation(expression);\n if (!parsed) return null;\n\n const followingQuasi = template.quasis[i + 1]?.value.cooked ?? '';\n interpolations.push({\n index: i,\n propName: parsed.propName,\n suffix: extractSuffixFromQuasi(followingQuasi),\n });\n }\n\n return interpolations;\n}\n\nexport function parseBooleanTemplateInterpolations(\n template: t.TemplateLiteral,\n): BooleanTernaryInterpolation[] | null {\n const interpolations: BooleanTernaryInterpolation[] = [];\n\n for (let i = 0; i < template.expressions.length; i++) {\n const expression = template.expressions[i];\n if (!t.isExpression(expression)) return null;\n\n const parsed = parseBooleanTernaryInterpolation(expression);\n if (!parsed) return null;\n\n const quasiBefore = template.quasis[i]?.value.cooked ?? '';\n const cssProperty = extractCssPropertyBeforeInterpolation(quasiBefore);\n if (!cssProperty) return null;\n\n interpolations.push({\n index: i,\n propName: parsed.propName,\n trueValue: parsed.trueValue,\n falseValue: parsed.falseValue,\n cssProperty: camelCaseProperty(cssProperty),\n });\n }\n\n return interpolations;\n}\n\nexport function reconstructInterpolatedCss(\n template: t.TemplateLiteral,\n interpolations: PropInterpolation[],\n): string {\n let result = '';\n\n for (let i = 0; i < template.quasis.length; i++) {\n let quasiText = template.quasis[i].value.cooked ?? '';\n\n if (i > 0) {\n const interpolation = interpolations[i - 1];\n if (interpolation?.suffix && quasiText.startsWith(interpolation.suffix)) {\n quasiText = quasiText.slice(interpolation.suffix.length);\n }\n }\n\n result += quasiText;\n\n if (i < interpolations.length) {\n result += placeholderToken(interpolations[i].index);\n }\n }\n\n return result;\n}\n\nexport function reconstructStaticCssWithoutVariants(\n template: t.TemplateLiteral,\n booleanInterpolations: BooleanTernaryInterpolation[],\n): string {\n const skipIndices = new Set(booleanInterpolations.map((interpolation) => interpolation.index));\n let result = '';\n\n for (let i = 0; i < template.quasis.length; i++) {\n let quasiText = template.quasis[i].value.cooked ?? '';\n\n if (skipIndices.has(i)) {\n quasiText = stripTrailingPropertyDeclaration(quasiText);\n }\n\n if (i > 0 && skipIndices.has(i - 1)) {\n quasiText = stripLeadingDeclarationRemainder(quasiText);\n }\n\n result += quasiText;\n }\n\n return result.trim();\n}\n\nexport function toVarDebugName(componentName: string, propName: string): string {\n return `${componentName}${propName.charAt(0).toUpperCase()}${propName.slice(1)}`;\n}\n\nexport function toComponentConstName(componentName: string): string {\n if (!componentName) return componentName;\n return componentName.charAt(0).toLowerCase() + componentName.slice(1);\n}\n","import * as t from '@babel/types';\nimport type { BooleanTernaryInterpolation } from './interpolations';\n\nfunction toCssValueNode(value: string): t.Expression {\n if (/^-?\\d+(\\.\\d+)?$/.test(value.trim())) {\n return t.numericLiteral(Number(value));\n }\n return t.stringLiteral(value);\n}\n\nfunction toKeyNode(key: string): t.Expression {\n if (/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key)) {\n return t.identifier(key);\n }\n return t.stringLiteral(key);\n}\n\nfunction buildVariantStyles(properties: Record<string, string>): t.ObjectExpression {\n return t.objectExpression(\n Object.entries(properties).map(([key, value]) =>\n t.objectProperty(toKeyNode(key), toCssValueNode(value)),\n ),\n );\n}\n\nexport function buildVariantComponentConfig(\n baseObject: t.ObjectExpression,\n booleanInterpolations: BooleanTernaryInterpolation[],\n): t.ObjectExpression {\n const variantGroups = new Map<\n string,\n { true: Record<string, string>; false: Record<string, string> }\n >();\n\n for (const interpolation of booleanInterpolations) {\n const group = variantGroups.get(interpolation.propName) ?? { true: {}, false: {} };\n group.true[interpolation.cssProperty] = interpolation.trueValue;\n group.false[interpolation.cssProperty] = interpolation.falseValue;\n variantGroups.set(interpolation.propName, group);\n }\n\n const variantsProperties = [...variantGroups.entries()].map(([propName, values]) =>\n t.objectProperty(\n t.identifier(propName),\n t.objectExpression([\n t.objectProperty(t.identifier('true'), buildVariantStyles(values.true)),\n t.objectProperty(t.identifier('false'), buildVariantStyles(values.false)),\n ]),\n ),\n );\n\n const defaultVariantProperties = [...variantGroups.keys()].map((propName) =>\n t.objectProperty(t.identifier(propName), t.booleanLiteral(false)),\n );\n\n return t.objectExpression([\n t.objectProperty(t.identifier('base'), baseObject),\n t.objectProperty(t.identifier('variants'), t.objectExpression(variantsProperties)),\n t.objectProperty(t.identifier('defaultVariants'), t.objectExpression(defaultVariantProperties)),\n ]);\n}\n","import { parse } from '@babel/parser';\nimport generate from '@babel/generator';\nimport traverse, { type NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { cssToObjectExpression } from './css';\nimport {\n parseBooleanTemplateInterpolations,\n parseTemplateInterpolations,\n placeholderToken,\n reconstructInterpolatedCss,\n reconstructStaticCssWithoutVariants,\n toComponentConstName,\n toVarDebugName,\n} from './interpolations';\nimport type { FileMigrationResult, MigrationWarning } from './types';\nimport { buildVariantComponentConfig } from './variants';\n\ntype StyledTarget =\n | { kind: 'intrinsic'; jsxName: t.JSXIdentifier }\n | { kind: 'component'; jsxName: t.JSXIdentifier | t.JSXMemberExpression };\n\ntype PropVarBinding = {\n propName: string;\n varConstName: string;\n suffix: string;\n};\n\ntype StyledTransform = {\n originalName: string;\n mode: 'class' | 'component';\n classConstName: string;\n target: StyledTarget;\n propVars: PropVarBinding[];\n variantProps: string[];\n};\n\nfunction toKebabCase(input: string): string {\n return input\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[_\\s]+/g, '-')\n .toLowerCase();\n}\n\nfunction memberExpressionToJsxName(\n expression: t.Expression,\n): t.JSXIdentifier | t.JSXMemberExpression | null {\n if (t.isIdentifier(expression)) {\n return t.jsxIdentifier(expression.name);\n }\n\n if (t.isMemberExpression(expression) && !expression.computed) {\n const left = memberExpressionToJsxName(expression.object as t.Expression);\n const right = t.isIdentifier(expression.property)\n ? t.jsxIdentifier(expression.property.name)\n : null;\n if (!left || !right) return null;\n return t.jsxMemberExpression(left, right);\n }\n\n return null;\n}\n\nfunction parseStyledTarget(\n tag: t.TaggedTemplateExpression['tag'],\n styledNames: Set<string>,\n): StyledTarget | null {\n if (\n t.isMemberExpression(tag) &&\n t.isIdentifier(tag.object) &&\n styledNames.has(tag.object.name) &&\n t.isIdentifier(tag.property)\n ) {\n return { kind: 'intrinsic', jsxName: t.jsxIdentifier(tag.property.name) };\n }\n\n if (t.isCallExpression(tag) && t.isIdentifier(tag.callee) && styledNames.has(tag.callee.name)) {\n const firstArg = tag.arguments[0];\n if (!firstArg || !t.isExpression(firstArg)) return null;\n const jsxName = memberExpressionToJsxName(firstArg);\n if (!jsxName) return null;\n return { kind: 'component', jsxName };\n }\n\n return null;\n}\n\nfunction addWarning(warnings: MigrationWarning[], message: string, nodeName?: string): void {\n warnings.push({ message, nodeName });\n}\n\nfunction createMergedClassExpression(\n existing: t.Expression,\n classNameExpression: t.Expression,\n): t.Expression {\n return t.callExpression(\n t.memberExpression(\n t.callExpression(\n t.memberExpression(\n t.arrayExpression([existing, classNameExpression]),\n t.identifier('filter'),\n ),\n [t.identifier('Boolean')],\n ),\n t.identifier('join'),\n ),\n [t.stringLiteral(' ')],\n );\n}\n\nfunction updateClassNameAttribute(\n openingElement: t.JSXOpeningElement,\n classNameExpression: t.Expression,\n): void {\n const existingAttr = openingElement.attributes.find(\n (attribute): attribute is t.JSXAttribute =>\n t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name, { name: 'className' }),\n );\n\n if (!existingAttr) {\n openingElement.attributes.push(\n t.jsxAttribute(t.jsxIdentifier('className'), t.jsxExpressionContainer(classNameExpression)),\n );\n return;\n }\n\n if (!existingAttr.value) {\n existingAttr.value = t.jsxExpressionContainer(classNameExpression);\n return;\n }\n\n if (t.isStringLiteral(existingAttr.value)) {\n existingAttr.value = t.jsxExpressionContainer(\n createMergedClassExpression(t.stringLiteral(existingAttr.value.value), classNameExpression),\n );\n return;\n }\n\n if (t.isJSXExpressionContainer(existingAttr.value)) {\n existingAttr.value = t.jsxExpressionContainer(\n createMergedClassExpression(\n existingAttr.value.expression as t.Expression,\n classNameExpression,\n ),\n );\n }\n}\n\nfunction hasLocalBinding(ast: t.File, name: string): boolean {\n for (const statement of ast.program.body) {\n if (!t.isVariableDeclaration(statement)) continue;\n for (const declarator of statement.declarations) {\n if (t.isIdentifier(declarator.id) && declarator.id.name === name) return true;\n if (t.isObjectPattern(declarator.id)) {\n for (const prop of declarator.id.properties) {\n if (t.isObjectProperty(prop) && t.isIdentifier(prop.value) && prop.value.name === name) {\n return true;\n }\n }\n }\n }\n }\n return false;\n}\n\nfunction ensureTypestylesRuntime(\n ast: t.File,\n needs: { style: boolean; recipe: boolean; vars: boolean },\n): void {\n const requiredSpecifiers = new Set<string>(['createTypeStyles']);\n if (needs.vars) {\n requiredSpecifiers.add('createVar');\n requiredSpecifiers.add('assignVars');\n }\n\n let typestylesImport: t.ImportDeclaration | null = null;\n let lastImportIndex = -1;\n\n for (let i = 0; i < ast.program.body.length; i++) {\n const statement = ast.program.body[i];\n if (t.isImportDeclaration(statement)) {\n lastImportIndex = i;\n if (statement.source.value === 'typestyles' && typestylesImport == null) {\n typestylesImport = statement;\n }\n }\n }\n\n const buildSpecifiers = (names: Set<string>): t.ImportSpecifier[] =>\n [...names].map((name) => t.importSpecifier(t.identifier(name), t.identifier(name)));\n\n if (!typestylesImport) {\n ast.program.body.unshift(\n t.importDeclaration(buildSpecifiers(requiredSpecifiers), t.stringLiteral('typestyles')),\n );\n lastImportIndex = 0;\n } else {\n for (const name of requiredSpecifiers) {\n const hasSpecifier = typestylesImport.specifiers.some(\n (specifier) =>\n t.isImportSpecifier(specifier) &&\n t.isIdentifier(specifier.imported, { name }) &&\n t.isIdentifier(specifier.local, { name }),\n );\n\n if (!hasSpecifier) {\n typestylesImport.specifiers.push(t.importSpecifier(t.identifier(name), t.identifier(name)));\n }\n }\n }\n\n const destructureProps: t.ObjectProperty[] = [];\n if (needs.style && !hasLocalBinding(ast, 'style')) {\n destructureProps.push(\n t.objectProperty(t.identifier('style'), t.identifier('style'), false, true),\n );\n }\n if (needs.recipe && !hasLocalBinding(ast, 'recipe')) {\n destructureProps.push(\n t.objectProperty(t.identifier('recipe'), t.identifier('recipe'), false, true),\n );\n }\n\n if (destructureProps.length === 0) return;\n\n const factoryDecl = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.objectPattern(destructureProps),\n t.callExpression(t.identifier('createTypeStyles'), []),\n ),\n ]);\n ast.program.body.splice(lastImportIndex + 1, 0, factoryDecl);\n}\n\nfunction cleanupUnusedImports(ast: t.File): void {\n traverse(ast, {\n Program(path) {\n path.scope.crawl();\n },\n ImportDeclaration(path) {\n const unusedLocals = path.node.specifiers.filter((specifier) => {\n if (\n path.node.source.value === 'typestyles' &&\n t.isImportSpecifier(specifier) &&\n (specifier.local.name === 'createTypeStyles' ||\n specifier.local.name === 'createVar' ||\n specifier.local.name === 'assignVars')\n ) {\n return false;\n }\n const local = specifier.local.name;\n const binding = path.scope.getBinding(local);\n return !binding || binding.referencePaths.length === 0;\n });\n\n if (unusedLocals.length === 0) return;\n\n path.node.specifiers = path.node.specifiers.filter(\n (specifier) => !unusedLocals.includes(specifier),\n );\n if (path.node.specifiers.length === 0) {\n path.remove();\n }\n },\n });\n}\n\nfunction createAssignVarValue(propExpression: t.Expression, suffix: string): t.Expression {\n if (!suffix) return propExpression;\n\n if (t.isStringLiteral(propExpression)) {\n return t.stringLiteral(`${propExpression.value}${suffix}`);\n }\n\n return t.binaryExpression('+', propExpression, t.stringLiteral(suffix));\n}\n\nfunction buildAssignVarsCall(\n propVars: PropVarBinding[],\n propValues: Map<string, t.Expression>,\n): t.CallExpression {\n const properties = propVars\n .filter((binding) => propValues.has(binding.propName))\n .map((binding) => {\n const propExpression = propValues.get(binding.propName)!;\n return t.objectProperty(\n t.identifier(binding.varConstName),\n createAssignVarValue(propExpression, binding.suffix),\n true,\n );\n });\n\n return t.callExpression(t.identifier('assignVars'), [t.objectExpression(properties)]);\n}\n\nfunction mergeStyleExpressions(\n existing: t.Expression,\n assignVarsCall: t.CallExpression,\n): t.Expression {\n return t.objectExpression([t.spreadElement(existing), t.spreadElement(assignVarsCall)]);\n}\n\nfunction updateStyleAttribute(\n openingElement: t.JSXOpeningElement,\n assignVarsCall: t.CallExpression,\n): void {\n const existingAttr = openingElement.attributes.find(\n (attribute): attribute is t.JSXAttribute =>\n t.isJSXAttribute(attribute) && t.isJSXIdentifier(attribute.name, { name: 'style' }),\n );\n\n if (!existingAttr) {\n openingElement.attributes.push(\n t.jsxAttribute(t.jsxIdentifier('style'), t.jsxExpressionContainer(assignVarsCall)),\n );\n return;\n }\n\n if (!existingAttr.value) {\n existingAttr.value = t.jsxExpressionContainer(assignVarsCall);\n return;\n }\n\n if (t.isJSXExpressionContainer(existingAttr.value)) {\n existingAttr.value = t.jsxExpressionContainer(\n mergeStyleExpressions(existingAttr.value.expression as t.Expression, assignVarsCall),\n );\n }\n}\n\nfunction collectPropValuesFromJsx(\n openingElement: t.JSXOpeningElement,\n propNames: Set<string>,\n): Map<string, t.Expression> {\n const values = new Map<string, t.Expression>();\n\n for (const attribute of openingElement.attributes) {\n if (!t.isJSXAttribute(attribute) || !t.isJSXIdentifier(attribute.name)) continue;\n if (!propNames.has(attribute.name.name)) continue;\n\n if (!attribute.value) {\n values.set(attribute.name.name, t.booleanLiteral(true));\n continue;\n }\n\n if (t.isStringLiteral(attribute.value)) {\n values.set(attribute.name.name, t.stringLiteral(attribute.value.value));\n continue;\n }\n\n if (t.isJSXExpressionContainer(attribute.value)) {\n values.set(attribute.name.name, attribute.value.expression as t.Expression);\n }\n }\n\n return values;\n}\n\nfunction removeStyledProps(openingElement: t.JSXOpeningElement, propNames: Set<string>): void {\n openingElement.attributes = openingElement.attributes.filter((attribute) => {\n if (!t.isJSXAttribute(attribute) || !t.isJSXIdentifier(attribute.name)) return true;\n return !propNames.has(attribute.name.name);\n });\n}\n\nfunction buildComponentClassNameExpression(\n componentConstName: string,\n variantProps: string[],\n propValues: Map<string, t.Expression>,\n): t.CallExpression {\n const properties = variantProps\n .filter((propName) => propValues.has(propName))\n .map((propName) => t.objectProperty(t.identifier(propName), propValues.get(propName)!));\n\n if (properties.length === 0) {\n return t.callExpression(t.identifier(componentConstName), []);\n }\n\n return t.callExpression(t.identifier(componentConstName), [t.objectExpression(properties)]);\n}\n\nfunction migrateBooleanVariantTemplate(\n path: NodePath<t.VariableDeclarator>,\n variableName: string,\n template: t.TemplateLiteral,\n styledTarget: StyledTarget,\n warnings: MigrationWarning[],\n styledTransforms: Map<string, StyledTransform>,\n): boolean {\n const booleanInterpolations = parseBooleanTemplateInterpolations(template);\n if (!booleanInterpolations) return false;\n\n const staticCss = reconstructStaticCssWithoutVariants(template, booleanInterpolations);\n const baseObject = cssToObjectExpression(staticCss, warnings);\n if (!baseObject) {\n addWarning(warnings, 'Skipped because CSS could not be parsed.', variableName);\n return false;\n }\n\n const componentConstName = path.scope.generateUidIdentifier(\n toComponentConstName(variableName),\n ).name;\n const componentConfig = buildVariantComponentConfig(baseObject, booleanInterpolations);\n const variantProps = [\n ...new Set(booleanInterpolations.map((interpolation) => interpolation.propName)),\n ];\n\n const declaration = path.parentPath;\n if (!declaration.isVariableDeclaration()) return false;\n\n declaration.node.declarations = [\n t.variableDeclarator(\n t.identifier(componentConstName),\n t.callExpression(t.identifier('recipe'), [\n t.stringLiteral(toKebabCase(variableName)),\n componentConfig,\n ]),\n ),\n ];\n\n styledTransforms.set(variableName, {\n originalName: variableName,\n mode: 'component',\n classConstName: componentConstName,\n target: styledTarget,\n propVars: [],\n variantProps,\n });\n\n return true;\n}\n\nfunction migrateInterpolatedTemplate(\n path: NodePath<t.VariableDeclarator>,\n variableName: string,\n template: t.TemplateLiteral,\n styledTarget: StyledTarget,\n warnings: MigrationWarning[],\n styledTransforms: Map<string, StyledTransform>,\n): boolean {\n const interpolations = parseTemplateInterpolations(template);\n if (!interpolations) {\n addWarning(\n warnings,\n 'Skipped template literal with unsupported interpolations. Only prop-based patterns like `${props => props.color}` are migrated.',\n variableName,\n );\n return false;\n }\n\n const cssText = reconstructInterpolatedCss(template, interpolations);\n const propVars: PropVarBinding[] = interpolations.map((interpolation) => ({\n propName: interpolation.propName,\n varConstName: path.scope.generateUidIdentifier(\n `${variableName}${interpolation.propName.charAt(0).toUpperCase()}${interpolation.propName.slice(1)}Var`,\n ).name,\n suffix: interpolation.suffix,\n }));\n\n const varReplacements = new Map<string, t.Identifier>();\n for (let i = 0; i < interpolations.length; i++) {\n varReplacements.set(\n placeholderToken(interpolations[i].index),\n t.identifier(propVars[i].varConstName),\n );\n }\n\n const objectExpression = cssToObjectExpression(cssText, warnings, varReplacements);\n if (!objectExpression) {\n addWarning(warnings, 'Skipped because CSS could not be parsed.', variableName);\n return false;\n }\n\n const classConstName = path.scope.generateUidIdentifier(`${variableName}Class`).name;\n const varDeclarators = propVars.map((propVar) =>\n t.variableDeclarator(\n t.identifier(propVar.varConstName),\n t.callExpression(t.identifier('createVar'), [\n t.stringLiteral(toVarDebugName(variableName, propVar.propName)),\n ]),\n ),\n );\n\n const declaration = path.parentPath;\n if (!declaration.isVariableDeclaration()) return false;\n\n declaration.node.declarations = [\n ...varDeclarators,\n t.variableDeclarator(\n t.identifier(classConstName),\n t.callExpression(t.identifier('style'), [\n t.stringLiteral(toKebabCase(variableName)),\n objectExpression,\n ]),\n ),\n ];\n\n styledTransforms.set(variableName, {\n originalName: variableName,\n mode: 'class',\n classConstName,\n target: styledTarget,\n propVars,\n variantProps: [],\n });\n\n return true;\n}\n\nfunction isOnlyJsxReferences(\n binding: NodePath<t.VariableDeclarator>['scope']['bindings'][string],\n): boolean {\n return binding.referencePaths.every((referencePath) => {\n const parent = referencePath.parentPath;\n if (!parent) return false;\n return (\n (parent.isJSXOpeningElement() && parent.get('name') === referencePath) ||\n (parent.isJSXClosingElement() && parent.get('name') === referencePath)\n );\n });\n}\n\nexport function migrateSource(filePath: string, source: string): FileMigrationResult {\n const warnings: MigrationWarning[] = [];\n let changed = false;\n\n const ast = parse(source, {\n sourceType: 'module',\n plugins: ['typescript', 'jsx'],\n });\n\n const styledNames = new Set<string>();\n const cssTagNames = new Set<string>();\n const styledTransforms = new Map<string, StyledTransform>();\n let needsVars = false;\n let needsStyle = false;\n let needsRecipe = false;\n\n traverse(ast, {\n ImportDeclaration(path) {\n if (\n path.node.source.value === 'styled-components' ||\n path.node.source.value === '@emotion/styled'\n ) {\n for (const specifier of path.node.specifiers) {\n if (t.isImportDefaultSpecifier(specifier)) {\n styledNames.add(specifier.local.name);\n }\n if (\n t.isImportSpecifier(specifier) &&\n t.isIdentifier(specifier.imported, { name: 'css' })\n ) {\n cssTagNames.add(specifier.local.name);\n }\n }\n }\n\n if (\n path.node.source.value === '@emotion/react' ||\n path.node.source.value === '@emotion/css'\n ) {\n for (const specifier of path.node.specifiers) {\n if (\n t.isImportSpecifier(specifier) &&\n t.isIdentifier(specifier.imported, { name: 'css' })\n ) {\n cssTagNames.add(specifier.local.name);\n }\n }\n }\n },\n });\n\n traverse(ast, {\n VariableDeclarator(path) {\n if (!t.isIdentifier(path.node.id)) return;\n if (!t.isTaggedTemplateExpression(path.node.init)) return;\n\n const variableName = path.node.id.name;\n const binding = path.scope.getBinding(variableName);\n if (!binding) return;\n\n const template = path.node.init.quasi;\n const hasInterpolations = template.expressions.length > 0;\n const styledTarget = parseStyledTarget(path.node.init.tag, styledNames);\n\n if (hasInterpolations) {\n if (!styledTarget) {\n addWarning(\n warnings,\n 'Skipped template literal with interpolations. Only styled-components prop patterns are migrated.',\n variableName,\n );\n return;\n }\n\n const declaration = path.parentPath;\n if (\n declaration.parentPath?.isExportNamedDeclaration() ||\n declaration.parentPath?.isExportDefaultDeclaration()\n ) {\n addWarning(\n warnings,\n 'Skipped exported styled component to avoid changing external API shape.',\n variableName,\n );\n return;\n }\n\n if (!isOnlyJsxReferences(binding)) {\n addWarning(warnings, 'Skipped styled component with non-JSX references.', variableName);\n return;\n }\n\n if (\n migrateBooleanVariantTemplate(\n path,\n variableName,\n template,\n styledTarget,\n warnings,\n styledTransforms,\n )\n ) {\n needsRecipe = true;\n changed = true;\n return;\n }\n\n if (\n migrateInterpolatedTemplate(\n path,\n variableName,\n template,\n styledTarget,\n warnings,\n styledTransforms,\n )\n ) {\n needsVars = true;\n needsStyle = true;\n changed = true;\n }\n return;\n }\n\n const cssText = template.quasis.map((quasi) => quasi.value.cooked ?? '').join('');\n const objectExpression = cssToObjectExpression(cssText, warnings);\n if (!objectExpression) {\n addWarning(warnings, 'Skipped because CSS could not be parsed.', variableName);\n return;\n }\n\n if (styledTarget) {\n const declaration = path.parentPath;\n if (\n declaration.parentPath?.isExportNamedDeclaration() ||\n declaration.parentPath?.isExportDefaultDeclaration()\n ) {\n addWarning(\n warnings,\n 'Skipped exported styled component to avoid changing external API shape.',\n variableName,\n );\n return;\n }\n\n if (!isOnlyJsxReferences(binding)) {\n addWarning(warnings, 'Skipped styled component with non-JSX references.', variableName);\n return;\n }\n\n const classConstName = path.scope.generateUidIdentifier(`${variableName}Class`).name;\n path.node.id = t.identifier(classConstName);\n path.node.init = t.callExpression(t.identifier('style'), [\n t.stringLiteral(toKebabCase(variableName)),\n objectExpression,\n ]);\n\n styledTransforms.set(variableName, {\n originalName: variableName,\n mode: 'class',\n classConstName,\n target: styledTarget,\n propVars: [],\n variantProps: [],\n });\n needsStyle = true;\n changed = true;\n return;\n }\n\n if (t.isIdentifier(path.node.init.tag) && cssTagNames.has(path.node.init.tag.name)) {\n path.node.init = t.callExpression(t.identifier('style'), [\n t.stringLiteral(toKebabCase(variableName)),\n objectExpression,\n ]);\n needsStyle = true;\n changed = true;\n }\n },\n });\n\n if (styledTransforms.size > 0) {\n traverse(ast, {\n JSXElement(path) {\n const openingName = path.node.openingElement.name;\n if (!t.isJSXIdentifier(openingName)) return;\n const transform = styledTransforms.get(openingName.name);\n if (!transform) return;\n\n path.node.openingElement.name = transform.target.jsxName;\n if (path.node.closingElement) {\n path.node.closingElement.name = transform.target.jsxName;\n }\n\n const classNameExpression =\n transform.mode === 'component'\n ? buildComponentClassNameExpression(\n transform.classConstName,\n transform.variantProps,\n collectPropValuesFromJsx(path.node.openingElement, new Set(transform.variantProps)),\n )\n : t.identifier(transform.classConstName);\n\n updateClassNameAttribute(path.node.openingElement, classNameExpression);\n\n if (transform.propVars.length > 0) {\n const propNames = new Set(transform.propVars.map((propVar) => propVar.propName));\n const propValues = collectPropValuesFromJsx(path.node.openingElement, propNames);\n\n if (propValues.size > 0) {\n const assignVarsCall = buildAssignVarsCall(transform.propVars, propValues);\n updateStyleAttribute(path.node.openingElement, assignVarsCall);\n removeStyledProps(path.node.openingElement, propNames);\n }\n }\n\n if (transform.variantProps.length > 0) {\n removeStyledProps(path.node.openingElement, new Set(transform.variantProps));\n }\n },\n });\n }\n\n if (changed) {\n ensureTypestylesRuntime(ast, {\n style: needsStyle,\n recipe: needsRecipe,\n vars: needsVars,\n });\n cleanupUnusedImports(ast);\n }\n\n const output = generate(\n ast,\n {\n retainLines: false,\n comments: true,\n concise: false,\n },\n source,\n );\n\n return {\n filePath,\n changed: changed && output.code !== source,\n code: output.code,\n warnings,\n };\n}\n","import { stat } from 'node:fs/promises';\nimport { extname, relative, resolve } from 'node:path';\nimport fg from 'fast-glob';\nimport picomatch from 'picomatch';\n\nconst DEFAULT_EXCLUDES = ['**/node_modules/**', '**/dist/**', '**/.next/**', '**/.turbo/**'];\n\nfunction normalizeExtension(extension: string): string {\n return extension.startsWith('.') ? extension : `.${extension}`;\n}\n\nexport async function collectTargetFiles(\n cwd: string,\n targets: string[],\n extensions: string[],\n include: string[],\n exclude: string[],\n): Promise<string[]> {\n const normalizedTargets = targets.length > 0 ? targets : ['.'];\n const literalFiles: string[] = [];\n const dynamicPatterns: string[] = [];\n\n for (const target of normalizedTargets) {\n const absolute = resolve(cwd, target);\n try {\n const targetStat = await stat(absolute);\n if (targetStat.isFile()) {\n literalFiles.push(absolute);\n } else if (targetStat.isDirectory()) {\n dynamicPatterns.push(`${absolute.split('\\\\').join('/')}/**/*`);\n }\n } catch {\n dynamicPatterns.push(target);\n }\n }\n\n const globbed = await fg(dynamicPatterns, {\n cwd,\n absolute: true,\n onlyFiles: true,\n ignore: [...DEFAULT_EXCLUDES, ...exclude],\n });\n\n const extensionSet = new Set(extensions.map(normalizeExtension));\n const includeMatchers = include.length > 0 ? include.map((pattern) => picomatch(pattern)) : null;\n const unique = new Set([...literalFiles, ...globbed]);\n\n return Array.from(unique)\n .filter((filePath) => extensionSet.has(extname(filePath)))\n .filter((filePath) => {\n if (!includeMatchers) return true;\n const rel = relative(cwd, filePath).split('\\\\').join('/');\n return includeMatchers.some((matcher) => matcher(rel));\n })\n .sort();\n}\n","import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport { dirname, relative } from 'node:path';\nimport { createPatch } from 'diff';\nimport type { CliOptions, MigrationReport, MigrationSummary } from './types';\nimport { collectTargetFiles } from './files';\nimport { migrateSource } from './transform';\n\nfunction renderPatch(filePath: string, before: string, after: string): string {\n return createPatch(filePath, before, after, 'before', 'after').split('\\n').slice(2).join('\\n');\n}\n\nexport async function runMigration(cwd: string, options: CliOptions): Promise<MigrationReport> {\n const files = await collectTargetFiles(\n cwd,\n options.targets,\n options.extensions,\n options.include,\n options.exclude,\n );\n\n const reportEntries: MigrationReport['files'] = [];\n let changedCount = 0;\n let warningCount = 0;\n\n for (const filePath of files) {\n const before = await readFile(filePath, 'utf8');\n const result = migrateSource(filePath, before);\n const relativePath = relative(cwd, filePath);\n\n warningCount += result.warnings.length;\n if (result.changed) {\n changedCount += 1;\n if (options.write) {\n await writeFile(filePath, result.code, 'utf8');\n process.stdout.write(`updated ${relativePath}\\n`);\n } else {\n process.stdout.write(`\\n--- ${relativePath} (dry-run) ---\\n`);\n process.stdout.write(`${renderPatch(relativePath, before, result.code)}\\n`);\n }\n }\n\n for (const warning of result.warnings) {\n const nodeLabel = warning.nodeName ? ` (${warning.nodeName})` : '';\n process.stdout.write(`warning ${relativePath}${nodeLabel}: ${warning.message}\\n`);\n }\n\n reportEntries.push({\n filePath: relativePath,\n changed: result.changed,\n warnings: result.warnings,\n });\n }\n\n const summary: MigrationSummary = {\n filesScanned: files.length,\n filesChanged: changedCount,\n warnings: warningCount,\n };\n\n process.stdout.write(\n `\\nScanned ${summary.filesScanned} files, changed ${summary.filesChanged}, warnings ${summary.warnings}.\\n`,\n );\n\n const report: MigrationReport = {\n summary,\n files: reportEntries,\n };\n\n if (options.reportPath) {\n await mkdir(dirname(options.reportPath), { recursive: true });\n await writeFile(options.reportPath, `${JSON.stringify(report, null, 2)}\\n`, 'utf8');\n process.stdout.write(`Report written to ${options.reportPath}\\n`);\n }\n\n return report;\n}\n"]}
package/dist/cli.cjs CHANGED
@@ -405,17 +405,37 @@ function updateClassNameAttribute(openingElement, classNameExpression) {
405
405
  );
406
406
  }
407
407
  }
408
- function ensureTypestylesImport(ast, needsVars) {
409
- const requiredSpecifiers = /* @__PURE__ */ new Set(["styles"]);
410
- if (needsVars) {
408
+ function hasLocalBinding(ast, name) {
409
+ for (const statement of ast.program.body) {
410
+ if (!t4__namespace.isVariableDeclaration(statement)) continue;
411
+ for (const declarator of statement.declarations) {
412
+ if (t4__namespace.isIdentifier(declarator.id) && declarator.id.name === name) return true;
413
+ if (t4__namespace.isObjectPattern(declarator.id)) {
414
+ for (const prop of declarator.id.properties) {
415
+ if (t4__namespace.isObjectProperty(prop) && t4__namespace.isIdentifier(prop.value) && prop.value.name === name) {
416
+ return true;
417
+ }
418
+ }
419
+ }
420
+ }
421
+ }
422
+ return false;
423
+ }
424
+ function ensureTypestylesRuntime(ast, needs) {
425
+ const requiredSpecifiers = /* @__PURE__ */ new Set(["createTypeStyles"]);
426
+ if (needs.vars) {
411
427
  requiredSpecifiers.add("createVar");
412
428
  requiredSpecifiers.add("assignVars");
413
429
  }
414
430
  let typestylesImport = null;
415
- for (const statement of ast.program.body) {
416
- if (t4__namespace.isImportDeclaration(statement) && statement.source.value === "typestyles") {
417
- typestylesImport = statement;
418
- break;
431
+ let lastImportIndex = -1;
432
+ for (let i = 0; i < ast.program.body.length; i++) {
433
+ const statement = ast.program.body[i];
434
+ if (t4__namespace.isImportDeclaration(statement)) {
435
+ lastImportIndex = i;
436
+ if (statement.source.value === "typestyles" && typestylesImport == null) {
437
+ typestylesImport = statement;
438
+ }
419
439
  }
420
440
  }
421
441
  const buildSpecifiers = (names) => [...names].map((name) => t4__namespace.importSpecifier(t4__namespace.identifier(name), t4__namespace.identifier(name)));
@@ -423,16 +443,36 @@ function ensureTypestylesImport(ast, needsVars) {
423
443
  ast.program.body.unshift(
424
444
  t4__namespace.importDeclaration(buildSpecifiers(requiredSpecifiers), t4__namespace.stringLiteral("typestyles"))
425
445
  );
426
- return;
446
+ lastImportIndex = 0;
447
+ } else {
448
+ for (const name of requiredSpecifiers) {
449
+ const hasSpecifier = typestylesImport.specifiers.some(
450
+ (specifier) => t4__namespace.isImportSpecifier(specifier) && t4__namespace.isIdentifier(specifier.imported, { name }) && t4__namespace.isIdentifier(specifier.local, { name })
451
+ );
452
+ if (!hasSpecifier) {
453
+ typestylesImport.specifiers.push(t4__namespace.importSpecifier(t4__namespace.identifier(name), t4__namespace.identifier(name)));
454
+ }
455
+ }
427
456
  }
428
- for (const name of requiredSpecifiers) {
429
- const hasSpecifier = typestylesImport.specifiers.some(
430
- (specifier) => t4__namespace.isImportSpecifier(specifier) && t4__namespace.isIdentifier(specifier.imported, { name }) && t4__namespace.isIdentifier(specifier.local, { name })
457
+ const destructureProps = [];
458
+ if (needs.style && !hasLocalBinding(ast, "style")) {
459
+ destructureProps.push(
460
+ t4__namespace.objectProperty(t4__namespace.identifier("style"), t4__namespace.identifier("style"), false, true)
461
+ );
462
+ }
463
+ if (needs.recipe && !hasLocalBinding(ast, "recipe")) {
464
+ destructureProps.push(
465
+ t4__namespace.objectProperty(t4__namespace.identifier("recipe"), t4__namespace.identifier("recipe"), false, true)
431
466
  );
432
- if (!hasSpecifier) {
433
- typestylesImport.specifiers.push(t4__namespace.importSpecifier(t4__namespace.identifier(name), t4__namespace.identifier(name)));
434
- }
435
467
  }
468
+ if (destructureProps.length === 0) return;
469
+ const factoryDecl = t4__namespace.variableDeclaration("const", [
470
+ t4__namespace.variableDeclarator(
471
+ t4__namespace.objectPattern(destructureProps),
472
+ t4__namespace.callExpression(t4__namespace.identifier("createTypeStyles"), [])
473
+ )
474
+ ]);
475
+ ast.program.body.splice(lastImportIndex + 1, 0, factoryDecl);
436
476
  }
437
477
  function cleanupUnusedImports(ast) {
438
478
  traverse__default.default(ast, {
@@ -441,7 +481,7 @@ function cleanupUnusedImports(ast) {
441
481
  },
442
482
  ImportDeclaration(path) {
443
483
  const unusedLocals = path.node.specifiers.filter((specifier) => {
444
- if (path.node.source.value === "typestyles" && t4__namespace.isImportSpecifier(specifier) && (specifier.local.name === "styles" || specifier.local.name === "createVar" || specifier.local.name === "assignVars")) {
484
+ if (path.node.source.value === "typestyles" && t4__namespace.isImportSpecifier(specifier) && (specifier.local.name === "createTypeStyles" || specifier.local.name === "createVar" || specifier.local.name === "assignVars")) {
445
485
  return false;
446
486
  }
447
487
  const local = specifier.local.name;
@@ -552,7 +592,7 @@ function migrateBooleanVariantTemplate(path, variableName, template, styledTarge
552
592
  declaration.node.declarations = [
553
593
  t4__namespace.variableDeclarator(
554
594
  t4__namespace.identifier(componentConstName),
555
- t4__namespace.callExpression(t4__namespace.memberExpression(t4__namespace.identifier("styles"), t4__namespace.identifier("component")), [
595
+ t4__namespace.callExpression(t4__namespace.identifier("recipe"), [
556
596
  t4__namespace.stringLiteral(toKebabCase(variableName)),
557
597
  componentConfig
558
598
  ])
@@ -613,7 +653,7 @@ function migrateInterpolatedTemplate(path, variableName, template, styledTarget,
613
653
  ...varDeclarators,
614
654
  t4__namespace.variableDeclarator(
615
655
  t4__namespace.identifier(classConstName),
616
- t4__namespace.callExpression(t4__namespace.memberExpression(t4__namespace.identifier("styles"), t4__namespace.identifier("class")), [
656
+ t4__namespace.callExpression(t4__namespace.identifier("style"), [
617
657
  t4__namespace.stringLiteral(toKebabCase(variableName)),
618
658
  objectExpression4
619
659
  ])
@@ -647,6 +687,8 @@ function migrateSource(filePath, source) {
647
687
  const cssTagNames = /* @__PURE__ */ new Set();
648
688
  const styledTransforms = /* @__PURE__ */ new Map();
649
689
  let needsVars = false;
690
+ let needsStyle = false;
691
+ let needsRecipe = false;
650
692
  traverse__default.default(ast, {
651
693
  ImportDeclaration(path) {
652
694
  if (path.node.source.value === "styled-components" || path.node.source.value === "@emotion/styled") {
@@ -708,6 +750,7 @@ function migrateSource(filePath, source) {
708
750
  warnings,
709
751
  styledTransforms
710
752
  )) {
753
+ needsRecipe = true;
711
754
  changed = true;
712
755
  return;
713
756
  }
@@ -720,6 +763,7 @@ function migrateSource(filePath, source) {
720
763
  styledTransforms
721
764
  )) {
722
765
  needsVars = true;
766
+ needsStyle = true;
723
767
  changed = true;
724
768
  }
725
769
  return;
@@ -746,10 +790,10 @@ function migrateSource(filePath, source) {
746
790
  }
747
791
  const classConstName = path.scope.generateUidIdentifier(`${variableName}Class`).name;
748
792
  path.node.id = t4__namespace.identifier(classConstName);
749
- path.node.init = t4__namespace.callExpression(
750
- t4__namespace.memberExpression(t4__namespace.identifier("styles"), t4__namespace.identifier("class")),
751
- [t4__namespace.stringLiteral(toKebabCase(variableName)), objectExpression4]
752
- );
793
+ path.node.init = t4__namespace.callExpression(t4__namespace.identifier("style"), [
794
+ t4__namespace.stringLiteral(toKebabCase(variableName)),
795
+ objectExpression4
796
+ ]);
753
797
  styledTransforms.set(variableName, {
754
798
  originalName: variableName,
755
799
  mode: "class",
@@ -758,14 +802,16 @@ function migrateSource(filePath, source) {
758
802
  propVars: [],
759
803
  variantProps: []
760
804
  });
805
+ needsStyle = true;
761
806
  changed = true;
762
807
  return;
763
808
  }
764
809
  if (t4__namespace.isIdentifier(path.node.init.tag) && cssTagNames.has(path.node.init.tag.name)) {
765
- path.node.init = t4__namespace.callExpression(
766
- t4__namespace.memberExpression(t4__namespace.identifier("styles"), t4__namespace.identifier("class")),
767
- [t4__namespace.stringLiteral(toKebabCase(variableName)), objectExpression4]
768
- );
810
+ path.node.init = t4__namespace.callExpression(t4__namespace.identifier("style"), [
811
+ t4__namespace.stringLiteral(toKebabCase(variableName)),
812
+ objectExpression4
813
+ ]);
814
+ needsStyle = true;
769
815
  changed = true;
770
816
  }
771
817
  }
@@ -803,7 +849,11 @@ function migrateSource(filePath, source) {
803
849
  });
804
850
  }
805
851
  if (changed) {
806
- ensureTypestylesImport(ast, needsVars);
852
+ ensureTypestylesRuntime(ast, {
853
+ style: needsStyle,
854
+ recipe: needsRecipe,
855
+ vars: needsVars
856
+ });
807
857
  cleanupUnusedImports(ast);
808
858
  }
809
859
  const output = generate__default.default(