Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
object-scan
Advanced tools
Find Keys using Wildcard matching and optional value function.
Install with npm:
$ npm install --save object-scan
const objectScan = require('object-scan');
objectScan(['a.*.f'])({ a: { b: { c: 'd' }, e: { f: 'g' } } });
// => [ 'a.e.f' ]
key.path
and [1]
*
and [*]
mark*
or [1*]
**
{a,b}
and [{0,1}]
Note on Functions:
Signature for all functions is Fn(key, value, { parents, isMatch, needle, needles })
, where:
key
is the key that the function is called for (respects joined
option).value
is the value of that key.parents
is an array containing all parents as [parent, grandparent, ...]
. Contains parents that are arrays only iff useArraySelector
is true.isMatch
is true if this is a valid (intermittent) result.needle
is the needle that matches if isMatch
is true, otherwise null
.needles
are all needles that triggered the function call.Type: function
Default: undefined
Called for every intermittent result. If function is defined and returns false, the entry is excluded from the final result.
This method is conceptually similar to Array.filter().
Type: function
Default: undefined
Called for every key (at least once) that could be (part of) a match. If function is defined and returns true, all nested entries under the current key are excluded from search and from the final result.
Type: function
Default: undefined
Called for every final result.
Type: function
Default: undefined
Called when useArraySelector
is false
for every array that contains top level matches.
Type: boolean
Default: true
Can be set to false to return each key as a list. When dealing with special characters this can be useful.
Important: Setting this to false
improves performance.
Type: boolean
Default: false
When set to true
, the results are ordered in a way that they can be safely deleted from the input in order.
Important: Can only be set to true
when joined is set to false
.
Type: boolean
Default: `true
When set to false, joined paths for functions and the final result are not escaped.
Type: boolean
Default: `true
When set to false no array selectors are used and arrays are automatically traversed.
More extensive examples can be found in the tests.
const objectScan = require('object-scan');
const obj = {
a: {
b: {
c: 'd'
},
e: {
f: 'g'
},
h: ['i', 'j']
},
k: 'l'
};
// top level keys
objectScan(['*'])(obj);
// => ["a", "k"]
// nested keys
objectScan(['a.*.f'])(obj);
// => ["a.e.f"]
objectScan(['*.*.*'])(obj);
// => ["a.b.c", "a.e.f"]
// or filter
objectScan(['a.*.{c,f}'])(obj);
// => ["a.b.c", "a.e.f"]
objectScan(['a.*.{c,f}'], { joined: false })(obj);
// => [["a", "b", "c"], ["a", "e", "f"]]
// list filter
objectScan(['*.*[*]'])(obj);
// => ["a.h[0]", "a.h[1]"]
objectScan(['*[*]'])(obj);
// => []
// deep star filter
objectScan(['**'])(obj);
// => ["a", "a.b", "a.b.c", "a.e", "a.e.f", "a.h", "a.h[0]", "a.h[1]", "k"]
objectScan(['**.f'])(obj);
// => ["a.e.f"]
objectScan(['**[*]'])(obj);
// => ["a.h[0]", "a.h[1]"]
// value function
objectScan(['**'], { filterFn: (key, value) => typeof value === 'string' })(obj);
// => ["a.b.c", "a.e.f", "a.h[0]", "a.h[1]", "k"]
objectScan(['**'], { breakFn: key => key === 'a.b' })(obj);
// => ["a", "a.b", "a.e", "a.e.f", "a.h", "a.h[0]", "a.h[1]", "k"]
The empty needle ""
matches top level object(s). Useful for matching objects nested in arrays by setting useArraySelector
to false
. Note that the empty string does not work with _.get and _.set.
The following Characters are considered special and need to
be escaped if they should be matched in a key: [
, ]
, {
, }
, ,
, .
and *
.
When dealing with special characters the joined
option might be desirable to set to false
.
FAQs
Traverse object hierarchies using matching and callbacks.
The npm package object-scan receives a total of 12,506 weekly downloads. As such, object-scan popularity was classified as popular.
We found that object-scan demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.