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 [..., grandparent, parent]
(includes arrays 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 true, the entry is excluded from the final result.
Type: function
Default: undefined
Called for every potential (partial) result at least once. 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: 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: `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(["**"], { excludeFn: (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 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.