Security News
New Proposed CISA Mandate Would Require Critical Infrastructure to Report Ransom Payments Within 24 Hours
CISA has proposed a set of new rules that would require critical infrastructure to report cyber incidents and ransom payments.
@thi.ng/zipper
Advanced tools
Functional tree editing, manipulation & navigation
Weekly downloads
Readme
[!NOTE] This is one of 190 standalone projects, maintained as part of the @thi.ng/umbrella monorepo and anti-framework.
🚀 Please help me to work full-time on these projects by sponsoring me on GitHub. Thank you! ❤️
Functional tree editing, manipulation & navigation.
Immutable, semi-functional, structural tree editing, manipulation & navigation, based on my fork and optimizations to fast-zip, which in turn is based on clojure.zip and which itself is based on the original data structure invented by Gérard Huet in 1997.
Reference: https://en.wikipedia.org/wiki/Zipper_(data_structure)
STABLE - used in production
Search or submit any issues for this package
yarn add @thi.ng/zipper
ES module import:
<script type="module" src="https://cdn.skypack.dev/@thi.ng/zipper"></script>
For Node.js REPL:
const zipper = await import("@thi.ng/zipper");
Package sizes (brotli'd, pre-treeshake): ESM: 1.02 KB
import { arrayZipper } from "@thi.ng/zipper";
const x = [1, [5, 4, 3, 2], 6];
// create zipper for given array
const a = arrayZipper(x);
// .next navigates to logically next location (depth-first)
// .node retrieves a location's value
a.next.node
// 1
a.next.next.node
// [5, 4, 3, 2]
// all navigation verbs:
// prev, left, right, up, down, leftmost, rightmost
a.next.next.down.rightmost.node
// 2
// navigate to value `3`, remove it
// then append `7` at top level
// and apply changes by requesting root value
// (the latter is the actual zip operation)
a.next.next.down.rightmost.left.remove().up.up.appendChild(7).root
// [ 1, [ 5, 4, 2 ], 6, 7 ]
// the same edits in different order
a.appendChild(7).next.next.down.rightmost.left.remove().root
// [ 1, [ 5, 4, 2 ], 6, 7 ]
// insert child at the front
a.next.next.insertChild(10).root
// [ 1, [ 10, 5, 4, 3, 2 ], 6 ]
// replace the nested array
a.next.next.replace(10).root
// [1, 10, 6]
// all editing is immutable, original is untouched...
x
// [ 1, [ 5, 4, 3, 2 ], 6 ]
For better comparison, the included benchmarks are also ported from the fast-zip package and measure traversal & editing of a tree of 10 x 10 x 10 values.
Measurements for MBP 2015 2.8GHz, 16GB, node v12.10.0:
$ node bench/index.js
walk:
warmup... 2562ms
warmup... 2469ms
warmup... 2460ms
total: 2476ms, mean: 0.2476ms, runs: 10000
edit:
warmup... 4660ms
warmup... 4573ms
warmup... 4566ms
total: 4616ms, mean: 0.4616ms, runs: 10000
If this project contributes to an academic publication, please cite it as:
@misc{thing-zipper,
title = "@thi.ng/zipper",
author = "Karsten Schmidt",
note = "https://thi.ng/zipper",
year = 2015
}
© 2015 - 2024 Karsten Schmidt // Apache License 2.0
FAQs
Functional tree editing, manipulation & navigation
The npm package @thi.ng/zipper receives a total of 77,476 weekly downloads. As such, @thi.ng/zipper popularity was classified as popular.
We found that @thi.ng/zipper demonstrated a healthy version release cadence and project activity because the last version was released less than 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
CISA has proposed a set of new rules that would require critical infrastructure to report cyber incidents and ransom payments.
Security News
Redis is no longer OSS, breaking its explicit commitment to remain under the BSD 3-Clause License forever. This has angered contributors who are now working to fork the software.
Product
Socket AI now enables 'AI detected potential malware' alerts by default, ensuring users benefit from AI-powered state-of-the-art malware detection without needing to opt-in.