Files
tiny-pattern-ts/CHANGELOG.md
T
tmu 55bf6c24a7 🐛 Narrow union-valued and optional discriminants
The tagged-union matcher selected handler parameters with
`Extract<T, Record<K, V>>`, which only keeps a member whose
discriminant is a singleton literal. A property that is itself a
union (`{ color: "red" | "green" | "blue" }`) or optional
(`{ type?: "x" }`) matched no member, so every handler received
`never`, and the fallback saw the whole shape instead of the
unhandled tags.

Replace the selector with `Narrowed`, which distributes over `T`,
drops a member whose `K` cannot take the tag, and narrows `K`. The
`T[K] extends V` fast path keeps an exact member (a discriminated
union's declared interface) untouched. The fallback reuses
`Narrowed` over `Exclude<Tags, HandledTags>`, so a union-valued
property narrows to the unhandled tags rather than the whole shape.

Matching a defined tag on an optional property makes the key
required (`{ type: "x" }`); the `undefined` tag yields
`{ type?: never }` under `exactOptionalPropertyTypes` (absence) or
`{ type?: undefined }` when the property admits an explicit
`undefined`.
2026-09-23 16:04:00 +00:00

4.2 KiB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

  • narrow the tagged-union matcher's handler parameters for a union-valued or optional discriminant, and its fallback to the unhandled tags, instead of passing never
  • prune the backlog of completed items and record the TS 7 LSP shutdown workaround in development/testing.md

0.7.1 - 2026-09-23

  • upgrade dependencies

0.7.0 - 2026-09-23

  • reject broad universes (string, number, template literals) and value/stringification collisions (true | "true", 1 | "1") at the factory
  • type handler parameters by the matched member, so a standalone "true" universe is typed "true" rather than true

0.6.0 - 2026-09-22

  • add getTaggedUnionMatcher / getTaggedUnionMatcherW for discriminated unions
  • rename the primitive matcher to primitive-union: getMatcher / getMatcherW → getPrimitiveUnionMatcher / getPrimitiveUnionMatcherW, and src/primitive.ts / src/primitive.test.ts → src/primitive-union.*

0.5.0 - 2026-09-21

  • reject a fallback when the handler map already covers the universe
  • allow boolean, null and undefined in the matcher universe

0.4.0 - 2026-09-20

  • move the _ fallback out of handlers

0.3.0 - 2026-09-18

  • condensed primitive matcher factories down to 2 from formerly 4
  • house shared test helpers under src/util/__tests__/

0.2.0 - 2026-09-16

  • allow ternaries and lowercase comments in oxlint
  • switch src/primitive.ts prose from block comments to line comments
  • remove the template's match/P example modules and their documentation, and point src/index.ts at the primitive matchers

0.1.8 - 2026-09-16

  • upgrade dependencies
  • ignore @types/node in maintain:outdated (misleading latest dist-tag)
  • require extremely concise prose in development/

0.1.7 - 2026-09-16

  • require a short summary under [Unreleased] in the changelog before a branch is finished
  • let create:branch start from a main that is ahead of its upstream, so a finished merge no longer blocks the next branch until it is pushed

0.1.6 - 2026-09-15

  • restructure the documentation: README.md for users, CONTRIBUTING.md for contributors, and development/ for the decisions, rejected alternatives and known issues
  • document the decisions and known issues for CI, tooling, testing, publishing and the workflow

0.1.5 - 2026-09-15

  • improve CI configuration

0.1.4 - 2026-09-14

  • fix CI to node from custom image
  • upgrade dependencies

0.1.3 - 2026-09-14

  • change to custom image for CI

0.1.2 - 2026-09-14

  • upgrade dependencies

0.1.1 - 2026-09-14

  • upgrade dependencies

0.1.0 - 2026-09-14

  • basic setup