UNPKG

dev-toolkit

Version:

Universal Development Toolkit for React Veterans

139 lines (115 loc) 4.95 kB
"use strict"; var _fs = require("fs"); var _fsExtra = require("fs-extra"); var _chalk = require("chalk"); var _path = _interopRequireDefault(require("path")); var _crossSpawn = _interopRequireDefault(require("cross-spawn")); var _projectSettings = require("../webpack/projectSettings"); var _utilities = require("../utilities"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } /* eslint-disable no-underscore-dangle */ var template = global.__devToolkitCommandOptions.template || ''; var projectName = global.__devToolkitCommandOptions.projectName || 'my_app'; var skipComments = global.__devToolkitCommandOptions.skipComments || false; var getTemplatesList = function getTemplatesList(_ref) { var folder = _ref.folder; var onlyDirectories = function onlyDirectories(file) { return (0, _fs.statSync)(_path.default.join(folder, file)).isDirectory(); }; return (0, _fs.readdirSync)(_projectSettings.generatedTemplates).filter(onlyDirectories); }; var templatesList = getTemplatesList({ folder: _projectSettings.generatedTemplates }); var templateExists = templatesList.indexOf(template) > -1; var templateName = templateExists ? template : _projectSettings.defaultTemplate; var isDefaultTemplate = templateName === _projectSettings.defaultTemplate; if (template && !templateExists) { (0, _utilities.log)({ type: 'warning', message: "template files for '".concat(template, "' don't exist.") }); (0, _utilities.log)({ message: 'You can use one of the following templates:' }); templatesList.forEach(function (name) { return (0, _utilities.log)({ message: "\u2022 ".concat(name) }); }); (0, _utilities.log)({ message: "\nProject will be Initialised using default template files (".concat(_projectSettings.defaultTemplate, ")."), useSeparator: true }); } var inputFolder = _path.default.resolve(skipComments ? _projectSettings.generatedTemplatesWithoutComments : _projectSettings.generatedTemplates, templateName); var projectFolder = _path.default.resolve(process.cwd(), projectName); (0, _fsExtra.ensureDirSync)(projectFolder); (0, _fsExtra.copySync)(inputFolder, projectFolder); var pkgPath = _path.default.resolve(projectFolder, 'package.json'); Promise.resolve().then(function () { return require("".concat(pkgPath)); }).then(function (pkg) { // Add name to generated project (0, _fsExtra.writeJson)(pkgPath, _objectSpread({}, pkg, { name: projectName, description: projectName }), { spaces: 2 }).then(function () { (0, _utilities.log)({ message: "Created project using ".concat((0, _chalk.white)(templateName), " template in:") }); (0, _utilities.log)({ message: "".concat(projectFolder, "\n") }); if (isDefaultTemplate) { _utilities.spinner.start({ message: "Installing NPM Dependencies for ".concat((0, _chalk.white)(projectName)) }); } else { (0, _utilities.log)({ message: "Installing NPM Dependencies for ".concat((0, _chalk.white)(projectName), "\u2026\n") }); } var spawnOptions = isDefaultTemplate ? { cwd: projectFolder } : { cwd: projectFolder, detached: true, stdio: 'inherit' }; (0, _crossSpawn.default)('npm', ['install'], spawnOptions).on('close', function (code) { if (isDefaultTemplate) { _utilities.spinner.stop(); } else { (0, _utilities.log)({ message: ' ' }); } if (code === 0) { (0, _utilities.log)({ type: 'success', message: "Dependencies for ".concat(projectName, " have been installed.") }); (0, _utilities.log)({ message: "Get started by running `".concat((0, _chalk.white)("cd ".concat(projectName, " && npm run dev")), "`"), useSeparator: true }); } else { (0, _utilities.log)({ type: 'warning', message: "Failed to install Dependencies for ".concat(projectName, ".") }); } }); }).catch(function (error) { (0, _utilities.log)({ type: 'warning', message: "Failed create project with name ".concat(projectName, "."), error: error }); }); });