@nlozgachev/pipelined 0.31.0 → 0.33.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/core.js CHANGED
@@ -20,12 +20,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/Core/index.ts
21
21
  var Core_exports = {};
22
22
  __export(Core_exports, {
23
+ Combinable: () => Combinable,
23
24
  Deferred: () => Deferred,
25
+ Equality: () => Equality,
26
+ Lazy: () => Lazy,
24
27
  Lens: () => Lens,
25
28
  Logged: () => Logged,
26
29
  Maybe: () => Maybe,
27
30
  Op: () => Op,
28
31
  Optional: () => Optional,
32
+ Ordering: () => Ordering,
29
33
  Predicate: () => Predicate,
30
34
  Reader: () => Reader,
31
35
  Refinement: () => Refinement,
@@ -43,65 +47,6 @@ __export(Core_exports, {
43
47
  });
44
48
  module.exports = __toCommonJS(Core_exports);
45
49
 
46
- // src/Core/Deferred.ts
47
- var Deferred;
48
- ((Deferred2) => {
49
- Deferred2.fromPromise = (p) => (
50
- // eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
51
- { then: ((f) => p.then(f)) }
52
- );
53
- Deferred2.toPromise = (d) => new Promise((resolve) => d.then(resolve));
54
- })(Deferred || (Deferred = {}));
55
-
56
- // src/Core/Lens.ts
57
- var Lens;
58
- ((Lens2) => {
59
- Lens2.make = (get2, set2) => ({ get: get2, set: set2 });
60
- Lens2.prop = () => (key) => (0, Lens2.make)(
61
- (s) => s[key],
62
- (a) => (s) => ({ ...s, [key]: a })
63
- );
64
- Lens2.get = (lens) => (s) => lens.get(s);
65
- Lens2.set = (lens) => (a) => (s) => lens.set(a)(s);
66
- Lens2.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
67
- Lens2.andThen = (inner) => (outer) => (0, Lens2.make)(
68
- (s) => inner.get(outer.get(s)),
69
- (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
70
- );
71
- Lens2.andThenOptional = (inner) => (outer) => ({
72
- get: (s) => inner.get(outer.get(s)),
73
- set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
74
- });
75
- Lens2.toOptional = (lens) => ({
76
- get: (s) => ({ kind: "Some", value: lens.get(s) }),
77
- set: lens.set
78
- });
79
- })(Lens || (Lens = {}));
80
-
81
- // src/Core/Logged.ts
82
- var Logged;
83
- ((Logged2) => {
84
- Logged2.make = (value) => ({ value, log: [] });
85
- Logged2.tell = (entry) => ({ value: void 0, log: [entry] });
86
- Logged2.map = (f) => (data) => ({
87
- value: f(data.value),
88
- log: data.log
89
- });
90
- Logged2.chain = (f) => (data) => {
91
- const next = f(data.value);
92
- return { value: next.value, log: [...data.log, ...next.log] };
93
- };
94
- Logged2.ap = (arg) => (data) => ({
95
- value: data.value(arg.value),
96
- log: [...data.log, ...arg.log]
97
- });
98
- Logged2.tap = (f) => (data) => {
99
- f(data.value);
100
- return data;
101
- };
102
- Logged2.run = (data) => [data.value, data.log];
103
- })(Logged || (Logged = {}));
104
-
105
50
  // src/Core/Result.ts
106
51
  var Result;
107
52
  ((Result2) => {
@@ -131,6 +76,15 @@ var Result;
131
76
  return data;
132
77
  };
133
78
  Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.error)(onFalse(a));
79
+ Result2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Result2.error)(onNull()) : (0, Result2.ok)(value);
80
+ Result2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Result2.error)(onNone()) : (0, Result2.ok)(maybe.value);
81
+ Result2.fromThrowable = (f, onError) => (...args) => {
82
+ try {
83
+ return (0, Result2.ok)(f(...args));
84
+ } catch (e) {
85
+ return (0, Result2.error)(onError(e));
86
+ }
87
+ };
134
88
  Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
135
89
  Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isError)(data) && !isBlocked(data.error) ? fallback() : data;
136
90
  Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
