mirror of
https://github.com/nodejs/node.git
synced 2025-05-17 23:45:33 +00:00

This commit adds a method to internal/process that allows access to bindings that are not intended to be used by user code. It has a separate cache object and modlist in order to avoid collisions. You can use NODE_MODULE_CONTEXT_AWARE_INTERNAL to register a C++ module as an internal. PR-URL: https://github.com/nodejs/node/pull/15759 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Brian White <mscdex@mscdex.net> Reviewed-By: Refael Ackermann <refack@gmail.com>
32 lines
987 B
JavaScript
32 lines
987 B
JavaScript
'use strict';
|
|
|
|
const { URL } = require('url');
|
|
const CJSmodule = require('module');
|
|
const errors = require('internal/errors');
|
|
const { resolve } = require('internal/process').internalBinding('module_wrap');
|
|
|
|
module.exports = (target, base) => {
|
|
if (base === undefined) {
|
|
// We cannot search without a base.
|
|
throw new errors.Error('ERR_MISSING_MODULE', target);
|
|
}
|
|
try {
|
|
return resolve(target, base);
|
|
} catch (e) {
|
|
e.stack; // cause V8 to generate stack before rethrow
|
|
let error = e;
|
|
try {
|
|
const questionedBase = new URL(base);
|
|
const tmpMod = new CJSmodule(questionedBase.pathname, null);
|
|
tmpMod.paths = CJSmodule._nodeModulePaths(
|
|
new URL('./', questionedBase).pathname);
|
|
const found = CJSmodule._resolveFilename(target, tmpMod);
|
|
error = new errors.Error('ERR_MODULE_RESOLUTION_LEGACY', target,
|
|
base, found);
|
|
} catch (problemChecking) {
|
|
// ignore
|
|
}
|
|
throw error;
|
|
}
|
|
};
|