Current File : //lib/node_modules/pm2/node_modules/@pm2/io/build/main/src/utils/module.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const fs = require("fs");
const Debug = require("debug");
const path = require("path");
const debug = Debug('axm:module');
class ModuleUtils {
    static getModulePath(moduleName) {
        return tslib_1.__awaiter(this, void 0, void 0, function* () {
            return new Promise((resolve, reject) => {
                ModuleUtils.detectModule(moduleName, (err, path) => {
                    if (err) {
                        debug(err);
                        return reject(err);
                    }
                    return resolve(path);
                });
            });
        });
    }
    static loadModule(modulePath, moduleName, args) {
        let module;
        try {
            if (args) {
                module = require(modulePath).apply(this, args);
            }
            else {
                module = require(modulePath);
            }
        }
        catch (e) {
            debug(`Error when requiring ${moduleName} on path`, modulePath);
            debug(e.message);
            return e;
        }
        debug(`${moduleName} successfully enabled`);
        return module;
    }
    static detectModule(moduleName, cb) {
        const module = this._getModule() || { paths: ['./node_modules', '/node_modules'] };
        const requirePaths = module.paths.slice();
        ModuleUtils._lookForModule(requirePaths, moduleName, cb);
    }
    static _getModule() {
        return require.main;
    }
    static _lookForModule(requirePaths, moduleName, cb) {
        if (!requirePaths[0]) {
            debug('[x] %s NOT FOUND', moduleName);
            return cb(new Error(moduleName + ' not found'));
        }
        const profilerPath = path.join(requirePaths[0], moduleName);
        debug('Checking %s in path %s', moduleName, profilerPath);
        fs.access(profilerPath, (fs.constants || fs).R_OK, function (err) {
            if (!err) {
                debug('[+] %s detected in path %s', moduleName, profilerPath);
                return cb(null, profilerPath);
            }
            debug('[-] %s not found in path %s', moduleName, profilerPath);
            requirePaths.shift();
            return ModuleUtils._lookForModule(requirePaths, moduleName, cb);
        });
    }
}
exports.default = ModuleUtils;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5QkFBd0I7QUFDeEIsK0JBQThCO0FBQzlCLDZCQUE0QjtBQUU1QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7QUFFakM7SUFDRSxNQUFNLENBQU8sYUFBYSxDQUFFLFVBQVU7O1lBQ3BDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQ3JDLFdBQVcsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO29CQUVqRCxJQUFJLEdBQUcsRUFBRTt3QkFDUCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7d0JBQ1YsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7cUJBQ25CO29CQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUN0QixDQUFDLENBQUMsQ0FBQTtZQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQztLQUFBO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLElBQUs7UUFDOUMsSUFBSSxNQUFNLENBQUE7UUFDVixJQUFJO1lBQ0YsSUFBSSxJQUFJLEVBQUU7Z0JBQ1IsTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO2FBQy9DO2lCQUFNO2dCQUNMLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7YUFDN0I7U0FDRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsS0FBSyxDQUFDLHdCQUF3QixVQUFVLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQTtZQUMvRCxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ2hCLE9BQU8sQ0FBQyxDQUFBO1NBQ1Q7UUFFRCxLQUFLLENBQUMsR0FBRyxVQUFVLHVCQUF1QixDQUFDLENBQUE7UUFFM0MsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBRSxVQUFVLEVBQUUsRUFBRTtRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFBO1FBRWxGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFFekMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVTtRQUNmLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQTtJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEVBQUU7UUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNwQixLQUFLLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDckMsT0FBTyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUE7U0FDaEQ7UUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUUzRCxLQUFLLENBQUMsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBRXpELEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHO1lBQzlELElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1IsS0FBSyxDQUFDLDRCQUE0QixFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQTtnQkFDN0QsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFBO2FBQzlCO1lBRUQsS0FBSyxDQUFDLDZCQUE2QixFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQTtZQUM5RCxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUE7WUFDcEIsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDakUsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFsRUQsOEJBa0VDIn0=