dev-toolkit
Version:
Universal Development Toolkit for React Veterans
139 lines (115 loc) • 4.95 kB
JavaScript
;
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
});
});
});