🚨 Shai-Hulud Strikes Again:834 Packages Compromised.Technical Analysis →
Socket
Book a DemoInstallSign in
Socket

honnold

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

honnold

Quickly traverse large js objects without the weight

latest
Source
npmnpm
Version
0.3.1
Version published
Weekly downloads
1
-66.67%
Maintainers
1
Weekly downloads
 
Created
Source

honnold

Quickly traverse large js objects without the weight

Usage

const honnold = require('honnold');

const obj = {
    some: {
        deeply: {
            nested: {
                object: {
                    prop1: true,
                    prop2: 'hi'
                }
            }
        }
    }
};

// Basic traversal
honnold(obj, {onLeaf: leaf => console.log(leaf)});
// > true
// > hi

// Remove all leaves with a specific value
honnold(obj, {onLeaf: (leaf, {remove}) => {
    if (leaf === 'hi') remove();
}});

// Remove all leaves with a specific key
honnold(obj, {onLeaf: (leaf, {remove, key}) => {
    if (key === 'prop2') remove();
}});

// Replace all leaves with a specific value
honnold(obj, {onLeaf: (leaf, {replace}) => {
    if (leaf === 'hi') replace('bye');
}});

// Remove all leaves beyond a specific depth
honnold(obj, {onLeaf: (leaf, {remove, keys}) => {
    if (keys.length > 4) remove();
}});

// Loop through all internal nodes
honnold(obj, {onInternalNode: node => console.log(node)});

Why?

I thought the existing traversal libraries were bloated, slow, and difficult to use. Through benchmarking, I've learned the existing libraries (namely tree-crawl) are pretty fast, but honnold is still useful if size is important or you want a simpler interface.

Stats

  • honnold bundlephobia
  • traverse bundlephobia
  • tree-crawl bundlephobia
Leaf traverse (100 wide x 20 deep):

honnold x 1,495 ops/sec ±1.33% (90 runs sampled)
traverse x 591 ops/sec ±3.59% (87 runs sampled)
tree-crawl x 2,108 ops/sec ±0.78% (91 runs sampled)

Fastest is tree-crawl

Leaf with keys traverse (100 wide x 20 deep):

honnold x 831 ops/sec ±2.19% (89 runs sampled)
traverse x 559 ops/sec ±1.25% (92 runs sampled)
tree-crawl - N/A: 

Fastest is honnold

Leaf with depth traverse (100 wide x 20 deep):

honnold x 868 ops/sec ±2.10% (91 runs sampled)
traverse x 558 ops/sec ±2.59% (90 runs sampled)
tree-crawl x 2,087 ops/sec ±0.59% (94 runs sampled)

Fastest is tree-crawl

Internal node traverse (100 wide x 20 deep):

honnold x 1,434 ops/sec ±2.57% (94 runs sampled)
traverse x 565 ops/sec ±0.43% (93 runs sampled)
tree-crawl x 2,044 ops/sec ±1.75% (93 runs sampled)

Fastest is tree-crawl

License

MIT

Keywords

tree

FAQs

Package last updated on 14 Sep 2019

Did you know?

Socket

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.

Install

Related posts