🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

tsentials

Package Overview
Dependencies
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tsentials - npm Package Compare versions

Comparing version
0.1.10
to
0.1.11
+1
-1
dist/eq/index.d.ts

@@ -10,3 +10,3 @@ export interface Eq<A> {

export declare function contramap<A, B>(eqA: Eq<A>, f: (b: B) => A): Eq<B>;
export declare function struct<A extends Record<string, unknown>>(eqs: {
export declare function struct<A extends object>(eqs: {
[K in keyof A]: Eq<A[K]>;

@@ -13,0 +13,0 @@ }): Eq<A>;

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eq/index.ts"],"names":[],"mappings":"AAmCA,MAAM,CAAC,MAAM,MAAM,GAAgB;IACjC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM;CAC5C,CAAC;AAGF,MAAM,CAAC,MAAM,MAAM,GAAe,MAAoB,CAAC;AAGvD,MAAM,CAAC,MAAM,MAAM,GAAe,MAAoB,CAAC;AAGvD,MAAM,CAAC,MAAM,OAAO,GAAgB,MAAqB,CAAC;AAG1D,MAAM,CAAC,MAAM,IAAI,GAAa;IAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC,OAAO,EAAE;CAChE,CAAC;AAUF,MAAM,UAAU,SAAS,CAAO,GAAU,EAAE,CAAc;IACxD,OAAO;QACL,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,MAAM,CACpB,GAAiC;IAEjC,OAAO;QACL,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,GAAc,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAe,EAAE,MAAM,CAAC,CAAC,CAAe,CAAC,EAAE,CAAC;oBACpE,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,UAAU,CAAI,GAAU;IACtC,OAAO;QACL,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,MAAM,CAAC,CAAC,CAAM,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC/D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAID,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,IAAI;IACJ,SAAS;IACT,MAAM;IACN,UAAU;CACF,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/eq/index.ts"],"names":[],"mappings":"AAmCA,MAAM,CAAC,MAAM,MAAM,GAAgB;IACjC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM;CAC5C,CAAC;AAGF,MAAM,CAAC,MAAM,MAAM,GAAe,MAAoB,CAAC;AAGvD,MAAM,CAAC,MAAM,MAAM,GAAe,MAAoB,CAAC;AAGvD,MAAM,CAAC,MAAM,OAAO,GAAgB,MAAqB,CAAC;AAG1D,MAAM,CAAC,MAAM,IAAI,GAAa;IAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC,OAAO,EAAE;CAChE,CAAC;AAUF,MAAM,UAAU,SAAS,CAAO,GAAU,EAAE,CAAc;IACxD,OAAO;QACL,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,MAAM,CAAmB,GAAiC;IACxE,OAAO;QACL,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,GAAG,GAAc,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAe,EAAE,MAAM,CAAC,CAAC,CAAe,CAAC,EAAE,CAAC;oBACpE,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,UAAU,CAAI,GAAU;IACtC,OAAO;QACL,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,MAAM,CAAC,CAAC,CAAM,CAAC;oBAAE,OAAO,KAAK,CAAC;YAC/D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAID,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,IAAI;IACJ,SAAS;IACT,MAAM;IACN,UAAU;CACF,CAAC"}

@@ -12,3 +12,3 @@ import { type Eq } from '../eq/index.js';

export declare function contramap<A, B>(ordA: Ord<A>, f: (b: B) => A): Ord<B>;
export declare function struct<A extends Record<string, unknown>>(ords: {
export declare function struct<A extends object>(ords: {
[K in keyof A]: Ord<A[K]>;

@@ -15,0 +15,0 @@ }): Ord<A>;

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ord/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ord/index.ts"],"names":[],"mappings":"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"}

@@ -17,5 +17,15 @@ import type { AppError } from '../errors/app-error.js';

export declare function both<E, A>(error: E, value: A): These<E, A>;
export declare function isLeft<E, A>(these: These<E, A>): boolean;
export declare function isRight<E, A>(these: These<E, A>): boolean;
export declare function isBoth<E, A>(these: These<E, A>): boolean;
export declare function isLeft<E, A>(these: These<E, A>): these is {
readonly _tag: 'Left';
readonly left: E;
};
export declare function isRight<E, A>(these: These<E, A>): these is {
readonly _tag: 'Right';
readonly right: A;
};
export declare function isBoth<E, A>(these: These<E, A>): these is {
readonly _tag: 'Both';
readonly left: E;
readonly right: A;
};
export declare function map<E, A, B>(these: These<E, A>, f: (value: A) => B): These<E, B>;

@@ -22,0 +32,0 @@ export declare function mapLeft<E, A, F>(these: These<E, A>, f: (error: E) => F): These<F, A>;

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/these/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/these/index.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAgB7C,MAAM,UAAU,IAAI,CAAe,KAAQ;IACzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACvC,CAAC;AAGD,MAAM,UAAU,KAAK,CAAuB,KAAQ;IAClD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACzC,CAAC;AAGD,MAAM,UAAU,IAAI,CAAO,KAAQ,EAAE,KAAQ;IAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACrD,CAAC;AAKD,MAAM,UAAU,MAAM,CACpB,KAAkB;IAElB,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;AAC/B,CAAC;AAGD,MAAM,UAAU,OAAO,CACrB,KAAkB;IAElB,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAChC,CAAC;AAGD,MAAM,UAAU,MAAM,CACpB,KAAkB;IAElB,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC;AAC/B,CAAC;AAOD,MAAM,UAAU,GAAG,CAAU,KAAkB,EAAE,CAAkB;IACjE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,KAAK,OAAO;YACV,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,OAAO,CAAU,KAAkB,EAAE,CAAkB;IACrE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,OAAO,CAAU,KAAkB,EAAE,CAA4B;IAC/E,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,MAAM;oBACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAoB,CAAC,CAAC;gBACrD,KAAK,MAAM;oBACT,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtC,KAAK,OAAO;oBACV,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,GAAG,CAAO,KAAkB,EAAE,CAAqB;IACjE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;QAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAKD,MAAM,UAAU,OAAO,CAAO,KAAkB,EAAE,CAAqB;IACrE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,KAAK,CAAC;AACf,CAAC;AAOD,MAAM,UAAU,KAAK,CACnB,KAAkB,EAClB,MAAuB,EACvB,OAAwB,EACxB,MAAiC;IAEjC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,KAAK,OAAO;YACV,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9B,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,QAAQ,CAAO,KAAkB;IAC/C,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAKD,MAAM,UAAU,OAAO,CAAO,KAAkB;IAC9C,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAUD,MAAM,UAAU,QAAQ,CAAI,KAAoC;IAC9D,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAQD,MAAM,UAAU,eAAe,CAAI,KAAoC;IACrE,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAKD,MAAM,UAAU,UAAU,CAAI,MAAiB;IAC7C,IAAI,MAAM,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAOD,MAAM,UAAU,SAAS,CACvB,MAAkC;IAMlC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAkC,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnB,MAAM;YACR,KAAK,OAAO;gBACV,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACrB,MAAM;YACR,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBAC9C,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAID,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,MAAM;IACN,OAAO;IACP,MAAM;IACN,GAAG;IACH,OAAO;IACP,OAAO;IACP,GAAG;IACH,OAAO;IACP,KAAK;IACL,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,eAAe;IACf,UAAU;IACV,SAAS;CACD,CAAC"}

@@ -7,15 +7,29 @@ export type Union<T extends Record<string, unknown>> = {

}[keyof T];
type Tagged = {
readonly tag: PropertyKey;
readonly value: unknown;
};
export declare const Union: {
readonly of: <T extends Record<string, unknown>, K extends keyof T>(tag: K, value: T[K]) => Union<T>;
readonly match: <T extends Record<string, unknown>, R>(union: Union<T>, handlers: { [K in keyof T]: (value: T[K]) => R; }) => R;
readonly is: <T extends Record<string, unknown>, K extends keyof T>(union: Union<T>, tag: K) => union is {
tag: K;
value: T[K];
readonly match: <U extends Tagged, R>(union: U, handlers: { [K in U["tag"]]: (value: Extract<U, {
readonly tag: K;
}>["value"]) => R; }) => R;
readonly is: <U extends Tagged, K extends U["tag"]>(union: U, tag: K) => union is Extract<U, {
readonly tag: K;
}>;
readonly get: <U extends Tagged, K extends U["tag"]>(union: U, tag: K) => Extract<U, {
readonly tag: K;
}>["value"];
readonly partition: <U extends Tagged, K1 extends U["tag"], K2 extends U["tag"]>(items: ReadonlyArray<U>, leftTag: K1, rightTag: K2) => {
lefts: Array<Extract<U, {
readonly tag: K1;
}>["value"]>;
rights: Array<Extract<U, {
readonly tag: K2;
}>["value"]>;
};
readonly get: <T extends Record<string, unknown>, K extends keyof T>(union: Union<T>, tag: K) => T[K];
readonly partition: <T extends Record<string, unknown>, K1 extends keyof T, K2 extends keyof T>(items: ReadonlyArray<Union<T>>, leftTag: K1, rightTag: K2) => {
lefts: Array<T[K1]>;
rights: Array<T[K2]>;
};
readonly groupBy: <T extends Record<string, unknown>>(items: ReadonlyArray<Union<T>>) => { [K in keyof T]?: Array<T[K]>; };
readonly groupBy: <U extends Tagged>(items: ReadonlyArray<U>) => { [K in U["tag"]]?: Array<Extract<U, {
readonly tag: K;
}>["value"]>; };
};
export {};

@@ -1,1 +0,1 @@

{"version":3,"file":"union.js","sourceRoot":"","sources":["../../src/union/union.ts"],"names":[],"mappings":"AAiCA,MAAM,CAAC,MAAM,KAAK,GAAG;IAInB,EAAE,CAAuD,GAAM,EAAE,KAAW;QAC1E,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAa,CAAC;IACnD,CAAC;IAOD,KAAK,CACH,KAAe,EACf,QAAgD;QAEhD,MAAM,OAAO,GAAI,QAA2D,CAC1E,KAAK,CAAC,GAAsB,CAC7B,CAAC;QACF,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxF,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAKD,EAAE,CACA,KAAe,EACf,GAAM;QAEN,OAAO,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;IAC3B,CAAC;IAKD,GAAG,CAAuD,KAAe,EAAE,GAAM;QAC/E,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,KAAK,CAAC,KAAa,CAAC;IAC7B,CAAC;IAgBD,SAAS,CACP,KAA8B,EAC9B,OAAW,EACX,QAAY;QAEZ,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAc,CAAC,CAAC;iBACrD,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAc,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC;IAWD,OAAO,CACL,KAA8B;QAE9B,MAAM,MAAM,GAAqC,EAAE,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAc,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,CAAC,GAAG,CAAC,GAAG,EAA0B,CAAC;YAC3C,CAAC;YACA,MAAM,CAAC,GAAG,CAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,KAAsB,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACO,CAAC"}
{"version":3,"file":"union.js","sourceRoot":"","sources":["../../src/union/union.ts"],"names":[],"mappings":"AAwCA,MAAM,CAAC,MAAM,KAAK,GAAG;IAInB,EAAE,CAAuD,GAAM,EAAE,KAAW;QAC1E,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAa,CAAC;IACnD,CAAC;IAOD,KAAK,CACH,KAAQ,EACR,QAAqF;QAErF,MAAM,OAAO,GAAI,QAA2D,CAC1E,KAAK,CAAC,GAAsB,CAC7B,CAAC;QACF,IAAI,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxF,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAKD,EAAE,CACA,KAAQ,EACR,GAAM;QAEN,OAAO,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC;IAC3B,CAAC;IAKD,GAAG,CACD,KAAQ,EACR,GAAM;QAEN,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,KAAK,CAAC,KAAiD,CAAC;IACjE,CAAC;IAgBD,SAAS,CACP,KAAuB,EACvB,OAAW,EACX,QAAY;QAKZ,MAAM,KAAK,GAAqD,EAAE,CAAC;QACnE,MAAM,MAAM,GAAqD,EAAE,CAAC;QACpE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,GAAG,KAAK,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAkD,CAAC,CAAC;iBACzF,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ;gBAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAkD,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAC3B,CAAC;IAWD,OAAO,CACL,KAAuB;QAEvB,MAAM,MAAM,GAAwC,EAAE,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACnB,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,MAA+E,CAAC;IACzF,CAAC;CACO,CAAC"}
{
"name": "tsentials",
"version": "0.1.10",
"version": "0.1.11",
"description": "Railway-oriented programming for TypeScript — Result<T>, Maybe<T>, Rule Engine, and DDD base classes with full async pipeline support",

@@ -5,0 +5,0 @@ "type": "module",

+169
-52

@@ -16,3 +16,3 @@ <p align="center">

Railway-oriented programming for TypeScript — `Result<T>`, `Maybe<T>`, Rule Engine, and DDD base classes with full async pipeline support.
Railway-oriented programming for TypeScript: `Result<T>`, `Maybe<T>`, Rule Engine, and DDD base classes with full async pipeline support.

@@ -22,3 +22,3 @@ ---

> **[Your Function Signature Is Lying →](https://www.senrecep.com/en/blog/your-function-signature-is-lying)**
> A deep dive into why `try/catch` falls short in TypeScript, the philosophy behind Railway Oriented Programming, and the design decisions that shaped `tsentials`.
> Why `try/catch` falls short in TypeScript, the thinking behind Railway Oriented Programming, and the design decisions that shaped `tsentials`.

@@ -103,3 +103,3 @@ ---

Discriminated union `{ ok: true; value: T } | { ok: false; errors: AppError[] }`. No exceptions — errors are values.
Discriminated union `{ ok: true; value: T } | { ok: false; errors: AppError[] }`. Errors are values, not exceptions.

@@ -136,9 +136,10 @@ ### Creating Results

```typescript
import { Result } from 'tsentials/result';
import { Result, chain } from 'tsentials/result';
import { Err } from 'tsentials/errors';
const price = Result.success(100)
|> Result.map(_, n => n * 1.2)
|> Result.ensure(_, n => n < 200, Err.validation('Price.TooHigh', 'Exceeds limit'))
|> Result.map(_, n => `$${n.toFixed(2)}`);
const price = chain(Result.success(100))
.map(n => n * 1.2)
.ensure(n => n < 200, Err.validation('Price.TooHigh', 'Exceeds limit'))
.map(n => `$${n.toFixed(2)}`)
.unwrap();
// => { ok: true, value: "$120.00" }

@@ -217,3 +218,3 @@

`ResultAsync<T>` implements `PromiseLike<Result<T>>` — the entire chain builds synchronously, resolves once at the end with a single `await`.
`ResultAsync<T>` implements `PromiseLike<Result<T>>`. The entire chain builds synchronously and resolves once at the end with a single `await`.

@@ -224,2 +225,3 @@ ```typescript

// fromAsync takes a Promise<Result<T>> — here fetchUser returns Promise<Result<User>>
const profile = await fromAsync(fetchUser(userId))

@@ -239,14 +241,15 @@ .andThen(user => validateUser(user))

```typescript
// Conditional async bind
// Conditional async bind — the bind fn preserves T; when the condition is
// false the original Result<T> passes through unchanged
await Result.bindIfAsync(
Result.success(user),
u => u.isAdmin,
async u => fetchAdminDashboard(u),
async u => loadAdminProfile(u), // (u: User) => Promise<Result<User>>
);
// Async recovery
// Async recovery — the recovery fn returns the same Result<T>
await Result.recoverAsync(
Result.failure(cacheMiss),
e => e.code === 'Cache.Miss',
async () => fetchFromDatabase(),
async () => fetchFromDatabase(), // () => Promise<Result<T>>
);

@@ -303,3 +306,3 @@ ```

Explicit optional values — no accidental `undefined`.
Explicit optional values instead of accidental `undefined`.

@@ -530,3 +533,3 @@ ### Creating Maybe Values

`fetchResult` never throws — network errors and HTTP error responses are captured as `Result<T>`.
`fetchResult` never throws. It captures network errors and HTTP error responses as `Result<T>`.

@@ -594,2 +597,3 @@ ```typescript

import { Union } from 'tsentials/union';
import type { AppError } from 'tsentials/errors';

@@ -602,3 +606,5 @@ type PaymentResult = Union<{

const result = Union.of<{ success: { transactionId: string }; pending: { estimatedMs: number }; failed: { error: AppError } }>('success', { transactionId: 'txn_123' });
// Construct with `as PaymentResult` (not `: PaymentResult`) for fresh literals —
// assignment narrowing would otherwise pin the value to a single member.
const result = { tag: 'success', value: { transactionId: 'txn_123' } } as PaymentResult;

@@ -611,3 +617,3 @@ const message = Union.match(result, {

// Type guard
// Type guard — narrows to the tagged member
if (Union.is(result, 'success')) {

@@ -620,9 +626,17 @@ console.log(result.value.transactionId);

// Collection utilities
type Shape = Union<{ circle: { radius: number }; rect: { w: number; h: number } }>;
const shapes: Shape[] = [
{ tag: 'circle', value: { radius: 1 } },
{ tag: 'rect', value: { w: 2, h: 3 } },
{ tag: 'circle', value: { radius: 4 } },
];
// partition: split union array into two typed arrays by tag
const { lefts, rights } = Union.partition(shapes, 'circle', 'rect');
// lefts: Array<{ radius: number }>, rights: Array<{ w: number; h: number }>
// lefts: Array<{ radius: number }> (2 items), rights: Array<{ w: number; h: number }> (1 item)
// groupBy: group all items by tag into a record
const groups = Union.groupBy(shapes);
// { circle: [...], rect: [...] }
// { circle: [{ radius: 1 }, { radius: 4 }], rect: [{ w: 2, h: 3 }] }
```

@@ -659,4 +673,4 @@

`deepClone` uses the native `structuredClone` API when available, falling back to a robust
recursive implementation. Never throws — works in React Native (Hermes) and all JS runtimes.
`deepClone` uses the native `structuredClone` API when available and falls back to a recursive
implementation when it is not. It never throws, and it works in React Native (Hermes) and other JS runtimes.

@@ -699,3 +713,3 @@ ```typescript

Type-safe JSON parsing and validation that returns `Result<T>` — no exceptions, fits directly into the railway pipeline.
Type-safe JSON parsing and validation that returns `Result<T>` instead of throwing, so it fits directly into the railway pipeline.

@@ -767,4 +781,5 @@ ```typescript

```typescript
import { pipe, flow } from 'tsentials/function';
import { pipe, flow, identity, constant, flip } from 'tsentials/function';
// pipe — thread a value through unary functions (up to 15 steps, fully typed)
const result = pipe(

@@ -777,2 +792,3 @@ 5,

// flow — compose functions into a reusable pipeline
const doubleAndStringify = flow(

@@ -783,2 +799,8 @@ (n: number) => n * 2,

doubleAndStringify(5); // "10"
identity(42); // 42
const alwaysTrue = constant(true);
alwaysTrue(); // true
const subtract = (a: number, b: number) => a - b;
flip(subtract)(3, 10); // 7 — arguments reversed
```

@@ -788,10 +810,12 @@

Type-safe arrays guaranteed to have at least one element. No null checks needed for `head()` or `last()`.
Type-safe arrays guaranteed to have at least one element, so `head()` and `last()` never need a null check.
```typescript
import { NonEmptyArray, asNonEmptyArray } from 'tsentials/array';
import { NonEmptyArray, asNonEmptyArray, isNonEmpty, prepend, append, head, tail, last, init } from 'tsentials/array';
const items: NonEmptyArray<string> = ['a', 'b', 'c'];
NonEmptyArray.head(items); // 'a' — safe, no Maybe
NonEmptyArray.last(items); // 'c'
head(items); // 'a' — safe, no Maybe
last(items); // 'c'
tail(items); // ['b', 'c'] — plain array
init(items); // ['a', 'b'] — plain array

@@ -801,2 +825,16 @@ // Safe conversion from plain array

const sure = asNonEmptyArray([1, 2]); // Some([1, 2])
// Type guard — narrows a plain array
const values = [1, 2, 3];
if (isNonEmpty(values)) {
head(values); // 1 — no null check needed inside the guard
}
// Construction that preserves the guarantee
prepend(0, [1, 2]); // NonEmptyArray [0, 1, 2]
append([1, 2], 3); // NonEmptyArray [1, 2, 3]
// map/reverse/sort keep the non-empty guarantee; filter returns a plain array
NonEmptyArray.map(items, s => s.toUpperCase()); // NonEmptyArray ['A', 'B', 'C']
NonEmptyArray.filter(items, s => s !== 'a'); // ['b', 'c'] — may become empty
```

@@ -806,17 +844,35 @@

Composable, type-safe equality and ordering.
Composable, type-safe equality and ordering. `Eq<A>` provides `equals`, `Ord<A>` extends it with `compare` returning `-1 | 0 | 1`.
```typescript
import { Eq, Ord } from 'tsentials/eq';
import { sortBy, min, max, clamp } from 'tsentials/ord';
import { Eq } from 'tsentials/eq';
import { Ord, sortBy, min, max, clamp, between, reverse } from 'tsentials/ord';
interface User { readonly id: number; readonly name: string; }
interface User { readonly id: number; readonly name: string; readonly age: number; }
const eqUser = Eq.struct<User>({ id: Eq.number, name: Eq.string });
// Structural equality from primitive instances (Eq.strict/string/number/boolean/date)
const eqUser = Eq.struct<User>({ id: Eq.number, name: Eq.string, age: Eq.number });
eqUser.equals({ id: 1, name: 'A', age: 30 }, { id: 1, name: 'A', age: 30 }); // true
// Compare by projection
const eqById = Eq.contramap(Eq.number, (u: User) => u.id);
const eqNumberArray = Eq.getArrayEq(Eq.number); // element-wise array equality
const users: User[] = [
{ id: 1, name: 'Carol', age: 35 },
{ id: 2, name: 'Alice', age: 30 },
];
const byAge = Ord.contramap(Ord.number, (u: User) => u.age);
const sorted = sortBy(users, byAge);
sortBy(users, byAge); // sorted copy, ascending
sortBy(users, reverse(byAge)); // descending
min(byAge, userA, userB);
clamp(Ord.number, 0, 100, 150); // 100
const [a, b] = [users[0]!, users[1]!];
min(byAge, a, b); // Alice (30)
max(byAge, a, b); // Carol (35)
clamp(Ord.number, 0, 100, 150); // 100
between(Ord.number, 0, 100, 42); // true
// Multi-field ordering — compares fields in order, short-circuits
const byNameThenAge = Ord.struct({ name: Ord.string, age: Ord.number });
```

@@ -831,7 +887,20 @@

interface User { readonly age: number; readonly isActive: boolean; readonly role: string; }
const isAdult = Predicate.from((u: User) => u.age >= 18);
const isActive = Predicate.from((u: User) => u.isActive);
const isAdmin = Predicate.from((u: User) => u.role === 'admin');
const isValid = Predicate.and(isAdult, isActive);
const isAnyOf = Predicate.any(isAdult, isGuest, isAdmin);
isValid.test({ age: 20, isActive: true, role: 'user' }); // true
Predicate.or(isAdult, isAdmin); // either passes
Predicate.not(isAdult); // negation
Predicate.all(isAdult, isActive, isAdmin); // every predicate must pass
Predicate.any(isAdult, isActive, isAdmin); // at least one must pass
// Refinement — narrows the type on success
const isString = Predicate.refinement((v: unknown): v is string => typeof v === 'string');
const input: unknown = 'hello';
if (isString.test(input)) input.toUpperCase(); // input is string here
```

@@ -841,15 +910,34 @@

Partial success — a value together with errors/warnings. Unlike `Result<T>` which is either-or, `These` allows both.
Partial success: a value together with errors or warnings. `Result<T>` is either-or; `These` allows both at once. Use `These<AppError[], A>` when you want the `Result` bridge, since `toResult` expects the error side to be an array.
```typescript
import { These } from 'tsentials/these';
import { Err, type AppError } from 'tsentials/errors';
const parseAge = (raw: string): These<AppError, number> => {
const parseAge = (raw: string): These<AppError[], number> => {
const age = Number(raw);
if (Number.isNaN(age)) return These.left(Err.validation('Age.NaN', 'Not a number'));
if (age < 0) return These.both(Err.validation('Age.Negative', 'Negative age'), 0);
if (Number.isNaN(age)) return These.left([Err.validation('Age.NaN', 'Not a number')]);
if (age < 0) return These.both([Err.validation('Age.Negative', 'Clamped to 0')], 0);
return These.right(age);
};
These.toResult(parseAge('-5')); // failure (Both converts to failure)
// Exhaustive match — Left, Right, and Both each get a handler
const label = These.match(
parseAge('-5'),
(errors) => `failed: ${errors[0]?.code}`,
(age) => `ok: ${age}`,
(errors, age) => `partial: ${age} with ${errors.length} warning(s)`,
); // "partial: 0 with 1 warning(s)"
// Type guards narrow
const t = parseAge('30');
if (These.isRight(t)) console.log(t.right); // 30
// Bridge to Result
These.toResult(parseAge('-5')); // failure — Both converts to failure (errors win)
These.toResultLenient(parseAge('-5')); // success(0) — Both keeps the value, discards errors
// Split a batch into successes / failures / partials
const { lefts, rights, boths } = These.partition([parseAge('30'), parseAge('abc'), parseAge('-5')]);
// rights: [30], lefts: [[Age.NaN]], boths: [{ error: [...], value: 0 }]
```

@@ -862,12 +950,27 @@

```typescript
import { Tree } from 'tsentials/tree';
import { Tree, drawTree } from 'tsentials/tree';
const tree = Tree.of('root', [
Tree.of('a', [Tree.leaf('a1')]),
Tree.leaf('b'),
const tree = Tree.of('Electronics', [
Tree.of('Phones', [Tree.leaf('iPhone'), Tree.leaf('Android')]),
Tree.leaf('Laptops'),
]);
Tree.toArray(tree); // ['root', 'a', 'a1', 'b']
Tree.find(tree, v => v === 'a1');
Tree.drawTree(tree);
Tree.toArray(tree); // ['Electronics', 'Phones', 'iPhone', 'Android', 'Laptops'] (pre-order)
Tree.size(tree); // 5
Tree.map(tree, s => s.toUpperCase()); // same structure, transformed values
Tree.find(tree, v => v === 'iPhone'); // first matching node (depth-first) | null
Tree.findAll(tree, v => v.length > 6); // all matching nodes
Tree.filter(tree, v => v === 'Phones'); // parent kept if any descendant matches
// Post-order fold — e.g. count all nodes
Tree.fold(tree, (_value, children: readonly number[]) =>
1 + children.reduce((a, b) => a + b, 0),
); // 5
console.log(drawTree(tree));
// Electronics
// ├── Phones
// │ ├── iPhone
// │ └── Android
// └── Laptops
```

@@ -884,6 +987,20 @@

R.map(users, u => u.name); // { a: 'Alice', b: 'Bob' }
R.filter(users, u => u.name !== 'Bob');
R.pick(users, 'a'); // { a: { name: 'Alice' } }
R.omit(users, 'b'); // { a: { name: 'Alice' } }
R.map(users, u => u.name); // { a: 'Alice', b: 'Bob' }
R.filter(users, u => u.name !== 'Bob'); // { a: { name: 'Alice' } }
R.pick(users, 'a'); // { a: { name: 'Alice' } }
R.omit(users, 'b'); // { a: { name: 'Alice' } }
R.keys(users); // ['a', 'b'] — typed
R.size(users); // 2
R.has(users, 'a'); // true
const scores = { math: 90, art: 40, science: 75 };
R.reduce(scores, 0, (acc, v) => acc + v); // 205
R.partition(scores, v => v >= 60); // { pass: { math, science }, fail: { art } }
R.filterMap(scores, v => (v >= 60 ? v + 10 : null)); // { math: 100, science: 85 }
R.mapWithKey(scores, (k, v) => [k.toUpperCase(), v]); // { MATH: 90, ART: 40, SCIENCE: 75 }
// upsert/remove — immutable; the key must belong to the record's key union
R.upsert(scores, 'art', 55); // { math: 90, art: 55, science: 75 }
R.remove(scores, 'art'); // { math: 90, science: 75 }
```

@@ -890,0 +1007,0 @@