-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
82 lines (63 loc) · 1.57 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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
'use strict';
var fs = require('fs');
var path = require('path');
var dot = require('dot');
var cache = {}; // view cache
var read = fs.readFileSync;
var prod = (process.env.NODE_ENV === 'production');
function include (cwd, options) {
return function (file) {
file = path.resolve(cwd, file);
var defines = dot.defines || {};
var parentInclude;
// Preserve parent include
if (defines.include) {
parentInclude = defines.include;
}
var def = merge(defines, {'include' : include(path.dirname(file), options)});
var pagefn;
try {
pagefn = dot.template(load(file, options), undefined, def);
} catch (error) {
throw error;
}
if (parentInclude) {
dot.defines.include = parentInclude;
}
return pagefn(options);
}
}
function load (file, options) {
var opts = options || {};
var view;
file = path.resolve(file);
if (cache[file]) {
return cache[file];
}
view = read(file, 'utf8');
if (opts.cache || (!opts.cacheOff && prod)) {
cache[file] = view;
}
return view;
}
function merge (a, b) {
if (a && b) {
for (var key in b) {
a[key] = b[key];
}
}
return a;
}
function renderFile (file, options, fn) {
var def = merge(dot.defines || {}, {'include' : include(path.dirname(file), options)});
var pagefn;
try {
pagefn = dot.template(load(file, options), undefined, def);
} catch (error) {
return fn(error);
}
fn(null, pagefn(options));
}
module.exports = dot;
module.exports.renderFile = renderFile;
module.exports.cache = cache;