# Changelog
All notable changes to this project are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
### Added
- **WASM bindings** (`crates/eregex-wasm`): a `wasm-bindgen` / `wasm-pack`
package (published as `@a5i/eregex-wasm` on npm) that exposes the same API as the
native Node bindings, built with `--target nodejs`. Absent values serialize
to JS `null` via `serde-wasm-bindgen` (not `undefined`), so it is a drop-in
for the napi-rs package; a hand-written `index.js` entry materializes the
flag constants that `wasm-bindgen` cannot export as `const`. CI builds and
tests it, and the release workflow publishes it to npm.
- **Partial matching** via [`Regex::find_partial`]: an end-anchored search that
reports whether the haystack is a *full* match, a *partial* match (a prefix
of some full match, cut short by end-of-input), or *no match* (a hard
mismatch before end-of-input). New public types: `PartialMatch`,
`MatchStatus`, `GroupMatch`.
- Crate-level documentation rendered from `README.md`, plus rustdoc lints
(`broken_intra_doc_links`, `bare_urls`) so the generated docs stay clean.
- `# Examples` / `# Errors` doc sections with compile-checked doctests across
the main `Regex` API surface.
- Example `examples/gap_match.rs`: a user-space recipe for gap-tolerant
("fuzzy") matching built on `find_at` + `find_partial`.
- `CHANGELOG.md`, `documentation` / `rust-version` metadata in `Cargo.toml`,
and `[package.metadata.docs.rs]`.
### Changed
- `State`, `Snapshot`, and `PartialCandidate` now also track open capturing
groups, so partial matches can report the group that was entered but not
completed. Backtracking choice points save/restore this state alongside
captures.
## [0.1.0] — baseline
Initial public surface of the engine:
- Literals, `.`, anchors (`^ $ \A \z \b \B \m \M`), predefined classes
(`\d \D \w \W \s \S`), user character classes with ranges/negation/escapes,
POSIX classes, and a curated subset of Unicode properties (`\p{...}`).
- Alternation, quantifiers (`* + ? {m} {m,} {m,n}`) with greedy/lazy/possessive
flavours, atomic groups `(?>...)`.
- Capturing / non-capturing / named groups, backreferences
(`\1 \g<...> (?P=...)`), lookahead / lookbehind (variable length), inline
scoped flags (`(?i) (?i-m:...)`), inline comments and free-spacing (`(?x)`).
- Repeated captures (`captures`, `captures_iter`), and the matching API:
`is_match`, `find`, `find_at`, `find_iter`, `captures`, `captures_iter`,
`match_at_start`, `fullmatch`, `replace`, `replace_all`, `split`, `escape`.
[Unreleased]: https://github.com/a5i/eregex/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/a5i/eregex/releases/tag/v0.1.0