@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
package/dist/index.js CHANGED
@@ -1,1012 +1,23 @@
1
- import { pipe, Record, Option, Array, Data, Duration, DateTime, Match, Effect, Function, Schema, Predicate, Number as Number$1, SchemaGetter, Struct, Result, BigInt as BigInt$1, Cause, String as String$1 } from 'effect';
2
- import { dual, identity, pipe as pipe$1, constUndefined } from 'effect/Function';
3
-
4
- var __defProp = Object.defineProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
-
10
- // src/ArrayX/ArrayX.ts
11
- var ArrayX_exports = {};
12
- __export(ArrayX_exports, {
13
- categorize: () => categorize,
14
- chunkBy: () => chunkBy,
15
- compactNullable: () => compactNullable,
16
- filterHead: () => filterHead,
17
- filterMapNullable: () => filterMapNullable,
18
- filterTail: () => filterTail,
19
- findFirstWithIndex2d: () => findFirstWithIndex2d,
20
- insertUniq: () => insertUniq,
21
- mapRightAccum: () => mapRightAccum,
22
- maxOption: () => maxOption,
23
- slice: () => slice,
24
- takeFirstWhere: () => takeFirstWhere2,
25
- takeLastWhere: () => takeLastWhere2,
26
- zipWithWarnings: () => zipWithWarnings
27
- });
28
-
29
- // src/RecordX/RecordX.ts
30
- var RecordX_exports = {};
31
- __export(RecordX_exports, {
32
- collectBy: () => collectBy,
33
- getOrThrow: () => getOrThrow,
34
- getOrThrowWith: () => getOrThrowWith,
35
- isNonEmptyRecord: () => isNonEmptyRecord,
36
- keysAs: () => keysAs,
37
- modifyIfExists: () => modifyIfExists,
38
- takeFirstWhere: () => takeFirstWhere,
39
- takeLast: () => takeLast,
40
- takeLastWhere: () => takeLastWhere,
41
- upsert: () => upsert
42
- });
43
- var isNonEmptyRecord = (record) => pipe(record, Predicate.not(Record.isEmptyRecord));
44
- var modifyIfExists = dual(
45
- 3,
46
- (self, key, f) => pipe(
47
- Record.modify(self, key, f),
48
- Option.getOrElse(() => self)
49
- )
50
- );
51
- var takeFirstWhere = dual(
52
- 3,
53
- (record, predicate, order) => ArrayX_exports.takeFirstWhere(Record.values(record), predicate, order)
54
- );
55
- var takeLastWhere = dual(
56
- 3,
57
- (record, predicate, order) => ArrayX_exports.takeLastWhere(Record.values(record), predicate, order)
58
- );
59
- var takeLast = dual(
60
- 2,
61
- (record, order) => pipe(Record.values(record), Array.sort(order), Array.last)
62
- );
63
- var keysAs = () => (record) => record;
64
- var getOrThrow = dual(
65
- 2,
66
- (record, key) => getOrThrowWith(
67
- record,
68
- key,
69
- (key2) => new Error(
70
- `Key ${String(key2)} not found in record
71
- Existing keys=${String(Record.keys(record))}`
72
- )
73
- )
74
- );
75
- var getOrThrowWith = dual(
76
- 3,
77
- (record, key, onNone) => Record.get(record, key).pipe(Option.getOrThrowWith(() => onNone(key)))
78
- );
79
- var upsert = dual(
80
- 3,
81
- (record, key, upsert2) => {
82
- const existingValue = Record.get(record, key);
83
- const updatedValue = upsert2(existingValue);
84
- return Record.set(record, key, updatedValue);
85
- }
86
- );
87
- var collectBy = dual(
88
- 2,
89
- (values, identify) => Array.reduce(
90
- values,
91
- {},
92
- (accumulator, value) => Record.set(accumulator, identify(value), value)
93
- )
94
- );
95
-
96
- // src/WarnResult/WarnResult.ts
97
- var WarnResult_exports = {};
98
- __export(WarnResult_exports, {
99
- SuccessOnly: () => SuccessOnly,
100
- SuccessWithWarnings: () => SuccessWithWarnings,
101
- WarningsOnly: () => WarningsOnly,
102
- WithSuccess: () => WithSuccess,
103
- WithWarnings: () => WithWarnings,
104
- flatMapSuccess: () => flatMapSuccess,
105
- flatMapSuccessEffect: () => flatMapSuccessEffect,
106
- flatMapWarnings: () => flatMapWarnings,
107
- flatMapWarningsEffect: () => flatMapWarningsEffect,
108
- fromNullables: () => fromNullables,
109
- is: () => is,
110
- mapBoth: () => mapBoth,
111
- mapBothEffect: () => mapBothEffect,
112
- mapSuccess: () => mapSuccess,
113
- mapSuccessEffect: () => mapSuccessEffect,
114
- mapWarnings: () => mapWarnings,
115
- mapWarningsEffect: () => mapWarningsEffect,
116
- match: () => match,
117
- matchSuccess: () => matchSuccess,
118
- matchWarnings: () => matchWarnings,
119
- optionFromNullables: () => optionFromNullables,
120
- orElse: () => orElse,
121
- orUndefined: () => orUndefined,
122
- successOption: () => successOption,
123
- successOrElse: () => successOrElse,
124
- successOrUndefined: () => successOrUndefined,
125
- warningsOption: () => warningsOption,
126
- warningsOrElse: () => warningsOrElse,
127
- warningsOrUndefined: () => warningsOrUndefined
128
- });
129
- var taggedEnum = Data.taggedEnum();
130
- var WarningsOnly = taggedEnum.WarningsOnly;
131
- var SuccessOnly = taggedEnum.SuccessOnly;
132
- var SuccessWithWarnings = taggedEnum.SuccessWithWarnings;
133
- var is = taggedEnum.$is;
134
- var match = taggedEnum.$match;
135
- var WithWarnings = ({
136
- warnings,
137
- success
138
- }) => Predicate.isNotNullish(success) ? SuccessWithWarnings({ warnings, success }) : WarningsOnly({ warnings });
139
- var WithSuccess = ({
140
- warnings,
141
- success
142
- }) => Predicate.isNotNullish(warnings) ? SuccessWithWarnings({ warnings, success }) : SuccessOnly({ success });
143
- var optionFromNullables = ({
144
- warnings,
145
- success
146
- }) => {
147
- if (Predicate.isNotNullish(warnings) && Predicate.isNotNullish(success)) {
148
- return Option.some(SuccessWithWarnings({ warnings, success }));
149
- }
150
- if (Predicate.isNotNullish(warnings)) {
151
- return Option.some(WarningsOnly({ warnings }));
152
- }
153
- if (Predicate.isNotNullish(success)) {
154
- return Option.some(SuccessOnly({ success }));
155
- }
156
- return Option.none();
157
- };
158
- var fromNullables = ({
159
- warnings,
160
- success,
161
- orElse: orElse2 = () => {
162
- throw new Error("Both warnings and success are nullish");
163
- }
164
- }) => pipe(optionFromNullables({ warnings, success }), Option.getOrElse(orElse2));
165
- var matchWarnings = ({
166
- Warnings,
167
- SuccessOnly: SuccessOnly2
168
- }) => (warnResult) => pipe(
169
- warnResult,
170
- match({
171
- WarningsOnly: ({ warnings }) => Warnings(warnings),
172
- SuccessOnly: ({ success }) => SuccessOnly2(success),
173
- SuccessWithWarnings: ({ warnings }) => Warnings(warnings)
174
- }),
175
- // Make Typescript happy
176
- (a) => a
177
- );
178
- var matchSuccess = ({
179
- WarningsOnly: WarningsOnly2,
180
- Success
181
- }) => (warnResult) => pipe(
182
- warnResult,
183
- match({
184
- WarningsOnly: ({ warnings }) => WarningsOnly2(warnings),
185
- SuccessOnly: ({ success }) => Success(success),
186
- SuccessWithWarnings: ({ success }) => Success(success)
187
- }),
188
- // Make Typescript happy
189
- (a) => a
190
- );
191
- var orElse = ({
192
- orElseWarnings,
193
- orElseSuccess
194
- }) => match({
195
- WarningsOnly: ({ warnings }) => SuccessWithWarnings({ warnings, success: orElseSuccess() }),
196
- SuccessOnly: ({ success }) => SuccessWithWarnings({ warnings: orElseWarnings(), success }),
197
- SuccessWithWarnings: ({ warnings, success }) => SuccessWithWarnings({ warnings, success })
198
- });
199
- var orUndefined = orElse({
200
- orElseWarnings: () => void 0,
201
- orElseSuccess: () => void 0
202
- });
203
- var warningsOrElse = (orElseReturn) => (warnResult) => pipe(
204
- warnResult,
205
- orElse({
206
- orElseWarnings: orElseReturn,
207
- orElseSuccess: constUndefined
208
- }),
209
- Struct.get("warnings")
210
- );
211
- var warningsOrUndefined = warningsOrElse(() => void 0);
212
- var successOrElse = (orElseReturn) => (warnResult) => pipe(
213
- warnResult,
214
- orElse({
215
- orElseWarnings: constUndefined,
216
- orElseSuccess: orElseReturn
217
- }),
218
- Struct.get("success")
219
- );
220
- var successOrUndefined = successOrElse(() => void 0);
221
- var successOption = (warnResult) => pipe(
222
- warnResult,
223
- matchSuccess({
224
- WarningsOnly: () => Option.none(),
225
- Success: Option.some
226
- })
227
- );
228
- var warningsOption = (warnResult) => pipe(
229
- warnResult,
230
- matchWarnings({
231
- Warnings: Option.some,
232
- SuccessOnly: () => Option.none()
233
- })
234
- );
235
- var mapBoth = ({
236
- mapWarnings: mapWarnings2,
237
- mapSuccess: mapSuccess2
238
- }) => match({
239
- WarningsOnly: ({ warnings }) => WarningsOnly({ warnings: mapWarnings2(warnings) }),
240
- SuccessOnly: ({ success }) => SuccessOnly({ success: mapSuccess2(success) }),
241
- SuccessWithWarnings: ({ warnings, success }) => SuccessWithWarnings({
242
- warnings: mapWarnings2(warnings),
243
- success: mapSuccess2(success)
244
- })
245
- });
246
- var mapBothEffect = ({
247
- mapWarnings: mapWarnings2,
248
- mapSuccess: mapSuccess2
249
- }) => match({
250
- WarningsOnly: ({ warnings }) => pipe(
251
- mapWarnings2(warnings),
252
- Effect.map((warnings2) => WarningsOnly({ warnings: warnings2 }))
253
- ),
254
- SuccessOnly: ({ success }) => pipe(
255
- mapSuccess2(success),
256
- Effect.map((success2) => SuccessOnly({ success: success2 }))
257
- ),
258
- SuccessWithWarnings: ({ warnings, success }) => pipe(
259
- Effect.all({
260
- warnings: mapWarnings2(warnings),
261
- success: mapSuccess2(success)
262
- }),
263
- Effect.map(
264
- ({ warnings: warnings2, success: success2 }) => SuccessWithWarnings({ warnings: warnings2, success: success2 })
265
- )
266
- )
267
- });
268
- var mapWarnings = (mapWarnings2) => mapBoth({ mapWarnings: mapWarnings2, mapSuccess: identity });
269
- var flatMapWarnings = (mapWarnings2) => match({
270
- WarningsOnly: ({ warnings }) => mapWarnings2(warnings),
271
- SuccessOnly: ({ success }) => SuccessOnly({ success }),
272
- SuccessWithWarnings: ({ warnings }) => mapWarnings2(warnings)
273
- });
274
- var mapWarningsEffect = (mapWarnings2) => mapBothEffect({ mapWarnings: mapWarnings2, mapSuccess: Effect.succeed });
275
- var flatMapWarningsEffect = (mapWarnings2) => match({
276
- WarningsOnly: ({ warnings }) => mapWarnings2(warnings),
277
- SuccessOnly: ({ success }) => Effect.succeed(SuccessOnly({ success })),
278
- SuccessWithWarnings: ({ warnings }) => mapWarnings2(warnings)
279
- });
280
- var mapSuccess = (mapSuccess2) => mapBoth({ mapWarnings: identity, mapSuccess: mapSuccess2 });
281
- var flatMapSuccess = (mapSuccess2) => match({
282
- WarningsOnly: ({ warnings }) => WarningsOnly({ warnings }),
283
- SuccessOnly: ({ success }) => mapSuccess2(success),
284
- SuccessWithWarnings: ({ success }) => mapSuccess2(success)
285
- });
286
- var mapSuccessEffect = (mapSuccess2) => mapBothEffect({ mapWarnings: Effect.succeed, mapSuccess: mapSuccess2 });
287
- var flatMapSuccessEffect = (mapSuccess2) => match({
288
- WarningsOnly: ({ warnings }) => Effect.succeed(WarningsOnly({ warnings })),
289
- SuccessOnly: ({ success }) => mapSuccess2(success),
290
- SuccessWithWarnings: ({ success }) => mapSuccess2(success)
291
- });
292
-
293
- // src/ResultX/ResultX.ts
294
- var ResultX_exports = {};
295
- __export(ResultX_exports, {
296
- fromOption: () => fromOption
297
- });
298
- var fromOption = (option) => Option.isSome(option) ? Result.succeed(option.value) : Result.failVoid;
299
-
300
- // src/ArrayX/ArrayX.ts
301
- var slice = dual(
302
- 3,
303
- (array, start, end) => array.slice(start, end)
304
- );
305
- var zipWithWarnings = dual(
306
- 3,
307
- (array1, array2, f) => {
308
- const newLength = Math.max(array1.length, array2.length);
309
- if (newLength === 0) {
310
- return [];
311
- }
312
- return Array.makeBy(newLength, (index) => {
313
- if (index < array1.length && index < array2.length) {
314
- return f(
315
- WarnResult_exports.SuccessWithWarnings({
316
- warnings: array1[index],
317
- success: array2[index]
318
- })
319
- );
320
- }
321
- if (index < array1.length) {
322
- return f(
323
- WarnResult_exports.WarningsOnly({
324
- warnings: array1[index]
325
- })
326
- );
327
- }
328
- if (index < array2.length) {
329
- return f(
330
- WarnResult_exports.SuccessOnly({
331
- success: array2[index]
332
- })
333
- );
334
- }
335
- throw new Error(`Index ${index} is out of bounds for array1 and array2`);
336
- });
337
- }
338
- );
339
- var moveUniqWith = dual(
340
- 2,
341
- (inputArray, {
342
- identify,
343
- sourceId,
344
- moveToBeLeftOfId
345
- }) => {
346
- const array = [...inputArray];
347
- const sourceIndex = array.findIndex((item) => identify(item) === sourceId);
348
- if (sourceIndex < 0) {
349
- return array;
350
- }
351
- const sourceItem = array[sourceIndex];
352
- const arrayWithoutSource = array.filter(
353
- (item) => identify(item) !== sourceId
354
- );
355
- if (moveToBeLeftOfId === null) {
356
- return [...arrayWithoutSource, sourceItem];
357
- }
358
- const destinationIndex = arrayWithoutSource.findIndex(
359
- (item) => identify(item) === moveToBeLeftOfId
360
- );
361
- if (destinationIndex < 0) {
362
- return array;
363
- }
364
- return [
365
- ...slice(arrayWithoutSource, 0, destinationIndex),
366
- sourceItem,
367
- ...slice(arrayWithoutSource, destinationIndex, arrayWithoutSource.length)
368
- ];
369
- }
370
- );
371
- var insertUniq = dual(
372
- 2,
373
- (array, { item, insertToBeLeftOf }) => {
374
- const arrayWithNewItem = pipe(
375
- array,
376
- Array.filter((existingItem) => existingItem !== item),
377
- Array.append(item)
378
- );
379
- return moveUniqWith(arrayWithNewItem, {
380
- identify: identity,
381
- sourceId: item,
382
- moveToBeLeftOfId: insertToBeLeftOf
383
- });
384
- }
385
- );
386
- var mapRightAccum = dual(
387
- 3,
388
- (array, initialAccumulator, f) => {
389
- const [accumulator, result] = pipe(
390
- array,
391
- Array.reverse,
392
- Array.mapAccum(initialAccumulator, f)
393
- );
394
- return [accumulator, Array.reverse(result)];
395
- }
396
- );
397
- var maxOption = dual(
398
- 2,
399
- (array, order) => pipe(
400
- // If the array is empty, there is no max
401
- array,
402
- Option.liftPredicate(Array.isArrayNonEmpty),
403
- // If it is non-empty, get the max
404
- Option.map(Array.max(order))
405
- )
406
- );
407
- var takeFirstOrLastWhere = dual(
408
- 3,
409
- (array, predicate, takeOne) => pipe(
410
- // Keep only the items that match
411
- array,
412
- Array.filter(predicate),
413
- // If there is anything left, take one
414
- Option.liftPredicate(Array.isArrayNonEmpty),
415
- Option.map(takeOne)
416
- )
417
- );
418
- var takeFirstWhere2 = dual(
419
- 3,
420
- (array, predicate, order) => takeFirstOrLastWhere(array, predicate, Array.min(order))
421
- );
422
- var takeLastWhere2 = dual(
423
- 3,
424
- (array, predicate, order) => takeFirstOrLastWhere(array, predicate, Array.max(order))
425
- );
426
- var categorize = (items, categorize2) => Array.reduce(
427
- items,
428
- // Start with an empty record of categorized items. `Record.empty()`
429
- // returns a `NonLiteralKey<C>`-keyed record, which is structurally
430
- // equivalent to `Partial<Record<C, A[]>>`; the cast tells TypeScript
431
- // we'll be writing typed keys back via the reducer below.
432
- Record.empty(),
433
- // For each item, add it to the appropriate category
434
- (categorizedItems, item) => RecordX_exports.upsert(
435
- categorizedItems,
436
- categorize2(item),
437
- // This is the next item's category
438
- Option.match({
439
- // This is the first item in this category, so create a new array
440
- onNone: () => Array.of(item),
441
- // Append the item to the existing array
442
- onSome: Array.append(item)
443
- })
444
- )
445
- );
446
- var compactNullable = (array) => Array.filter(array, Predicate.isNotNullish);
447
- var filterHead = dual(2, (array, predicate) => {
448
- const firstMatchingIndex = Array.findFirstIndex(array, predicate);
449
- return Option.match(firstMatchingIndex, {
450
- onSome: (index) => slice(array, index, array.length),
451
- onNone: () => []
452
- });
453
- });
454
- var filterTail = dual(2, (array, predicate) => {
455
- const lastMatchingIndex = Array.findLastIndex(array, predicate);
456
- return Option.match(lastMatchingIndex, {
457
- onSome: (index) => slice(array, 0, index + 1),
458
- onNone: () => []
459
- });
460
- });
461
- var filterMapNullable = dual(
462
- 2,
463
- (array, f) => pipe(
464
- array,
465
- Array.filterMap(
466
- (value) => pipe(f(value), Option.fromNullishOr, ResultX_exports.fromOption)
467
- )
468
- )
469
- );
470
- var findFirstWithIndex2d = dual(
471
- 2,
472
- (array, predicate) => Array.findFirstWithIndex(
473
- array,
474
- (row) => Array.findFirstWithIndex(row, predicate)
475
- ).pipe(
476
- Option.map(([[value, secondIndex], firstIndex]) => [
477
- value,
478
- firstIndex,
479
- secondIndex
480
- ])
481
- )
482
- );
483
- var chunkBy = dual(
484
- 3,
485
- (array, chunk, chunkEquals) => {
486
- if (array.length === 0) {
487
- return [];
488
- }
489
- const result = [];
490
- for (const item of array) {
491
- const groupValue = chunk(item);
492
- if (result.length > 0) {
493
- const lastGroup = result.at(-1);
494
- if (lastGroup && chunkEquals(lastGroup.group, groupValue)) {
495
- lastGroup.values.push(item);
496
- continue;
497
- }
498
- }
499
- result.push({ group: groupValue, values: Array.of(item) });
500
- }
501
- return result;
502
- }
503
- );
504
-
505
- // src/BigIntX/BigIntX.ts
506
- var BigIntX_exports = {};
507
- __export(BigIntX_exports, {
508
- toNumberOrThrow: () => toNumberOrThrow
509
- });
510
- var toNumberOrThrow = (value) => BigInt$1.toNumber(value).pipe(
511
- Option.getOrThrowWith(
512
- () => new Error(`Value ${value} is outside safe integer range`)
513
- )
514
- );
515
-
516
- // src/BooleanX/BooleanX.ts
517
- var BooleanX_exports = {};
518
- __export(BooleanX_exports, {
519
- toBinary: () => toBinary
520
- });
521
- var toBinary = (value) => value ? 1 : 0;
522
-
523
- // src/DurationX/DurationX.ts
524
- var DurationX_exports = {};
525
- __export(DurationX_exports, {
526
- diff: () => diff,
527
- mapAsUnit: () => mapAsUnit
528
- });
529
- var MICROS_PER_MILLI = 1e3;
530
- var diff = dual(
531
- 2,
532
- (self, that) => Duration.millis(
533
- // Clamp at 0 — "diff" represents elapsed time since `that`; if `that`
534
- // is in the future relative to `self`, the elapsed time is zero
535
- // (not negative).
536
- Math.max(0, DateTime.toEpochMillis(self) - DateTime.toEpochMillis(that))
537
- )
538
- );
539
- var toUnit = dual(
540
- 2,
541
- (duration, unit) => Match.value(unit).pipe(
542
- Match.whenOr("week", "weeks", () => Duration.toWeeks(duration)),
543
- Match.whenOr("day", "days", () => Duration.toDays(duration)),
544
- Match.whenOr("hour", "hours", () => Duration.toHours(duration)),
545
- Match.whenOr("minute", "minutes", () => Duration.toMinutes(duration)),
546
- Match.whenOr("second", "seconds", () => Duration.toSeconds(duration)),
547
- Match.whenOr("milli", "millis", () => Duration.toMillis(duration)),
548
- Match.whenOr(
549
- "micro",
550
- "micros",
551
- () => Duration.toMillis(duration) * MICROS_PER_MILLI
552
- ),
553
- Match.whenOr(
554
- "nano",
555
- "nanos",
556
- () => pipe$1(
557
- Duration.toNanos(duration),
558
- Option.getOrThrowWith(
559
- () => new Error("Duration.toNanos returned None")
560
- ),
561
- BigIntX_exports.toNumberOrThrow
562
- )
563
- ),
564
- Match.exhaustive
565
- )
566
- );
567
- var fromUnit = dual(
568
- 2,
569
- (value, unit) => Match.value(unit).pipe(
570
- Match.whenOr("week", "weeks", () => Duration.weeks(value)),
571
- Match.whenOr("day", "days", () => Duration.days(value)),
572
- Match.whenOr("hour", "hours", () => Duration.hours(value)),
573
- Match.whenOr("minute", "minutes", () => Duration.minutes(value)),
574
- Match.whenOr("second", "seconds", () => Duration.seconds(value)),
575
- Match.whenOr("milli", "millis", () => Duration.millis(value)),
576
- Match.whenOr("micro", "micros", () => Duration.micros(BigInt(value))),
577
- Match.whenOr("nano", "nanos", () => Duration.nanos(BigInt(value))),
578
- Match.exhaustive
579
- )
580
- );
581
- var mapAsUnit = dual(
582
- 3,
583
- (duration, unit, map2) => pipe$1(
584
- duration,
585
- // Convert to that unit
586
- toUnit(unit),
587
- // Truncate to the requested number of digits
588
- map2,
589
- // Convert back to a duration
590
- fromUnit(unit)
591
- )
592
- );
593
-
594
- // src/EffectX/EffectX.ts
595
- var EffectX_exports = {};
596
- __export(EffectX_exports, {
597
- flattenOption: () => flattenOption,
598
- fromOptionOrElse: () => fromOptionOrElse,
599
- tryUntil: () => tryUntil
600
- });
601
- var USER_INSTANT_DURATION = Duration.millis(200);
602
- var flattenOption = dual(
603
- 2,
604
- (effect, onNone) => Effect.flatMap(
605
- effect,
606
- (option) => pipe(Effect.fromOption(option), Effect.mapError(onNone))
607
- )
608
- );
609
- var fromOptionOrElse = dual(
610
- 2,
611
- (option, onNone) => pipe(Effect.fromOption(option), Effect.mapError(onNone))
612
- );
613
- var tryUntil = ({
614
- try: doTry,
615
- until: isDone,
616
- sleepDuration = USER_INSTANT_DURATION,
617
- maxDuration
618
- }) => {
619
- const immediateValue = doTry();
620
- if (isDone(immediateValue)) {
621
- return Effect.succeed(immediateValue);
622
- }
623
- return Effect.sync(doTry).pipe(
624
- // Sleep in between each attempt
625
- Effect.delay(sleepDuration),
626
- // Keep doing this until the predicate passes
627
- Effect.repeat({ until: isDone }),
628
- // Until a timeout occurs. In v4, `Effect.timeout` raises `TimeoutError`
629
- // on its own — no separate `timeoutFail` overload is needed.
630
- Effect.timeout(maxDuration),
631
- Effect.catchTag(
632
- "TimeoutError",
633
- () => Effect.fail(
634
- new Cause.TimeoutError(
635
- `Timed out after ${Duration.format(maxDuration)} waiting for value to pass predicate`
636
- )
637
- )
638
- )
639
- );
640
- };
641
-
642
- // src/FormDataX/FormDataX.ts
643
- var FormDataX_exports = {};
644
- __export(FormDataX_exports, {
645
- decodeSync: () => decodeSync
646
- });
647
- var decodeSync = Function.dual(
648
- 2,
649
- (formData, schema) => Schema.decodeUnknownSync(Schema.fromFormData(schema))(formData)
650
- );
651
-
652
- // src/MapX/MapX.ts
653
- var MapX_exports = {};
654
- __export(MapX_exports, {
655
- getOrElseSetGet: () => getOrElseSetGet
656
- });
657
- var getOrElseSetGet = dual(3, (map2, key, fallbackIfNotFound) => {
658
- if (!map2.has(key)) {
659
- map2.set(key, fallbackIfNotFound());
660
- return fallbackIfNotFound();
661
- }
662
- const existingValue = map2.get(key);
663
- if (Predicate.isNullish(existingValue)) {
664
- throw new Error(`Value is nullable: ${String(key)}`);
665
- }
666
- return existingValue;
667
- });
668
-
669
- // src/NonNullableX/NonNullableX.ts
670
- var NonNullableX_exports = {};
671
- __export(NonNullableX_exports, {
672
- fromNullableOrThrow: () => fromNullableOrThrow,
673
- lift: () => lift,
674
- map: () => map,
675
- match: () => match2,
676
- nullableOrder: () => nullableOrder
677
- });
678
- var fromNullableOrThrow = (value, variableName) => {
679
- if (Predicate.isNotNullish(value)) {
680
- return value;
681
- }
682
- throw new Error(
683
- `Value is nullable: ${String(value)}${Predicate.isNotNullish(variableName) ? ` (variable name: ${variableName})` : ""}`
684
- );
685
- };
686
- var match2 = dual(
687
- 2,
688
- (value, {
689
- whenNullable,
690
- whenNotNullable
691
- }) => Predicate.isNotNullish(value) ? whenNotNullable(value) : whenNullable()
692
- );
693
- var map = dual(
694
- 2,
695
- (a, map2) => {
696
- if (Predicate.isNotNullish(a)) {
697
- return map2(a);
698
- }
699
- if (Predicate.isNullish(a)) {
700
- return a;
701
- }
702
- throw new Error(`Value is neither nullable nor non-nullable: ${String(a)}`);
703
- }
704
- );
705
- var lift = (map2) => (a) => {
706
- if (Predicate.isNullish(a)) {
707
- return a;
708
- }
709
- return map2(a);
710
- };
711
- var nullableOrder = dual(
712
- 2,
713
- (order, behavior) => {
714
- const { nullableSortCategory, valueSortCategory } = Match.value(
715
- behavior
716
- ).pipe(
717
- Match.when("value-null", () => ({
718
- nullableSortCategory: 1,
719
- valueSortCategory: 0
720
- })),
721
- Match.when("null-value", () => ({
722
- nullableSortCategory: 0,
723
- valueSortCategory: 1
724
- })),
725
- Match.exhaustive
726
- );
727
- return (a, b) => {
728
- if (Predicate.isNotNullish(a) && Predicate.isNotNullish(b)) {
729
- return order(a, b);
730
- }
731
- const aCategory = Predicate.isNotNullish(a) ? valueSortCategory : nullableSortCategory;
732
- const bCategory = Predicate.isNotNullish(b) ? valueSortCategory : nullableSortCategory;
733
- return Number$1.sign(aCategory - bCategory);
734
- };
735
- }
736
- );
737
-
738
- // src/NumberX/NumberX.ts
739
- var NumberX_exports = {};
740
- __export(NumberX_exports, {
741
- indexToExcel: () => indexToExcel,
742
- indexToRank: () => indexToRank,
743
- padLeftZeroes: () => padLeftZeroes,
744
- roundToDigits: () => roundToDigits,
745
- toFixed: () => toFixed,
746
- unsafeLogBase: () => unsafeLogBase,
747
- unsafeToPercentOf: () => unsafeToPercentOf
748
- });
749
- var logBase = dual(2, (number, base) => {
750
- if (number <= 0) {
751
- return Option.none();
752
- }
753
- if (base <= 0 || base === 1) {
754
- return Option.none();
755
- }
756
- if (base < 1 && number >= 1) {
757
- return Option.none();
758
- }
759
- if (base >= 1 && number < 1) {
760
- return Option.none();
761
- }
762
- return Option.some(Math.log(number) / Math.log(base));
763
- });
764
- var unsafeLogBase = dual(
765
- 2,
766
- (number, base) => Option.getOrThrowWith(
767
- logBase(number, base),
768
- () => new Error(`Error calculating log base ${base} of ${number}`)
769
- )
770
- );
771
- var toPercentOf = dual(
772
- 2,
773
- (numerator, total) => pipe(
774
- Number$1.divide(numerator, total),
775
- Option.map((ratio) => ratio * 100)
776
- )
777
- );
778
- var unsafeToPercentOf = dual(
779
- 2,
780
- (numerator, total) => Option.getOrThrowWith(
781
- toPercentOf(numerator, total),
782
- () => new Error(`Division by zero when dividing ${numerator} by ${total}`)
783
- )
784
- );
785
- var toFixed = dual(
786
- 2,
787
- (number, numberDigits) => number.toFixed(numberDigits)
788
- );
789
- var roundToDigits = dual(
790
- 2,
791
- (number, numberDigits) => Number(number.toFixed(numberDigits))
792
- );
793
- var padLeftZeroes = dual(
794
- 2,
795
- (number, numberDigits) => number.toString().padStart(numberDigits, "0")
796
- );
797
- var indexToRank = (index) => index + 1;
798
- var EXCEL_COLUMNS_BASE_CHARS = [..."ABCDEFGHIJKLMNOPQRSTUVWXYZ"];
799
- var indexToExcel = (index) => {
800
- if (index < 0) {
801
- return Option.none();
802
- }
803
- const baseChars = EXCEL_COLUMNS_BASE_CHARS;
804
- let excel = "";
805
- const base = baseChars.length;
806
- do {
807
- excel = baseChars[index % base] + excel;
808
- index = Math.floor(index / base) - 1;
809
- } while (index >= 0);
810
- return Option.some(excel);
811
- };
812
-
813
- // src/OptionX/OptionX.ts
814
- var OptionX_exports = {};
815
- __export(OptionX_exports, {
816
- fromNullableOption: () => fromNullableOption,
817
- ifSome: () => ifSome,
818
- inspectSome: () => inspectSome,
819
- mapSomeOrNull: () => mapSomeOrNull,
820
- mapSomeOrUndefined: () => mapSomeOrUndefined,
821
- tupleOf: () => tupleOf
822
- });
823
- var tupleOf = dual(
824
- 2,
825
- (a, b) => Option.flatMap(a, (a2) => Option.map(b, (b2) => [a2, b2]))
826
- );
827
- var ifSome = dual(2, (self, ifSome2) => {
828
- Option.match(self, {
829
- onSome: (value) => {
830
- ifSome2(value);
831
- },
832
- onNone: () => {
833
- }
834
- });
835
- });
836
- var inspectSome = dual(
837
- 2,
838
- (self, function_) => {
839
- ifSome(self, function_);
840
- return self;
841
- }
842
- );
843
- var fromNullableOption = (nullableOption) => Predicate.isNotNullish(nullableOption) ? nullableOption : Option.none();
844
- var mapSomeOrNull = dual(
845
- 2,
846
- (self, map2) => pipe(self, Option.map(map2), Option.getOrNull)
847
- );
848
- var mapSomeOrUndefined = dual(
849
- 2,
850
- (self, map2) => pipe(self, Option.map(map2), Option.getOrUndefined)
851
- );
852
-
853
- // src/OrderX/OrderX.ts
854
- var OrderX_exports = {};
855
- __export(OrderX_exports, {
856
- rankedEnum: () => rankedEnum
857
- });
858
- var rankedEnum = (ranks) => (self, that) => Number$1.sign(ranks[self] - ranks[that]);
859
-
860
- // src/PredicateX/PredicateX.ts
861
- var PredicateX_exports = {};
862
- __export(PredicateX_exports, {
863
- isNonEmptyString: () => isNonEmptyString,
864
- matchRefine: () => matchRefine
865
- });
866
- var matchRefine = dual(
867
- 3,
868
- (value, predicate, handlers) => predicate(value) ? handlers.whenTrue(value) : handlers.whenFalse()
869
- );
870
- function isNonEmptyString(value) {
871
- return Predicate.isNotNullish(value) && Predicate.isString(value) && String$1.isNonEmpty(value);
872
- }
873
-
874
- // src/PromiseX/PromiseX.ts
875
- var PromiseX_exports = {};
876
- __export(PromiseX_exports, {
877
- asVoid: () => asVoid
878
- });
879
- var asVoid = (promise) => promise.then(() => void 0);
880
-
881
- // src/SchemaX/SchemaX.ts
882
- var SchemaX_exports = {};
883
- __export(SchemaX_exports, {
884
- TrimmedNonEmptyString: () => TrimmedNonEmptyString,
885
- URLSafeFilePath: () => URLSafeFilePath,
886
- nonNegativeBigInt: () => nonNegativeBigInt,
887
- omit: () => omit,
888
- partial: () => partial,
889
- pick: () => pick,
890
- pickPartial: () => pickPartial
891
- });
892
- var TrimmedNonEmptyString = Schema.NonEmptyString.pipe(
893
- Schema.decode({
894
- decode: SchemaGetter.transform((s) => s.trim()),
895
- encode: SchemaGetter.transform((s) => s.trim())
896
- })
897
- );
898
- var URLSafeFilePath = TrimmedNonEmptyString.pipe(
899
- Schema.decode({
900
- decode: SchemaGetter.transform((path) => decodeURIComponent(path)),
901
- encode: SchemaGetter.transform((path) => encodeURIComponent(path))
902
- })
903
- );
904
- var clampMinBigInt = (min) => (schema) => schema.pipe(
905
- Schema.decode({
906
- decode: SchemaGetter.transform((value) => BigInt$1.max(value, min)),
907
- encode: SchemaGetter.transform((value) => BigInt$1.max(value, min))
908
- })
909
- );
910
- var nonNegativeBigInt = clampMinBigInt(0n);
911
- var pick = (schema, ...keys) => schema.mapFields(
912
- (fields) => Struct.pick(fields, keys)
913
- );
914
- var omit = (schema, ...keys) => schema.mapFields(
915
- (fields) => Struct.omit(fields, keys)
916
- );
917
- var partial = (schema) => schema.mapFields((fields) => {
918
- const result = {};
919
- for (const key of Object.keys(fields)) {
920
- result[key] = Schema.optional(fields[key]);
921
- }
922
- return result;
923
- });
924
- var pickPartial = (schema, ...keys) => partial(pick(schema, ...keys));
925
-
926
- // src/SetX/SetX.ts
927
- var SetX_exports = {};
928
- __export(SetX_exports, {
929
- add: () => add,
930
- remove: () => remove,
931
- safelyMutate: () => safelyMutate,
932
- toggle: () => toggle
933
- });
934
- var safelyMutate = dual(2, (set, mutate) => {
935
- const copy = new Set(set);
936
- return mutate(copy);
937
- });
938
- var add = dual(
939
- 2,
940
- (set, value) => set.has(value) ? set : new Set(set).add(value)
941
- );
942
- var remove = dual(2, (set, value) => {
943
- if (set.has(value)) {
944
- const newSet = new Set(set);
945
- newSet.delete(value);
946
- return newSet;
947
- }
948
- return set;
949
- });
950
- var toggle = dual(
951
- 2,
952
- (set, value) => set.has(value) ? remove(set, value) : add(set, value)
953
- );
954
-
955
- // src/StringX/StringX.ts
956
- var StringX_exports = {};
957
- __export(StringX_exports, {
958
- ensurePrepend: () => ensurePrepend,
959
- prepend: () => prepend,
960
- surround: () => surround
961
- });
962
- var prepend = dual(2, (string_, start) => `${start}${string_}`);
963
- var surround = dual(
964
- 3,
965
- (string_, start, end) => `${start}${string_}${end}`
966
- );
967
- var ensurePrepend = dual(2, (string_, start) => {
968
- if (string_.startsWith(start)) {
969
- return string_;
970
- }
971
- return `${start}${string_}`;
972
- });
973
-
974
- // src/StructX/StructX.ts
975
- var StructX_exports = {};
976
- __export(StructX_exports, {
977
- defined: () => defined,
978
- filterDefined: () => filterDefined,
979
- hasNotNullableProperty: () => hasNotNullableProperty,
980
- pickSome: () => pickSome,
981
- some: () => some,
982
- truthy: () => truthy
983
- });
984
- var defined = (name, value) => Predicate.isUndefined(value) ? {} : Record.singleton(name, value);
985
- var filterDefined = (record) => Object.entries(record).reduce(
986
- (accumulator, [key, value]) => ({ ...accumulator, ...defined(key, value) }),
987
- {}
988
- );
989
- var some = (name, value) => Option.match(value, {
990
- onSome: (someValue) => Record.singleton(name, someValue),
991
- onNone: () => ({})
992
- });
993
- var someSingleton = dual(
994
- 2,
995
- (value, name) => some(name, value)
996
- );
997
- function pickSome(record, key, renameKeyTo) {
998
- return pipe(
999
- Record.get(record, key),
1000
- Option.flatten,
1001
- someSingleton(renameKeyTo ?? key)
1002
- );
1003
- }
1004
- var truthy = (name, value) => Predicate.isTruthy(value) ? Record.singleton(name, value) : {};
1005
- var hasNotNullableProperty = dual(
1006
- 2,
1007
- (object, key) => Predicate.hasProperty(object, key) && Predicate.isNotNullish(object[key])
1008
- );
1009
-
1010
- export { ArrayX_exports as ArrayX, BigIntX_exports as BigIntX, BooleanX_exports as BooleanX, DurationX_exports as DurationX, EffectX_exports as EffectX, FormDataX_exports as FormDataX, MapX_exports as MapX, NonNullableX_exports as NonNullableX, NumberX_exports as NumberX, OptionX_exports as OptionX, OrderX_exports as OrderX, PredicateX_exports as PredicateX, PromiseX_exports as PromiseX, RecordX_exports as RecordX, ResultX_exports as ResultX, SchemaX_exports as SchemaX, SetX_exports as SetX, StringX_exports as StringX, StructX_exports as StructX, WarnResult_exports as WarnResult, fromNullableOrThrow as nn };
1011
- //# sourceMappingURL=index.js.map
1
+ export * as ArrayX from "./ArrayX.js";
2
+ export * as BigIntX from "./BigIntX.js";
3
+ export * as BooleanX from "./BooleanX.js";
4
+ export * as DurationX from "./DurationX.js";
5
+ export * as EffectX from "./EffectX.js";
6
+ export * as FormDataX from "./FormDataX.js";
7
+ export * as InclusiveOr from "./InclusiveOr.js";
8
+ export * as MapX from "./MapX.js";
9
+ export * as NonNullableX from "./NonNullableX.js";
10
+ export { fromNullableOrThrow as nn } from "./NonNullableX.js";
11
+ export * as NumberX from "./NumberX.js";
12
+ export * as OptionX from "./OptionX.js";
13
+ export * as OrderX from "./OrderX.js";
14
+ export * as PredicateX from "./PredicateX.js";
15
+ export * as PromiseX from "./PromiseX.js";
16
+ export * as RecordX from "./RecordX.js";
17
+ export * as ResultX from "./ResultX.js";
18
+ export * as SchemaX from "./SchemaX.js";
19
+ export * as SetX from "./SetX.js";
20
+ export * as StringX from "./StringX.js";
21
+ export * as StructX from "./StructX.js";
22
+ export * as WarnResult from "./WarnResult.js";
1012
23
  //# sourceMappingURL=index.js.map