UNPKG

@launchmenu/launcher

Version:
128 lines 8.34 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getExternalInstallPath = exports.getInstalledPath = exports.getPackageNameWithoutVersion = exports.isInstalled = exports.install = void 0; const npm_1 = __importDefault(require("npm")); const path_1 = __importDefault(require("path")); /** * Install the core LM module * @param root The root directory to install the packages in * @param packageName The package to install * @param packages Additional packages to install */ function install(root, packageName, ...packages) { // Fake installation if in dev mode if (DEV) return new Promise(res => setTimeout(res, 500)); packages = [packageName, ...packages]; packages = packages.filter(p => !isInstalled(root, getPackageNameWithoutVersion(p))); if (packages.length == 0) return Promise.resolve(); const prefix = root; return new Promise((res, rej) => { npm_1.default.load({ prefix, save: true, global: false, }, function (err) { if (err) { rej(err); } else { const { Installer } = require("npm/lib/install.js"); let oInstaller = new Installer(prefix, false, packages, { global: false, }); oInstaller.run((err) => { if (err) { console.error("failed to install", packages); rej(err); } else { console.log("installed", packages); npm_1.default.commands.dedupe([], err => { if (err) { console.error("failed to dedupe", packages); rej(err); } else { res(); } }); } }); npm_1.default.on("log", function (message) { console.log(message); }); } }); }); } exports.install = install; /** * Checks whether a package with the specified name is installed * @param externalRoot The path to check for external packages * @param packageName The package to check for * @param externalOnly Whether to only check for external packages * @returns Whether the specified package is installed */ function isInstalled(externalRoot, packageName, externalOnly = true) { try { if (externalOnly) console.log(`Found ${getExternalInstallPath(externalRoot, packageName)}`); else console.log(`Found ${getInstalledPath(externalRoot, packageName)}`); return true; } catch (e) { console.error(`Could not find ${packageName}`); return false; } } exports.isInstalled = isInstalled; /** * Retrieves the name of the package without version number * @param packageName The name of the package possibly including version number * @returns The name of the package */ function getPackageNameWithoutVersion(packageName) { const match = packageName.match(/^(.+)@/); if (match) return match[1]; return packageName; } exports.getPackageNameWithoutVersion = getPackageNameWithoutVersion; /** * Retrieves the absolute path to a package with the given name * @param root The root directory to look for packages in * @param packageName The package to get the path of * @returns The path to the package * @throw Throws an error if no such path exists */ function getInstalledPath(root, packageName) { try { return require.resolve(packageName); } catch (e) { try { return getExternalInstallPath(root, packageName); } catch (e) { } throw e; } } exports.getInstalledPath = getInstalledPath; /** * Retrieves the absolute path to a package with the given name, if externally installed * @param root The root directory to look for packages in * @param packageName The package to get the path of * @returns The path to the package * @throw Throws an error if no such path exists */ function getExternalInstallPath(root, packageName) { return require.resolve(path_1.default.join(root, "node_modules", packageName)); } exports.getExternalInstallPath = getExternalInstallPath; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luc3RhbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FBc0I7QUFDdEIsZ0RBQXdCO0FBRXhCOzs7OztHQUtHO0FBQ0gsU0FBZ0IsT0FBTyxDQUNuQixJQUFZLEVBQ1osV0FBbUIsRUFDbkIsR0FBRyxRQUFrQjtJQUVyQixtQ0FBbUM7SUFDbkMsSUFBSSxHQUFHO1FBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV6RCxRQUFRLEdBQUcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUN0QyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckYsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUVuRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDcEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUM1QixhQUFHLENBQUMsSUFBSSxDQUNKO1lBQ0ksTUFBTTtZQUNOLElBQUksRUFBRSxJQUFJO1lBQ1YsTUFBTSxFQUFFLEtBQUs7U0FDaEIsRUFDRCxVQUFVLEdBQUc7WUFDVCxJQUFJLEdBQUcsRUFBRTtnQkFDTCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDWjtpQkFBTTtnQkFDSCxNQUFNLEVBQUMsU0FBUyxFQUFDLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ2xELElBQUksVUFBVSxHQUFHLElBQUksU0FBUyxD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