UNPKG

projen

Version:

CDK for software projects

124 lines • 12.2 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.CliError = void 0; exports.installPackage = installPackage; exports.renderInstallArgs = renderInstallArgs; exports.findJsiiFilePath = findJsiiFilePath; const fs = __importStar(require("fs")); const path = __importStar(require("path")); const logging = __importStar(require("../logging")); const exec_1 = require("../util/exec"); /** * Installs the npm module (through `npm install`) to node_modules under `projectDir`. * @param spec The npm package spec (e.g. `foo@^1.2` or `foo@/var/folders/8k/qcw0ls5pv_ph0000gn/T/projen-RYurCw/pkg.tgz`) * @returns The installed package name (e.g. `@foo/bar`) */ async function installPackage(baseDir, spec, isProjen = false) { const packageJsonPath = path.join(baseDir, "package.json"); const packageJsonExisted = fs.existsSync(packageJsonPath); if (!packageJsonExisted) { // Make sure we have a package.json to read from later await exec_1.npm.run(["init", "--yes"], { cwd: baseDir }); } logging.info(`installing module ${spec}...`); await exec_1.npm.run(renderInstallArgs(baseDir, spec), { cwd: baseDir }); // Get the true installed package name const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8")); const packageName = Object.keys(packageJson.devDependencies).find((name) => isProjen ? name === "projen" : name !== "projen"); if (!packageName) { throw new Error(`Unable to resolve package name from spec ${spec}`); } // if package.json did not exist before calling `npm install`, we should remove it // so we can start off clean. if (!packageJsonExisted) { fs.rmSync(packageJsonPath, { force: true, recursive: true }); } return packageName; } /** * Render the arguments to install an npm package (the args following `npm`). * * Engine checks are ignored at this point so that the module can be installed * regardless of the environment. This was needed to unblock the upgrade of the * minimum node version of projen, but also okay generally because engine checks * will be performed later and for all eternity. * * @param dir Base directory * @param module The module to install (e.g. foo@^1.2) * @returns The arguments for `npm` (e.g. ["install", ..., "foo@^1.2"]) */ function renderInstallArgs(dir, module) { // --save is needed to override any global save: false config // --save-dev to install as dev dependency // --include=dev to force saving the dependencies with NODE_ENV=production return [ "install", "--save", "--save-dev", "-f", "--no-package-lock", "--include=dev", `--prefix=${dir}`, module, ]; } function findJsiiFilePath(baseDir, moduleName) { try { return path.dirname(require.resolve(`${moduleName}/.jsii`, { paths: [baseDir], })); } catch (error) { if (error instanceof Error && "code" in error && ["MODULE_NOT_FOUND", "ERR_PACKAGE_PATH_NOT_EXPORTED"].includes(error.code)) { // the provided module is not a jsii module return undefined; } else { // unexpected error, throw it throw error; } } } class CliError extends Error { constructor(...lines) { super(lines.join("\n")); this.name = "CliError"; } } exports.CliError = CliError; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQSx3Q0FpQ0M7QUFjRCw4Q0FjQztBQUVELDRDQXlCQztBQWxHRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLG9EQUFzQztBQUN0Qyx1Q0FBbUM7QUFFbkM7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxjQUFjLENBQ2xDLE9BQWUsRUFDZixJQUFZLEVBQ1osUUFBUSxHQUFHLEtBQUs7SUFFaEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDM0QsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRTFELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hCLHNEQUFzRDtRQUN0RCxNQUFNLFVBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLFVBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFbEUsc0NBQXNDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUN6RSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQ2pELENBQUM7SUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsa0ZBQWtGO0lBQ2xGLDZCQUE2QjtJQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4QixFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxNQUFjO0lBQzNELDZEQUE2RDtJQUM3RCwwQ0FBMEM7SUFDMUMsMEVBQTBFO0lBQzFFLE9BQU87UUFDTCxTQUFTO1FBQ1QsUUFBUTtRQUNSLFlBQVk7UUFDWixJQUFJO1FBQ0osbUJBQW1CO1FBQ25CLGVBQWU7UUFDZixZQUFZLEdBQUcsRUFBRTtRQUNqQixNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixnQkFBZ0IsQ0FDOUIsT0FBZSxFQUNmLFVBQWtCO0lBRWxCLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FDakIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFVBQVUsUUFBUSxFQUFFO1lBQ3JDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQWMsRUFBRSxDQUFDO1FBQ3hCLElBQ0UsS0FBSyxZQUFZLEtBQUs7WUFDdEIsTUFBTSxJQUFJLEtBQUs7WUFDZixDQUFDLGtCQUFrQixFQUFFLCtCQUErQixDQUFDLENBQUMsUUFBUSxDQUM1RCxLQUFLLENBQUMsSUFBVyxDQUNsQixFQUNELENBQUM7WUFDRCwyQ0FBMkM7WUFDM0MsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTiw2QkFBNkI7WUFDN0IsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFhLFFBQVMsU0FBUSxLQUFLO0lBQ2pDLFlBQVksR0FBRyxLQUFlO1FBQzVCLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBTEQsNEJBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB7IG5wbSB9IGZyb20gXCIuLi91dGlsL2V4ZWNcIjtcblxuLyoqXG4gKiBJbnN0YWxscyB0aGUgbnBtIG1vZHVsZSAodGhyb3VnaCBgbnBtIGluc3RhbGxgKSB0byBub2RlX21vZHVsZXMgdW5kZXIgYHByb2plY3REaXJgLlxuICogQHBhcmFtIHNwZWMgVGhlIG5wbSBwYWNrYWdlIHNwZWMgKGUuZy4gYGZvb0BeMS4yYCBvciBgZm9vQC92YXIvZm9sZGVycy84ay9xY3cwbHM1cHZfcGgwMDAwZ24vVC9wcm9qZW4tUll1ckN3L3BrZy50Z3pgKVxuICogQHJldHVybnMgVGhlIGluc3RhbGxlZCBwYWNrYWdlIG5hbWUgKGUuZy4gYEBmb28vYmFyYClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQYWNrYWdlKFxuICBiYXNlRGlyOiBzdHJpbmcsXG4gIHNwZWM6IHN0cmluZyxcbiAgaXNQcm9qZW4gPSBmYWxzZSxcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihiYXNlRGlyLCBcInBhY2thZ2UuanNvblwiKTtcbiAgY29uc3QgcGFja2FnZUpzb25FeGlzdGVkID0gZnMuZXhpc3RzU3luYyhwYWNrYWdlSnNvblBhdGgpO1xuXG4gIGlmICghcGFja2FnZUpzb25FeGlzdGVkKSB7XG4gICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYSBwYWNrYWdlLmpzb24gdG8gcmVhZCBmcm9tIGxhdGVyXG4gICAgYXdhaXQgbnBtLnJ1bihbXCJpbml0XCIsIFwiLS15ZXNcIl0sIHsgY3dkOiBiYXNlRGlyIH0pO1xuICB9XG5cbiAgbG9nZ2luZy5pbmZvKGBpbnN0YWxsaW5nIG1vZHVsZSAke3NwZWN9Li4uYCk7XG4gIGF3YWl0IG5wbS5ydW4ocmVuZGVySW5zdGFsbEFyZ3MoYmFzZURpciwgc3BlYyksIHsgY3dkOiBiYXNlRGlyIH0pO1xuXG4gIC8vIEdldCB0aGUgdHJ1ZSBpbnN0YWxsZWQgcGFja2FnZSBuYW1lXG4gIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCBcInV0Zi04XCIpKTtcbiAgY29uc3QgcGFja2FnZU5hbWUgPSBPYmplY3Qua2V5cyhwYWNrYWdlSnNvbi5kZXZEZXBlbmRlbmNpZXMpLmZpbmQoKG5hbWUpID0+XG4gICAgaXNQcm9qZW4gPyBuYW1lID09PSBcInByb2plblwiIDogbmFtZSAhPT0gXCJwcm9qZW5cIixcbiAgKTtcblxuICBpZiAoIXBhY2thZ2VOYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gcmVzb2x2ZSBwYWNrYWdlIG5hbWUgZnJvbSBzcGVjICR7c3BlY31gKTtcbiAgfVxuXG4gIC8vIGlmIHBhY2thZ2UuanNvbiBkaWQgbm90IGV4aXN0IGJlZm9yZSBjYWxsaW5nIGBucG0gaW5zdGFsbGAsIHdlIHNob3VsZCByZW1vdmUgaXRcbiAgLy8gc28gd2UgY2FuIHN0YXJ0IG9mZiBjbGVhbi5cbiAgaWYgKCFwYWNrYWdlSnNvbkV4aXN0ZWQpIHtcbiAgICBmcy5ybVN5bmMocGFja2FnZUpzb25QYXRoLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH1cblxuICByZXR1cm4gcGFja2FnZU5hbWU7XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBhcmd1bWVudHMgdG8gaW5zdGFsbCBhbiBucG0gcGFja2FnZSAodGhlIGFyZ3MgZm9sbG93aW5nIGBucG1gKS5cbiAqXG4gKiBFbmdpbmUgY2hlY2tzIGFyZSBpZ25vcmVkIGF0IHRoaXMgcG9pbnQgc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBiZSBpbnN0YWxsZWRcbiAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGVudmlyb25tZW50LiBUaGlzIHdhcyBuZWVkZWQgdG8gdW5ibG9jayB0aGUgdXBncmFkZSBvZiB0aGVcbiAqIG1pbmltdW0gbm9kZSB2ZXJzaW9uIG9mIHByb2plbiwgYnV0IGFsc28gb2theSBnZW5lcmFsbHkgYmVjYXVzZSBlbmdpbmUgY2hlY2tzXG4gKiB3aWxsIGJlIHBlcmZvcm1lZCBsYXRlciBhbmQgZm9yIGFsbCBldGVybml0eS5cbiAqXG4gKiBAcGFyYW0gZGlyIEJhc2UgZGlyZWN0b3J5XG4gKiBAcGFyYW0gbW9kdWxlIFRoZSBtb2R1bGUgdG8gaW5zdGFsbCAoZS5nLiBmb29AXjEuMilcbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudHMgZm9yIGBucG1gIChlLmcuIFtcImluc3RhbGxcIiwgLi4uLCBcImZvb0BeMS4yXCJdKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySW5zdGFsbEFyZ3MoZGlyOiBzdHJpbmcsIG1vZHVsZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAvLyAtLXNhdmUgaXMgbmVlZGVkIHRvIG92ZXJyaWRlIGFueSBnbG9iYWwgc2F2ZTogZmFsc2UgY29uZmlnXG4gIC8vIC0tc2F2ZS1kZXYgdG8gaW5zdGFsbCBhcyBkZXYgZGVwZW5kZW5jeVxuICAvLyAtLWluY2x1ZGU9ZGV2IHRvIGZvcmNlIHNhdmluZyB0aGUgZGVwZW5kZW5jaWVzIHdpdGggTk9ERV9FTlY9cHJvZHVjdGlvblxuICByZXR1cm4gW1xuICAgIFwiaW5zdGFsbFwiLFxuICAgIFwiLS1zYXZlXCIsXG4gICAgXCItLXNhdmUtZGV2XCIsXG4gICAgXCItZlwiLFxuICAgIFwiLS1uby1wYWNrYWdlLWxvY2tcIixcbiAgICBcIi0taW5jbHVkZT1kZXZcIixcbiAgICBgLS1wcmVmaXg9JHtkaXJ9YCxcbiAgICBtb2R1bGUsXG4gIF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kSnNpaUZpbGVQYXRoKFxuICBiYXNlRGlyOiBzdHJpbmcsXG4gIG1vZHVsZU5hbWU6IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBhdGguZGlybmFtZShcbiAgICAgIHJlcXVpcmUucmVzb2x2ZShgJHttb2R1bGVOYW1lfS8uanNpaWAsIHtcbiAgICAgICAgcGF0aHM6IFtiYXNlRGlyXSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgaWYgKFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgXCJjb2RlXCIgaW4gZXJyb3IgJiZcbiAgICAgIFtcIk1PRFVMRV9OT1RfRk9VTkRcIiwgXCJFUlJfUEFDS0FHRV9QQVRIX05PVF9FWFBPUlRFRFwiXS5pbmNsdWRlcyhcbiAgICAgICAgZXJyb3IuY29kZSBhcyBhbnksXG4gICAgICApXG4gICAgKSB7XG4gICAgICAvLyB0aGUgcHJvdmlkZWQgbW9kdWxlIGlzIG5vdCBhIGpzaWkgbW9kdWxlXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bmV4cGVjdGVkIGVycm9yLCB0aHJvdyBpdFxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDbGlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoLi4ubGluZXM6IHN0cmluZ1tdKSB7XG4gICAgc3VwZXIobGluZXMuam9pbihcIlxcblwiKSk7XG4gICAgdGhpcy5uYW1lID0gXCJDbGlFcnJvclwiO1xuICB9XG59XG4iXX0=