-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy patheco-compiler.js
executable file
·97 lines (82 loc) · 2.39 KB
/
eco-compiler.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#!/usr/bin/env node
// inspired by https://github.com/sstephenson/eco/pull/33/files use it when it's merged instead of this.
eco = require("eco")
fs = require("fs")
function precompile(file, rebuild) {
fs.readFile(file, "utf-8", function(err, inEco) {
inJst = eco.precompile(inEco);
var newName = file.replace('.eco', '.jst').replace('eco/', 'templates/')
fs.writeFile(newName, inJst, function(err) {
if(err) {
console.log(err);
} else {
console.log("... " + newName + ' written');
if(rebuild) {
rebuildJST("templates/");
}
}
});
});
}
function watchFile(file) {
console.log("watching " + file);
fs.watchFile(file, function(stats, prevStats) {
if(stats.size !== prevStats.size || stats.mtime.getTime() !== prevStats.mtime.getTime()) {
console.log("change " + file);
precompile(file, true);
}
});
}
function watchDir(dir) {
fs.readdir(dir, function(err, files) {
var ecos = [];
for(i in files) {
var file = files[i];
if(file.match(/\.eco$/g)) {
ecos.push(file);
}
}
for(i in ecos) {
var file = ecos[i];
var path = dir + file;
watchFile(path);
precompile(path, i == (ecos.length - 1));
}
});
}
function rebuildJST(dir) {
fs.readdir(dir, function(err, files) {
var compiled = 'public/js/jst.js';
fs.open(compiled, 'w+', 0666, function(err, fdw) {
var bytesRead, fdr, fdw, pos;
var BUF_LENGTH = 64 * 1024;
var buff = new Buffer(BUF_LENGTH);
var s = "window.JST = {};\n";
buff.write(s)
fs.writeSync(fdw, buff, 0, s.length, null);
for(i in files) {
var file = files[i];
if(file.match(/\.jst$/g)) {
var path = dir + file;
var s = "JST['" + file.replace('.jst', '') + "'] = ";
buff.write(s);
fs.writeSync(fdw, buff, 0, s.length);
fdr = fs.openSync(path, 'r');
bytesRead = 1;
pos = 0;
while (bytesRead > 0) {
bytesRead = fs.readSync(fdr, buff, 0, BUF_LENGTH, pos);
fs.writeSync(fdw, buff, 0, bytesRead);
pos += bytesRead;
}
fs.closeSync(fdr);
buff.write(";\n");
fs.writeSync(fdw, buff, 0, 2);
}
}
console.log("... " + compiled + ' written');
});
});
}
watchDir("eco/")
// rebuildJST("templates/")