UNPKG

create-react-component-library

Version:
102 lines 4.24 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const lodash_defaults_1 = __importDefault(require("lodash.defaults")); const execa_1 = __importDefault(require("execa")); const listr_1 = __importDefault(require("listr")); const validate_npm_package_name_1 = __importDefault(require("validate-npm-package-name")); const fs_extra_1 = __importDefault(require("fs-extra")); const path_1 = __importDefault(require("path")); const chalk_1 = __importDefault(require("chalk")); const emojis_1 = __importDefault(require("./emojis")); // Init const getOpts = (options) => lodash_defaults_1.default({}, options, { appDir: process.cwd(), verbose: false, fromGitRepo: "https://github.com/magneh/react-component-library.git", }); // Exports async function init(options) { const opts = getOpts(options); const appName = opts.name; const appDir = path_1.default.resolve(opts.appDir, opts.name); const taskOptions = { showSubtasks: true, renderer: opts.verbose ? "default" : "silent", nonTTYRenderer: opts.verbose ? "verbose" : "silent", }; const tasks = new listr_1.default([ { title: "Prerequisite checks", task: () => new listr_1.default([ { title: "Validate project name", task: () => { const projectNameValidation = validate_npm_package_name_1.default(opts.name); if (!projectNameValidation.validForNewPackages) { const error = (projectNameValidation.errors && projectNameValidation.errors[0]) || (projectNameValidation.warnings && projectNameValidation.warnings[0]); throw new Error(`Project ${error}`); } return `${chalk_1.default.green(emojis_1.default.success)} Project name is valid`; }, }, { title: "Ensure directory does not already exists", task: () => { if (fs_extra_1.default.existsSync(appDir)) throw new Error(`Something already exists at ${chalk_1.default.cyan(appName)}`); return `${chalk_1.default.green(emojis_1.default.success)} Project directory is available`; }, }, ], taskOptions), }, { title: `Cloning project from ${chalk_1.default.cyan(opts.fromGitRepo)}`, task: async () => { try { await execa_1.default("git", [ "clone", "--quiet", "--origin=upstream", opts.fromGitRepo, appDir, ]); } catch (err) { throw new Error(`Failed to clone from git repo ${opts.fromGitRepo}. Make sure you have git (https://git-scm.com/) installed, the remote repository exists, you have the necessary permissions and internet connectivity.`); } }, }, { title: "Changing working directory", task: () => process.chdir(appDir), }, { title: "Preparing new git repository", task: async () => { try { await execa_1.default("git", ["branch", "--unset-upstream"]); } catch (err) { throw new Error("Failed to prepare git repo"); } }, }, { title: "Installing project dependencies", task: () => execa_1.default("npm", ["install"]), }, ], taskOptions); /** * Create project */ const context = await tasks.run(); return { context, tasks, appDir, appName }; } exports.default = init; //# sourceMappingURL=init.js.map