@nlozgachev/pipelined 0.12.0 → 0.13.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.
Files changed (205) hide show
  1. package/LICENCE +28 -0
  2. package/README.md +1 -1
  3. package/{types/src/Types/NonEmptyList.d.ts → dist/NonEmptyList-BlGFjor5.d.mts} +4 -3
  4. package/dist/NonEmptyList-BlGFjor5.d.ts +30 -0
  5. package/dist/Task-BB8Wmc1J.d.ts +677 -0
  6. package/dist/Task-ChKyH0pF.d.mts +677 -0
  7. package/dist/chunk-DBIC62UV.mjs +6 -0
  8. package/dist/chunk-QPTGO5AS.mjs +150 -0
  9. package/dist/composition.d.mts +495 -0
  10. package/dist/composition.d.ts +495 -0
  11. package/dist/composition.js +188 -0
  12. package/dist/composition.mjs +135 -0
  13. package/dist/core.d.mts +2170 -0
  14. package/dist/core.d.ts +2170 -0
  15. package/dist/core.js +698 -0
  16. package/dist/core.mjs +517 -0
  17. package/dist/types.d.mts +54 -0
  18. package/{types/src/Types/Brand.d.ts → dist/types.d.ts} +6 -4
  19. package/dist/types.js +41 -0
  20. package/dist/types.mjs +14 -0
  21. package/dist/utils.d.mts +1285 -0
  22. package/dist/utils.d.ts +1285 -0
  23. package/dist/utils.js +722 -0
  24. package/dist/utils.mjs +553 -0
  25. package/package.json +63 -69
  26. package/esm/mod.js +0 -3
  27. package/esm/package.json +0 -3
  28. package/esm/src/Composition/compose.js +0 -3
  29. package/esm/src/Composition/converge.js +0 -3
  30. package/esm/src/Composition/curry.js +0 -42
  31. package/esm/src/Composition/flip.js +0 -20
  32. package/esm/src/Composition/flow.js +0 -8
  33. package/esm/src/Composition/fn.js +0 -85
  34. package/esm/src/Composition/index.js +0 -13
  35. package/esm/src/Composition/juxt.js +0 -3
  36. package/esm/src/Composition/memoize.js +0 -66
  37. package/esm/src/Composition/not.js +0 -25
  38. package/esm/src/Composition/on.js +0 -12
  39. package/esm/src/Composition/pipe.js +0 -3
  40. package/esm/src/Composition/tap.js +0 -33
  41. package/esm/src/Composition/uncurry.js +0 -32
  42. package/esm/src/Core/Deferred.js +0 -30
  43. package/esm/src/Core/InternalTypes.js +0 -1
  44. package/esm/src/Core/Lens.js +0 -98
  45. package/esm/src/Core/Logged.js +0 -111
  46. package/esm/src/Core/Option.js +0 -191
  47. package/esm/src/Core/Optional.js +0 -160
  48. package/esm/src/Core/Predicate.js +0 -133
  49. package/esm/src/Core/Reader.js +0 -134
  50. package/esm/src/Core/Refinement.js +0 -115
  51. package/esm/src/Core/RemoteData.js +0 -211
  52. package/esm/src/Core/Result.js +0 -170
  53. package/esm/src/Core/State.js +0 -181
  54. package/esm/src/Core/Task.js +0 -223
  55. package/esm/src/Core/TaskOption.js +0 -106
  56. package/esm/src/Core/TaskResult.js +0 -127
  57. package/esm/src/Core/TaskValidation.js +0 -128
  58. package/esm/src/Core/These.js +0 -245
  59. package/esm/src/Core/Tuple.js +0 -112
  60. package/esm/src/Core/Validation.js +0 -212
  61. package/esm/src/Core/index.js +0 -18
  62. package/esm/src/Types/Brand.js +0 -28
  63. package/esm/src/Types/NonEmptyList.js +0 -14
  64. package/esm/src/Types/index.js +0 -2
  65. package/esm/src/Utils/Arr.js +0 -570
  66. package/esm/src/Utils/Dict.js +0 -421
  67. package/esm/src/Utils/Num.js +0 -124
  68. package/esm/src/Utils/Rec.js +0 -241
  69. package/esm/src/Utils/Str.js +0 -134
  70. package/esm/src/Utils/Uniq.js +0 -265
  71. package/esm/src/Utils/index.js +0 -6
  72. package/script/mod.js +0 -19
  73. package/script/package.json +0 -3
  74. package/script/src/Composition/compose.js +0 -6
  75. package/script/src/Composition/converge.js +0 -6
  76. package/script/src/Composition/curry.js +0 -48
  77. package/script/src/Composition/flip.js +0 -24
  78. package/script/src/Composition/flow.js +0 -11
  79. package/script/src/Composition/fn.js +0 -98
  80. package/script/src/Composition/index.js +0 -29
  81. package/script/src/Composition/juxt.js +0 -6
  82. package/script/src/Composition/memoize.js +0 -71
  83. package/script/src/Composition/not.js +0 -29
  84. package/script/src/Composition/on.js +0 -16
  85. package/script/src/Composition/pipe.js +0 -6
  86. package/script/src/Composition/tap.js +0 -37
  87. package/script/src/Composition/uncurry.js +0 -38
  88. package/script/src/Core/Deferred.js +0 -33
  89. package/script/src/Core/InternalTypes.js +0 -2
  90. package/script/src/Core/Lens.js +0 -101
  91. package/script/src/Core/Logged.js +0 -114
  92. package/script/src/Core/Option.js +0 -194
  93. package/script/src/Core/Optional.js +0 -163
  94. package/script/src/Core/Predicate.js +0 -136
  95. package/script/src/Core/Reader.js +0 -137
  96. package/script/src/Core/Refinement.js +0 -118
  97. package/script/src/Core/RemoteData.js +0 -214
  98. package/script/src/Core/Result.js +0 -173
  99. package/script/src/Core/State.js +0 -184
  100. package/script/src/Core/Task.js +0 -226
  101. package/script/src/Core/TaskOption.js +0 -109
  102. package/script/src/Core/TaskResult.js +0 -130
  103. package/script/src/Core/TaskValidation.js +0 -131
  104. package/script/src/Core/These.js +0 -248
  105. package/script/src/Core/Tuple.js +0 -115
  106. package/script/src/Core/Validation.js +0 -215
  107. package/script/src/Core/index.js +0 -34
  108. package/script/src/Types/Brand.js +0 -31
  109. package/script/src/Types/NonEmptyList.js +0 -18
  110. package/script/src/Types/index.js +0 -18
  111. package/script/src/Utils/Arr.js +0 -573
  112. package/script/src/Utils/Dict.js +0 -424
  113. package/script/src/Utils/Num.js +0 -127
  114. package/script/src/Utils/Rec.js +0 -244
  115. package/script/src/Utils/Str.js +0 -137
  116. package/script/src/Utils/Uniq.js +0 -268
  117. package/script/src/Utils/index.js +0 -22
  118. package/types/mod.d.ts +0 -4
  119. package/types/mod.d.ts.map +0 -1
  120. package/types/src/Composition/compose.d.ts +0 -33
  121. package/types/src/Composition/compose.d.ts.map +0 -1
  122. package/types/src/Composition/converge.d.ts +0 -21
  123. package/types/src/Composition/converge.d.ts.map +0 -1
  124. package/types/src/Composition/curry.d.ts +0 -43
  125. package/types/src/Composition/curry.d.ts.map +0 -1
  126. package/types/src/Composition/flip.d.ts +0 -21
  127. package/types/src/Composition/flip.d.ts.map +0 -1
  128. package/types/src/Composition/flow.d.ts +0 -56
  129. package/types/src/Composition/flow.d.ts.map +0 -1
  130. package/types/src/Composition/fn.d.ts +0 -76
  131. package/types/src/Composition/fn.d.ts.map +0 -1
  132. package/types/src/Composition/index.d.ts +0 -14
  133. package/types/src/Composition/index.d.ts.map +0 -1
  134. package/types/src/Composition/juxt.d.ts +0 -18
  135. package/types/src/Composition/juxt.d.ts.map +0 -1
  136. package/types/src/Composition/memoize.d.ts +0 -46
  137. package/types/src/Composition/memoize.d.ts.map +0 -1
  138. package/types/src/Composition/not.d.ts +0 -26
  139. package/types/src/Composition/not.d.ts.map +0 -1
  140. package/types/src/Composition/on.d.ts +0 -13
  141. package/types/src/Composition/on.d.ts.map +0 -1
  142. package/types/src/Composition/pipe.d.ts +0 -56
  143. package/types/src/Composition/pipe.d.ts.map +0 -1
  144. package/types/src/Composition/tap.d.ts +0 -31
  145. package/types/src/Composition/tap.d.ts.map +0 -1
  146. package/types/src/Composition/uncurry.d.ts +0 -54
  147. package/types/src/Composition/uncurry.d.ts.map +0 -1
  148. package/types/src/Core/Deferred.d.ts +0 -49
  149. package/types/src/Core/Deferred.d.ts.map +0 -1
  150. package/types/src/Core/InternalTypes.d.ts +0 -23
  151. package/types/src/Core/InternalTypes.d.ts.map +0 -1
  152. package/types/src/Core/Lens.d.ts +0 -118
  153. package/types/src/Core/Lens.d.ts.map +0 -1
  154. package/types/src/Core/Logged.d.ts +0 -126
  155. package/types/src/Core/Logged.d.ts.map +0 -1
  156. package/types/src/Core/Option.d.ts +0 -209
  157. package/types/src/Core/Option.d.ts.map +0 -1
  158. package/types/src/Core/Optional.d.ts +0 -158
  159. package/types/src/Core/Optional.d.ts.map +0 -1
  160. package/types/src/Core/Predicate.d.ts +0 -161
  161. package/types/src/Core/Predicate.d.ts.map +0 -1
  162. package/types/src/Core/Reader.d.ts +0 -156
  163. package/types/src/Core/Reader.d.ts.map +0 -1
  164. package/types/src/Core/Refinement.d.ts +0 -138
  165. package/types/src/Core/Refinement.d.ts.map +0 -1
  166. package/types/src/Core/RemoteData.d.ts +0 -197
  167. package/types/src/Core/RemoteData.d.ts.map +0 -1
  168. package/types/src/Core/Result.d.ts +0 -182
  169. package/types/src/Core/Result.d.ts.map +0 -1
  170. package/types/src/Core/State.d.ts +0 -192
  171. package/types/src/Core/State.d.ts.map +0 -1
  172. package/types/src/Core/Task.d.ts +0 -219
  173. package/types/src/Core/Task.d.ts.map +0 -1
  174. package/types/src/Core/TaskOption.d.ts +0 -121
  175. package/types/src/Core/TaskOption.d.ts.map +0 -1
  176. package/types/src/Core/TaskResult.d.ts +0 -119
  177. package/types/src/Core/TaskResult.d.ts.map +0 -1
  178. package/types/src/Core/TaskValidation.d.ts +0 -144
  179. package/types/src/Core/TaskValidation.d.ts.map +0 -1
  180. package/types/src/Core/These.d.ts +0 -225
  181. package/types/src/Core/These.d.ts.map +0 -1
  182. package/types/src/Core/Tuple.d.ts +0 -129
  183. package/types/src/Core/Tuple.d.ts.map +0 -1
  184. package/types/src/Core/Validation.d.ts +0 -203
  185. package/types/src/Core/Validation.d.ts.map +0 -1
  186. package/types/src/Core/index.d.ts +0 -19
  187. package/types/src/Core/index.d.ts.map +0 -1
  188. package/types/src/Types/Brand.d.ts.map +0 -1
  189. package/types/src/Types/NonEmptyList.d.ts.map +0 -1
  190. package/types/src/Types/index.d.ts +0 -3
  191. package/types/src/Types/index.d.ts.map +0 -1
  192. package/types/src/Utils/Arr.d.ts +0 -403
  193. package/types/src/Utils/Arr.d.ts.map +0 -1
  194. package/types/src/Utils/Dict.d.ts +0 -310
  195. package/types/src/Utils/Dict.d.ts.map +0 -1
  196. package/types/src/Utils/Num.d.ts +0 -110
  197. package/types/src/Utils/Num.d.ts.map +0 -1
  198. package/types/src/Utils/Rec.d.ts +0 -159
  199. package/types/src/Utils/Rec.d.ts.map +0 -1
  200. package/types/src/Utils/Str.d.ts +0 -128
  201. package/types/src/Utils/Str.d.ts.map +0 -1
  202. package/types/src/Utils/Uniq.d.ts +0 -179
  203. package/types/src/Utils/Uniq.d.ts.map +0 -1
  204. package/types/src/Utils/index.d.ts +0 -7
  205. package/types/src/Utils/index.d.ts.map +0 -1
