@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.
Files changed (133) hide show
  1. package/README.md +38 -3
  2. package/dist/ArrayX.d.ts +381 -0
  3. package/dist/ArrayX.d.ts.map +1 -0
  4. package/dist/ArrayX.js +493 -0
  5. package/dist/ArrayX.js.map +1 -0
  6. package/dist/BigIntX.d.ts +24 -0
  7. package/dist/BigIntX.d.ts.map +1 -0
  8. package/dist/BigIntX.js +30 -0
  9. package/dist/BigIntX.js.map +1 -0
  10. package/dist/BooleanX.d.ts +25 -0
  11. package/dist/BooleanX.d.ts.map +1 -0
  12. package/dist/BooleanX.js +25 -0
  13. package/dist/BooleanX.js.map +1 -0
  14. package/dist/DurationX.d.ts +73 -0
  15. package/dist/DurationX.d.ts.map +1 -0
  16. package/dist/DurationX.js +91 -0
  17. package/dist/DurationX.js.map +1 -0
  18. package/dist/EffectX.d.ts +120 -0
  19. package/dist/EffectX.d.ts.map +1 -0
  20. package/dist/EffectX.js +140 -0
  21. package/dist/EffectX.js.map +1 -0
  22. package/dist/FormDataX.d.ts +49 -0
  23. package/dist/FormDataX.d.ts.map +1 -0
  24. package/dist/FormDataX.js +42 -0
  25. package/dist/FormDataX.js.map +1 -0
  26. package/dist/InclusiveOr.d.ts +1123 -0
  27. package/dist/InclusiveOr.d.ts.map +1 -0
  28. package/dist/InclusiveOr.js +1074 -0
  29. package/dist/InclusiveOr.js.map +1 -0
  30. package/dist/MapX.d.ts +32 -0
  31. package/dist/MapX.d.ts.map +1 -0
  32. package/dist/MapX.js +49 -0
  33. package/dist/MapX.js.map +1 -0
  34. package/dist/NonNullableX.d.ts +174 -0
  35. package/dist/NonNullableX.d.ts.map +1 -0
  36. package/dist/NonNullableX.js +217 -0
  37. package/dist/NonNullableX.js.map +1 -0
  38. package/dist/NumberX.d.ts +178 -0
  39. package/dist/NumberX.d.ts.map +1 -0
  40. package/dist/NumberX.js +214 -0
  41. package/dist/NumberX.js.map +1 -0
  42. package/dist/OptionX.d.ts +187 -0
  43. package/dist/OptionX.d.ts.map +1 -0
  44. package/dist/OptionX.js +201 -0
  45. package/dist/OptionX.js.map +1 -0
  46. package/dist/OrderX.d.ts +32 -0
  47. package/dist/OrderX.d.ts.map +1 -0
  48. package/dist/OrderX.js +32 -0
  49. package/dist/OrderX.js.map +1 -0
  50. package/dist/PredicateX.d.ts +108 -0
  51. package/dist/PredicateX.d.ts.map +1 -0
  52. package/dist/PredicateX.js +111 -0
  53. package/dist/PredicateX.js.map +1 -0
  54. package/dist/PromiseX.d.ts +32 -0
  55. package/dist/PromiseX.d.ts.map +1 -0
  56. package/dist/PromiseX.js +32 -0
  57. package/dist/PromiseX.js.map +1 -0
  58. package/dist/RecordX.d.ts +450 -0
  59. package/dist/RecordX.d.ts.map +1 -0
  60. package/dist/RecordX.js +487 -0
  61. package/dist/RecordX.js.map +1 -0
  62. package/dist/ResultX.d.ts +50 -0
  63. package/dist/ResultX.d.ts.map +1 -0
  64. package/dist/ResultX.js +50 -0
  65. package/dist/ResultX.js.map +1 -0
  66. package/dist/SchemaX.d.ts +249 -0
  67. package/dist/SchemaX.d.ts.map +1 -0
  68. package/dist/SchemaX.js +243 -0
  69. package/dist/SchemaX.js.map +1 -0
  70. package/dist/SetX.d.ts +121 -0
  71. package/dist/SetX.d.ts.map +1 -0
  72. package/dist/SetX.js +137 -0
  73. package/dist/SetX.js.map +1 -0
  74. package/dist/StringX.d.ts +131 -0
  75. package/dist/StringX.d.ts.map +1 -0
  76. package/dist/StringX.js +149 -0
  77. package/dist/StringX.js.map +1 -0
  78. package/dist/StructX.d.ts +219 -0
  79. package/dist/StructX.d.ts.map +1 -0
  80. package/dist/StructX.js +173 -0
  81. package/dist/StructX.js.map +1 -0
  82. package/dist/WarnResult.d.ts +1191 -0
  83. package/dist/WarnResult.d.ts.map +1 -0
  84. package/dist/WarnResult.js +991 -0
  85. package/dist/WarnResult.js.map +1 -0
  86. package/dist/index.d.ts +23 -3772
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +22 -1011
  89. package/dist/index.js.map +1 -1
  90. package/package.json +18 -5
  91. package/src/{ArrayX/ArrayX.ts → ArrayX.ts} +6 -88
  92. package/src/{DurationX/DurationX.ts → DurationX.ts} +1 -1
  93. package/src/InclusiveOr.ts +1255 -0
  94. package/src/{NonNullableX/NonNullableX.ts → NonNullableX.ts} +5 -0
  95. package/src/{OptionX/OptionX.ts → OptionX.ts} +8 -2
  96. package/src/{PredicateX/PredicateX.ts → PredicateX.ts} +41 -0
  97. package/src/{RecordX/RecordX.ts → RecordX.ts} +184 -2
  98. package/src/StringX.ts +210 -0
  99. package/src/{WarnResult/WarnResult.ts → WarnResult.ts} +297 -227
  100. package/src/index.ts +22 -20
  101. package/src/ArrayX/index.ts +0 -1
  102. package/src/BigIntX/index.ts +0 -1
  103. package/src/BooleanX/index.ts +0 -1
  104. package/src/DurationX/index.ts +0 -1
  105. package/src/EffectX/index.ts +0 -1
  106. package/src/FormDataX/index.ts +0 -1
  107. package/src/MapX/index.ts +0 -1
  108. package/src/NonNullableX/index.ts +0 -2
  109. package/src/NumberX/index.ts +0 -1
  110. package/src/OptionX/index.ts +0 -1
  111. package/src/OrderX/index.ts +0 -1
  112. package/src/PredicateX/index.ts +0 -1
  113. package/src/PromiseX/index.ts +0 -1
  114. package/src/RecordX/index.ts +0 -1
  115. package/src/ResultX/index.ts +0 -1
  116. package/src/SchemaX/index.ts +0 -1
  117. package/src/SetX/index.ts +0 -1
  118. package/src/StringX/StringX.ts +0 -97
  119. package/src/StringX/index.ts +0 -1
  120. package/src/StructX/index.ts +0 -1
  121. package/src/WarnResult/index.ts +0 -1
  122. /package/src/{BigIntX/BigIntX.ts → BigIntX.ts} +0 -0
  123. /package/src/{BooleanX/BooleanX.ts → BooleanX.ts} +0 -0
  124. /package/src/{EffectX/EffectX.ts → EffectX.ts} +0 -0
  125. /package/src/{FormDataX/FormDataX.ts → FormDataX.ts} +0 -0
  126. /package/src/{MapX/MapX.ts → MapX.ts} +0 -0
  127. /package/src/{NumberX/NumberX.ts → NumberX.ts} +0 -0
  128. /package/src/{OrderX/OrderX.ts → OrderX.ts} +0 -0
  129. /package/src/{PromiseX/PromiseX.ts → PromiseX.ts} +0 -0
  130. /package/src/{ResultX/ResultX.ts → ResultX.ts} +0 -0
  131. /package/src/{SchemaX/SchemaX.ts → SchemaX.ts} +0 -0
  132. /package/src/{SetX/SetX.ts → SetX.ts} +0 -0
  133. /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
@@ -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":[]}