UNPKG

@grnsft/if

Version:

Impact Framework

126 lines 16 kB
#!/usr/bin/env node "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 (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.updatePackageJsonProperties = exports.extractPathsWithVersion = exports.updatePackageJsonDependencies = exports.installDependencies = exports.initPackageJsonIfNotExists = void 0; /* eslint-disable no-process-exit */ const fs = __importStar(require("fs/promises")); const path = __importStar(require("path")); const helpers_1 = require("../../common/util/helpers"); const fs_1 = require("../../common/util/fs"); const logger_1 = require("../../common/util/logger"); const config_1 = require("../config"); const packageJson = require('../../../package.json'); const { INITIALIZING_PACKAGE_JSON, INSTALLING_NPM_PACKAGES } = config_1.STRINGS; /** * Checks if the package.json is exists, if not, initializes it. */ const initPackageJsonIfNotExists = async (folderPath) => { const packageJsonPath = path.resolve(folderPath, 'package.json'); const isPackageJsonExists = await (0, fs_1.isFileExists)(packageJsonPath); if (!isPackageJsonExists) { logger_1.logger.info(INITIALIZING_PACKAGE_JSON); const nodeModulesPath = path.resolve(folderPath, 'node_modules'); const isNodeModulesExists = await (0, fs_1.isDirectoryExists)(nodeModulesPath); if (isNodeModulesExists) { await fs.rm(nodeModulesPath, { recursive: true }); } await (0, helpers_1.execPromise)('npm init -y', { cwd: folderPath }); } return packageJsonPath; }; exports.initPackageJsonIfNotExists = initPackageJsonIfNotExists; /** * Installs packages from the specified dependencies in the specified folder. */ const installDependencies = async (folderPath, dependencies) => { const packages = Object.entries(dependencies).map(([dependency, version]) => `${dependency}@${version.replace('^', '')}`); logger_1.logger.info(INSTALLING_NPM_PACKAGES); await (0, helpers_1.execPromise)(`npm install ${packages.join(' ')}`, { cwd: folderPath, }); }; exports.installDependencies = installDependencies; /** * Updates package.json dependencies. */ const updatePackageJsonDependencies = async (packageJsonPath, dependencies, cwd) => { const packageJsonContent = await fs.readFile(packageJsonPath, 'utf8'); const parsedPackageJson = JSON.parse(packageJsonContent); if (cwd) { parsedPackageJson.dependencies = { ...parsedPackageJson.dependencies, ...dependencies, }; } else { parsedPackageJson.dependencies = { ...dependencies }; } await fs.writeFile(packageJsonPath, JSON.stringify(parsedPackageJson, null, 2)); await fs.appendFile(packageJsonPath, '\n'); }; exports.updatePackageJsonDependencies = updatePackageJsonDependencies; /** * Gets depencecies with versions. */ const extractPathsWithVersion = (plugins, dependencies) => { const paths = Object.keys(plugins).map(plugin => plugins[plugin].path); const uniquePaths = [...new Set(paths)].filter(path => path !== 'builtin'); const pathsWithVersion = {}; uniquePaths.forEach(pluginPath => { const dependency = dependencies.find((dependency) => dependency.startsWith(pluginPath)); if (dependency) { const splittedDependency = dependency.split('@'); const version = splittedDependency.length > 2 ? splittedDependency[2].split(' ')[0] : splittedDependency[1]; pathsWithVersion[pluginPath] = `^${version}`; } }); return pathsWithVersion; }; exports.extractPathsWithVersion = extractPathsWithVersion; /** * Update the package.json properties. */ const updatePackageJsonProperties = async (newPackageJsonPath, appendDependencies) => { const packageJsonContent = await fs.readFile(newPackageJsonPath, 'utf8'); const parsedPackageJsonContent = JSON.parse(packageJsonContent); const properties = { name: packageJson.name || 'if-environment', description: packageJson.description, author: packageJson.author, bugs: packageJson.bugs, engines: packageJson.engines, homepage: packageJson.homepage, dependencies: appendDependencies ? parsedPackageJsonContent.dependencies : {}, }; const newPackageJson = Object.assign({}, parsedPackageJsonContent, properties); await fs.writeFile(newPackageJsonPath, JSON.stringify(newPackageJson, null, 2)); }; exports.updatePackageJsonProperties = updatePackageJsonProperties; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2lmLWVudi91dGlsL25wbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxvQ0FBb0M7QUFDcEMsZ0RBQWtDO0FBQ2xDLDJDQUE2QjtBQUU3Qix1REFBc0Q7QUFDdEQsNkNBQXFFO0FBQ3JFLHFEQUFnRDtBQUVoRCxzQ0FBa0M7QUFHbEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFFckQsTUFBTSxFQUFDLHlCQUF5QixFQUFFLHVCQUF1QixFQUFDLEdBQUcsZ0JBQU8sQ0FBQztBQUVyRTs7R0FFRztBQUNJLE1BQU0sMEJBQTBCLEdBQUcsS0FBSyxFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNqRSxNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBQSxpQkFBWSxFQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRWhFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtRQUN4QixlQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFFdkMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDakUsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLElBQUEsc0JBQWlCLEVBQUMsZUFBZSxDQUFDLENBQUM7UUFFckUsSUFBSSxtQkFBbUIsRUFBRTtZQUN2QixNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7U0FDakQ7UUFFRCxNQUFNLElBQUEscUJBQVcsRUFBQyxhQUFhLEVBQUUsRUFBQyxHQUFHLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQztLQUNyRDtJ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VyxRQUFBLDJCQUEyQiwrQkE2QnRDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvY2Vzcy1leGl0ICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy9wcm9taXNlcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge2V4ZWNQcm9taXNlfSBmcm9tICcuLi8uLi9jb21tb24vdXRpbC9oZWxwZXJzJztcbmltcG9ydCB7aXNEaXJlY3RvcnlFeGlzdHMsIGlzRmlsZUV4aXN0c30gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWwvZnMnO1xuaW1wb3J0IHtsb2dnZXJ9IGZyb20gJy4uLy4uL2NvbW1vbi91dGlsL2xvZ2dlcic7XG5cbmltcG9ydCB7U1RSSU5HU30gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7TWFuaWZlc3RQbHVnaW4sIFBhdGhXaXRoVmVyc2lvbn0gZnJvbSAnLi4vdHlwZXMvbnBtJztcblxuY29uc3QgcGFja2FnZUpzb24gPSByZXF1aXJlKCcuLi8uLi8uLi9wYWNrYWdlLmpzb24nKTtcblxuY29uc3Qge0lOSVRJQUxJWklOR19QQUNLQUdFX0pTT04sIElOU1RBTExJTkdfTlBNX1BBQ0tBR0VTfSA9IFNUUklOR1M7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBwYWNrYWdlLmpzb24gaXMgZXhpc3RzLCBpZiBub3QsIGluaXRpYWxpemVzIGl0LlxuICovXG5leHBvcnQgY29uc3QgaW5pdFBhY2thZ2VKc29uSWZOb3RFeGlzdHMgPSBhc3luYyAoZm9sZGVyUGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGgucmVzb2x2ZShmb2xkZXJQYXRoLCAncGFja2FnZS5qc29uJyk7XG4gIGNvbnN0IGlzUGFja2FnZUpzb25FeGlzdHMgPSBhd2FpdCBpc0ZpbGVFeGlzdHMocGFja2FnZUpzb25QYXRoKTtcblxuICBpZiAoIWlzUGFja2FnZUpzb25FeGlzdHMpIHtcbiAgICBsb2dnZXIuaW5mbyhJTklUSUFMSVpJTkdfUEFDS0FHRV9KU09OKTtcblxuICAgIGNvbnN0IG5vZGVNb2R1bGVzUGF0aCA9IHBhdGgucmVzb2x2ZShmb2xkZXJQYXRoLCAnbm9kZV9tb2R1bGVzJyk7XG4gICAgY29uc3QgaXNOb2RlTW9kdWxlc0V4aXN0cyA9IGF3YWl0IGlzRGlyZWN0b3J5RXhpc3RzKG5vZGVNb2R1bGVzUGF0aCk7XG5cbiAgICBpZiAoaXNOb2RlTW9kdWxlc0V4aXN0cykge1xuICAgICAgYXdhaXQgZnMucm0obm9kZU1vZHVsZXNQYXRoLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgZXhlY1Byb21pc2UoJ25wbSBpbml0IC15Jywge2N3ZDogZm9sZGVyUGF0aH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhY2thZ2VKc29uUGF0aDtcbn07XG5cbi8qKlxuICogSW5zdGFsbHMgcGFja2FnZXMgZnJvbSB0aGUgc3BlY2lmaWVkIGRlcGVuZGVuY2llcyBpbiB0aGUgc3BlY2lmaWVkIGZvbGRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGluc3RhbGxEZXBlbmRlbmNpZXMgPSBhc3luYyAoXG4gIGZvbGRlclBhdGg6IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzOiB7W3BhdGg6IHN0cmluZ106IHN0cmluZ31cbikgPT4ge1xuICBjb25zdCBwYWNrYWdlcyA9IE9iamVjdC5lbnRyaWVzKGRlcGVuZGVuY2llcykubWFwKFxuICAgIChbZGVwZW5kZW5jeSwgdmVyc2lvbl0pID0+IGAke2RlcGVuZGVuY3l9QCR7dmVyc2lvbi5yZXBsYWNlKCdeJywgJycpfWBcbiAgKTtcblxuICBsb2dnZXIuaW5mbyhJTlNUQUxMSU5HX05QTV9QQUNLQUdFUyk7XG4gIGF3YWl0IGV4ZWNQcm9taXNlKGBucG0gaW5zdGFsbCAke3BhY2thZ2VzLmpvaW4oJyAnKX1gLCB7XG4gICAgY3dkOiBmb2xkZXJQYXRoLFxuICB9KTtcbn07XG5cbi8qKlxuICogVXBkYXRlcyBwYWNrYWdlLmpzb24gZGVwZW5kZW5jaWVzLlxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlUGFja2FnZUpzb25EZXBlbmRlbmNpZXMgPSBhc3luYyAoXG4gIHBhY2thZ2VKc29uUGF0aDogc3RyaW5nLFxuICBkZXBlbmRlbmNpZXM6IFBhdGhXaXRoVmVyc2lvbixcbiAgY3dkOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb25Db250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUocGFja2FnZUpzb25QYXRoLCAndXRmOCcpO1xuXG4gIGNvbnN0IHBhcnNlZFBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvbkNvbnRlbnQpO1xuXG4gIGlmIChjd2QpIHtcbiAgICBwYXJzZWRQYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMgPSB7XG4gICAgICAuLi5wYXJzZWRQYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMsXG4gICAgICAuLi5kZXBlbmRlbmNpZXMsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBwYXJzZWRQYWNrYWdlSnNvbi5kZXBlbmRlbmNpZXMgPSB7Li4uZGVwZW5kZW5jaWVzfTtcbiAgfVxuXG4gIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICBwYWNrYWdlSnNvblBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkocGFyc2VkUGFja2FnZUpzb24sIG51bGwsIDIpXG4gICk7XG4gIGF3YWl0IGZzLmFwcGVuZEZpbGUocGFja2FnZUpzb25QYXRoLCAnXFxuJyk7XG59O1xuXG4vKipcbiAqIEdldHMgZGVwZW5jZWNpZXMgd2l0aCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RQYXRoc1dpdGhWZXJzaW9uID0gKFxuICBwbHVnaW5zOiBNYW5pZmVzdFBsdWdpbixcbiAgZGVwZW5kZW5jaWVzOiBzdHJpbmdbXVxuKSA9PiB7XG4gIGNvbnN0IHBhdGhzID0gT2JqZWN0LmtleXMocGx1Z2lucykubWFwKHBsdWdpbiA9PiBwbHVnaW5zW3BsdWdpbl0ucGF0aCk7XG4gIGNvbnN0IHVuaXF1ZVBhdGhzID0gWy4uLm5ldyBTZXQocGF0aHMpXS5maWx0ZXIocGF0aCA9PiBwYXRoICE9PSAnYnVpbHRpbicpO1xuICBjb25zdCBwYXRoc1dpdGhWZXJzaW9uOiBQYXRoV2l0aFZlcnNpb24gPSB7fTtcblxuICB1bmlxdWVQYXRocy5mb3JFYWNoKHBsdWdpblBhdGggPT4ge1xuICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXMuZmluZCgoZGVwZW5kZW5jeTogc3RyaW5nKSA9PlxuICAgICAgZGVwZW5kZW5jeS5zdGFydHNXaXRoKHBsdWdpblBhdGgpXG4gICAgKTtcblxuICAgIGlmIChkZXBlbmRlbmN5KSB7XG4gICAgICBjb25zdCBzcGxpdHRlZERlcGVuZGVuY3kgPSBkZXBlbmRlbmN5LnNwbGl0KCdAJyk7XG4gICAgICBjb25zdCB2ZXJzaW9uID1cbiAgICAgICAgc3BsaXR0ZWREZXBlbmRlbmN5Lmxlbmd0aCA+IDJcbiAgICAgICAgICA/IHNwbGl0dGVkRGVwZW5kZW5jeVsyXS5zcGxpdCgnICcpWzBdXG4gICAgICAgICAgOiBzcGxpdHRlZERlcGVuZGVuY3lbMV07XG5cbiAgICAgIHBhdGhzV2l0aFZlcnNpb25bcGx1Z2luUGF0aF0gPSBgXiR7dmVyc2lvbn1gO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhdGhzV2l0aFZlcnNpb247XG59O1xuXG4vKipcbiAqIFVwZGF0ZSB0aGUgcGFja2FnZS5qc29uIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB1cGRhdGVQYWNrYWdlSnNvblByb3BlcnRpZXMgPSBhc3luYyAoXG4gIG5ld1BhY2thZ2VKc29uUGF0aDogc3RyaW5nLFxuICBhcHBlbmREZXBlbmRlbmNpZXM6IGJvb2xlYW5cbikgPT4ge1xuICBjb25zdCBwYWNrYWdlSnNvbkNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShuZXdQYWNrYWdlSnNvblBhdGgsICd1dGY4Jyk7XG4gIGNvbnN0IHBhcnNlZFBhY2thZ2VKc29uQ29udGVudCA9IEpTT04ucGFyc2UocGFja2FnZUpzb25Db250ZW50KTtcblxuICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgIG5hbWU6IHBhY2thZ2VKc29uLm5hbWUgfHwgJ2lmLWVudmlyb25tZW50JyxcbiAgICBkZXNjcmlwdGlvbjogcGFja2FnZUpzb24uZGVzY3JpcHRpb24sXG4gICAgYXV0aG9yOiBwYWNrYWdlSnNvbi5hdXRob3IsXG4gICAgYnVnczogcGFja2FnZUpzb24uYnVncyxcbiAgICBlbmdpbmVzOiBwYWNrYWdlSnNvbi5lbmdpbmVzLFxuICAgIGhvbWVwYWdlOiBwYWNrYWdlSnNvbi5ob21lcGFnZSxcbiAgICBkZXBlbmRlbmNpZXM6IGFwcGVuZERlcGVuZGVuY2llc1xuICAgICAgPyBwYXJzZWRQYWNrYWdlSnNvbkNvbnRlbnQuZGVwZW5kZW5jaWVzXG4gICAgICA6IHt9LFxuICB9O1xuXG4gIGNvbnN0IG5ld1BhY2thZ2VKc29uID0gT2JqZWN0LmFzc2lnbihcbiAgICB7fSxcbiAgICBwYXJzZWRQYWNrYWdlSnNvbkNvbnRlbnQsXG4gICAgcHJvcGVydGllc1xuICApO1xuXG4gIGF3YWl0IGZzLndyaXRlRmlsZShcbiAgICBuZXdQYWNrYWdlSnNvblBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkobmV3UGFja2FnZUpzb24sIG51bGwsIDIpXG4gICk7XG59O1xuIl19