@typestyles/migrate 0.4.0 → 0.5.1
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 +19 -17
- package/dist/{chunk-D2W3OEBT.js → chunk-ZP5DTZ6D.js} +103 -42
- package/dist/chunk-ZP5DTZ6D.js.map +1 -0
- package/dist/cli.cjs +101 -40
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/index.cjs +101 -40
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-D2W3OEBT.js.map +0 -1
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\`...\`` | `
|
|
14
|
-
| `styled(Button)\`...\`` | `
|
|
15
|
-
| `` css`...` `` (Emotion) | `
|
|
16
|
-
| Static template literals | CSS object properties (via PostCSS parser)
|
|
17
|
-
| `` `${props => props.x}` `` | `createVar` + `assignVars` + `
|
|
18
|
-
| `` `${props => props.x ? A : B}` `` | `
|
|
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
|
|
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 `
|
|
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 {
|
|
110
|
+
import { createTypeStyles } from 'typestyles';
|
|
111
111
|
|
|
112
|
-
const
|
|
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 `
|
|
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 `
|
|
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
|
|
|
@@ -237,7 +237,7 @@ function buildVariantStyles(properties) {
|
|
|
237
237
|
)
|
|
238
238
|
);
|
|
239
239
|
}
|
|
240
|
-
function
|
|
240
|
+
function buildVariantRecipeInput(name, baseObject, booleanInterpolations) {
|
|
241
241
|
const variantGroups = /* @__PURE__ */ new Map();
|
|
242
242
|
for (const interpolation of booleanInterpolations) {
|
|
243
243
|
const group = variantGroups.get(interpolation.propName) ?? { true: {}, false: {} };
|
|
@@ -254,13 +254,24 @@ function buildVariantComponentConfig(baseObject, booleanInterpolations) {
|
|
|
254
254
|
])
|
|
255
255
|
)
|
|
256
256
|
);
|
|
257
|
-
const
|
|
258
|
-
(propName) => t4.objectProperty(
|
|
257
|
+
const axisProperties = [...variantGroups.keys()].map(
|
|
258
|
+
(propName) => t4.objectProperty(
|
|
259
|
+
t4.identifier(propName),
|
|
260
|
+
t4.callExpression(t4.memberExpression(t4.identifier("variant"), t4.identifier("boolean")), [
|
|
261
|
+
t4.objectExpression([t4.objectProperty(t4.identifier("default"), t4.booleanLiteral(false))])
|
|
262
|
+
])
|
|
263
|
+
)
|
|
259
264
|
);
|
|
260
265
|
return t4.objectExpression([
|
|
261
|
-
t4.objectProperty(t4.identifier("
|
|
262
|
-
t4.objectProperty(t4.identifier("variants"), t4.objectExpression(
|
|
263
|
-
t4.objectProperty(
|
|
266
|
+
t4.objectProperty(t4.identifier("name"), t4.stringLiteral(name)),
|
|
267
|
+
t4.objectProperty(t4.identifier("variants"), t4.objectExpression(axisProperties)),
|
|
268
|
+
t4.objectProperty(
|
|
269
|
+
t4.identifier("styles"),
|
|
270
|
+
t4.objectExpression([
|
|
271
|
+
t4.objectProperty(t4.identifier("base"), baseObject),
|
|
272
|
+
t4.objectProperty(t4.identifier("variants"), t4.objectExpression(variantsProperties))
|
|
273
|
+
])
|
|
274
|
+
)
|
|
264
275
|
]);
|
|
265
276
|
}
|
|
266
277
|
|
|
@@ -340,17 +351,38 @@ function updateClassNameAttribute(openingElement, classNameExpression) {
|
|
|
340
351
|
);
|
|
341
352
|
}
|
|
342
353
|
}
|
|
343
|
-
function
|
|
344
|
-
const
|
|
345
|
-
|
|
354
|
+
function hasLocalBinding(ast, name) {
|
|
355
|
+
for (const statement of ast.program.body) {
|
|
356
|
+
if (!t4.isVariableDeclaration(statement)) continue;
|
|
357
|
+
for (const declarator of statement.declarations) {
|
|
358
|
+
if (t4.isIdentifier(declarator.id) && declarator.id.name === name) return true;
|
|
359
|
+
if (t4.isObjectPattern(declarator.id)) {
|
|
360
|
+
for (const prop of declarator.id.properties) {
|
|
361
|
+
if (t4.isObjectProperty(prop) && t4.isIdentifier(prop.value) && prop.value.name === name) {
|
|
362
|
+
return true;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
function ensureTypestylesRuntime(ast, needs) {
|
|
371
|
+
const requiredSpecifiers = /* @__PURE__ */ new Set(["createTypeStyles"]);
|
|
372
|
+
if (needs.recipe) requiredSpecifiers.add("variant");
|
|
373
|
+
if (needs.vars) {
|
|
346
374
|
requiredSpecifiers.add("createVar");
|
|
347
375
|
requiredSpecifiers.add("assignVars");
|
|
348
376
|
}
|
|
349
377
|
let typestylesImport = null;
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
378
|
+
let lastImportIndex = -1;
|
|
379
|
+
for (let i = 0; i < ast.program.body.length; i++) {
|
|
380
|
+
const statement = ast.program.body[i];
|
|
381
|
+
if (t4.isImportDeclaration(statement)) {
|
|
382
|
+
lastImportIndex = i;
|
|
383
|
+
if (statement.source.value === "typestyles" && typestylesImport == null) {
|
|
384
|
+
typestylesImport = statement;
|
|
385
|
+
}
|
|
354
386
|
}
|
|
355
387
|
}
|
|
356
388
|
const buildSpecifiers = (names) => [...names].map((name) => t4.importSpecifier(t4.identifier(name), t4.identifier(name)));
|
|
@@ -358,16 +390,36 @@ function ensureTypestylesImport(ast, needsVars) {
|
|
|
358
390
|
ast.program.body.unshift(
|
|
359
391
|
t4.importDeclaration(buildSpecifiers(requiredSpecifiers), t4.stringLiteral("typestyles"))
|
|
360
392
|
);
|
|
361
|
-
|
|
393
|
+
lastImportIndex = 0;
|
|
394
|
+
} else {
|
|
395
|
+
for (const name of requiredSpecifiers) {
|
|
396
|
+
const hasSpecifier = typestylesImport.specifiers.some(
|
|
397
|
+
(specifier) => t4.isImportSpecifier(specifier) && t4.isIdentifier(specifier.imported, { name }) && t4.isIdentifier(specifier.local, { name })
|
|
398
|
+
);
|
|
399
|
+
if (!hasSpecifier) {
|
|
400
|
+
typestylesImport.specifiers.push(t4.importSpecifier(t4.identifier(name), t4.identifier(name)));
|
|
401
|
+
}
|
|
402
|
+
}
|
|
362
403
|
}
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
404
|
+
const destructureProps = [];
|
|
405
|
+
if (needs.style && !hasLocalBinding(ast, "style")) {
|
|
406
|
+
destructureProps.push(
|
|
407
|
+
t4.objectProperty(t4.identifier("style"), t4.identifier("style"), false, true)
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
if (needs.recipe && !hasLocalBinding(ast, "recipe")) {
|
|
411
|
+
destructureProps.push(
|
|
412
|
+
t4.objectProperty(t4.identifier("recipe"), t4.identifier("recipe"), false, true)
|
|
366
413
|
);
|
|
367
|
-
if (!hasSpecifier) {
|
|
368
|
-
typestylesImport.specifiers.push(t4.importSpecifier(t4.identifier(name), t4.identifier(name)));
|
|
369
|
-
}
|
|
370
414
|
}
|
|
415
|
+
if (destructureProps.length === 0) return;
|
|
416
|
+
const factoryDecl = t4.variableDeclaration("const", [
|
|
417
|
+
t4.variableDeclarator(
|
|
418
|
+
t4.objectPattern(destructureProps),
|
|
419
|
+
t4.callExpression(t4.identifier("createTypeStyles"), [])
|
|
420
|
+
)
|
|
421
|
+
]);
|
|
422
|
+
ast.program.body.splice(lastImportIndex + 1, 0, factoryDecl);
|
|
371
423
|
}
|
|
372
424
|
function cleanupUnusedImports(ast) {
|
|
373
425
|
traverse(ast, {
|
|
@@ -376,7 +428,7 @@ function cleanupUnusedImports(ast) {
|
|
|
376
428
|
},
|
|
377
429
|
ImportDeclaration(path) {
|
|
378
430
|
const unusedLocals = path.node.specifiers.filter((specifier) => {
|
|
379
|
-
if (path.node.source.value === "typestyles" && t4.isImportSpecifier(specifier) && (specifier.local.name === "
|
|
431
|
+
if (path.node.source.value === "typestyles" && t4.isImportSpecifier(specifier) && (specifier.local.name === "createTypeStyles" || specifier.local.name === "createVar" || specifier.local.name === "assignVars")) {
|
|
380
432
|
return false;
|
|
381
433
|
}
|
|
382
434
|
const local = specifier.local.name;
|
|
@@ -461,10 +513,8 @@ function removeStyledProps(openingElement, propNames) {
|
|
|
461
513
|
}
|
|
462
514
|
function buildComponentClassNameExpression(componentConstName, variantProps, propValues) {
|
|
463
515
|
const properties = variantProps.filter((propName) => propValues.has(propName)).map((propName) => t4.objectProperty(t4.identifier(propName), propValues.get(propName)));
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
}
|
|
467
|
-
return t4.callExpression(t4.identifier(componentConstName), [t4.objectExpression(properties)]);
|
|
516
|
+
const call = properties.length === 0 ? t4.callExpression(t4.identifier(componentConstName), []) : t4.callExpression(t4.identifier(componentConstName), [t4.objectExpression(properties)]);
|
|
517
|
+
return t4.memberExpression(call, t4.identifier("className"));
|
|
468
518
|
}
|
|
469
519
|
function migrateBooleanVariantTemplate(path, variableName, template, styledTarget, warnings, styledTransforms) {
|
|
470
520
|
const booleanInterpolations = parseBooleanTemplateInterpolations(template);
|
|
@@ -478,7 +528,11 @@ function migrateBooleanVariantTemplate(path, variableName, template, styledTarge
|
|
|
478
528
|
const componentConstName = path.scope.generateUidIdentifier(
|
|
479
529
|
toComponentConstName(variableName)
|
|
480
530
|
).name;
|
|
481
|
-
const
|
|
531
|
+
const recipeInput = buildVariantRecipeInput(
|
|
532
|
+
toKebabCase(variableName),
|
|
533
|
+
baseObject,
|
|
534
|
+
booleanInterpolations
|
|
535
|
+
);
|
|
482
536
|
const variantProps = [
|
|
483
537
|
...new Set(booleanInterpolations.map((interpolation) => interpolation.propName))
|
|
484
538
|
];
|
|
@@ -487,10 +541,7 @@ function migrateBooleanVariantTemplate(path, variableName, template, styledTarge
|
|
|
487
541
|
declaration.node.declarations = [
|
|
488
542
|
t4.variableDeclarator(
|
|
489
543
|
t4.identifier(componentConstName),
|
|
490
|
-
t4.callExpression(t4.
|
|
491
|
-
t4.stringLiteral(toKebabCase(variableName)),
|
|
492
|
-
componentConfig
|
|
493
|
-
])
|
|
544
|
+
t4.callExpression(t4.identifier("recipe"), [recipeInput])
|
|
494
545
|
)
|
|
495
546
|
];
|
|
496
547
|
styledTransforms.set(variableName, {
|
|
@@ -548,7 +599,7 @@ function migrateInterpolatedTemplate(path, variableName, template, styledTarget,
|
|
|
548
599
|
...varDeclarators,
|
|
549
600
|
t4.variableDeclarator(
|
|
550
601
|
t4.identifier(classConstName),
|
|
551
|
-
t4.callExpression(t4.
|
|
602
|
+
t4.callExpression(t4.identifier("style"), [
|
|
552
603
|
t4.stringLiteral(toKebabCase(variableName)),
|
|
553
604
|
objectExpression4
|
|
554
605
|
])
|
|
@@ -582,6 +633,8 @@ function migrateSource(filePath, source) {
|
|
|
582
633
|
const cssTagNames = /* @__PURE__ */ new Set();
|
|
583
634
|
const styledTransforms = /* @__PURE__ */ new Map();
|
|
584
635
|
let needsVars = false;
|
|
636
|
+
let needsStyle = false;
|
|
637
|
+
let needsRecipe = false;
|
|
585
638
|
traverse(ast, {
|
|
586
639
|
ImportDeclaration(path) {
|
|
587
640
|
if (path.node.source.value === "styled-components" || path.node.source.value === "@emotion/styled") {
|
|
@@ -643,6 +696,7 @@ function migrateSource(filePath, source) {
|
|
|
643
696
|
warnings,
|
|
644
697
|
styledTransforms
|
|
645
698
|
)) {
|
|
699
|
+
needsRecipe = true;
|
|
646
700
|
changed = true;
|
|
647
701
|
return;
|
|
648
702
|
}
|
|
@@ -655,6 +709,7 @@ function migrateSource(filePath, source) {
|
|
|
655
709
|
styledTransforms
|
|
656
710
|
)) {
|
|
657
711
|
needsVars = true;
|
|
712
|
+
needsStyle = true;
|
|
658
713
|
changed = true;
|
|
659
714
|
}
|
|
660
715
|
return;
|
|
@@ -681,10 +736,10 @@ function migrateSource(filePath, source) {
|
|
|
681
736
|
}
|
|
682
737
|
const classConstName = path.scope.generateUidIdentifier(`${variableName}Class`).name;
|
|
683
738
|
path.node.id = t4.identifier(classConstName);
|
|
684
|
-
path.node.init = t4.callExpression(
|
|
685
|
-
t4.
|
|
686
|
-
|
|
687
|
-
);
|
|
739
|
+
path.node.init = t4.callExpression(t4.identifier("style"), [
|
|
740
|
+
t4.stringLiteral(toKebabCase(variableName)),
|
|
741
|
+
objectExpression4
|
|
742
|
+
]);
|
|
688
743
|
styledTransforms.set(variableName, {
|
|
689
744
|
originalName: variableName,
|
|
690
745
|
mode: "class",
|
|
@@ -693,14 +748,16 @@ function migrateSource(filePath, source) {
|
|
|
693
748
|
propVars: [],
|
|
694
749
|
variantProps: []
|
|
695
750
|
});
|
|
751
|
+
needsStyle = true;
|
|
696
752
|
changed = true;
|
|
697
753
|
return;
|
|
698
754
|
}
|
|
699
755
|
if (t4.isIdentifier(path.node.init.tag) && cssTagNames.has(path.node.init.tag.name)) {
|
|
700
|
-
path.node.init = t4.callExpression(
|
|
701
|
-
t4.
|
|
702
|
-
|
|
703
|
-
);
|
|
756
|
+
path.node.init = t4.callExpression(t4.identifier("style"), [
|
|
757
|
+
t4.stringLiteral(toKebabCase(variableName)),
|
|
758
|
+
objectExpression4
|
|
759
|
+
]);
|
|
760
|
+
needsStyle = true;
|
|
704
761
|
changed = true;
|
|
705
762
|
}
|
|
706
763
|
}
|
|
@@ -738,7 +795,11 @@ function migrateSource(filePath, source) {
|
|
|
738
795
|
});
|
|
739
796
|
}
|
|
740
797
|
if (changed) {
|
|
741
|
-
|
|
798
|
+
ensureTypestylesRuntime(ast, {
|
|
799
|
+
style: needsStyle,
|
|
800
|
+
recipe: needsRecipe,
|
|
801
|
+
vars: needsVars
|
|
802
|
+
});
|
|
742
803
|
cleanupUnusedImports(ast);
|
|
743
804
|
}
|
|
744
805
|
const output = generate(
|
|
@@ -864,5 +925,5 @@ Scanned ${summary.filesScanned} files, changed ${summary.filesChanged}, warnings
|
|
|
864
925
|
}
|
|
865
926
|
|
|
866
927
|
export { migrateSource, runMigration };
|
|
867
|
-
//# sourceMappingURL=chunk-
|
|
868
|
-
//# sourceMappingURL=chunk-
|
|
928
|
+
//# sourceMappingURL=chunk-ZP5DTZ6D.js.map
|
|
929
|
+
//# sourceMappingURL=chunk-ZP5DTZ6D.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-ZP5DTZ6D.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\n/** `recipe({ name, variants, styles })` argument. Axes are `variant.boolean`; option styles live under `styles`. */\nexport function buildVariantRecipeInput(\n name: string,\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 axisProperties = [...variantGroups.keys()].map((propName) =>\n t.objectProperty(\n t.identifier(propName),\n t.callExpression(t.memberExpression(t.identifier('variant'), t.identifier('boolean')), [\n t.objectExpression([t.objectProperty(t.identifier('default'), t.booleanLiteral(false))]),\n ]),\n ),\n );\n\n return t.objectExpression([\n t.objectProperty(t.identifier('name'), t.stringLiteral(name)),\n t.objectProperty(t.identifier('variants'), t.objectExpression(axisProperties)),\n t.objectProperty(\n t.identifier('styles'),\n t.objectExpression([\n t.objectProperty(t.identifier('base'), baseObject),\n t.objectProperty(t.identifier('variants'), t.objectExpression(variantsProperties)),\n ]),\n ),\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 { buildVariantRecipeInput } 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.recipe) requiredSpecifiers.add('variant');\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.MemberExpression {\n const properties = variantProps\n .filter((propName) => propValues.has(propName))\n .map((propName) => t.objectProperty(t.identifier(propName), propValues.get(propName)!));\n\n const call =\n properties.length === 0\n ? t.callExpression(t.identifier(componentConstName), [])\n : t.callExpression(t.identifier(componentConstName), [t.objectExpression(properties)]);\n\n return t.memberExpression(call, t.identifier('className'));\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 recipeInput = buildVariantRecipeInput(\n toKebabCase(variableName),\n baseObject,\n booleanInterpolations,\n );\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'), [recipeInput]),\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"]}
|