New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

ts-union

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ts-union - npm Package Compare versions

Comparing version 1.0.0 to 1.1.0

47

build/main/index.d.ts

@@ -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;
}
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc