You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lokinet/contrib/node-monitor/ini.js

62 lines
1.7 KiB
JavaScript

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)
//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] = {}
config[section][key] = value
continue
}
console.error('config [' + section + '] not section or key/value pair', line)
}
return config
}
function jsonToINI(json) {
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,
}