@nlozgachev/pipelined 0.27.0 → 0.29.0
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/README.md +157 -35
- package/dist/{Task-vQb3-puQ.d.mts → Task-BDcKwFAj.d.mts} +52 -30
- package/dist/{Task-C8Pgm7EX.d.ts → Task-CnF22Q2o.d.ts} +52 -30
- package/dist/{chunk-SBTMTAZF.mjs → chunk-FWYOEWJ2.mjs} +12 -4
- package/dist/{chunk-YYVONF5X.mjs → chunk-PV7JOUKL.mjs} +127 -39
- package/dist/{chunk-HHCRWQYN.mjs → chunk-SDGDJ7CU.mjs} +25 -20
- package/dist/core.d.mts +305 -72
- package/dist/core.d.ts +305 -72
- package/dist/core.js +151 -58
- package/dist/core.mjs +2 -2
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +162 -61
- package/dist/index.mjs +3 -3
- package/dist/utils.d.mts +28 -10
- package/dist/utils.d.ts +28 -10
- package/dist/utils.js +36 -23
- package/dist/utils.mjs +2 -2
- package/package.json +3 -3
package/dist/utils.js
CHANGED
|
@@ -43,18 +43,18 @@ var Deferred;
|
|
|
43
43
|
var Result;
|
|
44
44
|
((Result2) => {
|
|
45
45
|
Result2.ok = (value) => ({ kind: "Ok", value });
|
|
46
|
-
Result2.
|
|
46
|
+
Result2.error = (e) => ({ kind: "Error", error: e });
|
|
47
47
|
Result2.isOk = (data) => data.kind === "Ok";
|
|
48
|
-
Result2.
|
|
48
|
+
Result2.isError = (data) => data.kind === "Error";
|
|
49
49
|
Result2.tryCatch = (f, onError) => {
|
|
50
50
|
try {
|
|
51
51
|
return (0, Result2.ok)(f());
|
|
52
52
|
} catch (e) {
|
|
53
|
-
return (0, Result2.
|
|
53
|
+
return (0, Result2.error)(onError(e));
|
|
54
54
|
}
|
|
55
55
|
};
|
|
56
56
|
Result2.map = (f) => (data) => (0, Result2.isOk)(data) ? (0, Result2.ok)(f(data.value)) : data;
|
|
57
|
-
Result2.mapError = (f) => (data) => (0, Result2.
|
|
57
|
+
Result2.mapError = (f) => (data) => (0, Result2.isError)(data) ? (0, Result2.error)(f(data.error)) : data;
|
|
58
58
|
Result2.chain = (f) => (data) => (0, Result2.isOk)(data) ? f(data.value) : data;
|
|
59
59
|
Result2.fold = (onErr, onOk) => (data) => (0, Result2.isOk)(data) ? onOk(data.value) : onErr(data.error);
|
|
60
60
|
Result2.match = (cases) => (data) => (0, Result2.isOk)(data) ? cases.ok(data.value) : cases.err(data.error);
|
|
@@ -64,14 +64,14 @@ var Result;
|
|
|
64
64
|
return data;
|
|
65
65
|
};
|
|
66
66
|
Result2.tapError = (f) => (data) => {
|
|
67
|
-
if ((0, Result2.
|
|
67
|
+
if ((0, Result2.isError)(data)) f(data.error);
|
|
68
68
|
return data;
|
|
69
69
|
};
|
|
70
|
-
Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.
|
|
70
|
+
Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.error)(onFalse(a));
|
|
71
71
|
Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
|
|
72
|
-
Result2.recoverUnless = (
|
|
72
|
+
Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isError)(data) && !isBlocked(data.error) ? fallback() : data;
|
|
73
73
|
Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
74
|
-
Result2.ap = (arg) => (data) => (0, Result2.isOk)(data) && (0, Result2.isOk)(arg) ? (0, Result2.ok)(data.value(arg.value)) : (0, Result2.
|
|
74
|
+
Result2.ap = (arg) => (data) => (0, Result2.isOk)(data) && (0, Result2.isOk)(arg) ? (0, Result2.ok)(data.value(arg.value)) : (0, Result2.isError)(data) ? data : arg;
|
|
75
75
|
})(Result || (Result = {}));
|
|
76
76
|
|
|
77
77
|
// src/Core/Maybe.ts
|
|
@@ -85,9 +85,8 @@ var Maybe;
|
|
|
85
85
|
Maybe2.fromNullable = (value) => value === null || value === void 0 ? (0, Maybe2.none)() : (0, Maybe2.some)(value);
|
|
86
86
|
Maybe2.toNullable = (data) => (0, Maybe2.isSome)(data) ? data.value : null;
|
|
87
87
|
Maybe2.toUndefined = (data) => (0, Maybe2.isSome)(data) ? data.value : void 0;
|
|
88
|
-
Maybe2.fromUndefined = (value) => value === void 0 ? (0, Maybe2.none)() : (0, Maybe2.some)(value);
|
|
89
88
|
Maybe2.fromPredicate = (pred) => (a) => pred(a) ? (0, Maybe2.some)(a) : (0, Maybe2.none)();
|
|
90
|
-
Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.
|
|
89
|
+
Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.error(onNone());
|
|
91
90
|
Maybe2.fromResult = (data) => Result.isOk(data) ? (0, Maybe2.some)(data.value) : (0, Maybe2.none)();
|
|
92
91
|
Maybe2.map = (f) => (data) => (0, Maybe2.isSome)(data) ? (0, Maybe2.some)(f(data.value)) : data;
|
|
93
92
|
Maybe2.chain = (f) => (data) => (0, Maybe2.isSome)(data) ? f(data.value) : data;
|
|
@@ -140,21 +139,22 @@ var Task;
|
|
|
140
139
|
if (times <= 0) return Promise.resolve([]);
|
|
141
140
|
const results = [];
|
|
142
141
|
const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
|
|
143
|
-
const
|
|
142
|
+
const run2 = (left) => toPromise(task, signal).then((a) => {
|
|
144
143
|
results.push(a);
|
|
145
144
|
if (left <= 1) return results;
|
|
146
|
-
return wait().then(() =>
|
|
145
|
+
return wait().then(() => run2(left - 1));
|
|
147
146
|
});
|
|
148
|
-
return
|
|
147
|
+
return run2(times);
|
|
149
148
|
});
|
|
150
149
|
Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
|
|
151
|
-
const { when: predicate, delay: ms } = options;
|
|
150
|
+
const { when: predicate, delay: ms, maxAttempts } = options;
|
|
152
151
|
const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
|
|
153
|
-
const
|
|
152
|
+
const run2 = (attempt) => toPromise(task, signal).then((a) => {
|
|
154
153
|
if (predicate(a)) return a;
|
|
155
|
-
|
|
154
|
+
if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
|
|
155
|
+
return wait().then(() => run2(attempt + 1));
|
|
156
156
|
});
|
|
157
|
-
return
|
|
157
|
+
return run2(1);
|
|
158
158
|
});
|
|
159
159
|
Task2.race = (tasks) => (0, Task2.from)((signal) => Promise.race(tasks.map((t) => toPromise(t, signal))));
|
|
160
160
|
Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
|
|
@@ -179,14 +179,18 @@ var Task;
|
|
|
179
179
|
timerId = setTimeout(() => {
|
|
180
180
|
controller.abort();
|
|
181
181
|
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
182
|
-
resolve2(Result.
|
|
182
|
+
resolve2(Result.error(onTimeout()));
|
|
183
183
|
}, ms);
|
|
184
184
|
})
|
|
185
185
|
]);
|
|
186
186
|
});
|
|
187
187
|
Task2.abortable = (factory) => {
|
|
188
|
-
|
|
188
|
+
let currentController = null;
|
|
189
|
+
const abort = () => currentController?.abort();
|
|
189
190
|
const task = (outerSignal) => {
|
|
191
|
+
currentController?.abort();
|
|
192
|
+
currentController = new AbortController();
|
|
193
|
+
const controller = currentController;
|
|
190
194
|
if (outerSignal) {
|
|
191
195
|
if (outerSignal.aborted) {
|
|
192
196
|
controller.abort(outerSignal.reason);
|
|
@@ -196,8 +200,9 @@ var Task;
|
|
|
196
200
|
}
|
|
197
201
|
return Deferred.fromPromise(factory(controller.signal));
|
|
198
202
|
};
|
|
199
|
-
return { task, abort
|
|
203
|
+
return { task, abort };
|
|
200
204
|
};
|
|
205
|
+
Task2.run = (signal) => (task) => Deferred.toPromise(task(signal));
|
|
201
206
|
})(Task || (Task = {}));
|
|
202
207
|
|
|
203
208
|
// src/Types/NonEmptyList.ts
|
|
@@ -361,7 +366,7 @@ var Arr;
|
|
|
361
366
|
const result = [];
|
|
362
367
|
for (const a of data) {
|
|
363
368
|
const r = await Deferred.toPromise(f(a)());
|
|
364
|
-
if (Result.
|
|
369
|
+
if (Result.isError(r)) return r;
|
|
365
370
|
result.push(r.value);
|
|
366
371
|
}
|
|
367
372
|
return Result.ok(result);
|
|
@@ -502,6 +507,14 @@ var Dict;
|
|
|
502
507
|
}
|
|
503
508
|
return result;
|
|
504
509
|
};
|
|
510
|
+
Dict2.filterMap = (f) => (m) => {
|
|
511
|
+
const result = new globalThis.Map();
|
|
512
|
+
for (const [key, value] of m) {
|
|
513
|
+
const mapped = f(value);
|
|
514
|
+
if (mapped.kind === "Some") result.set(key, mapped.value);
|
|
515
|
+
}
|
|
516
|
+
return result;
|
|
517
|
+
};
|
|
505
518
|
Dict2.union = (other) => (m) => {
|
|
506
519
|
const result = new globalThis.Map(m);
|
|
507
520
|
for (const [k, v] of other) {
|
|
@@ -562,13 +575,13 @@ var Num;
|
|
|
562
575
|
Num2.add = (b) => (a) => a + b;
|
|
563
576
|
Num2.subtract = (b) => (a) => a - b;
|
|
564
577
|
Num2.multiply = (b) => (a) => a * b;
|
|
565
|
-
Num2.divide = (b) => (a) => a / b;
|
|
578
|
+
Num2.divide = (b) => (a) => b === 0 ? Maybe.none() : Maybe.some(a / b);
|
|
566
579
|
Num2.abs = (n) => Math.abs(n);
|
|
567
580
|
Num2.negate = (n) => -n;
|
|
568
581
|
Num2.round = (n) => Math.round(n);
|
|
569
582
|
Num2.floor = (n) => Math.floor(n);
|
|
570
583
|
Num2.ceil = (n) => Math.ceil(n);
|
|
571
|
-
Num2.remainder = (divisor) => (n) => n % divisor;
|
|
584
|
+
Num2.remainder = (divisor) => (n) => divisor === 0 ? Maybe.none() : Maybe.some(n % divisor);
|
|
572
585
|
})(Num || (Num = {}));
|
|
573
586
|
|
|
574
587
|
// src/Utils/Rec.ts
|
package/dist/utils.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nlozgachev/pipelined",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.29.0",
|
|
4
4
|
"description": "Opinionated functional abstractions for TypeScript",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"homepage": "https://pipelined.lozgachev.dev",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"test": "vitest run",
|
|
50
50
|
"bench": "vitest bench",
|
|
51
51
|
"build": "tsup",
|
|
52
|
-
"format": "dprint fmt",
|
|
53
|
-
"format:check": "dprint check",
|
|
52
|
+
"format": "dprint fmt && dprint fmt --config dprint.md.json docs/**/*.md docs/**/*.mdx README.md",
|
|
53
|
+
"format:check": "dprint check && dprint check --config dprint.md.json docs/**/*.md docs/**/*.mdx README.md",
|
|
54
54
|
"typecheck": "tsc --noEmit",
|
|
55
55
|
"lint": "oxlint src/",
|
|
56
56
|
"publish:npm": "pnpm build && npm publish --access public"
|