amis-rpc-design/node_modules/jscodeshift/bin/jscodeshift.js

177 lines
4.8 KiB
JavaScript
Raw Normal View History

2023-10-07 19:42:30 +08:00
#!/usr/bin/env node
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
const Runner = require('../src/Runner.js');
const fs = require('fs');
const path = require('path');
const pkg = require('../package.json');
const parser = require('../src/argsParser')
.options({
transform: {
display_index: 15,
abbr: 't',
default: './transform.js',
help: 'path to the transform file. Can be either a local path or url',
metavar: 'FILE',
required: true
},
cpus: {
display_index: 1,
abbr: 'c',
help: 'start at most N child processes to process source files',
defaultHelp: 'max(all - 1, 1)',
metavar: 'N',
process: Number,
},
verbose: {
display_index: 16,
abbr: 'v',
choices: [0, 1, 2],
default: 0,
help: 'show more information about the transform process',
metavar: 'N',
process: Number,
},
dry: {
display_index: 2,
abbr: 'd',
flag: true,
default: false,
help: 'dry run (no changes are made to files)'
},
print: {
display_index: 11,
abbr: 'p',
flag: true,
default: false,
help: 'print transformed files to stdout, useful for development'
},
babel: {
display_index: 0,
flag: true,
default: true,
help: 'apply babeljs to the transform file'
},
extensions: {
display_index: 3,
default: 'js',
help: 'transform files with these file extensions (comma separated list)',
metavar: 'EXT',
},
ignorePattern: {
display_index: 7,
full: 'ignore-pattern',
list: true,
help: 'ignore files that match a provided glob expression',
metavar: 'GLOB',
},
ignoreConfig: {
display_index: 6,
full: 'ignore-config',
list: true,
help: 'ignore files if they match patterns sourced from a configuration file (e.g. a .gitignore)',
metavar: 'FILE'
},
gitignore: {
display_index: 8,
flag: true,
default: false,
help: 'adds entries the current directory\'s .gitignore file',
},
runInBand: {
display_index: 12,
flag: true,
default: false,
full: 'run-in-band',
help: 'run serially in the current process'
},
silent: {
display_index: 13,
abbr: 's',
flag: true,
default: false,
help: 'do not write to stdout or stderr'
},
parser: {
display_index: 9,
choices: ['babel', 'babylon', 'flow', 'ts', 'tsx'],
default: 'babel',
help: 'the parser to use for parsing the source files'
},
parserConfig: {
display_index: 10,
full: 'parser-config',
help: 'path to a JSON file containing a custom parser configuration for flow or babylon',
metavar: 'FILE',
process: file => JSON.parse(fs.readFileSync(file)),
},
failOnError: {
display_index: 4,
flag: true,
help: 'Return a non-zero code when there are errors',
full: 'fail-on-error',
default: false,
},
version: {
display_index: 17,
help: 'print version and exit',
callback: function() {
const requirePackage = require('../utils/requirePackage');
return [
`jscodeshift: ${pkg.version}`,
` - babel: ${require('babel-core').version}`,
` - babylon: ${requirePackage('@babel/parser').version}`,
` - flow: ${requirePackage('flow-parser').version}`,
` - recast: ${requirePackage('recast').version}\n`,
].join('\n');
},
},
stdin: {
display_index: 14,
help: 'read file/directory list from stdin',
flag: true,
default: false,
},
});
let options, positionalArguments;
try {
({options, positionalArguments} = parser.parse());
if (positionalArguments.length === 0 && !options.stdin) {
process.stderr.write(
'Error: You have to provide at least one file/directory to transform.' +
'\n\n---\n\n' +
parser.getHelpText()
);
process.exit(1);
}
} catch(e) {
const exitCode = e.exitCode === undefined ? 1 : e.exitCode;
(exitCode ? process.stderr : process.stdout).write(e.message);
process.exit(exitCode);
}
function run(paths, options) {
Runner.run(
/^https?/.test(options.transform) ? options.transform : path.resolve(options.transform),
paths,
options
);
}
if (options.stdin) {
let buffer = '';
process.stdin.on('data', data => buffer += data);
process.stdin.on('end', () => run(buffer.split('\n'), options));
} else {
run(positionalArguments, options);
}