"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolvePackages = exports.processPromise = void 0; const colorette_1 = require("colorette"); const path_1 = __importDefault(require("path")); const modify_config_helper_1 = require("./modify-config-helper"); const global_packages_path_1 = require("./global-packages-path"); const spawn_child_1 = require("./spawn-child"); const path_utils_1 = require("./path-utils"); const webpack_cli_1 = require("webpack-cli"); const { logger } = webpack_cli_1.utils; /** * * Attaches a promise to the installation of the package * * @param {Function} child - The function to attach a promise to * @returns {Promise} promise - Returns a promise to the installation */ function processPromise(child) { return new Promise((resolve, reject) => { if (child.exitCode !== 0) { reject(); } else { resolve(); } }); } exports.processPromise = processPromise; /** * * Resolves and installs the packages, later sending them to @creator * * @param {String[]} pkg - The dependencies to be installed * @returns {Function|Error} creator - Builds * a webpack configuration through yeoman or throws an error */ function resolvePackages(pkg) { Error.stackTraceLimit = 30; const packageLocations = []; function invokeGeneratorIfReady() { if (packageLocations.length === pkg.length) { modify_config_helper_1.modifyHelperUtil(null, null, packageLocations); } } pkg.forEach((scaffold) => { // Resolve paths to modules on local filesystem if (path_utils_1.isLocalPath(scaffold)) { let absolutePath = scaffold; try { absolutePath = path_1.default.resolve(process.cwd(), scaffold); require.resolve(absolutePath); packageLocations.push(absolutePath); } catch (err) { logger.error(`Cannot find a generator at ${absolutePath}.\n`); logger.error('Reason:\n'); logger.error(colorette_1.bold(err)); process.exitCode = 1; } invokeGeneratorIfReady(); return; } // Resolve modules on npm registry processPromise(spawn_child_1.spawnChild(scaffold)) .then(() => { try { const globalPath = global_packages_path_1.getPathToGlobalPackages(); packageLocations.push(path_1.default.resolve(globalPath, scaffold)); } catch (err) { logger.error("Package wasn't validated correctly..."); logger.error(`Submit an issue for ${pkg} if this persists\n`); logger.error('Reason:\n'); logger.error(colorette_1.bold(err)); process.exitCode = 1; } }) .catch((err) => { logger.error("Package couldn't be installed, aborting...\n"); logger.error('Reason:\n'); logger.error(colorette_1.bold(err)); process.exitCode = 1; }) .then(invokeGeneratorIfReady); }); } exports.resolvePackages = resolvePackages;