UNPKG

2 kBJavaScriptView Raw
1'use strict';
2
3const Fs = require('fs');
4const Path = require('path');
5
6
7const internals = {
8 fileCache: {},
9 transforms: [{ ext: '.js', transform: null }]
10};
11
12
13exports.install = function (settings, primeFn) {
14
15 if (Array.isArray(settings.transform)) {
16 for (const element of settings.transform) {
17 if (element.ext === '.js') {
18 internals.transforms[0].transform = element.transform;
19 }
20 else {
21 internals.transforms.push(element);
22 }
23 }
24 }
25
26 if (typeof primeFn !== 'function') {
27 primeFn = internals.prime;
28 }
29
30 for (const transform of internals.transforms) {
31 primeFn(transform.ext);
32 }
33};
34
35
36internals.prime = function (extension) {
37
38 require.extensions[extension] = function (localModule, filename) {
39
40 const src = Fs.readFileSync(filename, 'utf8');
41 return localModule._compile(exports.transform(filename, src), filename);
42 };
43};
44
45
46exports.transform = function (filename, content) {
47
48 let ext = '';
49 let transform = null;
50
51 internals.transforms.forEach((element) => {
52
53 ext = element.ext;
54 if (filename.indexOf(ext, filename.length - ext.length) !== -1) {
55 transform = element.transform;
56 }
57 });
58
59 const relativeFilename = Path.relative(process.cwd(), filename);
60 internals.fileCache[relativeFilename] = (typeof transform === 'function') ? transform(content, relativeFilename) : content;
61 return internals.fileCache[relativeFilename];
62};
63
64
65exports.retrieveFile = function (path) {
66
67 const cwd = process.cwd();
68 const cacheKey = path.indexOf(cwd) === 0 ? path.substr(cwd.length + 1) : path;
69 if (internals.fileCache[cacheKey]) {
70 return internals.fileCache[cacheKey];
71 }
72
73 let contents = null;
74 try {
75 contents = Fs.readFileSync(path, 'utf8');
76 }
77 catch (e) {
78 contents = null;
79 }
80
81 internals.fileCache[path] = contents;
82
83 return contents;
84};