diff --git a/node_modules/@npmcli/config/package.json b/node_modules/@npmcli/config/package.json index f8334ab51dbb5..26581f385c386 100644 --- a/node_modules/@npmcli/config/package.json +++ b/node_modules/@npmcli/config/package.json @@ -1,6 +1,6 @@ { "name": "@npmcli/config", - "version": "1.2.6", + "version": "1.2.7", "files": [ "lib" ], @@ -27,7 +27,7 @@ "tap": "^14.10.8" }, "dependencies": { - "ini": "^1.3.5", + "ini": "^2.0.0", "mkdirp-infer-owner": "^2.0.0", "nopt": "^5.0.0", "semver": "^7.3.4", diff --git a/node_modules/ini/ini.js b/node_modules/ini/ini.js index b576f08d7a6bb..7d05a719b066c 100644 --- a/node_modules/ini/ini.js +++ b/node_modules/ini/ini.js @@ -1,16 +1,11 @@ -exports.parse = exports.decode = decode +const { hasOwnProperty } = Object.prototype -exports.stringify = exports.encode = encode - -exports.safe = safe -exports.unsafe = unsafe - -var eol = typeof process !== 'undefined' && +const eol = typeof process !== 'undefined' && process.platform === 'win32' ? '\r\n' : '\n' -function encode (obj, opt) { - var children = [] - var out = '' +const encode = (obj, opt) => { + const children = [] + let out = '' if (typeof opt === 'string') { opt = { @@ -18,93 +13,90 @@ function encode (obj, opt) { whitespace: false, } } else { - opt = opt || {} + opt = opt || Object.create(null) opt.whitespace = opt.whitespace === true } - var separator = opt.whitespace ? ' = ' : '=' + const separator = opt.whitespace ? ' = ' : '=' - Object.keys(obj).forEach(function (k, _, __) { - var val = obj[k] + for (const k of Object.keys(obj)) { + const val = obj[k] if (val && Array.isArray(val)) { - val.forEach(function (item) { + for (const item of val) out += safe(k + '[]') + separator + safe(item) + '\n' - }) } else if (val && typeof val === 'object') children.push(k) else out += safe(k) + separator + safe(val) + eol - }) + } if (opt.section && out.length) out = '[' + safe(opt.section) + ']' + eol + out - children.forEach(function (k, _, __) { - var nk = dotSplit(k).join('\\.') - var section = (opt.section ? opt.section + '.' : '') + nk - var child = encode(obj[k], { - section: section, - whitespace: opt.whitespace, + for (const k of children) { + const nk = dotSplit(k).join('\\.') + const section = (opt.section ? opt.section + '.' : '') + nk + const { whitespace } = opt + const child = encode(obj[k], { + section, + whitespace, }) if (out.length && child.length) out += eol out += child - }) + } return out } -function dotSplit (str) { - return str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002') +const dotSplit = str => + str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002') .replace(/\\\./g, '\u0001') - .split(/\./).map(function (part) { - return part.replace(/\1/g, '\\.') - .replace(/\2LITERAL\\1LITERAL\2/g, '\u0001') - }) -} - -function decode (str) { - var out = {} - var p = out - var section = null + .split(/\./) + .map(part => + part.replace(/\1/g, '\\.') + .replace(/\2LITERAL\\1LITERAL\2/g, '\u0001')) + +const decode = str => { + const out = Object.create(null) + let p = out + let section = null // section |key = value - var re = /^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i - var lines = str.split(/[\r\n]+/g) + const re = /^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i + const lines = str.split(/[\r\n]+/g) - lines.forEach(function (line, _, __) { + for (const line of lines) { if (!line || line.match(/^\s*[;#]/)) - return - var match = line.match(re) + continue + const match = line.match(re) if (!match) - return + continue 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 = Object.create(null) + continue } - p = out[section] = out[section] || {} - return + p = out[section] = out[section] || Object.create(null) + continue } - var key = unsafe(match[2]) + const keyRaw = unsafe(match[2]) + const isArray = keyRaw.length > 2 && keyRaw.slice(-2) === '[]' + const key = isArray ? keyRaw.slice(0, -2) : keyRaw if (key === '__proto__') - return - var value = match[3] ? unsafe(match[4]) : true - switch (value) { - case 'true': - case 'false': - case 'null': value = JSON.parse(value) - } + continue + const valueRaw = match[3] ? unsafe(match[4]) : true + const value = valueRaw === 'true' || + valueRaw === 'false' || + valueRaw === 'null' ? JSON.parse(valueRaw) + : valueRaw // Convert keys with '[]' suffix to an array - if (key.length > 2 && key.slice(-2) === '[]') { - key = key.substring(0, key.length - 2) - if (key === '__proto__') - return - if (!p[key]) + if (isArray) { + if (!hasOwnProperty.call(p, key)) p[key] = [] else if (!Array.isArray(p[key])) p[key] = [p[key]] @@ -116,48 +108,48 @@ function decode (str) { p[key].push(value) else p[key] = value - }) + } // {a:{y:1},"a.b":{x:2}} --> {a:{y:1,b:{x:2}}} // use a filter to return the keys that have to be deleted. - Object.keys(out).filter(function (k, _, __) { - if (!out[k] || - typeof out[k] !== 'object' || - Array.isArray(out[k])) - return false + const remove = [] + for (const k of Object.keys(out)) { + if (!hasOwnProperty.call(out, k) || + typeof out[k] !== 'object' || + Array.isArray(out[k])) + continue // see if the parent section is also an object. // if so, add it to that, and mark this one for deletion - var parts = dotSplit(k) - var p = out - var l = parts.pop() - var nl = l.replace(/\\\./g, '.') - parts.forEach(function (part, _, __) { + const parts = dotSplit(k) + let p = out + const l = parts.pop() + const nl = l.replace(/\\\./g, '.') + for (const part of parts) { if (part === '__proto__') - return - if (!p[part] || typeof p[part] !== 'object') - p[part] = {} + continue + if (!hasOwnProperty.call(p, part) || typeof p[part] !== 'object') + p[part] = Object.create(null) p = p[part] - }) + } if (p === out && nl === l) - return false + continue p[nl] = out[k] - return true - }).forEach(function (del, _, __) { + remove.push(k) + } + for (const del of remove) delete out[del] - }) return out } -function isQuoted (val) { - return (val.charAt(0) === '"' && val.slice(-1) === '"') || +const isQuoted = val => + (val.charAt(0) === '"' && val.slice(-1) === '"') || (val.charAt(0) === "'" && val.slice(-1) === "'") -} -function safe (val) { - return (typeof val !== 'string' || +const safe = val => + (typeof val !== 'string' || val.match(/[=\r\n]/) || val.match(/^\[/) || (val.length > 1 && @@ -165,9 +157,8 @@ function safe (val) { val !== val.trim()) ? JSON.stringify(val) : val.replace(/;/g, '\\;').replace(/#/g, '\\#') -} -function unsafe (val, doUnesc) { +const unsafe = (val, doUnesc) => { val = (val || '').trim() if (isQuoted(val)) { // remove the single quotes before calling JSON.parse @@ -179,10 +170,10 @@ function unsafe (val, doUnesc) { } catch (_) {} } else { // walk the val to find the first not-escaped ; character - var esc = false - var unesc = '' - for (var i = 0, l = val.length; i < l; i++) { - var c = val.charAt(i) + let esc = false + let unesc = '' + for (let i = 0, l = val.length; i < l; i++) { + const c = val.charAt(i) if (esc) { if ('\\;#'.indexOf(c) !== -1) unesc += c @@ -204,3 +195,12 @@ function unsafe (val, doUnesc) { } return val } + +module.exports = { + parse: decode, + decode, + stringify: encode, + encode, + safe, + unsafe, +} diff --git a/node_modules/ini/package.json b/node_modules/ini/package.json index c830a3556ef82..59b7d5d0ad99b 100644 --- a/node_modules/ini/package.json +++ b/node_modules/ini/package.json @@ -2,7 +2,7 @@ "author": "Isaac Z. Schlueter (http://blog.izs.me/)", "name": "ini", "description": "An ini encoder/decoder for node", - "version": "1.3.8", + "version": "2.0.0", "repository": { "type": "git", "url": "git://github.com/isaacs/ini.git" @@ -29,5 +29,8 @@ "license": "ISC", "files": [ "ini.js" - ] + ], + "engines": { + "node": ">=10" + } } diff --git a/package-lock.json b/package-lock.json index 4564ba22fdc65..46727fcf60439 100644 --- a/package-lock.json +++ b/package-lock.json @@ -358,7 +358,7 @@ "dependencies": { "@npmcli/arborist": "^2.0.1", "@npmcli/ci-detect": "^1.2.0", - "@npmcli/config": "^1.2.6", + "@npmcli/config": "^1.2.7", "@npmcli/run-script": "^1.8.1", "abbrev": "~1.1.1", "ansicolors": "~0.3.2", @@ -376,7 +376,7 @@ "glob": "^7.1.4", "graceful-fs": "^4.2.3", "hosted-git-info": "^3.0.6", - "ini": "^1.3.8", + "ini": "^2.0.0", "init-package-json": "^2.0.1", "is-cidr": "^4.0.2", "leven": "^3.1.0", @@ -724,12 +724,12 @@ "inBundle": true }, "node_modules/@npmcli/config": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-1.2.6.tgz", - "integrity": "sha512-qCH3njpc4El2l92BS1oa47wy1SRyWuQGC0RqiP2n/wbS7tdbQenwbuPIUxgQ9FY4sq2uMVrNQFIgdhMNM+OYKg==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-1.2.7.tgz", + "integrity": "sha512-zV1xhCK91UegZO03G7BdNSRMCTDVMB1UI31XDbZ8bjUB/8rUuFvbYoIRzZDMyUPT24ltzLQC15Ub2bzgg0ORSg==", "inBundle": true, "dependencies": { - "ini": "^1.3.5", + "ini": "^2.0.0", "mkdirp-infer-owner": "^2.0.0", "nopt": "^5.0.0", "semver": "^7.3.4", @@ -3548,10 +3548,13 @@ "inBundle": true }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "inBundle": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "inBundle": true, + "engines": { + "node": ">=10" + } }, "node_modules/init-package-json": { "version": "2.0.1", @@ -5699,6 +5702,12 @@ "rc": "cli.js" } }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -9898,11 +9907,11 @@ "integrity": "sha512-oN3y7FAROHhrAt7Rr7PnTSwrHrZVRTS2ZbyxeQwSSYD0ifwM3YNgQqbaRmjcWoPyq77MjchusjJDspbzMmip1Q==" }, "@npmcli/config": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-1.2.6.tgz", - "integrity": "sha512-qCH3njpc4El2l92BS1oa47wy1SRyWuQGC0RqiP2n/wbS7tdbQenwbuPIUxgQ9FY4sq2uMVrNQFIgdhMNM+OYKg==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-1.2.7.tgz", + "integrity": "sha512-zV1xhCK91UegZO03G7BdNSRMCTDVMB1UI31XDbZ8bjUB/8rUuFvbYoIRzZDMyUPT24ltzLQC15Ub2bzgg0ORSg==", "requires": { - "ini": "^1.3.5", + "ini": "^2.0.0", "mkdirp-infer-owner": "^2.0.0", "nopt": "^5.0.0", "semver": "^7.3.4", @@ -11976,9 +11985,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" }, "init-package-json": { "version": "2.0.1", @@ -13545,6 +13554,12 @@ "strip-json-comments": "~2.0.1" }, "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", diff --git a/package.json b/package.json index 89cb0e6aad7f0..e0a85caa20990 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "dependencies": { "@npmcli/arborist": "^2.0.1", "@npmcli/ci-detect": "^1.2.0", - "@npmcli/config": "^1.2.6", + "@npmcli/config": "^1.2.7", "@npmcli/run-script": "^1.8.1", "abbrev": "~1.1.1", "ansicolors": "~0.3.2", @@ -62,7 +62,7 @@ "glob": "^7.1.4", "graceful-fs": "^4.2.3", "hosted-git-info": "^3.0.6", - "ini": "^1.3.8", + "ini": "^2.0.0", "init-package-json": "^2.0.1", "is-cidr": "^4.0.2", "leven": "^3.1.0",