@@ -165,6 +119,137 @@ var Maybe;
165
119
  Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
166
120
  })(Maybe || (Maybe = {}));
167
121
 
122
+ // src/Core/Combinable.ts
123
+ var Combinable;
124
+ ((Combinable2) => {
125
+ Combinable2.string = {
126
+ empty: "",
127
+ combine: (b) => (a) => a + b
128
+ };
129
+ Combinable2.sum = {
130
+ empty: 0,
131
+ combine: (b) => (a) => a + b
132
+ };
133
+ Combinable2.product = {
134
+ empty: 1,
135
+ combine: (b) => (a) => a * b
136
+ };
137
+ Combinable2.all = {
138
+ empty: true,
139
+ combine: (b) => (a) => a && b
140
+ };
141
+ Combinable2.any = {
142
+ empty: false,
143
+ combine: (b) => (a) => a || b
144
+ };
145
+ Combinable2.array = () => ({
146
+ empty: [],
147
+ combine: (b) => (a) => [...a, ...b]
148
+ });
149
+ Combinable2.maybe = (inner) => ({
150
+ empty: Maybe.none(),
151
+ combine: (b) => (a) => Maybe.isNone(a) ? b : Maybe.isNone(b) ? a : Maybe.some(inner.combine(b.value)(a.value))
152
+ });
153
+ Combinable2.fold = (c) => (data) => data.reduce((acc, x) => c.combine(x)(acc), c.empty);
154
+ })(Combinable || (Combinable = {}));
155
+
156
+ // src/Core/Deferred.ts
157
+ var Deferred;
158
+ ((Deferred2) => {
159
+ Deferred2.fromPromise = (p) => (
160
+ // eslint-disable-next-line unicorn/no-thenable -- Deferred is intentionally thenable; it is the mechanism that makes Task awaitable
161
+ { then: ((f) => p.then(f)) }
162
+ );
163
+ Deferred2.toPromise = (d) => new Promise((resolve) => d.then(resolve));
164
+ })(Deferred || (Deferred = {}));
165
+
166
+ // src/Core/Equality.ts
167
+ var Equality;
168
+ ((Equality2) => {
169
+ Equality2.string = (a, b) => a === b;
170
+ Equality2.number = (a, b) => a === b;
171
+ Equality2.boolean = (a, b) => a === b;
172
+ Equality2.date = (a, b) => a.getTime() === b.getTime();
173
+ Equality2.array = (eq) => (a, b) => a.length === b.length && a.every((x, i) => eq(x, b[i]));
174
+ Equality2.by = (f) => (eq) => (a, b) => eq(f(a), f(b));
175
+ Equality2.and = (eq2) => (eq1) => (a, b) => eq1(a, b) && eq2(a, b);
176
+ })(Equality || (Equality = {}));
177
+
178
+ // src/Core/Lazy.ts
179
+ var Lazy;
180
+ ((Lazy2) => {
181
+ Lazy2.from = (f) => {
182
+ let done = false;
183
+ let cache;
184
+ return {
185
+ get: () => {
186
+ if (!done) {
187
+ cache = f();
188
+ done = true;
189
+ }
190
+ return cache;
191
+ }
192
+ };
193
+ };
194
+ Lazy2.evaluate = (lazy) => lazy.get();
195
+ Lazy2.map = (f) => (lazy) => Lazy2.from(() => f(lazy.get()));
196
+ Lazy2.chain = (f) => (lazy) => Lazy2.from(() => f(lazy.get()).get());
197
+ Lazy2.tap = (f) => (lazy) => Lazy2.from(() => {
198
+ const v = lazy.get();
199
+ f(v);
200
+ return v;
201
+ });
202
+ })(Lazy || (Lazy = {}));
203
+
204
+ // src/Core/Lens.ts
205
+ var Lens;
206
+ ((Lens2) => {
207
+ Lens2.make = (get2, set2) => ({ get: get2, set: set2 });
208
+ Lens2.prop = () => (key) => (0, Lens2.make)(
209
+ (s) => s[key],
210
+ (a) => (s) => ({ ...s, [key]: a })
211
+ );
212
+ Lens2.get = (lens) => (s) => lens.get(s);
213
+ Lens2.set = (lens) => (a) => (s) => lens.set(a)(s);
214
+ Lens2.modify = (lens) => (f) => (s) => lens.set(f(lens.get(s)))(s);
215
+ Lens2.andThen = (inner) => (outer) => (0, Lens2.make)(
216
+ (s) => inner.get(outer.get(s)),
217
+ (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
218
+ );
219
+ Lens2.andThenOptional = (inner) => (outer) => ({
220
+ get: (s) => inner.get(outer.get(s)),
221
+ set: (b) => (s) => outer.set(inner.set(b)(outer.get(s)))(s)
222
+ });
223
+ Lens2.toOptional = (lens) => ({
224
+ get: (s) => ({ kind: "Some", value: lens.get(s) }),
225
+ set: lens.set
226
+ });
227
+ })(Lens || (Lens = {}));
228
+
229
+ // src/Core/Logged.ts
230
+ var Logged;
231
+ ((Logged2) => {
232
+ Logged2.make = (value) => ({ value, log: [] });
233
+ Logged2.tell = (entry) => ({ value: void 0, log: [entry] });
234
+ Logged2.map = (f) => (data) => ({
235
+ value: f(data.value),
236
+ log: data.log
237
+ });
238
+ Logged2.chain = (f) => (data) => {
239
+ const next = f(data.value);
240
+ return { value: next.value, log: [...data.log, ...next.log] };
241
+ };
242
+ Logged2.ap = (arg) => (data) => ({
243
+ value: data.value(arg.value),
244
+ log: [...data.log, ...arg.log]
245
+ });
246
+ Logged2.tap = (f) => (data) => {
247
+ f(data.value);
248
+ return data;
249
+ };
250
+ Logged2.run = (data) => [data.value, data.log];
251
+ })(Logged || (Logged = {}));
252
+
168
253
  // src/internal/Op.util.ts
169
254
  var _abortedNil = { kind: "OpNil", reason: "aborted" };
170
255
  var _droppedNil = { kind: "OpNil", reason: "dropped" };
@@ -1167,6 +1252,20 @@ var Optional;
1167
1252
  );
