♻️ Share matcher internals
This commit is contained in:
1 parent
6f4f509b69
commit
937d84ea48
4 files changed
+63
-26
No files matched your search
@@ -93,6 +93,27 @@ Each factory is two overloads whose order is load-bearing:
|
||||
not a sound "rejected" oracle for a factory. Factory-negative tests use
|
||||
`@ts-expect-error` call sites (the test file only — the general ban stands).
|
||||
|
||||
## Shared internals
|
||||
|
||||
#### Decision (2026-09)
|
||||
|
||||
`src/matcher-shared.ts` holds the four universe-agnostic pieces both matchers
|
||||
use: `UnaryFn`, `PatternReturns`, `RedundantFallback`, `HandlerMap`.
|
||||
|
||||
#### Why
|
||||
|
||||
- `RedundantFallback`'s property name is the diagnostic, so one definition
|
||||
keeps the two matchers' message from drifting; the other three appear verbatim
|
||||
in both public signatures.
|
||||
|
||||
#### Rejected
|
||||
|
||||
- **A generic `Matcher<Universe>` over the interface pair, `Handlers`,
|
||||
`Fallback` and `MustBePartial`.** Each is built from its own universe
|
||||
(`PatternKey`/`PatternParam` vs `Tags`/`MapTaggedUnion`); abstracting over the
|
||||
F-bounded `Handled` constraint that makes the remainder work risks the
|
||||
contextual typing it exists to preserve.
|
||||
|
||||
## Tagged-union matcher
|
||||
|
||||
#### Decision (2026-09)
|
||||
|
||||
Reference in new issue
Block a user