-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
39 lines (36 loc) · 1.09 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
module.exports = shimRequire;
const Module = require('module');
const fs = require('fs');
const extensions = ['js','json'];
const defaultExtension = 'js';
// from https://github.com/nodejs/node/blob/master/lib/internal/modules/cjs/loader.js
function shimRequire(callback, extension) {
if (extension && !extensions.includes(extension)) {
throw `Invalid extension ${extension} - supported types ${extensions.join(',')}`;
}
if (!extension) {
extension = defaultExtension;
}
Module._extensions[`.${extension}`] = function(module, filename) {
let content = fs.readFileSync(filename, 'utf8');
try {
content = stripBOM(content);
content = callback(content, filename, module);
if (extension === 'js') {
module._compile(content, filename);
}
else if (extension === 'json') {
module.exports = JSON.parse(content);
}
} catch (err) {
err.message = filename + ': ' + err.message;
throw err;
}
};
}
function stripBOM(content) {
if (content.charCodeAt(0) === 0xFEFF) {
content = content.slice(1);
}
return content;
}