You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
'use strict'
|
|
|
|
|
|
|
|
|
|
const rx = require('./rx')
|
|
|
|
|
|
|
|
|
|
module.exports = parse
|
|
|
|
|
|
|
|
|
|
function parse ({ paths }) {
|
|
|
|
|
const wildcards = []
|
|
|
|
|
var wcLen = 0
|
|
|
|
|
const secret = paths.reduce(function (o, strPath, ix) {
|
|
|
|
|
var path = strPath.match(rx).map((p) => p.replace(/'|"|`/g, ''))
|
|
|
|
|
const leadingBracket = strPath[0] === '['
|
|
|
|
|
path = path.map((p) => {
|
|
|
|
|
if (p[0] === '[') return p.substr(1, p.length - 2)
|
|
|
|
|
else return p
|
|
|
|
|
})
|
|
|
|
|
const star = path.indexOf('*')
|
|
|
|
|
if (star > -1) {
|
|
|
|
|
const before = path.slice(0, star)
|
|
|
|
|
const beforeStr = before.join('.')
|
|
|
|
|
const after = path.slice(star + 1, path.length)
|
|
|
|
|
if (after.indexOf('*') > -1) throw Error('fast-redact – Only one wildcard per path is supported')
|
|
|
|
|
const nested = after.length > 0
|
|
|
|
|
wcLen++
|
|
|
|
|
wildcards.push({
|
|
|
|
|
before,
|
|
|
|
|
beforeStr,
|
|
|
|
|
after,
|
|
|
|
|
nested
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
o[strPath] = {
|
|
|
|
|
path: path,
|
|
|
|
|
val: undefined,
|
|
|
|
|
precensored: false,
|
|
|
|
|
circle: '',
|
|
|
|
|
escPath: JSON.stringify(strPath),
|
|
|
|
|
leadingBracket: leadingBracket
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return o
|
|
|
|
|
}, {})
|
|
|
|
|
|
|
|
|
|
return { wildcards, wcLen, secret }
|
|
|
|
|
}
|