aboutsummaryrefslogtreecommitdiff
path: root/lib/internal/modules/cjs/loader.js
diff options
context:
space:
mode:
authorMyles Borins <myles.borins@gmail.com>2019-04-25 00:29:22 -0400
committerMichaƫl Zasso <targos@protonmail.com>2019-05-04 09:20:23 +0200
commit5bcd7700ca59dfe434945211b886d08ebf7ad94b (patch)
tree74bcc1a7ea89e712264528166bfda7cf7e9a0fcb /lib/internal/modules/cjs/loader.js
parent2c3c0d7d3e84b1800506474d7a0a705d5a6ec134 (diff)
downloadandroid-node-v8-5bcd7700ca59dfe434945211b886d08ebf7ad94b.tar.gz
android-node-v8-5bcd7700ca59dfe434945211b886d08ebf7ad94b.tar.bz2
android-node-v8-5bcd7700ca59dfe434945211b886d08ebf7ad94b.zip
module: add createRequire method
This is an abstraction on top of creatRequireFromPath that can accept both paths, URL Strings, and URL Objects. PR-URL: https://github.com/nodejs/node/pull/27405 Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'lib/internal/modules/cjs/loader.js')
-rw-r--r--lib/internal/modules/cjs/loader.js33
1 files changed, 30 insertions, 3 deletions
diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js
index 5df34cb3f0..ff1128e903 100644
--- a/lib/internal/modules/cjs/loader.js
+++ b/lib/internal/modules/cjs/loader.js
@@ -24,7 +24,7 @@
const { JSON, Object, Reflect } = primordials;
const { NativeModule } = require('internal/bootstrap/loaders');
-const { pathToFileURL } = require('internal/url');
+const { pathToFileURL, fileURLToPath, URL } = require('internal/url');
const { deprecate } = require('internal/util');
const vm = require('vm');
const assert = require('internal/assert');
@@ -824,7 +824,7 @@ Module.runMain = function() {
Module._load(process.argv[1], null, true);
};
-Module.createRequireFromPath = (filename) => {
+function createRequireFromPath(filename) {
// Allow a directory to be passed as the filename
const trailingSlash =
filename.endsWith(path.sep) || path.sep !== '/' && filename.endsWith('\\');
@@ -838,7 +838,34 @@ Module.createRequireFromPath = (filename) => {
m.paths = Module._nodeModulePaths(m.path);
return makeRequireFunction(m);
-};
+}
+
+Module.createRequireFromPath = createRequireFromPath;
+
+const createRequireError = 'must be a file URL object, file URL string, or' +
+ 'absolute path string';
+
+function createRequire(filename) {
+ let filepath;
+ if (typeof filename === 'object' && !(filename instanceof URL)) {
+ throw new ERR_INVALID_ARG_VALUE('filename', filename, createRequireError);
+ } else if (typeof filename === 'object' ||
+ typeof filename === 'string' && !path.isAbsolute(filename)) {
+ try {
+ filepath = fileURLToPath(filename);
+ } catch {
+ throw new ERR_INVALID_ARG_VALUE('filename', filename,
+ createRequireError);
+ }
+ } else if (typeof filename !== 'string') {
+ throw new ERR_INVALID_ARG_VALUE('filename', filename, createRequireError);
+ } else {
+ filepath = filename;
+ }
+ return createRequireFromPath(filepath);
+}
+
+Module.createRequire = createRequire;
Module._initPaths = function() {
var homeDir;