ts-data-forge 14.6.2 → 14.6.3

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 +4 -4
  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 +156 -156
  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,30 +1,30 @@
1
1
  import { unknownToString } from '../../../others/index.mjs';
2
2
  import { isWarn } from './ternary-result-is-warn.mjs';
3
3
  import { variantName } from './variant-name.mjs';
4
- /**
5
- * Returns the Warn value or throws if the result is not Warn.
6
- *
7
- * @example
8
- *
9
- * ```ts
10
- * const warnValue = TernaryResult.warn('pending', 'check logs');
11
- *
12
- * assert.strictEqual(TernaryResult.unwrapWarnThrow(warnValue), 'check logs');
13
- *
14
- * assert.throws(
15
- * () => TernaryResult.unwrapWarnThrow(TernaryResult.err('err')),
16
- * /Expected Warn/u,
17
- * );
18
- * ```
19
- */
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
20
  export const unwrapWarnThrow = (result, toStr = unknownToString) => {
21
21
  if (isWarn(result)) {
22
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
22
+
23
23
  return result.warning;
24
24
  }
25
25
  const variant = variantName(result.$$tag);
26
26
  throw new Error(`Expected Warn but got ${variant}: ${toStr(
27
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
27
+
28
28
  result.value)}`);
29
29
  };
30
30
  //# sourceMappingURL=ternary-result-unwrap-warn-throw.mjs.map
@@ -1,21 +1,21 @@
1
1
  import { isWarn } from './ternary-result-is-warn.mjs';
2
- /**
3
- * Safely unwraps the Warn value.
4
- *
5
- * @example
6
- *
7
- * ```ts
8
- * const warnValue = TernaryResult.warn('ok', 'careful');
9
- *
10
- * const okValue = TernaryResult.ok('ok');
11
- *
12
- * assert.strictEqual(TernaryResult.unwrapWarn(warnValue), 'careful');
13
- *
14
- * // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression
15
- * assert.strictEqual(TernaryResult.unwrapWarn(okValue), undefined);
16
- * ```
17
- */
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
18
  export const unwrapWarn = (result) =>
19
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
19
+
20
20
  isWarn(result) ? result.warning : undefined;
21
21
  //# sourceMappingURL=ternary-result-unwrap-warn.mjs.map
@@ -1,20 +1,20 @@
1
1
  import { WarnTypeTagName } from './tag.mjs';
