@nlozgachev/pipelined 0.12.0 → 0.14.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 (213) 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-Bd3gXPRQ.d.mts +677 -0
  6. package/dist/Task-BjAkkD6t.d.ts +677 -0
  7. package/dist/chunk-4TXC322E.mjs +136 -0
  8. package/dist/chunk-BYWKZLHM.mjs +10 -0
  9. package/dist/chunk-DBIC62UV.mjs +6 -0
  10. package/dist/chunk-FAZN3IWZ.mjs +554 -0
  11. package/dist/chunk-QPTGO5AS.mjs +150 -0
  12. package/dist/chunk-UV2HMF2A.mjs +514 -0
  13. package/dist/composition.d.mts +495 -0
  14. package/dist/composition.d.ts +495 -0
  15. package/dist/composition.js +188 -0
  16. package/dist/composition.mjs +58 -0
  17. package/dist/core.d.mts +2170 -0
  18. package/dist/core.d.ts +2170 -0
  19. package/dist/core.js +698 -0
  20. package/dist/core.mjs +42 -0
  21. package/dist/index.d.mts +6 -0
  22. package/dist/index.d.ts +6 -0
  23. package/dist/index.js +1421 -0
  24. package/dist/index.mjs +120 -0
  25. package/dist/types.d.mts +54 -0
  26. package/{types/src/Types/Brand.d.ts → dist/types.d.ts} +6 -4
  27. package/dist/types.js +41 -0
  28. package/dist/types.mjs +10 -0
  29. package/dist/utils.d.mts +1285 -0
  30. package/dist/utils.d.ts +1285 -0
  31. package/dist/utils.js +722 -0
  32. package/dist/utils.mjs +18 -0
  33. package/package.json +64 -69
  34. package/esm/mod.js +0 -3
  35. package/esm/package.json +0 -3
  36. package/esm/src/Composition/compose.js +0 -3
  37. package/esm/src/Composition/converge.js +0 -3
  38. package/esm/src/Composition/curry.js +0 -42
  39. package/esm/src/Composition/flip.js +0 -20
  40. package/esm/src/Composition/flow.js +0 -8
  41. package/esm/src/Composition/fn.js +0 -85
  42. package/esm/src/Composition/index.js +0 -13
  43. package/esm/src/Composition/juxt.js +0 -3
  44. package/esm/src/Composition/memoize.js +0 -66
  45. package/esm/src/Composition/not.js +0 -25
  46. package/esm/src/Composition/on.js +0 -12
  47. package/esm/src/Composition/pipe.js +0 -3
  48. package/esm/src/Composition/tap.js +0 -33
  49. package/esm/src/Composition/uncurry.js +0 -32
  50. package/esm/src/Core/Deferred.js +0 -30
  51. package/esm/src/Core/InternalTypes.js +0 -1
  52. package/esm/src/Core/Lens.js +0 -98
  53. package/esm/src/Core/Logged.js +0 -111
  54. package/esm/src/Core/Option.js +0 -191
  55. package/esm/src/Core/Optional.js +0 -160
  56. package/esm/src/Core/Predicate.js +0 -133
  57. package/esm/src/Core/Reader.js +0 -134
  58. package/esm/src/Core/Refinement.js +0 -115
  59. package/esm/src/Core/RemoteData.js +0 -211
  60. package/esm/src/Core/Result.js +0 -170
  61. package/esm/src/Core/State.js +0 -181
  62. package/esm/src/Core/Task.js +0 -223
  63. package/esm/src/Core/TaskOption.js +0 -106
  64. package/esm/src/Core/TaskResult.js +0 -127
  65. package/esm/src/Core/TaskValidation.js +0 -128
  66. package/esm/src/Core/These.js +0 -245
  67. package/esm/src/Core/Tuple.js +0 -112
  68. package/esm/src/Core/Validation.js +0 -212
  69. package/esm/src/Core/index.js +0 -18
  70. package/esm/src/Types/Brand.js +0 -28
  71. package/esm/src/Types/NonEmptyList.js +0 -14
  72. package/esm/src/Types/index.js +0 -2
  73. package/esm/src/Utils/Arr.js +0 -570
  74. package/esm/src/Utils/Dict.js +0 -421
  75. package/esm/src/Utils/Num.js +0 -124
  76. package/esm/src/Utils/Rec.js +0 -241
  77. package/esm/src/Utils/Str.js +0 -134
  78. package/esm/src/Utils/Uniq.js +0 -265
  79. package/esm/src/Utils/index.js +0 -6
  80. package/script/mod.js +0 -19
  81. package/script/package.json +0 -3
  82. package/script/src/Composition/compose.js +0 -6
  83. package/script/src/Composition/converge.js +0 -6
  84. package/script/src/Composition/curry.js +0 -48
  85. package/script/src/Composition/flip.js +0 -24
  86. package/script/src/Composition/flow.js +0 -11
  87. package/script/src/Composition/fn.js +0 -98
  88. package/script/src/Composition/index.js +0 -29
  89. package/script/src/Composition/juxt.js +0 -6
  90. package/script/src/Composition/memoize.js +0 -71
  91. package/script/src/Composition/not.js +0 -29
  92. package/script/src/Composition/on.js +0 -16
  93. package/script/src/Composition/pipe.js +0 -6
  94. package/script/src/Composition/tap.js +0 -37
  95. package/script/src/Composition/uncurry.js +0 -38
  96. package/script/src/Core/Deferred.js +0 -33
  97. package/script/src/Core/InternalTypes.js +0 -2
  98. package/script/src/Core/Lens.js +0 -101
  99. package/script/src/Core/Logged.js +0 -114
  100. package/script/src/Core/Option.js +0 -194
  101. package/script/src/Core/Optional.js +0 -163
  102. package/script/src/Core/Predicate.js +0 -136
  103. package/script/src/Core/Reader.js +0 -137
  104. package/script/src/Core/Refinement.js +0 -118
  105. package/script/src/Core/RemoteData.js +0 -214
  106. package/script/src/Core/Result.js +0 -173
  107. package/script/src/Core/State.js +0 -184
  108. package/script/src/Core/Task.js +0 -226
  109. package/script/src/Core/TaskOption.js +0 -109
  110. package/script/src/Core/TaskResult.js +0 -130
  111. package/script/src/Core/TaskValidation.js +0 -131
  112. package/script/src/Core/These.js +0 -248
  113. package/script/src/Core/Tuple.js +0 -115
  114. package/script/src/Core/Validation.js +0 -215
  115. package/script/src/Core/index.js +0 -34
  116. package/script/src/Types/Brand.js +0 -31
  117. package/script/src/Types/NonEmptyList.js +0 -18
  118. package/script/src/Types/index.js +0 -18
  119. package/script/src/Utils/Arr.js +0 -573
  120. package/script/src/Utils/Dict.js +0 -424
  121. package/script/src/Utils/Num.js +0 -127
  122. package/script/src/Utils/Rec.js +0 -244
  123. package/script/src/Utils/Str.js +0 -137
  124. package/script/src/Utils/Uniq.js +0 -268
  125. package/script/src/Utils/index.js +0 -22
  126. package/types/mod.d.ts +0 -4
  127. package/types/mod.d.ts.map +0 -1
  128. package/types/src/Composition/compose.d.ts +0 -33
  129. package/types/src/Composition/compose.d.ts.map +0 -1
  130. package/types/src/Composition/converge.d.ts +0 -21
  131. package/types/src/Composition/converge.d.ts.map +0 -1
  132. package/types/src/Composition/curry.d.ts +0 -43
  133. package/types/src/Composition/curry.d.ts.map +0 -1
  134. package/types/src/Composition/flip.d.ts +0 -21
  135. package/types/src/Composition/flip.d.ts.map +0 -1
  136. package/types/src/Composition/flow.d.ts +0 -56
  137. package/types/src/Composition/flow.d.ts.map +0 -1
  138. package/types/src/Composition/fn.d.ts +0 -76
  139. package/types/src/Composition/fn.d.ts.map +0 -1
  140. package/types/src/Composition/index.d.ts +0 -14
  141. package/types/src/Composition/index.d.ts.map +0 -1
  142. package/types/src/Composition/juxt.d.ts +0 -18
  143. package/types/src/Composition/juxt.d.ts.map +0 -1
  144. package/types/src/Composition/memoize.d.ts +0 -46
  145. package/types/src/Composition/memoize.d.ts.map +0 -1
  146. package/types/src/Composition/not.d.ts +0 -26
  147. package/types/src/Composition/not.d.ts.map +0 -1
  148. package/types/src/Composition/on.d.ts +0 -13
  149. package/types/src/Composition/on.d.ts.map +0 -1
  150. package/types/src/Composition/pipe.d.ts +0 -56
  151. package/types/src/Composition/pipe.d.ts.map +0 -1
  152. package/types/src/Composition/tap.d.ts +0 -31
  153. package/types/src/Composition/tap.d.ts.map +0 -1
  154. package/types/src/Composition/uncurry.d.ts +0 -54
  155. package/types/src/Composition/uncurry.d.ts.map +0 -1
  156. package/types/src/Core/Deferred.d.ts +0 -49
  157. package/types/src/Core/Deferred.d.ts.map +0 -1
  158. package/types/src/Core/InternalTypes.d.ts +0 -23
  159. package/types/src/Core/InternalTypes.d.ts.map +0 -1
  160. package/types/src/Core/Lens.d.ts +0 -118
  161. package/types/src/Core/Lens.d.ts.map +0 -1
  162. package/types/src/Core/Logged.d.ts +0 -126
  163. package/types/src/Core/Logged.d.ts.map +0 -1
  164. package/types/src/Core/Option.d.ts +0 -209
  165. package/types/src/Core/Option.d.ts.map +0 -1
  166. package/types/src/Core/Optional.d.ts +0 -158
  167. package/types/src/Core/Optional.d.ts.map +0 -1
  168. package/types/src/Core/Predicate.d.ts +0 -161
  169. package/types/src/Core/Predicate.d.ts.map +0 -1
  170. package/types/src/Core/Reader.d.ts +0 -156
  171. package/types/src/Core/Reader.d.ts.map +0 -1
  172. package/types/src/Core/Refinement.d.ts +0 -138
  173. package/types/src/Core/Refinement.d.ts.map +0 -1
  174. package/types/src/Core/RemoteData.d.ts +0 -197
  175. package/types/src/Core/RemoteData.d.ts.map +0 -1
  176. package/types/src/Core/Result.d.ts +0 -182
  177. package/types/src/Core/Result.d.ts.map +0 -1
  178. package/types/src/Core/State.d.ts +0 -192
  179. package/types/src/Core/State.d.ts.map +0 -1
  180. package/types/src/Core/Task.d.ts +0 -219
  181. package/types/src/Core/Task.d.ts.map +0 -1
  182. package/types/src/Core/TaskOption.d.ts +0 -121
  183. package/types/src/Core/TaskOption.d.ts.map +0 -1
  184. package/types/src/Core/TaskResult.d.ts +0 -119
  185. package/types/src/Core/TaskResult.d.ts.map +0 -1
  186. package/types/src/Core/TaskValidation.d.ts +0 -144
  187. package/types/src/Core/TaskValidation.d.ts.map +0 -1
  188. package/types/src/Core/These.d.ts +0 -225
  189. package/types/src/Core/These.d.ts.map +0 -1
  190. package/types/src/Core/Tuple.d.ts +0 -129
  191. package/types/src/Core/Tuple.d.ts.map +0 -1
  192. package/types/src/Core/Validation.d.ts +0 -203
  193. package/types/src/Core/Validation.d.ts.map +0 -1
  194. package/types/src/Core/index.d.ts +0 -19
  195. package/types/src/Core/index.d.ts.map +0 -1
  196. package/types/src/Types/Brand.d.ts.map +0 -1
  197. package/types/src/Types/NonEmptyList.d.ts.map +0 -1
  198. package/types/src/Types/index.d.ts +0 -3
  199. package/types/src/Types/index.d.ts.map +0 -1
  200. package/types/src/Utils/Arr.d.ts +0 -403
  201. package/types/src/Utils/Arr.d.ts.map +0 -1
  202. package/types/src/Utils/Dict.d.ts +0 -310
  203. package/types/src/Utils/Dict.d.ts.map +0 -1
  204. package/types/src/Utils/Num.d.ts +0 -110
  205. package/types/src/Utils/Num.d.ts.map +0 -1
  206. package/types/src/Utils/Rec.d.ts +0 -159
  207. package/types/src/Utils/Rec.d.ts.map +0 -1
  208. package/types/src/Utils/Str.d.ts +0 -128
  209. package/types/src/Utils/Str.d.ts.map +0 -1
  210. package/types/src/Utils/Uniq.d.ts +0 -179
  211. package/types/src/Utils/Uniq.d.ts.map +0 -1
  212. package/types/src/Utils/index.d.ts +0 -7
  213. 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
+ });