-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmake-toml.js
89 lines (78 loc) · 1.89 KB
/
make-toml.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
/**
* @file make-toml.js
* @author tartpvule
* @license MIT
* @version 1
*
* Usage:
* node make-toml.js resolvers.md routes.json template.toml
*/
// @ts-check
'use strict';
// template.toml
const CONFIG_SUBSTR_DISABLED_NAMES = 'disabled_server_names = [\'<TEMPLATE>\']';
const CONFIG_SUBSTR_ROUTES = 'routes = [ { server_name=\'<TEMPLATE>\', via=[\'anon-<TEMPLATE>\'] } ]';
const fs = require('fs');
const parsers = require('./parsers.js');
let resolvers_md_content = fs.readFileSync(process.argv[2], {
encoding: 'utf8'
});
let resolvers_md = parsers.parseMD(resolvers_md_content);
let routes_json = fs.readFileSync(process.argv[3], {
encoding: 'utf8'
});
let routes = JSON.parse(routes_json);
let template_toml = fs.readFileSync(process.argv[4], {
encoding: 'utf8'
});
let out_disabled_names = [];
let out_routes = [];
for (let resolver_name in resolvers_md) {
if (!(resolver_name in routes)) {
out_disabled_names.push(resolver_name);
continue;
}
out_routes.push({
server_name: resolver_name,
via: routes[resolver_name]
});
}
let output = template_toml
.replace(CONFIG_SUBSTR_DISABLED_NAMES, 'disabled_server_names = ' + toTOML(out_disabled_names))
.replace(CONFIG_SUBSTR_ROUTES, 'routes = ' + toTOML(out_routes))
;
console.log(output);
/**
* @param {Object} obj
*/
function toTOML(obj) {
// not supporting non-string primitives
if (Array.isArray(obj)) {
if (obj.length === 0) {
return '[]';
} else {
let str;
if (typeof obj[0] === 'object') {
str = obj.map(function(v) {
return toTOML(v);
}).join(',');
} else {
str = '\'' + obj.join('\',\'') + '\'';
}
return '[' + str + ']';
}
} else {
let output = [];
for (let name in obj) {
let val = obj[name];
let str;
if (typeof val === 'object') {
str = toTOML(val);
} else {
str = '\'' + val + '\'';
}
output.push(name + '=' + str);
}
return '{' + output.join(',') + '}';
}
}