UNPKG

sensai

Version:

Because even AI needs a master

79 lines (78 loc) 2.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, /** * Start tracking dependencies. */ "default", { enumerable: true, get: function() { return _default; } }); const _nodemodule = /*#__PURE__*/ _interop_require_default(require("node:module")); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // dependency tree const dependencyTree = {}; // cache default module require const load = _nodemodule.default.prototype.require; const _default = ()=>{ // @ts-ignore extend node module require _nodemodule.default.prototype.require = function(path) { const content = load.call(this, path); // @ts-ignore addChildDependencies(_nodemodule.default._resolveFilename(path, this)); return content; }; /** * Invalidate module cache with given filename. * * @param {String} filename (absolute filename path) * @public */ return (filename)=>{ const dependants = new Set(); resetCache(filename, (file)=>dependants.add(file)); return { filename, dependants: dependants }; }; }; /** * Add child dependencies for a given module. * A dependency is a module that will need to be reseted whenever the parent * module (with the fiven `modFilename]`) changes. * * @param {String} modFilename * @private */ const addChildDependencies = (modFilename)=>{ const mod = require.cache[modFilename]; if (mod) { for (const { filename } of mod.children){ const dep = dependencyTree[filename] = dependencyTree[filename] || []; if (!dep.includes(modFilename)) dep.push(modFilename); } } }; /** * Reset module cache. * * @param {String} filename * @param {Function} cb (function used to create a set of dependants modules) * @private */ const resetCache = (filename, cb)=>{ const dependants = dependencyTree[filename]; if (dependants) { for (const dep of dependants){ // TODO break down code to avoid range error max call stack resetCache(dep, cb); cb(dep); } } delete require.cache[filename]; dependencyTree[filename] = undefined; };