functype 0.8.52 → 0.8.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -246,11 +246,11 @@ type TaskException<T> = Either<Throwable, T> & TaskInfo;
|
|
|
246
246
|
declare const TaskException: <T>(error: unknown, _task?: TaskParams, data?: unknown) => TaskException<T>;
|
|
247
247
|
type TaskResult<T> = Either<Throwable, T> & TaskInfo;
|
|
248
248
|
declare const TaskResult: <T>(data: T, _task?: TaskParams) => TaskResult<T>;
|
|
249
|
-
type
|
|
250
|
-
type
|
|
249
|
+
type Sync<T> = Either<Throwable, T>;
|
|
250
|
+
type Async<T> = Promise<Sync<T>>;
|
|
251
251
|
declare const Task: <T = unknown>(params?: TaskParams) => {
|
|
252
252
|
Async: <U = T>(t: () => U, e?: (error: unknown) => unknown, f?: () => Promise<void> | void) => Async<U>;
|
|
253
|
-
Sync: <U = T>(t: () => U, e?: (error: unknown) => unknown, f?: () => void) =>
|
|
253
|
+
Sync: <U = T>(t: () => U, e?: (error: unknown) => unknown, f?: () => void) => Sync<U>;
|
|
254
254
|
success: (data: T) => TaskResult<T>;
|
|
255
255
|
fail: (error: unknown) => TaskException<T>;
|
|
256
256
|
} & {
|
|
@@ -313,4 +313,4 @@ type Traversable<A extends Type> = Functor<A> & {
|
|
|
313
313
|
foldRight<B>(z: B): (op: (a: A, b: B) => B) => B;
|
|
314
314
|
};
|
|
315
315
|
|
|
316
|
-
export { type AbstractFunctor, type ArrayFunctor, type ArrayType, type Async, type AsyncFunctor, Base, Either, type ExtractTag, type Functor, type Identity, type IterableType, Left, List, Map$1 as Map, None, Option, Right, Set, type SingleType, Some, Task, TaskException, type TaskInfo, type TaskParams, TaskResult, type TestEither, Throwable, type ThrowableType, type Traversable, Try, Tuple, type Type, TypeCheckLeft, TypeCheckRight, Typeable, type TypeableParams, isLeft, isRight, isTypeable, tryCatch, tryCatchAsync };
|
|
316
|
+
export { type AbstractFunctor, type ArrayFunctor, type ArrayType, type Async, type AsyncFunctor, Base, Either, type ExtractTag, type Functor, type Identity, type IterableType, Left, List, Map$1 as Map, None, Option, Right, Set, type SingleType, Some, type Sync, Task, TaskException, type TaskInfo, type TaskParams, TaskResult, type TestEither, Throwable, type ThrowableType, type Traversable, Try, Tuple, type Type, TypeCheckLeft, TypeCheckRight, Typeable, type TypeableParams, isLeft, isRight, isTypeable, tryCatch, tryCatchAsync };
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/typeable/Typeable.ts","../src/core/base/Base.ts","../src/core/throwable/Throwable.ts","../src/option/Option.ts","../src/set/shim.ts","../src/set/Set.ts","../src/list/List.ts","../src/either/Either.ts","../src/core/task/Task.ts","../src/tuple/Tuple.ts","../src/map/shim.ts","../src/map/Map.ts","../src/try/Try.ts"],"names":["Typeable","tag","data","isTypeable","value","Base","type","body","NAME","Throwable","_Throwable","message","options","srcError","Some","f","predicate","NONE","_onNone","onSome","z","op","List","val","_left","Right","stringify","defaultValue","error","alternative","_f","_predicate","onNone","_onSome","left","Left","None","Option","ESSet","createSet","iterable","values","seqMethods","set","newSet","Set","createList","array","list","a","results","p","x","result","acc","index","item","other","n","RightConstructor","_defaultValue","_fl","fr","_onLeft","onRight","onfulfilled","onrejected","LeftConstructor","_other","fl","_fr","onLeft","_onRight","_onfulfilled","isRight","either","isLeft","tryCatch","onError","TypeCheckRight","TypeCheckLeft","tryCatchAsync","Either","eithers","rights","arr","leftValue","eitherF","eitherV","promise","onRejected","TaskException","_task","name","description","appError","TaskResult","Task","params","t","e","errorResult","Tuple","mapValue","ESMap","createMap","entries","_tag","state","getEntries","key","add","remove","newMap","contains","size","map","k","v","flatMap","reduce","reduceRight","foldLeft","foldRight","get","getOrElse","isEmpty","orElse","toList","toSet","toString","Map","Success","_alternative","_error","Try","Failure"],"mappings":"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","file":"index.mjs","sourcesContent":["// Core type for Typeable objects\nexport type Typeable<Tag extends string, T = object> = T & {\n readonly _tag: Tag\n}\n\nexport type TypeableParams<Tag extends string, T> = { tag: Tag; data: T }\n\n// Utility type to extract the Tag from a Typeable type\nexport type ExtractTag<T> = T extends Typeable<infer Tag, unknown> ? Tag : never\n\n// Create a tagged object with type inference\nexport function Typeable<Tag extends string, T>({ tag, data }: TypeableParams<Tag, T>): Typeable<Tag, T> {\n return {\n ...data,\n _tag: tag,\n }\n}\n\n// Type guard with automatic type inference using the full type\nexport function isTypeable<T>(value: unknown, tag: string): value is T {\n if (!value || typeof value !== \"object\" || !(\"_tag\" in value)) {\n return false\n }\n\n return tag ? value._tag === tag : true\n}\n\n// // Usage\n// type User = Typeable<\n// \"User\",\n// {\n// id: string\n// name: string\n// email: string\n// }\n// >\n//\n// const user = Typeable(\"User\", {\n// id: \"123\",\n// name: \"John\",\n// email: \"john@example.com\",\n// })\n//\n// const maybeUser: unknown = user\n//\n// // Now we only need to specify User type\n// if (isTypeable<User>(maybeUser, \"User\")) {\n// console.log(maybeUser.name) // typed\n// console.log(maybeUser.email) // typed\n// console.log(maybeUser._tag) // typed as \"User\"\n// }\n//\n// // Can still check just for Typeable without specific tag\n// if (isTypeable<User>(maybeUser)) {\n// console.log(maybeUser.name) // typed\n// console.log(maybeUser.email) // typed\n// console.log(maybeUser._tag) // typed as \"User\"\n// }\n","import { Typeable } from \"@/typeable/Typeable\"\n\n/**\n * Base Object from which most other objects inherit\n * @param type\n * @param body\n * @constructor\n */\nexport function Base<T>(type: string, body: T) {\n return {\n ...Typeable({ tag: type, data: body }),\n toString() {\n return `${type}()`\n },\n }\n}\n","import { Typeable } from \"@/typeable/Typeable\"\n\nconst NAME = \"Throwable\" as const\n\nexport type ThrowableType = Error &\n Typeable<typeof NAME> & {\n readonly data?: unknown\n readonly cause?: Error\n }\n\nexport class Throwable extends Error implements ThrowableType {\n public readonly _tag: typeof NAME\n public readonly data?: unknown\n public readonly cause?: Error\n\n protected constructor(message: string, options?: { data?: unknown; cause?: Error; stack?: string }) {\n super(message, { cause: options?.cause })\n\n // Set name before we capture stack trace\n this.name = NAME\n\n // Set immutable properties\n Object.defineProperties(this, {\n _tag: {\n value: NAME,\n writable: false,\n configurable: false,\n },\n data: {\n value: options?.data,\n writable: false,\n configurable: false,\n },\n name: {\n value: NAME,\n writable: false,\n configurable: false,\n },\n })\n\n // Handle cause separately since it comes from Error\n if (options?.cause) {\n Object.defineProperty(this, \"cause\", {\n value: options.cause,\n writable: false,\n configurable: false,\n })\n }\n\n // Handle stack trace\n if (options?.stack) {\n // If we have a stack from an original error, use it\n this.stack = options.stack\n } else if (Error.captureStackTrace) {\n // Otherwise capture a new stack trace\n Error.captureStackTrace(this, this.constructor)\n }\n }\n\n static apply(srcError: unknown, data?: unknown): ThrowableType {\n if (srcError instanceof Error) {\n // For Error instances, preserve the original stack trace\n return new Throwable(srcError.message, {\n data,\n cause: srcError.cause as Error | undefined,\n stack: srcError.stack,\n })\n }\n\n const message = typeof srcError === \"string\" ? srcError : \"An unknown error occurred\"\n return new Throwable(message, { data })\n }\n}\n","import stringify from \"safe-stable-stringify\"\n\nimport type { AsyncFunctor, Functor, Type } from \"@/functor\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nimport { Either, Left, List, Right, type Traversable } from \"../index\"\n\nexport type Option<T extends Type> = {\n readonly _tag: \"Some\" | \"None\"\n readonly value: T | undefined\n isEmpty: boolean\n get(): T\n getOrElse(defaultValue: T): T\n getOrThrow(error: Error): T\n orElse(alternative: Option<T>): Option<T>\n orNull(): T | null\n map<U extends Type>(f: (value: T) => U): Option<U>\n filter(predicate: (value: T) => boolean): Option<T>\n flatMap<U extends Type>(f: (value: T) => Option<U>): Option<U>\n flatMapAsync<U extends Type>(f: (value: T) => Promise<Option<U>>): Promise<Option<U>>\n reduce<U>(f: (acc: U, value: T) => U): U\n reduceRight<U>(f: (acc: U, value: T) => U): U\n fold<U>(onNone: () => U, onSome: (value: T) => U): U\n foldLeft<B>(z: B): (op: (b: B, a: T) => B) => B\n foldRight<B>(z: B): (op: (a: T, b: B) => B) => B\n toList(): List<T>\n contains(value: T): boolean\n size: number\n toEither<E>(left: E): Either<E, T>\n toString(): string\n toValue(): { _tag: \"Some\" | \"None\"; value: T }\n} & (Traversable<T> & Functor<T> & Typeable<\"Some\" | \"None\"> & Valuable<\"Some\" | \"None\", T> & AsyncFunctor<T>)\n\nexport const Some = <T extends Type>(value: T): Option<T> => ({\n _tag: \"Some\",\n value,\n isEmpty: false,\n get: () => value,\n getOrElse: () => value,\n getOrThrow: () => value,\n orElse: () => Some(value),\n orNull: () => value,\n map: <U extends Type>(f: (value: T) => U) => Some(f(value)),\n filter(predicate: (value: T) => boolean) {\n if (predicate(value)) {\n return Some<T>(value) // type narrowing\n } else {\n return NONE as unknown as Option<T>\n }\n },\n fold: <U extends Type>(_onNone: () => U, onSome: (value: T) => U) => {\n return onSome(value)\n },\n flatMap: <U extends Type>(f: (value: T) => Option<U>) => f(value),\n flatMapAsync: async <U extends Type>(f: (value: T) => Promise<Option<U>>) => {\n return await f(value)\n },\n reduce: <U>(f: (acc: U, value: T) => U) => f(undefined as never, value),\n reduceRight: <U>(f: (acc: U, value: T) => U) => f(undefined as never, value),\n foldLeft:\n <B>(z: B) =>\n (op: (b: B, a: T) => B) =>\n op(z, value),\n foldRight:\n <B>(z: B) =>\n (op: (a: T, b: B) => B) =>\n op(value, z),\n toList: () => List<T>([value]),\n contains: (val: T) => val === value,\n size: 1,\n toEither: <E>(_left: E) => Right<E, T>(value),\n toString: () => `Some(${stringify(value)})`,\n toValue: () => ({ _tag: \"Some\", value }),\n})\n\nconst NONE: Option<never> = {\n _tag: \"None\",\n value: undefined as never,\n isEmpty: true,\n get: () => {\n throw new Error(\"Cannot call get() on None\")\n },\n getOrElse: <T>(defaultValue: T) => defaultValue,\n getOrThrow<T>(error: Error): T {\n throw error\n },\n orElse: <T>(alternative: Option<T>) => alternative,\n orNull: () => null,\n map: <U extends Type>(_f: (value: never) => U) => NONE as unknown as Option<U>,\n filter(_predicate: (value: never) => boolean): Option<never> {\n return NONE\n },\n flatMap: <U extends Type>(_f: (value: never) => Option<U>) => NONE as unknown as Option<U>,\n flatMapAsync: async <U extends Type>(_f: (value: never) => Promise<Option<U>>) => {\n return NONE as unknown as Option<U>\n },\n reduce: () => undefined as never,\n reduceRight: () => undefined as never,\n fold: <U extends Type>(onNone: () => U, _onSome: (value: never) => U) => {\n return onNone()\n },\n foldLeft:\n <B>(z: B) =>\n () =>\n z,\n foldRight:\n <B>(z: B) =>\n () =>\n z,\n toList: () => List([]),\n contains: () => false,\n size: 0,\n toEither: <E>(left: E) => Left<E, never>(left),\n toString: () => \"None\",\n toValue: () => ({ _tag: \"None\", value: undefined as never }),\n}\n\nexport const None = <T extends Type>(): Option<T> => NONE as unknown as Option<T>\n\nexport const Option = <T extends Type>(value: T | null | undefined): Option<T> =>\n value !== null && value !== undefined ? Some<T>(value) : None<T>()\n\nOption.from = <T>(value: T) => Option(value)\nOption.none = <T>() => None<T>()\n","export type IESSet<T> = Set<T>\nexport const ESSet = Set\n","import type { Collection } from \"@/collections\"\nimport type { IterableType } from \"@/iterable\"\nimport { List } from \"@/list/List\"\nimport { Typeable } from \"@/typeable/Typeable\"\n\nimport { ESSet, type IESSet } from \"./shim\"\n\nexport type Set<A> = {\n add: (value: A) => Set<A>\n remove: (value: A) => Set<A>\n contains: (value: A) => boolean\n has: (value: A) => boolean\n map: <B>(f: (a: A) => B) => Set<B>\n flatMap: <B>(f: (a: A) => IterableType<B>) => Set<B>\n toList: () => List<A>\n toSet: () => Set<A>\n toString: () => string\n} & IterableType<A> &\n Collection<A> &\n Typeable<\"Set\">\n\nconst createSet = <A>(iterable?: Iterable<A>): Set<A> => {\n const values: IESSet<A> = new ESSet<A>(iterable)\n\n const seqMethods = List(values)\n\n const set: Set<A> = {\n ...seqMethods,\n _tag: \"Set\",\n\n add: (value: A): Set<A> => createSet([...values, value]),\n\n remove: (value: A): Set<A> => {\n const newSet = new ESSet(values)\n newSet.delete(value)\n return createSet(newSet)\n },\n\n contains: (value: A): boolean => values.has(value),\n\n has: (value: A): boolean => values.has(value),\n\n map: <B>(f: (a: A) => B): Set<B> => createSet(seqMethods.map(f)),\n\n flatMap: <B>(f: (a: A) => IterableType<B>): Set<B> => createSet(seqMethods.flatMap(f)),\n\n toList: (): List<A> => List(values),\n\n toSet: (): Set<A> => set,\n\n toString: (): string => `Set(${Array.from(values).toString()})`,\n }\n\n return set\n}\n\nexport const Set = <A>(iterable?: Iterable<A> | IterableType<A>): Set<A> => createSet(iterable)\n","import stringify from \"safe-stable-stringify\"\n\nimport type { AsyncFunctor } from \"@/functor\"\nimport type { IterableType } from \"@/iterable\"\nimport { None, Option } from \"@/option/Option\"\nimport { Set } from \"@/set/Set\"\nimport { type ExtractTag, isTypeable, Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nexport type List<A> = {\n readonly length: number\n readonly [Symbol.iterator]: () => Iterator<A>\n map: <B>(f: (a: A) => B) => List<B>\n flatMap: <B>(f: (a: A) => IterableType<B>) => List<B>\n flatMapAsync: <B>(f: (a: A) => PromiseLike<IterableType<B>>) => PromiseLike<List<B>>\n forEach: (f: (a: A) => void) => void\n count: (p: (x: A) => boolean) => number\n exists: (p: (a: A) => boolean) => boolean\n filter<S extends A>(predicate: (a: A) => a is S): List<S>\n filter(predicate: (a: A) => unknown): List<A>\n filterNot: (p: (a: A) => boolean) => List<A>\n filterType: <T extends Typeable<string, unknown>>(tag: string) => List<T & A>\n find: <T extends A = A>(predicate: (a: A) => boolean, tag?: ExtractTag<T>) => Option<T>\n readonly head: A\n readonly headOption: Option<A>\n readonly isEmpty: boolean\n toArray: <B = A>() => B[]\n reduce: (f: (prev: A, curr: A) => A) => A\n reduceRight: (f: (prev: A, curr: A) => A) => A\n foldLeft: <B>(z: B) => (op: (b: B, a: A) => B) => B\n foldRight: <B>(z: B) => (op: (a: A, b: B) => B) => B\n remove: (value: A) => List<A>\n removeAt: (index: number) => List<A>\n add: (item: A) => List<A>\n get: (index: number) => Option<A>\n concat: (other: List<A>) => List<A>\n toList: () => List<A>\n toSet: () => Set<A>\n toString: () => string\n} & IterableType<A> &\n AsyncFunctor<A> &\n Typeable<\"List\"> &\n Valuable<\"List\", A[]>\n\nconst createList = <A>(values?: Iterable<A>): List<A> => {\n const array: A[] = Array.from(values || [])\n\n const list: List<A> = {\n _tag: \"List\",\n\n [Symbol.iterator]: () => array[Symbol.iterator](),\n\n get size() {\n return array.length\n },\n\n get length() {\n return array.length\n },\n\n map: <B>(f: (a: A) => B) => createList(array.map(f)),\n\n flatMap: <B>(f: (a: A) => IterableType<B>) => createList(array.flatMap((a) => Array.from(f(a)))),\n\n flatMapAsync: async <B>(f: (a: A) => PromiseLike<IterableType<B>>): Promise<List<B>> => {\n const results = await Promise.all(array.map(async (a) => await f(a)))\n return createList(results.flatMap((iterable) => Array.from(iterable)))\n },\n\n forEach: (f: (a: A) => void) => array.forEach(f),\n\n count: (p: (x: A) => boolean) => array.filter(p).length,\n\n exists: (p: (a: A) => boolean) => array.some(p),\n\n filter: (predicate: (a: A) => unknown) => createList(array.filter(predicate as (a: A) => boolean)),\n\n filterNot: (p: (a: A) => boolean) => createList(array.filter((x) => !p(x))),\n\n filterType: <T extends Typeable<string, unknown>>(tag: string) =>\n createList(array.filter((x): x is T & A => isTypeable(x, tag))),\n\n find: <T extends A = A>(predicate: (a: A) => boolean, tag?: ExtractTag<T>) => {\n const result = array.find((x) => predicate(x) && (tag ? isTypeable(x, tag) : true))\n return Option<T>(result as T | null | undefined)\n },\n\n get head() {\n return array[0]\n },\n\n get headOption() {\n return array.length > 0 ? Option(array[0]) : None<A>()\n },\n\n get isEmpty() {\n return array.length === 0\n },\n\n toArray: <B = A>(): B[] => [...array] as unknown as B[],\n\n reduce: (f: (prev: A, curr: A) => A) => array.reduce(f),\n\n reduceRight: (f: (prev: A, curr: A) => A) => array.reduceRight(f),\n\n foldLeft:\n <B>(z: B) =>\n (op: (b: B, a: A) => B) =>\n array.reduce(op, z),\n\n foldRight:\n <B>(z: B) =>\n (op: (a: A, b: B) => B) =>\n array.reduceRight((acc, value) => op(value, acc), z),\n\n remove: (value: A) => createList(array.filter((x) => x !== value)),\n\n removeAt: (index: number) =>\n index < 0 || index >= array.length ? list : createList([...array.slice(0, index), ...array.slice(index + 1)]),\n\n add: (item: A) => createList([...array, item]),\n\n get: (index: number) => Option(array[index]),\n\n concat: (other: List<A>) => createList([...array, ...other.toArray()]),\n\n drop: (n: number) => createList(array.slice(n)),\n\n dropRight: (n: number) => createList(array.slice(0, -n)),\n\n dropWhile: (p: (a: A) => boolean) => createList(array.slice(array.findIndex((x) => !p(x)))),\n\n flatten: <B>() => createList(array.flatMap((item) => (Array.isArray(item) ? item : ([item] as unknown as B[])))),\n\n toList: () => list,\n\n toSet: () => Set(array),\n\n toString: () => `List(${stringify(array)})`,\n\n toValue: () => ({ _tag: \"List\", value: array }),\n }\n\n return list\n}\n\nexport const List = <A>(values?: Iterable<A>): List<A> => createList(values)\n","import stringify from \"safe-stable-stringify\"\n\nimport type { AsyncFunctor, Functor, Type } from \"@/functor\"\nimport { List } from \"@/list/List\"\nimport { None, Option, Some } from \"@/option/Option\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nexport type Either<L extends Type, R extends Type> = {\n readonly _tag: \"Left\" | \"Right\"\n value: L | R\n isLeft: () => boolean\n isRight: () => boolean\n getOrElse: (defaultValue: R) => R\n getOrThrow: () => R\n map: <U extends Type>(f: (value: R) => U) => Either<L, U>\n merge: <L1 extends Type, R1 extends Type>(other: Either<L1, R1>) => Either<L | L1, [R, R1]>\n mapAsync: <U extends Type>(f: (value: R) => Promise<U>) => Promise<Either<L, U>>\n flatMap: <U extends Type>(f: (value: R) => Either<L, U>) => Either<L, U>\n flatMapAsync: <U extends Type>(f: (value: R) => Promise<Either<L, U>>) => Promise<Either<L, U>>\n toOption: () => Option<R>\n toList: () => List<R>\n toString: () => string\n [Symbol.iterator]: () => Iterator<R>\n yield: () => Generator<R, void, unknown>\n traverse: <U extends Type>(f: (value: R) => Either<L, U>) => Either<L, U[]>\n lazyMap: <U extends Type>(f: (value: R) => U) => Generator<Either<L, U>, void, unknown>\n tap: (f: (value: R) => void) => Either<L, R>\n tapLeft: (f: (value: L) => void) => Either<L, R>\n mapLeft: <L2 extends Type>(f: (value: L) => L2) => Either<L2, R>\n bimap: <L2 extends Type, R2 extends Type>(fl: (value: L) => L2, fr: (value: R) => R2) => Either<L2, R2>\n fold: <T extends Type>(onLeft: (value: L) => T, onRight: (value: R) => T) => T\n swap: () => Either<R, L>\n} & Typeable<\"Left\" | \"Right\"> &\n Valuable<\"Left\" | \"Right\", L | R> &\n PromiseLike<R> &\n AsyncFunctor<R>\n\nexport type TestEither<L extends Type, R extends Type> = Either<L, R> & Functor<R> & AsyncFunctor<R>\n\nconst RightConstructor = <L extends Type, R extends Type>(value: R): Either<L, R> => ({\n _tag: \"Right\",\n value,\n isLeft: () => false,\n isRight: () => true,\n getOrElse: (_defaultValue: R) => value,\n getOrThrow: () => value,\n map: <U extends Type>(f: (value: R) => U): Either<L, U> => Right(f(value)),\n mapAsync: <U extends Type>(f: (value: R) => Promise<U>): Promise<Either<L, U>> =>\n f(value)\n .then((result) => Right<L, U>(result))\n .catch((error: unknown) => Promise.resolve(Left<L, U>(error as L))) as Promise<Either<L, U>>,\n merge: <L1 extends Type, R1 extends Type>(other: Either<L1, R1>): Either<L | L1, [R, R1]> =>\n other.isLeft() ? Left<L | L1, [R, R1]>(other.value as L1) : Right<L | L1, [R, R1]>([value, other.value as R1]),\n flatMap: <U extends Type>(f: (value: R) => Either<L, U>): Either<L, U> => f(value),\n flatMapAsync: <U extends Type>(f: (value: R) => Promise<Either<L, U>>): Promise<Either<L, U>> =>\n f(value).catch((error: unknown) => Left<L, U>(error as L)) as Promise<Either<L, U>>,\n toOption: () => Some<R>(value),\n toList: () => List<R>([value]),\n toString: () => `Right(${stringify(value)})`,\n [Symbol.iterator]: function* () {\n yield value\n },\n yield: function* () {\n yield value\n },\n traverse: <U extends Type>(f: (value: R) => Either<L, U>): Either<L, U[]> => {\n const result = f(value)\n return result.isLeft() ? Left(result.value as L) : Right([result.value as U])\n },\n lazyMap: function* <U extends Type>(f: (value: R) => U) {\n yield Right<L, U>(f(value))\n },\n tap: (f: (value: R) => void) => {\n f(value)\n return Right<L, R>(value)\n },\n tapLeft: (_f: (value: L) => void) => Right<L, R>(value),\n mapLeft: <L2 extends Type>(_f: (value: L) => L2) => Right<L2, R>(value),\n bimap: <L2 extends Type, R2 extends Type>(_fl: (value: L) => L2, fr: (value: R) => R2) => Right<L2, R2>(fr(value)),\n fold: <T extends Type>(_onLeft: (value: L) => T, onRight: (value: R) => T) => onRight(value),\n swap: () => Left<R, L>(value),\n then: <TResult1 = R, TResult2 = never>(\n onfulfilled?: ((value: R) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): PromiseLike<TResult1 | TResult2> => {\n return Promise.resolve(value).then(onfulfilled, onrejected)\n },\n toValue: () => ({ _tag: \"Right\", value }),\n})\n\nconst LeftConstructor = <L extends Type, R extends Type>(value: L): Either<L, R> => ({\n _tag: \"Left\",\n value,\n isLeft: () => true,\n isRight: () => false,\n getOrElse: (defaultValue: R): R => defaultValue,\n getOrThrow: () => {\n throw value\n },\n map: <U extends Type>(_f: (value: R) => U): Either<L, U> => Left<L, U>(value),\n mapAsync: <U extends Type>(_f: (value: R) => Promise<U>): Promise<Either<L, U>> =>\n Promise.resolve(Left<L, U>(value)) as Promise<Either<L, U>>,\n merge: <L1 extends Type, R1 extends Type>(_other: Either<L1, R1>): Either<L | L1, [R, R1]> =>\n Left<L | L1, [R, R1]>(value),\n flatMap: <U extends Type>(_f: (value: R) => Either<L, U>): Either<L, U> => Left<L, U>(value),\n flatMapAsync: <U extends Type>(_f: (value: R) => Promise<Either<L, U>>): Promise<Either<L, U>> =>\n Promise.resolve(Left<L, U>(value)) as Promise<Either<L, U>>,\n toOption: () => None<R>(),\n toList: () => List<R>(),\n toString: () => `Left(${stringify(value)})`,\n [Symbol.iterator]: function* () {\n // Left doesn't yield any values\n },\n yield: function* () {\n // Left doesn't yield any values\n },\n traverse: <U extends Type>(_f: (value: R) => Either<L, U>): Either<L, U[]> => Left(value),\n lazyMap: function* <U extends Type>(_f: (value: R) => U) {\n yield Left<L, U>(value)\n },\n tap: (_f: (value: R) => void) => Left<L, R>(value),\n tapLeft: (f: (value: L) => void) => {\n f(value)\n return Left<L, R>(value)\n },\n mapLeft: <L2 extends Type>(f: (value: L) => L2) => Left<L2, R>(f(value)),\n bimap: <L2 extends Type, R2 extends Type>(fl: (value: L) => L2, _fr: (value: R) => R2) => Left<L2, R2>(fl(value)),\n fold: <T extends Type>(onLeft: (value: L) => T, _onRight: (value: R) => T) => onLeft(value),\n swap: () => Right<R, L>(value),\n then: <TResult1 = R, TResult2 = never>(\n _onfulfilled?: ((value: R) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): PromiseLike<TResult1 | TResult2> => {\n return Promise.reject(value).then(null, onrejected)\n },\n toValue: () => ({ _tag: \"Right\", value }),\n})\n\nexport const Right = <L extends Type, R extends Type>(value: R): Either<L, R> => RightConstructor(value)\nexport const Left = <L extends Type, R extends Type>(value: L): Either<L, R> => LeftConstructor(value)\n\nexport const isRight = <L extends Type, R extends Type>(either: Either<L, R>): either is Either<L, R> & { value: R } =>\n either.isRight()\nexport const isLeft = <L extends Type, R extends Type>(either: Either<L, R>): either is Either<L, R> & { value: L } =>\n either.isLeft()\n\nexport const tryCatch = <L extends Type, R extends Type>(f: () => R, onError: (error: unknown) => L): Either<L, R> => {\n try {\n return Right<L, R>(f())\n } catch (error: unknown) {\n return Left<L, R>(onError(error))\n }\n}\n\nexport const TypeCheckRight = <L extends Type, R extends Type>(value: R): TestEither<L, R> => RightConstructor(value)\nconsole.assert(TypeCheckRight)\nexport const TypeCheckLeft = <L extends Type, R extends Type>(value: L): TestEither<L, R> => LeftConstructor(value)\nconsole.assert(TypeCheckLeft)\n\nexport const tryCatchAsync = async <L extends Type, R extends Type>(\n f: () => Promise<R>,\n onError: (error: unknown) => L,\n): Promise<Either<L, R>> => {\n try {\n const result = await f()\n return Right<L, R>(result)\n } catch (error: unknown) {\n return Left<L, R>(onError(error))\n }\n}\n\nexport const Either = {\n sequence: <L extends Type, R extends Type>(eithers: Either<L, R>[]): Either<L, R[]> => {\n const rights: R[] = []\n for (const either of eithers) {\n if (either.isLeft()) {\n return Left(either.value as L)\n }\n rights.push(either.value as R)\n }\n return Right(rights)\n },\n\n traverse: <L extends Type, R extends Type, U extends Type>(\n arr: R[],\n f: (value: R) => Either<L, U>,\n ): Either<L, U[]> => {\n return Either.sequence(arr.map(f))\n },\n\n fromNullable: <L extends Type, R extends Type>(value: R | null | undefined, leftValue: L): Either<L, R> =>\n value === null || value === undefined ? Left(leftValue) : Right(value as R),\n\n fromPredicate: <L extends Type, R extends Type>(\n value: R,\n predicate: (value: R) => boolean,\n leftValue: L,\n ): Either<L, R> => (predicate(value) ? Right(value) : Left(leftValue)),\n\n ap: <L extends Type, R extends Type, U extends Type>(\n eitherF: Either<L, (value: R) => U>,\n eitherV: Either<L, R>,\n ): Either<L, U> => eitherF.flatMap((f) => eitherV.map(f)),\n\n fromPromise: async <L, R>(promise: Promise<R>, onRejected: (reason: unknown) => L): Promise<Either<L, R>> => {\n try {\n const result = await promise\n return Right<L, R>(result)\n } catch (error) {\n return Left<L, R>(onRejected(error))\n }\n },\n}\n","import { Throwable } from \"@/core/throwable/Throwable\"\nimport { Either, Left, Right } from \"@/either/Either\"\n\nimport { Base } from \"../base/Base\"\n\nexport type TaskParams = {\n name?: string\n description?: string\n}\n\nexport type TaskInfo = {\n _task: TaskParams\n}\n\nexport type TaskException<T> = Either<Throwable, T> & TaskInfo\n\n/**\n * AppException factory function\n * @param error\n * @param _task\n * @param data\n * @constructor\n */\nexport const TaskException = <T>(error: unknown, _task?: TaskParams, data?: unknown): TaskException<T> => {\n const name = _task?.name || \"TaskException\"\n const description = _task?.description || \"Unspecified TaskException\"\n const appError = Throwable.apply(error, data)\n return {\n ...Base(\"TaskException\", Left(appError)),\n _task: { name, description },\n }\n}\n\nexport type TaskResult<T> = Either<Throwable, T> & TaskInfo\n\nexport const TaskResult = <T>(data: T, _task?: TaskParams): TaskResult<T> => {\n const name = _task?.name || \"TaskResult\"\n const description = _task?.description || \"Unspecified TaskResult\"\n return {\n ...Base(\"TaskResult\", Right(data)),\n _task: { name, description },\n ///..Right(data),\n }\n}\n\nexport type Task<T> = Either<Throwable, T>\nexport type Async<T> = Promise<Task<T>>\n\nexport const Task = <T = unknown>(params?: TaskParams) => {\n const name = params?.name || \"Task\"\n const description = params?.description || \"\"\n const body = {\n Async: async <U = T>(\n t: () => U,\n e: (error: unknown) => unknown = (error: unknown) => error,\n f: () => Promise<void> | void = async () => {},\n ): Async<U> => {\n try {\n const result = await t()\n return TaskResult<U>(result, { name, description })\n } catch (error) {\n const errorResult = await e(error)\n return TaskException<U>(errorResult, { name, description })\n } finally {\n await f()\n }\n },\n Sync: <U = T>(\n t: () => U,\n e: (error: unknown) => unknown = (error: unknown) => error,\n f: () => void = () => {},\n ): Task<U> => {\n try {\n return TaskResult<U>(t(), { name, description })\n } catch (error) {\n return TaskException<U>(e(error), { name, description })\n } finally {\n f()\n }\n },\n success: (data: T) => TaskResult<T>(data, { name, description }),\n fail: (error: unknown) => TaskException<T>(error, { name, description }),\n }\n return Base(\"Task\", body)\n}\n","import type { ArrayFunctor, ArrayType } from \"@/functor\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nexport type Tuple<T extends ArrayType> = {\n get<K extends number>(index: K): T[K]\n\n map<U extends ArrayType>(f: (value: T) => U): Tuple<U>\n\n flatMap<U extends ArrayType>(f: (value: T) => Tuple<U>): Tuple<U>\n\n toArray(): T\n\n [Symbol.iterator](): Iterator<T[number]>\n} & ArrayFunctor<T> &\n Typeable<\"Tuple\"> &\n Valuable<\"Tuple\", T>\n\nexport const Tuple = <T extends ArrayType>(values: T): Tuple<T> => {\n return {\n _tag: \"Tuple\",\n map: <U extends ArrayType>(f: (value: T) => U): Tuple<U> => {\n const mapValue = f(values)\n return Tuple(mapValue)\n },\n\n flatMap: <U extends ArrayType>(f: (value: T) => Tuple<U>): Tuple<U> => {\n return f(values)\n },\n\n get: <K extends number>(index: K): T[K] => {\n return values[index]\n },\n\n toArray: (): T => {\n return values\n },\n [Symbol.iterator](): Iterator<T[number]> {\n let index = 0\n return {\n next: (): IteratorResult<T[number]> => {\n if (index < values.length) {\n return {\n value: values[index++],\n done: false,\n }\n } else {\n return {\n value: undefined,\n done: true,\n }\n }\n },\n }\n },\n toValue: () => ({ _tag: \"Tuple\", value: values }),\n }\n}\n","export type IESMap<K, V> = Map<K, V>\nexport const ESMap = Map\n","import type { Collection } from \"@/collections\"\nimport { type Traversable, Typeable } from \"@/index\"\nimport type { IterableType } from \"@/iterable\"\nimport { List } from \"@/list/List\"\nimport { Option } from \"@/option/Option\"\nimport { Set } from \"@/set/Set\"\nimport { Tuple } from \"@/tuple/Tuple\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nimport { ESMap, type IESMap } from \"./shim\"\n\ntype SafeTraversable<K, V> = Omit<Traversable<Tuple<[K, V]>>, \"map\" | \"flatMap\">\n\nexport type Map<K, V> = {\n add(item: Tuple<[K, V]>): Map<K, V>\n remove(value: K): Map<K, V>\n map<U>(f: (value: V) => U): Map<K, U>\n flatMap<K2, V2>(f: (entry: Tuple<[K, V]>) => IterableType<[K2, V2]>): Map<K2, V2>\n get(key: K): Option<V>\n getOrElse(key: K, defaultValue: V): V\n orElse(key: K, alternative: Option<V>): Option<V>\n} & SafeTraversable<K, V> &\n Collection<Tuple<[K, V]>> &\n Typeable<\"Map\"> &\n Valuable<\"Map\", IESMap<K, V>>\n\ntype MapState<K, V> = {\n values: IESMap<K, V>\n}\n\nconst createMap = <K, V>(entries?: readonly (readonly [K, V])[] | IterableIterator<[K, V]> | null): Map<K, V> => {\n const _tag = \"Map\"\n const state: MapState<K, V> = {\n values: new ESMap<K, V>(entries),\n }\n\n const getEntries = () => Array.from(state.values.entries()).map(([key, value]) => Tuple<[K, V]>([key, value]))\n\n const add = (item: Tuple<[K, V]>): Map<K, V> =>\n createMap(new ESMap(state.values).set(item.toArray()[0], item.toArray()[1]).entries())\n\n const remove = (value: K): Map<K, V> => {\n const newMap = new ESMap(state.values)\n return newMap.delete(value) ? createMap(newMap.entries()) : createMap(state.values.entries())\n }\n\n const contains = (value: Tuple<[K, V]>): boolean => state.values.get(value[0]) === value[1]\n\n const size = (): number => state.values.size\n\n const map = <U>(f: (value: V) => U): Map<K, U> =>\n createMap(Array.from(state.values.entries()).map(([k, v]) => [k, f(v)]))\n\n const flatMap = <K2, V2>(f: (entry: Tuple<[K, V]>) => IterableType<[K2, V2]>): Map<K2, V2> => {\n const list = createMap(state.values.entries()).toList()\n return createMap(list.flatMap(f).toArray())\n }\n\n const reduce = (f: (acc: Tuple<[K, V]>, value: Tuple<[K, V]>) => Tuple<[K, V]>): Tuple<[K, V]> =>\n List(getEntries()).reduce(f)\n\n const reduceRight = (f: (acc: Tuple<[K, V]>, value: Tuple<[K, V]>) => Tuple<[K, V]>): Tuple<[K, V]> =>\n List(getEntries()).reduceRight(f)\n\n const foldLeft =\n <B>(z: B) =>\n (op: (b: B, a: Tuple<[K, V]>) => B): B =>\n List(getEntries()).foldLeft(z)(op)\n\n const foldRight =\n <B>(z: B) =>\n (op: (a: Tuple<[K, V]>, b: B) => B): B =>\n List(getEntries()).foldRight(z)(op)\n\n const get = (key: K): Option<V> => Option(state.values.get(key))\n\n const getOrElse = (key: K, defaultValue: V): V => Option(state.values.get(key)).getOrElse(defaultValue)\n\n const isEmpty = (): boolean => state.values.size === 0\n\n const orElse = (key: K, alternative: Option<V>): Option<V> => Option(state.values.get(key)).orElse(alternative)\n\n const toList = (): List<Tuple<[K, V]>> => List(getEntries())\n\n const toSet = (): Set<Tuple<[K, V]>> => Set(getEntries())\n\n const toString = (): string => `Map(${getEntries().toString()})`\n\n const toValue = () => ({ _tag: \"Map\", value: state.values })\n\n return {\n _tag,\n add,\n remove,\n contains,\n get size() {\n return size()\n },\n map,\n flatMap,\n reduce,\n reduceRight,\n foldLeft,\n foldRight,\n get,\n getOrElse,\n get isEmpty() {\n return isEmpty()\n },\n orElse,\n toList,\n toSet,\n toString,\n toValue: () => ({ _tag: \"Map\", value: state.values }),\n }\n}\n\nexport const Map = <K, V>(entries?: readonly (readonly [K, V])[] | IterableIterator<[K, V]> | null): Map<K, V> =>\n createMap(entries)\n\n// Example usage\n// const myMap = createMap<string, unknown>([\n// [\"a\", 1],\n// [\"b\", 2],\n// [\"c\", 3],\n// ])\n","import stringify from \"safe-stable-stringify\"\n\nimport { Either, Left, Right } from \"@/either/Either\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\ntype TypeNames = \"Success\" | \"Failure\"\n\nexport type Try<T> = {\n readonly _tag: TypeNames\n readonly error: Error | undefined\n isSuccess: () => boolean\n isFailure: () => boolean\n get: () => T\n getOrElse: (defaultValue: T) => T\n orElse: (alternative: Try<T>) => Try<T>\n orThrow: (error: Error) => T\n toEither: () => Either<Error, T>\n map: <U>(f: (value: T) => U) => Try<U>\n flatMap: <U>(f: (value: T) => Try<U>) => Try<U>\n toString: () => string\n} & Typeable<TypeNames> &\n Valuable<TypeNames, T | Error>\n\nconst Success = <T>(value: T): Try<T> => ({\n _tag: \"Success\",\n error: undefined,\n isSuccess: () => true,\n isFailure: () => false,\n get: () => value,\n getOrElse: (_defaultValue: T) => value,\n orElse: (_alternative: Try<T>) => Success(value),\n orThrow: (_error: Error) => value,\n toEither: () => Right<Error, T>(value),\n map: <U>(f: (value: T) => U) => Try(() => f(value)),\n flatMap: <U>(f: (value: T) => Try<U>) => f(value),\n toString: () => `Success(${stringify(value)})`,\n toValue: () => ({ _tag: \"Success\", value }),\n})\n\nconst Failure = <T>(error: Error): Try<T> => ({\n _tag: \"Failure\",\n error,\n isSuccess: () => false,\n isFailure: () => true,\n get: () => {\n throw error\n },\n getOrElse: (defaultValue: T) => defaultValue,\n orElse: (alternative: Try<T>) => alternative,\n orThrow: (error: Error) => {\n throw error\n },\n toEither: () => Left<Error, T>(error),\n map: <U>(_f: (value: T) => U) => Failure<U>(error),\n flatMap: <U>(_f: (value: T) => Try<U>) => Failure<U>(error),\n toString: () => `Failure(${stringify(error)}))`,\n toValue: () => ({ _tag: \"Failure\", value: error }),\n})\n\nexport const Try = <T>(f: () => T): Try<T> => {\n try {\n return Success(f())\n } catch (error) {\n return Failure(error instanceof Error ? error : new Error(String(error)))\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/typeable/Typeable.ts","../src/core/base/Base.ts","../src/core/throwable/Throwable.ts","../src/option/Option.ts","../src/set/shim.ts","../src/set/Set.ts","../src/list/List.ts","../src/either/Either.ts","../src/core/task/Task.ts","../src/tuple/Tuple.ts","../src/map/shim.ts","../src/map/Map.ts","../src/try/Try.ts"],"names":["Typeable","tag","data","isTypeable","value","Base","type","body","NAME","Throwable","_Throwable","message","options","srcError","Some","f","predicate","NONE","_onNone","onSome","z","op","List","val","_left","Right","stringify","defaultValue","error","alternative","_f","_predicate","onNone","_onSome","left","Left","None","Option","ESSet","createSet","iterable","values","seqMethods","set","newSet","Set","createList","array","list","a","results","p","x","result","acc","index","item","other","n","RightConstructor","_defaultValue","_fl","fr","_onLeft","onRight","onfulfilled","onrejected","LeftConstructor","_other","fl","_fr","onLeft","_onRight","_onfulfilled","isRight","either","isLeft","tryCatch","onError","TypeCheckRight","TypeCheckLeft","tryCatchAsync","Either","eithers","rights","arr","leftValue","eitherF","eitherV","promise","onRejected","TaskException","_task","name","description","appError","TaskResult","Task","params","t","e","errorResult","Tuple","mapValue","ESMap","createMap","entries","_tag","state","getEntries","key","add","remove","newMap","contains","size","map","k","v","flatMap","reduce","reduceRight","foldLeft","foldRight","get","getOrElse","isEmpty","orElse","toList","toSet","toString","Map","Success","_alternative","_error","Try","Failure"],"mappings":"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","file":"index.mjs","sourcesContent":["// Core type for Typeable objects\nexport type Typeable<Tag extends string, T = object> = T & {\n readonly _tag: Tag\n}\n\nexport type TypeableParams<Tag extends string, T> = { tag: Tag; data: T }\n\n// Utility type to extract the Tag from a Typeable type\nexport type ExtractTag<T> = T extends Typeable<infer Tag, unknown> ? Tag : never\n\n// Create a tagged object with type inference\nexport function Typeable<Tag extends string, T>({ tag, data }: TypeableParams<Tag, T>): Typeable<Tag, T> {\n return {\n ...data,\n _tag: tag,\n }\n}\n\n// Type guard with automatic type inference using the full type\nexport function isTypeable<T>(value: unknown, tag: string): value is T {\n if (!value || typeof value !== \"object\" || !(\"_tag\" in value)) {\n return false\n }\n\n return tag ? value._tag === tag : true\n}\n\n// // Usage\n// type User = Typeable<\n// \"User\",\n// {\n// id: string\n// name: string\n// email: string\n// }\n// >\n//\n// const user = Typeable(\"User\", {\n// id: \"123\",\n// name: \"John\",\n// email: \"john@example.com\",\n// })\n//\n// const maybeUser: unknown = user\n//\n// // Now we only need to specify User type\n// if (isTypeable<User>(maybeUser, \"User\")) {\n// console.log(maybeUser.name) // typed\n// console.log(maybeUser.email) // typed\n// console.log(maybeUser._tag) // typed as \"User\"\n// }\n//\n// // Can still check just for Typeable without specific tag\n// if (isTypeable<User>(maybeUser)) {\n// console.log(maybeUser.name) // typed\n// console.log(maybeUser.email) // typed\n// console.log(maybeUser._tag) // typed as \"User\"\n// }\n","import { Typeable } from \"@/typeable/Typeable\"\n\n/**\n * Base Object from which most other objects inherit\n * @param type\n * @param body\n * @constructor\n */\nexport function Base<T>(type: string, body: T) {\n return {\n ...Typeable({ tag: type, data: body }),\n toString() {\n return `${type}()`\n },\n }\n}\n","import { Typeable } from \"@/typeable/Typeable\"\n\nconst NAME = \"Throwable\" as const\n\nexport type ThrowableType = Error &\n Typeable<typeof NAME> & {\n readonly data?: unknown\n readonly cause?: Error\n }\n\nexport class Throwable extends Error implements ThrowableType {\n public readonly _tag: typeof NAME\n public readonly data?: unknown\n public readonly cause?: Error\n\n protected constructor(message: string, options?: { data?: unknown; cause?: Error; stack?: string }) {\n super(message, { cause: options?.cause })\n\n // Set name before we capture stack trace\n this.name = NAME\n\n // Set immutable properties\n Object.defineProperties(this, {\n _tag: {\n value: NAME,\n writable: false,\n configurable: false,\n },\n data: {\n value: options?.data,\n writable: false,\n configurable: false,\n },\n name: {\n value: NAME,\n writable: false,\n configurable: false,\n },\n })\n\n // Handle cause separately since it comes from Error\n if (options?.cause) {\n Object.defineProperty(this, \"cause\", {\n value: options.cause,\n writable: false,\n configurable: false,\n })\n }\n\n // Handle stack trace\n if (options?.stack) {\n // If we have a stack from an original error, use it\n this.stack = options.stack\n } else if (Error.captureStackTrace) {\n // Otherwise capture a new stack trace\n Error.captureStackTrace(this, this.constructor)\n }\n }\n\n static apply(srcError: unknown, data?: unknown): ThrowableType {\n if (srcError instanceof Error) {\n // For Error instances, preserve the original stack trace\n return new Throwable(srcError.message, {\n data,\n cause: srcError.cause as Error | undefined,\n stack: srcError.stack,\n })\n }\n\n const message = typeof srcError === \"string\" ? srcError : \"An unknown error occurred\"\n return new Throwable(message, { data })\n }\n}\n","import stringify from \"safe-stable-stringify\"\n\nimport type { AsyncFunctor, Functor, Type } from \"@/functor\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nimport { Either, Left, List, Right, type Traversable } from \"../index\"\n\nexport type Option<T extends Type> = {\n readonly _tag: \"Some\" | \"None\"\n readonly value: T | undefined\n isEmpty: boolean\n get(): T\n getOrElse(defaultValue: T): T\n getOrThrow(error: Error): T\n orElse(alternative: Option<T>): Option<T>\n orNull(): T | null\n map<U extends Type>(f: (value: T) => U): Option<U>\n filter(predicate: (value: T) => boolean): Option<T>\n flatMap<U extends Type>(f: (value: T) => Option<U>): Option<U>\n flatMapAsync<U extends Type>(f: (value: T) => Promise<Option<U>>): Promise<Option<U>>\n reduce<U>(f: (acc: U, value: T) => U): U\n reduceRight<U>(f: (acc: U, value: T) => U): U\n fold<U>(onNone: () => U, onSome: (value: T) => U): U\n foldLeft<B>(z: B): (op: (b: B, a: T) => B) => B\n foldRight<B>(z: B): (op: (a: T, b: B) => B) => B\n toList(): List<T>\n contains(value: T): boolean\n size: number\n toEither<E>(left: E): Either<E, T>\n toString(): string\n toValue(): { _tag: \"Some\" | \"None\"; value: T }\n} & (Traversable<T> & Functor<T> & Typeable<\"Some\" | \"None\"> & Valuable<\"Some\" | \"None\", T> & AsyncFunctor<T>)\n\nexport const Some = <T extends Type>(value: T): Option<T> => ({\n _tag: \"Some\",\n value,\n isEmpty: false,\n get: () => value,\n getOrElse: () => value,\n getOrThrow: () => value,\n orElse: () => Some(value),\n orNull: () => value,\n map: <U extends Type>(f: (value: T) => U) => Some(f(value)),\n filter(predicate: (value: T) => boolean) {\n if (predicate(value)) {\n return Some<T>(value) // type narrowing\n } else {\n return NONE as unknown as Option<T>\n }\n },\n fold: <U extends Type>(_onNone: () => U, onSome: (value: T) => U) => {\n return onSome(value)\n },\n flatMap: <U extends Type>(f: (value: T) => Option<U>) => f(value),\n flatMapAsync: async <U extends Type>(f: (value: T) => Promise<Option<U>>) => {\n return await f(value)\n },\n reduce: <U>(f: (acc: U, value: T) => U) => f(undefined as never, value),\n reduceRight: <U>(f: (acc: U, value: T) => U) => f(undefined as never, value),\n foldLeft:\n <B>(z: B) =>\n (op: (b: B, a: T) => B) =>\n op(z, value),\n foldRight:\n <B>(z: B) =>\n (op: (a: T, b: B) => B) =>\n op(value, z),\n toList: () => List<T>([value]),\n contains: (val: T) => val === value,\n size: 1,\n toEither: <E>(_left: E) => Right<E, T>(value),\n toString: () => `Some(${stringify(value)})`,\n toValue: () => ({ _tag: \"Some\", value }),\n})\n\nconst NONE: Option<never> = {\n _tag: \"None\",\n value: undefined as never,\n isEmpty: true,\n get: () => {\n throw new Error(\"Cannot call get() on None\")\n },\n getOrElse: <T>(defaultValue: T) => defaultValue,\n getOrThrow<T>(error: Error): T {\n throw error\n },\n orElse: <T>(alternative: Option<T>) => alternative,\n orNull: () => null,\n map: <U extends Type>(_f: (value: never) => U) => NONE as unknown as Option<U>,\n filter(_predicate: (value: never) => boolean): Option<never> {\n return NONE\n },\n flatMap: <U extends Type>(_f: (value: never) => Option<U>) => NONE as unknown as Option<U>,\n flatMapAsync: async <U extends Type>(_f: (value: never) => Promise<Option<U>>) => {\n return NONE as unknown as Option<U>\n },\n reduce: () => undefined as never,\n reduceRight: () => undefined as never,\n fold: <U extends Type>(onNone: () => U, _onSome: (value: never) => U) => {\n return onNone()\n },\n foldLeft:\n <B>(z: B) =>\n () =>\n z,\n foldRight:\n <B>(z: B) =>\n () =>\n z,\n toList: () => List([]),\n contains: () => false,\n size: 0,\n toEither: <E>(left: E) => Left<E, never>(left),\n toString: () => \"None\",\n toValue: () => ({ _tag: \"None\", value: undefined as never }),\n}\n\nexport const None = <T extends Type>(): Option<T> => NONE as unknown as Option<T>\n\nexport const Option = <T extends Type>(value: T | null | undefined): Option<T> =>\n value !== null && value !== undefined ? Some<T>(value) : None<T>()\n\nOption.from = <T>(value: T) => Option(value)\nOption.none = <T>() => None<T>()\n","export type IESSet<T> = Set<T>\nexport const ESSet = Set\n","import type { Collection } from \"@/collections\"\nimport type { IterableType } from \"@/iterable\"\nimport { List } from \"@/list/List\"\nimport { Typeable } from \"@/typeable/Typeable\"\n\nimport { ESSet, type IESSet } from \"./shim\"\n\nexport type Set<A> = {\n add: (value: A) => Set<A>\n remove: (value: A) => Set<A>\n contains: (value: A) => boolean\n has: (value: A) => boolean\n map: <B>(f: (a: A) => B) => Set<B>\n flatMap: <B>(f: (a: A) => IterableType<B>) => Set<B>\n toList: () => List<A>\n toSet: () => Set<A>\n toString: () => string\n} & IterableType<A> &\n Collection<A> &\n Typeable<\"Set\">\n\nconst createSet = <A>(iterable?: Iterable<A>): Set<A> => {\n const values: IESSet<A> = new ESSet<A>(iterable)\n\n const seqMethods = List(values)\n\n const set: Set<A> = {\n ...seqMethods,\n _tag: \"Set\",\n\n add: (value: A): Set<A> => createSet([...values, value]),\n\n remove: (value: A): Set<A> => {\n const newSet = new ESSet(values)\n newSet.delete(value)\n return createSet(newSet)\n },\n\n contains: (value: A): boolean => values.has(value),\n\n has: (value: A): boolean => values.has(value),\n\n map: <B>(f: (a: A) => B): Set<B> => createSet(seqMethods.map(f)),\n\n flatMap: <B>(f: (a: A) => IterableType<B>): Set<B> => createSet(seqMethods.flatMap(f)),\n\n toList: (): List<A> => List(values),\n\n toSet: (): Set<A> => set,\n\n toString: (): string => `Set(${Array.from(values).toString()})`,\n }\n\n return set\n}\n\nexport const Set = <A>(iterable?: Iterable<A> | IterableType<A>): Set<A> => createSet(iterable)\n","import stringify from \"safe-stable-stringify\"\n\nimport type { AsyncFunctor } from \"@/functor\"\nimport type { IterableType } from \"@/iterable\"\nimport { None, Option } from \"@/option/Option\"\nimport { Set } from \"@/set/Set\"\nimport { type ExtractTag, isTypeable, Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nexport type List<A> = {\n readonly length: number\n readonly [Symbol.iterator]: () => Iterator<A>\n map: <B>(f: (a: A) => B) => List<B>\n flatMap: <B>(f: (a: A) => IterableType<B>) => List<B>\n flatMapAsync: <B>(f: (a: A) => PromiseLike<IterableType<B>>) => PromiseLike<List<B>>\n forEach: (f: (a: A) => void) => void\n count: (p: (x: A) => boolean) => number\n exists: (p: (a: A) => boolean) => boolean\n filter<S extends A>(predicate: (a: A) => a is S): List<S>\n filter(predicate: (a: A) => unknown): List<A>\n filterNot: (p: (a: A) => boolean) => List<A>\n filterType: <T extends Typeable<string, unknown>>(tag: string) => List<T & A>\n find: <T extends A = A>(predicate: (a: A) => boolean, tag?: ExtractTag<T>) => Option<T>\n readonly head: A\n readonly headOption: Option<A>\n readonly isEmpty: boolean\n toArray: <B = A>() => B[]\n reduce: (f: (prev: A, curr: A) => A) => A\n reduceRight: (f: (prev: A, curr: A) => A) => A\n foldLeft: <B>(z: B) => (op: (b: B, a: A) => B) => B\n foldRight: <B>(z: B) => (op: (a: A, b: B) => B) => B\n remove: (value: A) => List<A>\n removeAt: (index: number) => List<A>\n add: (item: A) => List<A>\n get: (index: number) => Option<A>\n concat: (other: List<A>) => List<A>\n toList: () => List<A>\n toSet: () => Set<A>\n toString: () => string\n} & IterableType<A> &\n AsyncFunctor<A> &\n Typeable<\"List\"> &\n Valuable<\"List\", A[]>\n\nconst createList = <A>(values?: Iterable<A>): List<A> => {\n const array: A[] = Array.from(values || [])\n\n const list: List<A> = {\n _tag: \"List\",\n\n [Symbol.iterator]: () => array[Symbol.iterator](),\n\n get size() {\n return array.length\n },\n\n get length() {\n return array.length\n },\n\n map: <B>(f: (a: A) => B) => createList(array.map(f)),\n\n flatMap: <B>(f: (a: A) => IterableType<B>) => createList(array.flatMap((a) => Array.from(f(a)))),\n\n flatMapAsync: async <B>(f: (a: A) => PromiseLike<IterableType<B>>): Promise<List<B>> => {\n const results = await Promise.all(array.map(async (a) => await f(a)))\n return createList(results.flatMap((iterable) => Array.from(iterable)))\n },\n\n forEach: (f: (a: A) => void) => array.forEach(f),\n\n count: (p: (x: A) => boolean) => array.filter(p).length,\n\n exists: (p: (a: A) => boolean) => array.some(p),\n\n filter: (predicate: (a: A) => unknown) => createList(array.filter(predicate as (a: A) => boolean)),\n\n filterNot: (p: (a: A) => boolean) => createList(array.filter((x) => !p(x))),\n\n filterType: <T extends Typeable<string, unknown>>(tag: string) =>\n createList(array.filter((x): x is T & A => isTypeable(x, tag))),\n\n find: <T extends A = A>(predicate: (a: A) => boolean, tag?: ExtractTag<T>) => {\n const result = array.find((x) => predicate(x) && (tag ? isTypeable(x, tag) : true))\n return Option<T>(result as T | null | undefined)\n },\n\n get head() {\n return array[0]\n },\n\n get headOption() {\n return array.length > 0 ? Option(array[0]) : None<A>()\n },\n\n get isEmpty() {\n return array.length === 0\n },\n\n toArray: <B = A>(): B[] => [...array] as unknown as B[],\n\n reduce: (f: (prev: A, curr: A) => A) => array.reduce(f),\n\n reduceRight: (f: (prev: A, curr: A) => A) => array.reduceRight(f),\n\n foldLeft:\n <B>(z: B) =>\n (op: (b: B, a: A) => B) =>\n array.reduce(op, z),\n\n foldRight:\n <B>(z: B) =>\n (op: (a: A, b: B) => B) =>\n array.reduceRight((acc, value) => op(value, acc), z),\n\n remove: (value: A) => createList(array.filter((x) => x !== value)),\n\n removeAt: (index: number) =>\n index < 0 || index >= array.length ? list : createList([...array.slice(0, index), ...array.slice(index + 1)]),\n\n add: (item: A) => createList([...array, item]),\n\n get: (index: number) => Option(array[index]),\n\n concat: (other: List<A>) => createList([...array, ...other.toArray()]),\n\n drop: (n: number) => createList(array.slice(n)),\n\n dropRight: (n: number) => createList(array.slice(0, -n)),\n\n dropWhile: (p: (a: A) => boolean) => createList(array.slice(array.findIndex((x) => !p(x)))),\n\n flatten: <B>() => createList(array.flatMap((item) => (Array.isArray(item) ? item : ([item] as unknown as B[])))),\n\n toList: () => list,\n\n toSet: () => Set(array),\n\n toString: () => `List(${stringify(array)})`,\n\n toValue: () => ({ _tag: \"List\", value: array }),\n }\n\n return list\n}\n\nexport const List = <A>(values?: Iterable<A>): List<A> => createList(values)\n","import stringify from \"safe-stable-stringify\"\n\nimport type { AsyncFunctor, Functor, Type } from \"@/functor\"\nimport { List } from \"@/list/List\"\nimport { None, Option, Some } from \"@/option/Option\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nexport type Either<L extends Type, R extends Type> = {\n readonly _tag: \"Left\" | \"Right\"\n value: L | R\n isLeft: () => boolean\n isRight: () => boolean\n getOrElse: (defaultValue: R) => R\n getOrThrow: () => R\n map: <U extends Type>(f: (value: R) => U) => Either<L, U>\n merge: <L1 extends Type, R1 extends Type>(other: Either<L1, R1>) => Either<L | L1, [R, R1]>\n mapAsync: <U extends Type>(f: (value: R) => Promise<U>) => Promise<Either<L, U>>\n flatMap: <U extends Type>(f: (value: R) => Either<L, U>) => Either<L, U>\n flatMapAsync: <U extends Type>(f: (value: R) => Promise<Either<L, U>>) => Promise<Either<L, U>>\n toOption: () => Option<R>\n toList: () => List<R>\n toString: () => string\n [Symbol.iterator]: () => Iterator<R>\n yield: () => Generator<R, void, unknown>\n traverse: <U extends Type>(f: (value: R) => Either<L, U>) => Either<L, U[]>\n lazyMap: <U extends Type>(f: (value: R) => U) => Generator<Either<L, U>, void, unknown>\n tap: (f: (value: R) => void) => Either<L, R>\n tapLeft: (f: (value: L) => void) => Either<L, R>\n mapLeft: <L2 extends Type>(f: (value: L) => L2) => Either<L2, R>\n bimap: <L2 extends Type, R2 extends Type>(fl: (value: L) => L2, fr: (value: R) => R2) => Either<L2, R2>\n fold: <T extends Type>(onLeft: (value: L) => T, onRight: (value: R) => T) => T\n swap: () => Either<R, L>\n} & Typeable<\"Left\" | \"Right\"> &\n Valuable<\"Left\" | \"Right\", L | R> &\n PromiseLike<R> &\n AsyncFunctor<R>\n\nexport type TestEither<L extends Type, R extends Type> = Either<L, R> & Functor<R> & AsyncFunctor<R>\n\nconst RightConstructor = <L extends Type, R extends Type>(value: R): Either<L, R> => ({\n _tag: \"Right\",\n value,\n isLeft: () => false,\n isRight: () => true,\n getOrElse: (_defaultValue: R) => value,\n getOrThrow: () => value,\n map: <U extends Type>(f: (value: R) => U): Either<L, U> => Right(f(value)),\n mapAsync: <U extends Type>(f: (value: R) => Promise<U>): Promise<Either<L, U>> =>\n f(value)\n .then((result) => Right<L, U>(result))\n .catch((error: unknown) => Promise.resolve(Left<L, U>(error as L))) as Promise<Either<L, U>>,\n merge: <L1 extends Type, R1 extends Type>(other: Either<L1, R1>): Either<L | L1, [R, R1]> =>\n other.isLeft() ? Left<L | L1, [R, R1]>(other.value as L1) : Right<L | L1, [R, R1]>([value, other.value as R1]),\n flatMap: <U extends Type>(f: (value: R) => Either<L, U>): Either<L, U> => f(value),\n flatMapAsync: <U extends Type>(f: (value: R) => Promise<Either<L, U>>): Promise<Either<L, U>> =>\n f(value).catch((error: unknown) => Left<L, U>(error as L)) as Promise<Either<L, U>>,\n toOption: () => Some<R>(value),\n toList: () => List<R>([value]),\n toString: () => `Right(${stringify(value)})`,\n [Symbol.iterator]: function* () {\n yield value\n },\n yield: function* () {\n yield value\n },\n traverse: <U extends Type>(f: (value: R) => Either<L, U>): Either<L, U[]> => {\n const result = f(value)\n return result.isLeft() ? Left(result.value as L) : Right([result.value as U])\n },\n lazyMap: function* <U extends Type>(f: (value: R) => U) {\n yield Right<L, U>(f(value))\n },\n tap: (f: (value: R) => void) => {\n f(value)\n return Right<L, R>(value)\n },\n tapLeft: (_f: (value: L) => void) => Right<L, R>(value),\n mapLeft: <L2 extends Type>(_f: (value: L) => L2) => Right<L2, R>(value),\n bimap: <L2 extends Type, R2 extends Type>(_fl: (value: L) => L2, fr: (value: R) => R2) => Right<L2, R2>(fr(value)),\n fold: <T extends Type>(_onLeft: (value: L) => T, onRight: (value: R) => T) => onRight(value),\n swap: () => Left<R, L>(value),\n then: <TResult1 = R, TResult2 = never>(\n onfulfilled?: ((value: R) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): PromiseLike<TResult1 | TResult2> => {\n return Promise.resolve(value).then(onfulfilled, onrejected)\n },\n toValue: () => ({ _tag: \"Right\", value }),\n})\n\nconst LeftConstructor = <L extends Type, R extends Type>(value: L): Either<L, R> => ({\n _tag: \"Left\",\n value,\n isLeft: () => true,\n isRight: () => false,\n getOrElse: (defaultValue: R): R => defaultValue,\n getOrThrow: () => {\n throw value\n },\n map: <U extends Type>(_f: (value: R) => U): Either<L, U> => Left<L, U>(value),\n mapAsync: <U extends Type>(_f: (value: R) => Promise<U>): Promise<Either<L, U>> =>\n Promise.resolve(Left<L, U>(value)) as Promise<Either<L, U>>,\n merge: <L1 extends Type, R1 extends Type>(_other: Either<L1, R1>): Either<L | L1, [R, R1]> =>\n Left<L | L1, [R, R1]>(value),\n flatMap: <U extends Type>(_f: (value: R) => Either<L, U>): Either<L, U> => Left<L, U>(value),\n flatMapAsync: <U extends Type>(_f: (value: R) => Promise<Either<L, U>>): Promise<Either<L, U>> =>\n Promise.resolve(Left<L, U>(value)) as Promise<Either<L, U>>,\n toOption: () => None<R>(),\n toList: () => List<R>(),\n toString: () => `Left(${stringify(value)})`,\n [Symbol.iterator]: function* () {\n // Left doesn't yield any values\n },\n yield: function* () {\n // Left doesn't yield any values\n },\n traverse: <U extends Type>(_f: (value: R) => Either<L, U>): Either<L, U[]> => Left(value),\n lazyMap: function* <U extends Type>(_f: (value: R) => U) {\n yield Left<L, U>(value)\n },\n tap: (_f: (value: R) => void) => Left<L, R>(value),\n tapLeft: (f: (value: L) => void) => {\n f(value)\n return Left<L, R>(value)\n },\n mapLeft: <L2 extends Type>(f: (value: L) => L2) => Left<L2, R>(f(value)),\n bimap: <L2 extends Type, R2 extends Type>(fl: (value: L) => L2, _fr: (value: R) => R2) => Left<L2, R2>(fl(value)),\n fold: <T extends Type>(onLeft: (value: L) => T, _onRight: (value: R) => T) => onLeft(value),\n swap: () => Right<R, L>(value),\n then: <TResult1 = R, TResult2 = never>(\n _onfulfilled?: ((value: R) => TResult1 | PromiseLike<TResult1>) | undefined | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | undefined | null,\n ): PromiseLike<TResult1 | TResult2> => {\n return Promise.reject(value).then(null, onrejected)\n },\n toValue: () => ({ _tag: \"Right\", value }),\n})\n\nexport const Right = <L extends Type, R extends Type>(value: R): Either<L, R> => RightConstructor(value)\nexport const Left = <L extends Type, R extends Type>(value: L): Either<L, R> => LeftConstructor(value)\n\nexport const isRight = <L extends Type, R extends Type>(either: Either<L, R>): either is Either<L, R> & { value: R } =>\n either.isRight()\nexport const isLeft = <L extends Type, R extends Type>(either: Either<L, R>): either is Either<L, R> & { value: L } =>\n either.isLeft()\n\nexport const tryCatch = <L extends Type, R extends Type>(f: () => R, onError: (error: unknown) => L): Either<L, R> => {\n try {\n return Right<L, R>(f())\n } catch (error: unknown) {\n return Left<L, R>(onError(error))\n }\n}\n\nexport const TypeCheckRight = <L extends Type, R extends Type>(value: R): TestEither<L, R> => RightConstructor(value)\nconsole.assert(TypeCheckRight)\nexport const TypeCheckLeft = <L extends Type, R extends Type>(value: L): TestEither<L, R> => LeftConstructor(value)\nconsole.assert(TypeCheckLeft)\n\nexport const tryCatchAsync = async <L extends Type, R extends Type>(\n f: () => Promise<R>,\n onError: (error: unknown) => L,\n): Promise<Either<L, R>> => {\n try {\n const result = await f()\n return Right<L, R>(result)\n } catch (error: unknown) {\n return Left<L, R>(onError(error))\n }\n}\n\nexport const Either = {\n sequence: <L extends Type, R extends Type>(eithers: Either<L, R>[]): Either<L, R[]> => {\n const rights: R[] = []\n for (const either of eithers) {\n if (either.isLeft()) {\n return Left(either.value as L)\n }\n rights.push(either.value as R)\n }\n return Right(rights)\n },\n\n traverse: <L extends Type, R extends Type, U extends Type>(\n arr: R[],\n f: (value: R) => Either<L, U>,\n ): Either<L, U[]> => {\n return Either.sequence(arr.map(f))\n },\n\n fromNullable: <L extends Type, R extends Type>(value: R | null | undefined, leftValue: L): Either<L, R> =>\n value === null || value === undefined ? Left(leftValue) : Right(value as R),\n\n fromPredicate: <L extends Type, R extends Type>(\n value: R,\n predicate: (value: R) => boolean,\n leftValue: L,\n ): Either<L, R> => (predicate(value) ? Right(value) : Left(leftValue)),\n\n ap: <L extends Type, R extends Type, U extends Type>(\n eitherF: Either<L, (value: R) => U>,\n eitherV: Either<L, R>,\n ): Either<L, U> => eitherF.flatMap((f) => eitherV.map(f)),\n\n fromPromise: async <L, R>(promise: Promise<R>, onRejected: (reason: unknown) => L): Promise<Either<L, R>> => {\n try {\n const result = await promise\n return Right<L, R>(result)\n } catch (error) {\n return Left<L, R>(onRejected(error))\n }\n },\n}\n","import { Throwable } from \"@/core/throwable/Throwable\"\nimport { Either, Left, Right } from \"@/either/Either\"\n\nimport { Base } from \"../base/Base\"\n\nexport type TaskParams = {\n name?: string\n description?: string\n}\n\nexport type TaskInfo = {\n _task: TaskParams\n}\n\nexport type TaskException<T> = Either<Throwable, T> & TaskInfo\n\n/**\n * AppException factory function\n * @param error\n * @param _task\n * @param data\n * @constructor\n */\nexport const TaskException = <T>(error: unknown, _task?: TaskParams, data?: unknown): TaskException<T> => {\n const name = _task?.name || \"TaskException\"\n const description = _task?.description || \"Unspecified TaskException\"\n const appError = Throwable.apply(error, data)\n return {\n ...Base(\"TaskException\", Left(appError)),\n _task: { name, description },\n }\n}\n\nexport type TaskResult<T> = Either<Throwable, T> & TaskInfo\n\nexport const TaskResult = <T>(data: T, _task?: TaskParams): TaskResult<T> => {\n const name = _task?.name || \"TaskResult\"\n const description = _task?.description || \"Unspecified TaskResult\"\n return {\n ...Base(\"TaskResult\", Right(data)),\n _task: { name, description },\n ///..Right(data),\n }\n}\n\nexport type Sync<T> = Either<Throwable, T>\nexport type Async<T> = Promise<Sync<T>>\n\nexport const Task = <T = unknown>(params?: TaskParams) => {\n const name = params?.name || \"Task\"\n const description = params?.description || \"\"\n const body = {\n Async: async <U = T>(\n t: () => U,\n e: (error: unknown) => unknown = (error: unknown) => error,\n f: () => Promise<void> | void = async () => {},\n ): Async<U> => {\n try {\n const result = await t()\n return TaskResult<U>(result, { name, description })\n } catch (error) {\n const errorResult = await e(error)\n return TaskException<U>(errorResult, { name, description })\n } finally {\n await f()\n }\n },\n Sync: <U = T>(\n t: () => U,\n e: (error: unknown) => unknown = (error: unknown) => error,\n f: () => void = () => {},\n ): Sync<U> => {\n try {\n return TaskResult<U>(t(), { name, description })\n } catch (error) {\n return TaskException<U>(e(error), { name, description })\n } finally {\n f()\n }\n },\n success: (data: T) => TaskResult<T>(data, { name, description }),\n fail: (error: unknown) => TaskException<T>(error, { name, description }),\n }\n return Base(\"Task\", body)\n}\n","import type { ArrayFunctor, ArrayType } from \"@/functor\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nexport type Tuple<T extends ArrayType> = {\n get<K extends number>(index: K): T[K]\n\n map<U extends ArrayType>(f: (value: T) => U): Tuple<U>\n\n flatMap<U extends ArrayType>(f: (value: T) => Tuple<U>): Tuple<U>\n\n toArray(): T\n\n [Symbol.iterator](): Iterator<T[number]>\n} & ArrayFunctor<T> &\n Typeable<\"Tuple\"> &\n Valuable<\"Tuple\", T>\n\nexport const Tuple = <T extends ArrayType>(values: T): Tuple<T> => {\n return {\n _tag: \"Tuple\",\n map: <U extends ArrayType>(f: (value: T) => U): Tuple<U> => {\n const mapValue = f(values)\n return Tuple(mapValue)\n },\n\n flatMap: <U extends ArrayType>(f: (value: T) => Tuple<U>): Tuple<U> => {\n return f(values)\n },\n\n get: <K extends number>(index: K): T[K] => {\n return values[index]\n },\n\n toArray: (): T => {\n return values\n },\n [Symbol.iterator](): Iterator<T[number]> {\n let index = 0\n return {\n next: (): IteratorResult<T[number]> => {\n if (index < values.length) {\n return {\n value: values[index++],\n done: false,\n }\n } else {\n return {\n value: undefined,\n done: true,\n }\n }\n },\n }\n },\n toValue: () => ({ _tag: \"Tuple\", value: values }),\n }\n}\n","export type IESMap<K, V> = Map<K, V>\nexport const ESMap = Map\n","import type { Collection } from \"@/collections\"\nimport { type Traversable, Typeable } from \"@/index\"\nimport type { IterableType } from \"@/iterable\"\nimport { List } from \"@/list/List\"\nimport { Option } from \"@/option/Option\"\nimport { Set } from \"@/set/Set\"\nimport { Tuple } from \"@/tuple/Tuple\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nimport { ESMap, type IESMap } from \"./shim\"\n\ntype SafeTraversable<K, V> = Omit<Traversable<Tuple<[K, V]>>, \"map\" | \"flatMap\">\n\nexport type Map<K, V> = {\n add(item: Tuple<[K, V]>): Map<K, V>\n remove(value: K): Map<K, V>\n map<U>(f: (value: V) => U): Map<K, U>\n flatMap<K2, V2>(f: (entry: Tuple<[K, V]>) => IterableType<[K2, V2]>): Map<K2, V2>\n get(key: K): Option<V>\n getOrElse(key: K, defaultValue: V): V\n orElse(key: K, alternative: Option<V>): Option<V>\n} & SafeTraversable<K, V> &\n Collection<Tuple<[K, V]>> &\n Typeable<\"Map\"> &\n Valuable<\"Map\", IESMap<K, V>>\n\ntype MapState<K, V> = {\n values: IESMap<K, V>\n}\n\nconst createMap = <K, V>(entries?: readonly (readonly [K, V])[] | IterableIterator<[K, V]> | null): Map<K, V> => {\n const _tag = \"Map\"\n const state: MapState<K, V> = {\n values: new ESMap<K, V>(entries),\n }\n\n const getEntries = () => Array.from(state.values.entries()).map(([key, value]) => Tuple<[K, V]>([key, value]))\n\n const add = (item: Tuple<[K, V]>): Map<K, V> =>\n createMap(new ESMap(state.values).set(item.toArray()[0], item.toArray()[1]).entries())\n\n const remove = (value: K): Map<K, V> => {\n const newMap = new ESMap(state.values)\n return newMap.delete(value) ? createMap(newMap.entries()) : createMap(state.values.entries())\n }\n\n const contains = (value: Tuple<[K, V]>): boolean => state.values.get(value[0]) === value[1]\n\n const size = (): number => state.values.size\n\n const map = <U>(f: (value: V) => U): Map<K, U> =>\n createMap(Array.from(state.values.entries()).map(([k, v]) => [k, f(v)]))\n\n const flatMap = <K2, V2>(f: (entry: Tuple<[K, V]>) => IterableType<[K2, V2]>): Map<K2, V2> => {\n const list = createMap(state.values.entries()).toList()\n return createMap(list.flatMap(f).toArray())\n }\n\n const reduce = (f: (acc: Tuple<[K, V]>, value: Tuple<[K, V]>) => Tuple<[K, V]>): Tuple<[K, V]> =>\n List(getEntries()).reduce(f)\n\n const reduceRight = (f: (acc: Tuple<[K, V]>, value: Tuple<[K, V]>) => Tuple<[K, V]>): Tuple<[K, V]> =>\n List(getEntries()).reduceRight(f)\n\n const foldLeft =\n <B>(z: B) =>\n (op: (b: B, a: Tuple<[K, V]>) => B): B =>\n List(getEntries()).foldLeft(z)(op)\n\n const foldRight =\n <B>(z: B) =>\n (op: (a: Tuple<[K, V]>, b: B) => B): B =>\n List(getEntries()).foldRight(z)(op)\n\n const get = (key: K): Option<V> => Option(state.values.get(key))\n\n const getOrElse = (key: K, defaultValue: V): V => Option(state.values.get(key)).getOrElse(defaultValue)\n\n const isEmpty = (): boolean => state.values.size === 0\n\n const orElse = (key: K, alternative: Option<V>): Option<V> => Option(state.values.get(key)).orElse(alternative)\n\n const toList = (): List<Tuple<[K, V]>> => List(getEntries())\n\n const toSet = (): Set<Tuple<[K, V]>> => Set(getEntries())\n\n const toString = (): string => `Map(${getEntries().toString()})`\n\n const toValue = () => ({ _tag: \"Map\", value: state.values })\n\n return {\n _tag,\n add,\n remove,\n contains,\n get size() {\n return size()\n },\n map,\n flatMap,\n reduce,\n reduceRight,\n foldLeft,\n foldRight,\n get,\n getOrElse,\n get isEmpty() {\n return isEmpty()\n },\n orElse,\n toList,\n toSet,\n toString,\n toValue: () => ({ _tag: \"Map\", value: state.values }),\n }\n}\n\nexport const Map = <K, V>(entries?: readonly (readonly [K, V])[] | IterableIterator<[K, V]> | null): Map<K, V> =>\n createMap(entries)\n\n// Example usage\n// const myMap = createMap<string, unknown>([\n// [\"a\", 1],\n// [\"b\", 2],\n// [\"c\", 3],\n// ])\n","import stringify from \"safe-stable-stringify\"\n\nimport { Either, Left, Right } from \"@/either/Either\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\ntype TypeNames = \"Success\" | \"Failure\"\n\nexport type Try<T> = {\n readonly _tag: TypeNames\n readonly error: Error | undefined\n isSuccess: () => boolean\n isFailure: () => boolean\n get: () => T\n getOrElse: (defaultValue: T) => T\n orElse: (alternative: Try<T>) => Try<T>\n orThrow: (error: Error) => T\n toEither: () => Either<Error, T>\n map: <U>(f: (value: T) => U) => Try<U>\n flatMap: <U>(f: (value: T) => Try<U>) => Try<U>\n toString: () => string\n} & Typeable<TypeNames> &\n Valuable<TypeNames, T | Error>\n\nconst Success = <T>(value: T): Try<T> => ({\n _tag: \"Success\",\n error: undefined,\n isSuccess: () => true,\n isFailure: () => false,\n get: () => value,\n getOrElse: (_defaultValue: T) => value,\n orElse: (_alternative: Try<T>) => Success(value),\n orThrow: (_error: Error) => value,\n toEither: () => Right<Error, T>(value),\n map: <U>(f: (value: T) => U) => Try(() => f(value)),\n flatMap: <U>(f: (value: T) => Try<U>) => f(value),\n toString: () => `Success(${stringify(value)})`,\n toValue: () => ({ _tag: \"Success\", value }),\n})\n\nconst Failure = <T>(error: Error): Try<T> => ({\n _tag: \"Failure\",\n error,\n isSuccess: () => false,\n isFailure: () => true,\n get: () => {\n throw error\n },\n getOrElse: (defaultValue: T) => defaultValue,\n orElse: (alternative: Try<T>) => alternative,\n orThrow: (error: Error) => {\n throw error\n },\n toEither: () => Left<Error, T>(error),\n map: <U>(_f: (value: T) => U) => Failure<U>(error),\n flatMap: <U>(_f: (value: T) => Try<U>) => Failure<U>(error),\n toString: () => `Failure(${stringify(error)}))`,\n toValue: () => ({ _tag: \"Failure\", value: error }),\n})\n\nexport const Try = <T>(f: () => T): Try<T> => {\n try {\n return Success(f())\n } catch (error) {\n return Failure(error instanceof Error ? error : new Error(String(error)))\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "functype",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.53",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A smallish functional library for TypeScript",
|
|
6
6
|
"author": "jordan.burke@gmail.com",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"@typescript-eslint/eslint-plugin": "^8.24.1",
|
|
20
20
|
"@typescript-eslint/parser": "^8.24.1",
|
|
21
21
|
"@vitest/coverage-v8": "^3.0.6",
|
|
22
|
-
"@vitest/ui": "^3.0.
|
|
22
|
+
"@vitest/ui": "^3.0.7",
|
|
23
23
|
"cross-env": "^7.0.3",
|
|
24
24
|
"eslint": "^9.21.0",
|
|
25
25
|
"eslint-config-prettier": "^10.0.1",
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
"prettier": "^3.5.1",
|
|
31
31
|
"rimraf": "^6.0.1",
|
|
32
32
|
"ts-node": "^10.9.2",
|
|
33
|
-
"tsup": "^8.
|
|
34
|
-
"typescript": "5.
|
|
35
|
-
"vitest": "^3.0.
|
|
33
|
+
"tsup": "^8.4.0",
|
|
34
|
+
"typescript": "5.8.2",
|
|
35
|
+
"vitest": "^3.0.7"
|
|
36
36
|
},
|
|
37
37
|
"types": "./dist/index.d.ts",
|
|
38
38
|
"module": "./dist/index.mjs",
|