@lsby/ts-fp-data 0.0.5 → 0.0.7

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.
@@ -20,7 +20,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/data/task.ts
21
21
  var task_exports = {};
22
22
  __export(task_exports, {
23
- Task: () => Task
23
+ Task: () => Task,
24
+ TaskDo: () => TaskDo
24
25
  });
25
26
  module.exports = __toCommonJS(task_exports);
26
27
 
@@ -104,6 +105,24 @@ var Right = class _Right extends Either {
104
105
  };
105
106
 
106
107
  // src/data/task.ts
108
+ var TaskDo = class _TaskDo {
109
+ constructor(accTask) {
110
+ this.accTask = accTask;
111
+ }
112
+ bind(name, task) {
113
+ return new _TaskDo(
114
+ this.accTask.bind((a) => task(a.env).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: v })))
115
+ );
116
+ }
117
+ exec(task) {
118
+ return new _TaskDo(this.accTask.bind((a) => task(a.env).bind((v) => Task.pure({ env: a.env, lastValue: v }))));
119
+ }
120
+ getTask() {
121
+ return new Task(async () => {
122
+ return (await this.accTask.run()).lastValue;
123
+ });
124
+ }
125
+ };
107
126
  var Task = class _Task {
108
127
  constructor(f) {
109
128
  this.f = f;
@@ -111,6 +130,9 @@ var Task = class _Task {
111
130
  static pure(a) {
112
131
  return new _Task(async () => a);
113
132
  }
133
+ static do() {
134
+ return new TaskDo(new _Task(async () => ({ env: {}, lastValue: void 0 })));
135
+ }
114
136
  map(f) {
115
137
  return new _Task(async () => f(await this.f()));
116
138
  }
@@ -132,5 +154,6 @@ var Task = class _Task {
132
154
  };
133
155
  // Annotate the CommonJS export names for ESM import in node:
134
156
  0 && (module.exports = {
135
- Task
157
+ Task,
158
+ TaskDo
136
159
  });
@@ -1,8 +1,24 @@
1
1
  import { Either } from './either.cjs';
2
2
 
3
+ interface TaskDoType<Env extends Record<string, any>, A> {
4
+ bind<K extends string, A>(name: K, task: (env: Env) => Task<A>): TaskDoType<Env & Record<K, A>, A>;
5
+ exec<A>(task: (env: Env) => Task<A>): TaskDoType<Env, A>;
6
+ getTask(): Task<A>;
7
+ }
8
+ declare class TaskDo<Env extends Record<string, any>, A> implements TaskDoType<Env, A> {
9
+ private accTask;
10
+ constructor(accTask: Task<{
11
+ env: Env;
12
+ lastValue: A;
13
+ }>);
14
+ bind<K extends string, A>(name: K, task: (env: Env) => Task<A>): TaskDoType<Env & Record<K, A>, A>;
15
+ exec<A>(task: (env: Env) => Task<A>): TaskDoType<Env, A>;
16
+ getTask(): Task<A>;
17
+ }
3
18
  declare class Task<A> {
4
19
  private f;
5
20
  static pure<A>(a: A): Task<A>;
21
+ static do(): TaskDo<Record<string, any>, unknown>;
6
22
  constructor(f: () => Promise<A>);
7
23
  map<B>(f: (a: A) => B): Task<B>;
8
24
  bind<B>(f: (a: A) => Task<B>): Task<B>;
@@ -10,4 +26,4 @@ declare class Task<A> {
10
26
  tryRun(): Promise<Either<Error, A>>;
11
27
  }
12
28
 
13
- export { Task };
29
+ export { Task, TaskDo, type TaskDoType };
@@ -20,7 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/func/seq.ts
21
21
  var seq_exports = {};
22
22
  __export(seq_exports, {
23
- seqArrayTask: () => seqArrayTask
23
+ seqArrayEither: () => seqArrayEither,
24
+ seqArrayTask: () => seqArrayTask,
25
+ seqEitherArray: () => seqEitherArray,
26
+ seqEitherTask: () => seqEitherTask
24
27
  });
25
28
  module.exports = __toCommonJS(seq_exports);
26
29
 
@@ -104,6 +107,24 @@ var Right = class _Right extends Either {
104
107
  };
105
108
 
106
109
  // src/data/task.ts
110
+ var TaskDo = class _TaskDo {
111
+ constructor(accTask) {
112
+ this.accTask = accTask;
113
+ }
114
+ bind(name, task) {
115
+ return new _TaskDo(
116
+ this.accTask.bind((a) => task(a.env).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: v })))
117
+ );
118
+ }
119
+ exec(task) {
120
+ return new _TaskDo(this.accTask.bind((a) => task(a.env).bind((v) => Task.pure({ env: a.env, lastValue: v }))));
121
+ }
122
+ getTask() {
123
+ return new Task(async () => {
124
+ return (await this.accTask.run()).lastValue;
125
+ });
126
+ }
127
+ };
107
128
  var Task = class _Task {
108
129
  constructor(f) {
109
130
  this.f = f;
@@ -111,6 +132,9 @@ var Task = class _Task {
111
132
  static pure(a) {
112
133
  return new _Task(async () => a);
113
134
  }
135
+ static do() {
136
+ return new TaskDo(new _Task(async () => ({ env: {}, lastValue: void 0 })));
137
+ }
114
138
  map(f) {
115
139
  return new _Task(async () => f(await this.f()));
116
140
  }
@@ -137,7 +161,29 @@ function seqArrayTask(a) {
137
161
  return Promise.all(a.map(async (a2) => await a2.run()));
138
162
  });
139
163
  }
164
+ function seqEitherTask(value) {
165
+ return value.match(
166
+ (err) => Task.pure(new Left(err)),
167
+ (data) => data.map((a) => new Right(a))
168
+ );
169
+ }
170
+ function seqEitherArray(value) {
171
+ return value.match(
172
+ (err) => [new Left(err)],
173
+ (data) => data.map((a) => new Right(a))
174
+ );
175
+ }
176
+ function seqArrayEither(value) {
177
+ const err = value.filter((a) => a.isLeft())[0];
178
+ if (err)
179
+ return err;
180
+ const data = value.map((a) => a.assertRight().getRight());
181
+ return new Right(data);
182
+ }
140
183
  // Annotate the CommonJS export names for ESM import in node:
141
184
  0 && (module.exports = {
142
- seqArrayTask
185
+ seqArrayEither,
186
+ seqArrayTask,
187
+ seqEitherArray,
188
+ seqEitherTask
143
189
  });
@@ -1,6 +1,9 @@
1
+ import { Either } from '../data/either.cjs';
1
2
  import { Task } from '../data/task.cjs';
2
- import '../data/either.cjs';
3
3
 
4
4
  declare function seqArrayTask<A>(a: Array<Task<A>>): Task<Array<A>>;
5
+ declare function seqEitherTask<L, R>(value: Either<L, Task<R>>): Task<Either<L, R>>;
6
+ declare function seqEitherArray<A, B>(value: Either<A, Array<B>>): Array<Either<A, B>>;
7
+ declare function seqArrayEither<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
5
8
 
6
- export { seqArrayTask };
9
+ export { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherTask };
@@ -27,7 +27,11 @@ __export(src_exports, {
27
27
  Nothing: () => Nothing,
28
28
  Right: () => Right,
29
29
  Task: () => Task,
30
- seqArrayTask: () => seqArrayTask
30
+ TaskDo: () => TaskDo,
31
+ seqArrayEither: () => seqArrayEither,
32
+ seqArrayTask: () => seqArrayTask,
33
+ seqEitherArray: () => seqEitherArray,
34
+ seqEitherTask: () => seqEitherTask
31
35
  });
32
36
  module.exports = __toCommonJS(src_exports);
33
37
 
@@ -111,6 +115,24 @@ var Right = class _Right extends Either {
111
115
  };
112
116
 
113
117
  // src/data/task.ts
118
+ var TaskDo = class _TaskDo {
119
+ constructor(accTask) {
120
+ this.accTask = accTask;
121
+ }
122
+ bind(name, task) {
123
+ return new _TaskDo(
124
+ this.accTask.bind((a) => task(a.env).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: v })))
125
+ );
126
+ }
127
+ exec(task) {
128
+ return new _TaskDo(this.accTask.bind((a) => task(a.env).bind((v) => Task.pure({ env: a.env, lastValue: v }))));
129
+ }
130
+ getTask() {
131
+ return new Task(async () => {
132
+ return (await this.accTask.run()).lastValue;
133
+ });
134
+ }
135
+ };
114
136
  var Task = class _Task {
115
137
  constructor(f) {
116
138
  this.f = f;
@@ -118,6 +140,9 @@ var Task = class _Task {
118
140
  static pure(a) {
119
141
  return new _Task(async () => a);
120
142
  }
143
+ static do() {
144
+ return new TaskDo(new _Task(async () => ({ env: {}, lastValue: void 0 })));
145
+ }
121
146
  map(f) {
122
147
  return new _Task(async () => f(await this.f()));
123
148
  }
@@ -198,6 +223,25 @@ function seqArrayTask(a) {
198
223
  return Promise.all(a.map(async (a2) => await a2.run()));
199
224
  });
200
225
  }
226
+ function seqEitherTask(value) {
227
+ return value.match(
228
+ (err) => Task.pure(new Left(err)),
229
+ (data) => data.map((a) => new Right(a))
230
+ );
231
+ }
232
+ function seqEitherArray(value) {
233
+ return value.match(
234
+ (err) => [new Left(err)],
235
+ (data) => data.map((a) => new Right(a))
236
+ );
237
+ }
238
+ function seqArrayEither(value) {
239
+ const err = value.filter((a) => a.isLeft())[0];
240
+ if (err)
241
+ return err;
242
+ const data = value.map((a) => a.assertRight().getRight());
243
+ return new Right(data);
244
+ }
201
245
  // Annotate the CommonJS export names for ESM import in node:
202
246
  0 && (module.exports = {
203
247
  Either,
@@ -207,5 +251,9 @@ function seqArrayTask(a) {
207
251
  Nothing,
208
252
  Right,
209
253
  Task,
210
- seqArrayTask
254
+ TaskDo,
255
+ seqArrayEither,
256
+ seqArrayTask,
257
+ seqEitherArray,
258
+ seqEitherTask
211
259
  });
@@ -1,4 +1,4 @@
1
- export { Task } from './data/task.cjs';
1
+ export { Task, TaskDo, TaskDoType } from './data/task.cjs';
2
2
  export { Just, Maybe, Nothing } from './data/maybe.cjs';
3
3
  export { Either, Left, Right } from './data/either.cjs';
4
- export { seqArrayTask } from './func/seq.cjs';
4
+ export { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherTask } from './func/seq.cjs';
@@ -0,0 +1,58 @@
1
+ import {
2
+ Left,
3
+ Right
4
+ } from "./chunk-VTI5CRVQ.js";
5
+
6
+ // src/data/task.ts
7
+ var TaskDo = class _TaskDo {
8
+ constructor(accTask) {
9
+ this.accTask = accTask;
10
+ }
11
+ bind(name, task) {
12
+ return new _TaskDo(
13
+ this.accTask.bind((a) => task(a.env).bind((v) => Task.pure({ env: { ...a.env, [name]: v }, lastValue: v })))
14
+ );
15
+ }
16
+ exec(task) {
17
+ return new _TaskDo(this.accTask.bind((a) => task(a.env).bind((v) => Task.pure({ env: a.env, lastValue: v }))));
18
+ }
19
+ getTask() {
20
+ return new Task(async () => {
21
+ return (await this.accTask.run()).lastValue;
22
+ });
23
+ }
24
+ };
25
+ var Task = class _Task {
26
+ constructor(f) {
27
+ this.f = f;
28
+ }
29
+ static pure(a) {
30
+ return new _Task(async () => a);
31
+ }
32
+ static do() {
33
+ return new TaskDo(new _Task(async () => ({ env: {}, lastValue: void 0 })));
34
+ }
35
+ map(f) {
36
+ return new _Task(async () => f(await this.f()));
37
+ }
38
+ bind(f) {
39
+ return new _Task(async () => f(await this.f()).run());
40
+ }
41
+ run() {
42
+ return this.f();
43
+ }
44
+ async tryRun() {
45
+ try {
46
+ return new Right(await this.run());
47
+ } catch (e) {
48
+ if (e instanceof Error)
49
+ return new Left(e);
50
+ return new Left(new Error(String(e)));
51
+ }
52
+ }
53
+ };
54
+
55
+ export {
56
+ TaskDo,
57
+ Task
58
+ };
@@ -0,0 +1,40 @@
1
+ import {
2
+ Task
3
+ } from "./chunk-F7Q4HROJ.js";
4
+ import {
5
+ Left,
6
+ Right
7
+ } from "./chunk-VTI5CRVQ.js";
8
+
9
+ // src/func/seq.ts
10
+ function seqArrayTask(a) {
11
+ return new Task(async () => {
12
+ return Promise.all(a.map(async (a2) => await a2.run()));
13
+ });
14
+ }
15
+ function seqEitherTask(value) {
16
+ return value.match(
17
+ (err) => Task.pure(new Left(err)),
18
+ (data) => data.map((a) => new Right(a))
19
+ );
20
+ }
21
+ function seqEitherArray(value) {
22
+ return value.match(
23
+ (err) => [new Left(err)],
24
+ (data) => data.map((a) => new Right(a))
25
+ );
26
+ }
27
+ function seqArrayEither(value) {
28
+ const err = value.filter((a) => a.isLeft())[0];
29
+ if (err)
30
+ return err;
31
+ const data = value.map((a) => a.assertRight().getRight());
32
+ return new Right(data);
33
+ }
34
+
35
+ export {
36
+ seqArrayTask,
37
+ seqEitherTask,
38
+ seqEitherArray,
39
+ seqArrayEither
40
+ };
@@ -1,8 +1,24 @@
1
1
  import { Either } from './either.js';
2
2
 
3
+ interface TaskDoType<Env extends Record<string, any>, A> {
4
+ bind<K extends string, A>(name: K, task: (env: Env) => Task<A>): TaskDoType<Env & Record<K, A>, A>;
5
+ exec<A>(task: (env: Env) => Task<A>): TaskDoType<Env, A>;
6
+ getTask(): Task<A>;
7
+ }
8
+ declare class TaskDo<Env extends Record<string, any>, A> implements TaskDoType<Env, A> {
9
+ private accTask;
10
+ constructor(accTask: Task<{
11
+ env: Env;
12
+ lastValue: A;
13
+ }>);
14
+ bind<K extends string, A>(name: K, task: (env: Env) => Task<A>): TaskDoType<Env & Record<K, A>, A>;
15
+ exec<A>(task: (env: Env) => Task<A>): TaskDoType<Env, A>;
16
+ getTask(): Task<A>;
17
+ }
3
18
  declare class Task<A> {
4
19
  private f;
5
20
  static pure<A>(a: A): Task<A>;
21
+ static do(): TaskDo<Record<string, any>, unknown>;
6
22
  constructor(f: () => Promise<A>);
7
23
  map<B>(f: (a: A) => B): Task<B>;
8
24
  bind<B>(f: (a: A) => Task<B>): Task<B>;
@@ -10,4 +26,4 @@ declare class Task<A> {
10
26
  tryRun(): Promise<Either<Error, A>>;
11
27
  }
12
28
 
13
- export { Task };
29
+ export { Task, TaskDo, type TaskDoType };
@@ -1,7 +1,9 @@
1
1
  import {
2
- Task
3
- } from "../chunk-2AQUF5MK.js";
2
+ Task,
3
+ TaskDo
4
+ } from "../chunk-F7Q4HROJ.js";
4
5
  import "../chunk-VTI5CRVQ.js";
5
6
  export {
6
- Task
7
+ Task,
8
+ TaskDo
7
9
  };
@@ -1,6 +1,9 @@
1
+ import { Either } from '../data/either.js';
1
2
  import { Task } from '../data/task.js';
2
- import '../data/either.js';
3
3
 
4
4
  declare function seqArrayTask<A>(a: Array<Task<A>>): Task<Array<A>>;
5
+ declare function seqEitherTask<L, R>(value: Either<L, Task<R>>): Task<Either<L, R>>;
6
+ declare function seqEitherArray<A, B>(value: Either<A, Array<B>>): Array<Either<A, B>>;
7
+ declare function seqArrayEither<A, B>(value: Array<Either<A, B>>): Either<A, Array<B>>;
5
8
 
6
- export { seqArrayTask };
9
+ export { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherTask };
@@ -1,8 +1,14 @@
1
1
  import {
2
- seqArrayTask
3
- } from "../chunk-VP7O7XD7.js";
4
- import "../chunk-2AQUF5MK.js";
2
+ seqArrayEither,
3
+ seqArrayTask,
4
+ seqEitherArray,
5
+ seqEitherTask
6
+ } from "../chunk-LVW727CO.js";
7
+ import "../chunk-F7Q4HROJ.js";
5
8
  import "../chunk-VTI5CRVQ.js";
6
9
  export {
7
- seqArrayTask
10
+ seqArrayEither,
11
+ seqArrayTask,
12
+ seqEitherArray,
13
+ seqEitherTask
8
14
  };
@@ -1,4 +1,4 @@
1
- export { Task } from './data/task.js';
1
+ export { Task, TaskDo, TaskDoType } from './data/task.js';
2
2
  export { Just, Maybe, Nothing } from './data/maybe.js';
3
3
  export { Either, Left, Right } from './data/either.js';
4
- export { seqArrayTask } from './func/seq.js';
4
+ export { seqArrayEither, seqArrayTask, seqEitherArray, seqEitherTask } from './func/seq.js';
package/dist/esm/index.js CHANGED
@@ -4,11 +4,15 @@ import {
4
4
  Nothing
5
5
  } from "./chunk-PP7TCBHD.js";
6
6
  import {
7
- seqArrayTask
8
- } from "./chunk-VP7O7XD7.js";
7
+ seqArrayEither,
8
+ seqArrayTask,
9
+ seqEitherArray,
10
+ seqEitherTask
11
+ } from "./chunk-LVW727CO.js";
9
12
  import {
10
- Task
11
- } from "./chunk-2AQUF5MK.js";
13
+ Task,
14
+ TaskDo
15
+ } from "./chunk-F7Q4HROJ.js";
12
16
  import {
13
17
  Either,
14
18
  Left,
@@ -22,5 +26,9 @@ export {
22
26
  Nothing,
23
27
  Right,
24
28
  Task,
25
- seqArrayTask
29
+ TaskDo,
30
+ seqArrayEither,
31
+ seqArrayTask,
32
+ seqEitherArray,
33
+ seqEitherTask
26
34
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lsby/ts-fp-data",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "require": "./dist/cjs/index.cjs",
@@ -36,6 +36,7 @@
36
36
  "other:pub": "npm run other:typecheck && npm run build:all && bumpp && pnpm -r publish --access public",
37
37
  "other:typecheck": "tsc --noEmit",
38
38
  "other:typecheck:watch": "tsc --noEmit -w",
39
- "run:start": "tsx src/index.ts"
39
+ "run:start": "tsx src/index.ts",
40
+ "run:test": "tsx test/index.ts"
40
41
  }
41
42
  }
