Liking cljdoc? Tell your friends :D

Changelog

1.0.0 - 2026-10-22

Fixed

  • Apply positional replacements in the same value-before-key order used when collecting matches.
  • Honor transducer accumulator changes, early reduction and completion results, while preserving find-when's vector-or-nil result contract on Clojure and ClojureScript.
  • Preserve the original sequential collection passed to predicates during traversal.
  • Traverse ClojureScript ranges, map sequences, map entries and records through collection-protocol fallbacks.
  • Use an identity-unique ClojureScript removal sentinel so advanced compilation cannot confuse ordinary keyword data with REMOVE. Reject undersupplied raw replacement arrays instead of inserting undefined values.
  • Preserve ClojureScript record types during value-only updates.
  • Honor key matching for JVM struct maps. Preserve their basis unless an actual edit renames or removes a base key; such edits now produce an ordinary map instead of ignoring keys or replacing removed values with nil.
  • Correct the documented acc-set! return value and specify traversal, replacement-length, collision and reconstruction contracts.
  • Keep helper macros on the compilation host to avoid undeclared-variable warnings from the standalone ClojureScript compiler.

Changed

  • Reduce JVM map-scanning overhead using native key/value reduction with one shared reducer per scan.
  • Speed up positional vector updates, including sequential reconstruction and removal handling for fully matched vectors.
  • Reduce JVM scalar function-replacement overhead and redundant transducer state writes.
  • Avoid copying sequences when only the collection itself is updated.

Added

  • Regression coverage for traversal order, replacement cursors, metadata, collection boundaries, reentrancy and concurrency.
  • Shared collection-contract regressions, struct-map/XML coverage, and an advanced-compilation ClojureScript test task included in bb test.
  • Reproducible JVM benchmarks with isolated workers, allocation measurements, deterministic fixtures and opt-in scaling, map and vector suites, including a pinned Clojure 1.13 comparison runtime.
  • Controlled postwalk and value-only tree-seq comparisons, including separate collection/replacement timing and allocation, derived traversal totals and per-JVM variation, replacing the older README figures.
  • A release check task and tested publication ordering: validate and build before pushing a tag, stop on command failures, and publish the checked artifact from an unchanged clean checkout.

0.2.1 - 2025-01-30

Fixed

  • Fix ClojureScript build failure due to stale reference to renamed util namespace.

0.2.0 - 2025-01-30

Added

  • update-paths now accepts a vector or accumulator of replacements in addition to a function. Values are applied sequentially in depth-first order matching path-when's traversal.
  • :raw-matches option for path-when returns the internal mutable accumulator (ArrayList on JVM, JS array on ClojureScript) instead of converting to a vector. Enables zero-allocation update patterns by mutating matches in-place and passing the same accumulator to update-paths.
  • acc-set! macro in co.multiply.pathling.accumulator for setting values at an index in accumulators.

Changed

  • Internal: Introduced Replacer interface (JVM) and IReplacer protocol (ClojureScript) to abstract over function-based and collection-based replacement strategies.

0.1.8 - 2025-01-08

  • Remove leftover ClojureScript dependency.

0.1.7 - 2025-01-02

Initial release.

  • path-when - find all values matching predicate with navigation structure
  • find-when - find values without navigation (more efficient for read-only)
  • transform-when - find and transform in one step
  • update-paths - apply function to locations identified by navigation
  • REMOVE - sentinel for removing elements during transformation
  • :include-keys option for matching/transforming map keys

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
←Move to previous article
→Move to next article
Ctrl+/Jump to the search field
× close