async-traverse-tree

v1.0.2
Asynchronously iterates and transforms tree-like structures.
traverse walk recursive map deep

async-traverse-tree

npm version Build Status Coverage Status License

async-traverse-tree is a lightweight, asynchronous library for traversing and mapping tree-like data structures.

Features

  • Asynchronously traverses and modifies objects and arrays.
  • Easy-to-use API for applying custom functions to each value in the tree.
  • Prevents circular references to maintain data integrity.

Installation

You can install async-traverse-tree using npm or yarn:

npm install async-traverse-tree

or

yarn add async-traverse-tree

Usage

Here's a simple example of how to use async-traverse-tree with the updated implementation:

// Import the 'traverse' function from 'async-traverse-tree'
import { traverse } from 'async-traverse-tree';

// Define a custom mapper function
const mapper = async (key, value) => {
  // Apply your custom logic here asynchronously
  return value;
};

// Your data structure
const data = /* Your data structure here */;

// Asynchronously traverse and map the data
traverse(data, mapper)
  .then(result => {
    // Process the result
    console.log(result);
  })
  .catch(error => {
    console.error(error);
  });

Controlling Tree Traversal

The async-traverse-tree module exports two symbols that can be used to control the traversal process:

  • STOP: Returning STOP from your mapper function will halt traversal of the current branch. No child nodes will be processed.
  • REMOVE: Returning REMOVE from your mapper function will remove the current key/value pair from the tree.
import { traverse, STOP, REMOVE } from 'async-traverse-tree';

const mapper = async (key, value) => {

  // stop traversing deeper into this branch
  if (skipCondition) {
    return STOP
  }

  // remove this key/value completely
    if (removeCondition) {
    return REMOVE
  }

  // Apply your custom logic here asynchronously
  return value;
};

Motivation

An easy way to iterate over an object-like structure is to use JSON.parse(JSON.stringify(obj), (key, value) => ... ).
The problem with this approach is that it can't handle circular references and is synchronous. async-traverse-tree can act like an async drop-in replacement for that which can also handle circular references.

Metadata

  • MIT
  • >=16
  • Ben Zörb
  • released 8/13/2024

Downloads

Maintainers