UNPKG

create-react-native-library

Version:
125 lines (122 loc) 5.33 kB
"use strict"; var _package = _interopRequireDefault(require("../package.json")); var _fsExtra = _interopRequireDefault(require("fs-extra")); var _kleur = _interopRequireDefault(require("kleur")); var _ora = _interopRequireDefault(require("ora")); var _path = _interopRequireDefault(require("path")); var _constants = require("./constants"); var _dependencies = require("./exampleApp/dependencies"); var _generateExampleApp = _interopRequireDefault(require("./exampleApp/generateExampleApp")); var _inform = require("./inform"); var _prompt = require("./prompt"); var _template = require("./template"); var _assert = require("./utils/assert"); var _configureTools = require("./utils/configureTools"); var _initialCommit = require("./utils/initialCommit"); var _local = require("./utils/local"); var _packageManager = require("./utils/packageManager"); var _resolveNpmPackageVersion = require("./utils/resolveNpmPackageVersion"); var _createMetadata = require("./utils/createMetadata"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } async function create() { // 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 answers = await _prompt.prompt.show({ name: _package.default.name, version: _package.default.version, description: _package.default.description }); if (answers == null) { process.exit(0); } console.log(''); // Empty new line after prompts 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 != null) { 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 != null) { await (0, _dependencies.alignDependencyVersionsWithExampleApp)(rootPackageJson, folder); } if (!answers.local) { spinner.text = 'Configuring tools'; await (0, _configureTools.configureTools)({ tools: answers.tools, config, root: folder, packageJson: rootPackageJson }); } const libraryMetadata = (0, _createMetadata.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); } } create().catch(e => { console.log('\n'); console.log(_kleur.default.red('× An error occurred while creating the project.\n')); console.error(e); process.exit(1); }); //# sourceMappingURL=index.js.map