@nunofyobiz/effect-extras 2.0.0 → 3.0.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 +38 -3
- package/dist/ArrayX.d.ts +381 -0
- package/dist/ArrayX.d.ts.map +1 -0
- package/dist/ArrayX.js +493 -0
- package/dist/ArrayX.js.map +1 -0
- package/dist/BigIntX.d.ts +24 -0
- package/dist/BigIntX.d.ts.map +1 -0
- package/dist/BigIntX.js +30 -0
- package/dist/BigIntX.js.map +1 -0
- package/dist/BooleanX.d.ts +25 -0
- package/dist/BooleanX.d.ts.map +1 -0
- package/dist/BooleanX.js +25 -0
- package/dist/BooleanX.js.map +1 -0
- package/dist/DurationX.d.ts +73 -0
- package/dist/DurationX.d.ts.map +1 -0
- package/dist/DurationX.js +91 -0
- package/dist/DurationX.js.map +1 -0
- package/dist/EffectX.d.ts +120 -0
- package/dist/EffectX.d.ts.map +1 -0
- package/dist/EffectX.js +140 -0
- package/dist/EffectX.js.map +1 -0
- package/dist/FormDataX.d.ts +49 -0
- package/dist/FormDataX.d.ts.map +1 -0
- package/dist/FormDataX.js +42 -0
- package/dist/FormDataX.js.map +1 -0
- package/dist/InclusiveOr.d.ts +1123 -0
- package/dist/InclusiveOr.d.ts.map +1 -0
- package/dist/InclusiveOr.js +1074 -0
- package/dist/InclusiveOr.js.map +1 -0
- package/dist/MapX.d.ts +32 -0
- package/dist/MapX.d.ts.map +1 -0
- package/dist/MapX.js +49 -0
- package/dist/MapX.js.map +1 -0
- package/dist/NonNullableX.d.ts +174 -0
- package/dist/NonNullableX.d.ts.map +1 -0
- package/dist/NonNullableX.js +217 -0
- package/dist/NonNullableX.js.map +1 -0
- package/dist/NumberX.d.ts +178 -0
- package/dist/NumberX.d.ts.map +1 -0
- package/dist/NumberX.js +214 -0
- package/dist/NumberX.js.map +1 -0
- package/dist/OptionX.d.ts +187 -0
- package/dist/OptionX.d.ts.map +1 -0
- package/dist/OptionX.js +201 -0
- package/dist/OptionX.js.map +1 -0
- package/dist/OrderX.d.ts +32 -0
- package/dist/OrderX.d.ts.map +1 -0
- package/dist/OrderX.js +32 -0
- package/dist/OrderX.js.map +1 -0
- package/dist/PredicateX.d.ts +108 -0
- package/dist/PredicateX.d.ts.map +1 -0
- package/dist/PredicateX.js +111 -0
- package/dist/PredicateX.js.map +1 -0
- package/dist/PromiseX.d.ts +32 -0
- package/dist/PromiseX.d.ts.map +1 -0
- package/dist/PromiseX.js +32 -0
- package/dist/PromiseX.js.map +1 -0
- package/dist/RecordX.d.ts +450 -0
- package/dist/RecordX.d.ts.map +1 -0
- package/dist/RecordX.js +487 -0
- package/dist/RecordX.js.map +1 -0
- package/dist/ResultX.d.ts +50 -0
- package/dist/ResultX.d.ts.map +1 -0
- package/dist/ResultX.js +50 -0
- package/dist/ResultX.js.map +1 -0
- package/dist/SchemaX.d.ts +249 -0
- package/dist/SchemaX.d.ts.map +1 -0
- package/dist/SchemaX.js +243 -0
- package/dist/SchemaX.js.map +1 -0
- package/dist/SetX.d.ts +121 -0
- package/dist/SetX.d.ts.map +1 -0
- package/dist/SetX.js +137 -0
- package/dist/SetX.js.map +1 -0
- package/dist/StringX.d.ts +131 -0
- package/dist/StringX.d.ts.map +1 -0
- package/dist/StringX.js +149 -0
- package/dist/StringX.js.map +1 -0
- package/dist/StructX.d.ts +219 -0
- package/dist/StructX.d.ts.map +1 -0
- package/dist/StructX.js +173 -0
- package/dist/StructX.js.map +1 -0
- package/dist/WarnResult.d.ts +1191 -0
- package/dist/WarnResult.d.ts.map +1 -0
- package/dist/WarnResult.js +991 -0
- package/dist/WarnResult.js.map +1 -0
- package/dist/index.d.ts +23 -3772
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -1011
- package/dist/index.js.map +1 -1
- package/package.json +18 -5
- package/src/{ArrayX/ArrayX.ts → ArrayX.ts} +6 -88
- package/src/{DurationX/DurationX.ts → DurationX.ts} +1 -1
- package/src/InclusiveOr.ts +1255 -0
- package/src/{NonNullableX/NonNullableX.ts → NonNullableX.ts} +5 -0
- package/src/{OptionX/OptionX.ts → OptionX.ts} +8 -2
- package/src/{PredicateX/PredicateX.ts → PredicateX.ts} +41 -0
- package/src/{RecordX/RecordX.ts → RecordX.ts} +184 -2
- package/src/StringX.ts +210 -0
- package/src/{WarnResult/WarnResult.ts → WarnResult.ts} +297 -227
- package/src/index.ts +22 -20
- package/src/ArrayX/index.ts +0 -1
- package/src/BigIntX/index.ts +0 -1
- package/src/BooleanX/index.ts +0 -1
- package/src/DurationX/index.ts +0 -1
- package/src/EffectX/index.ts +0 -1
- package/src/FormDataX/index.ts +0 -1
- package/src/MapX/index.ts +0 -1
- package/src/NonNullableX/index.ts +0 -2
- package/src/NumberX/index.ts +0 -1
- package/src/OptionX/index.ts +0 -1
- package/src/OrderX/index.ts +0 -1
- package/src/PredicateX/index.ts +0 -1
- package/src/PromiseX/index.ts +0 -1
- package/src/RecordX/index.ts +0 -1
- package/src/ResultX/index.ts +0 -1
- package/src/SchemaX/index.ts +0 -1
- package/src/SetX/index.ts +0 -1
- package/src/StringX/StringX.ts +0 -97
- package/src/StringX/index.ts +0 -1
- package/src/StructX/index.ts +0 -1
- package/src/WarnResult/index.ts +0 -1
- /package/src/{BigIntX/BigIntX.ts → BigIntX.ts} +0 -0
- /package/src/{BooleanX/BooleanX.ts → BooleanX.ts} +0 -0
- /package/src/{EffectX/EffectX.ts → EffectX.ts} +0 -0
- /package/src/{FormDataX/FormDataX.ts → FormDataX.ts} +0 -0
- /package/src/{MapX/MapX.ts → MapX.ts} +0 -0
- /package/src/{NumberX/NumberX.ts → NumberX.ts} +0 -0
- /package/src/{OrderX/OrderX.ts → OrderX.ts} +0 -0
- /package/src/{PromiseX/PromiseX.ts → PromiseX.ts} +0 -0
- /package/src/{ResultX/ResultX.ts → ResultX.ts} +0 -0
- /package/src/{SchemaX/SchemaX.ts → SchemaX.ts} +0 -0
- /package/src/{SetX/SetX.ts → SetX.ts} +0 -0
- /package/src/{StructX/StructX.ts → StructX.ts} +0 -0
|
@@ -13,9 +13,8 @@ import {
|
|
|
13
13
|
pipe,
|
|
14
14
|
} from "effect";
|
|
15
15
|
import { dual, identity } from "effect/Function";
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import { ResultX } from "../ResultX";
|
|
16
|
+
import * as RecordX from "./RecordX.js";
|
|
17
|
+
import * as ResultX from "./ResultX.js";
|
|
19
18
|
|
|
20
19
|
/**
|
|
21
20
|
* Returns a shallow copy of `array` between `start` (inclusive) and `end`
|
|
@@ -47,91 +46,6 @@ export const slice = dual<
|
|
|
47
46
|
array.slice(start, end),
|
|
48
47
|
);
|
|
49
48
|
|
|
50
|
-
/**
|
|
51
|
-
* Zips two arrays into one, calling `f` with a `WarnResult` for each index so
|
|
52
|
-
* that length mismatches are handled explicitly rather than truncated.
|
|
53
|
-
*
|
|
54
|
-
* Unlike `Array.zipWith` (which stops at the shorter array), this walks to the
|
|
55
|
-
* length of the *longer* array. The first array's element fills the `warnings`
|
|
56
|
-
* side and the second array's element fills the `success` side, so at each index
|
|
57
|
-
* `f` receives a `WarnResult.WarnResult<A, B>`: `SuccessWithWarnings` when both
|
|
58
|
-
* arrays have an element, `WarningsOnly` when only the first does, and
|
|
59
|
-
* `SuccessOnly` when only the second does. Use it when the "extra" tail of either
|
|
60
|
-
* array still carries meaning.
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```ts
|
|
64
|
-
* import { ArrayX, WarnResult } from "@nunofyobiz/effect-extras"
|
|
65
|
-
*
|
|
66
|
-
* const describe = WarnResult.match({
|
|
67
|
-
* WarningsOnly: ({ warnings }) => `warnings ${warnings}`,
|
|
68
|
-
* SuccessOnly: ({ success }) => `success ${success}`,
|
|
69
|
-
* SuccessWithWarnings: ({ warnings, success }) => `both ${warnings}/${success}`,
|
|
70
|
-
* })
|
|
71
|
-
*
|
|
72
|
-
* assert.deepStrictEqual(ArrayX.zipWithWarnings([1, 2, 3], [10, 20], describe), [
|
|
73
|
-
* "both 1/10",
|
|
74
|
-
* "both 2/20",
|
|
75
|
-
* "warnings 3",
|
|
76
|
-
* ])
|
|
77
|
-
* ```
|
|
78
|
-
*
|
|
79
|
-
* @category combinators
|
|
80
|
-
* @since 0.0.0
|
|
81
|
-
*/
|
|
82
|
-
export const zipWithWarnings = dual<
|
|
83
|
-
<A, B, C>(
|
|
84
|
-
f: (ab: WarnResult.WarnResult<A, B>) => C,
|
|
85
|
-
) => (array1: readonly A[], array2: readonly B[]) => C[],
|
|
86
|
-
<A, B, C>(
|
|
87
|
-
array1: readonly A[],
|
|
88
|
-
array2: readonly B[],
|
|
89
|
-
f: (ab: WarnResult.WarnResult<A, B>) => C,
|
|
90
|
-
) => C[]
|
|
91
|
-
>(
|
|
92
|
-
3,
|
|
93
|
-
<A, B, C>(
|
|
94
|
-
array1: readonly A[],
|
|
95
|
-
array2: readonly B[],
|
|
96
|
-
f: (ab: WarnResult.WarnResult<A, B>) => C,
|
|
97
|
-
): C[] => {
|
|
98
|
-
const newLength = Math.max(array1.length, array2.length);
|
|
99
|
-
|
|
100
|
-
if (newLength === 0) {
|
|
101
|
-
return [];
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return Array.makeBy(newLength, (index) => {
|
|
105
|
-
if (index < array1.length && index < array2.length) {
|
|
106
|
-
return f(
|
|
107
|
-
WarnResult.SuccessWithWarnings({
|
|
108
|
-
warnings: array1[index],
|
|
109
|
-
success: array2[index],
|
|
110
|
-
}),
|
|
111
|
-
);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if (index < array1.length) {
|
|
115
|
-
return f(
|
|
116
|
-
WarnResult.WarningsOnly({
|
|
117
|
-
warnings: array1[index],
|
|
118
|
-
}),
|
|
119
|
-
);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (index < array2.length) {
|
|
123
|
-
return f(
|
|
124
|
-
WarnResult.SuccessOnly({
|
|
125
|
-
success: array2[index],
|
|
126
|
-
}),
|
|
127
|
-
);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
throw new Error(`Index ${index} is out of bounds for array1 and array2`);
|
|
131
|
-
});
|
|
132
|
-
},
|
|
133
|
-
);
|
|
134
|
-
|
|
135
49
|
/**
|
|
136
50
|
* Moves a unique item within an array to a new position, using a custom identification function.
|
|
137
51
|
*
|
|
@@ -181,6 +95,10 @@ const moveUniqWith = dual<
|
|
|
181
95
|
|
|
182
96
|
// Find the source item and its index
|
|
183
97
|
const sourceIndex = array.findIndex((item) => identify(item) === sourceId);
|
|
98
|
+
// Unreachable via the public API: the only caller (`insertUniq`) appends the
|
|
99
|
+
// item before delegating here, so `sourceId` is always present. Kept as a
|
|
100
|
+
// defensive no-op for direct (internal) callers.
|
|
101
|
+
/* v8 ignore next 3 */
|
|
184
102
|
if (sourceIndex < 0) {
|
|
185
103
|
return array;
|
|
186
104
|
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { DateTime, Duration, Match, Option } from "effect";
|
|
7
7
|
import { dual, pipe } from "effect/Function";
|
|
8
|
-
import
|
|
8
|
+
import * as BigIntX from "./BigIntX.js";
|
|
9
9
|
|
|
10
10
|
// Some private constants for conversion
|
|
11
11
|
const MICROS_PER_MILLI = 1000;
|