@nlozgachev/pipelined 0.28.0 → 0.30.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 +105 -102
- package/dist/{Task-BZT0wedE.d.mts → Task-BDcKwFAj.d.mts} +33 -20
- package/dist/{Task-BW66NsGR.d.ts → Task-CnF22Q2o.d.ts} +33 -20
- package/dist/{chunk-CA3VE4YD.mjs → chunk-FWYOEWJ2.mjs} +10 -2
- package/dist/{chunk-QJS6D6MW.mjs → chunk-PV7JOUKL.mjs} +117 -39
- package/dist/{chunk-7JF44HJH.mjs → chunk-SDGDJ7CU.mjs} +17 -16
- package/dist/core.d.mts +236 -66
- package/dist/core.d.ts +236 -66
- package/dist/core.js +133 -54
- package/dist/core.mjs +2 -2
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +142 -55
- package/dist/index.mjs +3 -3
- package/dist/utils.d.mts +17 -2
- package/dist/utils.d.ts +17 -2
- package/dist/utils.js +26 -17
- package/dist/utils.mjs +2 -2
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -351,18 +351,18 @@ var Logged;
|
|
|
351
351
|
var Result;
|
|
352
352
|
((Result2) => {
|
|
353
353
|
Result2.ok = (value) => ({ kind: "Ok", value });
|
|
354
|
-
Result2.
|
|
354
|
+
Result2.error = (e) => ({ kind: "Error", error: e });
|
|
355
355
|
Result2.isOk = (data) => data.kind === "Ok";
|
|
356
|
-
Result2.
|
|
356
|
+
Result2.isError = (data) => data.kind === "Error";
|
|
357
357
|
Result2.tryCatch = (f, onError) => {
|
|
358
358
|
try {
|
|
359
359
|
return (0, Result2.ok)(f());
|
|
360
360
|
} catch (e) {
|
|
361
|
-
return (0, Result2.
|
|
361
|
+
return (0, Result2.error)(onError(e));
|
|
362
362
|
}
|
|
363
363
|
};
|
|
364
364
|
Result2.map = (f) => (data) => (0, Result2.isOk)(data) ? (0, Result2.ok)(f(data.value)) : data;
|
|
365
|
-
Result2.mapError = (f) => (data) => (0, Result2.
|
|
365
|
+
Result2.mapError = (f) => (data) => (0, Result2.isError)(data) ? (0, Result2.error)(f(data.error)) : data;
|
|
366
366
|
Result2.chain = (f) => (data) => (0, Result2.isOk)(data) ? f(data.value) : data;
|
|
367
367
|
Result2.fold = (onErr, onOk) => (data) => (0, Result2.isOk)(data) ? onOk(data.value) : onErr(data.error);
|
|
368
368
|
Result2.match = (cases) => (data) => (0, Result2.isOk)(data) ? cases.ok(data.value) : cases.err(data.error);
|
|
@@ -372,14 +372,14 @@ var Result;
|
|
|
372
372
|
return data;
|
|
373
373
|
};
|
|
374
374
|
Result2.tapError = (f) => (data) => {
|
|
375
|
-
if ((0, Result2.
|
|
375
|
+
if ((0, Result2.isError)(data)) f(data.error);
|
|
376
376
|
return data;
|
|
377
377
|
};
|
|
378
|
-
Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.
|
|
378
|
+
Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.error)(onFalse(a));
|
|
379
379
|
Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
|
|
380
|
-
Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.
|
|
380
|
+
Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isError)(data) && !isBlocked(data.error) ? fallback() : data;
|
|
381
381
|
Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
382
|
-
Result2.ap = (arg) => (data) => (0, Result2.isOk)(data) && (0, Result2.isOk)(arg) ? (0, Result2.ok)(data.value(arg.value)) : (0, Result2.
|
|
382
|
+
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;
|
|
383
383
|
})(Result || (Result = {}));
|
|
384
384
|
|
|
385
385
|
// src/Core/Maybe.ts
|
|
@@ -394,7 +394,7 @@ var Maybe;
|
|
|
394
394
|
Maybe2.toNullable = (data) => (0, Maybe2.isSome)(data) ? data.value : null;
|
|
395
395
|
Maybe2.toUndefined = (data) => (0, Maybe2.isSome)(data) ? data.value : void 0;
|
|
396
396
|
Maybe2.fromPredicate = (pred) => (a) => pred(a) ? (0, Maybe2.some)(a) : (0, Maybe2.none)();
|
|
397
|
-
Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.
|
|
397
|
+
Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.error(onNone());
|
|
398
398
|
Maybe2.fromResult = (data) => Result.isOk(data) ? (0, Maybe2.some)(data.value) : (0, Maybe2.none)();
|
|
399
399
|
Maybe2.map = (f) => (data) => (0, Maybe2.isSome)(data) ? (0, Maybe2.some)(f(data.value)) : data;
|
|
400
400
|
Maybe2.chain = (f) => (data) => (0, Maybe2.isSome)(data) ? f(data.value) : data;
|
|
@@ -411,14 +411,14 @@ var Maybe;
|
|
|
411
411
|
})(Maybe || (Maybe = {}));
|
|
412
412
|
|
|
413
413
|
// src/internal/Op.util.ts
|
|
414
|
-
var _abortedNil = { kind: "
|
|
415
|
-
var _droppedNil = { kind: "
|
|
416
|
-
var _replacedNil = { kind: "
|
|
417
|
-
var _evictedNil = { kind: "
|
|
414
|
+
var _abortedNil = { kind: "OpNil", reason: "aborted" };
|
|
415
|
+
var _droppedNil = { kind: "OpNil", reason: "dropped" };
|
|
416
|
+
var _replacedNil = { kind: "OpNil", reason: "replaced" };
|
|
417
|
+
var _evictedNil = { kind: "OpNil", reason: "evicted" };
|
|
418
418
|
var _idle = { kind: "Idle" };
|
|
419
419
|
var _pending = { kind: "Pending" };
|
|
420
|
-
var ok = (value) => ({ kind: "
|
|
421
|
-
var err = (error) => ({ kind: "
|
|
420
|
+
var ok = (value) => ({ kind: "OpOk", value });
|
|
421
|
+
var err = (error) => ({ kind: "OpError", error });
|
|
422
422
|
var cancellableWait = (ms, signal) => {
|
|
423
423
|
if (ms <= 0) return Promise.resolve();
|
|
424
424
|
return new Promise((resolve) => {
|
|
@@ -541,6 +541,12 @@ var makeRestartable = (op, minInterval, retryOptions, timeoutOptions) => {
|
|
|
541
541
|
subscribers.add(cb);
|
|
542
542
|
if (currentState.kind !== "Idle") cb(currentState);
|
|
543
543
|
return () => subscribers.delete(cb);
|
|
544
|
+
},
|
|
545
|
+
reset: () => emit(_idle),
|
|
546
|
+
poll: (input, { interval }) => {
|
|
547
|
+
void run(input);
|
|
548
|
+
const id = setInterval(() => void run(input), interval);
|
|
549
|
+
return () => clearInterval(id);
|
|
544
550
|
}
|
|
545
551
|
};
|
|
546
552
|
};
|
|
@@ -605,6 +611,12 @@ var makeExclusive = (op, cooldown, retryOptions, timeoutOptions) => {
|
|
|
605
611
|
subscribers.add(cb);
|
|
606
612
|
if (currentState.kind !== "Idle") cb(currentState);
|
|
607
613
|
return () => subscribers.delete(cb);
|
|
614
|
+
},
|
|
615
|
+
reset: () => emit(_idle),
|
|
616
|
+
poll: (input, { interval }) => {
|
|
617
|
+
void run(input);
|
|
618
|
+
const id = setInterval(() => void run(input), interval);
|
|
619
|
+
return () => clearInterval(id);
|
|
608
620
|
}
|
|
609
621
|
};
|
|
610
622
|
};
|
|
@@ -704,6 +716,12 @@ var makeQueue = (op, maxSize, overflow, concurrency, dedupe, retryOptions, timeo
|
|
|
704
716
|
subscribers.add(cb);
|
|
705
717
|
if (currentState.kind !== "Idle") cb(currentState);
|
|
706
718
|
return () => subscribers.delete(cb);
|
|
719
|
+
},
|
|
720
|
+
reset: () => emit(_idle),
|
|
721
|
+
poll: (input, { interval }) => {
|
|
722
|
+
void run(input);
|
|
723
|
+
const id = setInterval(() => void run(input), interval);
|
|
724
|
+
return () => clearInterval(id);
|
|
707
725
|
}
|
|
708
726
|
};
|
|
709
727
|
};
|
|
@@ -774,6 +792,12 @@ var makeBuffered = (op, size, retryOptions, timeoutOptions) => {
|
|
|
774
792
|
subscribers.add(cb);
|
|
775
793
|
if (currentState.kind !== "Idle") cb(currentState);
|
|
776
794
|
return () => subscribers.delete(cb);
|
|
795
|
+
},
|
|
796
|
+
reset: () => emit(_idle),
|
|
797
|
+
poll: (input, { interval }) => {
|
|
798
|
+
void run(input);
|
|
799
|
+
const id = setInterval(() => void run(input), interval);
|
|
800
|
+
return () => clearInterval(id);
|
|
777
801
|
}
|
|
778
802
|
};
|
|
779
803
|
};
|
|
@@ -896,6 +920,12 @@ var makeDebounced = (op, ms, leading, maxWait, retryOptions, timeoutOptions) =>
|
|
|
896
920
|
subscribers.add(cb);
|
|
897
921
|
if (currentState.kind !== "Idle") cb(currentState);
|
|
898
922
|
return () => subscribers.delete(cb);
|
|
923
|
+
},
|
|
924
|
+
reset: () => emit(_idle),
|
|
925
|
+
poll: (input, { interval }) => {
|
|
926
|
+
void run(input);
|
|
927
|
+
const id = setInterval(() => void run(input), interval);
|
|
928
|
+
return () => clearInterval(id);
|
|
899
929
|
}
|
|
900
930
|
};
|
|
901
931
|
};
|
|
@@ -988,6 +1018,12 @@ var makeThrottled = (op, ms, trailing, retryOptions, timeoutOptions) => {
|
|
|
988
1018
|
subscribers.add(cb);
|
|
989
1019
|
if (currentState.kind !== "Idle") cb(currentState);
|
|
990
1020
|
return () => subscribers.delete(cb);
|
|
1021
|
+
},
|
|
1022
|
+
reset: () => emit(_idle),
|
|
1023
|
+
poll: (input, { interval }) => {
|
|
1024
|
+
void run(input);
|
|
1025
|
+
const id = setInterval(() => void run(input), interval);
|
|
1026
|
+
return () => clearInterval(id);
|
|
991
1027
|
}
|
|
992
1028
|
};
|
|
993
1029
|
};
|
|
@@ -1069,6 +1105,12 @@ var makeConcurrent = (op, n, overflow, retryOptions, timeoutOptions) => {
|
|
|
1069
1105
|
subscribers.add(cb);
|
|
1070
1106
|
if (currentState.kind !== "Idle") cb(currentState);
|
|
1071
1107
|
return () => subscribers.delete(cb);
|
|
1108
|
+
},
|
|
1109
|
+
reset: () => emit(_idle),
|
|
1110
|
+
poll: (input, { interval }) => {
|
|
1111
|
+
void run(input);
|
|
1112
|
+
const id = setInterval(() => void run(input), interval);
|
|
1113
|
+
return () => clearInterval(id);
|
|
1072
1114
|
}
|
|
1073
1115
|
};
|
|
1074
1116
|
};
|
|
@@ -1145,6 +1187,15 @@ var makeKeyed = (op, keyFn, perKey, timeoutOptions) => {
|
|
|
1145
1187
|
subscribers.add(cb);
|
|
1146
1188
|
if (stateMap.size > 0) cb(new Map(stateMap));
|
|
1147
1189
|
return () => subscribers.delete(cb);
|
|
1190
|
+
},
|
|
1191
|
+
reset: () => {
|
|
1192
|
+
stateMap.clear();
|
|
1193
|
+
emitSnapshot();
|
|
1194
|
+
},
|
|
1195
|
+
poll: (input, { interval }) => {
|
|
1196
|
+
void run(input);
|
|
1197
|
+
const id = setInterval(() => void run(input), interval);
|
|
1198
|
+
return () => clearInterval(id);
|
|
1148
1199
|
}
|
|
1149
1200
|
};
|
|
1150
1201
|
};
|
|
@@ -1199,6 +1250,12 @@ var makeOnce = (op, retryOptions, timeoutOptions) => {
|
|
|
1199
1250
|
subscribers.add(cb);
|
|
1200
1251
|
if (currentState.kind !== "Idle") cb(currentState);
|
|
1201
1252
|
return () => subscribers.delete(cb);
|
|
1253
|
+
},
|
|
1254
|
+
reset: () => emit(_idle),
|
|
1255
|
+
poll: (input, { interval }) => {
|
|
1256
|
+
void run(input);
|
|
1257
|
+
const id = setInterval(() => void run(input), interval);
|
|
1258
|
+
return () => clearInterval(id);
|
|
1202
1259
|
}
|
|
1203
1260
|
};
|
|
1204
1261
|
};
|
|
@@ -1206,44 +1263,59 @@ var makeOnce = (op, retryOptions, timeoutOptions) => {
|
|
|
1206
1263
|
// src/Core/Op.ts
|
|
1207
1264
|
var Op;
|
|
1208
1265
|
((Op2) => {
|
|
1209
|
-
Op2.nil = (reason) => ({ kind: "
|
|
1266
|
+
Op2.nil = (reason) => ({ kind: "OpNil", reason });
|
|
1210
1267
|
Op2.create = (factory, onError) => ({
|
|
1211
1268
|
_factory: (input, signal) => Deferred.fromPromise(
|
|
1212
|
-
factory(signal)(input).then((value) => Result.ok(value)).catch((e) => signal.aborted ? null : Result.
|
|
1269
|
+
factory(signal)(input).then((value) => Result.ok(value)).catch((e) => signal.aborted ? null : Result.error(onError(e)))
|
|
1213
1270
|
)
|
|
1214
1271
|
});
|
|
1215
|
-
Op2.
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
Op2.
|
|
1272
|
+
Op2.lift = (f) => (0, Op2.create)(
|
|
1273
|
+
(signal) => (input) => f(input, signal),
|
|
1274
|
+
(e) => e
|
|
1275
|
+
);
|
|
1276
|
+
Op2.ok = (value) => ({ kind: "OpOk", value });
|
|
1277
|
+
Op2.error = (error2) => ({ kind: "OpError", error: error2 });
|
|
1278
|
+
Op2.isIdle = (state) => state.kind === "Idle";
|
|
1279
|
+
Op2.isPending = (state) => state.kind === "Pending";
|
|
1280
|
+
Op2.isQueued = (state) => state.kind === "Queued";
|
|
1281
|
+
Op2.isRetrying = (state) => state.kind === "Retrying";
|
|
1282
|
+
Op2.isOk = (state) => state.kind === "OpOk";
|
|
1283
|
+
Op2.isError = (state) => state.kind === "OpError";
|
|
1284
|
+
Op2.isNil = (state) => state.kind === "OpNil";
|
|
1220
1285
|
Op2.match = (cases) => (outcome) => {
|
|
1221
|
-
if (outcome.kind === "
|
|
1222
|
-
if (outcome.kind === "
|
|
1286
|
+
if (outcome.kind === "OpOk") return cases.ok(outcome.value);
|
|
1287
|
+
if (outcome.kind === "OpError") return cases.error(outcome.error);
|
|
1223
1288
|
return cases.nil();
|
|
1224
1289
|
};
|
|
1225
|
-
Op2.fold = (
|
|
1226
|
-
if (outcome.kind === "
|
|
1227
|
-
if (outcome.kind === "
|
|
1290
|
+
Op2.fold = (onError, onOk, onNil) => (outcome) => {
|
|
1291
|
+
if (outcome.kind === "OpOk") return onOk(outcome.value);
|
|
1292
|
+
if (outcome.kind === "OpError") return onError(outcome.error);
|
|
1228
1293
|
return onNil();
|
|
1229
1294
|
};
|
|
1230
|
-
Op2.getOrElse = (defaultValue) => (outcome) => outcome.kind === "
|
|
1231
|
-
Op2.map = (f) => (outcome) => outcome.kind === "
|
|
1232
|
-
Op2.mapError = (f) => (outcome) => outcome.kind === "
|
|
1233
|
-
Op2.chain = (f) => (outcome) => outcome.kind === "
|
|
1295
|
+
Op2.getOrElse = (defaultValue) => (outcome) => outcome.kind === "OpOk" ? outcome.value : defaultValue();
|
|
1296
|
+
Op2.map = (f) => (outcome) => outcome.kind === "OpOk" ? (0, Op2.ok)(f(outcome.value)) : outcome;
|
|
1297
|
+
Op2.mapError = (f) => (outcome) => outcome.kind === "OpError" ? (0, Op2.error)(f(outcome.error)) : outcome;
|
|
1298
|
+
Op2.chain = (f) => (outcome) => outcome.kind === "OpOk" ? f(outcome.value) : outcome;
|
|
1234
1299
|
Op2.tap = (f) => (outcome) => {
|
|
1235
|
-
if (outcome.kind === "
|
|
1300
|
+
if (outcome.kind === "OpOk") f(outcome.value);
|
|
1236
1301
|
return outcome;
|
|
1237
1302
|
};
|
|
1238
|
-
Op2.recover = (f) => (outcome) => outcome.kind === "
|
|
1303
|
+
Op2.recover = (f) => (outcome) => outcome.kind === "OpError" ? f(outcome.error) : outcome;
|
|
1239
1304
|
Op2.toResult = (onNil) => (outcome) => {
|
|
1240
|
-
if (outcome.kind === "
|
|
1241
|
-
if (outcome.kind === "
|
|
1242
|
-
return Result.
|
|
1305
|
+
if (outcome.kind === "OpOk") return Result.ok(outcome.value);
|
|
1306
|
+
if (outcome.kind === "OpError") return Result.error(outcome.error);
|
|
1307
|
+
return Result.error(onNil());
|
|
1243
1308
|
};
|
|
1244
|
-
Op2.toMaybe = (outcome) => outcome.kind === "
|
|
1309
|
+
Op2.toMaybe = (outcome) => outcome.kind === "OpOk" ? Maybe.some(outcome.value) : Maybe.none();
|
|
1245
1310
|
Op2.all = (invocations) => Deferred.fromPromise(Promise.all(invocations.map(Deferred.toPromise)));
|
|
1246
1311
|
Op2.race = (invocations) => Deferred.fromPromise(Promise.race(invocations.map(Deferred.toPromise)));
|
|
1312
|
+
Op2.wire = (source, f) => source.subscribe((state) => {
|
|
1313
|
+
if ((0, Op2.isOk)(state)) f(state.value);
|
|
1314
|
+
});
|
|
1315
|
+
Op2.wireAll = (...pairs) => {
|
|
1316
|
+
const cleanups = pairs.map(([source, f]) => (0, Op2.wire)(source, f));
|
|
1317
|
+
return () => cleanups.forEach((c) => c());
|
|
1318
|
+
};
|
|
1247
1319
|
function interpret(op, options) {
|
|
1248
1320
|
const { strategy, retry: retryOptions, timeout: timeoutOptions } = options;
|
|
1249
1321
|
switch (strategy) {
|
|
@@ -1382,7 +1454,7 @@ var Refinement;
|
|
|
1382
1454
|
Refinement2.and = (second) => (first) => (a) => first(a) && second(a);
|
|
1383
1455
|
Refinement2.or = (second) => (first) => (a) => first(a) || second(a);
|
|
1384
1456
|
Refinement2.toFilter = (r) => (a) => r(a) ? Maybe.some(a) : Maybe.none();
|
|
1385
|
-
Refinement2.toResult = (r, onFail) => (a) => r(a) ? Result.ok(a) : Result.
|
|
1457
|
+
Refinement2.toResult = (r, onFail) => (a) => r(a) ? Result.ok(a) : Result.error(onFail(a));
|
|
1386
1458
|
})(Refinement || (Refinement = {}));
|
|
1387
1459
|
|
|
1388
1460
|
// src/Core/RemoteData.ts
|
|
@@ -1451,9 +1523,10 @@ var RemoteData;
|
|
|
1451
1523
|
};
|
|
1452
1524
|
RemoteData2.recover = (fallback) => (data) => (0, RemoteData2.isFailure)(data) ? fallback(data.error) : data;
|
|
1453
1525
|
RemoteData2.toMaybe = (data) => (0, RemoteData2.isSuccess)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
1454
|
-
RemoteData2.toResult = (onNotReady) => (data) => (0, RemoteData2.isSuccess)(data) ? Result.ok(data.value) : Result.
|
|
1526
|
+
RemoteData2.toResult = (onNotReady) => (data) => (0, RemoteData2.isSuccess)(data) ? Result.ok(data.value) : Result.error((0, RemoteData2.isFailure)(data) ? data.error : onNotReady());
|
|
1455
1527
|
RemoteData2.fromResult = (data) => Result.isOk(data) ? (0, RemoteData2.success)(data.value) : (0, RemoteData2.failure)(data.error);
|
|
1456
1528
|
RemoteData2.fromMaybe = (onNone) => (data) => Maybe.isSome(data) ? (0, RemoteData2.success)(data.value) : (0, RemoteData2.failure)(onNone());
|
|
1529
|
+
RemoteData2.filter = (pred, onFalse) => (data) => (0, RemoteData2.isSuccess)(data) ? pred(data.value) ? data : (0, RemoteData2.failure)(onFalse(data.value)) : data;
|
|
1457
1530
|
})(RemoteData || (RemoteData = {}));
|
|
1458
1531
|
|
|
1459
1532
|
// src/Core/Task.ts
|
|
@@ -1493,22 +1566,22 @@ var Task;
|
|
|
1493
1566
|
if (times <= 0) return Promise.resolve([]);
|
|
1494
1567
|
const results = [];
|
|
1495
1568
|
const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
|
|
1496
|
-
const
|
|
1569
|
+
const run2 = (left) => toPromise(task, signal).then((a) => {
|
|
1497
1570
|
results.push(a);
|
|
1498
1571
|
if (left <= 1) return results;
|
|
1499
|
-
return wait().then(() =>
|
|
1572
|
+
return wait().then(() => run2(left - 1));
|
|
1500
1573
|
});
|
|
1501
|
-
return
|
|
1574
|
+
return run2(times);
|
|
1502
1575
|
});
|
|
1503
1576
|
Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
|
|
1504
1577
|
const { when: predicate, delay: ms, maxAttempts } = options;
|
|
1505
1578
|
const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
|
|
1506
|
-
const
|
|
1579
|
+
const run2 = (attempt) => toPromise(task, signal).then((a) => {
|
|
1507
1580
|
if (predicate(a)) return a;
|
|
1508
1581
|
if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
|
|
1509
|
-
return wait().then(() =>
|
|
1582
|
+
return wait().then(() => run2(attempt + 1));
|
|
1510
1583
|
});
|
|
1511
|
-
return
|
|
1584
|
+
return run2(1);
|
|
1512
1585
|
});
|
|
1513
1586
|
Task2.race = (tasks) => (0, Task2.from)((signal) => Promise.race(tasks.map((t) => toPromise(t, signal))));
|
|
1514
1587
|
Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
|
|
@@ -1533,7 +1606,7 @@ var Task;
|
|
|
1533
1606
|
timerId = setTimeout(() => {
|
|
1534
1607
|
controller.abort();
|
|
1535
1608
|
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
1536
|
-
resolve2(Result.
|
|
1609
|
+
resolve2(Result.error(onTimeout()));
|
|
1537
1610
|
}, ms);
|
|
1538
1611
|
})
|
|
1539
1612
|
]);
|
|
@@ -1556,6 +1629,7 @@ var Task;
|
|
|
1556
1629
|
};
|
|
1557
1630
|
return { task, abort };
|
|
1558
1631
|
};
|
|
1632
|
+
Task2.run = (signal) => (task) => Deferred.toPromise(task(signal));
|
|
1559
1633
|
})(Task || (Task = {}));
|
|
1560
1634
|
|
|
1561
1635
|
// src/Core/Resource.ts
|
|
@@ -1568,7 +1642,7 @@ var Resource;
|
|
|
1568
1642
|
});
|
|
1569
1643
|
Resource2.use = (f) => (resource) => Task.from(
|
|
1570
1644
|
() => Deferred.toPromise(resource.acquire()).then(async (acquired) => {
|
|
1571
|
-
if (Result.
|
|
1645
|
+
if (Result.isError(acquired)) return acquired;
|
|
1572
1646
|
const a = acquired.value;
|
|
1573
1647
|
const usageResult = await Deferred.toPromise(f(a)());
|
|
1574
1648
|
await Deferred.toPromise(resource.release(a)());
|
|
@@ -1578,10 +1652,10 @@ var Resource;
|
|
|
1578
1652
|
Resource2.combine = (resourceA, resourceB) => ({
|
|
1579
1653
|
acquire: Task.from(
|
|
1580
1654
|
() => Deferred.toPromise(resourceA.acquire()).then(async (acquiredA) => {
|
|
1581
|
-
if (Result.
|
|
1655
|
+
if (Result.isError(acquiredA)) return acquiredA;
|
|
1582
1656
|
const a = acquiredA.value;
|
|
1583
1657
|
const acquiredB = await Deferred.toPromise(resourceB.acquire());
|
|
1584
|
-
if (Result.
|
|
1658
|
+
if (Result.isError(acquiredB)) {
|
|
1585
1659
|
await Deferred.toPromise(resourceA.release(a)());
|
|
1586
1660
|
return acquiredB;
|
|
1587
1661
|
}
|
|
@@ -1653,23 +1727,26 @@ var TaskMaybe;
|
|
|
1653
1727
|
var TaskResult;
|
|
1654
1728
|
((TaskResult2) => {
|
|
1655
1729
|
TaskResult2.ok = (value) => Task.resolve(Result.ok(value));
|
|
1656
|
-
TaskResult2.err = (error) => Task.resolve(Result.
|
|
1730
|
+
TaskResult2.err = (error) => Task.resolve(Result.error(error));
|
|
1657
1731
|
TaskResult2.tryCatch = (f, onError) => Task.from(
|
|
1658
|
-
(signal) => f(signal).then(Result.ok).catch((e) => Result.
|
|
1732
|
+
(signal) => f(signal).then(Result.ok).catch((e) => Result.error(onError(e)))
|
|
1659
1733
|
);
|
|
1660
1734
|
TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
|
|
1661
1735
|
TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
|
|
1662
|
-
TaskResult2.chain = (f) => (data) => Task.chain(
|
|
1736
|
+
TaskResult2.chain = (f) => (data) => Task.chain(
|
|
1737
|
+
(result) => Result.isOk(result) ? f(result.value) : Task.resolve(Result.error(result.error))
|
|
1738
|
+
)(
|
|
1663
1739
|
data
|
|
1664
1740
|
);
|
|
1665
1741
|
TaskResult2.fold = (onErr, onOk) => (data) => Task.map(Result.fold(onErr, onOk))(data);
|
|
1666
1742
|
TaskResult2.match = (cases) => (data) => Task.map(Result.match(cases))(data);
|
|
1667
1743
|
TaskResult2.recover = (fallback) => (data) => Task.chain(
|
|
1668
|
-
(result) => Result.
|
|
1744
|
+
(result) => Result.isError(result) ? fallback(result.error) : Task.resolve(result)
|
|
1669
1745
|
)(data);
|
|
1670
1746
|
TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
|
|
1671
1747
|
TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
|
|
1672
1748
|
TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
|
|
1749
|
+
TaskResult2.run = (signal) => (task) => Deferred.toPromise(task(signal));
|
|
1673
1750
|
})(TaskResult || (TaskResult = {}));
|
|
1674
1751
|
|
|
1675
1752
|
// src/Core/Validation.ts
|
|
@@ -1712,7 +1789,9 @@ var Validation;
|
|
|
1712
1789
|
};
|
|
1713
1790
|
Validation2.recover = (fallback) => (data) => (0, Validation2.isValid)(data) ? data : fallback(data.errors);
|
|
1714
1791
|
Validation2.recoverUnless = (isBlocked, fallback) => (data) => (0, Validation2.isInvalid)(data) && !data.errors.some(isBlocked) ? fallback() : data;
|
|
1715
|
-
Validation2.toResult = (data) => (0, Validation2.isValid)(data) ? Result.ok(data.value) : Result.
|
|
1792
|
+
Validation2.toResult = (data) => (0, Validation2.isValid)(data) ? Result.ok(data.value) : Result.error(data.errors);
|
|
1793
|
+
Validation2.toMaybe = (data) => (0, Validation2.isValid)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
1794
|
+
Validation2.fromResult = (data) => data.kind === "Ok" ? (0, Validation2.valid)(data.value) : (0, Validation2.invalid)(data.error);
|
|
1716
1795
|
Validation2.product = (first, second) => {
|
|
1717
1796
|
if ((0, Validation2.isValid)(first) && (0, Validation2.isValid)(second)) return (0, Validation2.valid)([first.value, second.value]);
|
|
1718
1797
|
const errors = [
|
|
@@ -2017,7 +2096,7 @@ var Arr;
|
|
|
2017
2096
|
const result = [];
|
|
2018
2097
|
for (const a of data) {
|
|
2019
2098
|
const r = await Deferred.toPromise(f(a)());
|
|
2020
|
-
if (Result.
|
|
2099
|
+
if (Result.isError(r)) return r;
|
|
2021
2100
|
result.push(r.value);
|
|
2022
2101
|
}
|
|
2023
2102
|
return Result.ok(result);
|
|
@@ -2158,6 +2237,14 @@ var Dict;
|
|
|
2158
2237
|
}
|
|
2159
2238
|
return result;
|
|
2160
2239
|
};
|
|
2240
|
+
Dict2.filterMap = (f) => (m) => {
|
|
2241
|
+
const result = new globalThis.Map();
|
|
2242
|
+
for (const [key, value] of m) {
|
|
2243
|
+
const mapped = f(value);
|
|
2244
|
+
if (mapped.kind === "Some") result.set(key, mapped.value);
|
|
2245
|
+
}
|
|
2246
|
+
return result;
|
|
2247
|
+
};
|
|
2161
2248
|
Dict2.union = (other) => (m) => {
|
|
2162
2249
|
const result = new globalThis.Map(m);
|
|
2163
2250
|
for (const [k, v] of other) {
|
package/dist/index.mjs
CHANGED
|
@@ -44,7 +44,7 @@ import {
|
|
|
44
44
|
These,
|
|
45
45
|
Tuple,
|
|
46
46
|
Validation
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-PV7JOUKL.mjs";
|
|
48
48
|
import {
|
|
49
49
|
Arr,
|
|
50
50
|
Dict,
|
|
@@ -52,13 +52,13 @@ import {
|
|
|
52
52
|
Rec,
|
|
53
53
|
Str,
|
|
54
54
|
Uniq
|
|
55
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-FWYOEWJ2.mjs";
|
|
56
56
|
import {
|
|
57
57
|
Deferred,
|
|
58
58
|
Maybe,
|
|
59
59
|
Result,
|
|
60
60
|
Task
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-SDGDJ7CU.mjs";
|
|
62
62
|
import {
|
|
63
63
|
Brand
|
|
64
64
|
} from "./chunk-BYWKZLHM.mjs";
|
package/dist/utils.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as Maybe, R as Result, T as Task } from './Task-
|
|
1
|
+
import { M as Maybe, R as Result, T as Task } from './Task-BDcKwFAj.mjs';
|
|
2
2
|
import { N as NonEmptyList } from './NonEmptyList-BlGFjor5.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -269,7 +269,7 @@ declare namespace Arr {
|
|
|
269
269
|
* ```ts
|
|
270
270
|
* pipe(
|
|
271
271
|
* [1, 2, 3],
|
|
272
|
-
* Arr.traverseResult(n => n > 0 ? Result.ok(n) : Result.
|
|
272
|
+
* Arr.traverseResult(n => n > 0 ? Result.ok(n) : Result.error("negative"))
|
|
273
273
|
* ); // Ok([1, 2, 3])
|
|
274
274
|
* ```
|
|
275
275
|
*/
|
|
@@ -684,6 +684,21 @@ declare namespace Dict {
|
|
|
684
684
|
* ```
|
|
685
685
|
*/
|
|
686
686
|
const compact: <K, A>(m: ReadonlyMap<K, Maybe<A>>) => ReadonlyMap<K, A>;
|
|
687
|
+
/**
|
|
688
|
+
* Applies `f` to each value. Entries where `f` returns `None` are removed; entries where
|
|
689
|
+
* `f` returns `Some` are kept with the unwrapped value. Combines map and filter in one pass.
|
|
690
|
+
*
|
|
691
|
+
* @example
|
|
692
|
+
* ```ts
|
|
693
|
+
* const parse = (s: string): Maybe<number> => {
|
|
694
|
+
* const n = Number(s);
|
|
695
|
+
* return isNaN(n) ? Maybe.none() : Maybe.some(n);
|
|
696
|
+
* };
|
|
697
|
+
* Dict.filterMap(parse)(Dict.fromRecord({ a: "1", b: "two", c: "3" }));
|
|
698
|
+
* // ReadonlyMap { "a" => 1, "c" => 3 }
|
|
699
|
+
* ```
|
|
700
|
+
*/
|
|
701
|
+
const filterMap: <A, B>(f: (a: A) => Maybe<B>) => <K>(m: ReadonlyMap<K, A>) => ReadonlyMap<K, B>;
|
|
687
702
|
/**
|
|
688
703
|
* Merges two dictionaries. When both contain the same key, the value from `other` takes
|
|
689
704
|
* precedence.
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { M as Maybe, R as Result, T as Task } from './Task-
|
|
1
|
+
import { M as Maybe, R as Result, T as Task } from './Task-CnF22Q2o.js';
|
|
2
2
|
import { N as NonEmptyList } from './NonEmptyList-BlGFjor5.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -269,7 +269,7 @@ declare namespace Arr {
|
|
|
269
269
|
* ```ts
|
|
270
270
|
* pipe(
|
|
271
271
|
* [1, 2, 3],
|
|
272
|
-
* Arr.traverseResult(n => n > 0 ? Result.ok(n) : Result.
|
|
272
|
+
* Arr.traverseResult(n => n > 0 ? Result.ok(n) : Result.error("negative"))
|
|
273
273
|
* ); // Ok([1, 2, 3])
|
|
274
274
|
* ```
|
|
275
275
|
*/
|
|
@@ -684,6 +684,21 @@ declare namespace Dict {
|
|
|
684
684
|
* ```
|
|
685
685
|
*/
|
|
686
686
|
const compact: <K, A>(m: ReadonlyMap<K, Maybe<A>>) => ReadonlyMap<K, A>;
|
|
687
|
+
/**
|
|
688
|
+
* Applies `f` to each value. Entries where `f` returns `None` are removed; entries where
|
|
689
|
+
* `f` returns `Some` are kept with the unwrapped value. Combines map and filter in one pass.
|
|
690
|
+
*
|
|
691
|
+
* @example
|
|
692
|
+
* ```ts
|
|
693
|
+
* const parse = (s: string): Maybe<number> => {
|
|
694
|
+
* const n = Number(s);
|
|
695
|
+
* return isNaN(n) ? Maybe.none() : Maybe.some(n);
|
|
696
|
+
* };
|
|
697
|
+
* Dict.filterMap(parse)(Dict.fromRecord({ a: "1", b: "two", c: "3" }));
|
|
698
|
+
* // ReadonlyMap { "a" => 1, "c" => 3 }
|
|
699
|
+
* ```
|
|
700
|
+
*/
|
|
701
|
+
const filterMap: <A, B>(f: (a: A) => Maybe<B>) => <K>(m: ReadonlyMap<K, A>) => ReadonlyMap<K, B>;
|
|
687
702
|
/**
|
|
688
703
|
* Merges two dictionaries. When both contain the same key, the value from `other` takes
|
|
689
704
|
* precedence.
|
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 = (isBlocked, fallback) => (data) => (0, Result2.
|
|
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
|
|
@@ -86,7 +86,7 @@ var Maybe;
|
|
|
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
88
|
Maybe2.fromPredicate = (pred) => (a) => pred(a) ? (0, Maybe2.some)(a) : (0, Maybe2.none)();
|
|
89
|
-
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());
|
|
90
90
|
Maybe2.fromResult = (data) => Result.isOk(data) ? (0, Maybe2.some)(data.value) : (0, Maybe2.none)();
|
|
91
91
|
Maybe2.map = (f) => (data) => (0, Maybe2.isSome)(data) ? (0, Maybe2.some)(f(data.value)) : data;
|
|
92
92
|
Maybe2.chain = (f) => (data) => (0, Maybe2.isSome)(data) ? f(data.value) : data;
|
|
@@ -139,22 +139,22 @@ var Task;
|
|
|
139
139
|
if (times <= 0) return Promise.resolve([]);
|
|
140
140
|
const results = [];
|
|
141
141
|
const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
|
|
142
|
-
const
|
|
142
|
+
const run2 = (left) => toPromise(task, signal).then((a) => {
|
|
143
143
|
results.push(a);
|
|
144
144
|
if (left <= 1) return results;
|
|
145
|
-
return wait().then(() =>
|
|
145
|
+
return wait().then(() => run2(left - 1));
|
|
146
146
|
});
|
|
147
|
-
return
|
|
147
|
+
return run2(times);
|
|
148
148
|
});
|
|
149
149
|
Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
|
|
150
150
|
const { when: predicate, delay: ms, maxAttempts } = options;
|
|
151
151
|
const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
|
|
152
|
-
const
|
|
152
|
+
const run2 = (attempt) => toPromise(task, signal).then((a) => {
|
|
153
153
|
if (predicate(a)) return a;
|
|
154
154
|
if (maxAttempts !== void 0 && attempt >= maxAttempts) return a;
|
|
155
|
-
return wait().then(() =>
|
|
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,7 +179,7 @@ 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
|
]);
|
|
@@ -202,6 +202,7 @@ var Task;
|
|
|
202
202
|
};
|
|
203
203
|
return { task, abort };
|
|
204
204
|
};
|
|
205
|
+
Task2.run = (signal) => (task) => Deferred.toPromise(task(signal));
|
|
205
206
|
})(Task || (Task = {}));
|
|
206
207
|
|
|
207
208
|
// src/Types/NonEmptyList.ts
|
|
@@ -365,7 +366,7 @@ var Arr;
|
|
|
365
366
|
const result = [];
|
|
366
367
|
for (const a of data) {
|
|
367
368
|
const r = await Deferred.toPromise(f(a)());
|
|
368
|
-
if (Result.
|
|
369
|
+
if (Result.isError(r)) return r;
|
|
369
370
|
result.push(r.value);
|
|
370
371
|
}
|
|
371
372
|
return Result.ok(result);
|
|
@@ -506,6 +507,14 @@ var Dict;
|
|
|
506
507
|
}
|
|
507
508
|
return result;
|
|
508
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
|
+
};
|
|
509
518
|
Dict2.union = (other) => (m) => {
|
|
510
519
|
const result = new globalThis.Map(m);
|
|
511
520
|
for (const [k, v] of other) {
|