realm-object-server
Version:
96 lines • 4.68 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const path = require("path");
const fs = require("fs-extra");
const colors = require("colors");
const child_process_1 = require("child_process");
const cli_spinner_1 = require("cli-spinner");
const ProcessUtil_1 = require("./shared/ProcessUtil");
function runScript(script, cwd) {
return new Promise((resolve, reject) => {
const child = child_process_1.exec(script, { cwd: cwd });
let stderr = "";
child.stderr.on("data", (data) => {
stderr += data.toString();
});
let stdout = "";
child.stdout.on("data", (data) => {
stdout += data.toString();
});
child.once("exit", (code) => {
child.stdout.removeAllListeners();
child.stderr.removeAllListeners();
if (code !== 0) {
reject(stderr.trim());
}
else {
resolve(stdout.trim());
}
});
});
}
function initProject(projectName, rosVersion, templateType = "ts") {
return __awaiter(this, void 0, void 0, function* () {
let spinner;
try {
const parsed = path.parse(projectName);
const name = parsed.name;
const pathToProject = path.join(process.cwd(), parsed.name);
if ((yield fs.pathExists(pathToProject)) && (yield fs.readdir(pathToProject)).length > 0) {
ProcessUtil_1.ProcessUtil.terminate({ success: false, message: `Oh no! The directory ${pathToProject} already exists or is not empty.` });
return;
}
console.log(colors.green(`Creating '${name}'.`));
let templateProjectDir = path.join(__dirname, "../templates/js/");
if (templateType === "ts") {
templateProjectDir = path.join(__dirname, "../templates/ts/");
}
spinner = new cli_spinner_1.Spinner(`Generating your project in ${pathToProject}`);
spinner.setSpinnerString(9);
spinner.start();
yield fs.mkdirp(pathToProject);
yield fs.copy(templateProjectDir, pathToProject, { recursive: true });
spinner.stop(false);
let versionWarning;
spinner = new cli_spinner_1.Spinner("Installing dependencies... A little patience is good.");
spinner.setSpinnerString(12);
spinner.start();
if (rosVersion !== "latest") {
const searchScript = "npm show realm-object-server@latest version";
const latestVersion = yield runScript(searchScript, pathToProject);
if (rosVersion !== latestVersion) {
versionWarning = `The project was initialized with ROS version ${rosVersion} which is older ` +
`than the current version (${latestVersion}). We recommend that you upgrade your ` +
"global ROS install by running 'npm i realm-object-server -g' or pass --latest " +
"as an argument to your 'ros init' call.";
}
}
const installScript = `npm install --save-exact realm-object-server@${rosVersion} --no-shrinkwrap`;
const generalInstall = "npm install --only=dev --no-shrinkwrap";
yield runScript(installScript, pathToProject);
yield runScript(generalInstall, pathToProject);
spinner.stop(false);
const prompt = projectName === "." ? "" : `cd into '${name}' and `;
console.log(colors.green(`\nCongrats! Now ${prompt}run 'npm start'.`));
if (versionWarning) {
console.log(colors.gray(versionWarning));
}
}
catch (err) {
if (spinner && spinner.isSpinning()) {
spinner.stop(false);
}
console.error(colors.red("\nAn error has occurred while creating the project:\n" + err));
}
});
}
exports.initProject = initProject;
//# sourceMappingURL=project.js.map