@@ -1,36 +0,0 @@
1
- import {
2
- Left,
3
- Right
4
- } from "./chunk-VTI5CRVQ.js";
5
-
6
- // src/data/task.ts
7
- var Task = class _Task {
8
- constructor(f) {
9
- this.f = f;
10
- }
11
- static pure(a) {
12
- return new _Task(async () => a);
13
- }
14
- map(f) {
15
- return new _Task(async () => f(await this.f()));
16
- }
17
- bind(f) {
18
- return new _Task(async () => f(await this.f()).run());
19
- }
20
- run() {
21
- return this.f();
22
- }
23
- async tryRun() {
24
- try {
25
- return new Right(await this.run());
26
- } catch (e) {
27
- if (e instanceof Error)
28
- return new Left(e);
29
- return new Left(new Error(String(e)));
30
- }
31
- }
32
- };
33
-
34
- export {
35
- Task
36
- };
@@ -1,14 +0,0 @@
1
- import {
2
- Task
3
- } from "./chunk-2AQUF5MK.js";
4
-
5
- // src/func/seq.ts
6
- function seqArrayTask(a) {
7
- return new Task(async () => {
8
- return Promise.all(a.map(async (a2) => await a2.run()));
9
- });
10
- }
11
-
12
- export {
13
- seqArrayTask
14
- };