ts-data-forge 14.6.2 → 14.6.4

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 (182) hide show
  1. package/dist/array/impl/array-utils-creation.mjs +103 -103
  2. package/dist/array/impl/array-utils-element-access.mjs +46 -46
  3. package/dist/array/impl/array-utils-iterators.mjs +54 -54
  4. package/dist/array/impl/array-utils-length-bounded-array-cast.mjs +49 -49
  5. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs +40 -40
  6. package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs +42 -42
  7. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs +46 -46
  8. package/dist/array/impl/array-utils-modification.mjs +5 -5
  9. package/dist/array/impl/array-utils-reducing-value.mjs +11 -11
  10. package/dist/array/impl/array-utils-search.mjs +6 -6
  11. package/dist/array/impl/array-utils-set-op.mjs +116 -116
  12. package/dist/array/impl/array-utils-size.mjs +6 -6
  13. package/dist/array/impl/array-utils-slice-clamped.mjs +1 -1
  14. package/dist/array/impl/array-utils-slicing.mjs +56 -56
  15. package/dist/array/impl/array-utils-transformation.mjs +158 -158
  16. package/dist/array/impl/array-utils-validation.mjs +36 -36
  17. package/dist/collections/imap-mapped.mjs +195 -195
  18. package/dist/collections/imap.mjs +143 -143
  19. package/dist/collections/iset-mapped.mjs +320 -320
  20. package/dist/collections/iset.mjs +207 -207
  21. package/dist/collections/queue.mjs +130 -130
  22. package/dist/collections/stack.mjs +125 -125
  23. package/dist/expect-type.mjs +68 -68
  24. package/dist/functional/async-result/impl/async-result-flat-map.mjs +3 -3
  25. package/dist/functional/async-result/impl/async-result-map-err.mjs +2 -2
  26. package/dist/functional/async-result/impl/async-result-map.mjs +2 -2
  27. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs +31 -31
  28. package/dist/functional/optional/impl/optional-expect-to-be.mjs +1 -1
  29. package/dist/functional/optional/impl/optional-filter.mjs +1 -1
  30. package/dist/functional/optional/impl/optional-flat-map.mjs +1 -1
  31. package/dist/functional/optional/impl/optional-from-nullable.mjs +24 -24
  32. package/dist/functional/optional/impl/optional-is-none.mjs +19 -19
  33. package/dist/functional/optional/impl/optional-is-optional.mjs +18 -18
  34. package/dist/functional/optional/impl/optional-is-some.mjs +20 -20
  35. package/dist/functional/optional/impl/optional-map.mjs +2 -2
  36. package/dist/functional/optional/impl/optional-match.mjs +2 -2
  37. package/dist/functional/optional/impl/optional-none.mjs +16 -16
  38. package/dist/functional/optional/impl/optional-or-else.mjs +1 -1
  39. package/dist/functional/optional/impl/optional-some.mjs +19 -19
  40. package/dist/functional/optional/impl/optional-to-nullable.mjs +26 -26
  41. package/dist/functional/optional/impl/optional-unwrap-or.mjs +1 -1
  42. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +28 -28
  43. package/dist/functional/optional/impl/optional-unwrap.mjs +1 -1
  44. package/dist/functional/optional/impl/optional-zip.mjs +32 -32
  45. package/dist/functional/optional/impl/tag.mjs +1 -1
  46. package/dist/functional/pipe.mjs +19 -19
  47. package/dist/functional/result/impl/result-err.mjs +25 -25
  48. package/dist/functional/result/impl/result-expect-to-be.mjs +2 -2
  49. package/dist/functional/result/impl/result-flat-map.mjs +4 -4
  50. package/dist/functional/result/impl/result-fold.mjs +4 -4
  51. package/dist/functional/result/impl/result-from-optional.mjs +2 -2
  52. package/dist/functional/result/impl/result-from-promise.mjs +34 -34
  53. package/dist/functional/result/impl/result-from-throwable.mjs +29 -29
  54. package/dist/functional/result/impl/result-is-err.mjs +19 -19
  55. package/dist/functional/result/impl/result-is-ok.mjs +19 -19
  56. package/dist/functional/result/impl/result-is-result.mjs +19 -19
  57. package/dist/functional/result/impl/result-map-err.mjs +4 -4
  58. package/dist/functional/result/impl/result-map.mjs +4 -4
  59. package/dist/functional/result/impl/result-match.mjs +3 -3
  60. package/dist/functional/result/impl/result-ok.mjs +25 -25
  61. package/dist/functional/result/impl/result-or-else.mjs +2 -2
  62. package/dist/functional/result/impl/result-safe-try.mjs +15 -15
  63. package/dist/functional/result/impl/result-safe-unwrap.mjs +33 -33
  64. package/dist/functional/result/impl/result-swap.mjs +20 -20
  65. package/dist/functional/result/impl/result-to-optional.mjs +27 -27
  66. package/dist/functional/result/impl/result-unwrap-err-or.mjs +2 -2
  67. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +31 -31
  68. package/dist/functional/result/impl/result-unwrap-err.mjs +30 -30
  69. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +2 -2
  70. package/dist/functional/result/impl/result-unwrap-ok.mjs +1 -1
  71. package/dist/functional/result/impl/result-unwrap-throw.mjs +31 -31
  72. package/dist/functional/result/impl/result-zip.mjs +29 -29
  73. package/dist/functional/result/impl/tag.mjs +1 -1
  74. package/dist/functional/ternary-result/impl/tag.mjs +2 -2
  75. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +13 -13
  76. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +4 -4
  77. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +4 -4
  78. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +18 -18
  79. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +17 -17
  80. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +17 -17
  81. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +19 -19
  82. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +19 -19
  83. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +18 -18
  84. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +2 -2
  85. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +3 -3
  86. package/dist/functional/ternary-result/impl/ternary-result-map.mjs +4 -4
  87. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +14 -14
  88. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +19 -19
  89. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +19 -19
  90. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +17 -17
  91. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +1 -1
  92. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +20 -20
  93. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +18 -18
  94. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +17 -17
  95. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +16 -16
  96. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +31 -31
  97. package/dist/functional/ternary-result/impl/variant-name.mjs +1 -1
  98. package/dist/guard/has-key.mjs +41 -41
  99. package/dist/guard/is-non-empty-string.mjs +37 -37
  100. package/dist/guard/is-non-null-object.mjs +34 -34
  101. package/dist/guard/is-primitive.mjs +31 -31
  102. package/dist/guard/is-record.mjs +86 -86
  103. package/dist/guard/is-type.mjs +387 -387
  104. package/dist/guard/key-is-in.mjs +40 -40
  105. package/dist/iterator/range.mjs +1 -1
  106. package/dist/json/json.mjs +289 -289
  107. package/dist/number/branded-types/finite-number.mjs +116 -116
  108. package/dist/number/branded-types/int.mjs +223 -223
  109. package/dist/number/branded-types/int16.mjs +116 -116
  110. package/dist/number/branded-types/int32.mjs +116 -116
  111. package/dist/number/branded-types/negative-finite-number.mjs +126 -126
  112. package/dist/number/branded-types/negative-int.mjs +104 -104
  113. package/dist/number/branded-types/negative-safe-int.mjs +104 -104
  114. package/dist/number/branded-types/non-negative-finite-number.mjs +132 -132
  115. package/dist/number/branded-types/non-negative-int16.mjs +113 -113
  116. package/dist/number/branded-types/non-negative-int32.mjs +113 -113
  117. package/dist/number/branded-types/non-positive-finite-number.mjs +116 -116
  118. package/dist/number/branded-types/non-positive-int.mjs +97 -97
  119. package/dist/number/branded-types/non-positive-safe-int.mjs +98 -98
  120. package/dist/number/branded-types/non-zero-finite-number.mjs +112 -112
  121. package/dist/number/branded-types/non-zero-int.mjs +82 -82
  122. package/dist/number/branded-types/non-zero-int16.mjs +95 -95
  123. package/dist/number/branded-types/non-zero-int32.mjs +95 -95
  124. package/dist/number/branded-types/non-zero-safe-int.mjs +99 -99
  125. package/dist/number/branded-types/non-zero-uint16.mjs +95 -95
  126. package/dist/number/branded-types/non-zero-uint32.mjs +95 -95
  127. package/dist/number/branded-types/positive-finite-number.mjs +134 -134
  128. package/dist/number/branded-types/positive-int.mjs +237 -237
  129. package/dist/number/branded-types/positive-int16.mjs +110 -110
  130. package/dist/number/branded-types/positive-int32.mjs +110 -110
  131. package/dist/number/branded-types/positive-safe-int.mjs +268 -268
  132. package/dist/number/branded-types/positive-uint16.mjs +110 -110
  133. package/dist/number/branded-types/positive-uint32.mjs +110 -110
  134. package/dist/number/branded-types/safe-int.mjs +259 -259
  135. package/dist/number/branded-types/safe-uint.mjs +111 -111
  136. package/dist/number/branded-types/uint.mjs +225 -225
  137. package/dist/number/branded-types/uint16.mjs +108 -108
  138. package/dist/number/branded-types/uint32.mjs +108 -108
  139. package/dist/number/enum/int8.mjs +118 -118
  140. package/dist/number/enum/uint8.mjs +109 -109
  141. package/dist/number/num-arithmetic-types.mjs +1 -1
  142. package/dist/number/num.mjs +478 -478
  143. package/dist/number/refined-number-utils.mjs +170 -170
  144. package/dist/object/object.mjs +234 -234
  145. package/dist/others/cast-mutable.mjs +33 -33
  146. package/dist/others/cast-readonly.mjs +32 -32
  147. package/dist/others/debounce-function.mjs +13 -13
  148. package/dist/others/fast-deep-equal.mjs +14 -14
  149. package/dist/others/if-then.mjs +29 -29
  150. package/dist/others/tuple.mjs +50 -50
  151. package/dist/others/unknown-to-string.mjs +38 -38
  152. package/dist/promise/promise.mjs +47 -47
  153. package/dist/string/str.mjs +177 -177
  154. package/dist/types.mjs +1 -1
  155. package/package.json +6 -6
  156. package/src/guard/is-type.test.mts +2 -2
  157. package/src/number/branded-types/finite-number.test.mts +1 -1
  158. package/src/number/branded-types/int.test.mts +1 -1
  159. package/src/number/branded-types/int16.test.mts +1 -1
  160. package/src/number/branded-types/int32.test.mts +1 -1
  161. package/src/number/branded-types/non-negative-finite-number.test.mts +1 -1
  162. package/src/number/branded-types/non-negative-int16.test.mts +1 -1
  163. package/src/number/branded-types/non-negative-int32.test.mts +1 -1
  164. package/src/number/branded-types/non-zero-finite-number.test.mts +1 -1
  165. package/src/number/branded-types/non-zero-int.test.mts +1 -1
  166. package/src/number/branded-types/non-zero-int16.test.mts +1 -1
  167. package/src/number/branded-types/non-zero-int32.test.mts +1 -1
  168. package/src/number/branded-types/non-zero-safe-int.test.mts +1 -1
  169. package/src/number/branded-types/non-zero-uint16.test.mts +1 -1
  170. package/src/number/branded-types/non-zero-uint32.test.mts +1 -1
  171. package/src/number/branded-types/positive-finite-number.test.mts +1 -1
  172. package/src/number/branded-types/positive-int.test.mts +1 -1
  173. package/src/number/branded-types/positive-int16.test.mts +1 -1
  174. package/src/number/branded-types/positive-int32.test.mts +1 -1
  175. package/src/number/branded-types/positive-safe-int.test.mts +1 -1
  176. package/src/number/branded-types/positive-uint16.test.mts +1 -1
  177. package/src/number/branded-types/positive-uint32.test.mts +1 -1
  178. package/src/number/branded-types/safe-int.test.mts +1 -1
  179. package/src/number/branded-types/safe-uint.test.mts +1 -1
  180. package/src/number/branded-types/uint.test.mts +1 -1
  181. package/src/number/branded-types/uint16.test.mts +1 -1
  182. package/src/number/branded-types/uint32.test.mts +1 -1
