@miyauci/pattern-matching
TypeScript icon, indicating that this package has built-in type declarations

1.0.0-beta.1 • Public • Published

pattern-matching

deno land deno doc GitHub release (latest by date) codecov License

test NPM standard-readme compliant semantic-release: angular

Syntax-free pattern matching, feature parity with TC39 proposal-pattern-matching.

This project provides syntax-independent, type-safe pattern matching tools.

Table of Contents

Install

deno.land:

import * as mod from "https://deno.land/x/pattern_matching/mod.ts";

npm:

npm i @miyauci/pattern-matching

Usage

To start pattern matching, use the match function and the arm function.

arm takes the role of Clause.

The names of the arm function and the proposal clause are as follows:

Name Proposal name
when when
whether if
otherwise default
import {
  match,
  otherwise,
  when,
} from "https://deno.land/x/pattern_matching/mod.ts";

declare const num: number;

const result = match(num)(
  when(1, () => "one"),
  when(2, () => "two"),
  otherwise(() => "many"),
);

Binding

Binding binds the value of matchable when matched. This allows subsequent handlers to reference the binding.

import {
  _,
  match,
  otherwise,
  when,
  whether,
} from "https://deno.land/x/pattern_matching/mod.ts";
import {
  assertType,
  type IsExact,
} from "https://deno.land/std/testing/types.ts";

interface Person {
  name: string;
  age: number;
  hobby?: string;
  greet?: string;
}
declare const person: Person;

const result = match(person)(
  whether(({ name, age }) => !name || !age, () => {
    throw new Error();
  }),
  when(
    { greet: _("introduction") },
    ({ introduction }) => `${introduction}`,
  ),
  when(
    { name: _("name"), hobby: _("hobby") },
    ({ name, hobby }) => `${name} hobby is ${hobby}`,
  ),
  otherwise(() => "profile does not exist"),
);

assertType<IsExact<typeof result, string>>(true);

API

See deno doc for all APIs.

Contributing

See contributing.

License

MIT © 2023 Tomoki Miyauchi

Package Sidebar

Install

npm i @miyauci/pattern-matching

Weekly Downloads

8

Version

1.0.0-beta.1

License

MIT

Unpacked Size

48.3 kB

Total Files

41

Last publish

Collaborators

  • miyauci