tmu 08384bbc82 ✨ Add initial pattern-matching API
Introduce the core builder and pattern constructors:

- match(value): chain .with(pattern, handler) and terminate with
  .exhaustive() (throws on no match) or .otherwise(handler).
- P.literal, P.type, P.when, P.any, P.shape for pattern construction.
- Each pattern is a Matcher<T> whose matches acts as a type guard, so
  handler parameters are narrowed to the matched type.

The MatchBuilder accumulates handlers and returns a new builder per
.with() call (immutable chaining); finalization runs the cases in order
and returns the first match's handler result.

TypeScript configuration relaxed in .oxlintrc.json:
- Disable eslint/no-undefined (we use undefined as the no-match sentinel)
- Disable eslint/sort-keys (handler order matters; alphabetical would
  be wrong)
- Disable eslint/id-length (T/R/U/V generics are standard TS convention)
- Disable import/no-named-export (false positive for library entry points)

Verified:
- tsc --noEmit passes with strict + noUncheckedIndexedAccess
- tsc -p tsconfig.build.json emits dist/*.js + .d.ts + sourcemaps
- node -e "import('./dist/index.js')" loads and exposes { match, P }
2026-09-03 10:35:34 +00:00
2026-09-03 10:35:34 +00:00
2026-02-02 13:38:42 +01:00
2026-09-03 10:28:08 +00:00
2026-09-03 10:35:34 +00:00
2026-02-02 13:38:42 +01:00
2026-09-03 10:28:08 +00:00
2026-09-03 10:28:08 +00:00
2025-04-29 13:43:07 +02:00

tiny-pattern-ts

Pattern matching for TypeScript/ESM environments (F#-style, not regex).

Development

  • Build: npm run build
  • Test: npm run test, npm run test:ci
  • Checks: npm run check, npm run fix
  • Format/Fix: npm run fix:oxfmt, npm run fix:oxlint

Tooling

  • TypeScript 7 — type checker and build (tsc).
  • node --test + --experimental-strip-types — test runner (Node 22.6+, flag dropped on Node 24).
  • c8 — code coverage for test:ci.
  • oxlint — Rust-based linter.
  • oxfmt — Rust-based formatter (Prettier-compatible).
  • cspell — spell checking.
  • sort-package-json — keep package.json keys alphabetized.
  • lefthook — git pre-commit hooks.

Requirements

  • Node.js >= 22.6 (>= 24 recommended; --experimental-strip-types is unflagged on 24).

VSCode integration

  • Recommended extensions: see .vscode/extensions.json (oxc, cspell).
  • TypeScript 7 is used via typescript.tsdk pointing at node_modules/typescript/lib.
  • oxc extension provides oxlint squiggles and oxfmt format-on-save.

Workflows

  • Version updates via npm version.
  • Publishing via GitHub Actions on tagged commits (see .github/workflows/ci.yml).
  • Changesets is available as a devDependency for changelog automation if desired.

Contribution guidelines

  • Commit signing (GPG).
  • Set up commit message template: npm run use:git-commit-message.
  • See commit-message-template.
  • Type-only tests use expect-type's expectTypeOf(...) inside node --test cases.
S
Description
No description provided
Readme MIT
1.5 MiB
0 Stars 1 Watchers 0 Forks
0.9.0
Latest
2026-09-29 23:57:54 +02:00
Languages
TypeScript 88.4%
Shell 9.9%
Dockerfile 1.7%