UNPKG

realm-object-server

Version:

Realm Object Server

96 lines 4.68 kB
"use strict"; 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