@dword-design/depcheck
Version:
Check dependencies in your node module
96 lines (94 loc) • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.evaluate = evaluate;
Object.defineProperty(exports, "getScripts", {
enumerable: true,
get: function () {
return _getScripts.default;
}
});
exports.loadModuleData = void 0;
exports.readJSON = readJSON;
exports.tryRequire = tryRequire;
exports.wrapToArray = wrapToArray;
exports.wrapToMap = wrapToMap;
var _path = _interopRequireDefault(require("path"));
var _vm = _interopRequireDefault(require("vm"));
var _moduleRoot = _interopRequireDefault(require("./module-root"));
var _getScripts = _interopRequireDefault(require("./get-scripts"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function readJSON(filePath) {
return require(filePath); // eslint-disable-line global-require
}
function evaluate(code) {
const exports = {};
const sandbox = {
exports,
module: {
exports
}
};
_vm.default.runInNewContext(code, sandbox);
return sandbox.module.exports;
}
function memoize(func, n) {
const cache = new Map();
return function (...args) {
const key = JSON.stringify(args);
if (cache.has(key)) {
return cache.get(key);
}
const result = func(...args);
cache.set(key, result);
if (cache.size > n) {
const oldestKey = cache.keys().next().value;
cache.delete(oldestKey);
}
return result;
};
}
function loadModuleDataRaw(moduleName, rootDir) {
try {
const file = _path.default.join((0, _moduleRoot.default)(moduleName, {
cwd: rootDir
}), 'package.json');
return {
path: _path.default.dirname(file),
metadata: readJSON(file)
};
} catch (error) {
return {
path: null,
metadata: null
};
}
}
const loadModuleData = exports.loadModuleData = memoize(loadModuleDataRaw, 500);
function tryRequire(module, paths = []) {
try {
let moduleName = module;
if (paths.length > 0) moduleName = require.resolve(moduleName, {
paths
});
return require(moduleName); // eslint-disable-line global-require
} catch (e) {
return null;
}
}
function wrapToArray(obj) {
if (!obj) {
return [];
}
if (Array.isArray(obj)) {
return obj;
}
return [obj];
}
function wrapToMap(obj) {
if (!obj) {
return {};
}
return obj;
}