graphrefly-operators 0.0.9

Built-in operator node types for GraphReFly (map, filter, scan, switchMap, valve, gate, retry, …)
Documentation

Built-in operator node types for GraphReFly.

Operators in this crate are specialized node types implemented directly against the Core protocol — they are not "user fns wrapped in nodes." A map operator's plumbing (dirty propagation, equals dedup, batch handling) runs entirely in Rust; only the user-supplied (T) -> U callback crosses the FFI boundary on each fire.

Status

M3 complete: transform/combine/flow/higher-order/subscription/producer operators, cold sources, stratify, and napi parity (see docs/migration-status.md). Per-operator state uses OperatorScratch on NodeRecord (D026).

Module layout

  • [transform] — map, filter, scan, reduce, distinctUntilChanged, pairwise (✅ Slice C-1)
  • [combine] — combine, merge, withLatestFrom (✅ Slice C-2)
  • [flow] — take, skip, takeWhile, last + first/find/element_at sugar (✅ Slice C-3)
  • [temporal] — sample, debounce, throttle, delay, audit, interval, timeout, buffer_time, window_time (✅ Slice T)
  • switching — switchMap, mergeMap, concatMap
  • gating — valve, gate, budgetGate, policyGate
  • resilience — retry, circuitBreaker, timeout, fallback, rateLimiter, tokenBucket

Layering

This crate depends on graphrefly-core only (per the user-direction constraint that operators do not depend on graphrefly-graph). Operator factories accept &Core directly. User callbacks travel through the [OperatorBinding] super-trait of BindingBoundary, which the binding crate (e.g., a TestOperatorBinding for tests, the napi-rs / pyo3 bindings in production) implements.