@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/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.err = (error) => ({ kind: "Error", error });
46
+ Result2.error = (e) => ({ kind: "Error", error: e });
47
47
  Result2.isOk = (data) => data.kind === "Ok";
48
- Result2.isErr = (data) => data.kind === "Error";
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.err)(onError(e));
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.isErr)(data) ? (0, Result2.err)(f(data.error)) : data;
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.isErr)(data)) f(data.error);
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.err)(onFalse(a));
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 = (blockedErr, fallback) => (data) => (0, Result2.isErr)(data) && data.error !== blockedErr ? fallback() : data;
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.isErr)(data) ? data : arg;
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.err(onNone());
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 run = (left) => toPromise(task, signal).then((a) => {
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(() => run(left - 1));
145
+ return wait().then(() => run2(left - 1));
147
146
  });
148
- return run(times);
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 run = () => toPromise(task, signal).then((a) => {
152
+ const run2 = (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(() => run2(attempt + 1));
156
156
  });
157
- return run();
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.err(onTimeout()));
182
+ resolve2(Result.error(onTimeout()));
183
183
  }, ms);
184
184
  })
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,8 +200,9 @@ 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
  };
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.isErr(r)) return r;
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
@@ -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-FWYOEWJ2.mjs";
9
+ import "./chunk-SDGDJ7CU.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.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"