1168
1253
  })(Optional || (Optional = {}));
1169
1254
 
1255
+ // src/Core/Ordering.ts
1256
+ var Ordering;
1257
+ ((Ordering2) => {
1258
+ Ordering2.string = (a, b) => a < b ? -1 : a > b ? 1 : 0;
1259
+ Ordering2.number = (a, b) => a - b;
1260
+ Ordering2.date = (a, b) => a.getTime() - b.getTime();
1261
+ Ordering2.reverse = (ord) => (a, b) => ord(b, a);
1262
+ Ordering2.thenBy = (ord2) => (ord1) => (a, b) => {
1263
+ const r = ord1(a, b);
1264
+ return r !== 0 ? r : ord2(a, b);
1265
+ };
1266
+ Ordering2.by = (f) => (ord) => (a, b) => ord(f(a), f(b));
1267
+ })(Ordering || (Ordering = {}));
1268
+
1170
1269
  // src/Core/Predicate.ts
1171
1270
  var Predicate;
1172
1271
  ((Predicate2) => {
@@ -1280,8 +1379,34 @@ var RemoteData;
1280
1379
  RemoteData2.filter = (pred, onFalse) => (data) => (0, RemoteData2.isSuccess)(data) ? pred(data.value) ? data : (0, RemoteData2.failure)(onFalse(data.value)) : data;
1281
1380
  })(RemoteData || (RemoteData = {}));
1282
1381
 
