UNPKG

14.3 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/index.ts"],"names":["pkgJson","require","commander","usage","option","arguments","action","cmd","printUnknownCommand","process","exit","handleError","err","logger","enable","verbose","error","message","replace","stack","log","info","chalk","dim","reset","printHelpInformation","examples","pkg","cmdName","_name","argsList","_args","map","arg","required","name","join","_alias","sourceInformation","bold","version","output","_description","optionHelp","length","formattedUsage","example","desc","cyan","concat","availableCommands","commands","suggestion","find","errorMsg","outputHelp","isDetachedCommand","command","detached","attachCommand","rest","handleAction","args","passedOptions","opts","argv","Array","from","slice","func","description","helpInformation","bind","opt","options","parse","val","default","run","setupAndRun","e","includes","disable","setVerbose","platform","scriptName","absolutePath","path","__dirname","childProcess","execFileSync","stdio","warn","red","detachedCommands","config","projectCommands","debug","CLIError","rawArgs","console","bin","resolve"],"mappings":"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","sourcesContent":["import chalk from 'chalk';\nimport childProcess from 'child_process';\nimport commander from 'commander';\nimport leven from 'leven';\nimport path from 'path';\n\nimport {Command, Config} from '@react-native-community/cli-types';\nimport {logger, CLIError} from '@react-native-community/cli-tools';\n\nimport {detachedCommands, projectCommands} from './commands';\nimport init from './commands/init/initCompat';\nimport loadConfig from './tools/config';\n\nconst pkgJson = require('../package.json');\n\ncommander\n .usage('<command> [options]')\n .option('--version', 'Print CLI version')\n .option('--verbose', 'Increase logging verbosity');\n\ncommander.arguments('<command>').action((cmd) => {\n printUnknownCommand(cmd);\n process.exit(1);\n});\n\nconst handleError = (err: Error) => {\n logger.enable();\n if (commander.verbose) {\n logger.error(err.message);\n } else {\n // Some error messages (esp. custom ones) might have `.` at the end already.\n const message = err.message.replace(/\\.$/, '');\n logger.error(`${message}.`);\n }\n if (err.stack) {\n logger.log(err.stack);\n }\n if (!commander.verbose) {\n logger.info(\n chalk.dim(\n `Run CLI with ${chalk.reset('--verbose')} ${chalk.dim(\n 'flag for more details.',\n )}`,\n ),\n );\n }\n process.exit(1);\n};\n\n/**\n * Custom printHelpInformation command inspired by internal Commander.js\n * one modified to suit our needs\n */\nfunction printHelpInformation(\n this: commander.Command,\n examples: Command['examples'],\n pkg: Command['pkg'],\n) {\n let cmdName = this._name;\n const argsList = (this._args as Array<{required: boolean; name: string}>)\n .map((arg) => (arg.required ? `<${arg.name}>` : `[${arg.name}]`))\n .join(' ');\n\n if (this._alias) {\n cmdName = `${cmdName}|${this._alias}`;\n }\n\n const sourceInformation = pkg\n ? [`${chalk.bold('Source:')} ${pkg.name}@${pkg.version}`, '']\n : [];\n\n let output = [\n chalk.bold(`react-native ${cmdName} ${argsList}`),\n this._description ? `\\n${this._description}\\n` : '',\n ...sourceInformation,\n `${chalk.bold('Options:')}`,\n this.optionHelp().replace(/^/gm, ' '),\n ];\n\n if (examples && examples.length > 0) {\n const formattedUsage = examples\n .map((example) => ` ${example.desc}: \\n ${chalk.cyan(example.cmd)}`)\n .join('\\n\\n');\n\n output = output.concat([chalk.bold('\\nExample usage:'), formattedUsage]);\n }\n\n return output.join('\\n').concat('\\n');\n}\n\nfunction printUnknownCommand(cmdName: string) {\n const availableCommands = commander.commands.map((cmd: any) => cmd._name);\n const suggestion = availableCommands.find((cmd: string) => {\n return leven(cmd, cmdName) < cmd.length * 0.4;\n });\n let errorMsg = `Unrecognized command \"${chalk.bold(cmdName)}\".`;\n if (suggestion) {\n errorMsg += ` Did you mean \"${suggestion}\"?`;\n }\n if (cmdName) {\n logger.error(errorMsg);\n logger.info(\n `Run ${chalk.bold(\n '\"react-native --help\"',\n )} to see a list of all available commands.`,\n );\n } else {\n commander.outputHelp();\n }\n}\n\n/**\n * Custom type assertion needed for the `makeCommand` conditional\n * types to be properly resolved.\n */\nconst isDetachedCommand = (\n command: Command<boolean>,\n): command is Command<true> => {\n return command.detached === true;\n};\n\n/**\n * Attaches a new command onto global `commander` instance.\n *\n * Note that this function takes additional argument of `Config` type in case\n * passed `command` needs it for its execution.\n */\nfunction attachCommand<IsDetached extends boolean>(\n command: Command<IsDetached>,\n ...rest: IsDetached extends false ? [Config] : []\n): void {\n const cmd = commander\n .command(command.name)\n .action(async function handleAction(\n this: commander.Command,\n ...args: string[]\n ) {\n const passedOptions = this.opts();\n const argv = Array.from(args).slice(0, -1);\n\n try {\n if (isDetachedCommand(command)) {\n await command.func(argv, passedOptions);\n } else {\n await command.func(argv, rest[0] as Config, passedOptions);\n }\n } catch (error) {\n handleError(error);\n }\n });\n\n if (command.description) {\n cmd.description(command.description);\n }\n\n cmd.helpInformation = printHelpInformation.bind(\n cmd,\n command.examples,\n command.pkg,\n );\n\n for (const opt of command.options || []) {\n cmd.option(\n opt.name,\n opt.description,\n opt.parse || ((val: any) => val),\n typeof opt.default === 'function'\n ? opt.default(rest[0] as Config)\n : opt.default,\n );\n }\n}\n\nasync function run() {\n try {\n await setupAndRun();\n } catch (e) {\n handleError(e);\n }\n}\n\nasync function setupAndRun() {\n // Commander is not available yet\n\n // when we run `config`, we don't want to output anything to the console. We\n // expect it to return valid JSON\n if (process.argv.includes('config')) {\n logger.disable();\n }\n\n logger.setVerbose(process.argv.includes('--verbose'));\n\n // We only have a setup script for UNIX envs currently\n if (process.platform !== 'win32') {\n const scriptName = 'setup_env.sh';\n const absolutePath = path.join(__dirname, '..', scriptName);\n\n try {\n childProcess.execFileSync(absolutePath, {stdio: 'pipe'});\n } catch (error) {\n logger.warn(\n `Failed to run environment setup script \"${scriptName}\"\\n\\n${chalk.red(\n error,\n )}`,\n );\n logger.info(\n `React Native CLI will continue to run if your local environment matches what React Native expects. If it does fail, check out \"${absolutePath}\" and adjust your environment to match it.`,\n );\n }\n }\n\n for (const command of detachedCommands) {\n attachCommand(command);\n }\n\n try {\n const config = loadConfig();\n\n logger.enable();\n\n for (const command of [...projectCommands, ...config.commands]) {\n attachCommand(command, config);\n }\n } catch (error) {\n /**\n * When there is no `package.json` found, the CLI will enter `detached` mode and a subset\n * of commands will be available. That's why we don't throw on such kind of error.\n */\n if (error.message.includes(\"We couldn't find a package.json\")) {\n logger.debug(error.message);\n logger.debug(\n 'Failed to load configuration of your project. Only a subset of commands will be available.',\n );\n } else {\n throw new CLIError(\n 'Failed to load configuration of your project.',\n error,\n );\n }\n }\n\n commander.parse(process.argv);\n\n if (commander.rawArgs.length === 2) {\n commander.outputHelp();\n }\n\n // We handle --version as a special case like this because both `commander`\n // and `yargs` append it to every command and we don't want to do that.\n // E.g. outside command `init` has --version flag and we want to preserve it.\n if (commander.args.length === 0 && commander.rawArgs.includes('--version')) {\n console.log(pkgJson.version);\n }\n}\n\nconst bin = require.resolve('./bin');\n\nexport {run, init, bin, loadConfig};\n"]}
\No newline at end of file