diff options
author | Geoffrey Booth <webmaster@geoffreybooth.com> | 2018-10-01 22:12:47 -0700 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2018-11-01 19:28:15 -0700 |
commit | 22f7d0a4bdf4e33cfb85be1f341b1f8cadf1b668 (patch) | |
tree | 4cb4497fd3fdaa1f268bb6baf7bc66d4e97b3584 /lib | |
parent | a03165a5fd5ab0325eec506e346f6ec5db46780d (diff) | |
download | android-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.js | 19 |
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; |