1382
+ // src/Types/Brand.ts
1383
+ var Brand;
1384
+ ((Brand2) => {
1385
+ Brand2.wrap = () => (value) => value;
1386
+ Brand2.unwrap = (branded) => branded;
1387
+ })(Brand || (Brand = {}));
1388
+
1389
+ // src/Types/Duration.ts
1390
+ var Duration;
1391
+ ((Duration2) => {
1392
+ const wrap = Brand.wrap();
1393
+ Duration2.milliseconds = (ms) => wrap(ms);
1394
+ Duration2.seconds = (s) => wrap(s * 1e3);
1395
+ Duration2.minutes = (m) => wrap(m * 60 * 1e3);
1396
+ Duration2.hours = (h) => wrap(h * 60 * 60 * 1e3);
1397
+ Duration2.days = (d) => wrap(d * 24 * 60 * 60 * 1e3);
1398
+ Duration2.toMilliseconds = (d) => Brand.unwrap(d);
1399
+ Duration2.toSeconds = (d) => Brand.unwrap(d) / 1e3;
1400
+ Duration2.toMinutes = (d) => Brand.unwrap(d) / (60 * 1e3);
1401
+ Duration2.toHours = (d) => Brand.unwrap(d) / (60 * 60 * 1e3);
1402
+ Duration2.toDays = (d) => Brand.unwrap(d) / (24 * 60 * 60 * 1e3);
1403
+ Duration2.add = (other) => (self) => wrap(Brand.unwrap(self) + Brand.unwrap(other));
1404
+ Duration2.subtract = (other) => (self) => wrap(Brand.unwrap(self) - Brand.unwrap(other));
1405
+ })(Duration || (Duration = {}));
1406
+
1283
1407
  // src/Core/Task.ts
1284
1408
  var toPromise = (task, signal) => Deferred.toPromise(task(signal));
1409
+ var getMs = (ms) => typeof ms === "number" ? ms : Duration.toMilliseconds(ms);
1285
1410
  var Task;
1286
1411
  ((Task2) => {
1287
1412
  Task2.resolve = (value) => () => Deferred.fromPromise(Promise.resolve(value));
@@ -1305,60 +1430,169 @@ var Task;
1305
1430
  (signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
1306
1431
  );
1307
1432
  Task2.delay = (ms) => (data) => (0, Task2.from)(
1308
- (signal) => new Promise(
1309
- (resolve2) => setTimeout(
1310
- () => toPromise(data, signal).then(resolve2),
1311
- ms
1312
- )
1313
- )
1433
+ (signal) => new Promise((resolve2) => {
1434
+ let timerId = void 0;
1435
+ const onAbort = () => {
1436
+ if (timerId !== void 0) {
1437
+ clearTimeout(timerId);
1438
+ }
1439
+ resolve2(toPromise(data, signal));
1440
+ };
1441
+ if (signal) {
1442
+ if (signal.aborted) {
1443
+ return resolve2(toPromise(data, signal));
1444
+ }
1445
+ signal.addEventListener("abort", onAbort, { once: true });
1446
+ }
1447
+ timerId = setTimeout(() => {
1448
+ signal?.removeEventListener("abort", onAbort);
1449
+ resolve2(toPromise(data, signal));
1450
+ }, getMs(ms));
1451
+ })
1314
1452
  );
1315
1453
  Task2.repeat = (options) => (task) => (0, Task2.from)((signal) => {
1316
1454
  const { times, delay: ms } = options;
1317
1455
  if (times <= 0) return Promise.resolve([]);
1318
1456
  const results = [];
1319
- const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
1320
- const run2 = (left) => toPromise(task, signal).then((a) => {
1321
- results.push(a);
1322
- if (left <= 1) return results;
1323
- return wait().then(() => run2(left - 1));
1324
- });
1457
+ const wait = () => {
1458
+ if (signal?.aborted) return Promise.resolve();
1459
+ return new Promise((r) => {
1460
+ let timerId = void 0;
1461
+ const onAbort = () => {
1462
+ if (timerId !== void 0) {
1463
+ clearTimeout(timerId);
1464
+ }
1465
+ r();
1466
+ };
1467
+ if (signal) {
1468
+ signal.addEventListener("abort", onAbort, { once: true });
1469
+ }
1470
+ timerId = setTimeout(() => {
1471
+ signal?.removeEventListener("abort", onAbort);
1472
+ r();
1473
+ }, getMs(ms || 0));
1474
+ });
1475
+ };
1476
+ const run2 = (left) => {
1477
+ if (signal?.aborted) {
1478
+ return Promise.resolve(results);
1479
+ }
1480
+ return toPromise(task, signal).then((a) => {
1481
+ results.push(a);
1482
+ if (left <= 1 || signal?.aborted) return results;
1483
+ return wait().then(() => run2(left - 1));
1484
+ });
1485
+ };
1325
1486
  return run2(times);
1326
1487
  });
1327
1488
  Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
1328
1489
  const { when: predicate, delay: ms, maxAttempts } = options;
1329
- const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
1330
- const run2 = (attempt) => toPromise(task, signal).then((a) => {
1331
- if (predicate(a)) return a;
1332
- if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
1333
- return wait().then(() => run2(attempt + 1));
1334
- });
1490
+ const wait = () => {
1491
+ if (signal?.aborted) return Promise.resolve();
1492
+ return new Promise((r) => {
1493
+ let timerId = void 0;
1494
+ const onAbort = () => {
1495
+ if (timerId !== void 0) {
1496
+ clearTimeout(timerId);
1497
+ }
1498
+ r();
1499
+ };
1500
+ if (signal) {
1501
+ signal.addEventListener("abort", onAbort, { once: true });
1502
+ }
1503
+ timerId = setTimeout(() => {
1504
+ signal?.removeEventListener("abort", onAbort);
1505
+ r();
1506
+ }, getMs(ms || 0));
1507
+ });
1508
+ };
1509
+ const run2 = (attempt, lastValue) => {
1510
+ if (signal?.aborted && lastValue !== void 0) {
1511
+ return Promise.resolve(lastValue);
1512
+ }
1513
+ return toPromise(task, signal).then((a) => {
1514
+ if (predicate(a)) return a;
1515
+ if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
1516
+ if (signal?.aborted) return a;
1517
+ return wait().then(() => run2(attempt + 1, a));
1518
+ });
1519
+ };
1335
1520
  return run2(1);
1336
1521
  });
