@nlozgachev/pipelined 0.32.0 → 0.34.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 +67 -37
- package/dist/{Task-CjYKLeTY.d.ts → Task-DXsuurnc.d.mts} +107 -58
- package/dist/{Task-CJZfcOkO.d.mts → Task-zAY4kSVB.d.ts} +107 -58
- package/dist/{chunk-L3NC44SN.mjs → chunk-5AWUAG7G.mjs} +449 -299
- package/dist/{chunk-NRF2FVPZ.mjs → chunk-AHEZFTMT.mjs} +64 -32
- package/dist/{chunk-TK5ZCGP2.mjs → chunk-DLBHVYII.mjs} +110 -47
- package/dist/{chunk-EHQFUWZW.mjs → chunk-IJFFWBKW.mjs} +223 -62
- package/dist/chunk-IPP4XFYH.mjs +0 -0
- package/dist/chunk-VWVPHDZO.mjs +29 -0
- package/dist/composition.d.mts +8 -7
- package/dist/composition.d.ts +8 -7
- package/dist/composition.js +64 -32
- package/dist/composition.mjs +1 -1
- package/dist/core.d.mts +227 -149
- package/dist/core.d.ts +227 -149
- package/dist/core.js +576 -345
- package/dist/core.mjs +3 -2
- package/dist/index.d.mts +3 -4
- package/dist/index.d.ts +3 -4
- package/dist/index.js +865 -446
- package/dist/index.mjs +10 -7
- package/dist/types.d.mts +104 -2
- package/dist/types.d.ts +104 -2
- package/dist/types.js +20 -0
- package/dist/types.mjs +6 -3
- package/dist/utils.d.mts +48 -5
- package/dist/utils.d.ts +48 -5
- package/dist/utils.js +353 -108
- package/dist/utils.mjs +3 -2
- package/package.json +9 -9
- package/dist/NonEmptyList-BlGFjor5.d.mts +0 -30
- package/dist/NonEmptyList-BlGFjor5.d.ts +0 -30
- package/dist/chunk-BYWKZLHM.mjs +0 -10
package/dist/utils.js
CHANGED
|
@@ -43,35 +43,48 @@ var Deferred;
|
|
|
43
43
|
var Result;
|
|
44
44
|
((Result2) => {
|
|
45
45
|
Result2.ok = (value) => ({ kind: "Ok", value });
|
|
46
|
-
Result2.
|
|
46
|
+
Result2.err = (e) => ({ kind: "Err", error: e });
|
|
47
47
|
Result2.isOk = (data) => data.kind === "Ok";
|
|
48
|
-
Result2.
|
|
48
|
+
Result2.isErr = (data) => data.kind === "Err";
|
|
49
49
|
Result2.tryCatch = (f, onError) => {
|
|
50
50
|
try {
|
|
51
51
|
return (0, Result2.ok)(f());
|
|
52
|
-
} catch (
|
|
53
|
-
return (0, Result2.
|
|
52
|
+
} catch (error) {
|
|
53
|
+
return (0, Result2.err)(onError(error));
|
|
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.isErr)(data) ? (0, Result2.err)(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);
|
|
61
61
|
Result2.getOrElse = (defaultValue) => (data) => (0, Result2.isOk)(data) ? data.value : defaultValue();
|
|
62
62
|
Result2.tap = (f) => (data) => {
|
|
63
|
-
if ((0, Result2.isOk)(data))
|
|
63
|
+
if ((0, Result2.isOk)(data)) {
|
|
64
|
+
f(data.value);
|
|
65
|
+
}
|
|
64
66
|
return data;
|
|
65
67
|
};
|
|
66
68
|
Result2.tapError = (f) => (data) => {
|
|
67
|
-
if ((0, Result2.
|
|
69
|
+
if ((0, Result2.isErr)(data)) {
|
|
70
|
+
f(data.error);
|
|
71
|
+
}
|
|
68
72
|
return data;
|
|
69
73
|
};
|
|
70
|
-
Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.
|
|
74
|
+
Result2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result2.ok)(a) : (0, Result2.err)(onFalse(a));
|
|
75
|
+
Result2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Result2.err)(onNull()) : (0, Result2.ok)(value);
|
|
76
|
+
Result2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Result2.err)(onNone()) : (0, Result2.ok)(maybe.value);
|
|
77
|
+
Result2.fromThrowable = (f, onError) => (...args) => {
|
|
78
|
+
try {
|
|
79
|
+
return (0, Result2.ok)(f(...args));
|
|
80
|
+
} catch (error) {
|
|
81
|
+
return (0, Result2.err)(onError(error));
|
|
82
|
+
}
|
|
83
|
+
};
|
|
71
84
|
Result2.recover = (fallback) => (data) => (0, Result2.isOk)(data) ? data : fallback(data.error);
|
|
72
|
-
Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.
|
|
85
|
+
Result2.recoverUnless = (isBlocked, fallback) => (data) => (0, Result2.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
|
|
73
86
|
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.
|
|
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;
|
|
75
88
|
})(Result || (Result = {}));
|
|
76
89
|
|
|
77
90
|
// src/Core/Maybe.ts
|
|
@@ -86,7 +99,7 @@ var Maybe;
|
|
|
86
99
|
Maybe2.toNullable = (data) => (0, Maybe2.isSome)(data) ? data.value : null;
|
|
87
100
|
Maybe2.toUndefined = (data) => (0, Maybe2.isSome)(data) ? data.value : void 0;
|
|
88
101
|
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.
|
|
102
|
+
Maybe2.toResult = (onNone) => (data) => (0, Maybe2.isSome)(data) ? Result.ok(data.value) : Result.err(onNone());
|
|
90
103
|
Maybe2.fromResult = (data) => Result.isOk(data) ? (0, Maybe2.some)(data.value) : (0, Maybe2.none)();
|
|
91
104
|
Maybe2.map = (f) => (data) => (0, Maybe2.isSome)(data) ? (0, Maybe2.some)(f(data.value)) : data;
|
|
92
105
|
Maybe2.chain = (f) => (data) => (0, Maybe2.isSome)(data) ? f(data.value) : data;
|
|
@@ -94,7 +107,9 @@ var Maybe;
|
|
|
94
107
|
Maybe2.match = (cases) => (data) => (0, Maybe2.isSome)(data) ? cases.some(data.value) : cases.none();
|
|
95
108
|
Maybe2.getOrElse = (defaultValue) => (data) => (0, Maybe2.isSome)(data) ? data.value : defaultValue();
|
|
96
109
|
Maybe2.tap = (f) => (data) => {
|
|
97
|
-
if ((0, Maybe2.isSome)(data))
|
|
110
|
+
if ((0, Maybe2.isSome)(data)) {
|
|
111
|
+
f(data.value);
|
|
112
|
+
}
|
|
98
113
|
return data;
|
|
99
114
|
};
|
|
100
115
|
Maybe2.filter = (predicate) => (data) => (0, Maybe2.isSome)(data) ? predicate(data.value) ? data : (0, Maybe2.none)() : data;
|
|
@@ -102,8 +117,34 @@ var Maybe;
|
|
|
102
117
|
Maybe2.ap = (arg) => (data) => (0, Maybe2.isSome)(data) && (0, Maybe2.isSome)(arg) ? (0, Maybe2.some)(data.value(arg.value)) : (0, Maybe2.none)();
|
|
103
118
|
})(Maybe || (Maybe = {}));
|
|
104
119
|
|
|
120
|
+
// src/Types/Brand.ts
|
|
121
|
+
var Brand;
|
|
122
|
+
((Brand2) => {
|
|
123
|
+
Brand2.wrap = () => (value) => value;
|
|
124
|
+
Brand2.unwrap = (branded) => branded;
|
|
125
|
+
})(Brand || (Brand = {}));
|
|
126
|
+
|
|
127
|
+
// src/Types/Duration.ts
|
|
128
|
+
var Duration;
|
|
129
|
+
((Duration2) => {
|
|
130
|
+
const wrap = Brand.wrap();
|
|
131
|
+
Duration2.milliseconds = (ms) => wrap(ms);
|
|
132
|
+
Duration2.seconds = (s) => wrap(s * 1e3);
|
|
133
|
+
Duration2.minutes = (m) => wrap(m * 60 * 1e3);
|
|
134
|
+
Duration2.hours = (h) => wrap(h * 60 * 60 * 1e3);
|
|
135
|
+
Duration2.days = (d) => wrap(d * 24 * 60 * 60 * 1e3);
|
|
136
|
+
Duration2.toMilliseconds = (d) => Brand.unwrap(d);
|
|
137
|
+
Duration2.toSeconds = (d) => Brand.unwrap(d) / 1e3;
|
|
138
|
+
Duration2.toMinutes = (d) => Brand.unwrap(d) / (60 * 1e3);
|
|
139
|
+
Duration2.toHours = (d) => Brand.unwrap(d) / (60 * 60 * 1e3);
|
|
140
|
+
Duration2.toDays = (d) => Brand.unwrap(d) / (24 * 60 * 60 * 1e3);
|
|
141
|
+
Duration2.add = (other) => (self) => wrap(Brand.unwrap(self) + Brand.unwrap(other));
|
|
142
|
+
Duration2.subtract = (other) => (self) => wrap(Brand.unwrap(self) - Brand.unwrap(other));
|
|
143
|
+
})(Duration || (Duration = {}));
|
|
144
|
+
|
|
105
145
|
// src/Core/Task.ts
|
|
106
146
|
var toPromise = (task, signal) => Deferred.toPromise(task(signal));
|
|
147
|
+
var getMs = (duration) => Duration.toMilliseconds(duration);
|
|
107
148
|
var Task;
|
|
108
149
|
((Task2) => {
|
|
109
150
|
Task2.resolve = (value) => () => Deferred.fromPromise(Promise.resolve(value));
|
|
@@ -111,12 +152,7 @@ var Task;
|
|
|
111
152
|
Task2.fromSync = (f) => () => Deferred.fromPromise(Promise.resolve(f()));
|
|
112
153
|
Task2.map = (f) => (data) => (0, Task2.from)((signal) => toPromise(data, signal).then(f));
|
|
113
154
|
Task2.chain = (f) => (data) => (0, Task2.from)((signal) => toPromise(data, signal).then((a) => toPromise(f(a), signal)));
|
|
114
|
-
Task2.ap = (arg) => (data) => (0, Task2.from)(
|
|
115
|
-
(signal) => Promise.all([
|
|
116
|
-
toPromise(data, signal),
|
|
117
|
-
toPromise(arg, signal)
|
|
118
|
-
]).then(([f, a]) => f(a))
|
|
119
|
-
);
|
|
155
|
+
Task2.ap = (arg) => (data) => (0, Task2.from)((signal) => Promise.all([toPromise(data, signal), toPromise(arg, signal)]).then(([f, a]) => f(a)));
|
|
120
156
|
Task2.tap = (f) => (data) => (0, Task2.from)(
|
|
121
157
|
(signal) => toPromise(data, signal).then((a) => {
|
|
122
158
|
f(a);
|
|
@@ -126,35 +162,39 @@ var Task;
|
|
|
126
162
|
Task2.all = (tasks) => (0, Task2.from)(
|
|
127
163
|
(signal) => Promise.all(tasks.map((t) => toPromise(t, signal)))
|
|
128
164
|
);
|
|
129
|
-
Task2.delay = (
|
|
130
|
-
(signal) => new Promise((
|
|
131
|
-
let timerId
|
|
165
|
+
Task2.delay = (duration) => (data) => (0, Task2.from)(
|
|
166
|
+
(signal) => new Promise((res) => {
|
|
167
|
+
let timerId;
|
|
132
168
|
const onAbort = () => {
|
|
133
169
|
if (timerId !== void 0) {
|
|
134
170
|
clearTimeout(timerId);
|
|
135
171
|
}
|
|
136
|
-
|
|
172
|
+
res(toPromise(data, signal));
|
|
137
173
|
};
|
|
138
174
|
if (signal) {
|
|
139
175
|
if (signal.aborted) {
|
|
140
|
-
return
|
|
176
|
+
return res(toPromise(data, signal));
|
|
141
177
|
}
|
|
142
178
|
signal.addEventListener("abort", onAbort, { once: true });
|
|
143
179
|
}
|
|
144
180
|
timerId = setTimeout(() => {
|
|
145
181
|
signal?.removeEventListener("abort", onAbort);
|
|
146
|
-
|
|
147
|
-
},
|
|
182
|
+
res(toPromise(data, signal));
|
|
183
|
+
}, getMs(duration));
|
|
148
184
|
})
|
|
149
185
|
);
|
|
150
186
|
Task2.repeat = (options) => (task) => (0, Task2.from)((signal) => {
|
|
151
|
-
const { times, delay:
|
|
152
|
-
if (times <= 0)
|
|
187
|
+
const { times, delay: delayDuration } = options;
|
|
188
|
+
if (times <= 0) {
|
|
189
|
+
return Promise.resolve([]);
|
|
190
|
+
}
|
|
153
191
|
const results = [];
|
|
154
192
|
const wait = () => {
|
|
155
|
-
if (signal?.aborted)
|
|
193
|
+
if (signal?.aborted) {
|
|
194
|
+
return Promise.resolve();
|
|
195
|
+
}
|
|
156
196
|
return new Promise((r) => {
|
|
157
|
-
let timerId
|
|
197
|
+
let timerId;
|
|
158
198
|
const onAbort = () => {
|
|
159
199
|
if (timerId !== void 0) {
|
|
160
200
|
clearTimeout(timerId);
|
|
@@ -167,7 +207,7 @@ var Task;
|
|
|
167
207
|
timerId = setTimeout(() => {
|
|
168
208
|
signal?.removeEventListener("abort", onAbort);
|
|
169
209
|
r();
|
|
170
|
-
},
|
|
210
|
+
}, delayDuration ? getMs(delayDuration) : 0);
|
|
171
211
|
});
|
|
172
212
|
};
|
|
173
213
|
const run2 = (left) => {
|
|
@@ -176,18 +216,22 @@ var Task;
|
|
|
176
216
|
}
|
|
177
217
|
return toPromise(task, signal).then((a) => {
|
|
178
218
|
results.push(a);
|
|
179
|
-
if (left <= 1 || signal?.aborted)
|
|
219
|
+
if (left <= 1 || signal?.aborted) {
|
|
220
|
+
return results;
|
|
221
|
+
}
|
|
180
222
|
return wait().then(() => run2(left - 1));
|
|
181
223
|
});
|
|
182
224
|
};
|
|
183
225
|
return run2(times);
|
|
184
226
|
});
|
|
185
227
|
Task2.repeatUntil = (options) => (task) => (0, Task2.from)((signal) => {
|
|
186
|
-
const { when: predicate, delay:
|
|
228
|
+
const { when: predicate, delay: delayDuration, maxAttempts } = options;
|
|
187
229
|
const wait = () => {
|
|
188
|
-
if (signal?.aborted)
|
|
230
|
+
if (signal?.aborted) {
|
|
231
|
+
return Promise.resolve();
|
|
232
|
+
}
|
|
189
233
|
return new Promise((r) => {
|
|
190
|
-
let timerId
|
|
234
|
+
let timerId;
|
|
191
235
|
const onAbort = () => {
|
|
192
236
|
if (timerId !== void 0) {
|
|
193
237
|
clearTimeout(timerId);
|
|
@@ -200,7 +244,7 @@ var Task;
|
|
|
200
244
|
timerId = setTimeout(() => {
|
|
201
245
|
signal?.removeEventListener("abort", onAbort);
|
|
202
246
|
r();
|
|
203
|
-
},
|
|
247
|
+
}, delayDuration ? getMs(delayDuration) : 0);
|
|
204
248
|
});
|
|
205
249
|
};
|
|
206
250
|
const run2 = (attempt, lastValue) => {
|
|
@@ -208,15 +252,55 @@ var Task;
|
|
|
208
252
|
return Promise.resolve(lastValue);
|
|
209
253
|
}
|
|
210
254
|
return toPromise(task, signal).then((a) => {
|
|
211
|
-
if (predicate(a))
|
|
212
|
-
|
|
213
|
-
|
|
255
|
+
if (predicate(a)) {
|
|
256
|
+
return a;
|
|
257
|
+
}
|
|
258
|
+
if (maxAttempts !== void 0 && attempt >= maxAttempts) {
|
|
259
|
+
return a;
|
|
260
|
+
}
|
|
261
|
+
if (signal?.aborted) {
|
|
262
|
+
return a;
|
|
263
|
+
}
|
|
214
264
|
return wait().then(() => run2(attempt + 1, a));
|
|
215
265
|
});
|
|
216
266
|
};
|
|
217
267
|
return run2(1);
|
|
218
268
|
});
|
|
219
|
-
Task2.race = (tasks) =>
|
|
269
|
+
Task2.race = (tasks) => {
|
|
270
|
+
if (tasks.length === 0) {
|
|
271
|
+
return () => Deferred.fromPromise(new Promise(() => {
|
|
272
|
+
}));
|
|
273
|
+
}
|
|
274
|
+
return (0, Task2.from)((outerSignal) => {
|
|
275
|
+
const controllers = tasks.map(() => new AbortController());
|
|
276
|
+
const onOuterAbort = () => {
|
|
277
|
+
for (const ctrl of controllers) {
|
|
278
|
+
ctrl.abort();
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
if (outerSignal) {
|
|
282
|
+
if (outerSignal.aborted) {
|
|
283
|
+
onOuterAbort();
|
|
284
|
+
} else {
|
|
285
|
+
outerSignal.addEventListener("abort", onOuterAbort, { once: true });
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
const promises = tasks.map((task, idx) => {
|
|
289
|
+
const ctrl = controllers[idx];
|
|
290
|
+
return toPromise(task, ctrl.signal).then((result) => {
|
|
291
|
+
for (let i = 0; i < controllers.length; i++) {
|
|
292
|
+
if (i !== idx) {
|
|
293
|
+
controllers[i].abort();
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
297
|
+
return result;
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
return Promise.race(promises);
|
|
301
|
+
});
|
|
302
|
+
};
|
|
303
|
+
Task2.sequence = (tasks) => (0, Task2.from)((signal) => Promise.all(tasks.map((t) => toPromise(t, signal))));
|
|
220
304
|
Task2.sequential = (tasks) => (0, Task2.from)(async (signal) => {
|
|
221
305
|
const results = [];
|
|
222
306
|
for (const task of tasks) {
|
|
@@ -227,19 +311,19 @@ var Task;
|
|
|
227
311
|
}
|
|
228
312
|
return results;
|
|
229
313
|
});
|
|
230
|
-
Task2.timeout = (
|
|
314
|
+
Task2.timeout = (duration, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
|
|
231
315
|
const controller = new AbortController();
|
|
232
316
|
let timerId;
|
|
233
|
-
|
|
317
|
+
function cleanUp() {
|
|
234
318
|
if (timerId !== void 0) {
|
|
235
319
|
clearTimeout(timerId);
|
|
236
320
|
}
|
|
237
321
|
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
238
|
-
}
|
|
239
|
-
|
|
322
|
+
}
|
|
323
|
+
function onOuterAbort() {
|
|
240
324
|
cleanUp();
|
|
241
325
|
controller.abort();
|
|
242
|
-
}
|
|
326
|
+
}
|
|
243
327
|
if (outerSignal) {
|
|
244
328
|
if (outerSignal.aborted) {
|
|
245
329
|
controller.abort();
|
|
@@ -252,12 +336,12 @@ var Task;
|
|
|
252
336
|
cleanUp();
|
|
253
337
|
return Result.ok(a);
|
|
254
338
|
}),
|
|
255
|
-
new Promise((
|
|
339
|
+
new Promise((res) => {
|
|
256
340
|
timerId = setTimeout(() => {
|
|
257
341
|
controller.abort();
|
|
258
342
|
cleanUp();
|
|
259
|
-
|
|
260
|
-
},
|
|
343
|
+
res(Result.err(onTimeout()));
|
|
344
|
+
}, getMs(duration));
|
|
261
345
|
})
|
|
262
346
|
]);
|
|
263
347
|
});
|
|
@@ -294,35 +378,43 @@ var Arr;
|
|
|
294
378
|
Arr2.init = (data) => data.length > 0 ? Maybe.some(data.slice(0, -1)) : Maybe.none();
|
|
295
379
|
Arr2.findFirst = (predicate) => (data) => {
|
|
296
380
|
const idx = data.findIndex(predicate);
|
|
297
|
-
return idx
|
|
381
|
+
return idx !== -1 ? Maybe.some(data[idx]) : Maybe.none();
|
|
298
382
|
};
|
|
299
383
|
Arr2.findLast = (predicate) => (data) => {
|
|
300
384
|
for (let i = data.length - 1; i >= 0; i--) {
|
|
301
|
-
if (predicate(data[i]))
|
|
385
|
+
if (predicate(data[i])) {
|
|
386
|
+
return Maybe.some(data[i]);
|
|
387
|
+
}
|
|
302
388
|
}
|
|
303
389
|
return Maybe.none();
|
|
304
390
|
};
|
|
305
391
|
Arr2.findIndex = (predicate) => (data) => {
|
|
306
392
|
const idx = data.findIndex(predicate);
|
|
307
|
-
return idx
|
|
393
|
+
return idx !== -1 ? Maybe.some(idx) : Maybe.none();
|
|
308
394
|
};
|
|
309
395
|
Arr2.map = (f) => (data) => {
|
|
310
396
|
const n = data.length;
|
|
311
397
|
const result = new Array(n);
|
|
312
|
-
for (let i = 0; i < n; i++)
|
|
398
|
+
for (let i = 0; i < n; i++) {
|
|
399
|
+
result[i] = f(data[i]);
|
|
400
|
+
}
|
|
313
401
|
return result;
|
|
314
402
|
};
|
|
315
403
|
Arr2.mapWithIndex = (f) => (data) => {
|
|
316
404
|
const n = data.length;
|
|
317
405
|
const result = new Array(n);
|
|
318
|
-
for (let i = 0; i < n; i++)
|
|
406
|
+
for (let i = 0; i < n; i++) {
|
|
407
|
+
result[i] = f(i, data[i]);
|
|
408
|
+
}
|
|
319
409
|
return result;
|
|
320
410
|
};
|
|
321
411
|
Arr2.filter = (predicate) => (data) => {
|
|
322
412
|
const n = data.length;
|
|
323
413
|
const result = [];
|
|
324
414
|
for (let i = 0; i < n; i++) {
|
|
325
|
-
if (predicate(data[i]))
|
|
415
|
+
if (predicate(data[i])) {
|
|
416
|
+
result.push(data[i]);
|
|
417
|
+
}
|
|
326
418
|
}
|
|
327
419
|
return result;
|
|
328
420
|
};
|
|
@@ -330,7 +422,9 @@ var Arr;
|
|
|
330
422
|
const result = [];
|
|
331
423
|
for (let i = 0; i < data.length; i++) {
|
|
332
424
|
const mapped = f(data[i]);
|
|
333
|
-
if (mapped.kind === "Some")
|
|
425
|
+
if (mapped.kind === "Some") {
|
|
426
|
+
result.push(mapped.value);
|
|
427
|
+
}
|
|
334
428
|
}
|
|
335
429
|
return result;
|
|
336
430
|
};
|
|
@@ -342,18 +436,52 @@ var Arr;
|
|
|
342
436
|
}
|
|
343
437
|
return [pass, fail];
|
|
344
438
|
};
|
|
439
|
+
Arr2.compact = (data) => {
|
|
440
|
+
const result = [];
|
|
441
|
+
for (const item of data) {
|
|
442
|
+
if (item.kind === "Some") {
|
|
443
|
+
result.push(item.value);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
return result;
|
|
447
|
+
};
|
|
448
|
+
Arr2.separate = (data) => {
|
|
449
|
+
const errors = [];
|
|
450
|
+
const successes = [];
|
|
451
|
+
for (const item of data) {
|
|
452
|
+
if (item.kind === "Ok") {
|
|
453
|
+
successes.push(item.value);
|
|
454
|
+
} else {
|
|
455
|
+
errors.push(item.error);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
return [errors, successes];
|
|
459
|
+
};
|
|
460
|
+
Arr2.partitionMap = (f) => (data) => {
|
|
461
|
+
const errors = [];
|
|
462
|
+
const successes = [];
|
|
463
|
+
for (const item of data) {
|
|
464
|
+
const mapped = f(item);
|
|
465
|
+
if (mapped.kind === "Ok") {
|
|
466
|
+
successes.push(mapped.value);
|
|
467
|
+
} else {
|
|
468
|
+
errors.push(mapped.error);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
return [errors, successes];
|
|
472
|
+
};
|
|
345
473
|
Arr2.groupBy = (f) => (data) => {
|
|
346
474
|
const result = {};
|
|
347
475
|
for (const a of data) {
|
|
348
476
|
const key = f(a);
|
|
349
|
-
if (!result[key])
|
|
477
|
+
if (!result[key]) {
|
|
478
|
+
result[key] = [];
|
|
479
|
+
}
|
|
350
480
|
result[key].push(a);
|
|
351
481
|
}
|
|
352
482
|
return result;
|
|
353
483
|
};
|
|
354
|
-
Arr2.uniq = (data) => [
|
|
355
|
-
...new Set(data)
|
|
356
|
-
];
|
|
484
|
+
Arr2.uniq = (data) => [...new Set(data)];
|
|
357
485
|
Arr2.uniqBy = (f) => (data) => {
|
|
358
486
|
const seen = /* @__PURE__ */ new Set();
|
|
359
487
|
const result = [];
|
|
@@ -377,12 +505,16 @@ var Arr;
|
|
|
377
505
|
};
|
|
378
506
|
Arr2.sortBy = (compare) => (data) => {
|
|
379
507
|
const arr = data;
|
|
380
|
-
if (typeof arr.toSorted === "function")
|
|
381
|
-
|
|
508
|
+
if (typeof arr.toSorted === "function") {
|
|
509
|
+
return arr.toSorted(compare);
|
|
510
|
+
}
|
|
511
|
+
return [...data].toSorted(compare);
|
|
382
512
|
};
|
|
383
513
|
Arr2.sortWith = (ord) => (data) => {
|
|
384
514
|
const arr = data;
|
|
385
|
-
if (typeof arr.toSorted === "function")
|
|
515
|
+
if (typeof arr.toSorted === "function") {
|
|
516
|
+
return arr.toSorted(ord);
|
|
517
|
+
}
|
|
386
518
|
return [...data].sort(ord);
|
|
387
519
|
};
|
|
388
520
|
Arr2.zip = (other) => (data) => {
|
|
@@ -402,7 +534,9 @@ var Arr;
|
|
|
402
534
|
return result;
|
|
403
535
|
};
|
|
404
536
|
Arr2.intersperse = (sep) => (data) => {
|
|
405
|
-
if (data.length <= 1)
|
|
537
|
+
if (data.length <= 1) {
|
|
538
|
+
return data;
|
|
539
|
+
}
|
|
406
540
|
const result = [data[0]];
|
|
407
541
|
for (let i = 1; i < data.length; i++) {
|
|
408
542
|
result.push(sep, data[i]);
|
|
@@ -410,7 +544,9 @@ var Arr;
|
|
|
410
544
|
return result;
|
|
411
545
|
};
|
|
412
546
|
Arr2.chunksOf = (n) => (data) => {
|
|
413
|
-
if (n <= 0)
|
|
547
|
+
if (n <= 0) {
|
|
548
|
+
return [];
|
|
549
|
+
}
|
|
414
550
|
const result = [];
|
|
415
551
|
for (let i = 0; i < data.length; i += n) {
|
|
416
552
|
result.push(data.slice(i, i + n));
|
|
@@ -440,7 +576,9 @@ var Arr;
|
|
|
440
576
|
for (let i = 0; i < n; i++) {
|
|
441
577
|
const chunk = f(data[i]);
|
|
442
578
|
const m = chunk.length;
|
|
443
|
-
for (let j = 0; j < m; j++)
|
|
579
|
+
for (let j = 0; j < m; j++) {
|
|
580
|
+
result.push(chunk[j]);
|
|
581
|
+
}
|
|
444
582
|
}
|
|
445
583
|
return result;
|
|
446
584
|
};
|
|
@@ -450,7 +588,9 @@ var Arr;
|
|
|
450
588
|
const result = new Array(n);
|
|
451
589
|
for (let i = 0; i < n; i++) {
|
|
452
590
|
const mapped = f(data[i]);
|
|
453
|
-
if (mapped.kind === "None")
|
|
591
|
+
if (mapped.kind === "None") {
|
|
592
|
+
return Maybe.none();
|
|
593
|
+
}
|
|
454
594
|
result[i] = mapped.value;
|
|
455
595
|
}
|
|
456
596
|
return Maybe.some(result);
|
|
@@ -460,7 +600,9 @@ var Arr;
|
|
|
460
600
|
const result = new Array(n);
|
|
461
601
|
for (let i = 0; i < n; i++) {
|
|
462
602
|
const mapped = f(data[i]);
|
|
463
|
-
if (mapped.kind === "
|
|
603
|
+
if (mapped.kind === "Err") {
|
|
604
|
+
return mapped;
|
|
605
|
+
}
|
|
464
606
|
result[i] = mapped.value;
|
|
465
607
|
}
|
|
466
608
|
return Result.ok(result);
|
|
@@ -473,7 +615,9 @@ var Arr;
|
|
|
473
615
|
const result = [];
|
|
474
616
|
for (const a of data) {
|
|
475
617
|
const r = await Deferred.toPromise(f(a)());
|
|
476
|
-
if (Result.
|
|
618
|
+
if (Result.isErr(r)) {
|
|
619
|
+
return r;
|
|
620
|
+
}
|
|
477
621
|
result.push(r.value);
|
|
478
622
|
}
|
|
479
623
|
return Result.ok(result);
|
|
@@ -483,27 +627,41 @@ var Arr;
|
|
|
483
627
|
Arr2.size = (data) => data.length;
|
|
484
628
|
Arr2.some = (predicate) => (data) => {
|
|
485
629
|
const n = data.length;
|
|
486
|
-
for (let i = 0; i < n; i++)
|
|
630
|
+
for (let i = 0; i < n; i++) {
|
|
631
|
+
if (predicate(data[i])) {
|
|
632
|
+
return true;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
487
635
|
return false;
|
|
488
636
|
};
|
|
489
637
|
Arr2.every = (predicate) => (data) => {
|
|
490
638
|
const n = data.length;
|
|
491
|
-
for (let i = 0; i < n; i++)
|
|
639
|
+
for (let i = 0; i < n; i++) {
|
|
640
|
+
if (!predicate(data[i])) {
|
|
641
|
+
return false;
|
|
642
|
+
}
|
|
643
|
+
}
|
|
492
644
|
return true;
|
|
493
645
|
};
|
|
494
|
-
Arr2.reverse = (data) => [...data].
|
|
646
|
+
Arr2.reverse = (data) => [...data].toReversed();
|
|
495
647
|
Arr2.insertAt = (index, item) => (data) => {
|
|
496
648
|
const i = Math.max(0, Math.min(index, data.length));
|
|
497
649
|
const arr = data;
|
|
498
|
-
if (typeof arr.toSpliced === "function")
|
|
650
|
+
if (typeof arr.toSpliced === "function") {
|
|
651
|
+
return arr.toSpliced(i, 0, item);
|
|
652
|
+
}
|
|
499
653
|
const result = [...data];
|
|
500
654
|
result.splice(i, 0, item);
|
|
501
655
|
return result;
|
|
502
656
|
};
|
|
503
657
|
Arr2.removeAt = (index) => (data) => {
|
|
504
|
-
if (index < 0 || index >= data.length)
|
|
658
|
+
if (index < 0 || index >= data.length) {
|
|
659
|
+
return data;
|
|
660
|
+
}
|
|
505
661
|
const arr = data;
|
|
506
|
-
if (typeof arr.toSpliced === "function")
|
|
662
|
+
if (typeof arr.toSpliced === "function") {
|
|
663
|
+
return arr.toSpliced(index, 1);
|
|
664
|
+
}
|
|
507
665
|
const result = [...data];
|
|
508
666
|
result.splice(index, 1);
|
|
509
667
|
return result;
|
|
@@ -513,14 +671,18 @@ var Arr;
|
|
|
513
671
|
Arr2.takeWhile = (predicate) => (data) => {
|
|
514
672
|
const result = [];
|
|
515
673
|
for (const a of data) {
|
|
516
|
-
if (!predicate(a))
|
|
674
|
+
if (!predicate(a)) {
|
|
675
|
+
break;
|
|
676
|
+
}
|
|
517
677
|
result.push(a);
|
|
518
678
|
}
|
|
519
679
|
return result;
|
|
520
680
|
};
|
|
521
681
|
Arr2.dropWhile = (predicate) => (data) => {
|
|
522
682
|
let i = 0;
|
|
523
|
-
while (i < data.length && predicate(data[i]))
|
|
683
|
+
while (i < data.length && predicate(data[i])) {
|
|
684
|
+
i++;
|
|
685
|
+
}
|
|
524
686
|
return data.slice(i);
|
|
525
687
|
};
|
|
526
688
|
Arr2.scan = (initial, f) => (data) => {
|
|
@@ -551,8 +713,11 @@ var Dict;
|
|
|
551
713
|
for (const item of items) {
|
|
552
714
|
const key = keyFn(item);
|
|
553
715
|
const arr = result.get(key);
|
|
554
|
-
if (arr !== void 0)
|
|
555
|
-
|
|
716
|
+
if (arr !== void 0) {
|
|
717
|
+
arr.push(item);
|
|
718
|
+
} else {
|
|
719
|
+
result.set(key, [item]);
|
|
720
|
+
}
|
|
556
721
|
}
|
|
557
722
|
return result;
|
|
558
723
|
};
|
|
@@ -569,7 +734,9 @@ var Dict;
|
|
|
569
734
|
return result;
|
|
570
735
|
};
|
|
571
736
|
Dict2.remove = (key) => (m) => {
|
|
572
|
-
if (!m.has(key))
|
|
737
|
+
if (!m.has(key)) {
|
|
738
|
+
return m;
|
|
739
|
+
}
|
|
573
740
|
const result = new globalThis.Map(m);
|
|
574
741
|
result.delete(key);
|
|
575
742
|
return result;
|
|
@@ -596,21 +763,27 @@ var Dict;
|
|
|
596
763
|
Dict2.filter = (predicate) => (m) => {
|
|
597
764
|
const result = new globalThis.Map();
|
|
598
765
|
for (const [k, v] of m) {
|
|
599
|
-
if (predicate(v))
|
|
766
|
+
if (predicate(v)) {
|
|
767
|
+
result.set(k, v);
|
|
768
|
+
}
|
|
600
769
|
}
|
|
601
770
|
return result;
|
|
602
771
|
};
|
|
603
772
|
Dict2.filterWithKey = (predicate) => (m) => {
|
|
604
773
|
const result = new globalThis.Map();
|
|
605
774
|
for (const [k, v] of m) {
|
|
606
|
-
if (predicate(k, v))
|
|
775
|
+
if (predicate(k, v)) {
|
|
776
|
+
result.set(k, v);
|
|
777
|
+
}
|
|
607
778
|
}
|
|
608
779
|
return result;
|
|
609
780
|
};
|
|
610
781
|
Dict2.compact = (m) => {
|
|
611
782
|
const result = new globalThis.Map();
|
|
612
783
|
for (const [k, v] of m) {
|
|
613
|
-
if (v.kind === "Some")
|
|
784
|
+
if (v.kind === "Some") {
|
|
785
|
+
result.set(k, v.value);
|
|
786
|
+
}
|
|
614
787
|
}
|
|
615
788
|
return result;
|
|
616
789
|
};
|
|
@@ -618,7 +791,9 @@ var Dict;
|
|
|
618
791
|
const result = new globalThis.Map();
|
|
619
792
|
for (const [key, value] of m) {
|
|
620
793
|
const mapped = f(value);
|
|
621
|
-
if (mapped.kind === "Some")
|
|
794
|
+
if (mapped.kind === "Some") {
|
|
795
|
+
result.set(key, mapped.value);
|
|
796
|
+
}
|
|
622
797
|
}
|
|
623
798
|
return result;
|
|
624
799
|
};
|
|
@@ -632,14 +807,18 @@ var Dict;
|
|
|
632
807
|
Dict2.intersection = (other) => (m) => {
|
|
633
808
|
const result = new globalThis.Map();
|
|
634
809
|
for (const [k, v] of m) {
|
|
635
|
-
if (other.has(k))
|
|
810
|
+
if (other.has(k)) {
|
|
811
|
+
result.set(k, v);
|
|
812
|
+
}
|
|
636
813
|
}
|
|
637
814
|
return result;
|
|
638
815
|
};
|
|
639
816
|
Dict2.difference = (other) => (m) => {
|
|
640
817
|
const result = new globalThis.Map();
|
|
641
818
|
for (const [k, v] of m) {
|
|
642
|
-
if (!other.has(k))
|
|
819
|
+
if (!other.has(k)) {
|
|
820
|
+
result.set(k, v);
|
|
821
|
+
}
|
|
643
822
|
}
|
|
644
823
|
return result;
|
|
645
824
|
};
|
|
@@ -664,7 +843,9 @@ var Dict;
|
|
|
664
843
|
var Num;
|
|
665
844
|
((Num2) => {
|
|
666
845
|
Num2.range = (from, to, step = 1) => {
|
|
667
|
-
if (step <= 0 || from > to)
|
|
846
|
+
if (step <= 0 || from > to) {
|
|
847
|
+
return [];
|
|
848
|
+
}
|
|
668
849
|
const count = Math.floor((to - from) / step) + 1;
|
|
669
850
|
const result = new Array(count);
|
|
670
851
|
for (let i = 0; i < count; i++) {
|
|
@@ -675,7 +856,9 @@ var Num;
|
|
|
675
856
|
Num2.clamp = (min2, max2) => (n) => Math.min(Math.max(n, min2), max2);
|
|
676
857
|
Num2.between = (min2, max2) => (n) => n >= min2 && n <= max2;
|
|
677
858
|
Num2.parse = (s) => {
|
|
678
|
-
if (s.trim() === "")
|
|
859
|
+
if (s.trim() === "") {
|
|
860
|
+
return Maybe.none();
|
|
861
|
+
}
|
|
679
862
|
const n = Number(s);
|
|
680
863
|
return isNaN(n) ? Maybe.none() : Maybe.some(n);
|
|
681
864
|
};
|
|
@@ -691,23 +874,33 @@ var Num;
|
|
|
691
874
|
Num2.remainder = (divisor) => (n) => divisor === 0 ? Maybe.none() : Maybe.some(n % divisor);
|
|
692
875
|
Num2.sum = (ns) => {
|
|
693
876
|
let result = 0;
|
|
694
|
-
for (let i = 0; i < ns.length; i++)
|
|
877
|
+
for (let i = 0; i < ns.length; i++) {
|
|
878
|
+
result += ns[i];
|
|
879
|
+
}
|
|
695
880
|
return result;
|
|
696
881
|
};
|
|
697
882
|
Num2.mean = (ns) => ns.length === 0 ? Maybe.none() : Maybe.some((0, Num2.sum)(ns) / ns.length);
|
|
698
883
|
Num2.min = (ns) => {
|
|
699
|
-
if (ns.length === 0)
|
|
884
|
+
if (ns.length === 0) {
|
|
885
|
+
return Maybe.none();
|
|
886
|
+
}
|
|
700
887
|
let [result] = ns;
|
|
701
888
|
for (let i = 1; i < ns.length; i++) {
|
|
702
|
-
if (ns[i] < result)
|
|
889
|
+
if (ns[i] < result) {
|
|
890
|
+
result = ns[i];
|
|
891
|
+
}
|
|
703
892
|
}
|
|
704
893
|
return Maybe.some(result);
|
|
705
894
|
};
|
|
706
895
|
Num2.max = (ns) => {
|
|
707
|
-
if (ns.length === 0)
|
|
896
|
+
if (ns.length === 0) {
|
|
897
|
+
return Maybe.none();
|
|
898
|
+
}
|
|
708
899
|
let [result] = ns;
|
|
709
900
|
for (let i = 1; i < ns.length; i++) {
|
|
710
|
-
if (ns[i] > result)
|
|
901
|
+
if (ns[i] > result) {
|
|
902
|
+
result = ns[i];
|
|
903
|
+
}
|
|
711
904
|
}
|
|
712
905
|
return Maybe.some(result);
|
|
713
906
|
};
|
|
@@ -719,16 +912,33 @@ var Rec;
|
|
|
719
912
|
Rec2.map = (f) => (data) => {
|
|
720
913
|
const keys2 = Object.keys(data);
|
|
721
914
|
const vals = Object.values(data);
|
|
722
|
-
const result =
|
|
915
|
+
const result = Object.create(Object.getPrototypeOf(data));
|
|
723
916
|
for (let i = 0; i < keys2.length; i++) {
|
|
724
917
|
Object.defineProperty(result, keys2[i], { value: f(vals[i]), writable: true, enumerable: true, configurable: true });
|
|
725
918
|
}
|
|
726
919
|
return result;
|
|
727
920
|
};
|
|
921
|
+
Rec2.filterMap = (f) => (data) => {
|
|
922
|
+
const keys2 = Object.keys(data);
|
|
923
|
+
const vals = Object.values(data);
|
|
924
|
+
const result = Object.create(Object.getPrototypeOf(data));
|
|
925
|
+
for (let i = 0; i < keys2.length; i++) {
|
|
926
|
+
const maybeVal = f(vals[i]);
|
|
927
|
+
if (maybeVal.kind === "Some") {
|
|
928
|
+
Object.defineProperty(result, keys2[i], {
|
|
929
|
+
value: maybeVal.value,
|
|
930
|
+
writable: true,
|
|
931
|
+
enumerable: true,
|
|
932
|
+
configurable: true
|
|
933
|
+
});
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
return result;
|
|
937
|
+
};
|
|
728
938
|
Rec2.mapWithKey = (f) => (data) => {
|
|
729
939
|
const keys2 = Object.keys(data);
|
|
730
940
|
const vals = Object.values(data);
|
|
731
|
-
const result =
|
|
941
|
+
const result = Object.create(Object.getPrototypeOf(data));
|
|
732
942
|
for (let i = 0; i < keys2.length; i++) {
|
|
733
943
|
Object.defineProperty(result, keys2[i], {
|
|
734
944
|
value: f(keys2[i], vals[i]),
|
|
@@ -740,10 +950,12 @@ var Rec;
|
|
|
740
950
|
return result;
|
|
741
951
|
};
|
|
742
952
|
Rec2.filter = (predicate) => (data) => {
|
|
743
|
-
const
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
953
|
+
const keys2 = Object.keys(data);
|
|
954
|
+
const vals = Object.values(data);
|
|
955
|
+
const result = Object.create(Object.getPrototypeOf(data));
|
|
956
|
+
for (let i = 0; i < keys2.length; i++) {
|
|
957
|
+
if (predicate(vals[i])) {
|
|
958
|
+
Object.defineProperty(result, keys2[i], { value: vals[i], writable: true, enumerable: true, configurable: true });
|
|
747
959
|
}
|
|
748
960
|
}
|
|
749
961
|
return result;
|
|
@@ -873,6 +1085,13 @@ var Str;
|
|
|
873
1085
|
return isNaN(n) ? Maybe.none() : Maybe.some(n);
|
|
874
1086
|
}
|
|
875
1087
|
};
|
|
1088
|
+
Str2.parseJson = (s) => {
|
|
1089
|
+
try {
|
|
1090
|
+
return Result.ok(JSON.parse(s));
|
|
1091
|
+
} catch (error) {
|
|
1092
|
+
return Result.err(error);
|
|
1093
|
+
}
|
|
1094
|
+
};
|
|
876
1095
|
})(Str || (Str = {}));
|
|
877
1096
|
|
|
878
1097
|
// src/Utils/Uniq.ts
|
|
@@ -886,20 +1105,28 @@ var Uniq;
|
|
|
886
1105
|
Uniq2.isEmpty = (s) => s.size === 0;
|
|
887
1106
|
Uniq2.isSubsetOf = (other) => (s) => {
|
|
888
1107
|
const set = s;
|
|
889
|
-
if (typeof set.isSubsetOf === "function")
|
|
1108
|
+
if (typeof set.isSubsetOf === "function") {
|
|
1109
|
+
return set.isSubsetOf(other);
|
|
1110
|
+
}
|
|
890
1111
|
for (const item of s) {
|
|
891
|
-
if (!other.has(item))
|
|
1112
|
+
if (!other.has(item)) {
|
|
1113
|
+
return false;
|
|
1114
|
+
}
|
|
892
1115
|
}
|
|
893
1116
|
return true;
|
|
894
1117
|
};
|
|
895
1118
|
Uniq2.insert = (item) => (s) => {
|
|
896
|
-
if (s.has(item))
|
|
1119
|
+
if (s.has(item)) {
|
|
1120
|
+
return s;
|
|
1121
|
+
}
|
|
897
1122
|
const result = new globalThis.Set(s);
|
|
898
1123
|
result.add(item);
|
|
899
1124
|
return result;
|
|
900
1125
|
};
|
|
901
1126
|
Uniq2.remove = (item) => (s) => {
|
|
902
|
-
if (!s.has(item))
|
|
1127
|
+
if (!s.has(item)) {
|
|
1128
|
+
return s;
|
|
1129
|
+
}
|
|
903
1130
|
const result = new globalThis.Set(s);
|
|
904
1131
|
result.delete(item);
|
|
905
1132
|
return result;
|
|
@@ -914,29 +1141,47 @@ var Uniq;
|
|
|
914
1141
|
Uniq2.filter = (predicate) => (s) => {
|
|
915
1142
|
const result = new globalThis.Set();
|
|
916
1143
|
for (const item of s) {
|
|
917
|
-
if (predicate(item))
|
|
1144
|
+
if (predicate(item)) {
|
|
1145
|
+
result.add(item);
|
|
1146
|
+
}
|
|
918
1147
|
}
|
|
919
1148
|
return result;
|
|
920
1149
|
};
|
|
921
1150
|
Uniq2.union = (other) => (s) => {
|
|
922
1151
|
const set = s;
|
|
923
|
-
if (typeof set.union === "function")
|
|
1152
|
+
if (typeof set.union === "function") {
|
|
1153
|
+
return set.union(other);
|
|
1154
|
+
}
|
|
924
1155
|
const result = new globalThis.Set(s);
|
|
925
|
-
for (const item of other)
|
|
1156
|
+
for (const item of other) {
|
|
1157
|
+
result.add(item);
|
|
1158
|
+
}
|
|
926
1159
|
return result;
|
|
927
1160
|
};
|
|
928
1161
|
Uniq2.intersection = (other) => (s) => {
|
|
929
1162
|
const set = s;
|
|
930
|
-
if (typeof set.intersection === "function")
|
|
1163
|
+
if (typeof set.intersection === "function") {
|
|
1164
|
+
return set.intersection(other);
|
|
1165
|
+
}
|
|
931
1166
|
const result = new globalThis.Set();
|
|
932
|
-
for (const item of s)
|
|
1167
|
+
for (const item of s) {
|
|
1168
|
+
if (other.has(item)) {
|
|
1169
|
+
result.add(item);
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
933
1172
|
return result;
|
|
934
1173
|
};
|
|
935
1174
|
Uniq2.difference = (other) => (s) => {
|
|
936
1175
|
const set = s;
|
|
937
|
-
if (typeof set.difference === "function")
|
|
1176
|
+
if (typeof set.difference === "function") {
|
|
1177
|
+
return set.difference(other);
|
|
1178
|
+
}
|
|
938
1179
|
const result = new globalThis.Set();
|
|
939
|
-
for (const item of s)
|
|
1180
|
+
for (const item of s) {
|
|
1181
|
+
if (!other.has(item)) {
|
|
1182
|
+
result.add(item);
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
940
1185
|
return result;
|
|
941
1186
|
};
|
|
942
1187
|
Uniq2.reduce = (init, f) => (s) => {
|