UNPKG

create-react-native-library

Version:
145 lines (143 loc) 5.99 kB
"use strict"; var _fsExtra = _interopRequireDefault(require("fs-extra")); var _kleur = _interopRequireDefault(require("kleur")); var _ora = _interopRequireDefault(require("ora")); var _path = _interopRequireDefault(require("path")); var _yargs = _interopRequireDefault(require("yargs")); var _addCodegenBuildScript = require("./exampleApp/addCodegenBuildScript"); var _dependencies = require("./exampleApp/dependencies"); var _generateExampleApp = _interopRequireDefault(require("./exampleApp/generateExampleApp")); var _inform = require("./inform"); var _input = require("./input"); var _template = require("./template"); var _assert = require("./utils/assert"); var _initialCommit = require("./utils/initialCommit"); var _prompt = require("./utils/prompt"); var _resolveNpmPackageVersion = require("./utils/resolveNpmPackageVersion"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } const FALLBACK_BOB_VERSION = '0.38.3'; const FALLBACK_NITRO_MODULES_VERSION = '0.22.1'; _yargs.default.command('$0 [name]', 'create a react native library', _input.acceptedArgs, // @ts-expect-error Some types are still incompatible create).demandCommand().recommendCommands().fail(_inform.printErrorHelp).parserConfiguration({ // don't pass kebab-case args to handler. 'strip-dashed': true }).strict().argv; async function create(_argv) { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { _, $0, ...argv } = _argv; // Prefetch bob version in background while asking questions const bobVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-builder-bob', FALLBACK_BOB_VERSION); const nitroModulesVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-nitro-modules', FALLBACK_NITRO_MODULES_VERSION); const local = await promptLocalLibrary(argv); const folder = await promptPath(argv, local); await (0, _assert.assertNpxExists)(); const basename = _path.default.basename(folder); const questions = await (0, _input.createQuestions)({ basename, local }); (0, _assert.assertUserInput)(questions, argv); const promptAnswers = await (0, _prompt.prompt)(questions, argv); const answers = { ...promptAnswers, local }; (0, _assert.assertUserInput)(questions, answers); const bobVersion = await bobVersionPromise; const nitroModulesVersion = answers.type === 'nitro-module' ? await nitroModulesVersionPromise : undefined; const config = (0, _template.generateTemplateConfiguration)({ versions: { bob: bobVersion, nitroModules: nitroModulesVersion, // Nitro codegen's version is always the same as nitro modules version. nitroCodegen: nitroModulesVersion }, basename, answers }); await _fsExtra.default.mkdirp(folder); if (answers.reactNativeVersion != null) { (0, _inform.printUsedRNVersion)(answers.reactNativeVersion, config); } const spinner = (0, _ora.default)().start(); if (config.example !== 'none') { spinner.text = 'Generating example app'; await (0, _generateExampleApp.default)({ destination: folder, reactNativeVersion: answers.reactNativeVersion, config }); } spinner.text = 'Copying files'; await (0, _template.applyTemplates)(answers, config, folder); const rootPackageJson = await _fsExtra.default.readJson(_path.default.join(folder, 'package.json')); if (config.example !== 'none') { await (0, _dependencies.alignDependencyVersionsWithExampleApp)(rootPackageJson, folder, config); } if (config.example === 'vanilla' && (config.project.moduleConfig === 'turbo-modules' || config.project.viewConfig === 'fabric-view')) { (0, _addCodegenBuildScript.addCodegenBuildScript)(folder); } const libraryMetadata = (0, _input.createMetadata)(answers); rootPackageJson['create-react-native-library'] = libraryMetadata; await _fsExtra.default.writeJson(_path.default.join(folder, 'package.json'), rootPackageJson, { spaces: 2 }); if (!local) { await (0, _initialCommit.createInitialGitCommit)(folder); } spinner.succeed(`Project created successfully at ${_kleur.default.yellow(_path.default.relative(process.cwd(), folder))}!\n`); await (0, _inform.printNextSteps)(local, folder, config); } async function promptLocalLibrary(argv) { let local = false; if (typeof argv.local === 'boolean') { local = argv.local; } else { const hasPackageJson = await _fsExtra.default.pathExists(_path.default.join(process.cwd(), 'package.json')); if (hasPackageJson) { // If we're under a project with package.json, ask the user if they want to create a local library const answers = await (0, _prompt.prompt)({ type: 'confirm', name: 'local', message: `Looks like you're under a project folder. Do you want to create a local library?`, initial: true }); local = answers.local; } } return local; } async function promptPath(argv, local) { let folder; if (argv.name && !local) { folder = _path.default.join(process.cwd(), argv.name); } else { const answers = await (0, _prompt.prompt)({ type: 'text', name: 'folder', message: `Where do you want to create the library?`, initial: local && argv.name && !argv.name.includes('/') ? `modules/${argv.name}` : argv.name, validate: input => { if (!input) { return 'Cannot be empty'; } if (_fsExtra.default.pathExistsSync(_path.default.join(process.cwd(), input))) { return 'Folder already exists'; } return true; } }); folder = _path.default.join(process.cwd(), answers.folder); } if (await _fsExtra.default.pathExists(folder)) { console.log(`A folder already exists at ${_kleur.default.blue(folder)}! Please specify another folder name or delete the existing one.`); process.exit(1); } return folder; } //# sourceMappingURL=index.js.map