@nlozgachev/pipelined 0.42.0 → 0.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/InternalTypes-DsCqxWZm.d.mts +118 -0
- package/dist/InternalTypes-DuzMFAfJ.d.ts +118 -0
- package/dist/{Task-BprUabHP.d.mts → Validation-BOPLiDqa.d.ts} +875 -111
- package/dist/{Task-Dt3ZMen6.d.ts → Validation-Do6uWLLZ.d.mts} +875 -111
- package/dist/{chunk-GBB6LVLI.mjs → chunk-74JKKJ4R.mjs} +0 -4
- package/dist/{chunk-OAP765G3.mjs → chunk-CHRXZIJU.mjs} +177 -135
- package/dist/{chunk-6VYLZTAM.mjs → chunk-W6RWKBDX.mjs} +157 -69
- package/dist/{chunk-F6SBU7GB.mjs → chunk-X6XQX3OZ.mjs} +3 -3
- package/dist/composition.d.mts +45 -44
- package/dist/composition.d.ts +45 -44
- package/dist/composition.js +2 -2
- package/dist/composition.mjs +2 -2
- package/dist/core.d.mts +10 -812
- package/dist/core.d.ts +10 -812
- package/dist/core.js +175 -137
- package/dist/core.mjs +2 -8
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +331 -208
- package/dist/index.mjs +5 -13
- package/dist/types.d.mts +112 -17
- package/dist/types.d.ts +112 -17
- package/dist/types.js +2 -7
- package/dist/types.mjs +3 -5
- package/dist/utils.d.mts +345 -89
- package/dist/utils.d.ts +345 -89
- package/dist/utils.js +429 -107
- package/dist/utils.mjs +3 -3
- package/package.json +2 -2
- package/dist/Duration-BTeT9D-q.d.mts +0 -127
- package/dist/Duration-BTeT9D-q.d.ts +0 -127
package/dist/utils.js
CHANGED
|
@@ -111,74 +111,227 @@ var Duration;
|
|
|
111
111
|
Duration2.subtract = (other) => (self) => wrap(Brand.unwrap(self) - Brand.unwrap(other));
|
|
112
112
|
})(Duration || (Duration = {}));
|
|
113
113
|
|
|
114
|
-
// src/Types/NonEmptyList.ts
|
|
115
|
-
var isNonEmptyList = (list) => list.length > 0;
|
|
116
|
-
|
|
117
114
|
// src/Core/Result.ts
|
|
118
115
|
var Result;
|
|
119
|
-
((
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
116
|
+
((Result3) => {
|
|
117
|
+
Result3.ok = (value) => ({ kind: "Ok", value });
|
|
118
|
+
Result3.err = (e) => ({ kind: "Err", error: e });
|
|
119
|
+
Result3.isOk = (data) => data.kind === "Ok";
|
|
120
|
+
Result3.isErr = (data) => data.kind === "Err";
|
|
121
|
+
Result3.tryCatch = (f, onError) => {
|
|
125
122
|
try {
|
|
126
|
-
return (0,
|
|
123
|
+
return (0, Result3.ok)(f());
|
|
127
124
|
} catch (error) {
|
|
128
|
-
return (0,
|
|
125
|
+
return (0, Result3.err)(onError(error));
|
|
129
126
|
}
|
|
130
127
|
};
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if ((0,
|
|
128
|
+
Result3.map = (f) => (data) => (0, Result3.isOk)(data) ? (0, Result3.ok)(f(data.value)) : data;
|
|
129
|
+
Result3.mapError = (f) => (data) => (0, Result3.isErr)(data) ? (0, Result3.err)(f(data.error)) : data;
|
|
130
|
+
Result3.chain = (f) => (data) => (0, Result3.isOk)(data) ? f(data.value) : data;
|
|
131
|
+
Result3.fold = (onErr, onOk) => (data) => (0, Result3.isOk)(data) ? onOk(data.value) : onErr(data.error);
|
|
132
|
+
Result3.match = (cases) => (data) => (0, Result3.isOk)(data) ? cases.ok(data.value) : cases.err(data.error);
|
|
133
|
+
Result3.getOrElse = (defaultValue) => (data) => (0, Result3.isOk)(data) ? data.value : defaultValue();
|
|
134
|
+
Result3.tap = (f) => (data) => {
|
|
135
|
+
if ((0, Result3.isOk)(data)) {
|
|
139
136
|
f(data.value);
|
|
140
137
|
}
|
|
141
138
|
return data;
|
|
142
139
|
};
|
|
143
|
-
|
|
144
|
-
if ((0,
|
|
140
|
+
Result3.tapError = (f) => (data) => {
|
|
141
|
+
if ((0, Result3.isErr)(data)) {
|
|
145
142
|
f(data.error);
|
|
146
143
|
}
|
|
147
144
|
return data;
|
|
148
145
|
};
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
146
|
+
Result3.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Result3.ok)(a) : (0, Result3.err)(onFalse(a));
|
|
147
|
+
Result3.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Result3.err)(onNull()) : (0, Result3.ok)(value);
|
|
148
|
+
Result3.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Result3.err)(onNone()) : (0, Result3.ok)(maybe.value);
|
|
149
|
+
Result3.fromThrowable = (f, onError) => (...args) => {
|
|
153
150
|
try {
|
|
154
|
-
return (0,
|
|
151
|
+
return (0, Result3.ok)(f(...args));
|
|
155
152
|
} catch (error) {
|
|
156
|
-
return (0,
|
|
153
|
+
return (0, Result3.err)(onError(error));
|
|
157
154
|
}
|
|
158
155
|
};
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
(a) => (0,
|
|
156
|
+
Result3.recover = (fallback) => (data) => (0, Result3.isOk)(data) ? data : fallback(data.error);
|
|
157
|
+
Result3.recoverUnless = (isBlocked, fallback) => (data) => (0, Result3.isErr)(data) && !isBlocked(data.error) ? fallback() : data;
|
|
158
|
+
Result3.toMaybe = (data) => (0, Result3.isOk)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
159
|
+
Result3.ap = (arg) => (data) => (0, Result3.isOk)(data) && (0, Result3.isOk)(arg) ? (0, Result3.ok)(data.value(arg.value)) : (0, Result3.isErr)(data) ? data : arg;
|
|
160
|
+
Result3.bindTo = (key) => (data) => (0, Result3.map)((a) => ({ [key]: a }))(data);
|
|
161
|
+
Result3.bind = (key, f) => (data) => (0, Result3.chain)(
|
|
162
|
+
(a) => (0, Result3.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
166
163
|
)(data);
|
|
167
|
-
|
|
164
|
+
Result3.struct = (fields) => {
|
|
168
165
|
const result = {};
|
|
169
166
|
for (const key in fields) {
|
|
170
167
|
if (Object.hasOwn(fields, key)) {
|
|
171
168
|
const res = fields[key];
|
|
172
|
-
if ((0,
|
|
169
|
+
if ((0, Result3.isErr)(res)) {
|
|
173
170
|
return res;
|
|
174
171
|
}
|
|
175
172
|
result[key] = res.value;
|
|
176
173
|
}
|
|
177
174
|
}
|
|
178
|
-
return (0,
|
|
175
|
+
return (0, Result3.ok)(result);
|
|
179
176
|
};
|
|
180
177
|
})(Result || (Result = {}));
|
|
181
178
|
|
|
179
|
+
// src/Core/TaskMaybe.ts
|
|
180
|
+
var TaskMaybe;
|
|
181
|
+
((TaskMaybe2) => {
|
|
182
|
+
TaskMaybe2.some = (value) => Task.resolve(Maybe.some(value));
|
|
183
|
+
TaskMaybe2.none = () => Task.resolve(Maybe.none());
|
|
184
|
+
TaskMaybe2.fromMaybe = (option) => Task.resolve(option);
|
|
185
|
+
TaskMaybe2.fromNullable = (value) => Task.resolve(Maybe.fromNullable(value));
|
|
186
|
+
TaskMaybe2.fromResult = (result) => Task.resolve(Result.toMaybe(result));
|
|
187
|
+
TaskMaybe2.fromTask = (task) => Task.map(Maybe.some)(task);
|
|
188
|
+
TaskMaybe2.tryCatch = (f) => Task.from((signal) => Promise.resolve(f(signal)).then(Maybe.some).catch(() => Maybe.none()));
|
|
189
|
+
TaskMaybe2.map = (f) => (data) => Task.map(Maybe.map(f))(data);
|
|
190
|
+
TaskMaybe2.chain = (f) => (data) => Task.chain((option) => Maybe.isSome(option) ? f(option.value) : Task.resolve(Maybe.none()))(data);
|
|
191
|
+
TaskMaybe2.ap = (arg) => (data) => Task.from(
|
|
192
|
+
(signal) => Promise.all([Deferred.toPromise(data(signal)), Deferred.toPromise(arg(signal))]).then(
|
|
193
|
+
([of_, oa]) => Maybe.ap(oa)(of_)
|
|
194
|
+
)
|
|
195
|
+
);
|
|
196
|
+
TaskMaybe2.fold = (onNone, onSome) => (data) => Task.map(Maybe.fold(onNone, onSome))(data);
|
|
197
|
+
TaskMaybe2.match = (cases) => (data) => Task.map(Maybe.match(cases))(data);
|
|
198
|
+
TaskMaybe2.getOrElse = (defaultValue) => (data) => Task.map(Maybe.getOrElse(defaultValue))(data);
|
|
199
|
+
TaskMaybe2.tap = (f) => (data) => Task.map(Maybe.tap(f))(data);
|
|
200
|
+
TaskMaybe2.filter = (predicate) => (data) => Task.map(Maybe.filter(predicate))(data);
|
|
201
|
+
TaskMaybe2.toResult = (onNone) => (data) => Task.map(Maybe.toResult(onNone))(data);
|
|
202
|
+
TaskMaybe2.bindTo = (key) => (data) => (0, TaskMaybe2.map)((a) => ({ [key]: a }))(data);
|
|
203
|
+
TaskMaybe2.bind = (key, f) => (data) => (0, TaskMaybe2.chain)(
|
|
204
|
+
(a) => (0, TaskMaybe2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
205
|
+
)(data);
|
|
206
|
+
TaskMaybe2.recover = (fallback) => (data) => Task.chain((maybe) => Maybe.isNone(maybe) ? fallback() : Task.resolve(maybe))(data);
|
|
207
|
+
TaskMaybe2.struct = (fields) => Task.from((signal) => {
|
|
208
|
+
const keys = Object.keys(fields);
|
|
209
|
+
const promises = keys.map((key) => Deferred.toPromise(fields[key](signal)));
|
|
210
|
+
return Promise.all(promises).then((results) => {
|
|
211
|
+
const record = {};
|
|
212
|
+
for (let i = 0; i < keys.length; i++) {
|
|
213
|
+
const res = results[i];
|
|
214
|
+
if (Maybe.isNone(res)) {
|
|
215
|
+
return res;
|
|
216
|
+
}
|
|
217
|
+
record[keys[i]] = res.value;
|
|
218
|
+
}
|
|
219
|
+
return Maybe.some(record);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
})(TaskMaybe || (TaskMaybe = {}));
|
|
223
|
+
|
|
224
|
+
// src/Core/TaskResult.ts
|
|
225
|
+
var TaskResult;
|
|
226
|
+
((TaskResult2) => {
|
|
227
|
+
TaskResult2.ok = (value) => Task.resolve(Result.ok(value));
|
|
228
|
+
TaskResult2.err = (error) => Task.resolve(Result.err(error));
|
|
229
|
+
TaskResult2.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Result.err(onNull()) : Result.ok(value));
|
|
230
|
+
TaskResult2.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Result.err(onNone()) : Result.ok(maybe.value));
|
|
231
|
+
TaskResult2.fromResult = (result) => Task.resolve(result);
|
|
232
|
+
TaskResult2.fromThrowable = (f, onError) => (...args) => Task.from(() => f(...args).then(Result.ok).catch((error) => Result.err(onError(error))));
|
|
233
|
+
TaskResult2.tryCatch = (f, onError) => Task.from((signal) => Promise.resolve(f(signal)).then(Result.ok).catch((error) => Result.err(onError(error))));
|
|
234
|
+
TaskResult2.map = (f) => (data) => Task.map(Result.map(f))(data);
|
|
235
|
+
TaskResult2.mapError = (f) => (data) => Task.map(Result.mapError(f))(data);
|
|
236
|
+
TaskResult2.chain = (f) => (data) => Task.chain((result) => Result.isOk(result) ? f(result.value) : Task.resolve(Result.err(result.error)))(
|
|
237
|
+
data
|
|
238
|
+
);
|
|
239
|
+
TaskResult2.fold = (onErr, onOk) => (data) => Task.map(Result.fold(onErr, onOk))(data);
|
|
240
|
+
TaskResult2.match = (cases) => (data) => Task.map(Result.match(cases))(data);
|
|
241
|
+
TaskResult2.recover = (fallback) => (data) => Task.chain(
|
|
242
|
+
(result) => Result.isErr(result) ? fallback(result.error) : Task.resolve(result)
|
|
243
|
+
)(data);
|
|
244
|
+
TaskResult2.getOrElse = (defaultValue) => (data) => Task.map(Result.getOrElse(defaultValue))(data);
|
|
245
|
+
TaskResult2.tap = (f) => (data) => Task.map(Result.tap(f))(data);
|
|
246
|
+
TaskResult2.tapError = (f) => (data) => Task.map(Result.tapError(f))(data);
|
|
247
|
+
TaskResult2.ap = (arg) => (data) => Task.from(
|
|
248
|
+
(signal) => Promise.all([Deferred.toPromise(data(signal)), Deferred.toPromise(arg(signal))]).then(
|
|
249
|
+
([of_, oa]) => Result.ap(oa)(of_)
|
|
250
|
+
)
|
|
251
|
+
);
|
|
252
|
+
TaskResult2.run = (signal) => (task) => task(signal);
|
|
253
|
+
TaskResult2.bindTo = (key) => (data) => (0, TaskResult2.map)((a) => ({ [key]: a }))(data);
|
|
254
|
+
TaskResult2.bind = (key, f) => (data) => (0, TaskResult2.chain)(
|
|
255
|
+
(a) => (0, TaskResult2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
256
|
+
)(data);
|
|
257
|
+
TaskResult2.struct = (fields) => Task.from((signal) => {
|
|
258
|
+
const keys = Object.keys(fields);
|
|
259
|
+
const promises = keys.map((key) => Deferred.toPromise(fields[key](signal)));
|
|
260
|
+
return Promise.all(promises).then((results) => {
|
|
261
|
+
const record = {};
|
|
262
|
+
for (let i = 0; i < keys.length; i++) {
|
|
263
|
+
const res = results[i];
|
|
264
|
+
if (Result.isErr(res)) {
|
|
265
|
+
return res;
|
|
266
|
+
}
|
|
267
|
+
record[keys[i]] = res.value;
|
|
268
|
+
}
|
|
269
|
+
return Result.ok(record);
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
})(TaskResult || (TaskResult = {}));
|
|
273
|
+
|
|
274
|
+
// src/internal/InternalTypes.ts
|
|
275
|
+
var isNonEmptyArr = (list) => list.length > 0;
|
|
276
|
+
|
|
277
|
+
// src/Core/TaskValidation.ts
|
|
278
|
+
var TaskValidation;
|
|
279
|
+
((TaskValidation2) => {
|
|
280
|
+
TaskValidation2.passed = (value) => Task.resolve(Validation.passed(value));
|
|
281
|
+
TaskValidation2.failed = (error) => Task.resolve(Validation.failed(error));
|
|
282
|
+
TaskValidation2.failedAll = (errors) => Task.resolve(Validation.failedAll(errors));
|
|
283
|
+
TaskValidation2.fromValidation = (validation) => Task.resolve(validation);
|
|
284
|
+
TaskValidation2.fromNullable = (onNull) => (value) => Task.resolve(value === null || value === void 0 ? Validation.failed(onNull()) : Validation.passed(value));
|
|
285
|
+
TaskValidation2.fromMaybe = (onNone) => (maybe) => Task.resolve(Maybe.isNone(maybe) ? Validation.failed(onNone()) : Validation.passed(maybe.value));
|
|
286
|
+
TaskValidation2.fromResult = (result) => Task.resolve(Validation.fromResult(result));
|
|
287
|
+
TaskValidation2.tryCatch = (f, onError) => Task.from(
|
|
288
|
+
(signal) => Promise.resolve(f(signal)).then(Validation.passed).catch((error) => Validation.failed(onError(error)))
|
|
289
|
+
);
|
|
290
|
+
TaskValidation2.map = (f) => (data) => Task.map(Validation.map(f))(data);
|
|
291
|
+
TaskValidation2.ap = (arg) => (data) => Task.from(
|
|
292
|
+
(signal) => Promise.all([Deferred.toPromise(data(signal)), Deferred.toPromise(arg(signal))]).then(
|
|
293
|
+
([vf, va]) => Validation.ap(va)(vf)
|
|
294
|
+
)
|
|
295
|
+
);
|
|
296
|
+
TaskValidation2.fold = (onFailed, onPassed) => (data) => Task.map(Validation.fold(onFailed, onPassed))(data);
|
|
297
|
+
TaskValidation2.match = (cases) => (data) => Task.map(Validation.match(cases))(data);
|
|
298
|
+
TaskValidation2.getOrElse = (defaultValue) => (data) => Task.map(Validation.getOrElse(defaultValue))(data);
|
|
299
|
+
TaskValidation2.tap = (f) => (data) => Task.map(Validation.tap(f))(data);
|
|
300
|
+
TaskValidation2.recover = (fallback) => (data) => Task.chain(
|
|
301
|
+
(validation) => Validation.isPassed(validation) ? Task.resolve(validation) : fallback(validation.errors)
|
|
302
|
+
)(data);
|
|
303
|
+
TaskValidation2.product = (first, second) => Task.from(
|
|
304
|
+
(signal) => Promise.all([Deferred.toPromise(first(signal)), Deferred.toPromise(second(signal))]).then(
|
|
305
|
+
([va, vb]) => Validation.product(va, vb)
|
|
306
|
+
)
|
|
307
|
+
);
|
|
308
|
+
TaskValidation2.productAll = (data) => Task.from(
|
|
309
|
+
(signal) => Promise.all(data.map((t) => Deferred.toPromise(t(signal)))).then((results) => {
|
|
310
|
+
const [first, ...rest] = results;
|
|
311
|
+
return Validation.productAll([first, ...rest]);
|
|
312
|
+
})
|
|
313
|
+
);
|
|
314
|
+
TaskValidation2.mapError = (f) => (data) => Task.map(Validation.mapError(f))(data);
|
|
315
|
+
TaskValidation2.tapError = (f) => (data) => Task.map(Validation.tapError(f))(data);
|
|
316
|
+
TaskValidation2.struct = (fields) => Task.from((signal) => {
|
|
317
|
+
const keys = Object.keys(fields);
|
|
318
|
+
const promises = keys.map((key) => Deferred.toPromise(fields[key](signal)));
|
|
319
|
+
return Promise.all(promises).then((results) => {
|
|
320
|
+
const record = {};
|
|
321
|
+
const errors = [];
|
|
322
|
+
for (let i = 0; i < keys.length; i++) {
|
|
323
|
+
const res = results[i];
|
|
324
|
+
if (Validation.isPassed(res)) {
|
|
325
|
+
record[keys[i]] = res.value;
|
|
326
|
+
} else {
|
|
327
|
+
errors.push(...res.errors);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return isNonEmptyArr(errors) ? Validation.failedAll(errors) : Validation.passed(record);
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
})(TaskValidation || (TaskValidation = {}));
|
|
334
|
+
|
|
182
335
|
// src/Core/Task.ts
|
|
183
336
|
var toPromise = (task, signal) => Deferred.toPromise(task(signal));
|
|
184
337
|
var getMs = (duration) => Duration.toMilliseconds(duration);
|
|
@@ -335,14 +488,16 @@ var Task;
|
|
|
335
488
|
Task2.timeout = (duration, onTimeout) => (task) => (0, Task2.from)((outerSignal) => {
|
|
336
489
|
const controller = new AbortController();
|
|
337
490
|
let timerId;
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
}
|
|
342
|
-
function onOuterAbort() {
|
|
491
|
+
let cleanUp = () => {
|
|
492
|
+
};
|
|
493
|
+
const onOuterAbort = () => {
|
|
343
494
|
cleanUp();
|
|
344
495
|
controller.abort();
|
|
345
|
-
}
|
|
496
|
+
};
|
|
497
|
+
cleanUp = () => {
|
|
498
|
+
clearTimeout(timerId);
|
|
499
|
+
outerSignal?.removeEventListener("abort", onOuterAbort);
|
|
500
|
+
};
|
|
346
501
|
if (outerSignal) {
|
|
347
502
|
if (outerSignal.aborted) {
|
|
348
503
|
controller.abort();
|
|
@@ -387,9 +542,148 @@ var Task;
|
|
|
387
542
|
Task2.bind = (key, f) => (data) => (0, Task2.chain)(
|
|
388
543
|
(a) => (0, Task2.map)((b) => ({ ...a, [key]: b }))(f(a))
|
|
389
544
|
)(data);
|
|
545
|
+
Task2.Maybe = TaskMaybe;
|
|
546
|
+
Task2.Result = TaskResult;
|
|
547
|
+
Task2.Validation = TaskValidation;
|
|
390
548
|
})(Task || (Task = {}));
|
|
391
549
|
|
|
550
|
+
// src/Core/Validation.ts
|
|
551
|
+
var Validation;
|
|
552
|
+
((Validation2) => {
|
|
553
|
+
Validation2.passed = (value) => ({ kind: "Passed", value });
|
|
554
|
+
Validation2.failed = (error) => ({ kind: "Failed", errors: [error] });
|
|
555
|
+
Validation2.failedAll = (errors) => ({ kind: "Failed", errors });
|
|
556
|
+
Validation2.isPassed = (data) => data.kind === "Passed";
|
|
557
|
+
Validation2.isFailed = (data) => data.kind === "Failed";
|
|
558
|
+
Validation2.fromPredicate = (pred, onFalse) => (a) => pred(a) ? (0, Validation2.passed)(a) : (0, Validation2.failed)(onFalse(a));
|
|
559
|
+
Validation2.fromNullable = (onNull) => (value) => value === null || value === void 0 ? (0, Validation2.failed)(onNull()) : (0, Validation2.passed)(value);
|
|
560
|
+
Validation2.fromMaybe = (onNone) => (maybe) => Maybe.isNone(maybe) ? (0, Validation2.failed)(onNone()) : (0, Validation2.passed)(maybe.value);
|
|
561
|
+
Validation2.map = (f) => (data) => (0, Validation2.isPassed)(data) ? (0, Validation2.passed)(f(data.value)) : data;
|
|
562
|
+
Validation2.mapError = (f) => (data) => (0, Validation2.isFailed)(data) ? (0, Validation2.failedAll)(data.errors.map(f)) : data;
|
|
563
|
+
Validation2.ap = (arg) => (data) => {
|
|
564
|
+
if ((0, Validation2.isPassed)(data)) {
|
|
565
|
+
return (0, Validation2.isPassed)(arg) ? (0, Validation2.passed)(data.value(arg.value)) : (0, Validation2.failedAll)(arg.errors);
|
|
566
|
+
}
|
|
567
|
+
return (0, Validation2.isPassed)(arg) ? (0, Validation2.failedAll)(data.errors) : (0, Validation2.failedAll)([...data.errors, ...arg.errors]);
|
|
568
|
+
};
|
|
569
|
+
Validation2.fold = (onFailed, onPassed) => (data) => (0, Validation2.isPassed)(data) ? onPassed(data.value) : onFailed(data.errors);
|
|
570
|
+
Validation2.match = (cases) => (data) => (0, Validation2.isPassed)(data) ? cases.passed(data.value) : cases.failed(data.errors);
|
|
571
|
+
Validation2.getOrElse = (defaultValue) => (data) => (0, Validation2.isPassed)(data) ? data.value : defaultValue();
|
|
572
|
+
Validation2.tap = (f) => (data) => {
|
|
573
|
+
if ((0, Validation2.isPassed)(data)) {
|
|
574
|
+
f(data.value);
|
|
575
|
+
}
|
|
576
|
+
return data;
|
|
577
|
+
};
|
|
578
|
+
Validation2.tapError = (f) => (data) => {
|
|
579
|
+
if ((0, Validation2.isFailed)(data)) {
|
|
580
|
+
f(data.errors);
|
|
581
|
+
}
|
|
582
|
+
return data;
|
|
583
|
+
};
|
|
584
|
+
Validation2.recover = (fallback) => (data) => (0, Validation2.isPassed)(data) ? data : fallback(data.errors);
|
|
585
|
+
Validation2.recoverUnless = (isBlocked, fallback) => (data) => (0, Validation2.isFailed)(data) && !data.errors.some(isBlocked) ? fallback() : data;
|
|
586
|
+
Validation2.toResult = (data) => (0, Validation2.isPassed)(data) ? Result.ok(data.value) : Result.err(data.errors);
|
|
587
|
+
Validation2.toMaybe = (data) => (0, Validation2.isPassed)(data) ? Maybe.some(data.value) : Maybe.none();
|
|
588
|
+
Validation2.fromResult = (data) => data.kind === "Ok" ? (0, Validation2.passed)(data.value) : (0, Validation2.failed)(data.error);
|
|
589
|
+
Validation2.product = (first, second) => {
|
|
590
|
+
if ((0, Validation2.isPassed)(first)) {
|
|
591
|
+
return (0, Validation2.isPassed)(second) ? (0, Validation2.passed)([first.value, second.value]) : (0, Validation2.failedAll)(second.errors);
|
|
592
|
+
}
|
|
593
|
+
return (0, Validation2.isPassed)(second) ? (0, Validation2.failedAll)(first.errors) : (0, Validation2.failedAll)([...first.errors, ...second.errors]);
|
|
594
|
+
};
|
|
595
|
+
Validation2.productAll = (data) => {
|
|
596
|
+
const values = [];
|
|
597
|
+
const errors = [];
|
|
598
|
+
for (const v of data) {
|
|
599
|
+
if ((0, Validation2.isPassed)(v)) {
|
|
600
|
+
values.push(v.value);
|
|
601
|
+
} else {
|
|
602
|
+
errors.push(...v.errors);
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
return isNonEmptyArr(errors) ? (0, Validation2.failedAll)(errors) : (0, Validation2.passed)(values);
|
|
606
|
+
};
|
|
607
|
+
Validation2.struct = (fields) => {
|
|
608
|
+
const record = {};
|
|
609
|
+
const errors = [];
|
|
610
|
+
for (const key in fields) {
|
|
611
|
+
if (Object.hasOwn(fields, key)) {
|
|
612
|
+
const val = fields[key];
|
|
613
|
+
if ((0, Validation2.isPassed)(val)) {
|
|
614
|
+
record[key] = val.value;
|
|
615
|
+
} else {
|
|
616
|
+
errors.push(...val.errors);
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
return isNonEmptyArr(errors) ? (0, Validation2.failedAll)(errors) : (0, Validation2.passed)(record);
|
|
621
|
+
};
|
|
622
|
+
})(Validation || (Validation = {}));
|
|
623
|
+
|
|
392
624
|
// src/Data/Arr.ts
|
|
625
|
+
var ArrMaybe;
|
|
626
|
+
((ArrMaybe2) => {
|
|
627
|
+
ArrMaybe2.traverse = (f) => (data) => {
|
|
628
|
+
const n = data.length;
|
|
629
|
+
const result = new Array(n);
|
|
630
|
+
for (let i = 0; i < n; i++) {
|
|
631
|
+
const mapped = f(data[i]);
|
|
632
|
+
if (mapped.kind === "None") {
|
|
633
|
+
return Maybe.none();
|
|
634
|
+
}
|
|
635
|
+
result[i] = mapped.value;
|
|
636
|
+
}
|
|
637
|
+
return Maybe.some(result);
|
|
638
|
+
};
|
|
639
|
+
ArrMaybe2.sequence = (data) => (0, ArrMaybe2.traverse)((a) => a)(data);
|
|
640
|
+
})(ArrMaybe || (ArrMaybe = {}));
|
|
641
|
+
var ArrResult;
|
|
642
|
+
((ArrResult2) => {
|
|
643
|
+
ArrResult2.traverse = (f) => (data) => {
|
|
644
|
+
const n = data.length;
|
|
645
|
+
const result = new Array(n);
|
|
646
|
+
for (let i = 0; i < n; i++) {
|
|
647
|
+
const mapped = f(data[i]);
|
|
648
|
+
if (mapped.kind === "Err") {
|
|
649
|
+
return mapped;
|
|
650
|
+
}
|
|
651
|
+
result[i] = mapped.value;
|
|
652
|
+
}
|
|
653
|
+
return Result.ok(result);
|
|
654
|
+
};
|
|
655
|
+
ArrResult2.sequence = (data) => (0, ArrResult2.traverse)((a) => a)(data);
|
|
656
|
+
})(ArrResult || (ArrResult = {}));
|
|
657
|
+
var ArrTaskResult;
|
|
658
|
+
((ArrTaskResult2) => {
|
|
659
|
+
ArrTaskResult2.traverse = (f) => (data) => Task.from(async () => {
|
|
660
|
+
const result = [];
|
|
661
|
+
for (const a of data) {
|
|
662
|
+
const r = await Deferred.toPromise(f(a)());
|
|
663
|
+
if (Result.isErr(r)) {
|
|
664
|
+
return r;
|
|
665
|
+
}
|
|
666
|
+
result.push(r.value);
|
|
667
|
+
}
|
|
668
|
+
return Result.ok(result);
|
|
669
|
+
});
|
|
670
|
+
ArrTaskResult2.sequence = (data) => (0, ArrTaskResult2.traverse)((a) => a)(data);
|
|
671
|
+
})(ArrTaskResult || (ArrTaskResult = {}));
|
|
672
|
+
var ArrTask;
|
|
673
|
+
((ArrTask2) => {
|
|
674
|
+
ArrTask2.traverse = (f) => (data) => Task.from(() => Promise.all(data.map((a) => Deferred.toPromise(f(a)()))));
|
|
675
|
+
ArrTask2.sequence = (data) => (0, ArrTask2.traverse)((a) => a)(data);
|
|
676
|
+
ArrTask2.Result = ArrTaskResult;
|
|
677
|
+
})(ArrTask || (ArrTask = {}));
|
|
678
|
+
var ArrNonEmpty;
|
|
679
|
+
((ArrNonEmpty2) => {
|
|
680
|
+
ArrNonEmpty2.singleton = (value) => [value];
|
|
681
|
+
ArrNonEmpty2.fromArray = (data) => isNonEmptyArr(data) ? Maybe.some(data) : Maybe.none();
|
|
682
|
+
ArrNonEmpty2.head = (data) => data[0];
|
|
683
|
+
ArrNonEmpty2.last = (data) => data[data.length - 1];
|
|
684
|
+
ArrNonEmpty2.tail = (data) => data.slice(1);
|
|
685
|
+
ArrNonEmpty2.reduce = (f) => (data) => data.reduce(f);
|
|
686
|
+
})(ArrNonEmpty || (ArrNonEmpty = {}));
|
|
393
687
|
var Arr;
|
|
394
688
|
((Arr2) => {
|
|
395
689
|
Arr2.head = (data) => data.length > 0 ? Maybe.some(data[0]) : Maybe.none();
|
|
@@ -563,6 +857,7 @@ var Arr;
|
|
|
563
857
|
}
|
|
564
858
|
return result;
|
|
565
859
|
};
|
|
860
|
+
Arr2.concat = (other) => (data) => [...data, ...other];
|
|
566
861
|
Arr2.chunksOf = (n) => (data) => {
|
|
567
862
|
if (n <= 0) {
|
|
568
863
|
return [];
|
|
@@ -603,47 +898,12 @@ var Arr;
|
|
|
603
898
|
return result;
|
|
604
899
|
};
|
|
605
900
|
Arr2.reduce = (initial, f) => (data) => data.reduce(f, initial);
|
|
606
|
-
Arr2.
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
return Maybe.none();
|
|
613
|
-
}
|
|
614
|
-
result[i] = mapped.value;
|
|
615
|
-
}
|
|
616
|
-
return Maybe.some(result);
|
|
617
|
-
};
|
|
618
|
-
Arr2.traverseResult = (f) => (data) => {
|
|
619
|
-
const n = data.length;
|
|
620
|
-
const result = new Array(n);
|
|
621
|
-
for (let i = 0; i < n; i++) {
|
|
622
|
-
const mapped = f(data[i]);
|
|
623
|
-
if (mapped.kind === "Err") {
|
|
624
|
-
return mapped;
|
|
625
|
-
}
|
|
626
|
-
result[i] = mapped.value;
|
|
627
|
-
}
|
|
628
|
-
return Result.ok(result);
|
|
629
|
-
};
|
|
630
|
-
Arr2.traverseTask = (f) => (data) => Task.from(() => Promise.all(data.map((a) => Deferred.toPromise(f(a)()))));
|
|
631
|
-
Arr2.sequence = (data) => (0, Arr2.traverse)((a) => a)(data);
|
|
632
|
-
Arr2.sequenceResult = (data) => (0, Arr2.traverseResult)((a) => a)(data);
|
|
633
|
-
Arr2.sequenceTask = (data) => (0, Arr2.traverseTask)((a) => a)(data);
|
|
634
|
-
Arr2.traverseTaskResult = (f) => (data) => Task.from(async () => {
|
|
635
|
-
const result = [];
|
|
636
|
-
for (const a of data) {
|
|
637
|
-
const r = await Deferred.toPromise(f(a)());
|
|
638
|
-
if (Result.isErr(r)) {
|
|
639
|
-
return r;
|
|
640
|
-
}
|
|
641
|
-
result.push(r.value);
|
|
642
|
-
}
|
|
643
|
-
return Result.ok(result);
|
|
644
|
-
});
|
|
645
|
-
Arr2.sequenceTaskResult = (data) => (0, Arr2.traverseTaskResult)((a) => a)(data);
|
|
646
|
-
Arr2.isNonEmpty = (data) => isNonEmptyList(data);
|
|
901
|
+
Arr2.Maybe = ArrMaybe;
|
|
902
|
+
Arr2.Result = ArrResult;
|
|
903
|
+
Arr2.Task = ArrTask;
|
|
904
|
+
Arr2.isNonEmpty = (data) => isNonEmptyArr(data);
|
|
905
|
+
Arr2.prepend = (value) => (data) => [value, ...data];
|
|
906
|
+
Arr2.append = (value) => (data) => [...data, value];
|
|
647
907
|
Arr2.size = (data) => data.length;
|
|
648
908
|
Arr2.some = (predicate) => (data) => {
|
|
649
909
|
const n = data.length;
|
|
@@ -719,6 +979,7 @@ var Arr;
|
|
|
719
979
|
const i = Math.max(0, index);
|
|
720
980
|
return [data.slice(0, i), data.slice(i)];
|
|
721
981
|
};
|
|
982
|
+
Arr2.NonEmpty = ArrNonEmpty;
|
|
722
983
|
})(Arr || (Arr = {}));
|
|
723
984
|
|
|
724
985
|
// src/Data/Dict.ts
|
|
@@ -928,25 +1189,78 @@ var Num;
|
|
|
928
1189
|
})(Num || (Num = {}));
|
|
929
1190
|
|
|
930
1191
|
// src/Data/Rec.ts
|
|
1192
|
+
var _isNonEmpty = (data) => Object.keys(data).length > 0;
|
|
1193
|
+
var RecMaybe;
|
|
1194
|
+
((RecMaybe2) => {
|
|
1195
|
+
RecMaybe2.traverse = (f) => (data) => {
|
|
1196
|
+
const recordKeys = Object.keys(data);
|
|
1197
|
+
const result = {};
|
|
1198
|
+
for (let i = 0; i < recordKeys.length; i++) {
|
|
1199
|
+
const key = recordKeys[i];
|
|
1200
|
+
const maybeVal = f(data[key]);
|
|
1201
|
+
if (maybeVal.kind === "None") {
|
|
1202
|
+
return maybeVal;
|
|
1203
|
+
}
|
|
1204
|
+
Object.defineProperty(result, key, { value: maybeVal.value, writable: true, enumerable: true, configurable: true });
|
|
1205
|
+
}
|
|
1206
|
+
return { kind: "Some", value: result };
|
|
1207
|
+
};
|
|
1208
|
+
RecMaybe2.sequence = (data) => (0, RecMaybe2.traverse)((a) => a)(data);
|
|
1209
|
+
})(RecMaybe || (RecMaybe = {}));
|
|
1210
|
+
var RecResult;
|
|
1211
|
+
((RecResult2) => {
|
|
1212
|
+
RecResult2.traverse = (f) => (data) => {
|
|
1213
|
+
const recordKeys = Object.keys(data);
|
|
1214
|
+
const result = {};
|
|
1215
|
+
for (let i = 0; i < recordKeys.length; i++) {
|
|
1216
|
+
const key = recordKeys[i];
|
|
1217
|
+
const res = f(data[key]);
|
|
1218
|
+
if (res.kind === "Err") {
|
|
1219
|
+
return res;
|
|
1220
|
+
}
|
|
1221
|
+
Object.defineProperty(result, key, { value: res.value, writable: true, enumerable: true, configurable: true });
|
|
1222
|
+
}
|
|
1223
|
+
return { kind: "Ok", value: result };
|
|
1224
|
+
};
|
|
1225
|
+
RecResult2.sequence = (data) => (0, RecResult2.traverse)((a) => a)(data);
|
|
1226
|
+
})(RecResult || (RecResult = {}));
|
|
1227
|
+
var RecNonEmpty;
|
|
1228
|
+
((RecNonEmpty2) => {
|
|
1229
|
+
RecNonEmpty2.singleton = (key, value) => ({ [key]: value });
|
|
1230
|
+
RecNonEmpty2.fromRecord = (data) => _isNonEmpty(data) ? Maybe.some(data) : Maybe.none();
|
|
1231
|
+
RecNonEmpty2.keys = (data) => Object.keys(data);
|
|
1232
|
+
RecNonEmpty2.values = (data) => Object.values(data);
|
|
1233
|
+
RecNonEmpty2.entries = (data) => Object.entries(data);
|
|
1234
|
+
RecNonEmpty2.reduce = (f) => (data) => {
|
|
1235
|
+
const recordVals = Object.values(data);
|
|
1236
|
+
return recordVals.reduce(f);
|
|
1237
|
+
};
|
|
1238
|
+
})(RecNonEmpty || (RecNonEmpty = {}));
|
|
931
1239
|
var Rec;
|
|
932
1240
|
((Rec2) => {
|
|
933
|
-
Rec2.
|
|
934
|
-
|
|
935
|
-
const
|
|
1241
|
+
Rec2.isNonEmpty = _isNonEmpty;
|
|
1242
|
+
Rec2.map = (f) => ((data) => {
|
|
1243
|
+
const recordKeys = Object.keys(data);
|
|
1244
|
+
const recordValues = Object.values(data);
|
|
936
1245
|
const result = Object.create(Object.getPrototypeOf(data));
|
|
937
|
-
for (let i = 0; i <
|
|
938
|
-
Object.defineProperty(result,
|
|
1246
|
+
for (let i = 0; i < recordKeys.length; i++) {
|
|
1247
|
+
Object.defineProperty(result, recordKeys[i], {
|
|
1248
|
+
value: f(recordValues[i]),
|
|
1249
|
+
writable: true,
|
|
1250
|
+
enumerable: true,
|
|
1251
|
+
configurable: true
|
|
1252
|
+
});
|
|
939
1253
|
}
|
|
940
1254
|
return result;
|
|
941
|
-
};
|
|
1255
|
+
});
|
|
942
1256
|
Rec2.filterMap = (f) => (data) => {
|
|
943
|
-
const
|
|
944
|
-
const
|
|
1257
|
+
const recordKeys = Object.keys(data);
|
|
1258
|
+
const recordValues = Object.values(data);
|
|
945
1259
|
const result = Object.create(Object.getPrototypeOf(data));
|
|
946
|
-
for (let i = 0; i <
|
|
947
|
-
const maybeVal = f(
|
|
1260
|
+
for (let i = 0; i < recordKeys.length; i++) {
|
|
1261
|
+
const maybeVal = f(recordValues[i]);
|
|
948
1262
|
if (maybeVal.kind === "Some") {
|
|
949
|
-
Object.defineProperty(result,
|
|
1263
|
+
Object.defineProperty(result, recordKeys[i], {
|
|
950
1264
|
value: maybeVal.value,
|
|
951
1265
|
writable: true,
|
|
952
1266
|
enumerable: true,
|
|
@@ -956,27 +1270,32 @@ var Rec;
|
|
|
956
1270
|
}
|
|
957
1271
|
return result;
|
|
958
1272
|
};
|
|
959
|
-
Rec2.mapWithKey = (f) => (data) => {
|
|
960
|
-
const
|
|
961
|
-
const
|
|
1273
|
+
Rec2.mapWithKey = (f) => ((data) => {
|
|
1274
|
+
const recordKeys = Object.keys(data);
|
|
1275
|
+
const recordValues = Object.values(data);
|
|
962
1276
|
const result = Object.create(Object.getPrototypeOf(data));
|
|
963
|
-
for (let i = 0; i <
|
|
964
|
-
Object.defineProperty(result,
|
|
965
|
-
value: f(
|
|
1277
|
+
for (let i = 0; i < recordKeys.length; i++) {
|
|
1278
|
+
Object.defineProperty(result, recordKeys[i], {
|
|
1279
|
+
value: f(recordKeys[i], recordValues[i]),
|
|
966
1280
|
writable: true,
|
|
967
1281
|
enumerable: true,
|
|
968
1282
|
configurable: true
|
|
969
1283
|
});
|
|
970
1284
|
}
|
|
971
1285
|
return result;
|
|
972
|
-
};
|
|
1286
|
+
});
|
|
973
1287
|
Rec2.filter = (predicate) => (data) => {
|
|
974
|
-
const
|
|
975
|
-
const
|
|
1288
|
+
const recordKeys = Object.keys(data);
|
|
1289
|
+
const recordValues = Object.values(data);
|
|
976
1290
|
const result = Object.create(Object.getPrototypeOf(data));
|
|
977
|
-
for (let i = 0; i <
|
|
978
|
-
if (predicate(
|
|
979
|
-
Object.defineProperty(result,
|
|
1291
|
+
for (let i = 0; i < recordKeys.length; i++) {
|
|
1292
|
+
if (predicate(recordValues[i])) {
|
|
1293
|
+
Object.defineProperty(result, recordKeys[i], {
|
|
1294
|
+
value: recordValues[i],
|
|
1295
|
+
writable: true,
|
|
1296
|
+
enumerable: true,
|
|
1297
|
+
configurable: true
|
|
1298
|
+
});
|
|
980
1299
|
}
|
|
981
1300
|
}
|
|
982
1301
|
return result;
|
|
@@ -1053,6 +1372,9 @@ var Rec;
|
|
|
1053
1372
|
}
|
|
1054
1373
|
return result;
|
|
1055
1374
|
};
|
|
1375
|
+
Rec2.Maybe = RecMaybe;
|
|
1376
|
+
Rec2.Result = RecResult;
|
|
1377
|
+
Rec2.NonEmpty = RecNonEmpty;
|
|
1056
1378
|
})(Rec || (Rec = {}));
|
|
1057
1379
|
|
|
1058
1380
|
// src/Data/Str.ts
|
package/dist/utils.mjs
CHANGED
|
@@ -5,9 +5,9 @@ import {
|
|
|
5
5
|
Rec,
|
|
6
6
|
Str,
|
|
7
7
|
Uniq
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
} from "./chunk-W6RWKBDX.mjs";
|
|
9
|
+
import "./chunk-CHRXZIJU.mjs";
|
|
10
|
+
import "./chunk-74JKKJ4R.mjs";
|
|
11
11
|
export {
|
|
12
12
|
Arr,
|
|
13
13
|
Dict,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nlozgachev/pipelined",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.43.0",
|
|
4
4
|
"description": "Opinionated functional abstractions for TypeScript",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"homepage": "https://pipelined.lozgachev.dev",
|
|
@@ -77,5 +77,5 @@
|
|
|
77
77
|
"typescript": "6.0.3",
|
|
78
78
|
"vitest": "4.1.7"
|
|
79
79
|
},
|
|
80
|
-
"packageManager": "pnpm@11.
|
|
80
|
+
"packageManager": "pnpm@11.6.0+sha512.9a36518224080c6fe5165afdcfe79bfa118c29be703f3f462b1e32efe1e98e47e8750b148e08286250aad4113cc7993ca413c4e2cd447752708c2ee5751bc95f"
|
|
81
81
|
}
|