Comparing version
86
ini.js
@@ -18,3 +18,3 @@ exports.parse = exports.decode = decode | ||
section: opt, | ||
whitespace: false | ||
whitespace: false, | ||
} | ||
@@ -34,12 +34,10 @@ } else { | ||
}) | ||
} else if (val && typeof val === 'object') { | ||
} else if (val && typeof val === 'object') | ||
children.push(k) | ||
} else { | ||
else | ||
out += safe(k) + separator + safe(val) + eol | ||
} | ||
}) | ||
if (opt.section && out.length) { | ||
if (opt.section && out.length) | ||
out = '[' + safe(opt.section) + ']' + eol + out | ||
} | ||
@@ -51,7 +49,7 @@ children.forEach(function (k, _, __) { | ||
section: section, | ||
whitespace: opt.whitespace | ||
whitespace: opt.whitespace, | ||
}) | ||
if (out.length && child.length) { | ||
if (out.length && child.length) | ||
out += eol | ||
} | ||
out += child | ||
@@ -68,3 +66,3 @@ }) | ||
return part.replace(/\1/g, '\\.') | ||
.replace(/\2LITERAL\\1LITERAL\2/g, '\u0001') | ||
.replace(/\2LITERAL\\1LITERAL\2/g, '\u0001') | ||
}) | ||
@@ -82,7 +80,15 @@ } | ||
lines.forEach(function (line, _, __) { | ||
if (!line || line.match(/^\s*[;#]/)) return | ||
if (!line || line.match(/^\s*[;#]/)) | ||
return | ||
var match = line.match(re) | ||
if (!match) return | ||
if (!match) | ||
return | ||
if (match[1] !== undefined) { | ||
section = unsafe(match[1]) | ||
if (section === '__proto__') { | ||
// not allowed | ||
// keep parsing the section, but don't attach it. | ||
p = {} | ||
return | ||
} | ||
p = out[section] = out[section] || {} | ||
@@ -92,2 +98,4 @@ return | ||
var key = unsafe(match[2]) | ||
if (key === '__proto__') | ||
return | ||
var value = match[3] ? unsafe(match[4]) : true | ||
@@ -103,7 +111,8 @@ switch (value) { | ||
key = key.substring(0, key.length - 2) | ||
if (!p[key]) { | ||
if (key === '__proto__') | ||
return | ||
if (!p[key]) | ||
p[key] = [] | ||
} else if (!Array.isArray(p[key])) { | ||
else if (!Array.isArray(p[key])) | ||
p[key] = [p[key]] | ||
} | ||
} | ||
@@ -113,7 +122,6 @@ | ||
// array by accidentally forgetting the brackets | ||
if (Array.isArray(p[key])) { | ||
if (Array.isArray(p[key])) | ||
p[key].push(value) | ||
} else { | ||
else | ||
p[key] = value | ||
} | ||
}) | ||
@@ -126,5 +134,5 @@ | ||
typeof out[k] !== 'object' || | ||
Array.isArray(out[k])) { | ||
Array.isArray(out[k])) | ||
return false | ||
} | ||
// see if the parent section is also an object. | ||
@@ -137,8 +145,11 @@ // if so, add it to that, and mark this one for deletion | ||
parts.forEach(function (part, _, __) { | ||
if (!p[part] || typeof p[part] !== 'object') p[part] = {} | ||
if (part === '__proto__') | ||
return | ||
if (!p[part] || typeof p[part] !== 'object') | ||
p[part] = {} | ||
p = p[part] | ||
}) | ||
if (p === out && nl === l) { | ||
if (p === out && nl === l) | ||
return false | ||
} | ||
p[nl] = out[k] | ||
@@ -165,4 +176,4 @@ return true | ||
val !== val.trim()) | ||
? JSON.stringify(val) | ||
: val.replace(/;/g, '\\;').replace(/#/g, '\\#') | ||
? JSON.stringify(val) | ||
: val.replace(/;/g, '\\;').replace(/#/g, '\\#') | ||
} | ||
@@ -174,6 +185,8 @@ | ||
// remove the single quotes before calling JSON.parse | ||
if (val.charAt(0) === "'") { | ||
if (val.charAt(0) === "'") | ||
val = val.substr(1, val.length - 2) | ||
} | ||
try { val = JSON.parse(val) } catch (_) {} | ||
try { | ||
val = JSON.parse(val) | ||
} catch (_) {} | ||
} else { | ||
@@ -186,19 +199,18 @@ // walk the val to find the first not-escaped ; character | ||
if (esc) { | ||
if ('\\;#'.indexOf(c) !== -1) { | ||
if ('\\;#'.indexOf(c) !== -1) | ||
unesc += c | ||
} else { | ||
else | ||
unesc += '\\' + c | ||
} | ||
esc = false | ||
} else if (';#'.indexOf(c) !== -1) { | ||
} else if (';#'.indexOf(c) !== -1) | ||
break | ||
} else if (c === '\\') { | ||
else if (c === '\\') | ||
esc = true | ||
} else { | ||
else | ||
unesc += c | ||
} | ||
} | ||
if (esc) { | ||
if (esc) | ||
unesc += '\\' | ||
} | ||
return unesc.trim() | ||
@@ -205,0 +217,0 @@ } |
@@ -5,3 +5,3 @@ { | ||
"description": "An ini encoder/decoder for node", | ||
"version": "1.3.5", | ||
"version": "1.3.8", | ||
"repository": { | ||
@@ -13,15 +13,18 @@ "type": "git", | ||
"scripts": { | ||
"pretest": "standard ini.js", | ||
"test": "tap test/*.js --100 -J", | ||
"eslint": "eslint", | ||
"lint": "npm run eslint -- ini.js test/*.js", | ||
"lintfix": "npm run lint -- --fix", | ||
"test": "tap", | ||
"posttest": "npm run lint", | ||
"preversion": "npm test", | ||
"postversion": "npm publish", | ||
"postpublish": "git push origin --all; git push origin --tags" | ||
"prepublishOnly": "git push origin --follow-tags" | ||
}, | ||
"engines": { | ||
"node": "*" | ||
}, | ||
"dependencies": {}, | ||
"devDependencies": { | ||
"standard": "^10.0.3", | ||
"tap": "^10.7.3 || 11" | ||
"eslint": "^7.9.0", | ||
"eslint-plugin-import": "^2.22.0", | ||
"eslint-plugin-node": "^11.1.0", | ||
"eslint-plugin-promise": "^4.2.1", | ||
"eslint-plugin-standard": "^4.0.1", | ||
"tap": "14" | ||
}, | ||
@@ -28,0 +31,0 @@ "license": "ISC", |
Deprecated
MaintenanceThe maintainer of the package marked it as deprecated. This could indicate that a single version should not be used, or that the package is no longer maintained and any new vulnerabilities will not be fixed.
Found 1 instance in 1 package
9304
4.16%180
3.45%0
-100%6
200%