@typestyles/migrate 0.5.3 → 0.5.4
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/cli.cjs +1 -1
- package/dist/cli.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/{migrate-C2D1XXFr.cjs → migrate-B3MfAQI5.cjs} +6 -3
- package/dist/migrate-B3MfAQI5.cjs.map +1 -0
- package/dist/{migrate-DFON1MgM.js → migrate-DUG0GWWo.js} +6 -3
- package/dist/migrate-DUG0GWWo.js.map +1 -0
- package/package.json +7 -7
- package/dist/migrate-C2D1XXFr.cjs.map +0 -1
- package/dist/migrate-DFON1MgM.js.map +0 -1
package/dist/cli.cjs
CHANGED
package/dist/cli.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const require_migrate = require("./migrate-
|
|
3
|
+
const require_migrate = require("./migrate-B3MfAQI5.cjs");
|
|
4
4
|
exports.migrateSource = require_migrate.migrateSource;
|
|
5
5
|
exports.runMigration = require_migrate.runMigration;
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
export { n as migrateSource, t as runMigration } from "./migrate-
|
|
2
|
+
export { n as migrateSource, t as runMigration } from "./migrate-DUG0GWWo.js";
|
|
@@ -41,10 +41,13 @@ picomatch = __toESM(picomatch, 1);
|
|
|
41
41
|
function camelCaseProperty$1(property) {
|
|
42
42
|
return property.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
43
43
|
}
|
|
44
|
+
function numberNode(n) {
|
|
45
|
+
return n < 0 ? _babel_types.unaryExpression("-", _babel_types.numericLiteral(-n)) : _babel_types.numericLiteral(n);
|
|
46
|
+
}
|
|
44
47
|
function toValueNode(value, varReplacements) {
|
|
45
48
|
const trimmed = value.trim();
|
|
46
49
|
if (varReplacements?.has(trimmed)) return varReplacements.get(trimmed);
|
|
47
|
-
if (/^-?\d+(\.\d+)?$/.test(trimmed)) return
|
|
50
|
+
if (/^-?\d+(\.\d+)?$/.test(trimmed)) return numberNode(Number(trimmed));
|
|
48
51
|
return _babel_types.stringLiteral(trimmed);
|
|
49
52
|
}
|
|
50
53
|
function toKeyNode$1(key) {
|
|
@@ -219,7 +222,7 @@ function toComponentConstName(componentName) {
|
|
|
219
222
|
//#endregion
|
|
220
223
|
//#region src/variants.ts
|
|
221
224
|
function toCssValueNode(value) {
|
|
222
|
-
if (/^-?\d+(\.\d+)?$/.test(value.trim())) return
|
|
225
|
+
if (/^-?\d+(\.\d+)?$/.test(value.trim())) return numberNode(Number(value));
|
|
223
226
|
return _babel_types.stringLiteral(value);
|
|
224
227
|
}
|
|
225
228
|
function toKeyNode(key) {
|
|
@@ -722,4 +725,4 @@ Object.defineProperty(exports, "runMigration", {
|
|
|
722
725
|
}
|
|
723
726
|
});
|
|
724
727
|
|
|
725
|
-
//# sourceMappingURL=migrate-
|
|
728
|
+
//# sourceMappingURL=migrate-B3MfAQI5.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-B3MfAQI5.cjs","names":["camelCaseProperty","t","toKeyNode","t","t","t","parse","generate","resolve","stat","fg","extname","relative","createPatch","readFile","relative","writeFile","mkdir","dirname"],"sources":["../src/css.ts","../src/interpolations.ts","../src/variants.ts","../src/transform.ts","../src/files.ts","../src/migrate.ts"],"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\n/** A numeric CSS value as an AST node. Babel 8 rejects negative `numericLiteral`s, so `-1` is `-(1)`. */\nexport function numberNode(n: number): t.Expression {\n return n < 0 ? t.unaryExpression('-', t.numericLiteral(-n)) : t.numericLiteral(n);\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 numberNode(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 { numberNode } from './css';\nimport type { BooleanTernaryInterpolation } from './interpolations';\n\nfunction toCssValueNode(value: string): t.Expression {\n if (/^-?\\d+(\\.\\d+)?$/.test(value.trim())) {\n return numberNode(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"],"mappings":"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"}
|
|
@@ -13,10 +13,13 @@ import picomatch from "picomatch";
|
|
|
13
13
|
function camelCaseProperty$1(property) {
|
|
14
14
|
return property.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
15
15
|
}
|
|
16
|
+
function numberNode(n) {
|
|
17
|
+
return n < 0 ? t.unaryExpression("-", t.numericLiteral(-n)) : t.numericLiteral(n);
|
|
18
|
+
}
|
|
16
19
|
function toValueNode(value, varReplacements) {
|
|
17
20
|
const trimmed = value.trim();
|
|
18
21
|
if (varReplacements?.has(trimmed)) return varReplacements.get(trimmed);
|
|
19
|
-
if (/^-?\d+(\.\d+)?$/.test(trimmed)) return
|
|
22
|
+
if (/^-?\d+(\.\d+)?$/.test(trimmed)) return numberNode(Number(trimmed));
|
|
20
23
|
return t.stringLiteral(trimmed);
|
|
21
24
|
}
|
|
22
25
|
function toKeyNode$1(key) {
|
|
@@ -191,7 +194,7 @@ function toComponentConstName(componentName) {
|
|
|
191
194
|
//#endregion
|
|
192
195
|
//#region src/variants.ts
|
|
193
196
|
function toCssValueNode(value) {
|
|
194
|
-
if (/^-?\d+(\.\d+)?$/.test(value.trim())) return
|
|
197
|
+
if (/^-?\d+(\.\d+)?$/.test(value.trim())) return numberNode(Number(value));
|
|
195
198
|
return t.stringLiteral(value);
|
|
196
199
|
}
|
|
197
200
|
function toKeyNode(key) {
|
|
@@ -683,4 +686,4 @@ async function runMigration(cwd, options) {
|
|
|
683
686
|
//#endregion
|
|
684
687
|
export { migrateSource as n, runMigration as t };
|
|
685
688
|
|
|
686
|
-
//# sourceMappingURL=migrate-
|
|
689
|
+
//# sourceMappingURL=migrate-DUG0GWWo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-DUG0GWWo.js","names":["camelCaseProperty","toKeyNode"],"sources":["../src/css.ts","../src/interpolations.ts","../src/variants.ts","../src/transform.ts","../src/files.ts","../src/migrate.ts"],"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\n/** A numeric CSS value as an AST node. Babel 8 rejects negative `numericLiteral`s, so `-1` is `-(1)`. */\nexport function numberNode(n: number): t.Expression {\n return n < 0 ? t.unaryExpression('-', t.numericLiteral(-n)) : t.numericLiteral(n);\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 numberNode(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 { numberNode } from './css';\nimport type { BooleanTernaryInterpolation } from './interpolations';\n\nfunction toCssValueNode(value: string): t.Expression {\n if (/^-?\\d+(\\.\\d+)?$/.test(value.trim())) {\n return numberNode(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"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typestyles/migrate",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"description": "CLI codemods for migrating codebases to typestyles",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -41,18 +41,18 @@
|
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/babel__generator": "^7.27.0",
|
|
43
43
|
"@types/babel__traverse": "^7.28.0",
|
|
44
|
-
"@types/node": "^
|
|
44
|
+
"@types/node": "^24.13.0",
|
|
45
45
|
"@types/picomatch": "^4.0.2",
|
|
46
46
|
"typescript": "^6.0.0",
|
|
47
47
|
"vitest": "5.0.5",
|
|
48
48
|
"vite-plus": "1.3.0"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@babel/generator": "^
|
|
52
|
-
"@babel/parser": "^
|
|
53
|
-
"@babel/traverse": "^
|
|
54
|
-
"@babel/types": "^
|
|
55
|
-
"diff": "^
|
|
51
|
+
"@babel/generator": "^8.0.6",
|
|
52
|
+
"@babel/parser": "^8.0.8",
|
|
53
|
+
"@babel/traverse": "^8.0.7",
|
|
54
|
+
"@babel/types": "^8.0.8",
|
|
55
|
+
"diff": "^9.0.0",
|
|
56
56
|
"fast-glob": "^3.3.3",
|
|
57
57
|
"picomatch": "^4.0.3",
|
|
58
58
|
"postcss": "^8.5.8"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-C2D1XXFr.cjs","names":["camelCaseProperty","t","toKeyNode","t","t","t","parse","generate","resolve","stat","fg","extname","relative","createPatch","readFile","relative","writeFile","mkdir","dirname"],"sources":["../src/css.ts","../src/interpolations.ts","../src/variants.ts","../src/transform.ts","../src/files.ts","../src/migrate.ts"],"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"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrate-DFON1MgM.js","names":["camelCaseProperty","toKeyNode"],"sources":["../src/css.ts","../src/interpolations.ts","../src/variants.ts","../src/transform.ts","../src/files.ts","../src/migrate.ts"],"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"],"mappings":";;;;;;;;;;;;AAIA,SAASA,oBAAkB,UAA0B;CACnD,OAAO,SAAS,QAAQ,cAAc,GAAG,WAAmB,OAAO,YAAY,CAAC;AAClF;AAEA,SAAS,YAAY,OAAe,iBAA2D;CAC7F,MAAM,UAAU,MAAM,KAAK;CAC3B,IAAI,iBAAiB,IAAI,OAAO,GAC9B,OAAO,gBAAgB,IAAI,OAAO;CAEpC,IAAI,kBAAkB,KAAK,OAAO,GAChC,OAAO,EAAE,eAAe,OAAO,OAAO,CAAC;CAEzC,OAAO,EAAE,cAAc,OAAO;AAChC;AAEA,SAASC,YAAU,KAA2B;CAC5C,IAAI,6BAA6B,KAAK,GAAG,GACvC,OAAO,EAAE,WAAW,GAAG;CAEzB,OAAO,EAAE,cAAc,GAAG;AAC5B;AAEA,SAAS,cACP,OACA,UACA,iBACoB;CACpB,MAAM,aAAiC,CAAC;CAExC,KAAK,MAAM,QAAQ,SAAS,CAAC,GAAG;EAC9B,IAAI,KAAK,SAAS,QAAQ;GACxB,MAAM,aAAa,KAAK,KAAK,WAAW,IAAI,IAAI,KAAK,OAAOD,oBAAkB,KAAK,IAAI;GACvF,WAAW,KACT,EAAE,eAAeC,YAAU,UAAU,GAAG,YAAY,KAAK,OAAO,eAAe,CAAC,CAClF;GACA;EACF;EAEA,IAAI,KAAK,SAAS,QAAQ;GACxB,MAAM,SAAS,cAAc,KAAK,OAAO,UAAU,eAAe;GAClE,WAAW,KAAK,EAAE,eAAe,EAAE,cAAc,KAAK,SAAS,KAAK,CAAC,GAAG,MAAM,CAAC;GAC/E;EACF;EAEA,IAAI,KAAK,SAAS,UAAU;GAC1B,MAAM,SAAS,cAAc,KAAK,OAAO,UAAU,eAAe;GAClE,MAAM,YAAY,IAAI,KAAK,OAAO,KAAK,SAAS,IAAI,KAAK,WAAW;GACpE,WAAW,KAAK,EAAE,eAAe,EAAE,cAAc,SAAS,GAAG,MAAM,CAAC;GACpE;EACF;EAEA,SAAS,KAAK,EACZ,SAAS,yBAAyB,KAAK,KAAK,YAC9C,CAAC;CACH;CAEA,OAAO,EAAE,iBAAiB,UAAU;AACtC;AAEA,SAAgB,sBACd,SACA,UACA,iBAC2B;CAC3B,IAAI;EAEF,OAAO,cADM,QAAQ,MAAM,OACF,CAAC,CAA0B,OAAO,UAAU,eAAe;CACtF,SAAS,OAAO;EACd,SAAS,KAAK,EACZ,SAAS,yCAA0C,MAAgB,UACrE,CAAC;EACD,OAAO;CACT;AACF;;;AC7DA,MAAM,qBAAqB;AAE3B,SAAS,kBAAkB,UAA0B;CACnD,OAAO,SAAS,QAAQ,cAAc,GAAG,WAAmB,OAAO,YAAY,CAAC;AAClF;AAEA,SAAgB,iBAAiB,OAAuB;CACtD,OAAO,GAAG,qBAAqB,MAAM;AACvC;AAEA,SAAS,uBAAuB,WAA2B;CAEzD,OADc,UAAU,MAAM,YACnB,CAAC,GAAG,MAAM;AACvB;AAEA,SAAS,kBAAkB,MAA6B;CACtD,IAAI,EAAE,gBAAgB,IAAI,GAAG,OAAO,KAAK;CACzC,IAAI,EAAE,iBAAiB,IAAI,GAAG,OAAO,OAAO,KAAK,KAAK;CACtD,OAAO;AACT;AAEA,SAAS,iBAAiB,YAAwC;CAChE,IAAI,EAAE,0BAA0B,UAAU,GACxC,OAAO,iBAAiB,WAAW,UAAU;CAE/C,OAAO;AACT;AAEA,SAAS,sCAAsC,WAAkC;CAE/E,OADc,UAAU,MAAM,sBACnB,CAAC,GAAG,MAAM;AACvB;AAEA,SAAS,iCAAiC,WAA2B;CACnE,OAAO,UAAU,QAAQ,sBAAsB,EAAE;AACnD;AAEA,SAAS,iCAAiC,WAA2B;CACnE,MAAM,UAAU,UAAU,QAAQ,GAAG;CACrC,IAAI,YAAY,IAAI,OAAO;CAC3B,OAAO,UAAU,MAAM,UAAU,CAAC,CAAC,CAAC,UAAU;AAChD;AAMA,SAAgB,uBAAuB,YAAuD;CAC5F,IAAI,CAAC,EAAE,0BAA0B,UAAU,GAAG,OAAO;CAErD,MAAM,QAAQ,WAAW,OAAO;CAChC,IAAI,CAAC,OAAO,OAAO;CAEnB,MAAM,OAAO,iBAAiB,WAAW,IAAoB;CAC7D,IAAI,CAAC,EAAE,aAAa,IAAI,GAAG,OAAO;CAElC,IAAI,EAAE,aAAa,KAAK,GAAG;EACzB,IACE,EAAE,mBAAmB,IAAI,KACzB,CAAC,KAAK,YACN,EAAE,aAAa,KAAK,QAAQ,EAAE,MAAM,MAAM,KAAK,CAAC,KAChD,EAAE,aAAa,KAAK,QAAQ,GAE5B,OAAO,EAAE,UAAU,KAAK,SAAS,KAAK;EAExC,OAAO;CACT;CAEA,IAAI,EAAE,gBAAgB,KAAK,KAAK,EAAE,aAAa,IAAI,GAAG;EACpD,MAAM,WAAW,KAAK;EAUtB,IAAI,CATY,MAAM,WAAW,MAAM,aAAa;GAClD,IAAI,CAAC,EAAE,iBAAiB,QAAQ,GAAG,OAAO;GAM1C,QALgB,EAAE,aAAa,SAAS,GAAG,IACvC,SAAS,IAAI,OACb,EAAE,gBAAgB,SAAS,GAAG,IAC5B,SAAS,IAAI,QACb,UACa;EACrB,CACW,GAAG,OAAO;EACrB,OAAO,EAAE,SAAS;CACpB;CAEA,OAAO;AACT;AAKA,SAAgB,iCACd,YACoE;CACpE,IAAI,CAAC,EAAE,0BAA0B,UAAU,GAAG,OAAO;CAErD,MAAM,QAAQ,WAAW,OAAO;CAChC,IAAI,CAAC,EAAE,aAAa,KAAK,GAAG,OAAO;CAEnC,MAAM,OAAO,iBAAiB,WAAW,IAAoB;CAC7D,IAAI,CAAC,EAAE,wBAAwB,IAAI,GAAG,OAAO;CAE7C,IACE,CAAC,EAAE,mBAAmB,KAAK,IAAI,KAC/B,KAAK,KAAK,YACV,CAAC,EAAE,aAAa,KAAK,KAAK,QAAQ,EAAE,MAAM,MAAM,KAAK,CAAC,KACtD,CAAC,EAAE,aAAa,KAAK,KAAK,QAAQ,GAElC,OAAO;CAGT,MAAM,YAAY,kBAAkB,KAAK,UAAU;CACnD,MAAM,aAAa,kBAAkB,KAAK,SAAS;CACnD,IAAI,cAAc,QAAQ,eAAe,MAAM,OAAO;CAEtD,OAAO;EACL,UAAU,KAAK,KAAK,SAAS;EAC7B;EACA;CACF;AACF;AAEA,SAAgB,4BACd,UAC4B;CAC5B,MAAM,iBAAsC,CAAC;CAE7C,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,YAAY,QAAQ,KAAK;EACpD,MAAM,aAAa,SAAS,YAAY;EACxC,IAAI,CAAC,EAAE,aAAa,UAAU,GAAG,OAAO;EAExC,MAAM,SAAS,uBAAuB,UAAU;EAChD,IAAI,CAAC,QAAQ,OAAO;EAEpB,MAAM,iBAAiB,SAAS,OAAO,IAAI,EAAE,EAAE,MAAM,UAAU;EAC/D,eAAe,KAAK;GAClB,OAAO;GACP,UAAU,OAAO;GACjB,QAAQ,uBAAuB,cAAc;EAC/C,CAAC;CACH;CAEA,OAAO;AACT;AAEA,SAAgB,mCACd,UACsC;CACtC,MAAM,iBAAgD,CAAC;CAEvD,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,YAAY,QAAQ,KAAK;EACpD,MAAM,aAAa,SAAS,YAAY;EACxC,IAAI,CAAC,EAAE,aAAa,UAAU,GAAG,OAAO;EAExC,MAAM,SAAS,iCAAiC,UAAU;EAC1D,IAAI,CAAC,QAAQ,OAAO;EAGpB,MAAM,cAAc,sCADA,SAAS,OAAO,EAAE,EAAE,MAAM,UAAU,EACa;EACrE,IAAI,CAAC,aAAa,OAAO;EAEzB,eAAe,KAAK;GAClB,OAAO;GACP,UAAU,OAAO;GACjB,WAAW,OAAO;GAClB,YAAY,OAAO;GACnB,aAAa,kBAAkB,WAAW;EAC5C,CAAC;CACH;CAEA,OAAO;AACT;AAEA,SAAgB,2BACd,UACA,gBACQ;CACR,IAAI,SAAS;CAEb,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,OAAO,QAAQ,KAAK;EAC/C,IAAI,YAAY,SAAS,OAAO,EAAE,CAAC,MAAM,UAAU;EAEnD,IAAI,IAAI,GAAG;GACT,MAAM,gBAAgB,eAAe,IAAI;GACzC,IAAI,eAAe,UAAU,UAAU,WAAW,cAAc,MAAM,GACpE,YAAY,UAAU,MAAM,cAAc,OAAO,MAAM;EAE3D;EAEA,UAAU;EAEV,IAAI,IAAI,eAAe,QACrB,UAAU,iBAAiB,eAAe,EAAE,CAAC,KAAK;CAEtD;CAEA,OAAO;AACT;AAEA,SAAgB,oCACd,UACA,uBACQ;CACR,MAAM,cAAc,IAAI,IAAI,sBAAsB,KAAK,kBAAkB,cAAc,KAAK,CAAC;CAC7F,IAAI,SAAS;CAEb,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,OAAO,QAAQ,KAAK;EAC/C,IAAI,YAAY,SAAS,OAAO,EAAE,CAAC,MAAM,UAAU;EAEnD,IAAI,YAAY,IAAI,CAAC,GACnB,YAAY,iCAAiC,SAAS;EAGxD,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,GAChC,YAAY,iCAAiC,SAAS;EAGxD,UAAU;CACZ;CAEA,OAAO,OAAO,KAAK;AACrB;AAEA,SAAgB,eAAe,eAAuB,UAA0B;CAC9E,OAAO,GAAG,gBAAgB,SAAS,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,SAAS,MAAM,CAAC;AAC/E;AAEA,SAAgB,qBAAqB,eAA+B;CAClE,IAAI,CAAC,eAAe,OAAO;CAC3B,OAAO,cAAc,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,cAAc,MAAM,CAAC;AACtE;;;ACjPA,SAAS,eAAe,OAA6B;CACnD,IAAI,kBAAkB,KAAK,MAAM,KAAK,CAAC,GACrC,OAAO,EAAE,eAAe,OAAO,KAAK,CAAC;CAEvC,OAAO,EAAE,cAAc,KAAK;AAC9B;AAEA,SAAS,UAAU,KAA2B;CAC5C,IAAI,6BAA6B,KAAK,GAAG,GACvC,OAAO,EAAE,WAAW,GAAG;CAEzB,OAAO,EAAE,cAAc,GAAG;AAC5B;AAEA,SAAS,mBAAmB,YAAwD;CAClF,OAAO,EAAE,iBACP,OAAO,QAAQ,UAAU,CAAC,CAAC,KAAK,CAAC,KAAK,WACpC,EAAE,eAAe,UAAU,GAAG,GAAG,eAAe,KAAK,CAAC,CACxD,CACF;AACF;AAGA,SAAgB,wBACd,MACA,YACA,uBACoB;CACpB,MAAM,gBAAgB,IAAI,IAGxB;CAEF,KAAK,MAAM,iBAAiB,uBAAuB;EACjD,MAAM,QAAQ,cAAc,IAAI,cAAc,QAAQ,KAAK;GAAE,MAAM,CAAC;GAAG,OAAO,CAAC;EAAE;EACjF,MAAM,KAAK,cAAc,eAAe,cAAc;EACtD,MAAM,MAAM,cAAc,eAAe,cAAc;EACvD,cAAc,IAAI,cAAc,UAAU,KAAK;CACjD;CAEA,MAAM,qBAAqB,CAAC,GAAG,cAAc,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,YACtE,EAAE,eACA,EAAE,WAAW,QAAQ,GACrB,EAAE,iBAAiB,CACjB,EAAE,eAAe,EAAE,WAAW,MAAM,GAAG,mBAAmB,OAAO,IAAI,CAAC,GACtE,EAAE,eAAe,EAAE,WAAW,OAAO,GAAG,mBAAmB,OAAO,KAAK,CAAC,CAC1E,CAAC,CACH,CACF;CAEA,MAAM,iBAAiB,CAAC,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC,KAAK,aACpD,EAAE,eACA,EAAE,WAAW,QAAQ,GACrB,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,SAAS,GAAG,EAAE,WAAW,SAAS,CAAC,GAAG,CACrF,EAAE,iBAAiB,CAAC,EAAE,eAAe,EAAE,WAAW,SAAS,GAAG,EAAE,eAAe,KAAK,CAAC,CAAC,CAAC,CACzF,CAAC,CACH,CACF;CAEA,OAAO,EAAE,iBAAiB;EACxB,EAAE,eAAe,EAAE,WAAW,MAAM,GAAG,EAAE,cAAc,IAAI,CAAC;EAC5D,EAAE,eAAe,EAAE,WAAW,UAAU,GAAG,EAAE,iBAAiB,cAAc,CAAC;EAC7E,EAAE,eACA,EAAE,WAAW,QAAQ,GACrB,EAAE,iBAAiB,CACjB,EAAE,eAAe,EAAE,WAAW,MAAM,GAAG,UAAU,GACjD,EAAE,eAAe,EAAE,WAAW,UAAU,GAAG,EAAE,iBAAiB,kBAAkB,CAAC,CACnF,CAAC,CACH;CACF,CAAC;AACH;;;ACrCA,SAAS,YAAY,OAAuB;CAC1C,OAAO,MACJ,QAAQ,sBAAsB,OAAO,CAAC,CACtC,QAAQ,WAAW,GAAG,CAAC,CACvB,YAAY;AACjB;AAEA,SAAS,0BACP,YACgD;CAChD,IAAI,EAAE,aAAa,UAAU,GAC3B,OAAO,EAAE,cAAc,WAAW,IAAI;CAGxC,IAAI,EAAE,mBAAmB,UAAU,KAAK,CAAC,WAAW,UAAU;EAC5D,MAAM,OAAO,0BAA0B,WAAW,MAAsB;EACxE,MAAM,QAAQ,EAAE,aAAa,WAAW,QAAQ,IAC5C,EAAE,cAAc,WAAW,SAAS,IAAI,IACxC;EACJ,IAAI,CAAC,QAAQ,CAAC,OAAO,OAAO;EAC5B,OAAO,EAAE,oBAAoB,MAAM,KAAK;CAC1C;CAEA,OAAO;AACT;AAEA,SAAS,kBACP,KACA,aACqB;CACrB,IACE,EAAE,mBAAmB,GAAG,KACxB,EAAE,aAAa,IAAI,MAAM,KACzB,YAAY,IAAI,IAAI,OAAO,IAAI,KAC/B,EAAE,aAAa,IAAI,QAAQ,GAE3B,OAAO;EAAE,MAAM;EAAa,SAAS,EAAE,cAAc,IAAI,SAAS,IAAI;CAAE;CAG1E,IAAI,EAAE,iBAAiB,GAAG,KAAK,EAAE,aAAa,IAAI,MAAM,KAAK,YAAY,IAAI,IAAI,OAAO,IAAI,GAAG;EAC7F,MAAM,WAAW,IAAI,UAAU;EAC/B,IAAI,CAAC,YAAY,CAAC,EAAE,aAAa,QAAQ,GAAG,OAAO;EACnD,MAAM,UAAU,0BAA0B,QAAQ;EAClD,IAAI,CAAC,SAAS,OAAO;EACrB,OAAO;GAAE,MAAM;GAAa;EAAQ;CACtC;CAEA,OAAO;AACT;AAEA,SAAS,WAAW,UAA8B,SAAiB,UAAyB;CAC1F,SAAS,KAAK;EAAE;EAAS;CAAS,CAAC;AACrC;AAEA,SAAS,4BACP,UACA,qBACc;CACd,OAAO,EAAE,eACP,EAAE,iBACA,EAAE,eACA,EAAE,iBACA,EAAE,gBAAgB,CAAC,UAAU,mBAAmB,CAAC,GACjD,EAAE,WAAW,QAAQ,CACvB,GACA,CAAC,EAAE,WAAW,SAAS,CAAC,CAC1B,GACA,EAAE,WAAW,MAAM,CACrB,GACA,CAAC,EAAE,cAAc,GAAG,CAAC,CACvB;AACF;AAEA,SAAS,yBACP,gBACA,qBACM;CACN,MAAM,eAAe,eAAe,WAAW,MAC5C,cACC,EAAE,eAAe,SAAS,KAAK,EAAE,gBAAgB,UAAU,MAAM,EAAE,MAAM,YAAY,CAAC,CAC1F;CAEA,IAAI,CAAC,cAAc;EACjB,eAAe,WAAW,KACxB,EAAE,aAAa,EAAE,cAAc,WAAW,GAAG,EAAE,uBAAuB,mBAAmB,CAAC,CAC5F;EACA;CACF;CAEA,IAAI,CAAC,aAAa,OAAO;EACvB,aAAa,QAAQ,EAAE,uBAAuB,mBAAmB;EACjE;CACF;CAEA,IAAI,EAAE,gBAAgB,aAAa,KAAK,GAAG;EACzC,aAAa,QAAQ,EAAE,uBACrB,4BAA4B,EAAE,cAAc,aAAa,MAAM,KAAK,GAAG,mBAAmB,CAC5F;EACA;CACF;CAEA,IAAI,EAAE,yBAAyB,aAAa,KAAK,GAC/C,aAAa,QAAQ,EAAE,uBACrB,4BACE,aAAa,MAAM,YACnB,mBACF,CACF;AAEJ;AAEA,SAAS,gBAAgB,KAAa,MAAuB;CAC3D,KAAK,MAAM,aAAa,IAAI,QAAQ,MAAM;EACxC,IAAI,CAAC,EAAE,sBAAsB,SAAS,GAAG;EACzC,KAAK,MAAM,cAAc,UAAU,cAAc;GAC/C,IAAI,EAAE,aAAa,WAAW,EAAE,KAAK,WAAW,GAAG,SAAS,MAAM,OAAO;GACzE,IAAI,EAAE,gBAAgB,WAAW,EAAE,GAC5B;SAAA,MAAM,QAAQ,WAAW,GAAG,YAC/B,IAAI,EAAE,iBAAiB,IAAI,KAAK,EAAE,aAAa,KAAK,KAAK,KAAK,KAAK,MAAM,SAAS,MAChF,OAAO;GAAA;EAIf;CACF;CACA,OAAO;AACT;AAEA,SAAS,wBACP,KACA,OACM;CACN,MAAM,qBAAqB,IAAI,IAAY,CAAC,kBAAkB,CAAC;CAC/D,IAAI,MAAM,QAAQ,mBAAmB,IAAI,SAAS;CAClD,IAAI,MAAM,MAAM;EACd,mBAAmB,IAAI,WAAW;EAClC,mBAAmB,IAAI,YAAY;CACrC;CAEA,IAAI,mBAA+C;CACnD,IAAI,kBAAkB;CAEtB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK,QAAQ,KAAK;EAChD,MAAM,YAAY,IAAI,QAAQ,KAAK;EACnC,IAAI,EAAE,oBAAoB,SAAS,GAAG;GACpC,kBAAkB;GAClB,IAAI,UAAU,OAAO,UAAU,gBAAgB,oBAAoB,MACjE,mBAAmB;EAEvB;CACF;CAEA,MAAM,mBAAmB,UACvB,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,SAAS,EAAE,gBAAgB,EAAE,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,CAAC,CAAC;CAEpF,IAAI,CAAC,kBAAkB;EACrB,IAAI,QAAQ,KAAK,QACf,EAAE,kBAAkB,gBAAgB,kBAAkB,GAAG,EAAE,cAAc,YAAY,CAAC,CACxF;EACA,kBAAkB;CACpB,OACE,KAAK,MAAM,QAAQ,oBAQjB,IAAI,CAPiB,iBAAiB,WAAW,MAC9C,cACC,EAAE,kBAAkB,SAAS,KAC7B,EAAE,aAAa,UAAU,UAAU,EAAE,KAAK,CAAC,KAC3C,EAAE,aAAa,UAAU,OAAO,EAAE,KAAK,CAAC,CAG5B,GACd,iBAAiB,WAAW,KAAK,EAAE,gBAAgB,EAAE,WAAW,IAAI,GAAG,EAAE,WAAW,IAAI,CAAC,CAAC;CAKhG,MAAM,mBAAuC,CAAC;CAC9C,IAAI,MAAM,SAAS,CAAC,gBAAgB,KAAK,OAAO,GAC9C,iBAAiB,KACf,EAAE,eAAe,EAAE,WAAW,OAAO,GAAG,EAAE,WAAW,OAAO,GAAG,OAAO,IAAI,CAC5E;CAEF,IAAI,MAAM,UAAU,CAAC,gBAAgB,KAAK,QAAQ,GAChD,iBAAiB,KACf,EAAE,eAAe,EAAE,WAAW,QAAQ,GAAG,EAAE,WAAW,QAAQ,GAAG,OAAO,IAAI,CAC9E;CAGF,IAAI,iBAAiB,WAAW,GAAG;CAEnC,MAAM,cAAc,EAAE,oBAAoB,SAAS,CACjD,EAAE,mBACA,EAAE,cAAc,gBAAgB,GAChC,EAAE,eAAe,EAAE,WAAW,kBAAkB,GAAG,CAAC,CAAC,CACvD,CACF,CAAC;CACD,IAAI,QAAQ,KAAK,OAAO,kBAAkB,GAAG,GAAG,WAAW;AAC7D;AAEA,SAAS,qBAAqB,KAAmB;CAC/C,SAAS,KAAK;EACZ,QAAQ,MAAM;GACZ,KAAK,MAAM,MAAM;EACnB;EACA,kBAAkB,MAAM;GACtB,MAAM,eAAe,KAAK,KAAK,WAAW,QAAQ,cAAc;IAC9D,IACE,KAAK,KAAK,OAAO,UAAU,gBAC3B,EAAE,kBAAkB,SAAS,MAC5B,UAAU,MAAM,SAAS,sBACxB,UAAU,MAAM,SAAS,eACzB,UAAU,MAAM,SAAS,eAE3B,OAAO;IAET,MAAM,QAAQ,UAAU,MAAM;IAC9B,MAAM,UAAU,KAAK,MAAM,WAAW,KAAK;IAC3C,OAAO,CAAC,WAAW,QAAQ,eAAe,WAAW;GACvD,CAAC;GAED,IAAI,aAAa,WAAW,GAAG;GAE/B,KAAK,KAAK,aAAa,KAAK,KAAK,WAAW,QACzC,cAAc,CAAC,aAAa,SAAS,SAAS,CACjD;GACA,IAAI,KAAK,KAAK,WAAW,WAAW,GAClC,KAAK,OAAO;EAEhB;CACF,CAAC;AACH;AAEA,SAAS,qBAAqB,gBAA8B,QAA8B;CACxF,IAAI,CAAC,QAAQ,OAAO;CAEpB,IAAI,EAAE,gBAAgB,cAAc,GAClC,OAAO,EAAE,cAAc,GAAG,eAAe,QAAQ,QAAQ;CAG3D,OAAO,EAAE,iBAAiB,KAAK,gBAAgB,EAAE,cAAc,MAAM,CAAC;AACxE;AAEA,SAAS,oBACP,UACA,YACkB;CAClB,MAAM,aAAa,SAChB,QAAQ,YAAY,WAAW,IAAI,QAAQ,QAAQ,CAAC,CAAC,CACrD,KAAK,YAAY;EAChB,MAAM,iBAAiB,WAAW,IAAI,QAAQ,QAAQ;EACtD,OAAO,EAAE,eACP,EAAE,WAAW,QAAQ,YAAY,GACjC,qBAAqB,gBAAgB,QAAQ,MAAM,GACnD,IACF;CACF,CAAC;CAEH,OAAO,EAAE,eAAe,EAAE,WAAW,YAAY,GAAG,CAAC,EAAE,iBAAiB,UAAU,CAAC,CAAC;AACtF;AAEA,SAAS,sBACP,UACA,gBACc;CACd,OAAO,EAAE,iBAAiB,CAAC,EAAE,cAAc,QAAQ,GAAG,EAAE,cAAc,cAAc,CAAC,CAAC;AACxF;AAEA,SAAS,qBACP,gBACA,gBACM;CACN,MAAM,eAAe,eAAe,WAAW,MAC5C,cACC,EAAE,eAAe,SAAS,KAAK,EAAE,gBAAgB,UAAU,MAAM,EAAE,MAAM,QAAQ,CAAC,CACtF;CAEA,IAAI,CAAC,cAAc;EACjB,eAAe,WAAW,KACxB,EAAE,aAAa,EAAE,cAAc,OAAO,GAAG,EAAE,uBAAuB,cAAc,CAAC,CACnF;EACA;CACF;CAEA,IAAI,CAAC,aAAa,OAAO;EACvB,aAAa,QAAQ,EAAE,uBAAuB,cAAc;EAC5D;CACF;CAEA,IAAI,EAAE,yBAAyB,aAAa,KAAK,GAC/C,aAAa,QAAQ,EAAE,uBACrB,sBAAsB,aAAa,MAAM,YAA4B,cAAc,CACrF;AAEJ;AAEA,SAAS,yBACP,gBACA,WAC2B;CAC3B,MAAM,SAAS,IAAI,IAA0B;CAE7C,KAAK,MAAM,aAAa,eAAe,YAAY;EACjD,IAAI,CAAC,EAAE,eAAe,SAAS,KAAK,CAAC,EAAE,gBAAgB,UAAU,IAAI,GAAG;EACxE,IAAI,CAAC,UAAU,IAAI,UAAU,KAAK,IAAI,GAAG;EAEzC,IAAI,CAAC,UAAU,OAAO;GACpB,OAAO,IAAI,UAAU,KAAK,MAAM,EAAE,eAAe,IAAI,CAAC;GACtD;EACF;EAEA,IAAI,EAAE,gBAAgB,UAAU,KAAK,GAAG;GACtC,OAAO,IAAI,UAAU,KAAK,MAAM,EAAE,cAAc,UAAU,MAAM,KAAK,CAAC;GACtE;EACF;EAEA,IAAI,EAAE,yBAAyB,UAAU,KAAK,GAC5C,OAAO,IAAI,UAAU,KAAK,MAAM,UAAU,MAAM,UAA0B;CAE9E;CAEA,OAAO;AACT;AAEA,SAAS,kBAAkB,gBAAqC,WAA8B;CAC5F,eAAe,aAAa,eAAe,WAAW,QAAQ,cAAc;EAC1E,IAAI,CAAC,EAAE,eAAe,SAAS,KAAK,CAAC,EAAE,gBAAgB,UAAU,IAAI,GAAG,OAAO;EAC/E,OAAO,CAAC,UAAU,IAAI,UAAU,KAAK,IAAI;CAC3C,CAAC;AACH;AAEA,SAAS,kCACP,oBACA,cACA,YACoB;CACpB,MAAM,aAAa,aAChB,QAAQ,aAAa,WAAW,IAAI,QAAQ,CAAC,CAAC,CAC9C,KAAK,aAAa,EAAE,eAAe,EAAE,WAAW,QAAQ,GAAG,WAAW,IAAI,QAAQ,CAAE,CAAC;CAExF,MAAM,OACJ,WAAW,WAAW,IAClB,EAAE,eAAe,EAAE,WAAW,kBAAkB,GAAG,CAAC,CAAC,IACrD,EAAE,eAAe,EAAE,WAAW,kBAAkB,GAAG,CAAC,EAAE,iBAAiB,UAAU,CAAC,CAAC;CAEzF,OAAO,EAAE,iBAAiB,MAAM,EAAE,WAAW,WAAW,CAAC;AAC3D;AAEA,SAAS,8BACP,MACA,cACA,UACA,cACA,UACA,kBACS;CACT,MAAM,wBAAwB,mCAAmC,QAAQ;CACzE,IAAI,CAAC,uBAAuB,OAAO;CAGnC,MAAM,aAAa,sBADD,oCAAoC,UAAU,qBACvB,GAAW,QAAQ;CAC5D,IAAI,CAAC,YAAY;EACf,WAAW,UAAU,4CAA4C,YAAY;EAC7E,OAAO;CACT;CAEA,MAAM,qBAAqB,KAAK,MAAM,sBACpC,qBAAqB,YAAY,CACnC,CAAC,CAAC;CACF,MAAM,cAAc,wBAClB,YAAY,YAAY,GACxB,YACA,qBACF;CACA,MAAM,eAAe,CACnB,GAAG,IAAI,IAAI,sBAAsB,KAAK,kBAAkB,cAAc,QAAQ,CAAC,CACjF;CAEA,MAAM,cAAc,KAAK;CACzB,IAAI,CAAC,YAAY,sBAAsB,GAAG,OAAO;CAEjD,YAAY,KAAK,eAAe,CAC9B,EAAE,mBACA,EAAE,WAAW,kBAAkB,GAC/B,EAAE,eAAe,EAAE,WAAW,QAAQ,GAAG,CAAC,WAAW,CAAC,CACxD,CACF;CAEA,iBAAiB,IAAI,cAAc;EACjC,cAAc;EACd,MAAM;EACN,gBAAgB;EAChB,QAAQ;EACR,UAAU,CAAC;EACX;CACF,CAAC;CAED,OAAO;AACT;AAEA,SAAS,4BACP,MACA,cACA,UACA,cACA,UACA,kBACS;CACT,MAAM,iBAAiB,4BAA4B,QAAQ;CAC3D,IAAI,CAAC,gBAAgB;EACnB,WACE,UACA,mIACA,YACF;EACA,OAAO;CACT;CAEA,MAAM,UAAU,2BAA2B,UAAU,cAAc;CACnE,MAAM,WAA6B,eAAe,KAAK,mBAAmB;EACxE,UAAU,cAAc;EACxB,cAAc,KAAK,MAAM,sBACvB,GAAG,eAAe,cAAc,SAAS,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,cAAc,SAAS,MAAM,CAAC,EAAE,IACrG,CAAC,CAAC;EACF,QAAQ,cAAc;CACxB,EAAE;CAEF,MAAM,kBAAkB,IAAI,IAA0B;CACtD,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KACzC,gBAAgB,IACd,iBAAiB,eAAe,EAAE,CAAC,KAAK,GACxC,EAAE,WAAW,SAAS,EAAE,CAAC,YAAY,CACvC;CAGF,MAAM,mBAAmB,sBAAsB,SAAS,UAAU,eAAe;CACjF,IAAI,CAAC,kBAAkB;EACrB,WAAW,UAAU,4CAA4C,YAAY;EAC7E,OAAO;CACT;CAEA,MAAM,iBAAiB,KAAK,MAAM,sBAAsB,GAAG,aAAa,MAAM,CAAC,CAAC;CAChF,MAAM,iBAAiB,SAAS,KAAK,YACnC,EAAE,mBACA,EAAE,WAAW,QAAQ,YAAY,GACjC,EAAE,eAAe,EAAE,WAAW,WAAW,GAAG,CAC1C,EAAE,cAAc,eAAe,cAAc,QAAQ,QAAQ,CAAC,CAChE,CAAC,CACH,CACF;CAEA,MAAM,cAAc,KAAK;CACzB,IAAI,CAAC,YAAY,sBAAsB,GAAG,OAAO;CAEjD,YAAY,KAAK,eAAe,CAC9B,GAAG,gBACH,EAAE,mBACA,EAAE,WAAW,cAAc,GAC3B,EAAE,eAAe,EAAE,WAAW,OAAO,GAAG,CACtC,EAAE,cAAc,YAAY,YAAY,CAAC,GACzC,gBACF,CAAC,CACH,CACF;CAEA,iBAAiB,IAAI,cAAc;EACjC,cAAc;EACd,MAAM;EACN;EACA,QAAQ;EACR;EACA,cAAc,CAAC;CACjB,CAAC;CAED,OAAO;AACT;AAEA,SAAS,oBACP,SACS;CACT,OAAO,QAAQ,eAAe,OAAO,kBAAkB;EACrD,MAAM,SAAS,cAAc;EAC7B,IAAI,CAAC,QAAQ,OAAO;EACpB,OACG,OAAO,oBAAoB,KAAK,OAAO,IAAI,MAAM,MAAM,iBACvD,OAAO,oBAAoB,KAAK,OAAO,IAAI,MAAM,MAAM;CAE5D,CAAC;AACH;AAEA,SAAgB,cAAc,UAAkB,QAAqC;CACnF,MAAM,WAA+B,CAAC;CACtC,IAAI,UAAU;CAEd,MAAM,MAAM,MAAM,QAAQ;EACxB,YAAY;EACZ,SAAS,CAAC,cAAc,KAAK;CAC/B,CAAC;CAED,MAAM,cAAc,IAAI,IAAY;CACpC,MAAM,cAAc,IAAI,IAAY;CACpC,MAAM,mBAAmB,IAAI,IAA6B;CAC1D,IAAI,YAAY;CAChB,IAAI,aAAa;CACjB,IAAI,cAAc;CAElB,SAAS,KAAK,EACZ,kBAAkB,MAAM;EACtB,IACE,KAAK,KAAK,OAAO,UAAU,uBAC3B,KAAK,KAAK,OAAO,UAAU,mBAE3B,KAAK,MAAM,aAAa,KAAK,KAAK,YAAY;GAC5C,IAAI,EAAE,yBAAyB,SAAS,GACtC,YAAY,IAAI,UAAU,MAAM,IAAI;GAEtC,IACE,EAAE,kBAAkB,SAAS,KAC7B,EAAE,aAAa,UAAU,UAAU,EAAE,MAAM,MAAM,CAAC,GAElD,YAAY,IAAI,UAAU,MAAM,IAAI;EAExC;EAGF,IACE,KAAK,KAAK,OAAO,UAAU,oBAC3B,KAAK,KAAK,OAAO,UAAU,gBAEtB;QAAA,MAAM,aAAa,KAAK,KAAK,YAChC,IACE,EAAE,kBAAkB,SAAS,KAC7B,EAAE,aAAa,UAAU,UAAU,EAAE,MAAM,MAAM,CAAC,GAElD,YAAY,IAAI,UAAU,MAAM,IAAI;EAAA;CAI5C,EACF,CAAC;CAED,SAAS,KAAK,EACZ,mBAAmB,MAAM;EACvB,IAAI,CAAC,EAAE,aAAa,KAAK,KAAK,EAAE,GAAG;EACnC,IAAI,CAAC,EAAE,2BAA2B,KAAK,KAAK,IAAI,GAAG;EAEnD,MAAM,eAAe,KAAK,KAAK,GAAG;EAClC,MAAM,UAAU,KAAK,MAAM,WAAW,YAAY;EAClD,IAAI,CAAC,SAAS;EAEd,MAAM,WAAW,KAAK,KAAK,KAAK;EAChC,MAAM,oBAAoB,SAAS,YAAY,SAAS;EACxD,MAAM,eAAe,kBAAkB,KAAK,KAAK,KAAK,KAAK,WAAW;EAEtE,IAAI,mBAAmB;GACrB,IAAI,CAAC,cAAc;IACjB,WACE,UACA,oGACA,YACF;IACA;GACF;GAEA,MAAM,cAAc,KAAK;GACzB,IACE,YAAY,YAAY,yBAAyB,KACjD,YAAY,YAAY,2BAA2B,GACnD;IACA,WACE,UACA,2EACA,YACF;IACA;GACF;GAEA,IAAI,CAAC,oBAAoB,OAAO,GAAG;IACjC,WAAW,UAAU,qDAAqD,YAAY;IACtF;GACF;GAEA,IACE,8BACE,MACA,cACA,UACA,cACA,UACA,gBACF,GACA;IACA,cAAc;IACd,UAAU;IACV;GACF;GAEA,IACE,4BACE,MACA,cACA,UACA,cACA,UACA,gBACF,GACA;IACA,YAAY;IACZ,aAAa;IACb,UAAU;GACZ;GACA;EACF;EAGA,MAAM,mBAAmB,sBADT,SAAS,OAAO,KAAK,UAAU,MAAM,MAAM,UAAU,EAAE,CAAC,CAAC,KAAK,EAC/B,GAAS,QAAQ;EAChE,IAAI,CAAC,kBAAkB;GACrB,WAAW,UAAU,4CAA4C,YAAY;GAC7E;EACF;EAEA,IAAI,cAAc;GAChB,MAAM,cAAc,KAAK;GACzB,IACE,YAAY,YAAY,yBAAyB,KACjD,YAAY,YAAY,2BAA2B,GACnD;IACA,WACE,UACA,2EACA,YACF;IACA;GACF;GAEA,IAAI,CAAC,oBAAoB,OAAO,GAAG;IACjC,WAAW,UAAU,qDAAqD,YAAY;IACtF;GACF;GAEA,MAAM,iBAAiB,KAAK,MAAM,sBAAsB,GAAG,aAAa,MAAM,CAAC,CAAC;GAChF,KAAK,KAAK,KAAK,EAAE,WAAW,cAAc;GAC1C,KAAK,KAAK,OAAO,EAAE,eAAe,EAAE,WAAW,OAAO,GAAG,CACvD,EAAE,cAAc,YAAY,YAAY,CAAC,GACzC,gBACF,CAAC;GAED,iBAAiB,IAAI,cAAc;IACjC,cAAc;IACd,MAAM;IACN;IACA,QAAQ;IACR,UAAU,CAAC;IACX,cAAc,CAAC;GACjB,CAAC;GACD,aAAa;GACb,UAAU;GACV;EACF;EAEA,IAAI,EAAE,aAAa,KAAK,KAAK,KAAK,GAAG,KAAK,YAAY,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG;GAClF,KAAK,KAAK,OAAO,EAAE,eAAe,EAAE,WAAW,OAAO,GAAG,CACvD,EAAE,cAAc,YAAY,YAAY,CAAC,GACzC,gBACF,CAAC;GACD,aAAa;GACb,UAAU;EACZ;CACF,EACF,CAAC;CAED,IAAI,iBAAiB,OAAO,GAC1B,SAAS,KAAK,EACZ,WAAW,MAAM;EACf,MAAM,cAAc,KAAK,KAAK,eAAe;EAC7C,IAAI,CAAC,EAAE,gBAAgB,WAAW,GAAG;EACrC,MAAM,YAAY,iBAAiB,IAAI,YAAY,IAAI;EACvD,IAAI,CAAC,WAAW;EAEhB,KAAK,KAAK,eAAe,OAAO,UAAU,OAAO;EACjD,IAAI,KAAK,KAAK,gBACZ,KAAK,KAAK,eAAe,OAAO,UAAU,OAAO;EAGnD,MAAM,sBACJ,UAAU,SAAS,cACf,kCACE,UAAU,gBACV,UAAU,cACV,yBAAyB,KAAK,KAAK,gBAAgB,IAAI,IAAI,UAAU,YAAY,CAAC,CACpF,IACA,EAAE,WAAW,UAAU,cAAc;EAE3C,yBAAyB,KAAK,KAAK,gBAAgB,mBAAmB;EAEtE,IAAI,UAAU,SAAS,SAAS,GAAG;GACjC,MAAM,YAAY,IAAI,IAAI,UAAU,SAAS,KAAK,YAAY,QAAQ,QAAQ,CAAC;GAC/E,MAAM,aAAa,yBAAyB,KAAK,KAAK,gBAAgB,SAAS;GAE/E,IAAI,WAAW,OAAO,GAAG;IACvB,MAAM,iBAAiB,oBAAoB,UAAU,UAAU,UAAU;IACzE,qBAAqB,KAAK,KAAK,gBAAgB,cAAc;IAC7D,kBAAkB,KAAK,KAAK,gBAAgB,SAAS;GACvD;EACF;EAEA,IAAI,UAAU,aAAa,SAAS,GAClC,kBAAkB,KAAK,KAAK,gBAAgB,IAAI,IAAI,UAAU,YAAY,CAAC;CAE/E,EACF,CAAC;CAGH,IAAI,SAAS;EACX,wBAAwB,KAAK;GAC3B,OAAO;GACP,QAAQ;GACR,MAAM;EACR,CAAC;EACD,qBAAqB,GAAG;CAC1B;CAEA,MAAM,SAAS,SACb,KACA;EACE,aAAa;EACb,UAAU;EACV,SAAS;CACX,GACA,MACF;CAEA,OAAO;EACL;EACA,SAAS,WAAW,OAAO,SAAS;EACpC,MAAM,OAAO;EACb;CACF;AACF;;;AC/vBA,MAAM,mBAAmB;CAAC;CAAsB;CAAc;CAAe;AAAc;AAE3F,SAAS,mBAAmB,WAA2B;CACrD,OAAO,UAAU,WAAW,GAAG,IAAI,YAAY,IAAI;AACrD;AAEA,eAAsB,mBACpB,KACA,SACA,YACA,SACA,SACmB;CACnB,MAAM,oBAAoB,QAAQ,SAAS,IAAI,UAAU,CAAC,GAAG;CAC7D,MAAM,eAAyB,CAAC;CAChC,MAAM,kBAA4B,CAAC;CAEnC,KAAK,MAAM,UAAU,mBAAmB;EACtC,MAAM,WAAW,QAAQ,KAAK,MAAM;EACpC,IAAI;GACF,MAAM,aAAa,MAAM,KAAK,QAAQ;GACtC,IAAI,WAAW,OAAO,GACpB,aAAa,KAAK,QAAQ;QACrB,IAAI,WAAW,YAAY,GAChC,gBAAgB,KAAK,GAAG,SAAS,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,EAAE,MAAM;EAEjE,QAAQ;GACN,gBAAgB,KAAK,MAAM;EAC7B;CACF;CAEA,MAAM,UAAU,MAAM,GAAG,iBAAiB;EACxC;EACA,UAAU;EACV,WAAW;EACX,QAAQ,CAAC,GAAG,kBAAkB,GAAG,OAAO;CAC1C,CAAC;CAED,MAAM,eAAe,IAAI,IAAI,WAAW,IAAI,kBAAkB,CAAC;CAC/D,MAAM,kBAAkB,QAAQ,SAAS,IAAI,QAAQ,KAAK,YAAY,UAAU,OAAO,CAAC,IAAI;CAC5F,MAAM,SAAS,IAAI,IAAI,CAAC,GAAG,cAAc,GAAG,OAAO,CAAC;CAEpD,OAAO,MAAM,KAAK,MAAM,CAAC,CACtB,QAAQ,aAAa,aAAa,IAAI,QAAQ,QAAQ,CAAC,CAAC,CAAC,CACzD,QAAQ,aAAa;EACpB,IAAI,CAAC,iBAAiB,OAAO;EAC7B,MAAM,MAAM,SAAS,KAAK,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG;EACxD,OAAO,gBAAgB,MAAM,YAAY,QAAQ,GAAG,CAAC;CACvD,CAAC,CAAC,CACD,KAAK;AACV;;;AChDA,SAAS,YAAY,UAAkB,QAAgB,OAAuB;CAC5E,OAAO,YAAY,UAAU,QAAQ,OAAO,UAAU,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI;AAC/F;AAEA,eAAsB,aAAa,KAAa,SAA+C;CAC7F,MAAM,QAAQ,MAAM,mBAClB,KACA,QAAQ,SACR,QAAQ,YACR,QAAQ,SACR,QAAQ,OACV;CAEA,MAAM,gBAA0C,CAAC;CACjD,IAAI,eAAe;CACnB,IAAI,eAAe;CAEnB,KAAK,MAAM,YAAY,OAAO;EAC5B,MAAM,SAAS,MAAM,SAAS,UAAU,MAAM;EAC9C,MAAM,SAAS,cAAc,UAAU,MAAM;EAC7C,MAAM,eAAe,SAAS,KAAK,QAAQ;EAE3C,gBAAgB,OAAO,SAAS;EAChC,IAAI,OAAO,SAAS;GAClB,gBAAgB;GAChB,IAAI,QAAQ,OAAO;IACjB,MAAM,UAAU,UAAU,OAAO,MAAM,MAAM;IAC7C,QAAQ,OAAO,MAAM,WAAW,aAAa,GAAG;GAClD,OAAO;IACL,QAAQ,OAAO,MAAM,SAAS,aAAa,iBAAiB;IAC5D,QAAQ,OAAO,MAAM,GAAG,YAAY,cAAc,QAAQ,OAAO,IAAI,EAAE,GAAG;GAC5E;EACF;EAEA,KAAK,MAAM,WAAW,OAAO,UAAU;GACrC,MAAM,YAAY,QAAQ,WAAW,KAAK,QAAQ,SAAS,KAAK;GAChE,QAAQ,OAAO,MAAM,WAAW,eAAe,UAAU,IAAI,QAAQ,QAAQ,GAAG;EAClF;EAEA,cAAc,KAAK;GACjB,UAAU;GACV,SAAS,OAAO;GAChB,UAAU,OAAO;EACnB,CAAC;CACH;CAEA,MAAM,UAA4B;EAChC,cAAc,MAAM;EACpB,cAAc;EACd,UAAU;CACZ;CAEA,QAAQ,OAAO,MACb,aAAa,QAAQ,aAAa,kBAAkB,QAAQ,aAAa,aAAa,QAAQ,SAAS,IACzG;CAEA,MAAM,SAA0B;EAC9B;EACA,OAAO;CACT;CAEA,IAAI,QAAQ,YAAY;EACtB,MAAM,MAAM,QAAQ,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;EAC5D,MAAM,UAAU,QAAQ,YAAY,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,KAAK,MAAM;EAClF,QAAQ,OAAO,MAAM,qBAAqB,QAAQ,WAAW,GAAG;CAClE;CAEA,OAAO;AACT"}
|