diff options
author | Myles Borins <myles.borins@gmail.com> | 2019-04-25 00:29:22 -0400 |
---|---|---|
committer | Michaƫl Zasso <targos@protonmail.com> | 2019-05-04 09:20:23 +0200 |
commit | 5bcd7700ca59dfe434945211b886d08ebf7ad94b (patch) | |
tree | 74bcc1a7ea89e712264528166bfda7cf7e9a0fcb /lib/internal/modules/cjs/loader.js | |
parent | 2c3c0d7d3e84b1800506474d7a0a705d5a6ec134 (diff) | |
download | android-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.js | 33 |
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; |