@nlozgachev/pipelined 0.35.0 → 0.37.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/index.js CHANGED
@@ -64,6 +64,7 @@ __export(src_exports, {
64
64
  curry: () => curry,
65
65
  curry3: () => curry3,
66
66
  curry4: () => curry4,
67
+ defaultTo: () => defaultTo,
67
68
  flip: () => flip,
68
69
  flow: () => flow,
69
70
  identity: () => identity,
@@ -210,6 +211,53 @@ function flow(ab, bc, cd, de, ef, fg, gh, hi, ij, jk) {
210
211
  }
211
212
  }
212
213
  }
214
+ var when = (predicate, onTrue) => (a) => predicate(a) ? onTrue(a) : a;
215
+ var unless = (predicate, onFalse) => (a) => predicate(a) ? a : onFalse(a);
216
+ var either = (predicate, onTrue, onFalse) => (a) => predicate(a) ? onTrue(a) : onFalse(a);
217
+ var struct = (fields) => (a) => {
218
+ const result = {};
219
+ for (const key of Object.keys(fields)) {
220
+ result[key] = fields[key](a);
221
+ }
222
+ return result;
223
+ };
224
+ function safe(...fns) {
225
+ return (a) => {
226
+ let result = a;
227
+ if (result === null || result === void 0) {
228
+ return result;
229
+ }
230
+ for (const fn of fns) {
231
+ result = fn(result);
232
+ if (result === null || result === void 0) {
233
+ return result;
234
+ }
235
+ }
236
+ return result;
237
+ };
238
+ }
239
+ function async(...fns) {
240
+ return async (a) => {
241
+ let result = await a;
242
+ for (const fn of fns) {
243
+ result = await fn(result);
244
+ }
245
+ return result;
246
+ };
247
+ }
248
+ flow.when = when;
249
+ flow.unless = unless;
250
+ flow.either = either;
251
+ flow.struct = struct;
252
+ flow.safe = safe;
253
+ flow.async = async;
254
+ flow.try = (f, onError) => (a) => {
255
+ try {
256
+ return f(a);
257
+ } catch (error) {
258
+ return onError(error, a);
259
+ }
260
+ };
213
261
 
214
262
  // src/Composition/fn.ts
215
263
  var identity = (a) => a;
@@ -233,6 +281,7 @@ var once = (f) => {
233
281
  return result;
234
282
  };
235
283
  };
284
+ var defaultTo = (fallback) => (a) => a === null || a === void 0 ? fallback : a;
236
285
 
237
286
  // src/Composition/juxt.ts
238
287
  function juxt(fns) {
@@ -308,6 +357,49 @@ function pipe(a, ab, bc, cd, de, ef, fg, gh, hi, ij, jk) {
308
357
  }
309
358
  }
310
359
  }
360
+ var when2 = (predicate, onTrue) => (a) => predicate(a) ? onTrue(a) : a;
361
+ var unless2 = (predicate, onFalse) => (a) => predicate(a) ? a : onFalse(a);
362
+ var either2 = (predicate, onTrue, onFalse) => (a) => predicate(a) ? onTrue(a) : onFalse(a);
363
+ var struct2 = (fields) => (a) => {
364
+ const result = {};
365
+ for (const key of Object.keys(fields)) {
366
+ result[key] = fields[key](a);
367
+ }
368
+ return result;
369
+ };
370
+ function safe2(a, ...fns) {
371
+ let result = a;
372
+ if (result === null || result === void 0) {
373
+ return result;
374
+ }
375
+ for (const fn of fns) {
376
+ result = fn(result);
377
+ if (result === null || result === void 0) {
378
+ return result;
379
+ }
380
+ }
381
+ return result;
382
+ }
383
+ async function async2(a, ...fns) {
384
+ let result = await a;
385
+ for (const fn of fns) {
386
+ result = await fn(result);
387
+ }
388
+ return result;
389
+ }
390
+ pipe.when = when2;
391
+ pipe.unless = unless2;
392
+ pipe.either = either2;
393
+ pipe.struct = struct2;
394
+ pipe.safe = safe2;
395
+ pipe.async = async2;
396
+ pipe.try = (f, onError) => (a) => {
397
+ try {
398
+ return f(a);
399
+ } catch (error) {
400
+ return onError(error, a);
401
+ }
402
+ };
311
403
 
312
404
  // src/Composition/tap.ts
