UNPKG

8.45 kBSource Map (JSON)View Raw
1{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport chalk from 'chalk';\nimport globby from 'globby';\n// @ts-ignore\nimport Runner from 'jscodeshift/src/Runner';\nimport multimatch from 'multimatch';\nimport path from 'path';\nimport parse from 'yargs-parser';\n\nconst jscodeshift = require.resolve('jscodeshift/bin/jscodeshift.js');\nconst transformDir = path.join(__dirname, 'transforms');\n\nconst totalStats: { [key: string]: number } = {};\n\nexport async function runAsync(argv: string[]) {\n const options = parse(argv);\n const [transform, ...paths] = options._.slice(2);\n const parser = options.parser;\n\n const transforms = await listTransformsAsync();\n if (options.help || !transform || paths.length === 0) {\n console.log(`\nUsage: expo-codemod <transform> <paths...>\n\nOptions:\n <transform> (required) name of transform to apply to files\n (see a list of transforms available below)\n <paths...> one or more paths or globs (e.g. ./src/**/*.js) of sources to transform\n files in .gitignore are ignored by default\n -h, --help print this help message\n -p, --parser <babel|flow|ts|tsx> parser to use to parse the source files\n (default: babel, ts or tsx based on the file extension)\n\nTransforms available:\n ${transforms.join('\\n ')}`);\n process.exit(1);\n return;\n }\n\n if (!transforms.includes(transform)) {\n throw new Error(\n `--transform: Transform ${transform} does not exist. Valid options: ` + transforms.join(', ')\n );\n }\n\n const allFiles = await globby(paths, { gitignore: true, ignore: ['**/node_modules/**'] });\n\n if (parser) {\n console.log(`Transforming ${allFiles.length} files using parser '${parser}'...`);\n await transformAsync({ files: allFiles, parser, transform });\n } else {\n const jsFiles = multimatch(allFiles, ['**/*.js', '**/*.jsx']);\n if (jsFiles.length) {\n console.log(`Transforming ${jsFiles.length} JS files...`);\n await transformAsync({ files: jsFiles, parser: 'babel', transform });\n }\n\n const tsFiles = multimatch(allFiles, ['**/*.ts']);\n if (tsFiles.length) {\n console.log(`Transforming ${tsFiles.length} TS files...`);\n await transformAsync({ files: tsFiles, parser: 'ts', transform });\n }\n\n const tsxFiles = multimatch(allFiles, ['**/*.tsx']);\n if (tsxFiles.length) {\n console.log(`Transforming ${tsxFiles.length} TSX files...`);\n await transformAsync({ files: tsxFiles, parser: 'tsx', transform });\n }\n }\n\n if (transform === 'sdk33-imports' || transform === 'sdk37-imports') {\n const packages = Object.keys(totalStats).sort();\n if (packages.length) {\n console.log(\n chalk.bold(\n `\\n🆕 Added imports from ${packages.length} packages. Installing packages with \\`expo install\\`...`\n )\n );\n console.log(`> expo install ${packages.join(' ')}`);\n try {\n await spawnAsync('expo', ['install', ...packages], { stdio: 'inherit' });\n } catch (error) {\n console.error(chalk.red('\\n⚠️ expo install failed.'));\n console.log(chalk.dim(error.stack));\n console.error(\n chalk.red('To finish the codemod, please install the added packages manually using:')\n );\n console.log(chalk.bold.red(`> expo install ${packages.join(' ')}`));\n process.exit(1);\n }\n }\n }\n}\n\nasync function transformAsync({\n files,\n parser,\n transform,\n}: {\n files: string[];\n parser: 'babel' | 'flow' | 'ts' | 'tsx';\n transform: string;\n}) {\n const transformFile = path.join(transformDir, `${transform}.js`);\n if (transform === 'sdk33-imports' || transform === 'sdk37-imports') {\n // Dry run to gather stats about which packages need to be installed.\n const { stats } = await Runner.run(transformFile, files, {\n dry: true,\n silent: true,\n babel: false,\n parser,\n });\n Object.keys(stats).forEach(key => {\n totalStats[key] = (totalStats[key] || 0) + stats[key];\n });\n }\n\n const args = ['--parser', parser, '--transform', transformFile, '--no-babel', ...files];\n return await spawnAsync(jscodeshift, args, { stdio: 'inherit' });\n}\n\nasync function listTransformsAsync() {\n const modules = await globby(['*.js'], { cwd: transformDir });\n return modules.map(filename => path.basename(filename, '.js'));\n}\n"]}
\No newline at end of file