Skip to content

Commit

Permalink
deps: ini@4.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
wraithgar committed Apr 17, 2023
1 parent 5933841 commit 2c80b1e
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 50 deletions.
115 changes: 81 additions & 34 deletions node_modules/ini/lib/ini.js
Original file line number Diff line number Diff line change
@@ -1,49 +1,70 @@
const { hasOwnProperty } = Object.prototype

/* istanbul ignore next */
const eol = typeof process !== 'undefined' &&
process.platform === 'win32' ? '\r\n' : '\n'
const encode = (obj, opt = {}) => {
if (typeof opt === 'string') {
opt = { section: opt }
}
opt.align = opt.align === true
opt.newline = opt.newline === true
opt.sort = opt.sort === true
opt.whitespace = opt.whitespace === true || opt.align === true
/* istanbul ignore next */
opt.platform = opt.platform || process?.platform
opt.bracketedArray = opt.bracketedArray !== false

const encode = (obj, opt) => {
/* istanbul ignore next */
const eol = opt.platform === 'win32' ? '\r\n' : '\n'
const separator = opt.whitespace ? ' = ' : '='
const children = []
let out = ''

if (typeof opt === 'string') {
opt = {
section: opt,
whitespace: false,
}
} else {
opt = opt || Object.create(null)
opt.whitespace = opt.whitespace === true
const keys = opt.sort ? Object.keys(obj).sort() : Object.keys(obj)

let padToChars = 0
// If aligning on the separator, then padToChars is determined as follows:
// 1. Get the keys
// 2. Exclude keys pointing to objects unless the value is null or an array
// 3. Add `[]` to array keys
// 4. Ensure non empty set of keys
// 5. Reduce the set to the longest `safe` key
// 6. Get the `safe` length
if (opt.align) {
padToChars = safe(
(
keys
.filter(k => obj[k] === null || Array.isArray(obj[k]) || typeof obj[k] !== 'object')
.map(k => Array.isArray(obj[k]) ? `${k}[]` : k)
)
.concat([''])
.reduce((a, b) => safe(a).length >= safe(b).length ? a : b)
).length
}

const separator = opt.whitespace ? ' = ' : '='
let out = ''
const arraySuffix = opt.bracketedArray ? '[]' : ''

for (const k of Object.keys(obj)) {
for (const k of keys) {
const val = obj[k]
if (val && Array.isArray(val)) {
for (const item of val) {
out += safe(k + '[]') + separator + safe(item) + eol
out += safe(`${k}${arraySuffix}`).padEnd(padToChars, ' ') + separator + safe(item) + eol
}
} else if (val && typeof val === 'object') {
children.push(k)
} else {
out += safe(k) + separator + safe(val) + eol
out += safe(k).padEnd(padToChars, ' ') + separator + safe(val) + eol
}
}

if (opt.section && out.length) {
out = '[' + safe(opt.section) + ']' + eol + out
out = '[' + safe(opt.section) + ']' + (opt.newline ? eol + eol : eol) + out
}

for (const k of children) {
const nk = dotSplit(k).join('\\.')
const nk = splitSections(k, '.').join('\\.')
const section = (opt.section ? opt.section + '.' : '') + nk
const { whitespace } = opt
const child = encode(obj[k], {
...opt,
section,
whitespace,
})
if (out.length && child.length) {
out += eol
Expand All @@ -55,24 +76,44 @@ const encode = (obj, opt) => {
return out
}

const dotSplit = str =>
str.replace(/\1/g, '\u0002LITERAL\\1LITERAL\u0002')
.replace(/\\\./g, '\u0001')
.split(/\./)
.map(part =>
part.replace(/\1/g, '\\.')
.replace(/\2LITERAL\\1LITERAL\2/g, '\u0001'))
function splitSections (str, separator) {
var lastMatchIndex = 0
var lastSeparatorIndex = 0
var nextIndex = 0
var sections = []

do {
nextIndex = str.indexOf(separator, lastMatchIndex)

const decode = str => {
if (nextIndex !== -1) {
lastMatchIndex = nextIndex + separator.length

if (nextIndex > 0 && str[nextIndex - 1] === '\\') {
continue
}

sections.push(str.slice(lastSeparatorIndex, nextIndex))
lastSeparatorIndex = nextIndex + separator.length
}
} while (nextIndex !== -1)

sections.push(str.slice(lastSeparatorIndex))

return sections
}

const decode = (str, opt = {}) => {
opt.bracketedArray = opt.bracketedArray !== false
const out = Object.create(null)
let p = out
let section = null
// section |key = value
const re = /^\[([^\]]*)\]$|^([^=]+)(=(.*))?$/i
// section |key = value
const re = /^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i
const lines = str.split(/[\r\n]+/g)
const duplicates = {}

for (const line of lines) {
if (!line || line.match(/^\s*[;#]/)) {
if (!line || line.match(/^\s*[;#]/) || line.match(/^\s*$/)) {
continue
}
const match = line.match(re)
Expand All @@ -91,7 +132,13 @@ const decode = str => {
continue
}
const keyRaw = unsafe(match[2])
const isArray = keyRaw.length > 2 && keyRaw.slice(-2) === '[]'
let isArray
if (opt.bracketedArray) {
isArray = keyRaw.length > 2 && keyRaw.slice(-2) === '[]'
} else {
duplicates[keyRaw] = (duplicates?.[keyRaw] || 0) + 1
isArray = duplicates[keyRaw] > 1
}
const key = isArray ? keyRaw.slice(0, -2) : keyRaw
if (key === '__proto__') {
continue
Expand Down Expand Up @@ -132,7 +179,7 @@ const decode = str => {

// see if the parent section is also an object.
// if so, add it to that, and mark this one for deletion
const parts = dotSplit(k)
const parts = splitSections(k, '.')
p = out
const l = parts.pop()
const nl = l.replace(/\\\./g, '.')
Expand Down
20 changes: 12 additions & 8 deletions node_modules/ini/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"author": "GitHub Inc.",
"name": "ini",
"description": "An ini encoder/decoder for node",
"version": "3.0.1",
"version": "4.1.0",
"repository": {
"type": "git",
"url": "https://github.com/npm/ini.git"
Expand All @@ -15,15 +15,12 @@
"test": "tap",
"snap": "tap",
"posttest": "npm run lint",
"preversion": "npm test",
"postversion": "npm publish",
"prepublishOnly": "git push origin --follow-tags",
"postlint": "template-oss-check",
"template-oss-apply": "template-oss-apply --force"
},
"devDependencies": {
"@npmcli/eslint-config": "^3.0.1",
"@npmcli/template-oss": "3.5.0",
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/template-oss": "4.13.0",
"tap": "^16.0.1"
},
"license": "ISC",
Expand All @@ -32,10 +29,17 @@
"lib/"
],
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
"version": "3.5.0"
"version": "4.13.0",
"publish": "true"
},
"tap": {
"nyc-arg": [
"--exclude",
"tap-snapshots/**"
]
}
}
21 changes: 15 additions & 6 deletions package-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@
"glob": "^9.3.2",
"graceful-fs": "^4.2.11",
"hosted-git-info": "^6.1.1",
"ini": "^3.0.1",
"ini": "^4.1.0",
"init-package-json": "^5.0.0",
"is-cidr": "^4.0.2",
"json-parse-even-better-errors": "^3.0.0",
Expand Down Expand Up @@ -2295,6 +2295,15 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/@npmcli/template-oss/node_modules/ini": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz",
"integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==",
"dev": true,
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/@octokit/auth-token": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz",
Expand Down Expand Up @@ -6184,12 +6193,12 @@
"inBundle": true
},
"node_modules/ini": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz",
"integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-4.1.0.tgz",
"integrity": "sha512-HLR38RSF2iulAzc3I/sma4CoYxQP844rPYCNfzGDOHqa/YqVlwuuZgBx6M50/X8dKgzk0cm1qRg3+47mK2N+cQ==",
"inBundle": true,
"engines": {
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/init-package-json": {
Expand Down Expand Up @@ -15077,7 +15086,7 @@
"license": "ISC",
"dependencies": {
"@npmcli/map-workspaces": "^3.0.2",
"ini": "^3.0.0",
"ini": "^4.1.0",
"nopt": "^7.0.0",
"proc-log": "^3.0.0",
"read-package-json-fast": "^3.0.2",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
"glob": "^9.3.2",
"graceful-fs": "^4.2.11",
"hosted-git-info": "^6.1.1",
"ini": "^3.0.1",
"ini": "^4.1.0",
"init-package-json": "^5.0.0",
"is-cidr": "^4.0.2",
"json-parse-even-better-errors": "^3.0.0",
Expand Down
2 changes: 1 addition & 1 deletion workspaces/config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
},
"dependencies": {
"@npmcli/map-workspaces": "^3.0.2",
"ini": "^3.0.0",
"ini": "^4.1.0",
"nopt": "^7.0.0",
"proc-log": "^3.0.0",
"read-package-json-fast": "^3.0.2",
Expand Down

0 comments on commit 2c80b1e

Please sign in to comment.