@harves/nx-node-esm-plugin
Version:
Node executor including ESM module resolution for buildable libraries within Nx workspaces.
67 lines • 2.53 kB
JavaScript
var _a, _b, _c;
const VERBOSE = (_a = process.env['NX_VERBOSE_LOGGING']) !== null && _a !== void 0 ? _a : false;
/*
* register ESM loader
*/
import { register } from 'module';
register('./node-loader.mjs', import.meta.url);
/*
* monkey patch CommonJS require loader
*/
import { createRequire } from 'node:module';
const require = createRequire(import.meta.url);
const Module = require('node:module');
const originalLoader = Module._load;
// see docs in ./node-loader.mts
const mappings = JSON.parse((_b = process.env['NX_MAPPINGS']) !== null && _b !== void 0 ? _b : '{}');
const moduleResolutionOverrides = JSON.parse((_c = process.env['NX_MODULE_RESOLUTION_OVERRIDES']) !== null && _c !== void 0 ? _c : '{}');
/**
* This method resolves Node CommonJS require's for buildable
* Nx libraries by mapping the library require request to the library's
* built output paths.
*
* It also includes support for configurable overrides.
*
* All other request values are deferred to the parent loader.
*
* @param request
* @param parent
* @param args
* @returns
*
* @see https://github.com/nrwl/nx/blob/6f223005b880c47ee32870b2508c1e56d8e26152/packages/js/src/executors/node/node-with-require-overrides.ts#L11-L21
*/
Module._load = (request, parent, ...args) => {
if (!parent) {
return originalLoader.apply(this, [request, parent, ...args]);
}
if (VERBOSE) {
console.log(`node-loader: requiring ${request}`);
}
if (typeof moduleResolutionOverrides === 'object') {
if (request in moduleResolutionOverrides) {
const resolvedRequest = moduleResolutionOverrides[request];
if (VERBOSE) {
console.log(`node-loader: found override ${request} --> ${resolvedRequest}`);
}
return originalLoader.apply(this, [resolvedRequest, parent, ...args]);
}
}
if (typeof mappings === 'object') {
if (request in mappings) {
const resolvedRequest = mappings[request];
if (VERBOSE) {
console.log(`node-loader: found mapping ${request} --> ${resolvedRequest}`);
}
return originalLoader.apply(this, [resolvedRequest, parent, ...args]);
}
}
// fall through to default loader
return originalLoader.apply(this, [request, parent, ...args]);
};
/*
* run the target file
*/
const dynamicImport = new Function('specifier', 'return import(specifier)');
dynamicImport(process.env['NX_FILE_TO_RUN']);
//# sourceMappingURL=node-runner.mjs.map