summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGeoffrey Booth <webmaster@geoffreybooth.com>2018-10-01 22:12:47 -0700
committerRich Trott <rtrott@gmail.com>2018-11-01 19:28:15 -0700
commit22f7d0a4bdf4e33cfb85be1f341b1f8cadf1b668 (patch)
tree4cb4497fd3fdaa1f268bb6baf7bc66d4e97b3584 /lib
parenta03165a5fd5ab0325eec506e346f6ec5db46780d (diff)
downloadandroid-node-v8-22f7d0a4bdf4e33cfb85be1f341b1f8cadf1b668.tar.gz
android-node-v8-22f7d0a4bdf4e33cfb85be1f341b1f8cadf1b668.tar.bz2
android-node-v8-22f7d0a4bdf4e33cfb85be1f341b1f8cadf1b668.zip
module: support multi-dot file extension
Support multi-dot file extensions like '.coffee.md' in Module.load. PR-URL: https://github.com/nodejs/node/pull/23416 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: John-David Dalton <john.david.dalton@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/internal/modules/cjs/loader.js19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js
index 975c688eda..4a5fc596c0 100644
--- a/lib/internal/modules/cjs/loader.js
+++ b/lib/internal/modules/cjs/loader.js
@@ -219,6 +219,22 @@ function tryExtensions(p, exts, isMain) {
return false;
}
+// find the longest (possibly multi-dot) extension registered in
+// Module._extensions
+function findLongestRegisteredExtension(filename) {
+ const name = path.basename(filename);
+ let currentExtension;
+ let index;
+ let startIndex = 0;
+ while ((index = name.indexOf('.', startIndex)) !== -1) {
+ startIndex = index + 1;
+ if (index === 0) continue; // Skip dotfiles like .gitignore
+ currentExtension = name.slice(index);
+ if (Module._extensions[currentExtension]) return currentExtension;
+ }
+ return '.js';
+}
+
var warned = false;
Module._findPath = function(request, paths, isMain) {
if (path.isAbsolute(request)) {
@@ -600,8 +616,7 @@ Module.prototype.load = function(filename) {
this.filename = filename;
this.paths = Module._nodeModulePaths(path.dirname(filename));
- var extension = path.extname(filename) || '.js';
- if (!Module._extensions[extension]) extension = '.js';
+ var extension = findLongestRegisteredExtension(filename);
Module._extensions[extension](this, filename);
this.loaded = true;