1337
- Task2.race = (tasks) => (0, Task2.from)((signal) => Promise.race(tasks.map((t) => toPromise(t, signal))));
1522
+ Task2.race = (tasks) => {
1523
+ if (tasks.length === 0) {
1524
+ return () => Deferred.fromPromise(new Promise(() => {
1525
+ }));
1526
+ }
1527
+ return (0, Task2.from)((outerSignal) => {
1528
+ const controllers = tasks.map(() => new AbortController());
1529
+ const onOuterAbort = () => {
1530
+ for (const ctrl of controllers) ctrl.abort();
1531
+ };
1532
+ if (outerSignal) {
1533
+ if (outerSignal.aborted) {
1534
+ onOuterAbort();
1535
+ } else {
1536
+ outerSignal.addEventListener("abort", onOuterAbort, { once: true });
1537
+ }
1538
+ }
1539
+ const promises = tasks.map((task, idx) => {
1540
+ const ctrl = controllers[idx];
1541
+ return toPromise(task, ctrl.signal).then((result) => {
1542
+ for (let i = 0; i < controllers.length; i++) {
1543
+ if (i !== idx) {
1544
+ controllers[i].abort();
1545
+ }
1546
+ }
1547
+ outerSignal?.removeEventListener("abort", onOuterAbort);
1548
+ return result;
1549
+ });
1550
+ });
1551
+ return Promise.race(promises);
1552
+ });
1553
+ };
1554
+ Task2.sequence = (tasks) => (0, Task2.from)((signal) => Promise.all(tasks.map((t) => toPromise(t, signal))));
1338
1555
  Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
1339
1556
  const results = [];
1340
1557
  for (const task of tasks) {
1558
+ if (signal?.aborted) {
1559
+ break;
1560
+ }
1341
1561
  results.push(await toPromise(task, signal));
1342
1562
  }
1343
1563
  return results;
1344
1564
  });