313
405
  var tap = (f) => (a) => {
@@ -371,6 +463,10 @@ var Result;
371
463
  Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
372
464
  Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
373
465
  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;
466
+ Result2.bindTo = (key) => (data) => (0, Result2.map)((a) => ({ [key]: a }))(data);
467
+ Result2.bind = (key, f) => (data) => (0, Result2.chain)(
468
+ (a) => (0, Result2.map)((b) => ({ ...a, [key]: b }))(f(a))
469
+ )(data);
374
470
  })(Result || (Result = {}));
375
471
 
376
472
  // src/Core/Maybe.ts
@@ -401,6 +497,10 @@ var Maybe;
401
497
  Maybe2.filter = (predicate) => (data) => (0, Maybe2.isSome)(data) ? predicate(data.value) ? data : (0, Maybe2.none)() : data;
402
498
  Maybe2.recover = (fallback) => (data) => (0, Maybe2.isSome)(data) ? data : fallback();
403
499
  Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
500
+ Maybe2.bindTo = (key) => (data) => (0, Maybe2.map)((a) => ({ [key]: a }))(data);
501
+ Maybe2.bind = (key, f) => (data) => (0, Maybe2.chain)(
502
+ (a) => (0, Maybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
503
+ )(data);
404
504
  })(Maybe || (Maybe = {}));
405
505
 
406
506
  // src/Core/Combinable.ts
@@ -508,6 +608,10 @@ var Logged;
508
608
  return data;
509
609
  };
510
610
  Logged2.run = (data) => [data.value, data.log];
611
+ Logged2.bindTo = (key) => (data) => (0, Logged2.map)((a) => ({ [key]: a }))(data);
612
+ Logged2.bind = (key, f) => (data) => (0, Logged2.chain)(
613
+ (a) => (0, Logged2.map)((b) => ({ ...a, [key]: b }))(f(a))
614
+ )(data);
511
615
  })(Logged || (Logged = {}));
512
616
 
513
617
  // src/Types/Brand.ts
@@ -1522,7 +1626,7 @@ var Op;
1522
1626
  }
1523
1627
  return cases.nil();
1524
1628
  };
1525
- Op2.fold = (onErr, onOk, onNil) => (outcome) => {
1629
+ Op2.fold = (onErr, onNil, onOk) => (outcome) => {
1526
1630
  if (outcome.kind === "OpOk") {
1527
1631
  return onOk(outcome.value);
1528
1632
  }
@@ -1707,6 +1811,10 @@ var Reader;
1707
1811
  };
1708
1812
  Reader2.local = (f) => (data) => (env) => data(f(env));
1709
1813
  Reader2.run = (env) => (data) => data(env);
1814
+ Reader2.bindTo = (key) => (data) => (0, Reader2.map)((a) => ({ [key]: a }))(data);
1815
+ Reader2.bind = (key, f) => (data) => (0, Reader2.chain)(
1816
+ (a) => (0, Reader2.map)((b) => ({ ...a, [key]: b }))(f(a))
1817
+ )(data);
1710
1818
  })(Reader || (Reader = {}));
1711
1819
 
1712
1820
  // src/Core/Refinement.ts
@@ -1751,17 +1859,17 @@ var RemoteData;
1751
1859
  }
1752
1860
  return (0, RemoteData2.notAsked)();
1753
1861
  };
1754
- RemoteData2.fold = (onNotAsked, onLoading, onFailure, onSuccess) => (data) => {
1862
+ RemoteData2.fold = (onFailure, onNotAsked, onLoading, onSuccess) => (data) => {
1755
1863
  switch (data.kind) {
1864
+ case "Failure": {
1865
+ return onFailure(data.error);
1866
+ }
1756
1867
  case "NotAsked": {
1757
1868
  return onNotAsked();
1758
1869
  }
1759
1870
  case "Loading": {
1760
1871
  return onLoading();
1761
1872
  }
1762
- case "Failure": {
1763
- return onFailure(data.error);
1764
- }
1765
1873
  case "Success": {
1766
1874
  return onSuccess(data.value);
1767
1875
  }
@@ -2026,6 +2134,10 @@ var Task;
2026
2134
  return { task, abort };
2027
2135
  };
2028
2136
  Task2.run = (signal) => (task) => Deferred.toPromise(task(signal));
2137
+ Task2.bindTo = (key) => (data) => (0, Task2.map)((a) => ({ [key]: a }))(data);
2138
+ Task2.bind = (key, f) => (data) => (0, Task2.chain)(
2139
+ (a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
2140
+ )(data);
2029
2141
  })(Task || (Task = {}));
2030
2142
 
2031
2143
  // src/Core/Resource.ts
@@ -2103,6 +2215,10 @@ var State;
2103
2215
  State2.run = (initialState) => (st) => st(initialState);
2104
2216
  State2.evaluate = (initialState) => (st) => st(initialState)[0];
2105
2217
  State2.execute = (initialState) => (st) => st(initialState)[1];
2218
+ State2.bindTo = (key) => (data) => (0, State2.map)((a) => ({ [key]: a }))(data);
2219
+ State2.bind = (key, f) => (data) => (0, State2.chain)(
2220
+ (a) => (0, State2.map)((b) => ({ ...a, [key]: b }))(f(a))
2221
+ )(data);
2106
2222
  })(State || (State = {}));
