@nlozgachev/pipelined 0.27.0 → 0.28.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/dist/utils.js CHANGED
@@ -69,7 +69,7 @@ var Result;
69
69
  };
70
70
  Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.err)(onFalse(a));
71
71
  Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
72
- Result2.recoverUnless = (blockedErr, fallback) => (data) => (0, Result2.isErr)(data) && data.error !== blockedErr ? fallback() : data;
72
+ Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
73
73
  Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
74
74
  Result2.ap = (arg) => (data) => (0, Result2.isOk)(data) && (0, Result2.isOk)(arg) ? (0, Result2.ok)(data.value(arg.value)) : (0, Result2.isErr)(data) ? data : arg;
75
75
  })(Result || (Result = {}));
@@ -85,7 +85,6 @@ 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
89
  Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.err(onNone());
91
90
  Maybe2.fromResult = (data) => Result.isOk(data) ? (0, Maybe2.some)(data.value) : (0, Maybe2.none)();
@@ -148,13 +147,14 @@ var Task;
148
147
  return run(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 run = () => toPromise(task, signal).then((a) => {
152
+ const run = (attempt) => toPromise(task, signal).then((a) => {
154
153
  if (predicate(a)) return a;
155
- return wait().then(run);
154
+ if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
155
+ return wait().then(() => run(attempt + 1));
156
156
  });
157
- return run();
157
+ return run(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) => {
@@ -185,8 +185,12 @@ var Task;
185
185
  ]);
186
186
  });
187
187
  Task2.abortable = (factory) => {
188
- const controller = new AbortController();
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,7 +200,7 @@ var Task;
196
200
  }
197
201
  return Deferred.fromPromise(factory(controller.signal));
198
202
  };
199
- return { task, abort: () => controller.abort() };
203
+ return { task, abort };
200
204
  };
201
205
  })(Task || (Task = {}));
202
206
 
@@ -562,13 +566,13 @@ var Num;
562
566
  Num2.add = (b) => (a) => a + b;
563
567
  Num2.subtract = (b) => (a) => a - b;
564
568
  Num2.multiply = (b) => (a) => a * b;
565
- Num2.divide = (b) => (a) => a / b;
569
+ Num2.divide = (b) => (a) => b === 0 ? Maybe.none() : Maybe.some(a / b);
566
570
  Num2.abs = (n) => Math.abs(n);
567
571
  Num2.negate = (n) => -n;
568
572
  Num2.round = (n) => Math.round(n);
569
573
  Num2.floor = (n) => Math.floor(n);
570
574
  Num2.ceil = (n) => Math.ceil(n);
571
- Num2.remainder = (divisor) => (n) => n % divisor;
575
+ Num2.remainder = (divisor) => (n) => divisor === 0 ? Maybe.none() : Maybe.some(n % divisor);
572
576
  })(Num || (Num = {}));
573
577
 
574
578
  // src/Utils/Rec.ts
package/dist/utils.mjs CHANGED
@@ -5,8 +5,8 @@ import {
5
5
  Rec,
6
6
  Str,
7
7
  Uniq
8
- } from "./chunk-SBTMTAZF.mjs";
9
- import "./chunk-HHCRWQYN.mjs";
8
+ } from "./chunk-CA3VE4YD.mjs";
9
+ import "./chunk-7JF44HJH.mjs";
10
10
  import "./chunk-DBIC62UV.mjs";
11
11
  export {
12
12
  Arr,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlozgachev/pipelined",
3
- "version": "0.27.0",
3
+ "version": "0.28.0",
4
4
  "description": "Opinionated functional abstractions for TypeScript",
5
5
  "license": "BSD-3-Clause",
6
6
  "homepage": "https://pipelined.lozgachev.dev",