1345
1565
  Task2.timeout = (ms, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
1346
1566
  const controller = new AbortController();
1347
- const onOuterAbort = () => controller.abort();
1348
- outerSignal?.addEventListener("abort", onOuterAbort, { once: true });
1349
1567
  let timerId;
1568
+ const cleanUp = () => {
1569
+ if (timerId !== void 0) {
1570
+ clearTimeout(timerId);
1571
+ }
1572
+ outerSignal?.removeEventListener("abort", onOuterAbort);
1573
+ };
1574
+ const onOuterAbort = () => {
1575
+ cleanUp();
1576
+ controller.abort();
1577
+ };
1578
+ if (outerSignal) {
1579
+ if (outerSignal.aborted) {
1580
+ controller.abort();
1581
+ } else {
1582
+ outerSignal.addEventListener("abort", onOuterAbort, { once: true });
1583
+ }
1584
+ }
1350
1585
  return Promise.race([
1351
1586
  toPromise(task, controller.signal).then((a) => {
1352
- clearTimeout(timerId);
1353
- outerSignal?.removeEventListener("abort", onOuterAbort);
1587
+ cleanUp();
1354
1588
  return Result.ok(a);
1355
1589
  }),
1356
1590
  new Promise((resolve2) => {
1357
1591
  timerId = setTimeout(() => {
1358
1592
  controller.abort();
1359
- outerSignal?.removeEventListener("abort", onOuterAbort);
1593
+ cleanUp();
1360
1594
  resolve2(Result.error(onTimeout()));
1361
- }, ms);
1595
+ }, getMs(ms));
1362
1596
  })
1363
1597
  ]);
1364
1598
  });
@@ -1392,28 +1626,33 @@ var Resource;
1392
1626
  release
1393
1627
  });