2107
2223
 
2108
2224
  // src/Core/TaskMaybe.ts
@@ -2128,6 +2244,10 @@ var TaskMaybe;
2128
2244
  TaskMaybe2.tap = (f) => (data) => Task.map(Maybe.tap(f))(data);
2129
2245
  TaskMaybe2.filter = (predicate) => (data) => Task.map(Maybe.filter(predicate))(data);
2130
2246
  TaskMaybe2.toTaskResult = (onNone) => (data) => Task.map(Maybe.toResult(onNone))(data);
2247
+ TaskMaybe2.bindTo = (key) => (data) => (0, TaskMaybe2.map)((a) => ({ [key]: a }))(data);
2248
+ TaskMaybe2.bind = (key, f) => (data) => (0, TaskMaybe2.chain)(
2249
+ (a) => (0, TaskMaybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
2250
+ )(data);
2131
2251
  })(TaskMaybe || (TaskMaybe = {}));
2132
2252
 
2133
2253
  // src/Core/TaskResult.ts
@@ -2159,6 +2279,10 @@ var TaskResult;
2159
2279
  )
2160
2280
  );
2161
2281
  TaskResult2.run = (signal) => (task) => Deferred.toPromise(task(signal));
2282
+ TaskResult2.bindTo = (key) => (data) => (0, TaskResult2.map)((a) => ({ [key]: a }))(data);
2283
+ TaskResult2.bind = (key, f) => (data) => (0, TaskResult2.chain)(
2284
+ (a) => (0, TaskResult2.map)((b) => ({ ...a, [key]: b }))(f(a))
2285
+ )(data);
2162
2286
  })(TaskResult || (TaskResult = {}));
2163
2287
 
2164
2288
  // src/Core/Validation.ts
@@ -3239,6 +3363,7 @@ var Uniq;
3239
3363
  curry,
3240
3364
  curry3,
3241
3365
  curry4,
3366
+ defaultTo,
3242
3367
  flip,
3243
3368
  flow,
3244
3369
  identity,
package/dist/index.mjs CHANGED
@@ -11,6 +11,7 @@ import {
11
11
  curry,
12
12
  curry3,
13
13
  curry4,
14
+ defaultTo,
14
15
  flip,
15
16
  flow,
16
17
  identity,
@@ -26,7 +27,7 @@ import {
26
27
  uncurry,
27
28
  uncurry3,
28
29
  uncurry4
29
- } from "./chunk-AHEZFTMT.mjs";
30
+ } from "./chunk-3Q5UBRYB.mjs";
30
31
  import {
31
32
  Combinable,
32
33
  Equality,
@@ -48,7 +49,7 @@ import {
48
49
  These,
49
50
  Tuple,
50
51
  Validation
51
- } from "./chunk-5AWUAG7G.mjs";
52
+ } from "./chunk-SHO53CQC.mjs";
52
53
  import {
53
54
  Arr,
54
55
  Dict,
@@ -56,13 +57,13 @@ import {
56
57
  Rec,
57
58
  Str,
58
59
  Uniq
59
- } from "./chunk-IJFFWBKW.mjs";
60
+ } from "./chunk-72BGUEQM.mjs";
60
61
  import {
61
62
  Deferred,
62
63
  Maybe,
63
64
  Result,
64
65
  Task
65
- } from "./chunk-DLBHVYII.mjs";
66
+ } from "./chunk-PUMSVZB4.mjs";
66
67
  import "./chunk-IPP4XFYH.mjs";
