State the end-user limits once, in README § Caveats: a member colliding with its stringification, the unsupported symbol/bigint, and NaN/-0. Drop the duplicated known-issue prose from development/library.md and the source comment; link to the README instead.
48 lines
1.9 KiB
Markdown
48 lines
1.9 KiB
Markdown
# tiny-pattern-ts
|
|
|
|
Pattern matching for TypeScript/ESM environments (F#-style, not regex).
|
|
|
|
## Description
|
|
|
|
`tiny-pattern-ts` brings F#-style pattern matching to TypeScript. Patterns are
|
|
ordinary objects whose `matches` method is a TypeScript type guard, so narrowing
|
|
composes the way any other guard does. It is deliberately not a regex engine and
|
|
not a macro: there is no transpiler and no DSL to learn, and the type-level
|
|
contract is the feature — see [development/library.md](./development/library.md)
|
|
for the design decisions and [Caveats](#caveats) for the limits.
|
|
|
|
## Requirements
|
|
|
|
- **Node.js >= 26** (`engines` field; pinned via `.node-version`).
|
|
- **TypeScript >= 5.0** to consume the published declarations. The emitted `.d.ts`
|
|
use `const` type parameters (TS 5.0) and keep their relative `.ts` specifiers;
|
|
both resolve on TS >= 5.0 in `node10` / `node16` / `nodenext` / `bundler`.
|
|
- The package is **ESM-only** (no CommonJS shim).
|
|
|
|
## API
|
|
|
|
Yet to be implemented
|
|
|
|
## Caveats
|
|
|
|
- **A value and its stringification collide.** Object keys stringify, so a
|
|
universe that mixes a member with the string it stringifies to — `1 | "1"`,
|
|
`true | "true"`, `null | "null"` — collapses to a single handler key and both
|
|
members are routed to it. Use one form or the other.
|
|
- **`symbol` and `bigint` are not supported.** A `symbol` brand is a
|
|
compile-time phantom with nothing to match at runtime, and a `bigint` is not a
|
|
valid property key; neither satisfies the matcher's universe constraint.
|
|
- **`NaN` and `-0` cannot be matched specifically.** They have no literal type,
|
|
so both stay part of `number`.
|
|
|
|
## License
|
|
|
|
MIT © 2025 tmu. See [LICENSE](./LICENSE).
|
|
|
|
## Contributing
|
|
|
|
Contributions are documented in [CONTRIBUTING.md](./CONTRIBUTING.md); the
|
|
reasons behind the project's decisions, rejected alternatives, and known issues
|
|
live in [development/](./development/README.md). AI coding agents start at
|
|
[AGENTS.md](./AGENTS.md).
|