@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
@@ -13,9 +13,8 @@ import {
13
13
  pipe,
14
14
  } from "effect";
15
15
  import { dual, identity } from "effect/Function";
16
- import { RecordX } from "../RecordX";
17
- import { WarnResult } from "../WarnResult";
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 { BigIntX } from "../BigIntX";
8
+ import * as BigIntX from "./BigIntX.js";
9
9
 
10
10
  // Some private constants for conversion
11
11
  const MICROS_PER_MILLI = 1000;