67
68
  import {
68
69
  isNonEmptyList
@@ -116,6 +117,7 @@ export {
116
117
  curry,
117
118
  curry3,
118
119
  curry4,
120
+ defaultTo,
119
121
  flip,
120
122
  flow,
121
123
  identity,
package/dist/utils.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { M as Maybe, R as Result, E as Equality, b as Ordering, T as Task } from './Task-DXsuurnc.mjs';
1
+ import { M as Maybe, R as Result, E as Equality, b as Ordering, T as Task } from './Task-fn1n--6H.mjs';
2
2
  import { NonEmptyList } from './types.mjs';
3
3
 
4
4
  /**
package/dist/utils.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { M as Maybe, R as Result, E as Equality, b as Ordering, T as Task } from './Task-zAY4kSVB.js';
1
+ import { M as Maybe, R as Result, E as Equality, b as Ordering, T as Task } from './Task-DIgwvoIb.js';
2
2
  import { NonEmptyList } from './types.js';
3
3
 
4
4
  /**
package/dist/utils.js CHANGED
@@ -85,6 +85,10 @@ var Result;
85
85
  Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
86
86
  Result2.toMaybe = (data) => (0, Result2.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
87
87
  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;
88
+ Result2.bindTo = (key) => (data) => (0, Result2.map)((a) => ({ [key]: a }))(data);
89
+ Result2.bind = (key, f) => (data) => (0, Result2.chain)(
90
+ (a) => (0, Result2.map)((b) => ({ ...a, [key]: b }))(f(a))
91
+ )(data);
88
92
  })(Result || (Result = {}));
89
93
 
90
94
  // src/Core/Maybe.ts
@@ -115,6 +119,10 @@ var Maybe;
115
119
  Maybe2.filter = (predicate) => (data) => (0, Maybe2.isSome)(data) ? predicate(data.value) ? data : (0, Maybe2.none)() : data;
116
120
  Maybe2.recover = (fallback) => (data) => (0, Maybe2.isSome)(data) ? data : fallback();
117
121
  Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
122
+ Maybe2.bindTo = (key) => (data) => (0, Maybe2.map)((a) => ({ [key]: a }))(data);
123
+ Maybe2.bind = (key, f) => (data) => (0, Maybe2.chain)(
124
+ (a) => (0, Maybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
125
+ )(data);
118
126
  })(Maybe || (Maybe = {}));
119
127
 
120
128
  // src/Types/Brand.ts
@@ -364,6 +372,10 @@ var Task;
364
372
  return { task, abort };
365
373
  };
366
374
  Task2.run = (signal) => (task) => Deferred.toPromise(task(signal));
375
+ Task2.bindTo = (key) => (data) => (0, Task2.map)((a) => ({ [key]: a }))(data);
376
+ Task2.bind = (key, f) => (data) => (0, Task2.chain)(
377
+ (a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
378
+ )(data);
367
379
  })(Task || (Task = {}));
368
380
 
369
381
  // src/Types/NonEmptyList.ts
package/dist/utils.mjs CHANGED
@@ -5,8 +5,8 @@ import {
5
5
  Rec,
6
6
  Str,
7
7
  Uniq
8
- } from "./chunk-IJFFWBKW.mjs";
9
- import "./chunk-DLBHVYII.mjs";
8
+ } from "./chunk-72BGUEQM.mjs";
9
+ import "./chunk-PUMSVZB4.mjs";
10
10
  import "./chunk-DBIC62UV.mjs";
11
11
  import "./chunk-VWVPHDZO.mjs";
12
12
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlozgachev/pipelined",
3
- "version": "0.35.0",
3
+ "version": "0.37.0",
4
4
  "description": "Opinionated functional abstractions for TypeScript",
5
5
  "license": "BSD-3-Clause",
6
6
  "homepage": "https://pipelined.lozgachev.dev",
@@ -18,7 +18,7 @@
18
18
  "types": "./dist/index.d.ts",
19
19
  "sideEffects": false,
20
20
  "engines": {
21
- "node": ">=22"
21
+ "node": ">=24"
22
22
  },
23
23
  "files": [
24
24
  "dist"
@@ -53,11 +53,16 @@
53
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
- "publish:npm": "pnpm build && npm publish --access public"
56
+ "publish:npm": "pnpm build && npm publish --access public",
57
+ "release:patch": "bumpp --patch -c -t -p",
58
+ "release:minor": "bumpp --minor -c -t -p",
59
+ "docs:dev": "pnpm --filter pipelined-docs dev",
60
+ "docs:build": "pnpm --filter pipelined-docs build"
57
61
  },
58
62
  "devDependencies": {
59
63
  "@types/node": "25.9.1",
60
64
  "@vitest/coverage-v8": "4.1.7",
65
+ "bumpp": "11.1.0",
61
66
  "dprint": "0.54.0",
62
67
  "fast-check": "4.8.0",
63
68
  "oxlint": "1.66.0",