@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/dist/index.cjs CHANGED
@@ -266,7 +266,7 @@ function buildVariantStyles(properties) {
266
266
  )
267
267
  );
268
268
  }
269
- function buildVariantComponentConfig(baseObject, booleanInterpolations) {
269
+ function buildVariantRecipeInput(name, baseObject, booleanInterpolations) {
270
270
  const variantGroups = /* @__PURE__ */ new Map();
271
271
  for (const interpolation of booleanInterpolations) {
272
272
  const group = variantGroups.get(interpolation.propName) ?? { true: {}, false: {} };
@@ -283,13 +283,24 @@ function buildVariantComponentConfig(baseObject, booleanInterpolations) {
283
283
  ])
284
284
  )
285
285
  );
286
- const defaultVariantProperties = [...variantGroups.keys()].map(
287
- (propName) => t4__namespace.objectProperty(t4__namespace.identifier(propName), t4__namespace.booleanLiteral(false))
286
+ const axisProperties = [...variantGroups.keys()].map(
287
+ (propName) => t4__namespace.objectProperty(
288
+ t4__namespace.identifier(propName),
289
+ t4__namespace.callExpression(t4__namespace.memberExpression(t4__namespace.identifier("variant"), t4__namespace.identifier("boolean")), [
290
+ t4__namespace.objectExpression([t4__namespace.objectProperty(t4__namespace.identifier("default"), t4__namespace.booleanLiteral(false))])
291
+ ])
292
+ )
288
293
  );
289
294
  return t4__namespace.objectExpression([
290
- t4__namespace.objectProperty(t4__namespace.identifier("base"), baseObject),
291
- t4__namespace.objectProperty(t4__namespace.identifier("variants"), t4__namespace.objectExpression(variantsProperties)),
292
- t4__namespace.objectProperty(t4__namespace.identifier("defaultVariants"), t4__namespace.objectExpression(defaultVariantProperties))
295
+ t4__namespace.objectProperty(t4__namespace.identifier("name"), t4__namespace.stringLiteral(name)),
296
+ t4__namespace.objectProperty(t4__namespace.identifier("variants"), t4__namespace.objectExpression(axisProperties)),
297
+ t4__namespace.objectProperty(
298
+ t4__namespace.identifier("styles"),
299
+ t4__namespace.objectExpression([
300
+ t4__namespace.objectProperty(t4__namespace.identifier("base"), baseObject),
301
+ t4__namespace.objectProperty(t4__namespace.identifier("variants"), t4__namespace.objectExpression(variantsProperties))
302
+ ])
303
+ )
293
304
  ]);
294
305
  }
295
306
 
@@ -369,17 +380,38 @@ function updateClassNameAttribute(openingElement, classNameExpression) {
369
380
  );
370
381
  }
371
382
  }
