UNPKG

@artegha/create-node-server

Version:

Create Node servers with no build configuration.

192 lines 8.26 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var chalk_1 = __importDefault(require("chalk")); var fs_extra_1 = __importDefault(require("fs-extra")); var os_1 = __importDefault(require("os")); var path_1 = __importDefault(require("path")); var cross_spawn_1 = __importDefault(require("cross-spawn")); var tools_1 = __importDefault(require("../utils/tools")); var package_json_1 = __importDefault(require("../package.json")); exports.default = (function (server) { var appPackage = package_json_1.default; server.useYarn = fs_extra_1.default.existsSync(path_1.default.join(server.root, 'yarn.lock')); if (!server.templateName) { console.log(''); console.error("A template was not provided. Using default template " + chalk_1.default.cyan('cns-template-typescript-express') + "."); } var templatePath = path_1.default.dirname(require.resolve(server.templateName + "/package.json", { paths: [server.root] })); var templateJsonPath = path_1.default.join(templatePath, 'template.json'); var templateJson = {}; if (fs_extra_1.default.existsSync(templateJsonPath)) { templateJson = require(templateJsonPath); } var templatePackage = templateJson.package || {}; if (templateJson.dependencies) { templatePackage.dependencies = templateJson.dependencies; } if (templateJson.scripts) { templatePackage.scripts = templateJson.scripts; } if (templateJson.devDependencies) { templatePackage.devDependencies = templateJson.devDependencies; } var templatePackageBlacklist = [ 'name', 'version', 'description', 'keywords', 'bugs', 'license', 'author', 'contributors', 'files', 'browser', 'bin', 'man', 'directories', 'repository', 'peerDependencies', 'bundledDependencies', 'optionalDependencies', 'engineStrict', 'os', 'cpu', 'preferGlobal', 'private', 'publishConfig', ]; var templatePackageToMerge = ['dependencies', 'scripts', 'devDependencies']; var templatePackageToReplace = Object.keys(templatePackage).filter(function (key) { return !templatePackageBlacklist.includes(key) && !templatePackageToMerge.includes(key); }); appPackage.dependencies = appPackage.dependencies || {}; appPackage.scripts = templatePackage.scripts || {}; appPackage.devDependencies = appPackage.devDependencies || {}; if (server.useYarn) { appPackage.scripts = Object.entries(appPackage.scripts).reduce(function (acc, _a) { var _b; var key = _a[0], value = _a[1]; return (__assign(__assign({}, acc), (_b = {}, _b[key] = value.replace(/(npm run |npm )/, 'yarn '), _b))); }, {}); } templatePackageToReplace.forEach(function (key) { appPackage[key] = templatePackage[key]; }); fs_extra_1.default.writeFileSync(path_1.default.join(server.root, 'package.json'), JSON.stringify(appPackage, null, 2) + os_1.default.EOL); var readmeExists = fs_extra_1.default.existsSync(path_1.default.join(server.root, 'README.md')); if (readmeExists) { fs_extra_1.default.renameSync(path_1.default.join(server.root, 'README.md'), path_1.default.join(server.root, 'README.old.md')); } var templateDir = path_1.default.join(templatePath, 'template'); if (fs_extra_1.default.existsSync(templateDir)) { fs_extra_1.default.copySync(templateDir, server.root); } else { throw new Error("Could not locate supplied template: " + chalk_1.default.green(templateDir)); } if (server.useYarn) { try { var readme = fs_extra_1.default.readFileSync(path_1.default.join(server.root, 'README.md'), 'utf8'); fs_extra_1.default.writeFileSync(path_1.default.join(server.root, 'README.md'), readme.replace(/(npm run |npm )/g, 'yarn '), 'utf8'); } catch (err) { throw new Error(err); } } var gitignoreExists = fs_extra_1.default.existsSync(path_1.default.join(server.root, '.gitignore')); if (gitignoreExists) { var data = fs_extra_1.default.readFileSync(path_1.default.join(server.root, 'gitignore')); fs_extra_1.default.appendFileSync(path_1.default.join(server.root, '.gitignore'), data); fs_extra_1.default.unlinkSync(path_1.default.join(server.root, '.npmignore')); } else { fs_extra_1.default.moveSync(path_1.default.join(server.root, '.npmignore'), path_1.default.join(server.root, '.gitignore'), []); } var initializedGit = false; var command; var remove; var args; if (server.useYarn) { command = 'yarnpkg'; remove = 'remove'; args = ['add']; } else { command = 'npm'; remove = 'uninstall'; args = ['install', '--save', server.verbose && '--verbose'].filter(function (e) { return e; }); } var dependenciesToInstall = Object.entries(__assign(__assign({}, templatePackage.dependencies), templatePackage.devDependencies)); if (dependenciesToInstall.length) { args = args.concat(dependenciesToInstall.map(function (_a) { var dependency = _a[0], version = _a[1]; return dependency + "@" + version; })); } if (server.templateName && args.length > 1) { console.log(); console.log("Installing template dependencies using " + command + "..."); var proc_1 = cross_spawn_1.default.sync(command, args, { stdio: 'inherit' }); if (proc_1.status !== 0) { throw new Error("`" + command + " " + args.join(' ') + "` failed"); } } console.log("Removing template package using " + command + "..."); console.log(); var proc = cross_spawn_1.default.sync(command, [remove, server.templateName], { stdio: 'inherit', }); if (proc.status !== 0) { throw new Error("`" + command + " " + args.join(' ') + "` failed"); } if (initializedGit && tools_1.default.tryGitCommit(server.root)) { console.log(); console.log('Created git commit.'); } var cdpath; if (server.originalRoot && path_1.default.join(server.originalRoot, server.name) === server.root) { cdpath = server.name; } else { cdpath = server.root; } var displayedCommand = server.useYarn ? 'yarn' : 'npm'; console.log(); console.log("Success! Created " + chalk_1.default.cyan("" + server.name) + " at " + chalk_1.default.cyan("" + server.root) + " "); console.log('Inside that directory, you can run several commands:'); console.log(); console.log(chalk_1.default.cyan(" " + displayedCommand + " start")); console.log(' Starts the development server.'); console.log(); console.log(chalk_1.default.cyan(" " + displayedCommand + " " + (server.useYarn ? '' : 'run ') + "build")); console.log(' Bundles the server for production.'); console.log(); console.log(chalk_1.default.cyan(" " + displayedCommand + " " + (server.useYarn ? '' : 'run ') + "prod")); console.log(' Bundles and starts the server for production.'); console.log(); console.log('We suggest that you begin by typing:'); console.log(); console.log(chalk_1.default.cyan(' cd'), cdpath); console.log(" " + chalk_1.default.cyan(displayedCommand + " start")); if (readmeExists) { console.log(); console.log(chalk_1.default.yellow('You had a `README.md` file, we renamed it to `README.old.md`')); } console.log(); console.log('Happy hacking!'); }); //# sourceMappingURL=init.js.map