UNPKG

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