372
- function ensureTypestylesImport(ast, needsVars) {
373
- const requiredSpecifiers = /* @__PURE__ */ new Set(["styles"]);
374
- if (needsVars) {
383
+ function hasLocalBinding(ast, name) {
384
+ for (const statement of ast.program.body) {
385
+ if (!t4__namespace.isVariableDeclaration(statement)) continue;
386
+ for (const declarator of statement.declarations) {
387
+ if (t4__namespace.isIdentifier(declarator.id) && declarator.id.name === name) return true;
388
+ if (t4__namespace.isObjectPattern(declarator.id)) {
389
+ for (const prop of declarator.id.properties) {
390
+ if (t4__namespace.isObjectProperty(prop) && t4__namespace.isIdentifier(prop.value) && prop.value.name === name) {
391
+ return true;
392
+ }
393
+ }
394
+ }
395
+ }
396
+ }
397
+ return false;
398
+ }
399
+ function ensureTypestylesRuntime(ast, needs) {
400
+ const requiredSpecifiers = /* @__PURE__ */ new Set(["createTypeStyles"]);
401
+ if (needs.recipe) requiredSpecifiers.add("variant");
402
+ if (needs.vars) {
375
403
  requiredSpecifiers.add("createVar");
376
404
  requiredSpecifiers.add("assignVars");
377
405
  }
378
406
  let typestylesImport = null;
379
- for (const statement of ast.program.body) {
380
- if (t4__namespace.isImportDeclaration(statement) && statement.source.value === "typestyles") {
381
- typestylesImport = statement;
382
- break;
407
+ let lastImportIndex = -1;
408
+ for (let i = 0; i < ast.program.body.length; i++) {
409
+ const statement = ast.program.body[i];
410
+ if (t4__namespace.isImportDeclaration(statement)) {
411
+ lastImportIndex = i;
412
+ if (statement.source.value === "typestyles" && typestylesImport == null) {
413
+ typestylesImport = statement;
414
+ }
383
415
  }
384
416
  }
385
417
  const buildSpecifiers = (names) => [...names].map((name) => t4__namespace.importSpecifier(t4__namespace.identifier(name), t4__namespace.identifier(name)));
@@ -387,16 +419,36 @@ function ensureTypestylesImport(ast, needsVars) {
387
419
  ast.program.body.unshift(
388
420
  t4__namespace.importDeclaration(buildSpecifiers(requiredSpecifiers), t4__namespace.stringLiteral("typestyles"))
389
421
  );
390
- return;
422
+ lastImportIndex = 0;
423
+ } else {
424
+ for (const name of requiredSpecifiers) {
425
+ const hasSpecifier = typestylesImport.specifiers.some(
426
+ (specifier) => t4__namespace.isImportSpecifier(specifier) && t4__namespace.isIdentifier(specifier.imported, { name }) && t4__namespace.isIdentifier(specifier.local, { name })
427
+ );
428
+ if (!hasSpecifier) {
429
+ typestylesImport.specifiers.push(t4__namespace.importSpecifier(t4__namespace.identifier(name), t4__namespace.identifier(name)));
430
+ }
431
+ }
391
432
  }
392
- for (const name of requiredSpecifiers) {
393
- const hasSpecifier = typestylesImport.specifiers.some(
394
- (specifier) => t4__namespace.isImportSpecifier(specifier) && t4__namespace.isIdentifier(specifier.imported, { name }) && t4__namespace.isIdentifier(specifier.local, { name })
433
+ const destructureProps = [];
434
+ if (needs.style && !hasLocalBinding(ast, "style")) {
435
+ destructureProps.push(
436
+ t4__namespace.objectProperty(t4__namespace.identifier("style"), t4__namespace.identifier("style"), false, true)
437
+ );
438
+ }
439
+ if (needs.recipe && !hasLocalBinding(ast, "recipe")) {
440
+ destructureProps.push(
441
+ t4__namespace.objectProperty(t4__namespace.identifier("recipe"), t4__namespace.identifier("recipe"), false, true)
395
442
  );
396
- if (!hasSpecifier) {
397
- typestylesImport.specifiers.push(t4__namespace.importSpecifier(t4__namespace.identifier(name), t4__namespace.identifier(name)));
398
- }
399
443
  }
444
+ if (destructureProps.length === 0) return;
445
+ const factoryDecl = t4__namespace.variableDeclaration("const", [
446
+ t4__namespace.variableDeclarator(
447
+ t4__namespace.objectPattern(destructureProps),
448
+ t4__namespace.callExpression(t4__namespace.identifier("createTypeStyles"), [])
449
+ )
450
+ ]);
451
+ ast.program.body.splice(lastImportIndex + 1, 0, factoryDecl);
400
452
  }
401
453
  function cleanupUnusedImports(ast) {
402
454
  traverse__default.default(ast, {
@@ -405,7 +457,7 @@ function cleanupUnusedImports(ast) {
405
457
  },
406
458
  ImportDeclaration(path) {
407
459
  const unusedLocals = path.node.specifiers.filter((specifier) => {
408
- if (path.node.source.value === "typestyles" && t4__namespace.isImportSpecifier(specifier) && (specifier.local.name === "styles" || specifier.local.name === "createVar" || specifier.local.name === "assignVars")) {
460
+ if (path.node.source.value === "typestyles" && t4__namespace.isImportSpecifier(specifier) && (specifier.local.name === "createTypeStyles" || specifier.local.name === "createVar" || specifier.local.name === "assignVars")) {
409
461
  return false;
410
462
  }
411
463
  const local = specifier.local.name;
@@ -490,10 +542,8 @@ function removeStyledProps(openingElement, propNames) {
490
542
  }
491
543
  function buildComponentClassNameExpression(componentConstName, variantProps, propValues) {
492
544
  const properties = variantProps.filter((propName) => propValues.has(propName)).map((propName) => t4__namespace.objectProperty(t4__namespace.identifier(propName), propValues.get(propName)));
493
- if (properties.length === 0) {
494
- return t4__namespace.callExpression(t4__namespace.identifier(componentConstName), []);
495
- }
496
- return t4__namespace.callExpression(t4__namespace.identifier(componentConstName), [t4__namespace.objectExpression(properties)]);
545
+ const call = properties.length === 0 ? t4__namespace.callExpression(t4__namespace.identifier(componentConstName), []) : t4__namespace.callExpression(t4__namespace.identifier(componentConstName), [t4__namespace.objectExpression(properties)]);
546
+ return t4__namespace.memberExpression(call, t4__namespace.identifier("className"));
497
547
  }
498
548
  function migrateBooleanVariantTemplate(path, variableName, template, styledTarget, warnings, styledTransforms) {
499
549
  const booleanInterpolations = parseBooleanTemplateInterpolations(template);
@@ -507,7 +557,11 @@ function migrateBooleanVariantTemplate(path, variableName, template, styledTarge
507
557
  const componentConstName = path.scope.generateUidIdentifier(
508
558
  toComponentConstName(variableName)
509
559
  ).name;
510
- const componentConfig = buildVariantComponentConfig(baseObject, booleanInterpolations);
560
+ const recipeInput = buildVariantRecipeInput(
561
+ toKebabCase(variableName),
562
+ baseObject,
563
+ booleanInterpolations
564
+ );
511
565
  const variantProps = [
512
566
  ...new Set(booleanInterpolations.map((interpolation) => interpolation.propName))
513
567
  ];
@@ -516,10 +570,7 @@ function migrateBooleanVariantTemplate(path, variableName, template, styledTarge
516
570
  declaration.node.declarations = [
517
571
  t4__namespace.variableDeclarator(
518
572
  t4__namespace.identifier(componentConstName),
519
- t4__namespace.callExpression(t4__namespace.memberExpression(t4__namespace.identifier("styles"), t4__namespace.identifier("component")), [
520
- t4__namespace.stringLiteral(toKebabCase(variableName)),
521
- componentConfig
522
- ])
573
+ t4__namespace.callExpression(t4__namespace.identifier("recipe"), [recipeInput])
523
574
  )
524
575
  ];
525
576
  styledTransforms.set(variableName, {
@@ -577,7 +628,7 @@ function migrateInterpolatedTemplate(path, variableName, template, styledTarget,
577
628
  ...varDeclarators,
578
629
  t4__namespace.variableDeclarator(
579
630
  t4__namespace.identifier(classConstName),
580
- t4__namespace.callExpression(t4__namespace.memberExpression(t4__namespace.identifier("styles"), t4__namespace.identifier("class")), [
631
+ t4__namespace.callExpression(t4__namespace.identifier("style"), [
581
632
  t4__namespace.stringLiteral(toKebabCase(variableName)),
582
633
  objectExpression4
583
634
  ])
@@ -611,6 +662,8 @@ function migrateSource(filePath, source) {
611
662
  const cssTagNames = /* @__PURE__ */ new Set();
612
663
  const styledTransforms = /* @__PURE__ */ new Map();
613
664
  let needsVars = false;
665
+ let needsStyle = false;
666
+ let needsRecipe = false;
614
667
  traverse__default.default(ast, {
615
668
  ImportDeclaration(path) {
616
669
  if (path.node.source.value === "styled-components" || path.node.source.value === "@emotion/styled") {
@@ -672,6 +725,7 @@ function migrateSource(filePath, source) {
672
725
  warnings,
673
726
  styledTransforms
674
727
  )) {
728
+ needsRecipe = true;
675
729
  changed = true;
676
730
  return;
677
731
  }
@@ -684,6 +738,7 @@ function migrateSource(filePath, source) {
684
738
  styledTransforms
685
739
  )) {
686
740
  needsVars = true;
741
+ needsStyle = true;
687
742
  changed = true;
688
743
  }
689
744
  return;
@@ -710,10 +765,10 @@ function migrateSource(filePath, source) {
710
765
  }
711
766
  const classConstName = path.scope.generateUidIdentifier(`${variableName}Class`).name;
712
767
  path.node.id = t4__namespace.identifier(classConstName);
713
- path.node.init = t4__namespace.callExpression(
714
- t4__namespace.memberExpression(t4__namespace.identifier("styles"), t4__namespace.identifier("class")),
715
- [t4__namespace.stringLiteral(toKebabCase(variableName)), objectExpression4]
716
- );
768
+ path.node.init = t4__namespace.callExpression(t4__namespace.identifier("style"), [
769
+ t4__namespace.stringLiteral(toKebabCase(variableName)),
770
+ objectExpression4
771
+ ]);
717
772
  styledTransforms.set(variableName, {
718
773
  originalName: variableName,
719
774
  mode: "class",
@@ -722,14 +777,16 @@ function migrateSource(filePath, source) {
722
777
  propVars: [],
723
778
  variantProps: []
724
779
  });
780
+ needsStyle = true;
725
781
  changed = true;
726
782
  return;
727
783
  }
728
784
  if (t4__namespace.isIdentifier(path.node.init.tag) && cssTagNames.has(path.node.init.tag.name)) {
729
- path.node.init = t4__namespace.callExpression(
730
- t4__namespace.memberExpression(t4__namespace.identifier("styles"), t4__namespace.identifier("class")),
731
- [t4__namespace.stringLiteral(toKebabCase(variableName)), objectExpression4]
732
- );
785
+ path.node.init = t4__namespace.callExpression(t4__namespace.identifier("style"), [
786
+ t4__namespace.stringLiteral(toKebabCase(variableName)),
787
+ objectExpression4
788
+ ]);
789
+ needsStyle = true;
733
790
  changed = true;
734
791
  }
735
792
  }
@@ -767,7 +824,11 @@ function migrateSource(filePath, source) {
767
824
  });
768
825
  }
769
826
  if (changed) {
770
- ensureTypestylesImport(ast, needsVars);
827
+ ensureTypestylesRuntime(ast, {
828
+ style: needsStyle,
829
+ recipe: needsRecipe,
830
+ vars: needsVars
831
+ });
771
832
  cleanupUnusedImports(ast);
772
833
  }
773
834
  const output = generate__default.default(
@@ -1 +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","postcss","camelCaseProperty","t2","t3","toKeyNode","t4","traverse","objectExpression","parse","generate","resolve","stat","fg","picomatch","extname","relative","createPatch","readFile","writeFile","mkdir","dirname"],"mappings":"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","file":"index.cjs","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 ensureTypestylesImport(ast: t.File, needsVars: boolean): void {\n const requiredSpecifiers = new Set(['styles']);\n if (needsVars) {\n requiredSpecifiers.add('createVar');\n requiredSpecifiers.add('assignVars');\n }\n\n let typestylesImport: t.ImportDeclaration | null = null;\n\n for (const statement of ast.program.body) {\n if (t.isImportDeclaration(statement) && statement.source.value === 'typestyles') {\n typestylesImport = statement;\n break;\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 return;\n }\n\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\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 === 'styles' ||\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.memberExpression(t.identifier('styles'), t.identifier('component')), [\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.memberExpression(t.identifier('styles'), t.identifier('class')), [\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\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 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 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(\n t.memberExpression(t.identifier('styles'), t.identifier('class')),\n [t.stringLiteral(toKebabCase(variableName)), objectExpression],\n );\n\n styledTransforms.set(variableName, {\n originalName: variableName,\n mode: 'class',\n classConstName,\n target: styledTarget,\n propVars: [],\n variantProps: [],\n });\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(\n t.memberExpression(t.identifier('styles'), t.identifier('class')),\n [t.stringLiteral(toKebabCase(variableName)), objectExpression],\n );\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 ensureTypestylesImport(ast, needsVars);\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"]}
1
+ {"version":3,"sources":["../src/css.ts","../src/interpolations.ts","../src/variants.ts","../src/transform.ts","../src/files.ts","../src/migrate.ts"],"names":["t","postcss","camelCaseProperty","t2","t3","toKeyNode","t4","traverse","objectExpression","parse","generate","resolve","stat","fg","picomatch","extname","relative","createPatch","readFile","writeFile","mkdir","dirname"],"mappings":"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","file":"index.cjs","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"]}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env node
2
- export { migrateSource, runMigration } from './chunk-D2W3OEBT.js';
2
+ export { migrateSource, runMigration } from './chunk-ZP5DTZ6D.js';
3
3
  //# sourceMappingURL=index.js.map
4
4
  //# sourceMappingURL=index.js.map