UNPKG

@dword-design/depcheck

Version:

Check dependencies in your node module

96 lines (94 loc) 2.33 kB
"use strict"; 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; }