tg-bot-reminder/node_modules/ts-node-dev/lib/hook.js

69 lines
2.4 KiB
JavaScript
Raw Normal View History

2023-08-13 16:48:04 +03:00
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeHook = void 0;
var vm_1 = __importDefault(require("vm"));
exports.makeHook = function (cfg, wrapper, callback) {
// Hook into Node's `require(...)`
updateHooks();
// Patch the vm module to watch files executed via one of these methods:
if (cfg.vm) {
patch(vm_1.default, 'createScript', 1);
patch(vm_1.default, 'runInThisContext', 1);
patch(vm_1.default, 'runInNewContext', 2);
patch(vm_1.default, 'runInContext', 2);
}
/**
* Patch the specified method to watch the file at the given argument
* index.
*/
function patch(obj, method, optionsArgIndex) {
var orig = obj[method];
if (!orig)
return;
obj[method] = function () {
var opts = arguments[optionsArgIndex];
var file = null;
if (opts) {
file = typeof opts == 'string' ? opts : opts.filename;
}
if (file)
callback(file);
return orig.apply(this, arguments);
};
}
/**
* (Re-)install hooks for all registered file extensions.
*/
function updateHooks() {
Object.keys(require.extensions).forEach(function (ext) {
var fn = require.extensions[ext];
if (typeof fn === 'function' && fn.name !== 'nodeDevHook') {
require.extensions[ext] = createHook(fn);
}
});
}
/**
* Returns a function that can be put into `require.extensions` in order to
* invoke the callback when a module is required for the first time.
*/
function createHook(handler) {
return function nodeDevHook(module, filename) {
if (module.parent === wrapper) {
// If the main module is required conceal the wrapper
module.id = '.';
module.parent = null;
process.mainModule = module;
}
if (!module.loaded)
callback(module.filename);
// Invoke the original handler
handler(module, filename);
// Make sure the module did not hijack the handler
updateHooks();
};
}
};