🤠 Parser for object property paths with wildcards and regexps. 🌵
wild-wild-path
is a library which
gets/sets object properties using
dot-delimited paths,
wildcards,
regexps,
slices and
unions. wild-wild-parser
allows manipulating
its query format:
Hire me
Please
reach out
if you're looking for a Node.js API or CLI engineer (11 years of experience).
Most recently I have been Netlify Build's
and Netlify Plugins'
technical lead for 2.5 years. I am available for full-time remote positions.
Install
npm install wild-wild-parser
This package works in both Node.js >=18.18.0 and
browsers.
This is an ES module. It must be loaded using
an import
or import()
statement,
not require()
. If TypeScript is used, it must be configured to
output ES modules,
not CommonJS.
API
parseQuery(queryString)
queryString
QueryString
Return value: QueryArray
Convert a
query string into a
query array.
parseQuery('users.0.*')
parseQuery('users admins')
parseQuery('users./[/')
serializeQuery(queryArray)
queryArray
QueryArray
Return value: QueryString
Convert a query array
into a query string.
serializeQuery(['users', 0, { type: 'any' }])
serializeQuery([['users'], ['admins']])
serializeQuery([true])
normalizeQuery(query)
query
Query
Return value: QueryArray
If the query is a
query string, convert
it into a query array.
If it is already a query array, normalize it to a canonical form.
normalizeQuery('users.0.*')
normalizeQuery(['users'])
normalizeQuery([['users'], ['admins']])
normalizeQuery([{ type: 'slice' }])
normalizeQuery('users./[/')
normalizeQuery([true])
parsePath(pathString)
pathString
PathString
Return value: PathArray
Same as parseQuery()
but only for a
path query.
parsePath('users.0')
parsePath('*')
parsePath('users./[/')
serializePath(pathArray)
pathArray
PathArray
Return value: PathString
Same as serializeQuery()
but only for a
path query.
serializePath(['users', 0])
serializePath([{ type: 'any' }])
serializePath([true])
normalizePath(path)
path
Path
Return value: PathArray
Same as normalizeQuery()
but only for a
path query.
normalizePath('users.0')
normalizePath(['users', 0])
normalizePath('*')
normalizePath([true])
isSameQuery(firstQuery, secondQuery)
firstQuery
Query
secondQuery
Query
Return value: boolean
Return true
if both queries are the same, even if they use different formats
(string or
array) or if they are
syntactically different but semantically identical.
isSameQuery('users.0.*', 'users.0.*')
isSameQuery('users.0.*', ['users', 0, { type: 'any' }])
isSameQuery(['users', 0, { type: 'any' }], ['users', 0, { type: 'any' }])
isSameQuery('users.0.*', 'users.1.*')
isSameQuery('0:2', ':2')
isSameQuery([['user']], ['user'])
isSameQuery([true], 'user')
isSamePath(firstPath, secondPath)
firstPath
Path
secondPath
Path
Return value: boolean
Same as isSameQuery()
but only for a
path query.
isSamePath('user.name', 'user.name')
isSamePath('user.name', ['user', 'name'])
isSamePath(['user', 'name'], ['user', 'name'])
isSamePath('user.name', 'user.lastName')
isSamePath('*', 'user.name')
isSamePath([true], 'user.name')
isParentPath(parentPath, childPath)
parentPath
Path
childPath
Path
Return value: boolean
Return true
if the first argument is a parent path to the second. Queries that
are not paths cannot be used.
isParentPath('user', 'user.name')
isParentPath('user', 'user.settings.name')
isParentPath('user', ['user', 'settings', 'name'])
isParentPath(['user'], ['user', 'settings', 'name'])
isParentPath('user', 'user')
isParentPath('user.name', 'user')
isParentPath('user.name', 'user.settings')
isParentPath('*', 'user.name')
isParentPath([true], 'user.name')
isSameToken(firstToken, secondToken)
firstToken
Token
secondToken
Token
Return value: boolean
Same as isSameQuery()
but only for
query array individual
tokens.
isSameToken('user', 'user')
isSameToken('user', 'users')
isSameToken(2, 2)
isSameToken(0, -0)
isSameToken(/Name/, /Name/)
isSameToken(/Name/, /name/i)
isSameToken({ type: 'slice' }, { type: 'slice', from: 0 })
isSameToken('user', true)
getTokenType(token)
token
Token
Return value: string
Retrieve the type of a
query array individual
token among: "prop"
, "index"
, "slice"
, "regExp"
, "any"
or "anyDeep"
.
"unknown"
is returned if the token is invalid.
getTokenType('user')
getTokenType(0)
getTokenType(/Name/)
getTokenType({ type: 'slice', from: 0, to: 2 })
getTokenType({ type: 'any' })
getTokenType({ type: 'anyDeep' })
getTokenType(true)
Related projects
Support
For any question, don't hesitate to submit an issue on GitHub.
Everyone is welcome regardless of personal background. We enforce a
Code of conduct in order to promote a positive and
inclusive environment.
Contributing
This project was made with ❤️. The simplest way to give back is by starring and
sharing it online.
If the documentation is unclear or has a typo, please click on the page's Edit
button (pencil icon) and suggest a correction.
If you would like to help us fix a bug or add a new feature, please check our
guidelines. Pull requests are welcome!