# json-crawl

> Async and sync crawler for json object

Latest version **0.5.3** (published 2024-01-06) · MIT license · 0 weekly downloads

## Install

```sh
npm install json-crawl
pnpm add json-crawl
yarn add json-crawl
bun add json-crawl
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.5.3 |
| Published | 2024-01-06 |
| First published | 2023-06-16 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=14.0.0 |
| Dependencies | 0 |
| Unpacked size | 83.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Damir Yusipov |
| Maintainers | udamir |
| Keywords | json, crawler, crawl, deepClone, clone, hooks |

## Links

- npm: https://www.npmjs.com/package/json-crawl
- npm.io page: https://npm.io/package/json-crawl

## Alternatives

- [@mapbox/jsonlint-lines-primitives](https://npm.io/package/@mapbox/jsonlint-lines-primitives.md) — 5.3M weekly downloads
- [reftools](https://npm.io/package/reftools.md) — 3.5M weekly downloads
- [@hey-api/openapi-ts](https://npm.io/package/@hey-api/openapi-ts.md) — 3.5M weekly downloads
- [@mapbox/geojson-rewind](https://npm.io/package/@mapbox/geojson-rewind.md) — 2.4M weekly downloads
- [turbo-stream](https://npm.io/package/turbo-stream.md) — 1.7M weekly downloads

## Recent versions

- 0.5.3 (latest) — 2024-01-06
- 0.5.2 — 2024-01-05
- 0.5.1 — 2023-12-25
- 0.5.0 — 2023-12-25
- 0.4.2 — 2023-12-13
- 0.4.1 — 2023-12-13
- 0.4.0 — 2023-12-10
- 0.3.1 — 2023-10-25
- 0.3.0 — 2023-10-21
- 0.2.6 — 2023-09-07
- 0.2.5 — 2023-07-23
- 0.2.4 — 2023-07-13
- 0.2.3 — 2023-07-06
- 0.2.2 — 2023-07-02
- 0.2.1 — 2023-07-02
- … 2 more at https://npm.io/package/json-crawl/versions

## README

# json-crawl
<img alt="npm" src="https://img.shields.io/npm/v/json-crawl"> <img alt="npm" src="https://img.shields.io/npm/dm/json-crawl?label=npm"> <img alt="npm type definitions" src="https://img.shields.io/npm/types/json-crawl"> <img alt="GitHub" src="https://img.shields.io/github/license/udamir/json-crawl">

This package provides utility functions for crawling/cloning json objects like a tree

## Purpose

The purpose of this package is to simplify the traversal and manipulation of complex JSON objects in a tree-like structure. It provides functions that allow you to iterate over each node of a JSON object, perform custom operations, and clone objects deeply while maintaining independence between the original and cloned objects.
You can use `crawl`/`syncCrawl` to traverse a JSON object and perform custom operations, such as logging, data transformation, or validation, at each node. The hooks allow you to customize the behavior according to your specific requirements.

## Features

- **Crawling**: The `crawl`/`syncCrawl` function allows you to traverse a JSON object, performing custom operations at each node using hooks.
- **Cloning**: The `clone`/`syncClone` function creates a deep copy of a JSON object, ensuring that nested objects and arrays are also cloned.
- **Customizable Hooks**: Both `crawl` and `clone` functions accept hooks, allowing you to provide custom logic for each node during crawling or cloning. Hooks can modify values, state, rules or perform any desired operations.
- **Support for Async Hooks**: The `crawl` and `clone` functions supports asynchronous hooks, allowing you to perform asynchronous operations during crawling.

## Installation
```SH
npm install json-crawl --save
```

## Usage

### Nodejs

Crawls through a JSON object, performing custom operations at each node using the provided hooks.
```ts
import { syncClone, syncCrawl } from 'json-crawl'

const data = {
  // Your JSON object
};

const hooks = [
  ({ value, path, key, state, rules }) => {
    // Custom logic for each node

    // Modify value, state, or perform any desired operations
    return { 
      value: newValue,               // updated value of current node for next crawl steps
      state: newState,               // updated state for next crawl step
      rules: newRules                // updated rules for next crawl step
      exitHook,                      // on exit hook for current node
      terminate: true,               // crawl should be terminated
      done: true                     // crawl of current node should be terminated
    }
    // return void - if no operations are required
  },
  // Array of hooks for custom operations during cloning
];

const params = {
  state?: {
    // Initial state object for hooks (optional)
  },

  rules?: {
    // Crawl rules map (optional)
  }
};

// deep Clone
const cloned = syncClone(data, hooks, params)

// crawl
syncCrawl(data, hooks, params)

```

## Contributing
When contributing, keep in mind that it is an objective of `json-crawl` to have no package dependencies. This may change in the future, but for now, no-dependencies.

Please run the unit tests before submitting your PR: `npm test`. Hopefully your PR includes additional unit tests to illustrate your change/modification!

## License

MIT

---
_Source: https://npm.io/package/json-crawl · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
