@tamagui/codemod-flat-values 3.0.0-beta.1313.1 → 3.0.0-beta.1341.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/dist/expressions.mjs +1 -1
- package/dist/expressions.mjs.map +1 -1
- package/dist/grammar.mjs +7 -4
- package/dist/grammar.mjs.map +1 -1
- package/dist/index.mjs +320 -6
- package/dist/index.mjs.map +1 -1
- package/dist/provenance.mjs +10 -1
- package/dist/provenance.mjs.map +1 -1
- package/package.json +5 -5
- package/src/expressions.ts +1 -1
- package/src/grammar.ts +11 -4
- package/src/index.ts +454 -5
- package/src/provenance.ts +11 -0
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["index.js"],"sourcesContent":["#!/usr/bin/env node\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, relative, resolve } from \"node:path\";\nimport { stylePropsTextOnly } from \"@tamagui/helpers\";\nimport {\n IndentationText,\n ModuleKind,\n ModuleResolutionKind,\n Node,\n Project,\n ScriptTarget,\n SyntaxKind,\n ts\n} from \"ts-morph\";\nimport { planContainers } from \"./containers\";\nimport { convertJsxSite, convertStyleObject } from \"./convert\";\nimport { compact, unwrapExpression } from \"./expressions\";\nimport {\n addFunctionalVariantTypeImports,\n convertFunctionalVariants\n} from \"./functionalVariants\";\nimport {\n codemodMediaNames,\n createModifierRegistry,\n grammarPlatformNames,\n shorthands\n} from \"./grammar\";\nimport { createProvenance } from \"./provenance\";\nimport { renderReport } from \"./report\";\nimport { convertSheetFrames } from \"./sheetAnatomy\";\nimport { convertTransitions } from \"./transition\";\nconst projectRoot = process.cwd();\nconst defaultReportPath = resolve(projectRoot, \"tamagui-flat-values-report.md\");\nconst ignoreMarker = \".tamagui-flat-values-ignore\";\nconst ignoredDirectories = /* @__PURE__ */ new Map();\nfunction isIgnored(filePath) {\n let directory = dirname(filePath);\n const visited = [];\n while (directory === projectRoot || !relative(projectRoot, directory).startsWith(\"..\")) {\n const cached = ignoredDirectories.get(directory);\n if (cached !== void 0) {\n for (const seen of visited) ignoredDirectories.set(seen, cached);\n return cached;\n }\n visited.push(directory);\n if (existsSync(resolve(directory, ignoreMarker))) {\n for (const seen of visited) ignoredDirectories.set(seen, true);\n return true;\n }\n if (directory === projectRoot) break;\n const parent = dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n for (const seen of visited) ignoredDirectories.set(seen, false);\n return false;\n}\nfunction collectFiles(inputs2) {\n const tsConfigFilePath = resolve(projectRoot, \"tsconfig.json\");\n if (!existsSync(tsConfigFilePath)) {\n console.error(\n `no tsconfig.json in ${projectRoot}; run the codemod from your project root`\n );\n process.exit(2);\n }\n const project = new Project({\n tsConfigFilePath,\n skipAddingFilesFromTsConfig: true,\n // ts-morph re-indents every multi-line replacement from the indentation it\n // computes for the node with this unit. The default four-space unit puts a\n // JSX child two columns past where two-space source authored it, and every\n // attribute line of a rewritten element staggered with it\n manipulationSettings: { indentationText: IndentationText.TwoSpaces },\n compilerOptions: {\n allowJs: false,\n jsx: 4,\n target: ScriptTarget.ES2020,\n module: ModuleKind.ESNext,\n moduleResolution: ModuleResolutionKind.NodeJs,\n skipLibCheck: true,\n strictNullChecks: true,\n baseUrl: projectRoot\n }\n });\n const files2 = /* @__PURE__ */ new Map();\n const ignored = /* @__PURE__ */ new Set();\n const missing = [];\n for (const input of inputs2) {\n const path = resolve(projectRoot, input);\n if (!existsSync(path)) {\n missing.push(input);\n continue;\n }\n const pattern = /\\.[cm]?[jt]sx?$/.test(path) ? path : `${path}/**/*.{ts,tsx}`;\n const matched = project.addSourceFilesAtPaths(pattern);\n if (!matched.length) missing.push(input);\n for (const file of matched) {\n const filePath = file.getFilePath();\n if (isIgnored(filePath)) ignored.add(filePath);\n else files2.set(filePath, file);\n }\n }\n if (missing.length) {\n console.error(\n `no source file matched ${missing.map((input) => `\"${input}\"`).join(\", \")}`\n );\n process.exit(2);\n }\n if (files2.size === 0 && ignored.size > 0) {\n console.error(\n `all ${ignored.size} matched source ${ignored.size === 1 ? \"file was\" : \"files were\"} skipped by ${ignoreMarker}; no migration report was written`\n );\n process.exit(2);\n }\n return {\n sourceFiles: [...files2.values()].sort(\n (left, right) => left.getFilePath().localeCompare(right.getFilePath())\n ),\n ignoredFiles: ignored.size\n };\n}\nfunction themeNames(sourceFiles2) {\n const names = /* @__PURE__ */ new Set([\"light\", \"dark\"]);\n for (const sourceFile of sourceFiles2) {\n for (const name of conditionNames(sourceFile)) {\n if (name.startsWith(\"$theme-\")) names.add(name.slice(\"$theme-\".length));\n }\n }\n return names;\n}\nfunction mediaNames(sourceFiles2) {\n const names = new Set(codemodMediaNames);\n for (const sourceFile of sourceFiles2) {\n for (const name of conditionNames(sourceFile)) {\n if (!name.startsWith(\"$\")) continue;\n if (name.startsWith(\"$theme-\") || name.startsWith(\"$platform-\") || name.startsWith(\"$group-\") || grammarPlatformNames.has(name.slice(1))) {\n continue;\n }\n names.add(name.slice(1));\n }\n }\n return names;\n}\nfunction conditionNames(sourceFile) {\n const names = [];\n for (const attribute of sourceFile.getDescendantsOfKind(SyntaxKind.JsxAttribute)) {\n const name = attribute.getNameNode();\n if (Node.isIdentifier(name)) names.push(name.getText());\n }\n for (const property of sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAssignment)) {\n const name = property.getNameNode();\n if (Node.isComputedPropertyName(name)) continue;\n names.push(name.getText().replace(/^['\"]|['\"]$/g, \"\"));\n }\n return names;\n}\nfunction variantStyleObjects(value) {\n const current = unwrapExpression(value);\n if (Node.isObjectLiteralExpression(current)) return [current];\n if (Node.isConditionalExpression(current)) {\n return [\n ...variantStyleObjects(current.getWhenTrue()),\n ...variantStyleObjects(current.getWhenFalse())\n ];\n }\n if (Node.isArrowFunction(current) || Node.isFunctionExpression(current)) {\n const body = current.getBody();\n if (Node.isBlock(body)) {\n return body.getDescendantsOfKind(SyntaxKind.ReturnStatement).flatMap((statement) => {\n const returned = statement.getExpression();\n return returned ? variantStyleObjects(returned) : [];\n });\n }\n return variantStyleObjects(body);\n }\n return [];\n}\nfunction variantSites(config, label, registry, containers, targets, host, write2) {\n const sites = [];\n const defaults = config.getProperty(\"defaultVariants\");\n if (Node.isPropertyAssignment(defaults)) {\n const object = unwrapExpression(defaults.getInitializerOrThrow());\n if (Node.isObjectLiteralExpression(object)) {\n const site = convertStyleObject(\n object,\n \"styled\",\n `${label} defaultVariants`,\n registry,\n containers,\n targets,\n host,\n write2\n );\n if (site) sites.push(site);\n }\n }\n const variants = config.getProperty(\"variants\");\n if (Node.isPropertyAssignment(variants)) {\n const object = unwrapExpression(variants.getInitializerOrThrow());\n if (Node.isObjectLiteralExpression(object)) {\n for (const variant of object.getProperties()) {\n if (!Node.isPropertyAssignment(variant)) continue;\n const variantName = compact(variant.getNameNode().getText());\n const branches = unwrapExpression(variant.getInitializerOrThrow());\n if (Node.isCallExpression(branches)) {\n const callee = branches.getExpression();\n if (Node.isPropertyAccessExpression(callee) && callee.getName() === \"dynamic\") {\n const body = branches.getArguments()[0];\n if (body && Node.isExpression(body)) {\n for (const style of variantStyleObjects(body)) {\n const site = convertStyleObject(\n style,\n \"styled\",\n `${label} variants.${variantName}`,\n registry,\n containers,\n targets,\n host,\n write2\n );\n if (site) sites.push(site);\n }\n }\n }\n continue;\n }\n if (!Node.isObjectLiteralExpression(branches)) continue;\n for (const branch of branches.getProperties()) {\n if (!Node.isPropertyAssignment(branch)) continue;\n const branchName = compact(branch.getNameNode().getText());\n for (const style of variantStyleObjects(branch.getInitializerOrThrow())) {\n const site = convertStyleObject(\n style,\n \"styled\",\n `${label} variants.${variantName}.${branchName}`,\n registry,\n containers,\n targets,\n host,\n write2\n );\n if (site) sites.push(site);\n }\n }\n }\n }\n }\n return sites;\n}\nfunction conversionTargets(filePath) {\n if (/\\.web\\.[cm]?[jt]sx?$/.test(filePath)) return \"web\";\n if (/\\.native\\.[cm]?[jt]sx?$/.test(filePath)) return \"native\";\n return \"shared\";\n}\nconst shorthandSpellings = /* @__PURE__ */ new Map();\nfor (const [shorthand, longhand] of Object.entries(shorthands)) {\n const spellings = shorthandSpellings.get(longhand);\n if (spellings) spellings.push(shorthand);\n else shorthandSpellings.set(longhand, [shorthand]);\n}\nfunction typeAwareHost(node) {\n const checker = node.getProject().getTypeChecker();\n const componentType = checker.getTypeAtLocation(node);\n if (!componentType.getProperty(\"staticConfig\")) return void 0;\n const propsTypes = componentType.getCallSignatures().flatMap((signature) => signature.getParameters().slice(0, 1)).map((props) => checker.getTypeOfSymbolAtLocation(props, node));\n if (propsTypes.length === 0) return void 0;\n const host = {\n displayName: node.getText(),\n accepts: (property) => propsTypes.some(\n (propsType) => propsType.getApparentType().getProperty(property) !== void 0\n )\n };\n const accepts = (property) => host.accepts(property) || (shorthandSpellings.get(property)?.some((spelling) => host.accepts(spelling)) ?? false);\n if (node.getText() !== \"View\") return { ...host, accepts };\n return {\n ...host,\n accepts: (property) => !(property in stylePropsTextOnly) && accepts(property)\n };\n}\nfunction inspectFile(sourceFile, registry, provenance2, write2) {\n const sheetFrames = convertSheetFrames(sourceFile, provenance2, write2);\n const transitions = convertTransitions(sourceFile, provenance2, write2);\n const containers = planContainers(sourceFile, registry);\n const targets = conversionTargets(sourceFile.getFilePath());\n const sites = [];\n const functionalVariants = [];\n const requiredTypeImports = [];\n const styledCalls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).filter((call) => provenance2.isTamaguiStyledCall(call)).sort((left, right) => right.getStart() - left.getStart());\n const jsxOpenings = [\n ...sourceFile.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),\n ...sourceFile.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)\n ].filter((opening) => provenance2.isTamaguiElement(opening)).sort((left, right) => right.getStart() - left.getStart());\n for (const opening of jsxOpenings) {\n const site = convertJsxSite(\n opening,\n registry,\n containers,\n targets,\n typeAwareHost(opening.getTagNameNode()),\n write2\n );\n if (site) sites.push(site);\n }\n for (const call of styledCalls) {\n const component = call.getArguments()[0];\n const host = component ? typeAwareHost(component) : void 0;\n const config = unwrapExpression(\n call.getArguments()[1] ?? call\n );\n if (!Node.isObjectLiteralExpression(config)) continue;\n const label = `styled(${compact(call.getArguments()[0]?.getText() ?? \"unknown\")}, \\u2026)`;\n sites.push(...variantSites(config, label, registry, containers, targets, host, write2));\n const functional = convertFunctionalVariants(config, label, write2);\n functionalVariants.push(...functional.sites);\n requiredTypeImports.push(...functional.requiredTypeImports);\n const site = convertStyleObject(\n config,\n \"styled\",\n label,\n registry,\n containers,\n targets,\n host,\n write2\n );\n if (site) sites.push(site);\n }\n sites.sort(\n (left, right) => left.line - right.line || left.label.localeCompare(right.label)\n );\n functionalVariants.sort(\n (left, right) => left.line - right.line || left.label.localeCompare(right.label)\n );\n if (write2) addFunctionalVariantTypeImports(sourceFile, requiredTypeImports);\n return {\n file: relative(projectRoot, sourceFile.getFilePath()),\n sites,\n functionalVariants,\n sheetFrames,\n transitions\n };\n}\nconst usage = `Converts Tamagui style syntax to V3 flat property values and reports what it cannot convert.\n\n npx @tamagui/codemod-flat-values [options] <files or directories...>\n\n --report <path> where to write the Markdown report (default: ${relative(\n projectRoot,\n defaultReportPath\n)})\n --json <path> also write the machine-readable report\n --write rewrite every statically safe conversion in place\n --help print this\n\nRun it from your project root, which is where paths and the tsconfig resolve from.\nSource files are only written with --write.`;\nfunction parseArguments(argv) {\n const inputs2 = [];\n let reportPath2 = defaultReportPath;\n let jsonPath2 = null;\n let write2 = false;\n for (let index = 0; index < argv.length; index++) {\n const argument = argv[index];\n if (argument === \"--help\" || argument === \"-h\") {\n console.log(usage);\n process.exit(0);\n }\n if (argument === \"--write\") {\n write2 = true;\n continue;\n }\n if (argument === \"--report\" || argument === \"--json\") {\n const next = argv[index + 1];\n if (!next) {\n console.error(`${argument} requires a path\n\n${usage}`);\n process.exit(2);\n }\n if (argument === \"--report\") reportPath2 = resolve(next);\n else jsonPath2 = resolve(next);\n index++;\n continue;\n }\n if (argument.startsWith(\"-\")) {\n console.error(`unknown option \"${argument}\"\n\n${usage}`);\n process.exit(2);\n }\n inputs2.push(argument);\n }\n if (!inputs2.length) {\n console.error(`no files or directories given\n\n${usage}`);\n process.exit(2);\n }\n return { reportPath: reportPath2, jsonPath: jsonPath2, inputs: inputs2, write: write2 };\n}\nconst { reportPath, jsonPath, inputs, write } = parseArguments(process.argv.slice(2));\nconst { sourceFiles, ignoredFiles } = collectFiles(inputs);\nfor (const sourceFile of sourceFiles) {\n const diagnostics = sourceFile.compilerNode.parseDiagnostics;\n if (diagnostics?.length) {\n console.error(\n `${relative(projectRoot, sourceFile.getFilePath())}: source has parse errors; no files were written`\n );\n process.exit(2);\n }\n}\nconst originals = new Map(\n sourceFiles.map((sourceFile) => [sourceFile.getFilePath(), sourceFile.getFullText()])\n);\nconst modifierRegistry = createModifierRegistry({\n mediaNames: mediaNames(sourceFiles),\n themeNames: themeNames(sourceFiles)\n});\nconst provenance = createProvenance();\nconst files = sourceFiles.map(\n (sourceFile) => inspectFile(sourceFile, modifierRegistry.registry, provenance, write)\n);\nif (write) {\n for (const sourceFile of sourceFiles) {\n const filePath = sourceFile.getFilePath();\n const parsed = ts.createSourceFile(\n filePath,\n sourceFile.getFullText(),\n ScriptTarget.Latest,\n true,\n filePath.endsWith(\"x\") ? ts.ScriptKind.TSX : ts.ScriptKind.TS\n );\n if (parsed.parseDiagnostics?.length) {\n const details = parsed.parseDiagnostics.map((diagnostic) => {\n const start = diagnostic.start ?? 0;\n const position = parsed.getLineAndCharacterOfPosition(start);\n const line = parsed.text.split(/\\r?\\n/)[position.line] ?? \"\";\n return `${position.line + 1}:${position.character + 1} ${ts.flattenDiagnosticMessageText(\n diagnostic.messageText,\n \"\\n\"\n )}\n ${line.trim()}`;\n }).join(\"\\n\");\n console.error(\n `${relative(projectRoot, filePath)}: rewrite produced parse errors; no files were written\n${details}`\n );\n process.exit(2);\n }\n }\n}\nconst { text, summary } = renderReport(\n files,\n inputs.map((input) => relative(projectRoot, resolve(projectRoot, input))),\n modifierRegistry.diagnostics,\n ignoredFiles,\n write\n);\nmkdirSync(dirname(reportPath), { recursive: true });\nwriteFileSync(reportPath, text);\nif (jsonPath !== null) {\n mkdirSync(dirname(jsonPath), { recursive: true });\n writeFileSync(jsonPath, `${JSON.stringify({ files, summary }, null, 2)}\n`);\n}\nlet written = 0;\nif (write) {\n for (const sourceFile of sourceFiles) {\n const next = sourceFile.getFullText();\n if (next === originals.get(sourceFile.getFilePath())) continue;\n writeFileSync(sourceFile.getFilePath(), next);\n written++;\n }\n}\nconsole.log(`wrote ${reportPath}`);\nif (write) console.log(`rewrote ${written} source files`);\nconsole.log(\n `${summary.sites} style sites: ${summary.clean - summary.waiting} clean, ${summary.needsRelocation} need relocation, ${summary.unknownHost} unknown host, ${summary.ineligible} ineligible, ${summary.waiting} waiting on runtime support, ${summary.flagged} syntax-flagged; ${summary.functionalVariantSites} functional variants: ${summary.functionalVariantConverted} automatic, ${summary.functionalVariantFlagged} flagged; ${summary.sheetFrames} Sheet.Frame sites: ${summary.sheetFramesFlagged} need review; ${summary.transitions} v2 transitions: ${summary.transitionsFlagged} need review; ${summary.ignoredFiles} source files ignored`\n);\n//# sourceMappingURL=index.js.map\n"],"mappings":";;;;;;;;;;;;;;;;AA+BA,MAAM,cAAc,QAAQ,IAAI;AAChC,MAAM,oBAAoB,QAAQ,aAAa,+BAA+B;AAC9E,MAAM,eAAe;AACrB,MAAM,qCAAqC,IAAI,IAAI;AACnD,SAAS,UAAU,UAAU;CAC3B,IAAI,YAAY,QAAQ,QAAQ;CAChC,MAAM,UAAU,CAAC;CACjB,OAAO,cAAc,eAAe,CAAC,SAAS,aAAa,SAAS,CAAC,CAAC,WAAW,IAAI,GAAG;EACtF,MAAM,SAAS,mBAAmB,IAAI,SAAS;EAC/C,IAAI,WAAW,KAAK,GAAG;GACrB,KAAK,MAAM,QAAQ,SAAS,mBAAmB,IAAI,MAAM,MAAM;GAC/D,OAAO;EACT;EACA,QAAQ,KAAK,SAAS;EACtB,IAAI,WAAW,QAAQ,WAAW,YAAY,CAAC,GAAG;GAChD,KAAK,MAAM,QAAQ,SAAS,mBAAmB,IAAI,MAAM,IAAI;GAC7D,OAAO;EACT;EACA,IAAI,cAAc,aAAa;EAC/B,MAAM,SAAS,QAAQ,SAAS;EAChC,IAAI,WAAW,WAAW;EAC1B,YAAY;CACd;CACA,KAAK,MAAM,QAAQ,SAAS,mBAAmB,IAAI,MAAM,KAAK;CAC9D,OAAO;AACT;AACA,SAAS,aAAa,SAAS;CAC7B,MAAM,mBAAmB,QAAQ,aAAa,eAAe;CAC7D,IAAI,CAAC,WAAW,gBAAgB,GAAG;EACjC,QAAQ,MACN,uBAAuB,YAAY,yCACrC;EACA,QAAQ,KAAK,CAAC;CAChB;CACA,MAAM,UAAU,IAAI,QAAQ;EAC1B;EACA,6BAA6B;EAK7B,sBAAsB,EAAE,iBAAiB,gBAAgB,UAAU;EACnE,iBAAiB;GACf,SAAS;GACT,KAAK;GACL,QAAQ,aAAa;GACrB,QAAQ,WAAW;GACnB,kBAAkB,qBAAqB;GACvC,cAAc;GACd,kBAAkB;GAClB,SAAS;EACX;CACF,CAAC;CACD,MAAM,yBAAyB,IAAI,IAAI;CACvC,MAAM,0BAA0B,IAAI,IAAI;CACxC,MAAM,UAAU,CAAC;CACjB,KAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,OAAO,QAAQ,aAAa,KAAK;EACvC,IAAI,CAAC,WAAW,IAAI,GAAG;GACrB,QAAQ,KAAK,KAAK;GAClB;EACF;EACA,MAAM,UAAU,kBAAkB,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK;EAC9D,MAAM,UAAU,QAAQ,sBAAsB,OAAO;EACrD,IAAI,CAAC,QAAQ,QAAQ,QAAQ,KAAK,KAAK;EACvC,KAAK,MAAM,QAAQ,SAAS;GAC1B,MAAM,WAAW,KAAK,YAAY;GAClC,IAAI,UAAU,QAAQ,GAAG,QAAQ,IAAI,QAAQ;QACxC,OAAO,IAAI,UAAU,IAAI;EAChC;CACF;CACA,IAAI,QAAQ,QAAQ;EAClB,QAAQ,MACN,0BAA0B,QAAQ,KAAK,UAAU,IAAI,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI,GAC1E;EACA,QAAQ,KAAK,CAAC;CAChB;CACA,IAAI,OAAO,SAAS,KAAK,QAAQ,OAAO,GAAG;EACzC,QAAQ,MACN,OAAO,QAAQ,KAAK,kBAAkB,QAAQ,SAAS,IAAI,aAAa,aAAa,cAAc,aAAa,kCAClH;EACA,QAAQ,KAAK,CAAC;CAChB;CACA,OAAO;EACL,aAAa,CAAC,GAAG,OAAO,OAAO,CAAC,CAAC,CAAC,MAC/B,MAAM,UAAU,KAAK,YAAY,CAAC,CAAC,cAAc,MAAM,YAAY,CAAC,CACvE;EACA,cAAc,QAAQ;CACxB;AACF;AACA,SAAS,WAAW,cAAc;CAChC,MAAM,wBAAwB,IAAI,IAAI,CAAC,SAAS,MAAM,CAAC;CACvD,KAAK,MAAM,cAAc,cAAc;EACrC,KAAK,MAAM,QAAQ,eAAe,UAAU,GAAG;GAC7C,IAAI,KAAK,WAAW,SAAS,GAAG,MAAM,IAAI,KAAK,MAAM,UAAU,MAAM,CAAC;EACxE;CACF;CACA,OAAO;AACT;AACA,SAAS,WAAW,cAAc;CAChC,MAAM,QAAQ,IAAI,IAAI,iBAAiB;CACvC,KAAK,MAAM,cAAc,cAAc;EACrC,KAAK,MAAM,QAAQ,eAAe,UAAU,GAAG;GAC7C,IAAI,CAAC,KAAK,WAAW,GAAG,GAAG;GAC3B,IAAI,KAAK,WAAW,SAAS,KAAK,KAAK,WAAW,YAAY,KAAK,KAAK,WAAW,SAAS,KAAK,qBAAqB,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG;IACxI;GACF;GACA,MAAM,IAAI,KAAK,MAAM,CAAC,CAAC;EACzB;CACF;CACA,OAAO;AACT;AACA,SAAS,eAAe,YAAY;CAClC,MAAM,QAAQ,CAAC;CACf,KAAK,MAAM,aAAa,WAAW,qBAAqB,WAAW,YAAY,GAAG;EAChF,MAAM,OAAO,UAAU,YAAY;EACnC,IAAI,KAAK,aAAa,IAAI,GAAG,MAAM,KAAK,KAAK,QAAQ,CAAC;CACxD;CACA,KAAK,MAAM,YAAY,WAAW,qBAAqB,WAAW,kBAAkB,GAAG;EACrF,MAAM,OAAO,SAAS,YAAY;EAClC,IAAI,KAAK,uBAAuB,IAAI,GAAG;EACvC,MAAM,KAAK,KAAK,QAAQ,CAAC,CAAC,QAAQ,gBAAgB,EAAE,CAAC;CACvD;CACA,OAAO;AACT;AACA,SAAS,oBAAoB,OAAO;CAClC,MAAM,UAAU,iBAAiB,KAAK;CACtC,IAAI,KAAK,0BAA0B,OAAO,GAAG,OAAO,CAAC,OAAO;CAC5D,IAAI,KAAK,wBAAwB,OAAO,GAAG;EACzC,OAAO,CACL,GAAG,oBAAoB,QAAQ,YAAY,CAAC,GAC5C,GAAG,oBAAoB,QAAQ,aAAa,CAAC,CAC/C;CACF;CACA,IAAI,KAAK,gBAAgB,OAAO,KAAK,KAAK,qBAAqB,OAAO,GAAG;EACvE,MAAM,OAAO,QAAQ,QAAQ;EAC7B,IAAI,KAAK,QAAQ,IAAI,GAAG;GACtB,OAAO,KAAK,qBAAqB,WAAW,eAAe,CAAC,CAAC,SAAS,cAAc;IAClF,MAAM,WAAW,UAAU,cAAc;IACzC,OAAO,WAAW,oBAAoB,QAAQ,IAAI,CAAC;GACrD,CAAC;EACH;EACA,OAAO,oBAAoB,IAAI;CACjC;CACA,OAAO,CAAC;AACV;AACA,SAAS,aAAa,QAAQ,OAAO,UAAU,YAAY,SAAS,MAAM,QAAQ;CAChF,MAAM,QAAQ,CAAC;CACf,MAAM,WAAW,OAAO,YAAY,iBAAiB;CACrD,IAAI,KAAK,qBAAqB,QAAQ,GAAG;EACvC,MAAM,SAAS,iBAAiB,SAAS,sBAAsB,CAAC;EAChE,IAAI,KAAK,0BAA0B,MAAM,GAAG;GAC1C,MAAM,OAAO,mBACX,QACA,UACA,GAAG,MAAM,mBACT,UACA,YACA,SACA,MACA,MACF;GACA,IAAI,MAAM,MAAM,KAAK,IAAI;EAC3B;CACF;CACA,MAAM,WAAW,OAAO,YAAY,UAAU;CAC9C,IAAI,KAAK,qBAAqB,QAAQ,GAAG;EACvC,MAAM,SAAS,iBAAiB,SAAS,sBAAsB,CAAC;EAChE,IAAI,KAAK,0BAA0B,MAAM,GAAG;GAC1C,KAAK,MAAM,WAAW,OAAO,cAAc,GAAG;IAC5C,IAAI,CAAC,KAAK,qBAAqB,OAAO,GAAG;IACzC,MAAM,cAAc,QAAQ,QAAQ,YAAY,CAAC,CAAC,QAAQ,CAAC;IAC3D,MAAM,WAAW,iBAAiB,QAAQ,sBAAsB,CAAC;IACjE,IAAI,KAAK,iBAAiB,QAAQ,GAAG;KACnC,MAAM,SAAS,SAAS,cAAc;KACtC,IAAI,KAAK,2BAA2B,MAAM,KAAK,OAAO,QAAQ,MAAM,WAAW;MAC7E,MAAM,OAAO,SAAS,aAAa,CAAC,CAAC;MACrC,IAAI,QAAQ,KAAK,aAAa,IAAI,GAAG;OACnC,KAAK,MAAM,SAAS,oBAAoB,IAAI,GAAG;QAC7C,MAAM,OAAO,mBACX,OACA,UACA,GAAG,MAAM,YAAY,eACrB,UACA,YACA,SACA,MACA,MACF;QACA,IAAI,MAAM,MAAM,KAAK,IAAI;OAC3B;MACF;KACF;KACA;IACF;IACA,IAAI,CAAC,KAAK,0BAA0B,QAAQ,GAAG;IAC/C,KAAK,MAAM,UAAU,SAAS,cAAc,GAAG;KAC7C,IAAI,CAAC,KAAK,qBAAqB,MAAM,GAAG;KACxC,MAAM,aAAa,QAAQ,OAAO,YAAY,CAAC,CAAC,QAAQ,CAAC;KACzD,KAAK,MAAM,SAAS,oBAAoB,OAAO,sBAAsB,CAAC,GAAG;MACvE,MAAM,OAAO,mBACX,OACA,UACA,GAAG,MAAM,YAAY,YAAY,GAAG,cACpC,UACA,YACA,SACA,MACA,MACF;MACA,IAAI,MAAM,MAAM,KAAK,IAAI;KAC3B;IACF;GACF;EACF;CACF;CACA,OAAO;AACT;AACA,SAAS,kBAAkB,UAAU;CACnC,IAAI,uBAAuB,KAAK,QAAQ,GAAG,OAAO;CAClD,IAAI,0BAA0B,KAAK,QAAQ,GAAG,OAAO;CACrD,OAAO;AACT;AACA,MAAM,qCAAqC,IAAI,IAAI;AACnD,KAAK,MAAM,CAAC,WAAW,aAAa,OAAO,QAAQ,UAAU,GAAG;CAC9D,MAAM,YAAY,mBAAmB,IAAI,QAAQ;CACjD,IAAI,WAAW,UAAU,KAAK,SAAS;MAClC,mBAAmB,IAAI,UAAU,CAAC,SAAS,CAAC;AACnD;AACA,SAAS,cAAc,MAAM;CAC3B,MAAM,UAAU,KAAK,WAAW,CAAC,CAAC,eAAe;CACjD,MAAM,gBAAgB,QAAQ,kBAAkB,IAAI;CACpD,IAAI,CAAC,cAAc,YAAY,cAAc,GAAG,OAAO,KAAK;CAC5D,MAAM,aAAa,cAAc,kBAAkB,CAAC,CAAC,SAAS,cAAc,UAAU,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,QAAQ,0BAA0B,OAAO,IAAI,CAAC;CAChL,IAAI,WAAW,WAAW,GAAG,OAAO,KAAK;CACzC,MAAM,OAAO;EACX,aAAa,KAAK,QAAQ;EAC1B,UAAU,aAAa,WAAW,MAC/B,cAAc,UAAU,gBAAgB,CAAC,CAAC,YAAY,QAAQ,MAAM,KAAK,CAC5E;CACF;CACA,MAAM,WAAW,aAAa,KAAK,QAAQ,QAAQ,MAAM,mBAAmB,IAAI,QAAQ,CAAC,EAAE,MAAM,aAAa,KAAK,QAAQ,QAAQ,CAAC,KAAK;CACzI,IAAI,KAAK,QAAQ,MAAM,QAAQ,OAAO;EAAE,GAAG;EAAM;CAAQ;CACzD,OAAO;EACL,GAAG;EACH,UAAU,aAAa,EAAE,YAAY,uBAAuB,QAAQ,QAAQ;CAC9E;AACF;AACA,SAAS,YAAY,YAAY,UAAU,aAAa,QAAQ;CAC9D,MAAM,cAAc,mBAAmB,YAAY,aAAa,MAAM;CACtE,MAAM,cAAc,mBAAmB,YAAY,aAAa,MAAM;CACtE,MAAM,aAAa,eAAe,YAAY,QAAQ;CACtD,MAAM,UAAU,kBAAkB,WAAW,YAAY,CAAC;CAC1D,MAAM,QAAQ,CAAC;CACf,MAAM,qBAAqB,CAAC;CAC5B,MAAM,sBAAsB,CAAC;CAC7B,MAAM,cAAc,WAAW,qBAAqB,WAAW,cAAc,CAAC,CAAC,QAAQ,SAAS,YAAY,oBAAoB,IAAI,CAAC,CAAC,CAAC,MAAM,MAAM,UAAU,MAAM,SAAS,IAAI,KAAK,SAAS,CAAC;CAC/L,MAAM,cAAc,CAClB,GAAG,WAAW,qBAAqB,WAAW,iBAAiB,GAC/D,GAAG,WAAW,qBAAqB,WAAW,qBAAqB,CACrE,CAAC,CAAC,QAAQ,YAAY,YAAY,iBAAiB,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,UAAU,MAAM,SAAS,IAAI,KAAK,SAAS,CAAC;CACrH,KAAK,MAAM,WAAW,aAAa;EACjC,MAAM,OAAO,eACX,SACA,UACA,YACA,SACA,cAAc,QAAQ,eAAe,CAAC,GACtC,MACF;EACA,IAAI,MAAM,MAAM,KAAK,IAAI;CAC3B;CACA,KAAK,MAAM,QAAQ,aAAa;EAC9B,MAAM,YAAY,KAAK,aAAa,CAAC,CAAC;EACtC,MAAM,OAAO,YAAY,cAAc,SAAS,IAAI,KAAK;EACzD,MAAM,SAAS,iBACb,KAAK,aAAa,CAAC,CAAC,MAAM,IAC5B;EACA,IAAI,CAAC,KAAK,0BAA0B,MAAM,GAAG;EAC7C,MAAM,QAAQ,UAAU,QAAQ,KAAK,aAAa,CAAC,CAAC,EAAE,EAAE,QAAQ,KAAK,SAAS,EAAE;EAChF,MAAM,KAAK,GAAG,aAAa,QAAQ,OAAO,UAAU,YAAY,SAAS,MAAM,MAAM,CAAC;EACtF,MAAM,aAAa,0BAA0B,QAAQ,OAAO,MAAM;EAClE,mBAAmB,KAAK,GAAG,WAAW,KAAK;EAC3C,oBAAoB,KAAK,GAAG,WAAW,mBAAmB;EAC1D,MAAM,OAAO,mBACX,QACA,UACA,OACA,UACA,YACA,SACA,MACA,MACF;EACA,IAAI,MAAM,MAAM,KAAK,IAAI;CAC3B;CACA,MAAM,MACH,MAAM,UAAU,KAAK,OAAO,MAAM,QAAQ,KAAK,MAAM,cAAc,MAAM,KAAK,CACjF;CACA,mBAAmB,MAChB,MAAM,UAAU,KAAK,OAAO,MAAM,QAAQ,KAAK,MAAM,cAAc,MAAM,KAAK,CACjF;CACA,IAAI,QAAQ,gCAAgC,YAAY,mBAAmB;CAC3E,OAAO;EACL,MAAM,SAAS,aAAa,WAAW,YAAY,CAAC;EACpD;EACA;EACA;EACA;CACF;AACF;AACA,MAAM,QAAQ;;;;mEAIqD,SACjE,aACA,iBACF,EAAE;;;;;;;AAOF,SAAS,eAAe,MAAM;CAC5B,MAAM,UAAU,CAAC;CACjB,IAAI,cAAc;CAClB,IAAI,YAAY;CAChB,IAAI,SAAS;CACb,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,SAAS;EAChD,MAAM,WAAW,KAAK;EACtB,IAAI,aAAa,YAAY,aAAa,MAAM;GAC9C,QAAQ,IAAI,KAAK;GACjB,QAAQ,KAAK,CAAC;EAChB;EACA,IAAI,aAAa,WAAW;GAC1B,SAAS;GACT;EACF;EACA,IAAI,aAAa,cAAc,aAAa,UAAU;GACpD,MAAM,OAAO,KAAK,QAAQ;GAC1B,IAAI,CAAC,MAAM;IACT,QAAQ,MAAM,GAAG,SAAS;;EAEhC,OAAO;IACD,QAAQ,KAAK,CAAC;GAChB;GACA,IAAI,aAAa,YAAY,cAAc,QAAQ,IAAI;QAClD,YAAY,QAAQ,IAAI;GAC7B;GACA;EACF;EACA,IAAI,SAAS,WAAW,GAAG,GAAG;GAC5B,QAAQ,MAAM,mBAAmB,SAAS;;EAE9C,OAAO;GACH,QAAQ,KAAK,CAAC;EAChB;EACA,QAAQ,KAAK,QAAQ;CACvB;CACA,IAAI,CAAC,QAAQ,QAAQ;EACnB,QAAQ,MAAM;;EAEhB,OAAO;EACL,QAAQ,KAAK,CAAC;CAChB;CACA,OAAO;EAAE,YAAY;EAAa,UAAU;EAAW,QAAQ;EAAS,OAAO;CAAO;AACxF;AACA,MAAM,EAAE,YAAY,UAAU,QAAQ,UAAU,eAAe,QAAQ,KAAK,MAAM,CAAC,CAAC;AACpF,MAAM,EAAE,aAAa,iBAAiB,aAAa,MAAM;AACzD,KAAK,MAAM,cAAc,aAAa;CACpC,MAAM,cAAc,WAAW,aAAa;CAC5C,IAAI,aAAa,QAAQ;EACvB,QAAQ,MACN,GAAG,SAAS,aAAa,WAAW,YAAY,CAAC,EAAE,iDACrD;EACA,QAAQ,KAAK,CAAC;CAChB;AACF;AACA,MAAM,YAAY,IAAI,IACpB,YAAY,KAAK,eAAe,CAAC,WAAW,YAAY,GAAG,WAAW,YAAY,CAAC,CAAC,CACtF;AACA,MAAM,mBAAmB,uBAAuB;CAC9C,YAAY,WAAW,WAAW;CAClC,YAAY,WAAW,WAAW;AACpC,CAAC;AACD,MAAM,aAAa,iBAAiB;AACpC,MAAM,QAAQ,YAAY,KACvB,eAAe,YAAY,YAAY,iBAAiB,UAAU,YAAY,KAAK,CACtF;AACA,IAAI,OAAO;CACT,KAAK,MAAM,cAAc,aAAa;EACpC,MAAM,WAAW,WAAW,YAAY;EACxC,MAAM,SAAS,GAAG,iBAChB,UACA,WAAW,YAAY,GACvB,aAAa,QACb,MACA,SAAS,SAAS,GAAG,IAAI,GAAG,WAAW,MAAM,GAAG,WAAW,EAC7D;EACA,IAAI,OAAO,kBAAkB,QAAQ;GACnC,MAAM,UAAU,OAAO,iBAAiB,KAAK,eAAe;IAC1D,MAAM,QAAQ,WAAW,SAAS;IAClC,MAAM,WAAW,OAAO,8BAA8B,KAAK;IAC3D,MAAM,OAAO,OAAO,KAAK,MAAM,OAAO,CAAC,CAAC,SAAS,SAAS;IAC1D,OAAO,GAAG,SAAS,OAAO,EAAE,GAAG,SAAS,YAAY,EAAE,GAAG,GAAG,6BAC1D,WAAW,aACX,IACF,EAAE;IACN,KAAK,KAAK;GACR,CAAC,CAAC,CAAC,KAAK,IAAI;GACZ,QAAQ,MACN,GAAG,SAAS,aAAa,QAAQ,EAAE;EACzC,SACI;GACA,QAAQ,KAAK,CAAC;EAChB;CACF;AACF;AACA,MAAM,EAAE,MAAM,YAAY,aACxB,OACA,OAAO,KAAK,UAAU,SAAS,aAAa,QAAQ,aAAa,KAAK,CAAC,CAAC,GACxE,iBAAiB,aACjB,cACA,KACF;AACA,UAAU,QAAQ,UAAU,GAAG,EAAE,WAAW,KAAK,CAAC;AAClD,cAAc,YAAY,IAAI;AAC9B,IAAI,aAAa,MAAM;CACrB,UAAU,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;CAChD,cAAc,UAAU,GAAG,KAAK,UAAU;EAAE;EAAO;CAAQ,GAAG,MAAM,CAAC,EAAE;CACxE;AACD;AACA,IAAI,UAAU;AACd,IAAI,OAAO;CACT,KAAK,MAAM,cAAc,aAAa;EACpC,MAAM,OAAO,WAAW,YAAY;EACpC,IAAI,SAAS,UAAU,IAAI,WAAW,YAAY,CAAC,GAAG;EACtD,cAAc,WAAW,YAAY,GAAG,IAAI;EAC5C;CACF;AACF;AACA,QAAQ,IAAI,SAAS,YAAY;AACjC,IAAI,OAAO,QAAQ,IAAI,WAAW,QAAQ,cAAc;AACxD,QAAQ,IACN,GAAG,QAAQ,MAAM,gBAAgB,QAAQ,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,gBAAgB,oBAAoB,QAAQ,YAAY,iBAAiB,QAAQ,WAAW,eAAe,QAAQ,QAAQ,+BAA+B,QAAQ,QAAQ,mBAAmB,QAAQ,uBAAuB,wBAAwB,QAAQ,2BAA2B,cAAc,QAAQ,yBAAyB,YAAY,QAAQ,YAAY,sBAAsB,QAAQ,mBAAmB,gBAAgB,QAAQ,YAAY,mBAAmB,QAAQ,mBAAmB,gBAAgB,QAAQ,aAAa,sBACnmB"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["index.js"],"sourcesContent":["#!/usr/bin/env node\nimport { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { dirname, relative, resolve } from \"node:path\";\nimport { stylePropsTextOnly } from \"@tamagui/helpers\";\nimport {\n IndentationText,\n ModuleKind,\n ModuleResolutionKind,\n Node,\n Project,\n ScriptTarget,\n SyntaxKind,\n ts\n} from \"ts-morph\";\nimport { planContainers } from \"./containers\";\nimport { convertJsxSite, convertStyleObject } from \"./convert\";\nimport { compact, numericValue, runtimeType, unwrapExpression } from \"./expressions\";\nimport {\n addFunctionalVariantTypeImports,\n convertFunctionalVariants\n} from \"./functionalVariants\";\nimport {\n codemodMediaNames,\n createModifierRegistry,\n grammarPlatformNames,\n shorthands\n} from \"./grammar\";\nimport { createProvenance } from \"./provenance\";\nimport { renderReport } from \"./report\";\nimport { convertSheetFrames } from \"./sheetAnatomy\";\nimport { convertTransitions } from \"./transition\";\nimport { isLegacyConditionName } from \"./legacyNames\";\nfunction propertyName(node) {\n if (Node.isIdentifier(node) || Node.isStringLiteral(node) || Node.isNumericLiteral(node)) {\n return node.getText().replace(/^['\"]|['\"]$/g, \"\");\n }\n return null;\n}\nfunction isLineHeightName(name) {\n return name === \"lineHeight\" || name === \"lh\";\n}\nfunction extractedTokenValue(expression) {\n const nodes = [expression, ...expression.getDescendants()];\n return nodes.some(\n (node) => Node.isPropertyAccessExpression(node) && node.getName() === \"val\" || Node.isCallExpression(node) && Node.isIdentifier(node.getExpression()) && node.getExpression().getText() === \"getVariableValue\"\n );\n}\nfunction pixelReplacement(expression) {\n const current = unwrapExpression(expression);\n const number = numericValue(current);\n if (number !== null) return { text: JSON.stringify(`${number}px`), dynamic: false };\n const type = runtimeType(current);\n if (type.kind === \"string\") return null;\n if (extractedTokenValue(current)) {\n return {\n flag: {\n code: \"ambiguous-line-height-token-value\",\n detail: `lineHeight value \"${compact(current.getText())}\" extracts a token value whose units are no longer visible; replace it with an explicit ratio or px length by hand`\n }\n };\n }\n if (type.kind === \"number\") {\n return { text: `\\`\\${${current.getText()}}px\\``, dynamic: true };\n }\n return {\n flag: {\n code: \"ambiguous-line-height-expression\",\n detail: `lineHeight value \"${compact(current.getText())}\" has no provable numeric type; replace old pixel semantics with an explicit px length by hand`\n }\n };\n}\nfunction declarationContainsNumericLineHeight(expression) {\n const symbol = expression.getSymbol();\n if (!symbol) return false;\n for (const declaration of symbol.getDeclarations()) {\n for (const property of [\n ...Node.isPropertyAssignment(declaration) ? [declaration] : [],\n ...declaration.getDescendantsOfKind(SyntaxKind.PropertyAssignment)\n ]) {\n if (!isLineHeightName(propertyName(property.getNameNode()))) continue;\n const initializer = property.getInitializer();\n if (!initializer) continue;\n const value = unwrapExpression(initializer);\n if (numericValue(value) !== null || runtimeType(value).kind === \"number\")\n return true;\n }\n }\n return false;\n}\nfunction lineHeightValueIsUnmigrated(expression) {\n const current = unwrapExpression(expression);\n if (Node.isObjectLiteralExpression(current)) {\n return current.getProperties().some((property) => {\n if (!Node.isPropertyAssignment(property)) return false;\n const initializer = property.getInitializer();\n return initializer !== void 0 && lineHeightValueIsUnmigrated(initializer);\n });\n }\n if (Node.isConditionalExpression(current)) {\n return lineHeightValueIsUnmigrated(current.getWhenTrue()) || lineHeightValueIsUnmigrated(current.getWhenFalse());\n }\n return pixelReplacement(current) !== null;\n}\nfunction replaceWithin(source, sourceStart, edits) {\n let output = source;\n for (const edit of [...edits].sort((left, right) => right.start - left.start)) {\n output = output.slice(0, edit.start - sourceStart) + edit.text + output.slice(edit.end - sourceStart);\n }\n return output;\n}\nfunction migrateLegacyLineHeights(sourceFile, provenance2) {\n const edits = [];\n const claimed = /* @__PURE__ */ new Set();\n const reports = [];\n const scanLineHeightExpression = (expression, contextEdits, flags) => {\n const current = unwrapExpression(expression);\n if (Node.isObjectLiteralExpression(current)) {\n for (const property of current.getProperties()) {\n if (!Node.isPropertyAssignment(property)) continue;\n const initializer = property.getInitializer();\n if (initializer) scanLineHeightExpression(initializer, contextEdits, flags);\n }\n return;\n }\n if (Node.isConditionalExpression(current)) {\n scanLineHeightExpression(current.getWhenTrue(), contextEdits, flags);\n scanLineHeightExpression(current.getWhenFalse(), contextEdits, flags);\n return;\n }\n if (claimed.has(current.getStart())) return;\n const replacement = pixelReplacement(current);\n if (!replacement) return;\n claimed.add(current.getStart());\n if (\"flag\" in replacement) {\n flags.push(replacement.flag);\n return;\n }\n const edit = {\n start: current.getStart(),\n end: current.getEnd(),\n text: replacement.text,\n dynamic: replacement.dynamic\n };\n edits.push(edit);\n contextEdits.push(edit);\n };\n const scanProperty = (property, contextEdits, flags) => {\n if (!isLineHeightName(propertyName(property.getNameNode()))) return;\n const initializer = property.getInitializer();\n if (initializer) scanLineHeightExpression(initializer, contextEdits, flags);\n };\n const scanObject = (object, contextEdits, flags) => {\n for (const property of object.getDescendantsOfKind(SyntaxKind.PropertyAssignment)) {\n scanProperty(property, contextEdits, flags);\n }\n for (const property of object.getProperties()) {\n if (Node.isPropertyAssignment(property)) scanProperty(property, contextEdits, flags);\n }\n };\n const addReport = (node, kind, label, contextEdits, flags) => {\n if (!contextEdits.length && !flags.length) return;\n const before = compact(node.getText());\n reports.push({\n kind,\n label,\n line: sourceFile.getLineAndColumnAtPos(node.getStart()).line,\n before,\n after: compact(replaceWithin(node.getText(), node.getStart(), contextEdits)),\n programs: contextEdits.map((edit) => ({\n name: \"lineHeight\",\n value: edit.text,\n dynamic: edit.dynamic\n })),\n assessments: [],\n assessmentVerdict: \"clean\",\n warnings: [],\n flags,\n inventory: [],\n pending: [],\n notes: [\n contextEdits.length ? \"numeric lineHeight used V2 pixel semantics and now carries an explicit px unit\" : \"lineHeight was left authored for a manual unit decision\"\n ],\n legacyLeft: flags.length\n });\n };\n const scanJsx = (opening) => {\n const contextEdits = [];\n const flags = [];\n for (const attribute of opening.getAttributes()) {\n if (Node.isJsxSpreadAttribute(attribute)) {\n const expression2 = unwrapExpression(attribute.getExpression());\n if (Node.isObjectLiteralExpression(expression2)) {\n scanObject(expression2, contextEdits, flags);\n } else if (declarationContainsNumericLineHeight(expression2)) {\n flags.push({\n code: \"ambiguous-shared-line-height-style\",\n detail: `spread \"${compact(expression2.getText())}\" contains numeric lineHeight and may also be consumed outside Tamagui; migrate it at this Tamagui boundary by hand`\n });\n }\n continue;\n }\n if (!Node.isJsxAttribute(attribute)) continue;\n const nameNode = attribute.getNameNode();\n const name = Node.isIdentifier(nameNode) ? nameNode.getText() : null;\n const initializer = attribute.getInitializer();\n if (isLineHeightName(name)) {\n if (!Node.isJsxExpression(initializer)) continue;\n const expression2 = initializer.getExpression();\n if (!expression2) continue;\n const current2 = unwrapExpression(expression2);\n const number = numericValue(current2);\n if (number !== null && !claimed.has(current2.getStart())) {\n claimed.add(current2.getStart());\n const edit = {\n start: initializer.getStart(),\n end: initializer.getEnd(),\n text: JSON.stringify(`${number}px`),\n dynamic: false\n };\n edits.push(edit);\n contextEdits.push(edit);\n } else {\n scanLineHeightExpression(current2, contextEdits, flags);\n }\n continue;\n }\n if (isLegacyConditionName(name || \"\") && Node.isJsxExpression(initializer)) {\n const expression2 = initializer.getExpression();\n if (expression2) {\n const current2 = unwrapExpression(expression2);\n for (const object of [\n ...Node.isObjectLiteralExpression(current2) ? [current2] : [],\n ...current2.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression)\n ]) {\n scanObject(object, contextEdits, flags);\n }\n }\n continue;\n }\n if (name !== \"style\" || !Node.isJsxExpression(initializer)) continue;\n const expression = initializer.getExpression();\n if (!expression) continue;\n const current = unwrapExpression(expression);\n const objects = [\n ...Node.isObjectLiteralExpression(current) ? [current] : [],\n ...current.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression)\n ];\n if (objects.length) {\n for (const object of objects) scanObject(object, contextEdits, flags);\n } else if (declarationContainsNumericLineHeight(current)) {\n flags.push({\n code: \"ambiguous-shared-line-height-style\",\n detail: `style \"${compact(current.getText())}\" contains numeric lineHeight and may also be consumed by React Native or Restyle; migrate it at this Tamagui boundary by hand`\n });\n }\n }\n addReport(\n opening,\n \"jsx\",\n `<${opening.getTagNameNode().getText()}> lineHeight`,\n contextEdits,\n flags\n );\n };\n const scanCall = (call, label) => {\n const contextEdits = [];\n const flags = [];\n for (const argument of call.getArguments()) {\n for (const object of [\n ...Node.isObjectLiteralExpression(argument) ? [argument] : [],\n ...argument.getDescendantsOfKind(SyntaxKind.ObjectLiteralExpression)\n ]) {\n scanObject(object, contextEdits, flags);\n }\n }\n addReport(call, \"styled\", label, contextEdits, flags);\n };\n const wrapperCache = /* @__PURE__ */ new Map();\n for (const opening of [\n ...sourceFile.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),\n ...sourceFile.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)\n ]) {\n if (provenance2.isTamaguiElement(opening)) {\n scanJsx(opening);\n continue;\n }\n const hasLegacyValue = opening.getAttributes().some((attribute) => {\n if (!Node.isJsxAttribute(attribute)) return false;\n const name = propertyName(attribute.getNameNode());\n const initializer = attribute.getInitializer();\n if (!initializer || !Node.isJsxExpression(initializer)) return false;\n const expression = initializer.getExpression();\n if (!expression) return false;\n if (isLineHeightName(name)) return lineHeightValueIsUnmigrated(expression);\n if (name !== \"style\") return false;\n const current = unwrapExpression(expression);\n const properties = current.getDescendantsOfKind(SyntaxKind.PropertyAssignment);\n return properties.length ? properties.some((property) => {\n const value = property.getInitializer();\n return isLineHeightName(propertyName(property.getNameNode())) && value !== void 0 && lineHeightValueIsUnmigrated(value);\n }) : declarationContainsNumericLineHeight(current);\n });\n if (!hasLegacyValue) continue;\n const tag = opening.getTagNameNode();\n const symbol = tag.getSymbol();\n if (!symbol) continue;\n const declarations = (symbol.getAliasedSymbol() ?? symbol).getDeclarations();\n const isLocalWrapper = declarations.some((declaration) => {\n const cached = wrapperCache.get(declaration);\n if (cached !== void 0) return cached;\n const file = declaration.getSourceFile();\n const filePath = file.getFilePath();\n const local = !file.isDeclarationFile() && !filePath.includes(\"/node_modules/\") && !relative(projectRoot, filePath).startsWith(\"..\");\n const wrapsTamagui = local && [\n ...declaration.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),\n ...declaration.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)\n ].some((child) => provenance2.isTamaguiElement(child));\n wrapperCache.set(declaration, wrapsTamagui);\n return wrapsTamagui;\n });\n if (!isLocalWrapper) continue;\n addReport(\n opening,\n \"jsx\",\n `<${tag.getText()}> lineHeight`,\n [],\n [\n {\n code: \"ambiguous-wrapper-line-height\",\n detail: `local wrapper <${tag.getText()}> renders Tamagui JSX, so numeric lineHeight may still be V2 pixels, but the wrapper may transform units; migrate this call site by hand`\n }\n ]\n );\n }\n for (const call of sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression)) {\n if (provenance2.isTamaguiStyledCall(call)) {\n scanCall(\n call,\n `styled(${compact(call.getArguments()[0]?.getText() ?? \"unknown\")}, \\u2026) lineHeight`\n );\n } else if (provenance2.isTamaguiStyleCall(call)) {\n scanCall(call, `${compact(call.getExpression().getText())}(\\u2026) lineHeight`);\n }\n }\n if (edits.length) {\n sourceFile.replaceWithText(replaceWithin(sourceFile.getFullText(), 0, edits));\n }\n return reports;\n}\nconst projectRoot = process.cwd();\nconst defaultReportPath = resolve(projectRoot, \"tamagui-flat-values-report.md\");\nconst ignoreMarker = \".tamagui-flat-values-ignore\";\nconst ignoredDirectories = /* @__PURE__ */ new Map();\nfunction isIgnored(filePath) {\n let directory = dirname(filePath);\n const visited = [];\n while (directory === projectRoot || !relative(projectRoot, directory).startsWith(\"..\")) {\n const cached = ignoredDirectories.get(directory);\n if (cached !== void 0) {\n for (const seen of visited) ignoredDirectories.set(seen, cached);\n return cached;\n }\n visited.push(directory);\n if (existsSync(resolve(directory, ignoreMarker))) {\n for (const seen of visited) ignoredDirectories.set(seen, true);\n return true;\n }\n if (directory === projectRoot) break;\n const parent = dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n for (const seen of visited) ignoredDirectories.set(seen, false);\n return false;\n}\nfunction collectFiles(inputs2) {\n const tsConfigFilePath = resolve(projectRoot, \"tsconfig.json\");\n if (!existsSync(tsConfigFilePath)) {\n console.error(\n `no tsconfig.json in ${projectRoot}; run the codemod from your project root`\n );\n process.exit(2);\n }\n const project = new Project({\n tsConfigFilePath,\n skipAddingFilesFromTsConfig: true,\n // ts-morph re-indents every multi-line replacement from the indentation it\n // computes for the node with this unit. The default four-space unit puts a\n // JSX child two columns past where two-space source authored it, and every\n // attribute line of a rewritten element staggered with it\n manipulationSettings: { indentationText: IndentationText.TwoSpaces },\n compilerOptions: {\n allowJs: false,\n jsx: 4,\n target: ScriptTarget.ES2020,\n module: ModuleKind.ESNext,\n moduleResolution: ModuleResolutionKind.NodeJs,\n skipLibCheck: true,\n strictNullChecks: true,\n baseUrl: projectRoot\n }\n });\n const files2 = /* @__PURE__ */ new Map();\n const ignored = /* @__PURE__ */ new Set();\n const missing = [];\n for (const input of inputs2) {\n const path = resolve(projectRoot, input);\n if (!existsSync(path)) {\n missing.push(input);\n continue;\n }\n const pattern = /\\.[cm]?[jt]sx?$/.test(path) ? path : `${path}/**/*.{ts,tsx}`;\n const matched = project.addSourceFilesAtPaths(pattern);\n if (!matched.length) missing.push(input);\n for (const file of matched) {\n const filePath = file.getFilePath();\n if (isIgnored(filePath)) ignored.add(filePath);\n else files2.set(filePath, file);\n }\n }\n if (missing.length) {\n console.error(\n `no source file matched ${missing.map((input) => `\"${input}\"`).join(\", \")}`\n );\n process.exit(2);\n }\n if (files2.size === 0 && ignored.size > 0) {\n console.error(\n `all ${ignored.size} matched source ${ignored.size === 1 ? \"file was\" : \"files were\"} skipped by ${ignoreMarker}; no migration report was written`\n );\n process.exit(2);\n }\n return {\n sourceFiles: [...files2.values()].sort(\n (left, right) => left.getFilePath().localeCompare(right.getFilePath())\n ),\n ignoredFiles: ignored.size\n };\n}\nfunction themeNames(sourceFiles2) {\n const names = /* @__PURE__ */ new Set([\"light\", \"dark\"]);\n for (const sourceFile of sourceFiles2) {\n for (const name of conditionNames(sourceFile)) {\n if (name.startsWith(\"$theme-\")) names.add(name.slice(\"$theme-\".length));\n }\n }\n return names;\n}\nfunction mediaNames(sourceFiles2) {\n const names = new Set(codemodMediaNames);\n for (const sourceFile of sourceFiles2) {\n for (const name of conditionNames(sourceFile)) {\n if (!name.startsWith(\"$\")) continue;\n if (name.startsWith(\"$theme-\") || name.startsWith(\"$platform-\") || name.startsWith(\"$group-\") || grammarPlatformNames.has(name.slice(1))) {\n continue;\n }\n names.add(name.slice(1));\n }\n }\n return names;\n}\nfunction conditionNames(sourceFile) {\n const names = [];\n for (const attribute of sourceFile.getDescendantsOfKind(SyntaxKind.JsxAttribute)) {\n const name = attribute.getNameNode();\n if (Node.isIdentifier(name)) names.push(name.getText());\n }\n for (const property of sourceFile.getDescendantsOfKind(SyntaxKind.PropertyAssignment)) {\n const name = property.getNameNode();\n if (Node.isComputedPropertyName(name)) continue;\n names.push(name.getText().replace(/^['\"]|['\"]$/g, \"\"));\n }\n return names;\n}\nfunction variantStyleObjects(value) {\n const current = unwrapExpression(value);\n if (Node.isObjectLiteralExpression(current)) return [current];\n if (Node.isConditionalExpression(current)) {\n return [\n ...variantStyleObjects(current.getWhenTrue()),\n ...variantStyleObjects(current.getWhenFalse())\n ];\n }\n if (Node.isArrowFunction(current) || Node.isFunctionExpression(current)) {\n const body = current.getBody();\n if (Node.isBlock(body)) {\n return body.getDescendantsOfKind(SyntaxKind.ReturnStatement).flatMap((statement) => {\n const returned = statement.getExpression();\n return returned ? variantStyleObjects(returned) : [];\n });\n }\n return variantStyleObjects(body);\n }\n return [];\n}\nfunction variantSites(config, label, registry, containers, targets, host, write2) {\n const sites = [];\n const defaults = config.getProperty(\"defaultVariants\");\n if (Node.isPropertyAssignment(defaults)) {\n const object = unwrapExpression(defaults.getInitializerOrThrow());\n if (Node.isObjectLiteralExpression(object)) {\n const site = convertStyleObject(\n object,\n \"styled\",\n `${label} defaultVariants`,\n registry,\n containers,\n targets,\n host,\n write2\n );\n if (site) sites.push(site);\n }\n }\n const variants = config.getProperty(\"variants\");\n if (Node.isPropertyAssignment(variants)) {\n const object = unwrapExpression(variants.getInitializerOrThrow());\n if (Node.isObjectLiteralExpression(object)) {\n for (const variant of object.getProperties()) {\n if (!Node.isPropertyAssignment(variant)) continue;\n const variantName = compact(variant.getNameNode().getText());\n const branches = unwrapExpression(variant.getInitializerOrThrow());\n if (Node.isCallExpression(branches)) {\n const callee = branches.getExpression();\n if (Node.isPropertyAccessExpression(callee) && callee.getName() === \"dynamic\") {\n const body = branches.getArguments()[0];\n if (body && Node.isExpression(body)) {\n for (const style of variantStyleObjects(body)) {\n const site = convertStyleObject(\n style,\n \"styled\",\n `${label} variants.${variantName}`,\n registry,\n containers,\n targets,\n host,\n write2\n );\n if (site) sites.push(site);\n }\n }\n }\n continue;\n }\n if (!Node.isObjectLiteralExpression(branches)) continue;\n for (const branch of branches.getProperties()) {\n if (!Node.isPropertyAssignment(branch)) continue;\n const branchName = compact(branch.getNameNode().getText());\n for (const style of variantStyleObjects(branch.getInitializerOrThrow())) {\n const site = convertStyleObject(\n style,\n \"styled\",\n `${label} variants.${variantName}.${branchName}`,\n registry,\n containers,\n targets,\n host,\n write2\n );\n if (site) sites.push(site);\n }\n }\n }\n }\n }\n return sites;\n}\nfunction conversionTargets(filePath) {\n if (/\\.web\\.[cm]?[jt]sx?$/.test(filePath)) return \"web\";\n if (/\\.native\\.[cm]?[jt]sx?$/.test(filePath)) return \"native\";\n return \"shared\";\n}\nconst shorthandSpellings = /* @__PURE__ */ new Map();\nfor (const [shorthand, longhand] of Object.entries(shorthands)) {\n const spellings = shorthandSpellings.get(longhand);\n if (spellings) spellings.push(shorthand);\n else shorthandSpellings.set(longhand, [shorthand]);\n}\nfunction typeAwareHost(node) {\n const checker = node.getProject().getTypeChecker();\n const componentType = checker.getTypeAtLocation(node);\n if (!componentType.getProperty(\"staticConfig\")) return void 0;\n const propsTypes = componentType.getCallSignatures().flatMap((signature) => signature.getParameters().slice(0, 1)).map((props) => checker.getTypeOfSymbolAtLocation(props, node));\n if (propsTypes.length === 0) return void 0;\n const host = {\n displayName: node.getText(),\n accepts: (property) => propsTypes.some(\n (propsType) => propsType.getApparentType().getProperty(property) !== void 0\n )\n };\n const accepts = (property) => host.accepts(property) || (shorthandSpellings.get(property)?.some((spelling) => host.accepts(spelling)) ?? false);\n if (node.getText() !== \"View\") return { ...host, accepts };\n return {\n ...host,\n accepts: (property) => !(property in stylePropsTextOnly) && accepts(property)\n };\n}\nfunction inspectFile(sourceFile, registry, provenance2, sourceSemantics2, lineHeightOnly2, write2) {\n const lineHeightSites = sourceSemantics2 === \"v2-pixels\" ? migrateLegacyLineHeights(sourceFile, provenance2) : [];\n if (lineHeightOnly2) {\n return {\n file: relative(projectRoot, sourceFile.getFilePath()),\n sites: lineHeightSites,\n functionalVariants: [],\n sheetFrames: [],\n transitions: []\n };\n }\n const sheetFrames = convertSheetFrames(sourceFile, provenance2, write2);\n const transitions = convertTransitions(sourceFile, provenance2, write2);\n const containers = planContainers(sourceFile, registry);\n const targets = conversionTargets(sourceFile.getFilePath());\n const sites = [...lineHeightSites];\n const functionalVariants = [];\n const requiredTypeImports = [];\n const styledCalls = sourceFile.getDescendantsOfKind(SyntaxKind.CallExpression).filter((call) => provenance2.isTamaguiStyledCall(call)).sort((left, right) => right.getStart() - left.getStart());\n const jsxOpenings = [\n ...sourceFile.getDescendantsOfKind(SyntaxKind.JsxOpeningElement),\n ...sourceFile.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement)\n ].filter((opening) => provenance2.isTamaguiElement(opening)).sort((left, right) => right.getStart() - left.getStart());\n for (const opening of jsxOpenings) {\n const site = convertJsxSite(\n opening,\n registry,\n containers,\n targets,\n typeAwareHost(opening.getTagNameNode()),\n write2\n );\n if (site) sites.push(site);\n }\n for (const call of styledCalls) {\n const component = call.getArguments()[0];\n const host = component ? typeAwareHost(component) : void 0;\n const config = unwrapExpression(\n call.getArguments()[1] ?? call\n );\n if (!Node.isObjectLiteralExpression(config)) continue;\n const label = `styled(${compact(call.getArguments()[0]?.getText() ?? \"unknown\")}, \\u2026)`;\n sites.push(...variantSites(config, label, registry, containers, targets, host, write2));\n const functional = convertFunctionalVariants(config, label, write2);\n functionalVariants.push(...functional.sites);\n requiredTypeImports.push(...functional.requiredTypeImports);\n const site = convertStyleObject(\n config,\n \"styled\",\n label,\n registry,\n containers,\n targets,\n host,\n write2\n );\n if (site) sites.push(site);\n }\n sites.sort(\n (left, right) => left.line - right.line || left.label.localeCompare(right.label)\n );\n functionalVariants.sort(\n (left, right) => left.line - right.line || left.label.localeCompare(right.label)\n );\n if (write2) addFunctionalVariantTypeImports(sourceFile, requiredTypeImports);\n return {\n file: relative(projectRoot, sourceFile.getFilePath()),\n sites,\n functionalVariants,\n sheetFrames,\n transitions\n };\n}\nconst usage = `Converts Tamagui style syntax to V3 flat property values and reports what it cannot convert.\n\n npx @tamagui/codemod-flat-values [options] <files or directories...>\n\n --report <path> where to write the Markdown report (default: ${relative(\n projectRoot,\n defaultReportPath\n)})\n --json <path> also write the machine-readable report\n --write rewrite every statically safe conversion in place\n --source-semantics <v2-pixels|v3-ratios>\n interpret numeric Tamagui lineHeight from that source contract\n (default: v3-ratios)\n --line-height-only apply and report only the selected lineHeight source migration\n --help print this\n\nRun it from your project root, which is where paths and the tsconfig resolve from.\nSource files are only written with --write.`;\nfunction parseArguments(argv) {\n const inputs2 = [];\n let reportPath2 = defaultReportPath;\n let jsonPath2 = null;\n let write2 = false;\n let sourceSemantics2 = \"v3-ratios\";\n let lineHeightOnly2 = false;\n for (let index = 0; index < argv.length; index++) {\n const argument = argv[index];\n if (argument === \"--help\" || argument === \"-h\") {\n console.log(usage);\n process.exit(0);\n }\n if (argument === \"--write\") {\n write2 = true;\n continue;\n }\n if (argument === \"--line-height-only\") {\n lineHeightOnly2 = true;\n continue;\n }\n if (argument === \"--source-semantics\") {\n const next = argv[index + 1];\n if (next !== \"v2-pixels\" && next !== \"v3-ratios\") {\n console.error(`${argument} requires v2-pixels or v3-ratios\n\n${usage}`);\n process.exit(2);\n }\n sourceSemantics2 = next;\n index++;\n continue;\n }\n if (argument === \"--report\" || argument === \"--json\") {\n const next = argv[index + 1];\n if (!next) {\n console.error(`${argument} requires a path\n\n${usage}`);\n process.exit(2);\n }\n if (argument === \"--report\") reportPath2 = resolve(next);\n else jsonPath2 = resolve(next);\n index++;\n continue;\n }\n if (argument.startsWith(\"-\")) {\n console.error(`unknown option \"${argument}\"\n\n${usage}`);\n process.exit(2);\n }\n inputs2.push(argument);\n }\n if (!inputs2.length) {\n console.error(`no files or directories given\n\n${usage}`);\n process.exit(2);\n }\n return { reportPath: reportPath2, jsonPath: jsonPath2, inputs: inputs2, write: write2, sourceSemantics: sourceSemantics2, lineHeightOnly: lineHeightOnly2 };\n}\nconst { reportPath, jsonPath, inputs, write, sourceSemantics, lineHeightOnly } = parseArguments(process.argv.slice(2));\nconst { sourceFiles, ignoredFiles } = collectFiles(inputs);\nfor (const sourceFile of sourceFiles) {\n const diagnostics = sourceFile.compilerNode.parseDiagnostics;\n if (diagnostics?.length) {\n console.error(\n `${relative(projectRoot, sourceFile.getFilePath())}: source has parse errors; no files were written`\n );\n process.exit(2);\n }\n}\nconst originals = new Map(\n sourceFiles.map((sourceFile) => [sourceFile.getFilePath(), sourceFile.getFullText()])\n);\nconst modifierRegistry = createModifierRegistry({\n mediaNames: mediaNames(sourceFiles),\n themeNames: themeNames(sourceFiles)\n});\nconst provenance = createProvenance();\nconst files = sourceFiles.map(\n (sourceFile) => inspectFile(\n sourceFile,\n modifierRegistry.registry,\n provenance,\n sourceSemantics,\n lineHeightOnly,\n write\n )\n);\nif (write) {\n for (const sourceFile of sourceFiles) {\n const filePath = sourceFile.getFilePath();\n const parsed = ts.createSourceFile(\n filePath,\n sourceFile.getFullText(),\n ScriptTarget.Latest,\n true,\n filePath.endsWith(\"x\") ? ts.ScriptKind.TSX : ts.ScriptKind.TS\n );\n if (parsed.parseDiagnostics?.length) {\n const details = parsed.parseDiagnostics.map((diagnostic) => {\n const start = diagnostic.start ?? 0;\n const position = parsed.getLineAndCharacterOfPosition(start);\n const line = parsed.text.split(/\\r?\\n/)[position.line] ?? \"\";\n return `${position.line + 1}:${position.character + 1} ${ts.flattenDiagnosticMessageText(\n diagnostic.messageText,\n \"\\n\"\n )}\n ${line.trim()}`;\n }).join(\"\\n\");\n console.error(\n `${relative(projectRoot, filePath)}: rewrite produced parse errors; no files were written\n${details}`\n );\n process.exit(2);\n }\n }\n}\nconst { text, summary } = renderReport(\n files,\n inputs.map((input) => relative(projectRoot, resolve(projectRoot, input))),\n modifierRegistry.diagnostics,\n ignoredFiles,\n write\n);\nmkdirSync(dirname(reportPath), { recursive: true });\nwriteFileSync(reportPath, text);\nif (jsonPath !== null) {\n mkdirSync(dirname(jsonPath), { recursive: true });\n writeFileSync(jsonPath, `${JSON.stringify({ files, summary }, null, 2)}\n`);\n}\nlet written = 0;\nif (write) {\n for (const sourceFile of sourceFiles) {\n const next = sourceFile.getFullText();\n if (next === originals.get(sourceFile.getFilePath())) continue;\n writeFileSync(sourceFile.getFilePath(), next);\n written++;\n }\n}\nconsole.log(`wrote ${reportPath}`);\nif (write) console.log(`rewrote ${written} source files`);\nconsole.log(\n `${summary.sites} style sites: ${summary.clean - summary.waiting} clean, ${summary.needsRelocation} need relocation, ${summary.unknownHost} unknown host, ${summary.ineligible} ineligible, ${summary.waiting} waiting on runtime support, ${summary.flagged} syntax-flagged; ${summary.functionalVariantSites} functional variants: ${summary.functionalVariantConverted} automatic, ${summary.functionalVariantFlagged} flagged; ${summary.sheetFrames} Sheet.Frame sites: ${summary.sheetFramesFlagged} need review; ${summary.transitions} v2 transitions: ${summary.transitionsFlagged} need review; ${summary.ignoredFiles} source files ignored`\n);\n//# sourceMappingURL=index.js.map\n"],"mappings":"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"}
|
package/dist/provenance.mjs
CHANGED
|
@@ -115,6 +115,14 @@ function createProvenance() {
|
|
|
115
115
|
if (callee === null || callee.getText() !== "styled") return false;
|
|
116
116
|
return fromIdentifier(callee);
|
|
117
117
|
};
|
|
118
|
+
const isTamaguiStyleCall = (call) => {
|
|
119
|
+
const callee = call.getExpression();
|
|
120
|
+
if (!Node.isPropertyAccessExpression(callee)) return false;
|
|
121
|
+
const method = callee.getName();
|
|
122
|
+
if (method !== "style" && method !== "resolve" && method !== "dynamic") return false;
|
|
123
|
+
const owner = rootIdentifier(callee.getExpression());
|
|
124
|
+
return owner !== null && fromIdentifier(owner);
|
|
125
|
+
};
|
|
118
126
|
function isTamaguiValue(expression) {
|
|
119
127
|
let current = expression;
|
|
120
128
|
while (Node.isParenthesizedExpression(current) || Node.isAsExpression(current) || Node.isNonNullExpression(current)) {
|
|
@@ -129,7 +137,8 @@ function createProvenance() {
|
|
|
129
137
|
if (tag === null || !/^[A-Z_$]/.test(tag.getText())) return false;
|
|
130
138
|
return fromIdentifier(tag);
|
|
131
139
|
},
|
|
132
|
-
isTamaguiStyledCall
|
|
140
|
+
isTamaguiStyledCall,
|
|
141
|
+
isTamaguiStyleCall
|
|
133
142
|
};
|
|
134
143
|
}
|
|
135
144
|
|
package/dist/provenance.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provenance.js","names":[],"sources":["provenance.js"],"sourcesContent":["import {\n Node,\n SyntaxKind\n} from \"ts-morph\";\nconst tamaguiModule = /^(tamagui|@tamagui\\/)/;\nfunction rootIdentifier(node) {\n let current = node;\n while (Node.isPropertyAccessExpression(current)) current = current.getExpression();\n return Node.isIdentifier(current) ? current : null;\n}\nfunction createProvenance() {\n const resolved = /* @__PURE__ */ new Map();\n const active = /* @__PURE__ */ new Set();\n const fromDeclaration = (declaration) => {\n const cached = resolved.get(declaration);\n if (cached !== void 0) return cached;\n if (active.has(declaration)) return false;\n active.add(declaration);\n const answer = computeDeclaration(declaration);\n active.delete(declaration);\n resolved.set(declaration, answer);\n return answer;\n };\n const fromModule = (specifier, source, name) => {\n if (tamaguiModule.test(specifier)) return true;\n if (source === void 0) return false;\n return exportedBinding(source, name);\n };\n const bindings = /* @__PURE__ */ new Map();\n const openBindings = /* @__PURE__ */ new Set();\n const exportedBinding = (source, name) => {\n const key = `${source.getFilePath()}#${name}`;\n const cached = bindings.get(key);\n if (cached !== void 0) return cached;\n if (openBindings.has(key)) return false;\n openBindings.add(key);\n const answer = computeBinding(source, name);\n openBindings.delete(key);\n bindings.set(key, answer);\n return answer;\n };\n const computeBinding = (source, name) => {\n for (const declaration of source.getExportDeclarations()) {\n const specifier = declaration.getModuleSpecifierValue();\n const named = declaration.getNamedExports();\n if (specifier === void 0) {\n for (const element of named) {\n if ((element.getAliasNode() ?? element.getNameNode()).getText() !== name) {\n continue;\n }\n if (fromDeclaration(element)) return true;\n }\n continue;\n }\n if (!named.length && !declaration.getNamespaceExport()) {\n if (fromModule(specifier, declaration.getModuleSpecifierSourceFile(), name)) {\n return true;\n }\n continue;\n }\n for (const element of named) {\n if ((element.getAliasNode() ?? element.getNameNode()).getText() !== name) continue;\n if (fromModule(\n specifier,\n declaration.getModuleSpecifierSourceFile(),\n element.getName()\n )) {\n return true;\n }\n }\n }\n for (const [exportName, declarations] of source.getExportedDeclarations()) {\n if (exportName !== name) continue;\n for (const declaration of declarations) {\n if (fromDeclaration(declaration)) return true;\n }\n }\n return false;\n };\n const computeDeclaration = (declaration) => {\n if (Node.isImportSpecifier(declaration)) {\n const importDeclaration = declaration.getImportDeclaration();\n return fromModule(\n importDeclaration.getModuleSpecifierValue(),\n importDeclaration.getModuleSpecifierSourceFile(),\n declaration.getName()\n );\n }\n if (Node.isImportClause(declaration) || Node.isNamespaceImport(declaration)) {\n const importDeclaration = declaration.getFirstAncestorByKindOrThrow(\n SyntaxKind.ImportDeclaration\n );\n return tamaguiModule.test(importDeclaration.getModuleSpecifierValue());\n }\n if (Node.isExportSpecifier(declaration)) {\n const exportDeclaration = declaration.getExportDeclaration();\n const specifier = exportDeclaration.getModuleSpecifierValue();\n if (specifier !== void 0) {\n return fromModule(\n specifier,\n exportDeclaration.getModuleSpecifierSourceFile(),\n declaration.getName()\n );\n }\n for (const local of declaration.getLocalTargetDeclarations()) {\n if (fromDeclaration(local)) return true;\n }\n return false;\n }\n if (Node.isVariableDeclaration(declaration)) {\n const initializer = declaration.getInitializer();\n return initializer !== void 0 && isTamaguiValue(initializer);\n }\n return false;\n };\n const fromIdentifier = (identifier) => {\n const symbol = identifier.getSymbol();\n if (symbol === void 0) return false;\n for (const declaration of symbol.getDeclarations()) {\n if (fromDeclaration(declaration)) return true;\n }\n const aliased = symbol.getAliasedSymbol();\n if (aliased === void 0) return false;\n for (const declaration of aliased.getDeclarations()) {\n if (fromDeclaration(declaration)) return true;\n }\n return false;\n };\n const isTamaguiStyledCall = (call) => {\n const callee = rootIdentifier(call.getExpression());\n if (callee === null || callee.getText() !== \"styled\") return false;\n return fromIdentifier(callee);\n };\n function isTamaguiValue(expression) {\n let current = expression;\n while (Node.isParenthesizedExpression(current) || Node.isAsExpression(current) || Node.isNonNullExpression(current)) {\n current = current.getExpression();\n }\n const identifier = rootIdentifier(\n Node.isCallExpression(current) ? current.getExpression() : current\n );\n return identifier !== null && fromIdentifier(identifier);\n }\n return {\n isTamaguiElement: (opening) => {\n const tag = rootIdentifier(opening.getTagNameNode());\n if (tag === null || !/^[A-Z_$]/.test(tag.getText())) return false;\n return fromIdentifier(tag);\n },\n isTamaguiStyledCall\n };\n}\nexport {\n createProvenance\n};\n//# sourceMappingURL=provenance.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provenance.js","names":[],"sources":["provenance.js"],"sourcesContent":["import {\n Node,\n SyntaxKind\n} from \"ts-morph\";\nconst tamaguiModule = /^(tamagui|@tamagui\\/)/;\nfunction rootIdentifier(node) {\n let current = node;\n while (Node.isPropertyAccessExpression(current)) current = current.getExpression();\n return Node.isIdentifier(current) ? current : null;\n}\nfunction createProvenance() {\n const resolved = /* @__PURE__ */ new Map();\n const active = /* @__PURE__ */ new Set();\n const fromDeclaration = (declaration) => {\n const cached = resolved.get(declaration);\n if (cached !== void 0) return cached;\n if (active.has(declaration)) return false;\n active.add(declaration);\n const answer = computeDeclaration(declaration);\n active.delete(declaration);\n resolved.set(declaration, answer);\n return answer;\n };\n const fromModule = (specifier, source, name) => {\n if (tamaguiModule.test(specifier)) return true;\n if (source === void 0) return false;\n return exportedBinding(source, name);\n };\n const bindings = /* @__PURE__ */ new Map();\n const openBindings = /* @__PURE__ */ new Set();\n const exportedBinding = (source, name) => {\n const key = `${source.getFilePath()}#${name}`;\n const cached = bindings.get(key);\n if (cached !== void 0) return cached;\n if (openBindings.has(key)) return false;\n openBindings.add(key);\n const answer = computeBinding(source, name);\n openBindings.delete(key);\n bindings.set(key, answer);\n return answer;\n };\n const computeBinding = (source, name) => {\n for (const declaration of source.getExportDeclarations()) {\n const specifier = declaration.getModuleSpecifierValue();\n const named = declaration.getNamedExports();\n if (specifier === void 0) {\n for (const element of named) {\n if ((element.getAliasNode() ?? element.getNameNode()).getText() !== name) {\n continue;\n }\n if (fromDeclaration(element)) return true;\n }\n continue;\n }\n if (!named.length && !declaration.getNamespaceExport()) {\n if (fromModule(specifier, declaration.getModuleSpecifierSourceFile(), name)) {\n return true;\n }\n continue;\n }\n for (const element of named) {\n if ((element.getAliasNode() ?? element.getNameNode()).getText() !== name) continue;\n if (fromModule(\n specifier,\n declaration.getModuleSpecifierSourceFile(),\n element.getName()\n )) {\n return true;\n }\n }\n }\n for (const [exportName, declarations] of source.getExportedDeclarations()) {\n if (exportName !== name) continue;\n for (const declaration of declarations) {\n if (fromDeclaration(declaration)) return true;\n }\n }\n return false;\n };\n const computeDeclaration = (declaration) => {\n if (Node.isImportSpecifier(declaration)) {\n const importDeclaration = declaration.getImportDeclaration();\n return fromModule(\n importDeclaration.getModuleSpecifierValue(),\n importDeclaration.getModuleSpecifierSourceFile(),\n declaration.getName()\n );\n }\n if (Node.isImportClause(declaration) || Node.isNamespaceImport(declaration)) {\n const importDeclaration = declaration.getFirstAncestorByKindOrThrow(\n SyntaxKind.ImportDeclaration\n );\n return tamaguiModule.test(importDeclaration.getModuleSpecifierValue());\n }\n if (Node.isExportSpecifier(declaration)) {\n const exportDeclaration = declaration.getExportDeclaration();\n const specifier = exportDeclaration.getModuleSpecifierValue();\n if (specifier !== void 0) {\n return fromModule(\n specifier,\n exportDeclaration.getModuleSpecifierSourceFile(),\n declaration.getName()\n );\n }\n for (const local of declaration.getLocalTargetDeclarations()) {\n if (fromDeclaration(local)) return true;\n }\n return false;\n }\n if (Node.isVariableDeclaration(declaration)) {\n const initializer = declaration.getInitializer();\n return initializer !== void 0 && isTamaguiValue(initializer);\n }\n return false;\n };\n const fromIdentifier = (identifier) => {\n const symbol = identifier.getSymbol();\n if (symbol === void 0) return false;\n for (const declaration of symbol.getDeclarations()) {\n if (fromDeclaration(declaration)) return true;\n }\n const aliased = symbol.getAliasedSymbol();\n if (aliased === void 0) return false;\n for (const declaration of aliased.getDeclarations()) {\n if (fromDeclaration(declaration)) return true;\n }\n return false;\n };\n const isTamaguiStyledCall = (call) => {\n const callee = rootIdentifier(call.getExpression());\n if (callee === null || callee.getText() !== \"styled\") return false;\n return fromIdentifier(callee);\n };\n const isTamaguiStyleCall = (call) => {\n const callee = call.getExpression();\n if (!Node.isPropertyAccessExpression(callee)) return false;\n const method = callee.getName();\n if (method !== \"style\" && method !== \"resolve\" && method !== \"dynamic\") return false;\n const owner = rootIdentifier(callee.getExpression());\n return owner !== null && fromIdentifier(owner);\n };\n function isTamaguiValue(expression) {\n let current = expression;\n while (Node.isParenthesizedExpression(current) || Node.isAsExpression(current) || Node.isNonNullExpression(current)) {\n current = current.getExpression();\n }\n const identifier = rootIdentifier(\n Node.isCallExpression(current) ? current.getExpression() : current\n );\n return identifier !== null && fromIdentifier(identifier);\n }\n return {\n isTamaguiElement: (opening) => {\n const tag = rootIdentifier(opening.getTagNameNode());\n if (tag === null || !/^[A-Z_$]/.test(tag.getText())) return false;\n return fromIdentifier(tag);\n },\n isTamaguiStyledCall,\n isTamaguiStyleCall\n };\n}\nexport {\n createProvenance\n};\n//# sourceMappingURL=provenance.js.map\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tamagui/codemod-flat-values",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.1341.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -26,13 +26,13 @@
|
|
|
26
26
|
"typecheck": "tsc --noEmit"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@tamagui/helpers": "3.0.0-beta.
|
|
30
|
-
"@tamagui/shorthands": "3.0.0-beta.
|
|
31
|
-
"@tamagui/style-grammar": "3.0.0-beta.
|
|
29
|
+
"@tamagui/helpers": "3.0.0-beta.1341.1",
|
|
30
|
+
"@tamagui/shorthands": "3.0.0-beta.1341.1",
|
|
31
|
+
"@tamagui/style-grammar": "3.0.0-beta.1341.1",
|
|
32
32
|
"ts-morph": "^28.0.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@tamagui/build": "3.0.0-beta.
|
|
35
|
+
"@tamagui/build": "3.0.0-beta.1341.1",
|
|
36
36
|
"typescript": "7.0.2"
|
|
37
37
|
},
|
|
38
38
|
"repository": {
|
package/src/expressions.ts
CHANGED
package/src/grammar.ts
CHANGED
|
@@ -58,14 +58,21 @@ export type {
|
|
|
58
58
|
|
|
59
59
|
export { shorthands }
|
|
60
60
|
|
|
61
|
-
function
|
|
61
|
+
function normalizeV3Payload(value: unknown, prop = ''): unknown {
|
|
62
|
+
if (
|
|
63
|
+
typeof value === 'number' &&
|
|
64
|
+
Number.isFinite(value) &&
|
|
65
|
+
(prop === 'lineHeight' || prop === 'lh')
|
|
66
|
+
) {
|
|
67
|
+
return String(value)
|
|
68
|
+
}
|
|
62
69
|
if (typeof value === 'string') return replaceV6BuiltInTokens(value)
|
|
63
|
-
if (Array.isArray(value)) return value.map(
|
|
70
|
+
if (Array.isArray(value)) return value.map((item) => normalizeV3Payload(item, prop))
|
|
64
71
|
if (value === null || typeof value !== 'object') return value
|
|
65
72
|
|
|
66
73
|
const renamed: Record<string, unknown> = {}
|
|
67
74
|
for (const key in value) {
|
|
68
|
-
renamed[key] =
|
|
75
|
+
renamed[key] = normalizeV3Payload((value as Record<string, unknown>)[key], key)
|
|
69
76
|
}
|
|
70
77
|
return renamed
|
|
71
78
|
}
|
|
@@ -75,7 +82,7 @@ export function convertLegacyConditionProp(
|
|
|
75
82
|
value: unknown,
|
|
76
83
|
options: ConvertLegacyConditionOptions
|
|
77
84
|
): LegacyConditionResult | null {
|
|
78
|
-
return convertLegacyConditionPropLocal(propName,
|
|
85
|
+
return convertLegacyConditionPropLocal(propName, normalizeV3Payload(value), options)
|
|
79
86
|
}
|
|
80
87
|
|
|
81
88
|
/** every prop spelling the codemod treats as carrying a style value */
|