-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
ini.js
66 lines (63 loc) · 1.88 KB
/
ini.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
function iniToJSON(data) {
const lines = data.split(/\n/)
var section = 'unknown'
var config = {}
for (var i in lines) {
var line = lines[i].trim()
if (line.match(/#/)) {
var parts = line.split(/#/)
line = parts[0].trim()
}
// done reducing
if (!line) continue
// check for section
if (line[0] == '[' && line[line.length - 1] == ']') {
section = line.substring(1, line.length - 1).toLowerCase()
//console.log('found section', section)
continue
}
// key value pair
if (line.match(/=/)) {
var parts = line.split(/=/)
var key = parts.shift().trim()
var value = parts.join('=').trim()
if (value === 'true') value = true
if (value === 'false') value = false
//console.log('key/pair ['+section+']', key, '=', value)
if (config[section] === undefined) config[section] = {}
if ((value[0] == '"' && value[value.length - 1] == '"') ||
(value[0] == "'" && value[value.length - 1] == "'")) {
value = value.slice(1, -1)
}
config[section][key] = value
continue
}
console.error('config [' + section + '] not section or key/value pair', line)
}
return config
}
function jsonToINI(json) {
var lastSection = 'unknown'
var config = ''
for (var section in json) {
config += "\n" + '[' + section + ']' + "\n"
var keys = json[section]
for (var key in keys) {
//console.log('key', key, 'value', keys[key])
// if keys[key] is an array, then we need to send the same key each time
if (keys[key] !== undefined && keys[key].constructor.name == 'Array') {
for (var i in keys[key]) {
var v = keys[key][i]
config += key + '=' + v + "\n"
}
} else {
config += key + '=' + keys[key] + "\n"
}
}
}
return config
}
module.exports = {
iniToJSON: iniToJSON,
jsonToINI: jsonToINI,
}