@luminati-io/luminati-proxy
Version:
A configurable local proxy for brightdata.com
44 lines (38 loc) • 1.17 kB
JavaScript
// LICENSE_CODE ZON ISC
; /*jslint node:true, esnext:true, es9: true*/
const Module = require('module').Module;
const babel = require('@babel/core');
const transform = filename=>babel.transformFileSync(filename, {
plugins: [
require.resolve('@babel/plugin-transform-export-namespace-from'),
require.resolve('@babel/plugin-transform-modules-commonjs'),
],
});
const get_loaders = ()=>({
js_loader: Module._extensions['.js'],
mjs_loader: Module._extensions['.mjs'],
});
const apply_loaders = (js, mjs)=>{
Module._extensions['.js'] = js;
Module._extensions['.mjs'] = mjs||js;
};
const make_loader = orig=>(mod, filename)=>{
try {
return orig(mod, filename);
} catch(e){
if (e.code==='ERR_REQUIRE_ESM')
mod._compile(transform(filename).code, filename);
else
throw e;
}
};
module.exports = {
require: (...args)=>{
const {js_loader, mjs_loader} = get_loaders();
let new_loader = make_loader(js_loader);
apply_loaders(new_loader);
let required = require(...args);
apply_loaders(js_loader, mjs_loader);
return required;
},
};