1394
1628
  Resource2.use = (f) => (resource) => Task.from(
1395
- () => Deferred.toPromise(resource.acquire()).then(async (acquired) => {
1629
+ (signal) => Deferred.toPromise(resource.acquire(signal)).then(async (acquired) => {
1396
1630
  if (Result.isError(acquired)) return acquired;
1397
1631
  const a = acquired.value;
1398
- const usageResult = await Deferred.toPromise(f(a)());
1399
- await Deferred.toPromise(resource.release(a)());
1400
- return usageResult;
1632
+ try {
1633
+ const usageResult = await Deferred.toPromise(f(a)(signal));
1634
+ return usageResult;
1635
+ } finally {
1636
+ await Deferred.toPromise(resource.release(a)(signal));
1637
+ }
1401
1638
  })
1402
1639
  );
1403
1640
  Resource2.combine = (resourceA, resourceB) => ({
1404
1641
  acquire: Task.from(
1405
- () => Deferred.toPromise(resourceA.acquire()).then(async (acquiredA) => {
1642
+ (signal) => Deferred.toPromise(resourceA.acquire(signal)).then(async (acquiredA) => {
1406
1643
  if (Result.isError(acquiredA)) return acquiredA;
1407
1644
  const a = acquiredA.value;
1408
- const acquiredB = await Deferred.toPromise(resourceB.acquire());
1645
+ const acquiredB = await Deferred.toPromise(resourceB.acquire(signal));
1409
1646
  if (Result.isError(acquiredB)) {
1410
- await Deferred.toPromise(resourceA.release(a)());
1647
+ await Deferred.toPromise(resourceA.release(a)(signal));
1411
1648
  return acquiredB;
1412
1649
  }
1413
1650
  return Result.ok([a, acquiredB.value]);
1414
1651
  })
1415
1652
  ),
1416
- release: ([a, b]) => Task.from(() => Deferred.toPromise(resourceB.release(b)()).then(() => Deferred.toPromise(resourceA.release(a)())))
1653
+ release: ([a, b]) => Task.from(
1654
+ (signal) => Deferred.toPromise(resourceB.release(b)(signal)).then(() => Deferred.toPromise(resourceA.release(a)(signal)))
1655
+ )
1417
1656
  });
1418
1657
  })(Resource || (Resource = {}));
1419
1658
 
@@ -1454,16 +1693,18 @@ var TaskMaybe;
1454
1693
  TaskMaybe2.some = (value) => Task.resolve(Maybe.some(value));
1455
1694
  TaskMaybe2.none = () => Task.resolve(Maybe.none());
1456
1695
  TaskMaybe2.fromMaybe = (option) => Task.resolve(option);
1696
+ TaskMaybe2.fromNullable = (value) => Task.resolve(Maybe.fromNullable(value));
1697
+ TaskMaybe2.fromResult = (result) => Task.resolve(Result.toMaybe(result));
1457
1698
  TaskMaybe2.fromTask = (task) => Task.map(Maybe.some)(task);
1458
1699
  TaskMaybe2.tryCatch = (f) => Task.from(
1459
- () => f().then(Maybe.some).catch(() => Maybe.none())
1700
+ (signal) => f(signal).then(Maybe.some).catch(() => Maybe.none())
1460
1701
  );
1461
1702
  TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
1462
1703
  TaskMaybe2.chain = (f) => (data) => Task.chain((option) => Maybe.isSome(option) ? f(option.value) : Task.resolve(Maybe.none()))(data);
1463
1704
  TaskMaybe2.ap = (arg) => (data) => Task.from(
1464
- () => Promise.all([
1465
- Deferred.toPromise(data()),
1466
- Deferred.toPromise(arg())
1705
+ (signal) => Promise.all([
1706
+ Deferred.toPromise(data(signal)),
1707
+ Deferred.toPromise(arg(signal))
1467
1708
  ]).then(([of_, oa]) => Maybe.ap(oa)(of_))
1468
1709
  );
1469
1710
  TaskMaybe2.fold = (onNone, onSome) => (data) => Task.map(Maybe.fold(onNone, onSome))(data);
@@ -1479,6 +1720,12 @@ var TaskResult;
1479
1720
  ((TaskResult2) => {
1480
1721
  TaskResult2.ok = (value) => Task.resolve(Result.ok(value));
1481
1722
  TaskResult2.err = (error) => Task.resolve(Result.error(error));
1723
+ TaskResult2.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.error(onNull()) : Result.ok(value));
1724
+ TaskResult2.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Result.error(onNone()) : Result.ok(maybe.value));
1725
+ TaskResult2.fromResult = (result) => Task.resolve(result);
1726
+ TaskResult2.fromThrowable = (f, onError) => (...args) => Task.from(
1727
+ () => f(...args).then(Result.ok).catch((e) => Result.error(onError(e)))
1728
+ );
1482
1729
  TaskResult2.tryCatch = (f, onError) => Task.from(
1483
1730
  (signal) => f(signal).then(Result.ok).catch((e) => Result.error(onError(e)))
1484
1731
  );
@@ -1497,6 +1744,12 @@ var TaskResult;
1497
1744
  TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
1498
1745
  TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
1499
1746
  TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
1747
+ TaskResult2.ap = (arg) => (data) => Task.from(
1748
+ (signal) => Promise.all([
1749
+ Deferred.toPromise(data(signal)),
1750
+ Deferred.toPromise(arg(signal))
1751
+ ]).then(([of_, oa]) => Result.ap(oa)(of_))
1752
+ );
1500
1753
  TaskResult2.run = (signal) => (task) => Deferred.toPromise(task(signal));
1501
1754
  })(TaskResult || (TaskResult = {}));
1502
1755
 
@@ -1518,6 +1771,8 @@ var Validation;
1518
1771
  Validation2.isValid = (data) => data.kind === "Valid";
1519
1772
  Validation2.isInvalid = (data) => data.kind === "Invalid";
1520
1773
  Validation2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Validation2.valid)(a) : (0, Validation2.invalid)(onFalse(a));
1774
+ Validation2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Validation2.invalid)(onNull()) : (0, Validation2.valid)(value);
1775
+ Validation2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Validation2.invalid)(onNone()) : (0, Validation2.valid)(maybe.value);
1521
1776
  Validation2.map = (f) => (data) => (0, Validation2.isValid)(data) ? (0, Validation2.valid)(f(data.value)) : data;
1522
1777
  Validation2.ap = (arg) => (data) => {
1523
1778
  if ((0, Validation2.isValid)(data) && (0, Validation2.isValid)(arg)) return (0, Validation2.valid)(data.value(arg.value));
@@ -1569,14 +1824,17 @@ var TaskValidation;
1569
1824
  TaskValidation2.invalid = (error) => Task.resolve(Validation.invalid(error));
1570
1825
  TaskValidation2.invalidAll = (errors) => Task.resolve(Validation.invalidAll(errors));
1571
1826
  TaskValidation2.fromValidation = (validation) => Task.resolve(validation);
1827
+ TaskValidation2.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Validation.invalid(onNull()) : Validation.valid(value));
1828
+ TaskValidation2.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Validation.invalid(onNone()) : Validation.valid(maybe.value));
1829
+ TaskValidation2.fromResult = (result) => Task.resolve(Validation.fromResult(result));
1572
1830
  TaskValidation2.tryCatch = (f, onError) => Task.from(
1573
- () => f().then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
1831
+ (signal) => f(signal).then(Validation.valid).catch((e) => Validation.invalid(onError(e)))
1574
1832
  );
