/
installRulesetFile.js
55 lines (51 loc) · 1.31 KB
/
installRulesetFile.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
var fs = require("fs");
var path = require("path");
var mkdirp = require("mkdirp");
var compiler = require("krl-compiler");
var version_key = require("../package.json").version + "-" + require("krl-compiler/package.json").version;
var fsExist = function(file_path, callback){
fs.stat(file_path, function(err, stats){
if(err){
if(err.code === "ENOENT"){
return callback(undefined, false);
}else{
return callback(err);
}
}
callback(undefined, true);
});
};
var storeFile = function(file_path, src, callback){
mkdirp(path.dirname(file_path), function(err){
if(err) return callback(err);
fs.writeFile(file_path, src, {
encoding: "utf8"
}, callback);
});
};
module.exports = function(rulesets_dir, hash, krl_src, callback){
var file = path.resolve(
rulesets_dir,
version_key,
hash.substr(0, 2),
hash.substr(2, 2),
hash + ".js"
);
fsExist(file, function(err, does_exist){
if(err) return callback(err);
if(does_exist){
callback(undefined, require(file));
return;
}
var js_src;
try{
js_src = compiler(krl_src).code;
}catch(err){
return callback(err);
}
storeFile(file, js_src, function(err){
if(err) return callback(err);
callback(undefined, require(file));
});
});
};