tg-bot-reminder/node_modules/ts-node-dev/lib/child-require-hook.js
2023-08-13 16:48:04 +03:00

141 lines
4.8 KiB
JavaScript

"use strict";
var fs = require('fs');
var getCompiledPath = require('./get-compiled-path').getCompiledPath;
var sep = require('path').sep;
var join = require('path').join;
var extname = require('path').extname;
var execSync = require('child_process').execSync;
var Module = require('module');
var compilationId = '';
var timeThreshold = 0;
var allowJs = false;
var compiledDir = '';
var preferTs = false;
var ignore = [/node_modules/];
var readyFile = '';
var execCheck = false;
var exitChild = false;
var sourceMapSupportPath = '';
var libPath = '';
var checkFileScript = join(__dirname, 'check-file-exists.js');
var waitForFile = function (fileName) {
var start = new Date().getTime();
while (true) {
var exists = execCheck
? execSync(['node', checkFileScript, '"' + fileName + '"'].join(' '), {
stdio: 'inherit',
}) || true
: fs.existsSync(fileName);
if (exists) {
return;
}
var passed = new Date().getTime() - start;
if (timeThreshold && passed > timeThreshold) {
throw new Error('Could not require ' + fileName);
}
}
};
var sendFsCompileRequest = function (fileName, compiledPath) {
var compileRequestFile = [compiledDir, compilationId + '.req'].join(sep);
fs.writeFileSync(compileRequestFile, [fileName, compiledPath].join('\n'));
};
var compile = function (code, fileName) {
var compiledPath = getCompiledPath(code, fileName, compiledDir);
if (process.send) {
try {
process.send({
compile: fileName,
compiledPath: compiledPath,
});
}
catch (e) {
console.warn('Error while sending compile request via process.send');
sendFsCompileRequest(fileName, compiledPath);
}
}
else {
sendFsCompileRequest(fileName, compiledPath);
}
waitForFile(compiledPath + '.done');
var compiled = fs.readFileSync(compiledPath, 'utf-8');
return compiled;
};
function registerExtensions(extensions) {
extensions.forEach(function (ext) {
var old = require.extensions[ext] || require.extensions['.js'];
require.extensions[ext] = function (m, fileName) {
var _compile = m._compile;
m._compile = function (code, fileName) {
return _compile.call(this, compile(code, fileName), fileName);
};
return old(m, fileName);
};
});
if (preferTs) {
var reorderRequireExtension_1 = function (ext) {
var old = require.extensions[ext];
delete require.extensions[ext];
require.extensions[ext] = old;
};
var order = ['.ts', '.tsx'].concat(Object.keys(require.extensions).filter(function (_) { return _ !== '.ts' && _ !== '.tsx'; }));
order.forEach(function (ext) {
reorderRequireExtension_1(ext);
});
}
}
function isFileInNodeModules(fileName) {
return fileName.indexOf(sep + 'node_modules' + sep) >= 0;
}
function registerJsExtension() {
var old = require.extensions['.js'];
// handling preferTs probably redundant after reordering
if (allowJs) {
require.extensions['.jsx'] = require.extensions['.js'] = function (m, fileName) {
if (fileName.indexOf(libPath) === 0) {
return old(m, fileName);
}
var tsCode = undefined;
var tsFileName = '';
var _compile = m._compile;
var isIgnored = ignore &&
ignore.reduce(function (res, ignore) {
return res || ignore.test(fileName);
}, false);
var ext = extname(fileName);
if (tsCode !== undefined || (allowJs && !isIgnored && ext == '.js')) {
m._compile = function (code, fileName) {
if (tsCode !== undefined) {
code = tsCode;
fileName = tsFileName;
}
return _compile.call(this, compile(code, fileName), fileName);
};
}
return old(m, fileName);
};
}
}
var sourceMapRequire = Module.createRequire
? Module.createRequire(sourceMapSupportPath)
: require;
sourceMapRequire(sourceMapSupportPath).install({
hookRequire: true,
});
registerJsExtension();
registerExtensions(['.ts', '.tsx']);
if (readyFile) {
var time = new Date().getTime();
while (!fs.existsSync(readyFile)) {
if (new Date().getTime() - time > 5000) {
throw new Error('Waiting ts-node-dev ready file failed');
}
}
}
if (exitChild) {
process.on('SIGTERM', function () {
console.log('Child got SIGTERM, exiting.');
process.exit();
});
}
module.exports.registerExtensions = registerExtensions;