@launchmenu/launcher
Version:
The installer + launcher of LM
128 lines • 8.34 kB
JavaScript
;
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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