-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
81 lines (67 loc) · 1.87 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
var fs = require('fs');
var Jade = require('jade');
var crypto = require('crypto');
var cache = Object.create(null);
exports = module.exports = function (options) {
options = options || {};
return function jade(file, done) {
if (file.extension !== 'jade') return done();
file.read(function (err, string) {
if (err) return done(err);
// don't cache between environments
var dev = this.dev ? '1' : '0';
var compile = options.string ? '1' : '0';
var hash = dev + compile + calculate(string);
var opts = {
filename: file.filename,
pretty: options.pretty,
self: options.self,
debug: options.debug,
compileDebug: this.dev,
compiler: options.compiler,
globals: options.globals,
};
// compile into HTML string
if (options.string) {
try {
file.string =
cache[hash] = cache[hash]
|| JSON.stringify(Jade.render(string, opts));
} catch (err) {
done(err);
return;
}
file.extension = 'html';
file.define = true;
done();
return
}
// compile into a JS fn
var res;
try {
res =
cache[hash] = cache[hash]
|| Jade.compileClient(string, opts);
} catch (err) {
done(err);
return;
}
file.extension = 'js';
if (options.runtime) {
file.string = res;
file.define = true;
} else {
file.string = 'var jade = require("jade");\n'
+ 'module.exports = ' + res;
}
done();
})
}
}
// smaller browser-specific runtime
exports.runtime = '(function (exports) {\n'
+ fs.readFileSync(require.resolve('jade/lib/runtime'), 'utf8')
+ '\n})(this.jade = {});\n\n';
function calculate(string) {
return crypto.createHash('sha256').update(string).digest('hex');
}