1575
1833
  TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
1576
1834
  TaskValidation2.ap = (arg) => (data) => Task.from(
1577
- () => Promise.all([
1578
- Deferred.toPromise(data()),
1579
- Deferred.toPromise(arg())
1835
+ (signal) => Promise.all([
1836
+ Deferred.toPromise(data(signal)),
1837
+ Deferred.toPromise(arg(signal))
1580
1838
  ]).then(([vf, va]) => Validation.ap(va)(vf))
1581
1839
  );
1582
1840
  TaskValidation2.fold = (onInvalid, onValid) => (data) => Task.map(Validation.fold(onInvalid, onValid))(data);
@@ -1587,13 +1845,13 @@ var TaskValidation;
1587
1845
  (validation) => Validation.isValid(validation) ? Task.resolve(validation) : fallback(validation.errors)
1588
1846
  )(data);
1589
1847
  TaskValidation2.product = (first, second) => Task.from(
1590
- () => Promise.all([
1591
- Deferred.toPromise(first()),
1592
- Deferred.toPromise(second())
1848
+ (signal) => Promise.all([
1849
+ Deferred.toPromise(first(signal)),
1850
+ Deferred.toPromise(second(signal))
1593
1851
  ]).then(([va, vb]) => Validation.product(va, vb))
1594
1852
  );
1595
1853
  TaskValidation2.productAll = (data) => Task.from(
1596
- () => Promise.all(data.map((t) => Deferred.toPromise(t()))).then((results) => Validation.productAll(results))
1854
+ (signal) => Promise.all(data.map((t) => Deferred.toPromise(t(signal)))).then((results) => Validation.productAll(results))
1597
1855
  );
1598
1856
  })(TaskValidation || (TaskValidation = {}));
1599
1857
 
@@ -1680,12 +1938,16 @@ var Tuple;
1680
1938
  })(Tuple || (Tuple = {}));
1681
1939
  // Annotate the CommonJS export names for ESM import in node:
1682
1940
  0 && (module.exports = {
1941
+ Combinable,
1683
1942
  Deferred,
1943
+ Equality,
1944
+ Lazy,
1684
1945
  Lens,
1685
1946
  Logged,
1686
1947
  Maybe,
1687
1948
  Op,
1688
1949
  Optional,
1950
+ Ordering,
1689
1951
  Predicate,
1690
1952
  Reader,
1691
1953
  Refinement,
package/dist/core.mjs CHANGED
@@ -1,8 +1,12 @@
1
1
  import {
2
+ Combinable,
3
+ Equality,
4
+ Lazy,
2
5
  Lens,
3
6
  Logged,
4
7
  Op,
5
8
  Optional,
9
+ Ordering,
6
10
  Predicate,
7
11
  Reader,
8
12
  Refinement,
@@ -15,20 +19,25 @@ import {
15
19
  These,
16
20
  Tuple,
17
21
  Validation
18
- } from "./chunk-VIC54JR4.mjs";
22
+ } from "./chunk-FZX4MTRI.mjs";
19
23
  import {
20
24
  Deferred,
21
25
  Maybe,
22
26
  Result,
23
27
  Task
24
- } from "./chunk-SDGDJ7CU.mjs";
28
+ } from "./chunk-GSTKY7MF.mjs";
29
+ import "./chunk-VWVPHDZO.mjs";
25
30
  export {
31
+ Combinable,
26
32
  Deferred,
33
+ Equality,
34
+ Lazy,
27
35
  Lens,
28
36
  Logged,
29
37
  Maybe,
30
38
  Op,
31
39
  Optional,
40
+ Ordering,
32
41
  Predicate,
33
42
  Reader,
34
43
  Refinement,