2
- /**
3
- * Creates a `TernaryResult.Warn` containing the provided success value and
4
- * warning.
5
- *
6
- * @example
7
- *
8
- * ```ts
9
- * const caution = TernaryResult.warn({ id: 1 }, 'Needs review');
10
- *
11
- * assert.deepStrictEqual(caution, {
12
- * $$tag: 'ts-data-forge::Result.warn',
13
- * value: { id: 1 },
14
- * warning: 'Needs review',
15
- * });
16
- * ```
17
- */
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
18
  export const warn = (value, warning) => ({
19
19
  $$tag: WarnTypeTagName,
20
20
  value,
@@ -2,37 +2,37 @@ import { isErr } from './ternary-result-is-err.mjs';
2
2
  import { isWarn } from './ternary-result-is-warn.mjs';
3
3
  import { ok } from './ternary-result-ok.mjs';
4
4
  import { warn } from './ternary-result-warn.mjs';
5
- /**
6
- * Combines two `TernaryResult`s, prioritising Err over Warn over Ok.
7
- *
8
- * @example
9
- *
10
- * ```ts
11
- * const okPair = TernaryResult.zip(
12
- * TernaryResult.ok('left'),
13
- * TernaryResult.ok(1),
14
- * );
15
- *
16
- * const warnPair = TernaryResult.zip(
17
- * TernaryResult.warn('left', 'warn'),
18
- * TernaryResult.ok(1),
19
- * );
20
- *
21
- * const errPair = TernaryResult.zip(
22
- * TernaryResult.ok('left'),
23
- * TernaryResult.err('err'),
24
- * );
25
- *
26
- * assert.deepStrictEqual(okPair, TernaryResult.ok(['left', 1] as const));
27
- *
28
- * assert.deepStrictEqual(
29
- * warnPair,
30
- * TernaryResult.warn(['left', 1] as const, 'warn'),
31
- * );
32
- *
33
- * assert.deepStrictEqual(errPair, TernaryResult.err('err'));
34
- * ```
35
- */
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 = (resultA, resultB) => {
37
37
  if (isErr(resultA)) {
38
38
  return resultA;
@@ -1,5 +1,5 @@
1
1
  import { ErrTypeTagName, OkTypeTagName, WarnTypeTagName } from './tag.mjs';
2
- /** @internal Returns the human readable variant label for the given tag. */
2
+
3
3
  export const variantName = (tag) => {
4
4
  switch (tag) {
5
5
  case OkTypeTagName:
@@ -1,43 +1,43 @@
1
- /**
2
- * Type guard function that checks if an object has a specific key as its own
3
- * property.
4
- *
5
- * This function uses `Object.hasOwn()` to check if the given object has the
6
- * specified key as its own property (not inherited). It acts as a type guard
7
- * that narrows the type of the object to guarantee the key exists, enabling
8
- * type-safe property access.
9
- *
10
- * **Type Narrowing Behavior:**
11
- *
12
- * - When the guard returns `true`, TypeScript narrows the object type to include
13
- * the checked key
14
- * - For union types, only union members that contain the key are preserved
15
- * - The key's value type is preserved from the original object type when possible
16
- *
17
- * @example
18
- *
19
- * ```ts
20
- * const maybeUser: Readonly<{ id?: number; name?: string }> = {
21
- * id: 42,
22
- * } as const;
23
- *
24
- * if (hasKey(maybeUser, 'id')) {
25
- * // `maybeUser` is now known to have an `id` property.
26
- * assert.isTrue(maybeUser.id === 42);
27
- * } else {
28
- * assert.fail();
29
- * }
30
- * ```
31
- *
32
- * @template R - The type of the input object, must extend UnknownRecord
33
- * @template K - The type of the key to check for, must extend PropertyKey
34
- * (string | number | symbol)
35
- * @param obj - The object to check for the presence of the key
36
- * @param key - The key to check for in the object
37
- * @returns `true` if the object has the specified key as its own property,
38
- * `false` otherwise. When `true`, TypeScript narrows the object type to
39
- * guarantee the key exists.
40
- * @see {@link keyIsIn} - Similar function that narrows the key type instead of the object type
41
- */
1
+
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
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
42
  export const hasKey = (obj, key) => Object.hasOwn(obj, key);
43
43
  //# sourceMappingURL=has-key.mjs.map
@@ -1,39 +1,39 @@
1
- /**
2
- * Type guard that checks if a value is a non-empty string.
3
- *
4
- * This function performs both a type check (ensuring the value is a string) and
5
- * a length check (ensuring the string is not empty). It acts as a type guard
6
- * that narrows the input type to exclude `null`, `undefined`, and empty
7
- * strings.
8
- *
9
- * **Type Narrowing Behavior:**
10
- *
11
- * - Eliminates `null` and `undefined` from the type
12
- * - Excludes empty string (`""`) from the type
13
- * - Preserves literal string types when possible
14
- * - Whitespace-only strings are considered non-empty
15
- *
16
- * @example
17
- *
18
- * ```ts
19
- * const words: readonly (string | undefined)[] = [
20
- * 'Ada',
21
- * undefined,
22
- * '',
23
- * 'Lovelace',
24
- * ] as const;
25
- *
26
- * const nonEmpty = words.filter(isNonEmptyString);
27
- *
28
- * assert.deepStrictEqual(nonEmpty, ['Ada', 'Lovelace']);
29
- * ```
30
- *
31
- * @template S - The input type, which can include `string`, `null`, or
32
- * `undefined`
33
- * @param s - The value to check
34
- * @returns `true` if `s` is a string with length > 0, `false` otherwise. When
35
- * `true`, TypeScript narrows the type to exclude empty strings and nullish
36
- * values.
37
- */
1
+
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
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
38
  export const isNonEmptyString = (s) => typeof s === 'string' && s.length > 0;
39
39
  //# sourceMappingURL=is-non-empty-string.mjs.map
@@ -1,36 +1,36 @@
1
- /**
2
- * Type guard that checks if a value is a non-null object.
3
- *
4
- * This function checks if a value has type `"object"` according to the `typeof`
5
- * operator and is not `null`. This includes all object types such as plain
6
- * objects, arrays, dates, regular expressions, and other object instances, but
7
- * excludes functions.
8
- *
9
- * **Type Narrowing Behavior:**
10
- *
11
- * - Narrows `unknown` to `object`
12
- * - Excludes `null`, `undefined`, and all primitive types
13
- * - Excludes functions (they have `typeof` === `"function"`, not `"object"`)
14
- * - Includes arrays, dates, regex, and other object instances
15
- *
16
- * **Note:** This function returns `true` for arrays. If you need
17
- * record-oriented narrowing that excludes arrays, use `isRecord()` instead.
18
- *
19
- * @example
20
- *
21
- * ```ts
22
- * const mixed: readonly unknown[] = [{ id: 1 }, null, 'Ada'] as const;
23
- *
24
- * const objects = mixed.filter(isNonNullObject);
25
- *
26
- * assert.deepStrictEqual(objects, [{ id: 1 }]);
27
- * ```
28
- *
29
- * @param u - The value to check
30
- * @returns `true` if `u` is an object and not `null`, `false` otherwise. When
31
- * `true`, TypeScript narrows the type to `object`.
32
- * @see {@link isRecord} - For record-oriented type narrowing (excludes arrays)
33
- */
34
- // eslint-disable-next-line @typescript-eslint/no-restricted-types
1
+
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
+
30
+
31
+
32
+
33
+
34
+
35
35
  export const isNonNullObject = (u) => typeof u === 'object' && u !== null;
36
36
  //# sourceMappingURL=is-non-null-object.mjs.map
@@ -1,35 +1,35 @@
1
1
 
2
- /**
3
- * Type guard that checks if a value is a primitive type.
4
- *
5
- * This function identifies JavaScript primitive types, which are immutable data
6
- * types that are not objects. The primitive types are: `string`, `number`,
7
- * `boolean`, `undefined`, `symbol`, `bigint`, and `null`.
8
- *
9
- * **Important Note:** Although `null` has `typeof null === "object"` due to a
10
- * historical JavaScript quirk, this function correctly identifies `null` as a
11
- * primitive value.
12
- *
13
- * **Type Narrowing Behavior:**
14
- *
15
- * - Narrows the input type to `Primitive` (union of all primitive types)
16
- * - Excludes object types, arrays, functions, and other non-primitive values
17
- * - Includes `null` despite its misleading `typeof` result
18
- *
19
- * @example
20
- *
21
- * ```ts
22
- * const values: readonly unknown[] = [42, 'Ada', null, { id: 1 }] as const;
23
- *
24
- * const primitives = values.filter(isPrimitive);
25
- *
26
- * assert.deepStrictEqual(primitives, [42, 'Ada', null]);
27
- * ```
28
- *
29
- * @param u - The value to check
30
- * @returns `true` if `u` is a primitive type, `false` otherwise. When `true`,
31
- * TypeScript narrows the type to `Primitive`.
32
- */
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
+
30
+
31
+
32
+
33
33
  export const isPrimitive = (u) => {
34
34
  switch (typeof u) {
35
35
  case 'string':
@@ -1,90 +1,90 @@
1
1
  import { isNonNullObject } from './is-non-null-object.mjs';
2
- /**
3
- * Type guard that checks if a value is a record — a non-null, non-array
4
- * object — and narrows it to `UnknownRecord` (= `ReadonlyRecord<string,
5
- * unknown>`).
6
- *
7
- * This function is designed to be combined with {@link hasKey} to probe
8
- * values of type `unknown` (e.g. parsed JSON, caught errors, external data)
9
- * in a type-safe way: `if (isRecord(u) && hasKey(u, 'some-key')) { ... }`.
10
- *
11
- * **Type Narrowing Behavior:**
12
- *
13
- * - Narrows `unknown` to `UnknownRecord` (= `ReadonlyRecord<string, unknown>`)
14
- * - Excludes `null`, `undefined`, primitives, and functions
15
- * - Excludes arrays: arrays have no string index signature, so they are not
16
- * assignable to `UnknownRecord`; admitting them at runtime would be
17
- * inconsistent with the narrowed type
18
- * - Returns `true` for every other non-null object, including dictionary
19
- * objects created with `Object.create(null)` and instances such as `Date`,
20
- * `RegExp`, `Map`, `Set`, `Error`, and user-defined classes
21
- *
22
- * **Why non-plain objects are included:** since every property of
23
- * `UnknownRecord` is typed `unknown`, reading properties from any object
24
- * through this narrowing is type-safe, and `hasKey` (backed by
25
- * `Object.hasOwn`) answers own-property questions correctly on any object
26
- * (e.g. `Map` entries are not own properties, so `hasKey` correctly returns
27
- * `false` for them). Restricting the guard to plain objects would require
28
- * prototype checks that misjudge cross-realm objects and would prevent
29
- * probing useful instances such as `Error` subclasses.
30
- *
31
- * **Implementation:** `isNonNullObject(u) && !Array.isArray(u)`.
32
- *
33
- * @example
34
- *
35
- * ```ts
36
- * const entries: readonly unknown[] = [
37
- * { id: 1 },
38
- * [1, 2],
39
- * 'str',
40
- * 0,
41
- * null,
42
- * ] as const;
43
- *
44
- * const records = entries.filter(isRecord);
45
- *
46
- * assert.deepStrictEqual(records, [{ id: 1 }]);
47
- * ```
48
- *
49
- * @param u - The value to check
50
- * @returns `true` if `u` is a non-null, non-array object, `false` otherwise.
51
- * When `true`, TypeScript narrows the type to `UnknownRecord`.
52
- * @see {@link isNonNullObject} - For checking any non-null object (includes arrays)
53
- * @see {@link hasKey} - For checking if a record has specific keys
54
- */
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
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
55
  export const isRecord = (u) => isNonNullObject(u) && !Array.isArray(u);
56
- /**
57
- * Type guard that checks if a value is a mutable record.
58
- *
59
- * This function has the same runtime behavior as {@link isRecord} (non-null,
60
- * non-array object check), but narrows the type to `MutableRecord<string,
61
- * unknown>`, which is useful when you need to add or overwrite properties on
62
- * the narrowed object.
63
- *
64
- * **Type Narrowing Behavior:**
65
- *
66
- * - Narrows `unknown` to `MutableRecord<string, unknown>`
67
- * - Excludes `null`, `undefined`, primitives, functions, and arrays
68
- * - Returns `true` for every other non-null object (see {@link isRecord} for
69
- * details on non-plain objects such as `Date`, `Map`, and `Set`)
70
- *
71
- * **Implementation:** This is a type alias for {@link isRecord}.
72
- *
73
- * @example
74
- *
75
- * ```ts
76
- * const obj: unknown = { foo: 1 } as const;
77
- *
78
- * if (isMutableRecord(obj)) {
79
- * obj['bar'] = 2; // Safe: obj is now known to be a mutable record
80
- * }
81
- * ```
82
- *
83
- * @param u - The value to check
84
- * @returns `true` if `u` is a non-null, non-array object, `false` otherwise.
85
- * When `true`, TypeScript narrows the type to `MutableRecord<string,
86
- * unknown>`.
87
- * @see {@link isRecord} - For the underlying implementation and more details
88
- */
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
89
  export const isMutableRecord = isRecord;
90
90
  //# sourceMappingURL=is-record.mjs.map