@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InclusiveOr.js","names":["Array","Data","Effect","Option","Predicate","Struct","pipe","constUndefined","dual","identity","taggedEnum","LeftOnly","RightOnly","LeftAndRight","is","$is","match","$match","WithLeft","left","right","isNotNullish","WithRight","optionFromNullables","some","none","fromNullables","orElse","Error","getOrElse","matchLeft","Left","inclusiveOr","matchRight","Right","orElseLeft","orElseRight","orUndefined","undefined","leftOrElse","orElseReturn","get","leftOrUndefined","rightOrElse","rightOrUndefined","rightOption","leftOption","mapBoth","mapLeft","mapRight","mapBothEffect","map","left2","right2","all","flatMapLeft","mapLeftEffect","succeed","flatMapLeftEffect","flatMapRight","mapRightEffect","flatMapRightEffect","zip","array1","array2","f","newLength","Math","max","length","makeBy","index"],"sources":["../src/InclusiveOr.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/MapX.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Like `Map.prototype.get`, but when the key is absent it stores the computed
|
|
3
|
+
* fallback at that key and returns it. Mutates the input map in place.
|
|
4
|
+
*
|
|
5
|
+
* Use it for memoization-style caches where a miss should both populate the map
|
|
6
|
+
* and yield the value in one step. Throws if the resolved value is nullish (only
|
|
7
|
+
* possible when `fallbackIfNotFound` returns `null`/`undefined` for a value type
|
|
8
|
+
* that admits them — treated as a programmer error). Supports both data-first and
|
|
9
|
+
* data-last (pipeable) call styles.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { MapX } from "@nunofyobiz/effect-extras"
|
|
14
|
+
* import { pipe } from "effect"
|
|
15
|
+
*
|
|
16
|
+
* // Miss: stores the fallback and returns it (data-first)
|
|
17
|
+
* const map = new Map<string, number>()
|
|
18
|
+
* assert.deepStrictEqual(MapX.getOrElseSetGet(map, "a", () => 1), 1)
|
|
19
|
+
* assert.deepStrictEqual(map.get("a"), 1)
|
|
20
|
+
*
|
|
21
|
+
* // Hit: returns the existing value, fallback is ignored (data-last)
|
|
22
|
+
* assert.deepStrictEqual(
|
|
23
|
+
* pipe(map, MapX.getOrElseSetGet("a", () => 99)),
|
|
24
|
+
* 1
|
|
25
|
+
* )
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @category combinators
|
|
29
|
+
* @since 0.0.0
|
|
30
|
+
*/
|
|
31
|
+
export declare const getOrElseSetGet: (<K, V>(key: K, fallbackIfNotFound: () => V) => (map: Map<K, V>) => V) & (<K, V>(map: Map<K, V>, key: K, fallbackIfNotFound: () => V) => V);
|
|
32
|
+
//# sourceMappingURL=MapX.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapX.d.ts","sourceRoot":"","sources":["../src/MapX.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,eAAe,IACzB,CAAC,EAAE,CAAC,OAAO,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MACnE,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,MAAM,CAAC,KAAK,CAAC,CAahE,CAAC"}
|
package/dist/MapX.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic, framework-agnostic extensions for working with `Map`.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.0.0
|
|
5
|
+
*/
|
|
6
|
+
import { Predicate } from "effect";
|
|
7
|
+
import { dual } from "effect/Function";
|
|
8
|
+
/**
|
|
9
|
+
* Like `Map.prototype.get`, but when the key is absent it stores the computed
|
|
10
|
+
* fallback at that key and returns it. Mutates the input map in place.
|
|
11
|
+
*
|
|
12
|
+
* Use it for memoization-style caches where a miss should both populate the map
|
|
13
|
+
* and yield the value in one step. Throws if the resolved value is nullish (only
|
|
14
|
+
* possible when `fallbackIfNotFound` returns `null`/`undefined` for a value type
|
|
15
|
+
* that admits them — treated as a programmer error). Supports both data-first and
|
|
16
|
+
* data-last (pipeable) call styles.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { MapX } from "@nunofyobiz/effect-extras"
|
|
21
|
+
* import { pipe } from "effect"
|
|
22
|
+
*
|
|
23
|
+
* // Miss: stores the fallback and returns it (data-first)
|
|
24
|
+
* const map = new Map<string, number>()
|
|
25
|
+
* assert.deepStrictEqual(MapX.getOrElseSetGet(map, "a", () => 1), 1)
|
|
26
|
+
* assert.deepStrictEqual(map.get("a"), 1)
|
|
27
|
+
*
|
|
28
|
+
* // Hit: returns the existing value, fallback is ignored (data-last)
|
|
29
|
+
* assert.deepStrictEqual(
|
|
30
|
+
* pipe(map, MapX.getOrElseSetGet("a", () => 99)),
|
|
31
|
+
* 1
|
|
32
|
+
* )
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @category combinators
|
|
36
|
+
* @since 0.0.0
|
|
37
|
+
*/
|
|
38
|
+
export const getOrElseSetGet = /*#__PURE__*/dual(3, (map, key, fallbackIfNotFound) => {
|
|
39
|
+
if (!map.has(key)) {
|
|
40
|
+
map.set(key, fallbackIfNotFound());
|
|
41
|
+
return fallbackIfNotFound();
|
|
42
|
+
}
|
|
43
|
+
const existingValue = map.get(key);
|
|
44
|
+
if (Predicate.isNullish(existingValue)) {
|
|
45
|
+
throw new Error(`Value is nullable: ${String(key)}`);
|
|
46
|
+
}
|
|
47
|
+
return existingValue;
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=MapX.js.map
|
package/dist/MapX.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MapX.js","names":["Predicate","dual","getOrElseSetGet","map","key","fallbackIfNotFound","has","set","existingValue","get","isNullish","Error","String"],"sources":["../src/MapX.ts"],"sourcesContent":[null],"mappings":"AAAA;;;;;AAKA,SAASA,SAAS,QAAQ,QAAQ;AAClC,SAASC,IAAI,QAAQ,iBAAiB;AAEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,OAAO,MAAMC,eAAe,gBAAGD,IAAI,CAGjC,CAAC,EAAE,CAAOE,GAAc,EAAEC,GAAM,EAAEC,kBAA2B,KAAO;EACpE,IAAI,CAACF,GAAG,CAACG,GAAG,CAACF,GAAG,CAAC,EAAE;IACjBD,GAAG,CAACI,GAAG,CAACH,GAAG,EAAEC,kBAAkB,EAAE,CAAC;IAClC,OAAOA,kBAAkB,EAAE;EAC7B;EAEA,MAAMG,aAAa,GAAGL,GAAG,CAACM,GAAG,CAACL,GAAG,CAAC;EAClC,IAAIJ,SAAS,CAACU,SAAS,CAACF,aAAa,CAAC,EAAE;IACtC,MAAM,IAAIG,KAAK,CAAC,sBAAsBC,MAAM,CAACR,GAAG,CAAC,EAAE,CAAC;EACtD;EAEA,OAAOI,aAAa;AACtB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for working with non-nullable values.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.0.0
|
|
5
|
+
*/
|
|
6
|
+
import { Order } from "effect";
|
|
7
|
+
/**
|
|
8
|
+
* Returns `value` narrowed to `NonNullable<A>`, throwing an `Error` if it is
|
|
9
|
+
* `null` or `undefined`.
|
|
10
|
+
*
|
|
11
|
+
* Use it at trusted boundaries where a value is known to be present but typed as
|
|
12
|
+
* nullable, turning a silent `undefined` into a loud failure. An optional
|
|
13
|
+
* `variableName` is woven into the thrown message to aid debugging. This is the
|
|
14
|
+
* function re-exported as `nn` from the module barrel, a terse shorthand handy
|
|
15
|
+
* inside string interpolations.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
20
|
+
*
|
|
21
|
+
* assert.deepStrictEqual(NonNullableX.fromNullableOrThrow("value"), "value")
|
|
22
|
+
*
|
|
23
|
+
* assert.throws(
|
|
24
|
+
* () => NonNullableX.fromNullableOrThrow(null, "varName"),
|
|
25
|
+
* /Value is nullable: null \(variable name: varName\)/
|
|
26
|
+
* )
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @category unsafe
|
|
30
|
+
* @since 0.0.0
|
|
31
|
+
*/
|
|
32
|
+
export declare const fromNullableOrThrow: <A>(value: A, variableName?: string) => NonNullable<A>;
|
|
33
|
+
/**
|
|
34
|
+
* Branches on whether `value` is nullish, passing the value narrowed to
|
|
35
|
+
* `NonNullable<A>` to the `whenNotNullable` handler.
|
|
36
|
+
*
|
|
37
|
+
* A nullable-aware sibling of `Match.value`: it folds a present-or-absent value
|
|
38
|
+
* into a single `B` without an `if`/`else` or a manual `!= null` check. Note that
|
|
39
|
+
* falsy-but-present values (`""`, `0`, `false`) take the `whenNotNullable`
|
|
40
|
+
* branch — only `null` and `undefined` are treated as absent. Supports both
|
|
41
|
+
* data-first and data-last (pipeable) call styles.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
46
|
+
* import { pipe } from "effect"
|
|
47
|
+
*
|
|
48
|
+
* // Data-first — present value flows through narrowed
|
|
49
|
+
* assert.deepStrictEqual(
|
|
50
|
+
* NonNullableX.match("value", {
|
|
51
|
+
* whenNullable: () => "nullable",
|
|
52
|
+
* whenNotNullable: (value) => value
|
|
53
|
+
* }),
|
|
54
|
+
* "value"
|
|
55
|
+
* )
|
|
56
|
+
*
|
|
57
|
+
* // Data-last — null takes the whenNullable branch
|
|
58
|
+
* assert.deepStrictEqual(
|
|
59
|
+
* pipe(
|
|
60
|
+
* null,
|
|
61
|
+
* NonNullableX.match({
|
|
62
|
+
* whenNullable: () => "nullable",
|
|
63
|
+
* whenNotNullable: (value) => value
|
|
64
|
+
* })
|
|
65
|
+
* ),
|
|
66
|
+
* "nullable"
|
|
67
|
+
* )
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @category pattern matching
|
|
71
|
+
* @since 0.0.0
|
|
72
|
+
*/
|
|
73
|
+
export declare const match: (<A, B>(handlers: {
|
|
74
|
+
whenNullable: () => B;
|
|
75
|
+
whenNotNullable: (value: NonNullable<A>) => B;
|
|
76
|
+
}) => (value: A) => B) & (<A, B>(value: A, handlers: {
|
|
77
|
+
whenNullable: () => B;
|
|
78
|
+
whenNotNullable: (value: NonNullable<A>) => B;
|
|
79
|
+
}) => B);
|
|
80
|
+
/**
|
|
81
|
+
* Applies `map` to `a` only when it is non-nullish, passing nullish inputs
|
|
82
|
+
* through unchanged.
|
|
83
|
+
*
|
|
84
|
+
* This is the nullable-preserving map: a present value is transformed to `B`,
|
|
85
|
+
* while `null` stays `null` and `undefined` stays `undefined`, so nullability is
|
|
86
|
+
* carried through the transformation. Supports both data-first and data-last
|
|
87
|
+
* (pipeable) call styles.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
92
|
+
* import { pipe } from "effect"
|
|
93
|
+
*
|
|
94
|
+
* // Data-first — present value is transformed
|
|
95
|
+
* assert.deepStrictEqual(NonNullableX.map(1, (v: number) => v + 1), 2)
|
|
96
|
+
*
|
|
97
|
+
* // Data-last — nullish passes through unchanged
|
|
98
|
+
* const value: number | null = null
|
|
99
|
+
* assert.deepStrictEqual(
|
|
100
|
+
* pipe(
|
|
101
|
+
* value,
|
|
102
|
+
* NonNullableX.map<number | null, number>((v) => v + 1)
|
|
103
|
+
* ),
|
|
104
|
+
* null
|
|
105
|
+
* )
|
|
106
|
+
* ```
|
|
107
|
+
*
|
|
108
|
+
* @category mapping
|
|
109
|
+
* @since 0.0.0
|
|
110
|
+
*/
|
|
111
|
+
export declare const map: (<A, B>(map: (a: NonNullable<A>) => B) => (a: A) => B | (null & A) | (undefined & A)) & (<A, B>(a: A, map: (a: NonNullable<A>) => B) => B | (null & A) | (undefined & A));
|
|
112
|
+
/**
|
|
113
|
+
* Lifts a total function `(a: A) => B` into one that tolerates nullish input,
|
|
114
|
+
* applying it to present values and passing `null`/`undefined` through unchanged.
|
|
115
|
+
*
|
|
116
|
+
* Where `map` operates on a value, `lift` transforms the function itself,
|
|
117
|
+
* yielding a reusable `(a: A | null | undefined) => B | null | undefined` you can
|
|
118
|
+
* drop into a `pipe`. Use it to adapt a plain transform to a nullable pipeline
|
|
119
|
+
* without wrapping each call site.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
124
|
+
* import { Number, pipe } from "effect"
|
|
125
|
+
*
|
|
126
|
+
* const addOne = NonNullableX.lift(Number.sum(1))
|
|
127
|
+
*
|
|
128
|
+
* assert.deepStrictEqual(pipe(1, addOne), 2)
|
|
129
|
+
* assert.deepStrictEqual(pipe(null, addOne), null)
|
|
130
|
+
* assert.deepStrictEqual(pipe(undefined, addOne), undefined)
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* @category mapping
|
|
134
|
+
* @since 0.0.0
|
|
135
|
+
*/
|
|
136
|
+
export declare const lift: <A, B>(map: (a: A) => B) => (a: A | null | undefined) => B | null | undefined;
|
|
137
|
+
/**
|
|
138
|
+
* Extends an `Order.Order<A>` to an `Order.Order<A | null>`, deciding where
|
|
139
|
+
* `null` sorts relative to present values via the `behavior` argument.
|
|
140
|
+
*
|
|
141
|
+
* Pass `"value-null"` to push `null`s to the end and `"null-value"` to pull them
|
|
142
|
+
* to the front; two present values fall back to the wrapped order. Use it to sort
|
|
143
|
+
* collections that mix real values with gaps without a bespoke comparator.
|
|
144
|
+
* Supports both data-first and data-last (pipeable) call styles.
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```ts
|
|
148
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
149
|
+
* import { Array, Order, pipe } from "effect"
|
|
150
|
+
*
|
|
151
|
+
* // "value-null" — nulls sorted last
|
|
152
|
+
* assert.deepStrictEqual(
|
|
153
|
+
* pipe(
|
|
154
|
+
* [null, 1, 3, null, 2],
|
|
155
|
+
* Array.sort(NonNullableX.nullableOrder(Order.Number, "value-null"))
|
|
156
|
+
* ),
|
|
157
|
+
* [1, 2, 3, null, null]
|
|
158
|
+
* )
|
|
159
|
+
*
|
|
160
|
+
* // "null-value" — nulls sorted first (data-last)
|
|
161
|
+
* assert.deepStrictEqual(
|
|
162
|
+
* pipe(
|
|
163
|
+
* [null, 1, 3, null, 2],
|
|
164
|
+
* Array.sort(pipe(Order.Number, NonNullableX.nullableOrder("null-value")))
|
|
165
|
+
* ),
|
|
166
|
+
* [null, null, 1, 2, 3]
|
|
167
|
+
* )
|
|
168
|
+
* ```
|
|
169
|
+
*
|
|
170
|
+
* @category ordering
|
|
171
|
+
* @since 0.0.0
|
|
172
|
+
*/
|
|
173
|
+
export declare const nullableOrder: ((behavior: "value-null" | "null-value") => <A>(order: Order.Order<A>) => Order.Order<A | null>) & (<A>(order: Order.Order<A>, behavior: "value-null" | "null-value") => Order.Order<A | null>);
|
|
174
|
+
//# sourceMappingURL=NonNullableX.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NonNullableX.d.ts","sourceRoot":"","sources":["../src/NonNullableX.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAGL,KAAK,EAGN,MAAM,QAAQ,CAAC;AAGhB;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,EACnC,OAAO,CAAC,EACR,eAAe,MAAM,KACpB,WAAW,CAAC,CAAC,CAOf,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,KAAK,IACf,CAAC,EAAE,CAAC,YAAY;IACf,YAAY,EAAE,MAAM,CAAC,CAAC;IACtB,eAAe,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;CAC/C,KAAK,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,MACpB,CAAC,EAAE,CAAC,SACI,CAAC,YACE;IACR,YAAY,EAAE,MAAM,CAAC,CAAC;IACtB,eAAe,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;CAC/C,KACE,CAAC,CAWP,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,GAAG,IACb,CAAC,EAAE,CAAC,OACE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAC1B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,MAC9C,CAAC,EAAE,CAAC,KACA,CAAC,OACC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,KAC1B,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAsBtC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,IAAI,GACd,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MACtB,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,KAAG,CAAC,GAAG,IAAI,GAAG,SAMrC,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,aAAa,cAEZ,YAAY,GAAG,YAAY,KAClC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,MACvD,CAAC,SACO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,YACX,YAAY,GAAG,YAAY,KAClC,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAwC3B,CAAC"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for working with non-nullable values.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.0.0
|
|
5
|
+
*/
|
|
6
|
+
import { Number as EffectNumber, Match, Predicate } from "effect";
|
|
7
|
+
import { dual } from "effect/Function";
|
|
8
|
+
/**
|
|
9
|
+
* Returns `value` narrowed to `NonNullable<A>`, throwing an `Error` if it is
|
|
10
|
+
* `null` or `undefined`.
|
|
11
|
+
*
|
|
12
|
+
* Use it at trusted boundaries where a value is known to be present but typed as
|
|
13
|
+
* nullable, turning a silent `undefined` into a loud failure. An optional
|
|
14
|
+
* `variableName` is woven into the thrown message to aid debugging. This is the
|
|
15
|
+
* function re-exported as `nn` from the module barrel, a terse shorthand handy
|
|
16
|
+
* inside string interpolations.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
21
|
+
*
|
|
22
|
+
* assert.deepStrictEqual(NonNullableX.fromNullableOrThrow("value"), "value")
|
|
23
|
+
*
|
|
24
|
+
* assert.throws(
|
|
25
|
+
* () => NonNullableX.fromNullableOrThrow(null, "varName"),
|
|
26
|
+
* /Value is nullable: null \(variable name: varName\)/
|
|
27
|
+
* )
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @category unsafe
|
|
31
|
+
* @since 0.0.0
|
|
32
|
+
*/
|
|
33
|
+
export const fromNullableOrThrow = (value, variableName) => {
|
|
34
|
+
if (Predicate.isNotNullish(value)) {
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
throw new Error(`Value is nullable: ${String(value)}${Predicate.isNotNullish(variableName) ? ` (variable name: ${variableName})` : ""}`);
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Branches on whether `value` is nullish, passing the value narrowed to
|
|
41
|
+
* `NonNullable<A>` to the `whenNotNullable` handler.
|
|
42
|
+
*
|
|
43
|
+
* A nullable-aware sibling of `Match.value`: it folds a present-or-absent value
|
|
44
|
+
* into a single `B` without an `if`/`else` or a manual `!= null` check. Note that
|
|
45
|
+
* falsy-but-present values (`""`, `0`, `false`) take the `whenNotNullable`
|
|
46
|
+
* branch — only `null` and `undefined` are treated as absent. Supports both
|
|
47
|
+
* data-first and data-last (pipeable) call styles.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
52
|
+
* import { pipe } from "effect"
|
|
53
|
+
*
|
|
54
|
+
* // Data-first — present value flows through narrowed
|
|
55
|
+
* assert.deepStrictEqual(
|
|
56
|
+
* NonNullableX.match("value", {
|
|
57
|
+
* whenNullable: () => "nullable",
|
|
58
|
+
* whenNotNullable: (value) => value
|
|
59
|
+
* }),
|
|
60
|
+
* "value"
|
|
61
|
+
* )
|
|
62
|
+
*
|
|
63
|
+
* // Data-last — null takes the whenNullable branch
|
|
64
|
+
* assert.deepStrictEqual(
|
|
65
|
+
* pipe(
|
|
66
|
+
* null,
|
|
67
|
+
* NonNullableX.match({
|
|
68
|
+
* whenNullable: () => "nullable",
|
|
69
|
+
* whenNotNullable: (value) => value
|
|
70
|
+
* })
|
|
71
|
+
* ),
|
|
72
|
+
* "nullable"
|
|
73
|
+
* )
|
|
74
|
+
* ```
|
|
75
|
+
*
|
|
76
|
+
* @category pattern matching
|
|
77
|
+
* @since 0.0.0
|
|
78
|
+
*/
|
|
79
|
+
export const match = /*#__PURE__*/dual(2, (value, {
|
|
80
|
+
whenNullable,
|
|
81
|
+
whenNotNullable
|
|
82
|
+
}) => Predicate.isNotNullish(value) ? whenNotNullable(value) : whenNullable());
|
|
83
|
+
/**
|
|
84
|
+
* Applies `map` to `a` only when it is non-nullish, passing nullish inputs
|
|
85
|
+
* through unchanged.
|
|
86
|
+
*
|
|
87
|
+
* This is the nullable-preserving map: a present value is transformed to `B`,
|
|
88
|
+
* while `null` stays `null` and `undefined` stays `undefined`, so nullability is
|
|
89
|
+
* carried through the transformation. Supports both data-first and data-last
|
|
90
|
+
* (pipeable) call styles.
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* ```ts
|
|
94
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
95
|
+
* import { pipe } from "effect"
|
|
96
|
+
*
|
|
97
|
+
* // Data-first — present value is transformed
|
|
98
|
+
* assert.deepStrictEqual(NonNullableX.map(1, (v: number) => v + 1), 2)
|
|
99
|
+
*
|
|
100
|
+
* // Data-last — nullish passes through unchanged
|
|
101
|
+
* const value: number | null = null
|
|
102
|
+
* assert.deepStrictEqual(
|
|
103
|
+
* pipe(
|
|
104
|
+
* value,
|
|
105
|
+
* NonNullableX.map<number | null, number>((v) => v + 1)
|
|
106
|
+
* ),
|
|
107
|
+
* null
|
|
108
|
+
* )
|
|
109
|
+
* ```
|
|
110
|
+
*
|
|
111
|
+
* @category mapping
|
|
112
|
+
* @since 0.0.0
|
|
113
|
+
*/
|
|
114
|
+
export const map = /*#__PURE__*/dual(2, (a, map) => {
|
|
115
|
+
if (Predicate.isNotNullish(a)) {
|
|
116
|
+
return map(a);
|
|
117
|
+
}
|
|
118
|
+
// Every value is either nullish or not, so once the check above has failed
|
|
119
|
+
// `isNullish(a)` is always true — its false branch (and the defensive throw
|
|
120
|
+
// below) is unreachable.
|
|
121
|
+
/* v8 ignore next */
|
|
122
|
+
if (Predicate.isNullish(a)) {
|
|
123
|
+
return a;
|
|
124
|
+
}
|
|
125
|
+
/* v8 ignore next */
|
|
126
|
+
throw new Error(`Value is neither nullable nor non-nullable: ${String(a)}`);
|
|
127
|
+
});
|
|
128
|
+
/**
|
|
129
|
+
* Lifts a total function `(a: A) => B` into one that tolerates nullish input,
|
|
130
|
+
* applying it to present values and passing `null`/`undefined` through unchanged.
|
|
131
|
+
*
|
|
132
|
+
* Where `map` operates on a value, `lift` transforms the function itself,
|
|
133
|
+
* yielding a reusable `(a: A | null | undefined) => B | null | undefined` you can
|
|
134
|
+
* drop into a `pipe`. Use it to adapt a plain transform to a nullable pipeline
|
|
135
|
+
* without wrapping each call site.
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
140
|
+
* import { Number, pipe } from "effect"
|
|
141
|
+
*
|
|
142
|
+
* const addOne = NonNullableX.lift(Number.sum(1))
|
|
143
|
+
*
|
|
144
|
+
* assert.deepStrictEqual(pipe(1, addOne), 2)
|
|
145
|
+
* assert.deepStrictEqual(pipe(null, addOne), null)
|
|
146
|
+
* assert.deepStrictEqual(pipe(undefined, addOne), undefined)
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
149
|
+
* @category mapping
|
|
150
|
+
* @since 0.0.0
|
|
151
|
+
*/
|
|
152
|
+
export const lift = map => a => {
|
|
153
|
+
if (Predicate.isNullish(a)) {
|
|
154
|
+
return a;
|
|
155
|
+
}
|
|
156
|
+
return map(a);
|
|
157
|
+
};
|
|
158
|
+
/**
|
|
159
|
+
* Extends an `Order.Order<A>` to an `Order.Order<A | null>`, deciding where
|
|
160
|
+
* `null` sorts relative to present values via the `behavior` argument.
|
|
161
|
+
*
|
|
162
|
+
* Pass `"value-null"` to push `null`s to the end and `"null-value"` to pull them
|
|
163
|
+
* to the front; two present values fall back to the wrapped order. Use it to sort
|
|
164
|
+
* collections that mix real values with gaps without a bespoke comparator.
|
|
165
|
+
* Supports both data-first and data-last (pipeable) call styles.
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```ts
|
|
169
|
+
* import { NonNullableX } from "@nunofyobiz/effect-extras"
|
|
170
|
+
* import { Array, Order, pipe } from "effect"
|
|
171
|
+
*
|
|
172
|
+
* // "value-null" — nulls sorted last
|
|
173
|
+
* assert.deepStrictEqual(
|
|
174
|
+
* pipe(
|
|
175
|
+
* [null, 1, 3, null, 2],
|
|
176
|
+
* Array.sort(NonNullableX.nullableOrder(Order.Number, "value-null"))
|
|
177
|
+
* ),
|
|
178
|
+
* [1, 2, 3, null, null]
|
|
179
|
+
* )
|
|
180
|
+
*
|
|
181
|
+
* // "null-value" — nulls sorted first (data-last)
|
|
182
|
+
* assert.deepStrictEqual(
|
|
183
|
+
* pipe(
|
|
184
|
+
* [null, 1, 3, null, 2],
|
|
185
|
+
* Array.sort(pipe(Order.Number, NonNullableX.nullableOrder("null-value")))
|
|
186
|
+
* ),
|
|
187
|
+
* [null, null, 1, 2, 3]
|
|
188
|
+
* )
|
|
189
|
+
* ```
|
|
190
|
+
*
|
|
191
|
+
* @category ordering
|
|
192
|
+
* @since 0.0.0
|
|
193
|
+
*/
|
|
194
|
+
export const nullableOrder = /*#__PURE__*/dual(2, (order, behavior) => {
|
|
195
|
+
// Prepare to sort them based on their nullability
|
|
196
|
+
const {
|
|
197
|
+
nullableSortCategory,
|
|
198
|
+
valueSortCategory
|
|
199
|
+
} = Match.value(behavior).pipe(Match.when("value-null", () => ({
|
|
200
|
+
nullableSortCategory: 1,
|
|
201
|
+
valueSortCategory: 0
|
|
202
|
+
})), Match.when("null-value", () => ({
|
|
203
|
+
nullableSortCategory: 0,
|
|
204
|
+
valueSortCategory: 1
|
|
205
|
+
})), Match.exhaustive);
|
|
206
|
+
return (a, b) => {
|
|
207
|
+
// Right off the bat, if they are both defined just return the regular ordering
|
|
208
|
+
if (Predicate.isNotNullish(a) && Predicate.isNotNullish(b)) {
|
|
209
|
+
return order(a, b);
|
|
210
|
+
}
|
|
211
|
+
// Otherwise figure out which category each value is
|
|
212
|
+
const aCategory = Predicate.isNotNullish(a) ? valueSortCategory : nullableSortCategory;
|
|
213
|
+
const bCategory = Predicate.isNotNullish(b) ? valueSortCategory : nullableSortCategory;
|
|
214
|
+
return EffectNumber.sign(aCategory - bCategory);
|
|
215
|
+
};
|
|
216
|
+
});
|
|
217
|
+
//# sourceMappingURL=NonNullableX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NonNullableX.js","names":["Number","EffectNumber","Match","Predicate","dual","fromNullableOrThrow","value","variableName","isNotNullish","Error","String","match","whenNullable","whenNotNullable","map","a","isNullish","lift","nullableOrder","order","behavior","nullableSortCategory","valueSortCategory","pipe","when","exhaustive","b","aCategory","bCategory","sign"],"sources":["../src/NonNullableX.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|