functype 0.8.50 → 0.8.52
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/LICENSE +21 -0
- package/README.md +175 -21
- package/dist/index.d.ts +6 -6
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Jordan Burke
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,43 +1,197 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
A small functional library for TypeScript inspired by FP, Scala Standard Library, and ZIO
|
|
1
|
+
# Functype
|
|
4
2
|
|
|
5
3
|

|
|
6
|
-
|
|
7
4
|
[](https://github.com/jordanburke/functype/actions/workflows/pnpm-build.yml)
|
|
8
5
|
|
|
9
|
-
|
|
6
|
+
## A Functional Programming Library for TypeScript
|
|
7
|
+
|
|
8
|
+
Functype is a lightweight functional programming library for TypeScript, drawing inspiration from functional programming paradigms, the Scala Standard Library, and ZIO. It provides a comprehensive set of utilities and abstractions designed to facilitate functional programming within TypeScript applications.
|
|
9
|
+
|
|
10
|
+
## Core Principles
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
- **Immutability**: All data structures are immutable, promoting predictable and side-effect-free code
|
|
13
|
+
- **Type Safety**: Leverages TypeScript's type system to ensure compile-time safety
|
|
14
|
+
- **Composability**: Provides abstractions for building complex programs from simple components
|
|
15
|
+
- **Functional Paradigms**: Embraces concepts like monads, functors, and type classes
|
|
12
16
|
|
|
13
17
|
## Key Features
|
|
14
18
|
|
|
15
|
-
- **
|
|
19
|
+
- **Option Type**: Handle nullable values with `Some` and `None` types
|
|
20
|
+
- **Either Type**: Express computation results with potential failures using `Left` and `Right`
|
|
21
|
+
- **List, Set, Map**: Immutable collection types with functional operators
|
|
22
|
+
- **Try Type**: Safely execute operations that might throw exceptions
|
|
23
|
+
- **Task**: Handle synchronous and asynchronous operations with error handling
|
|
24
|
+
- **Tuple**: Type-safe fixed-length arrays
|
|
25
|
+
- **Typeable**: Runtime type identification with compile-time safety
|
|
16
26
|
|
|
17
|
-
|
|
27
|
+
## Installation
|
|
18
28
|
|
|
19
|
-
|
|
29
|
+
```bash
|
|
30
|
+
# NPM
|
|
31
|
+
npm install functype
|
|
20
32
|
|
|
21
|
-
|
|
33
|
+
# Yarn
|
|
34
|
+
yarn add functype
|
|
22
35
|
|
|
23
|
-
|
|
36
|
+
# PNPM
|
|
37
|
+
pnpm add functype
|
|
24
38
|
|
|
25
|
-
|
|
39
|
+
# Bun
|
|
40
|
+
bun add functype
|
|
41
|
+
```
|
|
26
42
|
|
|
27
|
-
|
|
43
|
+
## Usage Examples
|
|
28
44
|
|
|
29
|
-
|
|
30
|
-
|
|
45
|
+
### Option
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { Option, Some, None } from "functype"
|
|
49
|
+
|
|
50
|
+
// Create options
|
|
51
|
+
const value = Option("hello") // Some("hello")
|
|
52
|
+
const empty = Option(null) // None
|
|
53
|
+
const explicit = Some(42) // Some(42)
|
|
54
|
+
|
|
55
|
+
// Transform values
|
|
56
|
+
const length = value.map((s) => s.length) // Some(5)
|
|
57
|
+
const nothing = empty.map((s) => s.length) // None
|
|
58
|
+
|
|
59
|
+
// Handle default values
|
|
60
|
+
const result = value.getOrElse("world") // "hello"
|
|
61
|
+
const fallback = empty.getOrElse("world") // "world"
|
|
62
|
+
|
|
63
|
+
// Conditionally filter
|
|
64
|
+
const filtered = value.filter((s) => s.length > 10) // None
|
|
31
65
|
```
|
|
32
66
|
|
|
33
|
-
|
|
34
|
-
|
|
67
|
+
### Either
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
import { Either, Right, Left } from "functype"
|
|
71
|
+
|
|
72
|
+
// Success case
|
|
73
|
+
const success = Right<string, number>(42)
|
|
74
|
+
// Error case
|
|
75
|
+
const failure = Left<string, number>("error")
|
|
76
|
+
|
|
77
|
+
// Transform values (map only applies to Right)
|
|
78
|
+
const doubled = success.map((x) => x * 2) // Right(84)
|
|
79
|
+
const stillError = failure.map((x) => x * 2) // Left("error")
|
|
80
|
+
|
|
81
|
+
// Handle errors
|
|
82
|
+
const value = success.getOrElse(0) // 42
|
|
83
|
+
const fallback = failure.getOrElse(0) // 0
|
|
84
|
+
|
|
85
|
+
// Pattern matching with fold
|
|
86
|
+
const result = success.fold(
|
|
87
|
+
(err) => `Error: ${err}`,
|
|
88
|
+
(val) => `Success: ${val}`,
|
|
89
|
+
) // "Success: 42"
|
|
35
90
|
```
|
|
36
91
|
|
|
37
|
-
|
|
38
|
-
|
|
92
|
+
### List
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
import { List } from "functype"
|
|
96
|
+
|
|
97
|
+
const numbers = List([1, 2, 3, 4])
|
|
98
|
+
|
|
99
|
+
// Transform
|
|
100
|
+
const doubled = numbers.map((x) => x * 2) // List([2, 4, 6, 8])
|
|
101
|
+
|
|
102
|
+
// Filter
|
|
103
|
+
const evens = numbers.filter((x) => x % 2 === 0) // List([2, 4])
|
|
104
|
+
|
|
105
|
+
// Reduce
|
|
106
|
+
const sum = numbers.foldLeft(0)((acc, x) => acc + x) // 10
|
|
107
|
+
|
|
108
|
+
// Add/remove elements (immutably)
|
|
109
|
+
const withFive = numbers.add(5) // List([1, 2, 3, 4, 5])
|
|
110
|
+
const without3 = numbers.remove(3) // List([1, 2, 4])
|
|
39
111
|
```
|
|
40
112
|
|
|
41
|
-
|
|
42
|
-
|
|
113
|
+
### Try
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
import { Try } from "functype"
|
|
117
|
+
|
|
118
|
+
// Safely execute code that might throw
|
|
119
|
+
const result = Try(() => {
|
|
120
|
+
// Potentially throwing operation
|
|
121
|
+
return JSON.parse('{"name": "John"}')
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
// Handle success/failure
|
|
125
|
+
if (result.isSuccess()) {
|
|
126
|
+
console.log("Result:", result.get())
|
|
127
|
+
} else {
|
|
128
|
+
console.error("Error:", result.error)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Transform with map (only applies on Success)
|
|
132
|
+
const name = result.map((obj) => obj.name)
|
|
133
|
+
|
|
134
|
+
// Convert to Either
|
|
135
|
+
const either = result.toEither()
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Task
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
import { Task } from "functype"
|
|
142
|
+
|
|
143
|
+
// Synchronous operations with error handling
|
|
144
|
+
const syncResult = Task().Task(
|
|
145
|
+
() => "success",
|
|
146
|
+
(error) => new Error(`Failed: ${error}`),
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
// Asynchronous operations
|
|
150
|
+
const asyncTask = async () => {
|
|
151
|
+
const result = await Task().Async(
|
|
152
|
+
async () => await fetchData(),
|
|
153
|
+
async (error) => new Error(`Fetch failed: ${error}`),
|
|
154
|
+
)
|
|
155
|
+
return result
|
|
156
|
+
}
|
|
43
157
|
```
|
|
158
|
+
|
|
159
|
+
## Type Safety
|
|
160
|
+
|
|
161
|
+
Functype leverages TypeScript's advanced type system to provide compile-time safety for functional patterns, ensuring that your code is both robust and maintainable.
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
// Type inference works seamlessly
|
|
165
|
+
const option = Option(42)
|
|
166
|
+
// Inferred as number
|
|
167
|
+
const mappedValue = option.map((x) => x.toString())
|
|
168
|
+
// Inferred as string
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Contributing
|
|
172
|
+
|
|
173
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
174
|
+
|
|
175
|
+
## License
|
|
176
|
+
|
|
177
|
+
MIT License
|
|
178
|
+
|
|
179
|
+
Copyright (c) 2025 Jordan Burke
|
|
180
|
+
|
|
181
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
182
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
183
|
+
in the Software without restriction, including without limitation the rights
|
|
184
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
185
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
186
|
+
furnished to do so, subject to the following conditions:
|
|
187
|
+
|
|
188
|
+
The above copyright notice and this permission notice shall be included in all
|
|
189
|
+
copies or substantial portions of the Software.
|
|
190
|
+
|
|
191
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
192
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
193
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
194
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
195
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
196
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
197
|
+
SOFTWARE.
|
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
|
|
251
|
-
declare const Task: <T>(params?: TaskParams) => {
|
|
252
|
-
Async: (t: () =>
|
|
253
|
-
Sync: (t: () =>
|
|
249
|
+
type Async<T> = Promise<Task<T>>;
|
|
250
|
+
type Task<T> = Either<Throwable, T>;
|
|
251
|
+
declare const Task: <T = unknown>(params?: TaskParams) => {
|
|
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) => Task<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,
|
|
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 };
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import O from'safe-stable-stringify';function U({tag:t,data:e}){return {...e,_tag:t}}function B(t,e){return !t||typeof t!="object"||!("_tag"in t)?false:e?t._tag===e:true}function g(t,e){return {...U({tag:t,data:e}),toString(){return `${t}()`}}}var v="Throwable",b=class t extends Error{constructor(e,r){super(e,{cause:r?.cause}),this.name=v,Object.defineProperties(this,{_tag:{value:v,writable:false,configurable:false},data:{value:r?.data,writable:false,configurable:false},name:{value:v,writable:false,configurable:false}}),r?.cause&&Object.defineProperty(this,"cause",{value:r.cause,writable:false,configurable:false}),r?.stack?this.stack=r.stack:Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor);}static apply(e,r){if(e instanceof Error)return new t(e.message,{data:r,cause:e.cause,stack:e.stack});let o=typeof e=="string"?e:"An unknown error occurred";return new t(o,{data:r})}};var L=t=>({_tag:"Some",value:t,isEmpty:false,get:()=>t,getOrElse:()=>t,getOrThrow:()=>t,orElse:()=>L(t),orNull:()=>t,map:e=>L(e(t)),filter(e){return e(t)?L(t):m},fold:(e,r)=>r(t),flatMap:e=>e(t),flatMapAsync:async e=>await e(t),reduce:e=>e(void 0,t),reduceRight:e=>e(void 0,t),foldLeft:e=>r=>r(e,t),foldRight:e=>r=>r(t,e),toList:()=>T([t]),contains:e=>e===t,size:1,toEither:e=>i(t),toString:()=>`Some(${O(t)})`,toValue:()=>({_tag:"Some",value:t})}),m={_tag:"None",value:void 0,isEmpty:true,get:()=>{throw new Error("Cannot call get() on None")},getOrElse:t=>t,getOrThrow(t){throw t},orElse:t=>t,orNull:()=>null,map:t=>m,filter(t){return m},flatMap:t=>m,flatMapAsync:async t=>m,reduce:()=>{},reduceRight:()=>{},fold:(t,e)=>t(),foldLeft:t=>()=>t,foldRight:t=>()=>t,toList:()=>T([]),contains:()=>false,size:0,toEither:t=>a(t),toString:()=>"None",toValue:()=>({_tag:"None",value:void 0})},R=()=>m,f=t=>t!=null?L(t):R();f.from=t=>f(t);f.none=()=>R();var S=Set;var A=t=>{let e=new S(t),r=T(e),o={...r,_tag:"Set",add:n=>A([...e,n]),remove:n=>{let p=new S(e);return p.delete(n),A(p)},contains:n=>e.has(n),has:n=>e.has(n),map:n=>A(r.map(n)),flatMap:n=>A(r.flatMap(n)),toList:()=>T(e),toSet:()=>o,toString:()=>`Set(${Array.from(e).toString()})`};return o},h=t=>A(t);var u=t=>{let e=Array.from(t||[]),r={_tag:"List",[Symbol.iterator]:()=>e[Symbol.iterator](),get size(){return e.length},get length(){return e.length},map:o=>u(e.map(o)),flatMap:o=>u(e.flatMap(n=>Array.from(o(n)))),flatMapAsync:async o=>{let n=await Promise.all(e.map(async p=>await o(p)));return u(n.flatMap(p=>Array.from(p)))},forEach:o=>e.forEach(o),count:o=>e.filter(o).length,exists:o=>e.some(o),filter:o=>u(e.filter(o)),filterNot:o=>u(e.filter(n=>!o(n))),filterType:o=>u(e.filter(n=>B(n,o))),find:(o,n)=>{let p=e.find(c=>o(c)&&(n?B(c,n):true));return f(p)},get head(){return e[0]},get headOption(){return e.length>0?f(e[0]):R()},get isEmpty(){return e.length===0},toArray:()=>[...e],reduce:o=>e.reduce(o),reduceRight:o=>e.reduceRight(o),foldLeft:o=>n=>e.reduce(n,o),foldRight:o=>n=>e.reduceRight((p,c)=>n(c,p),o),remove:o=>u(e.filter(n=>n!==o)),removeAt:o=>o<0||o>=e.length?r:u([...e.slice(0,o),...e.slice(o+1)]),add:o=>u([...e,o]),get:o=>f(e[o]),concat:o=>u([...e,...o.toArray()]),drop:o=>u(e.slice(o)),dropRight:o=>u(e.slice(0,-o)),dropWhile:o=>u(e.slice(e.findIndex(n=>!o(n)))),flatten:()=>u(e.flatMap(o=>Array.isArray(o)?o:[o])),toList:()=>r,toSet:()=>h(e),toString:()=>`List(${O(e)})`,toValue:()=>({_tag:"List",value:e})};return r},T=t=>u(t);var K=t=>({_tag:"Right",value:t,isLeft:()=>false,isRight:()=>true,getOrElse:e=>t,getOrThrow:()=>t,map:e=>i(e(t)),mapAsync:e=>e(t).then(r=>i(r)).catch(r=>Promise.resolve(a(r))),merge:e=>e.isLeft()?a(e.value):i([t,e.value]),flatMap:e=>e(t),flatMapAsync:e=>e(t).catch(r=>a(r)),toOption:()=>L(t),toList:()=>T([t]),toString:()=>`Right(${O(t)})`,[Symbol.iterator]:function*(){yield t;},yield:function*(){yield t;},traverse:e=>{let r=e(t);return r.isLeft()?a(r.value):i([r.value])},lazyMap:function*(e){yield i(e(t));},tap:e=>(e(t),i(t)),tapLeft:e=>i(t),mapLeft:e=>i(t),bimap:(e,r)=>i(r(t)),fold:(e,r)=>r(t),swap:()=>a(t),then:(e,r)=>Promise.resolve(t).then(e,r),toValue:()=>({_tag:"Right",value:t})}),_=t=>({_tag:"Left",value:t,isLeft:()=>true,isRight:()=>false,getOrElse:e=>e,getOrThrow:()=>{throw t},map:e=>a(t),mapAsync:e=>Promise.resolve(a(t)),merge:e=>a(t),flatMap:e=>a(t),flatMapAsync:e=>Promise.resolve(a(t)),toOption:()=>R(),toList:()=>T(),toString:()=>`Left(${O(t)})`,[Symbol.iterator]:function*(){},yield:function*(){},traverse:e=>a(t),lazyMap:function*(e){yield a(t);},tap:e=>a(t),tapLeft:e=>(e(t),a(t)),mapLeft:e=>a(e(t)),bimap:(e,r)=>a(e(t)),fold:(e,r)=>e(t),swap:()=>i(t),then:(e,r)=>Promise.reject(t).then(null,r),toValue:()=>({_tag:"Right",value:t})}),i=t=>K(t),a=t=>_(t),$e=t=>t.isRight(),je=t=>t.isLeft(),qe=(t,e)=>{try{return i(t())}catch(r){return a(e(r))}},Z=t=>K(t);console.assert(Z);var ee=t=>_(t);console.assert(ee);var Ge=async(t,e)=>{try{let r=await t();return i(r)}catch(r){return a(e(r))}},te={sequence:t=>{let e=[];for(let r of t){if(r.isLeft())return a(r.value);e.push(r.value);}return i(e)},traverse:(t,e)=>te.sequence(t.map(e)),fromNullable:(t,e)=>t==null?a(e):i(t),fromPredicate:(t,e,r)=>e(t)?i(t):a(r),ap:(t,e)=>t.flatMap(r=>e.map(r)),fromPromise:async(t,e)=>{try{let r=await t;return i(r)}catch(r){return a(e(r))}}};var V=(t,e,r)=>{let o=e?.name||"TaskException",n=e?.description||"Unspecified TaskException",p=b.apply(t,r);return {...g("TaskException",a(p)),_task:{name:o,description:n}}},k=(t,e)=>{let r=e?.name||"TaskResult",o=e?.description||"Unspecified TaskResult";return {...g("TaskResult",i(t)),_task:{name:r,description:o}}},Xe=t=>{let e=t?.name||"Task",r=t?.description||"";return g("Task",{Async:async(n,p=y=>y,c=async()=>{})=>{try{let y=await n();return k(y,{name:e,description:r})}catch(y){let E=await p(y);return V(E,{name:e,description:r})}finally{await c();}},Sync:(n,p=y=>y,c=()=>{})=>{try{return k(n(),{name:e,description:r})}catch(y){return V(p(y),{name:e,description:r})}finally{c();}},success:n=>k(n,{name:e,description:r}),fail:n=>V(n,{name:e,description:r})})};var w=t=>({_tag:"Tuple",map:e=>{let r=e(t);return w(r)},flatMap:e=>e(t),get:e=>t[e],toArray:()=>t,[Symbol.iterator](){let e=0;return {next:()=>e<t.length?{value:t[e++],done:false}:{value:void 0,done:true}}},toValue:()=>({_tag:"Tuple",value:t})});var x=Map;var d=t=>{let e="Map",r={values:new x(t)},o=()=>Array.from(r.values.entries()).map(([s,l])=>w([s,l])),n=s=>d(new x(r.values).set(s.toArray()[0],s.toArray()[1]).entries()),p=s=>{let l=new x(r.values);return l.delete(s)?d(l.entries()):d(r.values.entries())},c=s=>r.values.get(s[0])===s[1],y=()=>r.values.size,E=s=>d(Array.from(r.values.entries()).map(([l,Q])=>[l,s(Q)])),N=s=>{let l=d(r.values.entries()).toList();return d(l.flatMap(s).toArray())},F=s=>T(o()).reduce(s),z=s=>T(o()).reduceRight(s),C=s=>l=>T(o()).foldLeft(s)(l),$=s=>l=>T(o()).foldRight(s)(l),j=s=>f(r.values.get(s)),q=(s,l)=>f(r.values.get(s)).getOrElse(l),G=()=>r.values.size===0,W=(s,l)=>f(r.values.get(s)).orElse(l),D=()=>T(o()),H=()=>h(o()),J=()=>`Map(${o().toString()})`;return {_tag:e,add:n,remove:p,contains:c,get size(){return y()},map:E,flatMap:N,reduce:F,reduceRight:z,foldLeft:C,foldRight:$,get:j,getOrElse:q,get isEmpty(){return G()},orElse:W,toList:D,toSet:H,toString:J,toValue:()=>({_tag:"Map",value:r.values})}},mt=t=>d(t);var I=t=>({_tag:"Success",error:void 0,isSuccess:()=>true,isFailure:()=>false,get:()=>t,getOrElse:e=>t,orElse:e=>I(t),orThrow:e=>t,toEither:()=>i(t),map:e=>re(()=>e(t)),flatMap:e=>e(t),toString:()=>`Success(${O(t)})`,toValue:()=>({_tag:"Success",value:t})}),M=t=>({_tag:"Failure",error:t,isSuccess:()=>false,isFailure:()=>true,get:()=>{throw t},getOrElse:e=>e,orElse:e=>e,orThrow:e=>{throw e},toEither:()=>a(t),map:e=>M(t),flatMap:e=>M(t),toString:()=>`Failure(${O(t)}))`,toValue:()=>({_tag:"Failure",value:t})}),re=t=>{try{return I(t())}catch(e){return M(e instanceof Error?e:new Error(String(e)))}};export{g as Base,te as Either,a as Left,T as List,mt as Map,R as None,f as Option,i as Right,h as Set,L as Some,Xe as Task,V as TaskException,k as TaskResult,b as Throwable,re as Try,w as Tuple,ee as TypeCheckLeft,Z as TypeCheckRight,U as Typeable,je as isLeft,$e as isRight,B as isTypeable,qe as tryCatch,Ge as tryCatchAsync};//# sourceMappingURL=index.mjs.map
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
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/Sync.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","__publicField","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","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","toValue","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 { AsyncFunctor, Functor, Type } from \"@/functor\"\nimport { Typeable } from \"@/typeable/Typeable\"\nimport { Valuable } from \"@/valuable/Valuable\"\n\nimport { Either, Left, List, Right, 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 { Collection } from \"@/collections\"\nimport { IterableType } from \"@/iterable\"\nimport { List } from \"@/list/List\"\nimport { Typeable } from \"@/typeable/Typeable\"\n\nimport { ESSet, 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 { AsyncFunctor } from \"@/functor\"\nimport { IterableType } from \"@/iterable\"\nimport { None, Option } from \"@/option/Option\"\nimport { Set } from \"@/set/Set\"\nimport { 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 { 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>(params?: TaskParams) => {\n const name = params?.name || \"Task\"\n const description = params?.description || \"\"\n const body = {\n Async: async (\n t: () => T,\n e: (error: unknown) => unknown = (error: unknown) => error,\n f: () => Promise<void> | void = async () => {},\n ): Async<T> => {\n try {\n const result = await t()\n return TaskResult<T>(result, { name, description })\n } catch (error) {\n const errorResult = await e(error)\n return TaskException<T>(errorResult, { name, description })\n } finally {\n await f()\n }\n },\n Sync: (\n t: () => T,\n e: (error: unknown) => unknown = (error: unknown) => error,\n f: () => void = () => {},\n ): Sync<T> => {\n try {\n return TaskResult<T>(t(), { name, description })\n } catch (error) {\n return TaskException<T>(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 { 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 { Collection } from \"@/collections\"\nimport { Traversable, Typeable } from \"@/index\"\nimport { 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, 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 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"]}
|