@tamagui/codemod-flat-values 3.0.0-beta.1216.1 → 3.0.0-beta.1309.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { existsSync, mkdirSync, writeFileSync } from "node:fs";
3
3
  import { dirname, relative, resolve } from "node:path";
4
- import { resolveTamaguiHost } from "@tamagui/language-service/host";
5
4
  import { stylePropsTextOnly } from "@tamagui/helpers";
6
5
  import { IndentationText, ModuleKind, ModuleResolutionKind, Node, Project, ScriptTarget, SyntaxKind, ts } from "ts-morph";
7
6
  import { planContainers } from "./containers.mjs";
@@ -202,9 +201,15 @@ for (const [shorthand, longhand] of Object.entries(shorthands)) {
202
201
  else shorthandSpellings.set(longhand, [shorthand]);
203
202
  }
204
203
  function typeAwareHost(node) {
205
- const checker = node.getProject().getTypeChecker().compilerObject;
206
- const host = resolveTamaguiHost(checker, node.compilerNode);
207
- if (!host) return host;
204
+ const checker = node.getProject().getTypeChecker();
205
+ const componentType = checker.getTypeAtLocation(node);
206
+ if (!componentType.getProperty("staticConfig")) return void 0;
207
+ const propsTypes = componentType.getCallSignatures().flatMap((signature) => signature.getParameters().slice(0, 1)).map((props) => checker.getTypeOfSymbolAtLocation(props, node));
208
+ if (propsTypes.length === 0) return void 0;
209
+ const host = {
210
+ displayName: node.getText(),
211
+ accepts: (property) => propsTypes.some((propsType) => propsType.getApparentType().getProperty(property) !== void 0)
212
+ };
208
213
  const accepts = (property) => host.accepts(property) || (shorthandSpellings.get(property)?.some((spelling) => host.accepts(spelling)) ?? false);
209
214
  if (node.getText() !== "View") return {
210
215
  ...host,
@@ -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 { resolveTamaguiHost } from \"@tamagui/language-service/host\";\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().compilerObject;\n const host = resolveTamaguiHost(\n checker,\n node.compilerNode\n );\n if (!host) return host;\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":"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"}
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":"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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.1216.1",
3
+ "version": "3.0.0-beta.1309.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,15 +26,14 @@
26
26
  "typecheck": "tsc --noEmit"
27
27
  },
28
28
  "dependencies": {
29
- "@tamagui/helpers": "3.0.0-beta.1216.1",
30
- "@tamagui/language-service": "3.0.0-beta.1216.1",
31
- "@tamagui/shorthands": "3.0.0-beta.1216.1",
32
- "@tamagui/style-grammar": "3.0.0-beta.1216.1",
29
+ "@tamagui/helpers": "3.0.0-beta.1309.1",
30
+ "@tamagui/shorthands": "3.0.0-beta.1309.1",
31
+ "@tamagui/style-grammar": "3.0.0-beta.1309.1",
33
32
  "ts-morph": "^28.0.0"
34
33
  },
35
34
  "devDependencies": {
36
- "@tamagui/build": "3.0.0-beta.1216.1",
37
- "typescript": "~6.0.3"
35
+ "@tamagui/build": "3.0.0-beta.1309.1",
36
+ "typescript": "7.0.2"
38
37
  },
39
38
  "repository": {
40
39
  "type": "git",
package/src/index.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { existsSync, mkdirSync, writeFileSync } from 'node:fs'
3
3
  import { dirname, relative, resolve } from 'node:path'
4
- import { resolveTamaguiHost } from '@tamagui/language-service/host'
5
4
  import { stylePropsTextOnly } from '@tamagui/helpers'
6
5
  import {
7
6
  IndentationText,
@@ -325,12 +324,23 @@ for (const [shorthand, longhand] of Object.entries(shorthands)) {
325
324
  }
326
325
 
327
326
  function typeAwareHost(node: Node): HostView | undefined {
328
- const checker = node.getProject().getTypeChecker().compilerObject
329
- const host = resolveTamaguiHost(
330
- checker as unknown as Parameters<typeof resolveTamaguiHost>[0],
331
- node.compilerNode as unknown as Parameters<typeof resolveTamaguiHost>[1]
332
- )
333
- if (!host) return host
327
+ const checker = node.getProject().getTypeChecker()
328
+ const componentType = checker.getTypeAtLocation(node)
329
+ if (!componentType.getProperty('staticConfig')) return undefined
330
+
331
+ const propsTypes = componentType
332
+ .getCallSignatures()
333
+ .flatMap((signature) => signature.getParameters().slice(0, 1))
334
+ .map((props) => checker.getTypeOfSymbolAtLocation(props, node))
335
+ if (propsTypes.length === 0) return undefined
336
+
337
+ const host: HostView = {
338
+ displayName: node.getText(),
339
+ accepts: (property) =>
340
+ propsTypes.some(
341
+ (propsType) => propsType.getApparentType().getProperty(property) !== undefined
342
+ ),
343
+ }
334
344
 
335
345
  // The conversion resolves an authored shorthand to its longhand before asking
336
346
  // the host, and `onlyAllowShorthands: true` omits exactly those longhands from