const fs = require('node:fs'); const vm = require('node:vm'); const path = require('node:path'); module.exports = function createLoader(globals, mocks = {}) { const modules = new Map(); function load(file) { file = path.resolve(file); if (modules.has(file)) return modules.get(file).exports; const module = { exports: {} }; modules.set(file, module); vm.runInNewContext(fs.readFileSync(file, 'utf8'), { ...globals, module, exports: module.exports, require(name) { if (mocks[name]) return mocks[name]; if (!name.startsWith('.')) return require(name); const resolved = path.resolve(path.dirname(file), name); return load(path.extname(resolved) ? resolved : resolved + '.js'); } }, { filename: file }); return module.exports; } return load; };