@artegha/create-node-server
Version:
Create Node servers with no build configuration.
192 lines • 8.26 kB
JavaScript
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
;