- Fix RxJS interop:
fromObservable/fromnow guard sync-completing cold observables to avoid TDZ errors when wrappingof(...)-style sources. (#15)
- Doc reorg and new guides (cleanup strategy, reference/shallow node guidance, effect/FRP/graph references) plus agentic examples.
- Added markdownlint tooling with relaxed config and wiring to lint docs; upgraded markdownlint-cli to 0.46.0 to address glob advisory.
- Expose
createReferenceNodeandcreateShallowNodefrom the root entry so consumers can import them directly fromdagify.
- Add
referencecomparison mode (createReferenceNodehelper +{ reference: true }config) so nodes emit only when the top-level reference changes. - Fix shallow/deep snapshotting so nodes can store circular structures (e.g., Corestore instances) without blowing the stack.
deepEqualnow short-circuits repeated comparisons.
- Breaking: Fail-fast error handling is now enabled by default. When node computations throw programmer errors (ReferenceError, SyntaxError, TypeError, RangeError, AssertionError, ERR_ASSERTION, etc.) Dagify rethrows instead of routing them through
dependencyError$. Opt out globally withsetFailFastEnabled(false)or per node viafailFast: false. - Added
setFailFastEnabled,setFailFastPredicate, anddefaultFatalErrorPredicateexports so apps can declaratively control how fatal errors are identified.
- Deep nodes now react to mutations performed on class instances (and other non-plain objects) by cloning their enumerable properties for comparisons, ensuring state stored in custom classes triggers subscribers when mutated in place.
- Added
createQueuedNodeto serialize asynchronous node recomputations and provide deterministic ordering for promise/observable handlers. - Introduced optional
maxQueueLength,overflowStrategy, andonOverflowcontrols so queued nodes can apply bounded buffering and custom overflow policies. - FRP helpers now ignore
NO_EMITsentinel emissions by default and expose a{ triggerOnNoEmit: true }option for cases where projectors must run on those values. - Fixed a regression where deep nodes stopped emitting when nested object/array properties were mutated in place; nodes now keep structural snapshots so update/set and computed recomputations re-trigger as documented.
- Streamlined the core API around FRP primitives (
map,filter,combine,merge,switchLatest,from,createStore) and exposed a.streamfacade on every node. - Introduced
dagify/effectwith helpers (command,bridge,sink,fromEvent,trigger,dispatcher) to consolidate side-effectful nodes. - Added
dagify/internal/*subpaths for advanced utilities (encoding, types, key management) to keep the public surface focused. - Updated documentation, examples, and migration guides to reflect the new FRP-first workflow.
- Expanded test coverage for FRP helpers, effect helpers, encoding guards, and activity-threshold scheduling.