UNPKG

create-react-native-library

Version:
114 lines (111 loc) 5.13 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 _constants = require("./constants"); 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 _local = require("./utils/local"); var _packageManager = require("./utils/packageManager"); var _prompt = require("./utils/prompt"); var _resolveNpmPackageVersion = require("./utils/resolveNpmPackageVersion"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } void _yargs.default.command('$0 [name]', 'create a react native library', _input.acceptedArgs, 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', _constants.FALLBACK_BOB_VERSION); const nitroModulesVersionPromise = (0, _resolveNpmPackageVersion.resolveNpmPackageVersion)('react-native-nitro-modules', _constants.FALLBACK_NITRO_MODULES_VERSION); await (0, _assert.assertNpxExists)(); const questions = await (0, _input.createQuestions)(argv); const answers = await (0, _prompt.prompt)(questions, argv, { interactive: argv.interactive }); const bobVersion = await bobVersionPromise; const nitroModulesVersion = answers.type === 'nitro-module' || answers.type === 'nitro-view' ? await nitroModulesVersionPromise : undefined; const config = (0, _template.generateTemplateConfiguration)({ versions: { bob: bobVersion, nitro: nitroModulesVersion }, basename: _path.default.basename(answers.name ?? answers.directory), answers }); const folder = _path.default.resolve(process.cwd(), answers.directory); await _fsExtra.default.mkdirp(folder); if (answers.reactNativeVersion != null && answers.reactNativeVersion !== _constants.SUPPORTED_REACT_NATIVE_VERSION) { (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)({ root: 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); } 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 }); const printSuccessMessage = () => spinner.succeed(`Project created successfully at ${_kleur.default.yellow(_path.default.relative(process.cwd(), folder))}!\n`); if (answers.local) { const packageManager = await (0, _packageManager.determinePackageManager)(); let addedNitro = false; if (config.project.moduleConfig === 'nitro-modules') { addedNitro = await (0, _local.addNitroDependencyToLocalLibrary)(config); } const linkedLocalLibrary = await (0, _local.linkLocalLibrary)(config, folder, packageManager); printSuccessMessage(); (0, _inform.printLocalLibNextSteps)({ config, packageManager, linkedLocalLibrary, addedNitro, folder }); } else { spinner.text = 'Initializing git repository'; try { const abortController = new AbortController(); // Creating git repository can get stuck in some cases, // e.g. if git asks for ssh passphrase. // We abort it after a timeout so that this doesn't hang forever. await Promise.race([(0, _initialCommit.createInitialGitCommit)(folder, abortController.signal), new Promise((_resolve, reject) => { setTimeout(() => { const error = new Error('Creating git repository took too long'); abortController.abort(error.message); reject(error); }, 5000); })]); } catch (error) { spinner.warn('Failed to create git repository'); } printSuccessMessage(); (0, _inform.printNonLocalLibNextSteps)(config); } } //# sourceMappingURL=index.js.map