package/dist/utils.js ADDED
@@ -0,0 +1,722 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/Utils/index.ts
21
+ var Utils_exports = {};
22
+ __export(Utils_exports, {
23
+ Arr: () => Arr,
24
+ Dict: () => Dict,
25
+ Num: () => Num,
26
+ Rec: () => Rec,
27
+ Str: () => Str,
28
+ Uniq: () => Uniq
29
+ });
30
+ module.exports = __toCommonJS(Utils_exports);
31
+
32
+ // src/Core/Deferred.ts
33
+ var _store = /* @__PURE__ */ new WeakMap();
34
+ var Deferred;
35
+ ((Deferred2) => {
36
+ Deferred2.fromPromise = (p) => {
37
+ const d = { then: ((f) => p.then(f)) };
38
+ _store.set(d, p);
39
+ return d;
40
+ };
41
+ Deferred2.toPromise = (d) => _store.get(d) ?? new Promise((resolve) => d.then(resolve));
42
+ })(Deferred || (Deferred = {}));
43
+
44
+ // src/Core/Result.ts
45
+ var Result;
46
+ ((Result2) => {
47
+ Result2.ok = (value) => ({ kind: "Ok", value });
48
+ Result2.err = (error) => ({ kind: "Error", error });
49
+ Result2.isOk = (data) => data.kind === "Ok";
50
+ Result2.isErr = (data) => data.kind === "Error";
51
+ Result2.tryCatch = (f, onError) => {
52
+ try {
53
+ return (0, Result2.ok)(f());
54
+ } catch (e) {
55
+ return (0, Result2.err)(onError(e));
56
+ }
57
+ };
58
+ Result2.map = (f) => (data) => (0, Result2.isOk)(data) ? (0, Result2.ok)(f(data.value)) : data;
59
+ Result2.mapError = (f) => (data) => (0, Result2.isErr)(data) ? (0, Result2.err)(f(data.error)) : data;
60
+ Result2.chain = (f) => (data) => (0, Result2.isOk)(data) ? f(data.value) : data;
61
+ Result2.fold = (onErr, onOk) => (data) => (0, Result2.isOk)(data) ? onOk(data.value) : onErr(data.error);
62
+ Result2.match = (cases) => (data) => (0, Result2.isOk)(data) ? cases.ok(data.value) : cases.err(data.error);
63
+ Result2.getOrElse = (defaultValue) => (data) => (0, Result2.isOk)(data) ? data.value : defaultValue();
64
+ Result2.tap = (f) => (data) => {
65
+ if ((0, Result2.isOk)(data)) f(data.value);
66
+ return data;
67
+ };
68
+ Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
69
+ Result2.recoverUnless = (blockedErr, fallback) => (data) => (0, Result2.isErr)(data) && data.error !== blockedErr ? fallback() : data;
70
+ Result2.toOption = (data) => (0, Result2.isOk)(data) ? Option.some(data.value) : Option.none();
71
+ 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;
72
+ })(Result || (Result = {}));
73
+
74
+ // src/Core/Option.ts
75
+ var _none = { kind: "None" };
76
+ var Option;
77
+ ((Option2) => {
78
+ Option2.some = (value) => ({ kind: "Some", value });
79
+ Option2.isSome = (data) => data.kind === "Some";
80
+ Option2.none = () => _none;
81
+ Option2.isNone = (data) => data.kind === "None";
82
+ Option2.fromNullable = (value) => value === null || value === void 0 ? (0, Option2.none)() : (0, Option2.some)(value);
83
+ Option2.toNullable = (data) => (0, Option2.isSome)(data) ? data.value : null;
84
+ Option2.toUndefined = (data) => (0, Option2.isSome)(data) ? data.value : void 0;
85
+ Option2.fromUndefined = (value) => value === void 0 ? (0, Option2.none)() : (0, Option2.some)(value);
86
+ Option2.toResult = (onNone) => (data) => (0, Option2.isSome)(data) ? Result.ok(data.value) : Result.err(onNone());
87
+ Option2.fromResult = (data) => Result.isOk(data) ? (0, Option2.some)(data.value) : (0, Option2.none)();
88
+ Option2.map = (f) => (data) => (0, Option2.isSome)(data) ? (0, Option2.some)(f(data.value)) : data;
89
+ Option2.chain = (f) => (data) => (0, Option2.isSome)(data) ? f(data.value) : data;
90
+ Option2.fold = (onNone, onSome) => (data) => (0, Option2.isSome)(data) ? onSome(data.value) : onNone();
91
+ Option2.match = (cases) => (data) => (0, Option2.isSome)(data) ? cases.some(data.value) : cases.none();
92
+ Option2.getOrElse = (defaultValue) => (data) => (0, Option2.isSome)(data) ? data.value : defaultValue();
93
+ Option2.tap = (f) => (data) => {
94
+ if ((0, Option2.isSome)(data)) f(data.value);
95
+ return data;
96
+ };
97
+ Option2.filter = (predicate) => (data) => (0, Option2.isSome)(data) ? predicate(data.value) ? data : (0, Option2.none)() : data;
98
+ Option2.recover = (fallback) => (data) => (0, Option2.isSome)(data) ? data : fallback();
99
+ Option2.ap = (arg) => (data) => (0, Option2.isSome)(data) && (0, Option2.isSome)(arg) ? (0, Option2.some)(data.value(arg.value)) : (0, Option2.none)();
100
+ })(Option || (Option = {}));
101
+
102
+ // src/Core/Task.ts
103
+ var toPromise = (task) => Deferred.toPromise(task());
104
+ var Task;
105
+ ((Task2) => {
106
+ Task2.resolve = (value) => () => Deferred.fromPromise(Promise.resolve(value));
107
+ Task2.from = (f) => () => Deferred.fromPromise(f());
108
+ Task2.map = (f) => (data) => (0, Task2.from)(() => toPromise(data).then(f));
109
+ Task2.chain = (f) => (data) => (0, Task2.from)(() => toPromise(data).then((a) => toPromise(f(a))));
110
+ Task2.ap = (arg) => (data) => (0, Task2.from)(
111
+ () => Promise.all([
112
+ toPromise(data),
113
+ toPromise(arg)
114
+ ]).then(([f, a]) => f(a))
115
+ );
116
+ Task2.tap = (f) => (data) => (0, Task2.from)(
117
+ () => toPromise(data).then((a) => {
118
+ f(a);
119
+ return a;
120
+ })
121
+ );
122
+ Task2.all = (tasks) => (0, Task2.from)(
123
+ () => Promise.all(tasks.map((t) => toPromise(t)))
124
+ );
125
+ Task2.delay = (ms) => (data) => (0, Task2.from)(
126
+ () => new Promise(
127
+ (resolve2) => setTimeout(
128
+ () => toPromise(data).then(resolve2),
129
+ ms
130
+ )
131
+ )
132
+ );
133
+ Task2.repeat = (options) => (task) => (0, Task2.from)(() => {
134
+ const { times, delay: ms } = options;
135
+ if (times <= 0) return Promise.resolve([]);
136
+ const results = [];
137
+ const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
138
+ const run = (left) => toPromise(task).then((a) => {
139
+ results.push(a);
140
+ if (left <= 1) return results;
141
+ return wait().then(() => run(left - 1));
142
+ });
143
+ return run(times);
144
+ });
145
+ Task2.repeatUntil = (options) => (task) => (0, Task2.from)(() => {
146
+ const { when: predicate, delay: ms } = options;
147
+ const wait = () => ms !== void 0 && ms > 0 ? new Promise((r) => setTimeout(r, ms)) : Promise.resolve();
148
+ const run = () => toPromise(task).then((a) => {
149
+ if (predicate(a)) return a;
150
+ return wait().then(run);
151
+ });
152
+ return run();
153
+ });
154
+ Task2.race = (tasks) => (0, Task2.from)(() => Promise.race(tasks.map(toPromise)));
155
+ Task2.sequential = (tasks) => (0, Task2.from)(async () => {
156
+ const results = [];
157
+ for (const task of tasks) {
158
+ results.push(await toPromise(task));
159
+ }
160
+ return results;
161
+ });
162
+ Task2.timeout = (ms, onTimeout) => (task) => (0, Task2.from)(() => {
163
+ let timerId;
164
+ return Promise.race([
165
+ toPromise(task).then((a) => {
166
+ clearTimeout(timerId);
167
+ return Result.ok(a);
168
+ }),
169
+ new Promise((resolve2) => {
170
+ timerId = setTimeout(() => resolve2(Result.err(onTimeout())), ms);
171
+ })
172
+ ]);
173
+ });
174
+ })(Task || (Task = {}));
175
+
176
+ // src/Types/NonEmptyList.ts
177
+ var isNonEmptyList = (list) => list.length > 0;
178
+
179
+ // src/Utils/Arr.ts
180
+ var Arr;
181
+ ((Arr2) => {
182
+ Arr2.head = (data) => data.length > 0 ? Option.some(data[0]) : Option.none();
183
+ Arr2.last = (data) => data.length > 0 ? Option.some(data[data.length - 1]) : Option.none();
184
+ Arr2.tail = (data) => data.length > 0 ? Option.some(data.slice(1)) : Option.none();
185
+ Arr2.init = (data) => data.length > 0 ? Option.some(data.slice(0, -1)) : Option.none();
186
+ Arr2.findFirst = (predicate) => (data) => {
187
+ const idx = data.findIndex(predicate);
188
+ return idx >= 0 ? Option.some(data[idx]) : Option.none();
189
+ };
190
+ Arr2.findLast = (predicate) => (data) => {
191
+ for (let i = data.length - 1; i >= 0; i--) {
192
+ if (predicate(data[i])) return Option.some(data[i]);
193
+ }
194
+ return Option.none();
195
+ };
196
+ Arr2.findIndex = (predicate) => (data) => {
197
+ const idx = data.findIndex(predicate);
198
+ return idx >= 0 ? Option.some(idx) : Option.none();
199
+ };
200
+ Arr2.map = (f) => (data) => {
201
+ const n = data.length;
202
+ const result = new Array(n);
203
+ for (let i = 0; i < n; i++) result[i] = f(data[i]);
204
+ return result;
205
+ };
206
+ Arr2.filter = (predicate) => (data) => {
207
+ const n = data.length;
208
+ const result = [];
209
+ for (let i = 0; i < n; i++) {
210
+ if (predicate(data[i])) result.push(data[i]);
211
+ }
212
+ return result;
213
+ };
214
+ Arr2.partition = (predicate) => (data) => {
215
+ const pass = [];
216
+ const fail = [];
217
+ for (const a of data) {
218
+ (predicate(a) ? pass : fail).push(a);
219
+ }
220
+ return [pass, fail];
221
+ };
222
+ Arr2.groupBy = (f) => (data) => {
223
+ const result = {};
224
+ for (const a of data) {
225
+ const key = f(a);
226
+ if (!result[key]) result[key] = [];
227
+ result[key].push(a);
228
+ }
229
+ return result;
230
+ };
231
+ Arr2.uniq = (data) => [
232
+ ...new Set(data)
233
+ ];
234
+ Arr2.uniqBy = (f) => (data) => {
235
+ const seen = /* @__PURE__ */ new Set();
236
+ const result = [];
237
+ for (const a of data) {
238
+ const key = f(a);
239
+ if (!seen.has(key)) {
240
+ seen.add(key);
241
+ result.push(a);
242
+ }
243
+ }
244
+ return result;
245
+ };
246
+ Arr2.sortBy = (compare) => (data) => [...data].sort(compare);
247
+ Arr2.zip = (other) => (data) => {
248
+ const len = Math.min(data.length, other.length);
249
+ const result = new Array(len);
250
+ for (let i = 0; i < len; i++) {
251
+ result[i] = [data[i], other[i]];
252
+ }
253
+ return result;
254
+ };
255
+ Arr2.zipWith = (f) => (other) => (data) => {
256
+ const len = Math.min(data.length, other.length);
257
+ const result = new Array(len);
258
+ for (let i = 0; i < len; i++) {
259
+ result[i] = f(data[i], other[i]);
260
+ }
261
+ return result;
262
+ };
263
+ Arr2.intersperse = (sep) => (data) => {
264
+ if (data.length <= 1) return data;
265
+ const result = [data[0]];
266
+ for (let i = 1; i < data.length; i++) {
267
+ result.push(sep, data[i]);
268
+ }
269
+ return result;
270
+ };
271
+ Arr2.chunksOf = (n) => (data) => {
272
+ if (n <= 0) return [];
273
+ const result = [];
274
+ for (let i = 0; i < data.length; i += n) {
275
+ result.push(data.slice(i, i + n));
276
+ }
277
+ return result;
278
+ };
279
+ Arr2.flatten = (data) => [].concat(...data);
280
+ Arr2.flatMap = (f) => (data) => {
281
+ const n = data.length;
282
+ const result = [];
283
+ for (let i = 0; i < n; i++) {
284
+ const chunk = f(data[i]);
285
+ const m = chunk.length;
286
+ for (let j = 0; j < m; j++) result.push(chunk[j]);
287
+ }
288
+ return result;
289
+ };
290
+ Arr2.reduce = (initial, f) => (data) => data.reduce(f, initial);
291
+ Arr2.traverse = (f) => (data) => {
292
+ const n = data.length;
293
+ const result = new Array(n);
294
+ for (let i = 0; i < n; i++) {
295
+ const mapped = f(data[i]);
296
+ if (mapped.kind === "None") return Option.none();
297
+ result[i] = mapped.value;
298
+ }
299
+ return Option.some(result);
300
+ };
301
+ Arr2.traverseResult = (f) => (data) => {
302
+ const n = data.length;
303
+ const result = new Array(n);
304
+ for (let i = 0; i < n; i++) {
305
+ const mapped = f(data[i]);
306
+ if (mapped.kind === "Error") return mapped;
307
+ result[i] = mapped.value;
308
+ }
309
+ return Result.ok(result);
310
+ };
311
+ Arr2.traverseTask = (f) => (data) => Task.from(() => Promise.all(data.map((a) => Deferred.toPromise(f(a)()))));
312
+ Arr2.sequence = (data) => (0, Arr2.traverse)((a) => a)(data);
313
+ Arr2.sequenceResult = (data) => (0, Arr2.traverseResult)((a) => a)(data);
314
+ Arr2.sequenceTask = (data) => (0, Arr2.traverseTask)((a) => a)(data);
315
+ Arr2.traverseTaskResult = (f) => (data) => Task.from(async () => {
316
+ const result = [];
317
+ for (const a of data) {
318
+ const r = await Deferred.toPromise(f(a)());
319
+ if (Result.isErr(r)) return r;
320
+ result.push(r.value);
321
+ }
322
+ return Result.ok(result);
323
+ });
324
+ Arr2.sequenceTaskResult = (data) => (0, Arr2.traverseTaskResult)((a) => a)(data);
325
+ Arr2.isNonEmpty = (data) => isNonEmptyList(data);
326
+ Arr2.size = (data) => data.length;
327
+ Arr2.some = (predicate) => (data) => {
328
+ const n = data.length;
329
+ for (let i = 0; i < n; i++) if (predicate(data[i])) return true;
330
+ return false;
331
+ };
332
+ Arr2.every = (predicate) => (data) => {
333
+ const n = data.length;
334
+ for (let i = 0; i < n; i++) if (!predicate(data[i])) return false;
335
+ return true;
336
+ };
337
+ Arr2.reverse = (data) => [...data].reverse();
338
+ Arr2.take = (n) => (data) => n <= 0 ? [] : data.slice(0, n);
339
+ Arr2.drop = (n) => (data) => data.slice(n);
340
+ Arr2.takeWhile = (predicate) => (data) => {
341
+ const result = [];
342
+ for (const a of data) {
343
+ if (!predicate(a)) break;
344
+ result.push(a);
345
+ }
346
+ return result;
347
+ };
348
+ Arr2.dropWhile = (predicate) => (data) => {
349
+ let i = 0;
350
+ while (i < data.length && predicate(data[i])) i++;
351
+ return data.slice(i);
352
+ };
353
+ Arr2.scan = (initial, f) => (data) => {
354
+ const n = data.length;
355
+ const result = new Array(n);
356
+ let acc = initial;
357
+ for (let i = 0; i < n; i++) {
358
+ acc = f(acc, data[i]);
359
+ result[i] = acc;
360
+ }
361
+ return result;
362
+ };
363
+ Arr2.splitAt = (index) => (data) => {
364
+ const i = Math.max(0, index);
365
+ return [data.slice(0, i), data.slice(i)];
366
+ };
367
+ })(Arr || (Arr = {}));
368
+
369
+ // src/Utils/Dict.ts
370
+ var Dict;
371
+ ((Dict2) => {
372
+ Dict2.empty = () => new globalThis.Map();
373
+ Dict2.singleton = (key, value) => new globalThis.Map([[key, value]]);
374
+ Dict2.fromEntries = (entries2) => new globalThis.Map(entries2);
375
+ Dict2.fromRecord = (rec) => new globalThis.Map(Object.entries(rec));
376
+ Dict2.groupBy = (keyFn) => (items) => {
377
+ const result = new globalThis.Map();
378
+ for (const item of items) {
379
+ const key = keyFn(item);
380
+ const arr = result.get(key);
381
+ if (arr !== void 0) arr.push(item);
382
+ else result.set(key, [item]);
383
+ }
384
+ return result;
385
+ };
386
+ Dict2.has = (key) => (m) => m.has(key);
387
+ Dict2.lookup = (key) => (m) => m.has(key) ? Option.some(m.get(key)) : Option.none();
388
+ Dict2.size = (m) => m.size;
389
+ Dict2.isEmpty = (m) => m.size === 0;
390
+ Dict2.keys = (m) => [...m.keys()];
391
+ Dict2.values = (m) => [...m.values()];
392
+ Dict2.entries = (m) => [...m.entries()];
393
+ Dict2.insert = (key, value) => (m) => {
394
+ const result = new globalThis.Map(m);
395
+ result.set(key, value);
396
+ return result;
397
+ };
398
+ Dict2.remove = (key) => (m) => {
399
+ if (!m.has(key)) return m;
400
+ const result = new globalThis.Map(m);
401
+ result.delete(key);
402
+ return result;
403
+ };
404
+ Dict2.upsert = (key, f) => (m) => {
405
+ const result = new globalThis.Map(m);
406
+ result.set(key, f((0, Dict2.lookup)(key)(m)));
407
+ return result;
408
+ };
409
+ Dict2.map = (f) => (m) => {
410
+ const result = new globalThis.Map();
411
+ for (const [k, v] of m) {
412
+ result.set(k, f(v));
413
+ }
414
+ return result;
415
+ };
416
+ Dict2.mapWithKey = (f) => (m) => {
417
+ const result = new globalThis.Map();
418
+ for (const [k, v] of m) {
419
+ result.set(k, f(k, v));
420
+ }
421
+ return result;
422
+ };
423
+ Dict2.filter = (predicate) => (m) => {
424
+ const result = new globalThis.Map();
425
+ for (const [k, v] of m) {
426
+ if (predicate(v)) result.set(k, v);
427
+ }
428
+ return result;
429
+ };
430
+ Dict2.filterWithKey = (predicate) => (m) => {
431
+ const result = new globalThis.Map();
432
+ for (const [k, v] of m) {
433
+ if (predicate(k, v)) result.set(k, v);
434
+ }
435
+ return result;
436
+ };
437
+ Dict2.compact = (m) => {
438
+ const result = new globalThis.Map();
439
+ for (const [k, v] of m) {
440
+ if (v.kind === "Some") result.set(k, v.value);
441
+ }
442
+ return result;
443
+ };
444
+ Dict2.union = (other) => (m) => {
445
+ const result = new globalThis.Map(m);
446
+ for (const [k, v] of other) {
447
+ result.set(k, v);
448
+ }
449
+ return result;
450
+ };
451
+ Dict2.intersection = (other) => (m) => {
452
+ const result = new globalThis.Map();
453
+ for (const [k, v] of m) {
454
+ if (other.has(k)) result.set(k, v);
455
+ }
456
+ return result;
457
+ };
458
+ Dict2.difference = (other) => (m) => {
459
+ const result = new globalThis.Map();
460
+ for (const [k, v] of m) {
461
+ if (!other.has(k)) result.set(k, v);
462
+ }
463
+ return result;
464
+ };
465
+ Dict2.reduce = (init, f) => (m) => {
466
+ let acc = init;
467
+ for (const v of m.values()) {
468
+ acc = f(acc, v);
469
+ }
470
+ return acc;
471
+ };
472
+ Dict2.reduceWithKey = (init, f) => (m) => {
473
+ let acc = init;
474
+ for (const [k, v] of m) {
475
+ acc = f(acc, v, k);
476
+ }
477
+ return acc;
478
+ };
479
+ Dict2.toRecord = (m) => Object.fromEntries(m);
480
+ })(Dict || (Dict = {}));
481
+
482
+ // src/Utils/Num.ts
483
+ var Num;
484
+ ((Num2) => {
485
+ Num2.range = (from, to, step = 1) => {
486
+ if (step <= 0 || from > to) return [];
487
+ const count = Math.floor((to - from) / step) + 1;
488
+ const result = new Array(count);
489
+ for (let i = 0; i < count; i++) {
490
+ result[i] = from + i * step;
491
+ }
492
+ return result;
493
+ };
494
+ Num2.clamp = (min, max) => (n) => Math.min(Math.max(n, min), max);
495
+ Num2.between = (min, max) => (n) => n >= min && n <= max;
496
+ Num2.parse = (s) => {
497
+ if (s.trim() === "") return Option.none();
498
+ const n = Number(s);
499
+ return isNaN(n) ? Option.none() : Option.some(n);
500
+ };
501
+ Num2.add = (b) => (a) => a + b;
502
+ Num2.subtract = (b) => (a) => a - b;
503
+ Num2.multiply = (b) => (a) => a * b;
504
+ Num2.divide = (b) => (a) => a / b;
505
+ })(Num || (Num = {}));
506
+
507
+ // src/Utils/Rec.ts
508
+ var Rec;
509
+ ((Rec2) => {
510
+ Rec2.map = (f) => (data) => {
511
+ const keys2 = Object.keys(data);
512
+ const vals = Object.values(data);
513
+ const result = {};
514
+ for (let i = 0; i < keys2.length; i++) {
515
+ result[keys2[i]] = f(vals[i]);
516
+ }
517
+ return result;
518
+ };
519
+ Rec2.mapWithKey = (f) => (data) => {
520
+ const keys2 = Object.keys(data);
521
+ const vals = Object.values(data);
522
+ const result = {};
523
+ for (let i = 0; i < keys2.length; i++) {
524
+ result[keys2[i]] = f(keys2[i], vals[i]);
525
+ }
526
+ return result;
527
+ };
528
+ Rec2.filter = (predicate) => (data) => {
529
+ const result = {};
530
+ for (const [k, v] of Object.entries(data)) {
531
+ if (predicate(v)) result[k] = v;
532
+ }
533
+ return result;
534
+ };
535
+ Rec2.filterWithKey = (predicate) => (data) => {
536
+ const result = {};
537
+ for (const [k, v] of Object.entries(data)) {
538
+ if (predicate(k, v)) result[k] = v;
539
+ }
540
+ return result;
541
+ };
542
+ Rec2.lookup = (key) => (data) => Object.hasOwn(data, key) ? Option.some(data[key]) : Option.none();
543
+ Rec2.keys = (data) => Object.keys(data);
544
+ Rec2.values = (data) => Object.values(data);
545
+ Rec2.entries = (data) => Object.entries(data);
546
+ Rec2.fromEntries = (data) => Object.fromEntries(data);
547
+ Rec2.groupBy = (keyFn) => (items) => {
548
+ const result = {};
549
+ for (const item of items) {
550
+ const key = keyFn(item);
551
+ if (key in result) result[key].push(item);
552
+ else result[key] = [item];
553
+ }
554
+ return result;
555
+ };
556
+ Rec2.pick = (...pickedKeys) => (data) => {
557
+ const result = {};
558
+ for (const key of pickedKeys) {
559
+ if (Object.hasOwn(data, key)) {
560
+ result[key] = data[key];
561
+ }
562
+ }
563
+ return result;
564
+ };
565
+ Rec2.omit = (...omittedKeys) => (data) => {
566
+ const omitSet = new Set(omittedKeys);
567
+ const result = {};
568
+ for (const key of Object.keys(data)) {
569
+ if (!omitSet.has(key)) {
570
+ result[key] = data[key];
571
+ }
572
+ }
573
+ return result;
574
+ };
575
+ Rec2.merge = (other) => (data) => ({
576
+ ...data,
577
+ ...other
578
+ });
579
+ Rec2.isEmpty = (data) => Object.keys(data).length === 0;
580
+ Rec2.size = (data) => Object.keys(data).length;
581
+ Rec2.mapKeys = (f) => (data) => {
582
+ const result = {};
583
+ for (const [k, v] of Object.entries(data)) {
584
+ result[f(k)] = v;
585
+ }
586
+ return result;
587
+ };
588
+ Rec2.compact = (data) => {
589
+ const result = {};
590
+ for (const [k, v] of Object.entries(data)) {
591
+ if (v.kind === "Some") result[k] = v.value;
592
+ }
593
+ return result;
594
+ };
595
+ })(Rec || (Rec = {}));
596
+
597
+ // src/Utils/Str.ts
598
+ var Str;
599
+ ((Str2) => {
600
+ Str2.split = (separator) => (s) => s.split(separator);
601
+ Str2.trim = (s) => s.trim();
602
+ Str2.includes = (substring) => (s) => s.includes(substring);
603
+ Str2.startsWith = (prefix) => (s) => s.startsWith(prefix);
604
+ Str2.endsWith = (suffix) => (s) => s.endsWith(suffix);
605
+ Str2.toUpperCase = (s) => s.toUpperCase();
606
+ Str2.toLowerCase = (s) => s.toLowerCase();
607
+ Str2.lines = (s) => s.split(/\r?\n|\r/);
608
+ Str2.words = (s) => s.trim().split(/\s+/).filter(Boolean);
609
+ Str2.parse = {
610
+ /**
611
+ * Parses a string as an integer (base 10). Returns `None` if the result is `NaN`.
612
+ *
613
+ * @example
614
+ * ```ts
615
+ * Str.parse.int("42"); // Some(42)
616
+ * Str.parse.int("3.7"); // Some(3)
617
+ * Str.parse.int("abc"); // None
618
+ * ```
619
+ */
620
+ int: (s) => {
621
+ const n = parseInt(s, 10);
622
+ return isNaN(n) ? Option.none() : Option.some(n);
623
+ },
624
+ /**
625
+ * Parses a string as a floating-point number. Returns `None` if the result is `NaN`.
626
+ *
627
+ * @example
628
+ * ```ts
629
+ * Str.parse.float("3.14"); // Some(3.14)
630
+ * Str.parse.float("42"); // Some(42)
631
+ * Str.parse.float("abc"); // None
632
+ * ```
633
+ */
634
+ float: (s) => {
635
+ const n = parseFloat(s);
636
+ return isNaN(n) ? Option.none() : Option.some(n);
637
+ }
638
+ };
639
+ })(Str || (Str = {}));
640
+
641
+ // src/Utils/Uniq.ts
642
+ var Uniq;
643
+ ((Uniq2) => {
644
+ Uniq2.empty = () => new globalThis.Set();
645
+ Uniq2.singleton = (item) => new globalThis.Set([item]);
646
+ Uniq2.fromArray = (arr) => new globalThis.Set(arr);
647
+ Uniq2.has = (item) => (s) => s.has(item);
648
+ Uniq2.size = (s) => s.size;
649
+ Uniq2.isEmpty = (s) => s.size === 0;
650
+ Uniq2.isSubsetOf = (other) => (s) => {
651
+ const set = s;
652
+ if (typeof set.isSubsetOf === "function") return set.isSubsetOf(other);
653
+ for (const item of s) {
654
+ if (!other.has(item)) return false;
655
+ }
656
+ return true;
657
+ };
658
+ Uniq2.insert = (item) => (s) => {
659
+ if (s.has(item)) return s;
660
+ const result = new globalThis.Set(s);
661
+ result.add(item);
662
+ return result;
663
+ };
664
+ Uniq2.remove = (item) => (s) => {
665
+ if (!s.has(item)) return s;
666
+ const result = new globalThis.Set(s);
667
+ result.delete(item);
668
+ return result;
669
+ };
670
+ Uniq2.map = (f) => (s) => {
671
+ const result = new globalThis.Set();
672
+ for (const item of s) {
673
+ result.add(f(item));
674
+ }
675
+ return result;
676
+ };
677
+ Uniq2.filter = (predicate) => (s) => {
678
+ const result = new globalThis.Set();
679
+ for (const item of s) {
680
+ if (predicate(item)) result.add(item);
681
+ }
682
+ return result;
683
+ };
684
+ Uniq2.union = (other) => (s) => {
685
+ const set = s;
686
+ if (typeof set.union === "function") return set.union(other);
687
+ const result = new globalThis.Set(s);
688
+ for (const item of other) result.add(item);
689
+ return result;
690
+ };
691
+ Uniq2.intersection = (other) => (s) => {
692
+ const set = s;
693
+ if (typeof set.intersection === "function") return set.intersection(other);
694
+ const result = new globalThis.Set();
695
+ for (const item of s) if (other.has(item)) result.add(item);
696
+ return result;
697
+ };
698
+ Uniq2.difference = (other) => (s) => {
699
+ const set = s;
700
+ if (typeof set.difference === "function") return set.difference(other);
701
+ const result = new globalThis.Set();
702
+ for (const item of s) if (!other.has(item)) result.add(item);
703
+ return result;
704
+ };
705
+ Uniq2.reduce = (init, f) => (s) => {
706
+ let acc = init;
707
+ for (const item of s) {
708
+ acc = f(acc, item);
709
+ }
710
+ return acc;
711
+ };
712
+ Uniq2.toArray = (s) => [...s];
713
+ })(Uniq || (Uniq = {}));
714
+ // Annotate the CommonJS export names for ESM import in node:
715
+ 0 && (module.exports = {
716
+ Arr,
717
+ Dict,
718
+ Num,
719
+ Rec,
720
+ Str,
721
+ Uniq
722
+ });