@@ -1,34 +1,34 @@
1
1
  import { isSome } from './optional-is-some.mjs';
2
- /**
3
- * Unwraps an `Optional`, returning the contained value. Throws an error if
4
- * the `Optional` is `None`.
5
- *
6
- * This is a safer alternative to direct value access when you know the
7
- * Optional should contain a value. Use this method when an empty Optional
8
- * represents a programming error or unexpected condition.
9
- *
10
- * @example
11
- *
12
- * ```ts
13
- * const present = Optional.some('available');
14
- *
15
- * assert.isTrue(Optional.unwrapThrow(present) === 'available');
16
- *
17
- * assert.throws(
18
- * () => Optional.unwrapThrow(Optional.none),
19
- * /has failed because it is `None`/u,
20
- * );
21
- * ```
22
- *
23
- * @template O The `UnknownOptional` type to unwrap.
24
- * @param optional The `Optional` to unwrap.
25
- * @returns The contained value if `Some`.
26
- * @throws {Error} Error with message "`unwrapThrow()` has failed because it
27
- * is `None`" if the `Optional` is `None`.
28
- */
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
29
  export const unwrapThrow = (optional) => {
30
30
  if (isSome(optional)) {
31
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
31
+
32
32
  return optional.value;
33
33
  }
34
34
  throw new Error('`unwrapThrow()` has failed because it is `None`');
@@ -1,7 +1,7 @@
1
1
  import { isSome } from './optional-is-some.mjs';
2
2
  export function unwrap(optional) {
3
3
  return isSome(optional)
4
- ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
4
+ ?
5
5
  optional.value
6
6
  : undefined;
7
7
  }
@@ -1,38 +1,38 @@
1
1
  import { isSome } from './optional-is-some.mjs';
2
2
  import { none } from './optional-none.mjs';
3
3
  import { some } from './optional-some.mjs';
4
- /**
5
- * Combines two `Optional` values into a single `Optional` containing a tuple.
6
- * If either `Optional` is `None`, returns `None`.
7
- *
8
- * @example
9
- *
10
- * ```ts
11
- * const zipped = Optional.zip(Optional.some('left'), Optional.some(1));
12
- *
13
- * assert.isTrue(Optional.isSome(zipped));
14
- *
15
- * if (Optional.isSome(zipped)) {
16
- * const expected: readonly [string, number] = ['left', 1] as const;
17
- *
18
- * assert.deepStrictEqual(zipped.value, expected);
19
- * }
20
- *
21
- * const missing = Optional.zip(
22
- * Optional.some('value'),
23
- * // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
24
- * Optional.none as Optional<number>,
25
- * );
26
- *
27
- * assert.deepStrictEqual(missing, Optional.none);
28
- * ```
29
- *
30
- * @template A The value type of the first `Optional`.
31
- * @template B The value type of the second `Optional`.
32
- * @param optionalA The first `Optional`.
33
- * @param optionalB The second `Optional`.
34
- * @returns An `Optional` containing a tuple of both values, or `None`.
35
- */
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
36
  export const zip = (optionalA, optionalB) => isSome(optionalA) && isSome(optionalB)
37
37
  ? some([optionalA.value, optionalB.value])
38
38
  : none;
@@ -1,4 +1,4 @@
1
1
  export const SomeTypeTagName = 'ts-data-forge::Optional.some';
2
- /** @internal String literal tag to identify the 'None' variant of Optional. */
2
+
3
3
  export const NoneTypeTagName = 'ts-data-forge::Optional.none';
4
4
  //# sourceMappingURL=tag.mjs.map
@@ -1,25 +1,25 @@
1
1
 
2
2
  import { Optional } from './optional/index.mjs';
3
- /**
4
- * Creates a new pipe object that allows for chaining operations on a value.
5
- *
6
- * This function provides a fluent interface for applying transformations to
7
- * values, with intelligent method selection based on the input type:
8
- *
9
- * - For `Optional` values: Provides `mapOptional` for safe Optional
10
- * transformations
11
- * - For other values: Provides `mapNullable` for null-safe transformations
12
- * - All types get the basic `map` method for general transformations
13
- *
14
- * The pipe maintains type safety throughout the chain, automatically selecting
15
- * the appropriate overload based on the current value type.
16
- *
17
- * @template A The type of the initial value to wrap in a pipe.
18
- * @param a The initial value to wrap in a pipe.
19
- * @returns A pipe object with chaining methods appropriate for the value type.
20
- */
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
21
  export const pipe = (a) =>
22
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
22
+
23
23
  ({
24
24
  value: a,
25
25
  map: (fn) => pipe(fn(a)),
@@ -1,29 +1,29 @@
1
1
  import { ErrTypeTagName } from './tag.mjs';
2
- /**
3
- * Creates a `Result.Err` containing the given error value.
4
- *
5
- * Use this constructor when an operation fails and you want to wrap the error
6
- * information in a Result type for consistent error handling.
7
- *
8
- * @example
9
- *
10
- * ```ts
11
- * const success = Result.ok({ id: 1 });
12
- *
13
- * const failure = Result.err(new Error('missing data'));
14
- *
15
- * assert.deepStrictEqual(success, {
16
- * $$tag: 'ts-data-forge::Result.ok',
17
- * value: { id: 1 },
18
- * });
19
- *
20
- * assert.isTrue(Result.isErr(failure));
21
- * ```
22
- *
23
- * @template E The type of the error value.
24
- * @param value The error value.
25
- * @returns A `Result.Err<E>` containing the value.
26
- */
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
27
  export const err = (value) => ({
28
28
  $$tag: ErrTypeTagName,
29
29
  value,
@@ -3,12 +3,12 @@ import { unwrapOk } from './result-unwrap-ok.mjs';
3
3
  export function expectToBe(...args) {
4
4
  switch (args.length) {
5
5
  case 2: {
6
- // Direct version: first argument is result
6
+
7
7
  const [result, message] = args;
8
8
  return expectToBeImpl(result, message);
9
9
  }
10
10
  case 1: {
11
- // Curried version: first argument is message
11
+
12
12
  const [message] = args;
13
13
  return (result) => expectToBeImpl(result, message);
14
14
  }
@@ -2,20 +2,20 @@ import { isErr } from './result-is-err.mjs';
2
2
  export function flatMap(...args) {
3
3
  switch (args.length) {
4
4
  case 2: {
5
- // Direct version: first argument is result
5
+
6
6
  const [result, flatMapFn] = args;
7
7
  return flatMapImpl(result, flatMapFn);
8
8
  }
9
9
  case 1: {
10
- // Curried version
10
+
11
11
  const [flatMapFn] = args;
12
12
  return (result) => flatMapImpl(result, flatMapFn);
13
13
  }
14
14
  }
15
15
  }
16
16
  const flatMapImpl = (result, flatMapFn) => isErr(result)
17
- ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
17
+ ?
18
18
  result
19
- : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
19
+ :
20
20
  flatMapFn(result.value);
21
21
  //# sourceMappingURL=result-flat-map.mjs.map
@@ -4,20 +4,20 @@ import { ok } from './result-ok.mjs';
4
4
  export function fold(...args) {
5
5
  switch (args.length) {
6
6
  case 3: {
7
- // Direct version: first argument is result
7
+
8
8
  const [result, mapFn, mapErrFn] = args;
9
9
  return foldImpl(result, mapFn, mapErrFn);
10
10
  }
11
11
  case 2: {
12
- // Curried version
12
+
13
13
  const [mapFn, mapErrFn] = args;
14
14
  return (result) => foldImpl(result, mapFn, mapErrFn);
15
15
  }
16
16
  }
17
17
  }
18
18
  const foldImpl = (result, mapFn, mapErrFn) => isOk(result)
19
- ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
19
+ ?
20
20
  ok(mapFn(result.value))
21
- : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
21
+ :
22
22
  err(mapErrFn(result.value));
23
23
  //# sourceMappingURL=result-fold.mjs.map
@@ -8,14 +8,14 @@ export function fromOptional(...args) {
8
8
  return fromOptionalImpl(optional, error);
9
9
  }
10
10
  case 1: {
11
- // Curried version: the only argument is the error value
11
+
12
12
  const [error] = args;
13
13
  return (optional) => fromOptionalImpl(optional, error);
14
14
  }
15
15
  }
16
16
  }
17
17
  const fromOptionalImpl = (optional, error) => Optional.isSome(optional)
18
- ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
18
+ ?
19
19
  ok(Optional.unwrap(optional))
20
20
  : err(error);
21
21
  //# sourceMappingURL=result-from-optional.mjs.map
@@ -1,39 +1,39 @@
1
1
  import { err } from './result-err.mjs';
2
2
  import { ok } from './result-ok.mjs';
3
- /**
4
- * Converts a Promise into a Promise that resolves to a `Result`. If the input
5
- * Promise resolves, the `Result` will be `Ok` with the resolved value. If the
6
- * input Promise rejects, the `Result` will be `Err` with the rejection
7
- * reason.
8
- *
9
- * The error channel is `unknown`, since the rejection reason is carried
10
- * through untouched. For a concrete error type, use `AsyncResult.fromPromise`
11
- * with a `mapError` function; called without one it behaves exactly as this
12
- * function does.
13
- *
14
- * @example
15
- *
16
- * ```ts
17
- * const successPromise = Result.fromPromise(Promise.resolve('ok'));
18
- *
19
- * const failurePromise = Result.fromPromise(
20
- * Promise.reject(new Error('fail')),
21
- * );
22
- *
23
- * const resolved = await successPromise;
24
- *
25
- * const rejected = await failurePromise;
26
- *
27
- * assert.deepStrictEqual(resolved, Result.ok('ok'));
28
- *
29
- * assert.isTrue(Result.isErr(rejected));
30
- * ```
31
- *
32
- * @template P The type of the input Promise.
33
- * @param promise The Promise to convert.
34
- * @returns A Promise that resolves to `Result<UnwrapPromise<P>, unknown>`.
35
- */
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
36
  export const fromPromise = (promise) =>
37
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
37
+
38
38
  promise.then((v) => ok(v)).catch(err);
39
39
  //# sourceMappingURL=result-from-promise.mjs.map
@@ -2,35 +2,35 @@ import { isError } from '@sindresorhus/is';
2
2
  import { unknownToString } from '../../../others/index.mjs';
3
3
  import { err } from './result-err.mjs';
4
4
  import { ok } from './result-ok.mjs';
5
- /**
6
- * Wraps a function that may throw an exception in a `Result`.
7
- *
8
- * This is a fundamental utility for converting traditional exception-based
9
- * error handling into Result-based error handling. Any thrown value is
10
- * converted to an Error object for consistent error handling.
11
- *
12
- * If the function executes successfully, returns `Result.Ok` with the result.
13
- * If the function throws, returns `Result.Err` with the caught error.
14
- *
15
- * @example
16
- *
17
- * ```ts
18
- * const success = Result.fromThrowable(() => 1 + 1);
19
- *
20
- * const failure = Result.fromThrowable(() => {
21
- * throw new Error('boom');
22
- * });
23
- *
24
- * assert.deepStrictEqual(success, Result.ok(2));
25
- *
26
- * assert.isTrue(Result.isErr(failure));
27
- * ```
28
- *
29
- * @template T The return type of the function.
30
- * @param fn The function to execute that may throw.
31
- * @returns A `Result<T, Error>` containing either the successful result or
32
- * the caught error.
33
- */
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
34
  export const fromThrowable = (fn) => {
35
35
  try {
36
36
  return ok(fn());
@@ -1,22 +1,22 @@
1
1
  import { ErrTypeTagName } from './tag.mjs';
2
- /**
3
- * Type guard for the error variant.
4
- *
5
- * @example
6
- *
7
- * ```ts
8
- * const operation = Result.ok(3);
9
- *
10
- * const failure = Result.err('error');
11
- *
12
- * if (Result.isOk(operation)) {
13
- * const value: number = operation.value;
14
- *
15
- * assert.isTrue(value === 3);
16
- * }
17
- *
18
- * assert.isTrue(Result.isErr(failure));
19
- * ```
20
- */
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
21
  export const isErr = (result) => result.$$tag === ErrTypeTagName;
22
22
  //# sourceMappingURL=result-is-err.mjs.map
@@ -1,22 +1,22 @@
1
1
  import { OkTypeTagName } from './tag.mjs';
2
- /**
3
- * Type guard for the ok variant.
4
- *
5
- * @example
6
- *
7
- * ```ts
8
- * const operation = Result.ok(3);
9
- *
10
- * const failure = Result.err('error');
11
- *
12
- * if (Result.isOk(operation)) {
13
- * const value: number = operation.value;
14
- *
15
- * assert.isTrue(value === 3);
16
- * }
17
- *
18
- * assert.isTrue(Result.isErr(failure));
19
- * ```
20
- */
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
21
  export const isOk = (result) => result.$$tag === OkTypeTagName;
22
22
  //# sourceMappingURL=result-is-ok.mjs.map
@@ -1,24 +1,24 @@
1
1
  import { hasKey, isRecord } from '../../../guard/index.mjs';
2
2
  import { ErrTypeTagName, OkTypeTagName } from './tag.mjs';
3
- /**
4
- * Checks whether the provided value is a {@link Result<S, E>}.
5
- *
6
- * @example
7
- *
8
- * ```ts
9
- * const okValue = Result.ok('success');
10
- *
11
- * const errValue = Result.err(new Error('failure'));
12
- *
13
- * const notResult = { $$tag: 'ts-data-forge::Result.ok' } as const;
14
- *
15
- * assert.isTrue(Result.isResult(okValue));
16
- *
17
- * assert.isTrue(Result.isResult(errValue));
18
- *
19
- * assert.isFalse(Result.isResult(notResult));
20
- * ```
21
- */
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
22
  export const isResult = (maybeResult) => isRecord(maybeResult) &&
23
23
  hasKey(maybeResult, '$$tag') &&
24
24
  hasKey(maybeResult, 'value') &&
@@ -3,20 +3,20 @@ import { isOk } from './result-is-ok.mjs';
3
3
  export function mapErr(...args) {
4
4
  switch (args.length) {
5
5
  case 2: {
6
- // Direct version: first argument is result
6
+
7
7
  const [result, mapFn] = args;
8
8
  return mapErrImpl(result, mapFn);
9
9
  }
10
10
  case 1: {
11
- // Curried version: first argument is mapping function
11
+
12
12
  const [mapFn] = args;
13
13
  return (result) => mapErrImpl(result, mapFn);
14
14
  }
15
15
  }
16
16
  }
17
17
  const mapErrImpl = (result, mapFn) => isOk(result)
18
- ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
18
+ ?
19
19
  result
20
- : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
20
+ :
21
21
  err(mapFn(result.value));
22
22
  //# sourceMappingURL=result-map-err.mjs.map
@@ -3,20 +3,20 @@ import { ok } from './result-ok.mjs';
3
3
  export function map(...args) {
4
4
  switch (args.length) {
5
5
  case 2: {
6
- // Direct version: first argument is result
6
+
7
7
  const [result, mapFn] = args;
8
8
  return mapImpl(result, mapFn);
9
9
  }
10
10
  case 1: {
11
- // Curried version
11
+
12
12
  const [mapFn] = args;
13
13
  return (result) => mapImpl(result, mapFn);
14
14
  }
15
15
  }
16
16
  }
17
17
  const mapImpl = (result, mapFn) => isErr(result)
18
- ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
18
+ ?
19
19
  result
20
- : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
20
+ :
21
21
  ok(mapFn(result.value));
22
22
  //# sourceMappingURL=result-map.mjs.map