Skip to content

Commit 1cbef68

Browse files
committed
Add dependencies cache
1 parent 96ca651 commit 1cbef68

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

lib/dependencies.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
'use strict';
2+
3+
var cache = {};
4+
5+
// Add dependencies from cache in case of error
6+
exports.addFromCache = function(context) {
7+
add(context, get(context));
8+
};
9+
10+
// Add dependencies and from compiled template and save to cache
11+
exports.addAndSave = function(context, deps) {
12+
add(context, save(context, deps));
13+
};
14+
15+
function get(context) {
16+
return cache[context.resourcePath] || [];
17+
}
18+
19+
function save(context, deps) {
20+
cache[context.resourcePath] = deps;
21+
return get(context);
22+
}
23+
24+
function add(context, deps) {
25+
deps.forEach(function(dep) {
26+
context.addDependency(dep);
27+
});
28+
}

lib/ejs-html-loader.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
'use strict';
2+
3+
var parseQuery = require('loader-utils').parseQuery;
4+
var compile = require('ejs').compile;
5+
var dependencies = require('./dependencies');
6+
7+
module.exports = function ejsHtmlLoader(source) {
8+
this.cacheable();
9+
10+
var options = this.options;
11+
var query = parseQuery(this.query);
12+
var data = options.ejsHtmlLoader || options.ejsHtml || query;
13+
14+
var template;
15+
var rendered;
16+
17+
try {
18+
template = compile(source, {
19+
filename: this.resourcePath,
20+
delimiter: data.delimiter,
21+
context: data.context
22+
});
23+
rendered = template(data);
24+
} catch (e) {
25+
dependencies.addFromCache(this);
26+
throwError(e.message);
27+
}
28+
29+
dependencies.addAndSave(this, template.dependencies);
30+
return rendered;
31+
};
32+
33+
function throwError(message) {
34+
var err = new Error('ejs-html-loader\n' + message);
35+
Error.captureStackTrace(err, message);
36+
throw err;
37+
}

0 commit comments

Comments
 (0)