Thanks for your interest in contributing.
Use GitHub Issues. Useful reports include:
- The
@digitalsubstrate/dsviper-queryand@digitalsubstrate/dsviperversions, and your platform / Node version. - A minimal reproducer (typically a failing test).
- Fork the repository and create a feature branch from the default branch (see the project's branch policy).
- Keep the core modules pure —
src/source.mjs,src/canonical.mjsandsrc/verbs.mjsduck-type onhashKey/compareand must NOT import the binding, so they unit-test without it. Only the integration tests touch@digitalsubstrate/dsviper. - Add tests under
test/with the built-innode:testrunner andnode:assert; runnpm testand make sure everything passes.
This is a consumer-side layer: it adds nothing to the binding. Native Node 22+
iterator-helper chaining is the query surface; the package supplies only the bridges
the stateful verbs need (canonicalKey/hashKey for grouping, dedup, join and
set-ops; the total .compare() for ordering).
query() accepts only an immutable CommitState — a database at a fixed
commitId, whose keys()/get() see one frozen snapshot. Mutable sources are
rejected by design (no consistent snapshot at this layer); snapshot to a
CommitState first.
Node.js >= 22 (iterator helpers, Map.groupBy); @digitalsubstrate/dsviper >= 1.2.2
(the value.hashKey() bridge).
By contributing you agree your contributions are licensed under the project's MIT License (inbound = outbound). No CLA required.