Skip to content

Commit 9571a61

Browse files
Fall back to default .js handler for unknown extensions
Co-authored-by: Mark Wubben <[email protected]>
1 parent 01bb749 commit 9571a61

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

fixture.cjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = 'foobar-cjs';

index.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
'use strict';
22
module.exports = install;
33

4-
function install(precompile, ext = '.js', extensions = require.extensions) { // eslint-disable-line node/no-deprecated-api
5-
const {[ext]: oldExtension} = extensions;
4+
/* eslint-disable node/no-deprecated-api, eslint-comments/disable-enable-pair */
5+
6+
// Save reference before a new handler is installed.
7+
const {'.js': defaultHandler} = require.extensions;
8+
9+
function install(precompile, ext = '.js', extensions = require.extensions) {
10+
const {[ext]: fallbackHandler = defaultHandler} = extensions;
611

712
extensions[ext] = function (module, filename) {
813
const source = precompile(filename);
914
if (source === null) {
10-
Reflect.apply(oldExtension, extensions, [module, filename]);
15+
Reflect.apply(fallbackHandler, extensions, [module, filename]);
1116
} else {
1217
module._compile(source, filename);
1318
}

test.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,12 @@ test('test actual require', t => {
6464

6565
t.is(require('./fixture'), 'foobar');
6666
});
67+
68+
test('test require extension without previous handler extension', t => {
69+
install(
70+
() => null,
71+
'.cjs'
72+
);
73+
74+
t.is(require('./fixture.cjs'), 'foobar-cjs');
75+
});

0 commit comments

Comments
 (0)