Comparing version 1.0.0 to 1.1.0
@@ -1,29 +0,15 @@ | ||
export declare const enum CaseType { | ||
NoData = 0, | ||
Const = -1, | ||
One = 1, | ||
Two = 2, | ||
Three = 3, | ||
} | ||
export interface NoData { | ||
readonly tag: CaseType.NoData; | ||
readonly _none: 'none'; | ||
} | ||
export interface Const<T> { | ||
readonly tag: CaseType.Const; | ||
readonly val: T; | ||
readonly _const: T; | ||
} | ||
export interface One<T> { | ||
readonly tag: CaseType.One; | ||
readonly _arg: T; | ||
readonly _one: T; | ||
} | ||
export interface Two<T1, T2> { | ||
readonly tag: CaseType.Two; | ||
readonly _arg1: T1; | ||
readonly _arg2: T2; | ||
readonly _two: T1 | T2; | ||
} | ||
export interface Three<T1, T2, T3> { | ||
readonly tag: CaseType.Three; | ||
readonly _arg1: T1; | ||
readonly _arg2: T2; | ||
readonly _arg3: T3; | ||
readonly _three: T1 | T2 | T3; | ||
} | ||
@@ -39,7 +25,10 @@ export declare type Case<T1, T2, T3> = NoData | Const<T1> | One<T1> | Two<T1, T2> | Three<T1, T2, T3>; | ||
} & ForbidDefault; | ||
export declare const simple: () => NoData; | ||
export declare const of: <T>() => One<T>; | ||
export declare const ofConst: <T>(val: T) => Const<T>; | ||
export declare const of2: <T1, T2>() => Two<T1, T2>; | ||
export declare const of3: <T1, T2, T3>() => Three<T1, T2, T3>; | ||
export declare type Types = { | ||
(): NoData; | ||
<T>(): One<T>; | ||
<T>(val: T): Const<T>; | ||
<T1, T2>(): Two<T1, T2>; | ||
<T1, T2, T3>(): Three<T1, T2, T3>; | ||
}; | ||
export declare const t: Types; | ||
export interface OpaqueUnion<Record> { | ||
@@ -68,15 +57,15 @@ readonly _opaqueToken: Record; | ||
<R>(val: OpaqueUnion<Rec>, f: () => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: () => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: () => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : T extends One<infer A> ? { | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : T extends Const<infer A> ? { | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : T extends Two<infer A1, infer A2> ? { | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2) => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2) => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2) => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : T extends Three<infer A1, infer A2, infer A3> ? { | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2, a3: A3) => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2, a3: A3) => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2, a3: A3) => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : never; | ||
@@ -83,0 +72,0 @@ export declare type Unpack<Record> = { |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const noData = { tag: 0 /* NoData */ }; | ||
const one = { tag: 1 /* One */ }; | ||
const two = { tag: 2 /* Two */ }; | ||
const three = { tag: 3 /* Three */ }; | ||
exports.simple = () => noData; | ||
exports.of = () => one; | ||
exports.ofConst = (val) => ({ tag: -1 /* Const */, val }); | ||
exports.of2 = () => two; | ||
exports.of3 = () => three; | ||
exports.t = ((val) => val); | ||
function Union(record) { | ||
@@ -25,18 +17,7 @@ return Object.assign({ if: createUnpack(record), match: createMatch() }, createContructors(record)); | ||
const val = rec[key]; | ||
switch (val.tag) { | ||
case 0 /* NoData */: { | ||
const res = [key]; | ||
return (() => res); | ||
} | ||
case -1 /* Const */: { | ||
const res = [key, val.val]; | ||
return (() => res); | ||
} | ||
case 1 /* One */: | ||
return ((a) => [key, a]); | ||
case 2 /* Two */: | ||
return ((a, b) => [key, a, b]); | ||
case 3 /* Three */: | ||
return ((a, b, c) => [key, a, b, c]); | ||
if (val !== undefined) { | ||
const res = [key, val]; | ||
return (() => res); | ||
} | ||
return ((...args) => [key, ...args]); | ||
} | ||
@@ -50,18 +31,4 @@ function createUnpack(rec) { | ||
} | ||
function createUnpackFunc(key, rec) { | ||
const val = rec[key]; | ||
switch (val.tag) { | ||
case 0 /* NoData */: { | ||
return (([k], f, els) => k === key ? f() : els && els()); | ||
} | ||
case -1 /* Const */: { | ||
return (([k, c], f, els) => k === key ? f(c) : els && els()); | ||
} | ||
case 1 /* One */: | ||
return (([k, a], f, els) => k === key ? f(a) : els && els()); | ||
case 2 /* Two */: | ||
return (([k, a, b], f, els) => (k === key ? f(a, b) : els && els())); | ||
case 3 /* Three */: | ||
return (([k, a, b, c], f, els) => (k === key ? f(a, b, c) : els && els())); | ||
} | ||
function createUnpackFunc(key, _rec) { | ||
return ((val, f, els) => val[0] === key ? f(...val.slice(1)) : els && els(val)); | ||
} | ||
@@ -71,6 +38,5 @@ function createMatch() { | ||
// first elem is always the key | ||
const key = val[0]; | ||
const handler = cases[key]; | ||
const handler = cases[val[0]]; | ||
return handler | ||
? invokeHandler(val, handler) | ||
? handler(...val.slice(1)) | ||
: cases.default && cases.default(val); | ||
@@ -80,16 +46,2 @@ }; | ||
} | ||
function invokeHandler(val, handler) { | ||
switch (val.length) { | ||
case 1: | ||
return handler(); | ||
case 2: | ||
return handler(val[1]); | ||
case 3: | ||
return handler(val[1], val[2]); | ||
case 4: | ||
return handler(val[1], val[2], val[3]); | ||
default: | ||
throw new Error('Invalid value for matching'); | ||
} | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSxNQUFNLE1BQU0sR0FBVyxFQUFFLEdBQUcsZ0JBQWlCLEVBQUUsQ0FBQztBQUNoRCxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsYUFBYyxFQUFFLENBQUM7QUFDbEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLGFBQWMsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sS0FBSyxHQUFHLEVBQUUsR0FBRyxlQUFnQixFQUFFLENBQUM7QUEwQ3pCLFFBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFFLE1BQXdCLENBQUM7QUFDekMsUUFBQSxFQUFFLEdBQUcsR0FBTSxFQUFFLENBQUUsR0FBcUIsQ0FBQztBQUNyQyxRQUFBLE9BQU8sR0FBRyxDQUFJLEdBQU0sRUFBWSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRSxRQUFBLEdBQUcsR0FBRyxHQUFXLEVBQUUsQ0FBRSxHQUEwQixDQUFDO0FBQ2hELFFBQUEsR0FBRyxHQUFHLEdBQWUsRUFBRSxDQUFFLEtBQWtDLENBQUM7QUFzR3pFLGVBQ0UsTUFBYztJQUVkLE9BQVEsTUFBTSxDQUFDLE1BQU0sQ0FDbkIsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUNsRCxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FDRSxDQUFDO0FBQ2hDLENBQUM7QUFQRCxzQkFPQztBQUVELDJCQUNFLEdBQVc7SUFFWCxNQUFNLE1BQU0sR0FBa0MsRUFBRSxDQUFDO0lBQ2pELEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3BD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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF5Q2EsUUFBQSxDQUFDLEdBQVUsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFRLENBQUM7QUFrSG5ELGVBQ0UsTUFBYztJQUVkLE9BQVEsTUFBTSxDQUFDLE1BQU0sQ0FDbkIsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUNsRCxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FDRSxDQUFDO0FBQ2hDLENBQUM7QUFQRCxzQkFPQztBQUVELDJCQUNFLEdBQVc7SUFFWCxNQUFNLE1BQU0sR0FBa0MsRUFBRSxDQUFDO0lBQ2pELEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3BDO0lBQ0QsT0FBTyxNQUE4QixDQUFDO0FBQ3hDLENBQUM7QUFFRCxvQkFDRSxHQUFNLEVBQ04sR0FBVztJQUVYLE1BQU0sR0FBRyxHQUF3QixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE9BQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQWdCLENBQUM7S0FDcEM7SUFFRCxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBUSxDQUFDO0FBQ3JELENBQUM7QUFFRCxzQkFBaUQsR0FBVztJQUMxRCxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBQzNDLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDMUM7SUFDRCxPQUFPLE1BQXdCLENBQUM7QUFDbEMsQ0FBQztBQUVELDBCQUNFLEdBQU0sRUFDTixJQUFZO0lBRVosT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLENBQTBCLEVBQUUsR0FBcUIsRUFBRSxFQUFFLENBQ3RFLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBUSxDQUFDO0FBQ2xFLENBQUM7QUFFRDtJQUNFLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBUSxFQUFFLEtBQThCLEVBQU8sRUFBRTtRQUNsRSwrQkFBK0I7UUFDL0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBUSxDQUFDO1FBQ3JDLE9BQU8sT0FBTztZQUNaLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU8sRUFBRSxFQUFFLENBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQXNCLENBQUM7QUFDaEYsQ0FBQyJ9 |
@@ -1,29 +0,15 @@ | ||
export declare const enum CaseType { | ||
NoData = 0, | ||
Const = -1, | ||
One = 1, | ||
Two = 2, | ||
Three = 3, | ||
} | ||
export interface NoData { | ||
readonly tag: CaseType.NoData; | ||
readonly _none: 'none'; | ||
} | ||
export interface Const<T> { | ||
readonly tag: CaseType.Const; | ||
readonly val: T; | ||
readonly _const: T; | ||
} | ||
export interface One<T> { | ||
readonly tag: CaseType.One; | ||
readonly _arg: T; | ||
readonly _one: T; | ||
} | ||
export interface Two<T1, T2> { | ||
readonly tag: CaseType.Two; | ||
readonly _arg1: T1; | ||
readonly _arg2: T2; | ||
readonly _two: T1 | T2; | ||
} | ||
export interface Three<T1, T2, T3> { | ||
readonly tag: CaseType.Three; | ||
readonly _arg1: T1; | ||
readonly _arg2: T2; | ||
readonly _arg3: T3; | ||
readonly _three: T1 | T2 | T3; | ||
} | ||
@@ -39,7 +25,10 @@ export declare type Case<T1, T2, T3> = NoData | Const<T1> | One<T1> | Two<T1, T2> | Three<T1, T2, T3>; | ||
} & ForbidDefault; | ||
export declare const simple: () => NoData; | ||
export declare const of: <T>() => One<T>; | ||
export declare const ofConst: <T>(val: T) => Const<T>; | ||
export declare const of2: <T1, T2>() => Two<T1, T2>; | ||
export declare const of3: <T1, T2, T3>() => Three<T1, T2, T3>; | ||
export declare type Types = { | ||
(): NoData; | ||
<T>(): One<T>; | ||
<T>(val: T): Const<T>; | ||
<T1, T2>(): Two<T1, T2>; | ||
<T1, T2, T3>(): Three<T1, T2, T3>; | ||
}; | ||
export declare const t: Types; | ||
export interface OpaqueUnion<Record> { | ||
@@ -68,15 +57,15 @@ readonly _opaqueToken: Record; | ||
<R>(val: OpaqueUnion<Rec>, f: () => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: () => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: () => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : T extends One<infer A> ? { | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : T extends Const<infer A> ? { | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : T extends Two<infer A1, infer A2> ? { | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2) => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2) => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2) => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : T extends Three<infer A1, infer A2, infer A3> ? { | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2, a3: A3) => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2, a3: A3) => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: (a1: A1, a2: A2, a3: A3) => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} : never; | ||
@@ -83,0 +72,0 @@ export declare type Unpack<Record> = { |
@@ -1,10 +0,2 @@ | ||
const noData = { tag: 0 /* NoData */ }; | ||
const one = { tag: 1 /* One */ }; | ||
const two = { tag: 2 /* Two */ }; | ||
const three = { tag: 3 /* Three */ }; | ||
export const simple = () => noData; | ||
export const of = () => one; | ||
export const ofConst = (val) => ({ tag: -1 /* Const */, val }); | ||
export const of2 = () => two; | ||
export const of3 = () => three; | ||
export const t = ((val) => val); | ||
export function Union(record) { | ||
@@ -22,18 +14,7 @@ return Object.assign({ if: createUnpack(record), match: createMatch() }, createContructors(record)); | ||
const val = rec[key]; | ||
switch (val.tag) { | ||
case 0 /* NoData */: { | ||
const res = [key]; | ||
return (() => res); | ||
} | ||
case -1 /* Const */: { | ||
const res = [key, val.val]; | ||
return (() => res); | ||
} | ||
case 1 /* One */: | ||
return ((a) => [key, a]); | ||
case 2 /* Two */: | ||
return ((a, b) => [key, a, b]); | ||
case 3 /* Three */: | ||
return ((a, b, c) => [key, a, b, c]); | ||
if (val !== undefined) { | ||
const res = [key, val]; | ||
return (() => res); | ||
} | ||
return ((...args) => [key, ...args]); | ||
} | ||
@@ -47,18 +28,4 @@ function createUnpack(rec) { | ||
} | ||
function createUnpackFunc(key, rec) { | ||
const val = rec[key]; | ||
switch (val.tag) { | ||
case 0 /* NoData */: { | ||
return (([k], f, els) => k === key ? f() : els && els()); | ||
} | ||
case -1 /* Const */: { | ||
return (([k, c], f, els) => k === key ? f(c) : els && els()); | ||
} | ||
case 1 /* One */: | ||
return (([k, a], f, els) => k === key ? f(a) : els && els()); | ||
case 2 /* Two */: | ||
return (([k, a, b], f, els) => (k === key ? f(a, b) : els && els())); | ||
case 3 /* Three */: | ||
return (([k, a, b, c], f, els) => (k === key ? f(a, b, c) : els && els())); | ||
} | ||
function createUnpackFunc(key, _rec) { | ||
return ((val, f, els) => val[0] === key ? f(...val.slice(1)) : els && els(val)); | ||
} | ||
@@ -68,6 +35,5 @@ function createMatch() { | ||
// first elem is always the key | ||
const key = val[0]; | ||
const handler = cases[key]; | ||
const handler = cases[val[0]]; | ||
return handler | ||
? invokeHandler(val, handler) | ||
? handler(...val.slice(1)) | ||
: cases.default && cases.default(val); | ||
@@ -77,16 +43,2 @@ }; | ||
} | ||
function invokeHandler(val, handler) { | ||
switch (val.length) { | ||
case 1: | ||
return handler(); | ||
case 2: | ||
return handler(val[1]); | ||
case 3: | ||
return handler(val[1], val[2]); | ||
case 4: | ||
return handler(val[1], val[2], val[3]); | ||
default: | ||
throw new Error('Invalid value for matching'); | ||
} | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxNQUFNLEdBQVcsRUFBRSxHQUFHLGdCQUFpQixFQUFFLENBQUM7QUFDaEQsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLGFBQWMsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxhQUFjLEVBQUUsQ0FBQztBQUNsQyxNQUFNLEtBQUssR0FBRyxFQUFFLEdBQUcsZUFBZ0IsRUFBRSxDQUFDO0FBMEN0QyxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUUsTUFBd0IsQ0FBQztBQUN0RCxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBTSxFQUFFLENBQUUsR0FBcUIsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBSSxHQUFNLEVBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDL0UsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQVcsRUFBRSxDQUFFLEdBQTBCLENBQUM7QUFDN0QsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQWUsRUFBRSxDQUFFLEtBQWtDLENBQUM7QUFzR3pFLE1BQU0sZ0JBQ0osTUFBYztJQUVkLE9BQVEsTUFBTSxDQUFDLE1BQU0sQ0FDbkIsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUNsRCxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FDRSxDQUFDO0FBQ2hDLENBQUM7QUFFRCwyQkFDRSxHQUFXO0lBRVgsTUFBTSxNQUFNLEdBQWtDLEVBQUUsQ0FBQztJQUNqRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNyQixNQUFNLENBQUMsR0FBRyxDQUFDLEdB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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeUNBLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBVSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQVEsQ0FBQztBQWtIbkQsTUFBTSxnQkFDSixNQUFjO0lBRWQsT0FBUSxNQUFNLENBQUMsTUFBTSxDQUNuQixFQUFFLEVBQUUsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQ2xELGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUNFLENBQUM7QUFDaEMsQ0FBQztBQUVELDJCQUNFLEdBQVc7SUFFWCxNQUFNLE1BQU0sR0FBa0MsRUFBRSxDQUFDO0lBQ2pELEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3BDO0lBQ0QsT0FBTyxNQUE4QixDQUFDO0FBQ3hDLENBQUM7QUFFRCxvQkFDRSxHQUFNLEVBQ04sR0FBVztJQUVYLE1BQU0sR0FBRyxHQUF3QixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE9BQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQWdCLENBQUM7S0FDcEM7SUFFRCxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBUSxDQUFDO0FBQ3JELENBQUM7QUFFRCxzQkFBaUQsR0FBVztJQUMxRCxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBQzNDLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDMUM7SUFDRCxPQUFPLE1BQXdCLENBQUM7QUFDbEMsQ0FBQztBQUVELDBCQUNFLEdBQU0sRUFDTixJQUFZO0lBRVosT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLENBQTBCLEVBQUUsR0FBcUIsRUFBRSxFQUFFLENBQ3RFLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBUSxDQUFDO0FBQ2xFLENBQUM7QUFFRDtJQUNFLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBUSxFQUFFLEtBQThCLEVBQU8sRUFBRTtRQUNsRSwrQkFBK0I7UUFDL0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBUSxDQUFDO1FBQ3JDLE9BQU8sT0FBTztZQUNaLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUFDO0lBRUYsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU8sRUFBRSxFQUFFLENBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQXNCLENBQUM7QUFDaEYsQ0FBQyJ9 |
{ | ||
"name": "ts-union", | ||
"version": "1.0.0", | ||
"description": "algebraic data lib that looks similar to swift enums", | ||
"version": "1.1.0", | ||
"description": "ADT sum types in ts that look similar to swift enums", | ||
"main": "build/main/index.js", | ||
@@ -10,3 +10,3 @@ "typings": "build/main/index.d.ts", | ||
"license": "MIT", | ||
"keywords": [], | ||
"keywords": ["adt", "typescript", "sum-types"], | ||
"scripts": { | ||
@@ -13,0 +13,0 @@ "info": "npm-scripts-info", |
# ts-union | ||
Library for algebraic sum types that looks similar to swift enums. Inspired by [unionize](https://github.com/pelotom/unionize) and [F# discriminated-unions](https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/discriminated-unions) | ||
Tiny library (<1Kb gzipped) for algebraic sum types that looks similar to swift enums. Inspired by [unionize](https://github.com/pelotom/unionize) and [F# discriminated-unions](https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/discriminated-unions) | ||
@@ -11,2 +11,4 @@ ## Installation | ||
NOTE: uses features from typescript 2.8 | ||
## Usage | ||
@@ -17,6 +19,8 @@ | ||
```typescript | ||
import { Union, t } from 'ts-union'; | ||
const PaymentMethod = Union({ | ||
Cash: simple(), | ||
Check: of<CheckNumber>(), | ||
CreditCard: of2<CardType, CardNumber>() | ||
Cash: t(), | ||
Check: t<CheckNumber>(), | ||
CreditCard: t<CardType, CardNumber>() | ||
}); | ||
@@ -62,3 +66,3 @@ | ||
### if (simplified match) | ||
### if (aka simplified match) | ||
@@ -77,3 +81,3 @@ ```typescript | ||
n => `check num: ${n.toString()}`, | ||
() => 'not check' | ||
_v => 'not check' // _v is the union obj that is passed in | ||
); // str === 'not check' | ||
@@ -101,3 +105,3 @@ ``` | ||
If you will try to debug value for check you will see an array. | ||
If you will try to log the value for check you will see an array. | ||
@@ -117,10 +121,31 @@ ```typescript | ||
const U = Union({ | ||
Simple: simple(), // no payload | ||
One: of<string>(), // one argument | ||
Const: ofConst(3), // one constant argument that is baked in | ||
Two: of2<string, number>(), // two arguments | ||
Three: of3<string, number, boolean>() // three | ||
Simple: t(), // no payload | ||
One: t<string>(), // one argument | ||
Const: t(3), // one constant argument that is baked in | ||
Two: t<string, number>(), // two arguments | ||
Three: t<string, number, boolean>() // three | ||
}); | ||
``` | ||
Let's take a closer look at `t` function | ||
```typescript | ||
export declare type Types = { | ||
(): NoData; | ||
<T>(): One<T>; | ||
<T>(val: T): Const<T>; | ||
<T1, T2>(): Two<T1, T2>; | ||
<T1, T2, T3>(): Three<T1, T2, T3>; | ||
}; | ||
export declare const t: Types; | ||
``` | ||
the actual implementation is pretty simple: | ||
```typescript | ||
export const t: Types = ((val: any) => val) as any; | ||
``` | ||
We just capture the constant and don't really care about the rest. Typescript will guide us to provide proper number of args for each case. | ||
match accepts either a full set of props or a subset with default case. | ||
@@ -145,4 +170,4 @@ | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R): R | undefined; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: () => R): R; | ||
<R>(val: OpaqueUnion<Rec>, f: (a: A) => R, els: (v: OpaqueUnion<Rec>) => R): R; | ||
} | ||
``` |
167
26931
294