create-react-native-library
Version:
CLI to scaffold React Native libraries
125 lines (122 loc) • 5.33 kB
JavaScript
;
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