ts-data-forge 14.7.1 → 14.9.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 (287) hide show
  1. package/README.md +22 -34
  2. package/dist/array/impl/array-utils-creation.d.mts +3 -3
  3. package/dist/array/impl/array-utils-creation.d.mts.map +1 -1
  4. package/dist/array/impl/array-utils-creation.mjs.map +1 -1
  5. package/dist/array/impl/array-utils-element-access.d.mts +2 -2
  6. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -1
  7. package/dist/array/impl/array-utils-element-access.mjs +1 -1
  8. package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
  9. package/dist/array/impl/array-utils-iterators.d.mts +1 -1
  10. package/dist/array/impl/array-utils-iterators.d.mts.map +1 -1
  11. package/dist/array/impl/array-utils-length-bounded-array-cast.d.mts +1 -1
  12. package/dist/array/impl/array-utils-length-bounded-array-cast.d.mts.map +1 -1
  13. package/dist/array/impl/array-utils-length-bounded-array-guard.d.mts +9 -9
  14. package/dist/array/impl/array-utils-length-bounded-array-guard.d.mts.map +1 -1
  15. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs +1 -1
  16. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs.map +1 -1
  17. package/dist/array/impl/array-utils-length-bounded-tuple-cast.d.mts +2 -2
  18. package/dist/array/impl/array-utils-length-bounded-tuple-cast.d.mts.map +1 -1
  19. package/dist/array/impl/array-utils-length-bounded-tuple-guard.d.mts +3 -3
  20. package/dist/array/impl/array-utils-length-bounded-tuple-guard.d.mts.map +1 -1
  21. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs +1 -1
  22. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs.map +1 -1
  23. package/dist/array/impl/array-utils-modification.d.mts +2 -2
  24. package/dist/array/impl/array-utils-modification.d.mts.map +1 -1
  25. package/dist/array/impl/array-utils-reducing-value.d.mts +2 -2
  26. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -1
  27. package/dist/array/impl/array-utils-reducing-value.mjs +3 -4
  28. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  29. package/dist/array/impl/array-utils-search.d.mts +1 -1
  30. package/dist/array/impl/array-utils-search.d.mts.map +1 -1
  31. package/dist/array/impl/array-utils-set-op.d.mts +1 -1
  32. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -1
  33. package/dist/array/impl/array-utils-size.d.mts +2 -2
  34. package/dist/array/impl/array-utils-size.d.mts.map +1 -1
  35. package/dist/array/impl/array-utils-slice-clamped.d.mts +1 -1
  36. package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -1
  37. package/dist/array/impl/array-utils-slicing.d.mts +2 -2
  38. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -1
  39. package/dist/array/impl/array-utils-transformation.d.mts +2 -2
  40. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
  41. package/dist/array/impl/array-utils-transformation.mjs +6 -3
  42. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  43. package/dist/array/impl/array-utils-validation.d.mts +2 -2
  44. package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
  45. package/dist/collections/imap-mapped.d.mts +2 -2
  46. package/dist/collections/imap-mapped.d.mts.map +1 -1
  47. package/dist/collections/imap-mapped.mjs +10 -7
  48. package/dist/collections/imap-mapped.mjs.map +1 -1
  49. package/dist/collections/imap.d.mts +2 -2
  50. package/dist/collections/imap.d.mts.map +1 -1
  51. package/dist/collections/imap.mjs +10 -7
  52. package/dist/collections/imap.mjs.map +1 -1
  53. package/dist/collections/iset-mapped.d.mts +2 -2
  54. package/dist/collections/iset-mapped.d.mts.map +1 -1
  55. package/dist/collections/iset-mapped.mjs +6 -3
  56. package/dist/collections/iset-mapped.mjs.map +1 -1
  57. package/dist/collections/iset.d.mts +2 -2
  58. package/dist/collections/iset.d.mts.map +1 -1
  59. package/dist/collections/iset.mjs +5 -5
  60. package/dist/collections/iset.mjs.map +1 -1
  61. package/dist/collections/queue.d.mts +1 -1
  62. package/dist/collections/queue.d.mts.map +1 -1
  63. package/dist/collections/stack.d.mts +1 -1
  64. package/dist/collections/stack.d.mts.map +1 -1
  65. package/dist/functional/index.d.mts +2 -2
  66. package/dist/functional/index.d.mts.map +1 -1
  67. package/dist/functional/index.mjs +1 -1
  68. package/dist/functional/index.mjs.map +1 -1
  69. package/dist/guard/is-non-empty-string.d.mts +1 -1
  70. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  71. package/dist/guard/is-primitive.d.mts +1 -1
  72. package/dist/guard/is-primitive.d.mts.map +1 -1
  73. package/dist/guard/is-type.d.mts +1 -1
  74. package/dist/guard/is-type.d.mts.map +1 -1
  75. package/dist/iterator/range.d.mts +5 -4
  76. package/dist/iterator/range.d.mts.map +1 -1
  77. package/dist/iterator/range.mjs.map +1 -1
  78. package/dist/json/json.d.mts +29 -32
  79. package/dist/json/json.d.mts.map +1 -1
  80. package/dist/json/json.mjs +1 -4
  81. package/dist/json/json.mjs.map +1 -1
  82. package/dist/number/branded-types/finite-number.d.mts +1 -1
  83. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  84. package/dist/number/branded-types/int.d.mts +2 -2
  85. package/dist/number/branded-types/int.d.mts.map +1 -1
  86. package/dist/number/branded-types/int16.d.mts +1 -1
  87. package/dist/number/branded-types/int16.d.mts.map +1 -1
  88. package/dist/number/branded-types/int32.d.mts +1 -1
  89. package/dist/number/branded-types/int32.d.mts.map +1 -1
  90. package/dist/number/branded-types/negative-finite-number.d.mts +1 -1
  91. package/dist/number/branded-types/negative-finite-number.d.mts.map +1 -1
  92. package/dist/number/branded-types/negative-int.d.mts +1 -1
  93. package/dist/number/branded-types/negative-int.d.mts.map +1 -1
  94. package/dist/number/branded-types/negative-safe-int.d.mts +1 -1
  95. package/dist/number/branded-types/negative-safe-int.d.mts.map +1 -1
  96. package/dist/number/branded-types/non-negative-finite-number.d.mts +1 -1
  97. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  98. package/dist/number/branded-types/non-negative-int16.d.mts +1 -1
  99. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  100. package/dist/number/branded-types/non-negative-int32.d.mts +1 -1
  101. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  102. package/dist/number/branded-types/non-positive-finite-number.d.mts +1 -1
  103. package/dist/number/branded-types/non-positive-finite-number.d.mts.map +1 -1
  104. package/dist/number/branded-types/non-positive-int.d.mts +1 -1
  105. package/dist/number/branded-types/non-positive-int.d.mts.map +1 -1
  106. package/dist/number/branded-types/non-positive-safe-int.d.mts +1 -1
  107. package/dist/number/branded-types/non-positive-safe-int.d.mts.map +1 -1
  108. package/dist/number/branded-types/non-zero-finite-number.d.mts +1 -1
  109. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  110. package/dist/number/branded-types/non-zero-int.d.mts +1 -1
  111. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  112. package/dist/number/branded-types/non-zero-int16.d.mts +1 -1
  113. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  114. package/dist/number/branded-types/non-zero-int32.d.mts +1 -1
  115. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  116. package/dist/number/branded-types/non-zero-safe-int.d.mts +1 -1
  117. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  118. package/dist/number/branded-types/non-zero-uint16.d.mts +1 -1
  119. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  120. package/dist/number/branded-types/non-zero-uint32.d.mts +1 -1
  121. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  122. package/dist/number/branded-types/positive-finite-number.d.mts +1 -1
  123. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  124. package/dist/number/branded-types/positive-int.d.mts +2 -2
  125. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  126. package/dist/number/branded-types/positive-int16.d.mts +1 -1
  127. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  128. package/dist/number/branded-types/positive-int32.d.mts +1 -1
  129. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  130. package/dist/number/branded-types/positive-safe-int.d.mts +2 -2
  131. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  132. package/dist/number/branded-types/positive-uint16.d.mts +1 -1
  133. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  134. package/dist/number/branded-types/positive-uint32.d.mts +1 -1
  135. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  136. package/dist/number/branded-types/safe-int.d.mts +2 -2
  137. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  138. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  139. package/dist/number/branded-types/safe-uint.d.mts +1 -1
  140. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  141. package/dist/number/branded-types/uint.d.mts +2 -2
  142. package/dist/number/branded-types/uint.d.mts.map +1 -1
  143. package/dist/number/branded-types/uint16.d.mts +1 -1
  144. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  145. package/dist/number/branded-types/uint32.d.mts +1 -1
  146. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  147. package/dist/number/enum/int8.d.mts +1 -1
  148. package/dist/number/enum/int8.d.mts.map +1 -1
  149. package/dist/number/enum/uint8.d.mts +1 -1
  150. package/dist/number/enum/uint8.d.mts.map +1 -1
  151. package/dist/number/num-arithmetic-types.d.mts +1 -1
  152. package/dist/number/num-arithmetic-types.d.mts.map +1 -1
  153. package/dist/number/num.d.mts +3 -3
  154. package/dist/number/num.d.mts.map +1 -1
  155. package/dist/number/refined-number-utils.d.mts +2 -2
  156. package/dist/number/refined-number-utils.d.mts.map +1 -1
  157. package/dist/number/refined-number-utils.mjs +6 -4
  158. package/dist/number/refined-number-utils.mjs.map +1 -1
  159. package/dist/object/object.d.mts +5 -8
  160. package/dist/object/object.d.mts.map +1 -1
  161. package/dist/object/object.mjs +16 -13
  162. package/dist/object/object.mjs.map +1 -1
  163. package/dist/others/cast-mutable.d.mts +1 -1
  164. package/dist/others/cast-mutable.d.mts.map +1 -1
  165. package/dist/others/cast-readonly.d.mts +1 -1
  166. package/dist/others/cast-readonly.d.mts.map +1 -1
  167. package/dist/others/debounce-function.d.mts.map +1 -1
  168. package/dist/others/debounce-function.mjs +1 -5
  169. package/dist/others/debounce-function.mjs.map +1 -1
  170. package/dist/others/memoize-function.d.mts +1 -1
  171. package/dist/others/memoize-function.d.mts.map +1 -1
  172. package/dist/string/str.d.mts +26 -18
  173. package/dist/string/str.d.mts.map +1 -1
  174. package/dist/string/str.mjs +9 -1
  175. package/dist/string/str.mjs.map +1 -1
  176. package/dist/types.d.mts +1 -1
  177. package/dist/types.d.mts.map +1 -1
  178. package/package.json +32 -31
  179. package/src/array/impl/array-utils-creation.mts +24 -22
  180. package/src/array/impl/array-utils-creation.test.mts +25 -22
  181. package/src/array/impl/array-utils-element-access.mts +7 -7
  182. package/src/array/impl/array-utils-element-access.test.mts +2 -2
  183. package/src/array/impl/array-utils-iterators.mts +1 -1
  184. package/src/array/impl/array-utils-iterators.test.mts +1 -1
  185. package/src/array/impl/array-utils-length-bounded-array-cast.mts +7 -7
  186. package/src/array/impl/array-utils-length-bounded-array-cast.test.mts +6 -6
  187. package/src/array/impl/array-utils-length-bounded-array-guard.mts +15 -15
  188. package/src/array/impl/array-utils-length-bounded-array-guard.test.mts +66 -54
  189. package/src/array/impl/array-utils-length-bounded-tuple-cast.mts +6 -6
  190. package/src/array/impl/array-utils-length-bounded-tuple-cast.test.mts +10 -10
  191. package/src/array/impl/array-utils-length-bounded-tuple-guard.mts +8 -8
  192. package/src/array/impl/array-utils-length-bounded-tuple-guard.test.mts +38 -28
  193. package/src/array/impl/array-utils-length-constraint-preservation.test.mts +14 -14
  194. package/src/array/impl/array-utils-modification.mts +12 -12
  195. package/src/array/impl/array-utils-modification.test.mts +7 -7
  196. package/src/array/impl/array-utils-overload-type-error.test.mts +1 -1
  197. package/src/array/impl/array-utils-reducing-value.mts +9 -11
  198. package/src/array/impl/array-utils-reducing-value.test.mts +2 -2
  199. package/src/array/impl/array-utils-search.mts +4 -4
  200. package/src/array/impl/array-utils-search.test.mts +25 -17
  201. package/src/array/impl/array-utils-set-op.mts +1 -1
  202. package/src/array/impl/array-utils-shape-invariants.test.mts +8 -8
  203. package/src/array/impl/array-utils-size.mts +5 -5
  204. package/src/array/impl/array-utils-slice-clamped.mts +2 -2
  205. package/src/array/impl/array-utils-slicing.mts +8 -8
  206. package/src/array/impl/array-utils-slicing.test.mts +1 -1
  207. package/src/array/impl/array-utils-transformation.mts +26 -24
  208. package/src/array/impl/array-utils-transformation.test.mts +12 -10
  209. package/src/array/impl/array-utils-validation.mts +7 -7
  210. package/src/array/impl/array-utils-validation.test.mts +39 -39
  211. package/src/array/impl/array.test.mts +1 -1
  212. package/src/collections/imap-mapped.mts +15 -9
  213. package/src/collections/imap-mapped.test.mts +1 -1
  214. package/src/collections/imap.mts +15 -9
  215. package/src/collections/imap.test.mts +7 -5
  216. package/src/collections/iset-mapped.mts +14 -8
  217. package/src/collections/iset.mts +12 -10
  218. package/src/collections/iset.test.mts +14 -12
  219. package/src/collections/queue.mts +1 -1
  220. package/src/collections/stack.mts +1 -1
  221. package/src/collections/stack.test.mts +8 -6
  222. package/src/functional/index.mts +5 -0
  223. package/src/guard/is-error.test.mts +6 -4
  224. package/src/guard/is-non-empty-string.mts +1 -1
  225. package/src/guard/is-non-empty-string.test.mts +15 -11
  226. package/src/guard/is-primitive.mts +1 -1
  227. package/src/guard/is-type.mts +1 -1
  228. package/src/guard/is-type.test.mts +87 -59
  229. package/src/iterator/range.mts +5 -9
  230. package/src/iterator/range.test.mts +29 -0
  231. package/src/json/json.mts +32 -35
  232. package/src/json/json.test.mts +106 -89
  233. package/src/number/branded-types/finite-number.mts +4 -4
  234. package/src/number/branded-types/int.mts +2 -2
  235. package/src/number/branded-types/int16.mts +1 -1
  236. package/src/number/branded-types/int32.mts +1 -1
  237. package/src/number/branded-types/negative-finite-number.mts +1 -1
  238. package/src/number/branded-types/negative-finite-number.test.mts +4 -4
  239. package/src/number/branded-types/negative-int.mts +3 -3
  240. package/src/number/branded-types/negative-int.test.mts +1 -1
  241. package/src/number/branded-types/negative-safe-int.mts +3 -3
  242. package/src/number/branded-types/negative-safe-int.test.mts +1 -1
  243. package/src/number/branded-types/non-negative-finite-number.mts +3 -3
  244. package/src/number/branded-types/non-negative-int16.mts +1 -1
  245. package/src/number/branded-types/non-negative-int32.mts +1 -1
  246. package/src/number/branded-types/non-positive-finite-number.mts +1 -1
  247. package/src/number/branded-types/non-positive-int.mts +1 -1
  248. package/src/number/branded-types/non-positive-safe-int.mts +1 -1
  249. package/src/number/branded-types/non-zero-finite-number.mts +5 -5
  250. package/src/number/branded-types/non-zero-int.mts +1 -1
  251. package/src/number/branded-types/non-zero-int16.mts +1 -1
  252. package/src/number/branded-types/non-zero-int32.mts +1 -1
  253. package/src/number/branded-types/non-zero-safe-int.mts +4 -4
  254. package/src/number/branded-types/non-zero-uint16.mts +1 -1
  255. package/src/number/branded-types/non-zero-uint32.mts +1 -1
  256. package/src/number/branded-types/positive-finite-number.mts +4 -4
  257. package/src/number/branded-types/positive-int.mts +2 -2
  258. package/src/number/branded-types/positive-int16.mts +1 -1
  259. package/src/number/branded-types/positive-int32.mts +1 -1
  260. package/src/number/branded-types/positive-safe-int.mts +4 -4
  261. package/src/number/branded-types/positive-uint16.mts +1 -1
  262. package/src/number/branded-types/positive-uint32.mts +1 -1
  263. package/src/number/branded-types/safe-int.mts +2 -5
  264. package/src/number/branded-types/safe-uint.mts +1 -1
  265. package/src/number/branded-types/uint.mts +2 -2
  266. package/src/number/branded-types/uint16.mts +1 -1
  267. package/src/number/branded-types/uint32.mts +1 -1
  268. package/src/number/enum/int8.mts +5 -5
  269. package/src/number/enum/uint8.mts +4 -4
  270. package/src/number/num-arithmetic-types.mts +27 -27
  271. package/src/number/num-arithmetic-types.test.mts +21 -21
  272. package/src/number/num-arithmetic.test.mts +6 -6
  273. package/src/number/num.mts +24 -24
  274. package/src/number/num.test.mts +1 -1
  275. package/src/number/refined-number-utils.mts +25 -21
  276. package/src/object/object.mts +46 -34
  277. package/src/object/object.test.mts +5 -5
  278. package/src/others/cast-mutable.mts +1 -1
  279. package/src/others/cast-readonly.mts +1 -1
  280. package/src/others/debounce-function.mts +1 -5
  281. package/src/others/debounce-function.test.mts +3 -0
  282. package/src/others/fast-deep-equal.test.mts +1 -1
  283. package/src/others/map-nullable.test.mts +1 -1
  284. package/src/others/memoize-function.mts +1 -1
  285. package/src/string/str.mts +33 -25
  286. package/src/string/str.test.mts +48 -38
  287. package/src/types.mts +14 -14
@@ -1,15 +1,15 @@
1
1
  import { isError } from '@sindresorhus/is';
2
- import { type Int, type NonEmptyTuple, type Uint } from 'ts-type-forge';
2
+ import type { Int, NonEmptyTuple, Uint } from 'ts-type-forge';
3
3
  import { IMap } from '../../collections/index.mjs';
4
4
  import { Optional, Result } from '../../functional/index.mjs';
5
5
  import { isString, isUndefined } from '../../guard/index.mjs';
6
6
  import { asUint32, Num, Uint32 } from '../../number/index.mjs';
7
7
  import { unknownToString } from '../../others/index.mjs';
8
- import {
9
- type ArrayIndex,
10
- type MapSetKeyType,
11
- type SizeType,
12
- type Some,
8
+ import type {
9
+ ArrayIndex,
10
+ MapSetKeyType,
11
+ SizeType,
12
+ Some,
13
13
  } from '../../types.mjs';
14
14
  import { isNonEmpty } from './array-utils-length-bounded-array-guard.mjs';
15
15
 
@@ -605,11 +605,9 @@ export function join(
605
605
  case 1: {
606
606
  const [arg] = args;
607
607
 
608
- if (isString(arg) || isUndefined(arg)) {
609
- return (array) => joinImpl(array, arg);
610
- }
611
-
612
- return joinImpl(arg, undefined);
608
+ return isString(arg) || isUndefined(arg)
609
+ ? (array) => joinImpl(array, arg)
610
+ : joinImpl(arg, undefined);
613
611
  }
614
612
 
615
613
  case 2: {
@@ -1,8 +1,8 @@
1
- import { type Uint32 } from 'ts-type-forge';
1
+ import type { Uint32 } from 'ts-type-forge';
2
2
  import { IMap } from '../../collections/index.mjs';
3
3
  import { expectType } from '../../expect-type.mjs';
4
4
  import { Optional, Result } from '../../functional/index.mjs';
5
- import { type Some } from '../../types.mjs';
5
+ import type { Some } from '../../types.mjs';
6
6
  import {
7
7
  count,
8
8
  countBy,
@@ -1,10 +1,10 @@
1
1
  import { expectType } from '../../expect-type.mjs';
2
2
  import { Optional, pipe } from '../../functional/index.mjs';
3
3
  import { asUint32 } from '../../number/index.mjs';
4
- import {
5
- type ArgArrayIndexWithNegative,
6
- type ArrayIndex,
7
- type SizeType,
4
+ import type {
5
+ ArgArrayIndexWithNegative,
6
+ ArrayIndex,
7
+ SizeType,
8
8
  } from '../../types.mjs';
9
9
 
10
10
  /**
@@ -1,6 +1,6 @@
1
1
  import { expectType } from '../../expect-type.mjs';
2
2
  import { Optional } from '../../functional/index.mjs';
3
- import { type SizeType } from '../../types.mjs';
3
+ import type { SizeType } from '../../types.mjs';
4
4
  import {
5
5
  find,
6
6
  findIndex,
@@ -293,11 +293,13 @@ describe('Arr search operations', () => {
293
293
 
294
294
  expect(result).toBeGreaterThanOrEqual(0);
295
295
 
296
- if (result !== -1) {
297
- expectType<typeof result, SizeType.Arr>('=');
298
-
299
- expect(result).toBe(1);
296
+ if (result === -1) {
297
+ return;
300
298
  }
299
+
300
+ expectType<typeof result, SizeType.Arr>('=');
301
+
302
+ expect(result).toBe(1);
301
303
  });
302
304
 
303
305
  test('should return -1 for non-existent element', () => {
@@ -317,11 +319,13 @@ describe('Arr search operations', () => {
317
319
 
318
320
  expect(result).toBeGreaterThanOrEqual(0);
319
321
 
320
- if (result !== -1) {
321
- expectType<typeof result, SizeType.Arr>('=');
322
-
323
- expect(result).toBe(3);
322
+ if (result === -1) {
323
+ return;
324
324
  }
325
+
326
+ expectType<typeof result, SizeType.Arr>('=');
327
+
328
+ expect(result).toBe(3);
325
329
  });
326
330
 
327
331
  test('should return -1 when element not found from index', () => {
@@ -365,11 +369,13 @@ describe('Arr search operations', () => {
365
369
 
366
370
  expect(result).toBeGreaterThanOrEqual(0);
367
371
 
368
- if (result !== -1) {
369
- expectType<typeof result, SizeType.Arr>('=');
370
-
371
- expect(result).toBe(3);
372
+ if (result === -1) {
373
+ return;
372
374
  }
375
+
376
+ expectType<typeof result, SizeType.Arr>('=');
377
+
378
+ expect(result).toBe(3);
373
379
  });
374
380
 
375
381
  test('should return -1 for non-existent element', () => {
@@ -389,11 +395,13 @@ describe('Arr search operations', () => {
389
395
 
390
396
  expect(result).toBeGreaterThanOrEqual(0);
391
397
 
392
- if (result !== -1) {
393
- expectType<typeof result, SizeType.Arr>('=');
394
-
395
- expect(result).toBe(1);
398
+ if (result === -1) {
399
+ return;
396
400
  }
401
+
402
+ expectType<typeof result, SizeType.Arr>('=');
403
+
404
+ expect(result).toBe(1);
397
405
  });
398
406
 
399
407
  test('should return -1 when element not found before index', () => {
@@ -1,4 +1,4 @@
1
- import { type Primitive } from 'ts-type-forge';
1
+ import type { Primitive } from 'ts-type-forge';
2
2
 
3
3
  /**
4
4
  * Checks if two arrays are equal by comparing their elements.
@@ -1,11 +1,11 @@
1
- import {
2
- type BoundedLengthArray,
3
- type FixedLengthArray,
4
- type FixedLengthTuple,
5
- type MaxLengthArray,
6
- type MaxLengthOf,
7
- type MinLengthArray,
8
- type MinLengthOf,
1
+ import type {
2
+ BoundedLengthArray,
3
+ FixedLengthArray,
4
+ FixedLengthTuple,
5
+ MaxLengthArray,
6
+ MaxLengthOf,
7
+ MinLengthArray,
8
+ MinLengthOf,
9
9
  } from 'ts-type-forge';
10
10
  import { expectType } from '../../expect-type.mjs';
11
11
  import {
@@ -1,7 +1,7 @@
1
- import {
2
- type IntersectBrand,
3
- type NonEmptyTuple,
4
- type PositiveNumber,
1
+ import type {
2
+ IntersectBrand,
3
+ NonEmptyTuple,
4
+ PositiveNumber,
5
5
  } from 'ts-type-forge';
6
6
  /**
7
7
  * Returns the size (length) of an array.
@@ -22,7 +22,7 @@ import {
22
22
  * assert.isTrue(sizeOfLetters === 0);
23
23
  * ```
24
24
  */
25
- import { type SizeType } from '../../types.mjs';
25
+ import type { SizeType } from '../../types.mjs';
26
26
 
27
27
  export const size = <const Ar extends readonly unknown[]>(
28
28
  array: Ar,
@@ -1,6 +1,6 @@
1
- import { type FixedLengthTuple } from 'ts-type-forge';
1
+ import type { FixedLengthTuple } from 'ts-type-forge';
2
2
  import { Num } from '../../number/index.mjs';
3
- import { type ArgArrayIndexWithNegative, type SizeType } from '../../types.mjs';
3
+ import type { ArgArrayIndexWithNegative, SizeType } from '../../types.mjs';
4
4
 
5
5
  /**
6
6
  * Slices an array with automatically clamped start and end indices.
@@ -1,13 +1,13 @@
1
- import {
2
- type ConstrainedList,
3
- type HasLengthConstraint,
4
- type List,
5
- type NonEmptyArray,
6
- type NonEmptyTuple,
7
- type StructuralPrefixLength,
1
+ import type {
2
+ ConstrainedList,
3
+ HasLengthConstraint,
4
+ List,
5
+ NonEmptyArray,
6
+ NonEmptyTuple,
7
+ StructuralPrefixLength,
8
8
  } from 'ts-type-forge';
9
9
  import { Uint32 } from '../../number/index.mjs';
10
- import { type SizeType } from '../../types.mjs';
10
+ import type { SizeType } from '../../types.mjs';
11
11
  import { isEmpty } from './array-utils-length-bounded-array-guard.mjs';
12
12
  import { size } from './array-utils-size.mjs';
13
13
  import { sliceClamped } from './array-utils-slice-clamped.mjs';
@@ -1,4 +1,4 @@
1
- import { type MinLengthArray } from 'ts-type-forge';
1
+ import type { MinLengthArray } from 'ts-type-forge';
2
2
  import { expectType } from '../../expect-type.mjs';
3
3
  import { asMinLengthArray } from './array-utils-length-bounded-array-cast.mjs';
4
4
  import {
@@ -1,29 +1,25 @@
1
- import {
2
- type BoundedLengthArray,
3
- type ChangeArrayElement,
4
- type ConstrainedList,
5
- type FixedLengthTuple,
6
- type HasLengthConstraint,
7
- type IsFixedLengthList,
8
- type NonEmptyArray,
9
- type NonEmptyTuple,
10
- type PositiveInt,
11
- type PositiveUint32,
12
- type Primitive,
13
- type SafeUintWithSmallInt,
14
- type SupportedLength,
15
- type UnknownBrand,
16
- type WithSmallInt,
1
+ import type {
2
+ BoundedLengthArray,
3
+ ChangeArrayElement,
4
+ ConstrainedList,
5
+ FixedLengthTuple,
6
+ HasLengthConstraint,
7
+ IsFixedLengthList,
8
+ NonEmptyArray,
9
+ NonEmptyTuple,
10
+ PositiveInt,
11
+ PositiveUint32,
12
+ Primitive,
13
+ SafeUintWithSmallInt,
14
+ SupportedLength,
15
+ UnknownBrand,
16
+ WithSmallInt,
17
17
  } from 'ts-type-forge';
18
18
  import { IMap } from '../../collections/index.mjs';
19
19
  import { expectType } from '../../expect-type.mjs';
20
20
  import { asPositiveUint32, asUint32, Uint32 } from '../../number/index.mjs';
21
21
  import { castMutable, tp } from '../../others/index.mjs';
22
- import {
23
- type ArrayIndex,
24
- type MapSetKeyType,
25
- type SizeType,
26
- } from '../../types.mjs';
22
+ import type { ArrayIndex, MapSetKeyType, SizeType } from '../../types.mjs';
27
23
  import { newArray, seq } from './array-utils-creation.mjs';
28
24
  import { isNonEmpty } from './array-utils-length-bounded-array-guard.mjs';
29
25
  import { size } from './array-utils-size.mjs';
@@ -548,7 +544,9 @@ export const uniqBy = <
548
544
  return array.filter((val) => {
549
545
  const mappedValue = mapFn(val);
550
546
 
551
- if (mut_mappedValues.has(mappedValue)) return false;
547
+ if (mut_mappedValues.has(mappedValue)) {
548
+ return false;
549
+ }
552
550
 
553
551
  mut_mappedValues.add(mappedValue);
554
552
 
@@ -972,12 +970,16 @@ export const zip = <
972
970
  export const cartesianProduct = <T,>(
973
971
  arrays: readonly (readonly T[])[],
974
972
  ): readonly (readonly T[])[] => {
975
- if (!isNonEmpty(arrays)) return [[]];
973
+ if (!isNonEmpty(arrays)) {
974
+ return [[]];
975
+ }
976
976
 
977
977
  const [first, ...rest] = arrays;
978
978
 
979
979
  // If first array is empty, the result is empty
980
- if (!isNonEmpty(first)) return [];
980
+ if (!isNonEmpty(first)) {
981
+ return [];
982
+ }
981
983
 
982
984
  const restProduct = cartesianProduct(rest);
983
985
 
@@ -1,9 +1,9 @@
1
- import {
2
- type BoundedLengthArray,
3
- type FixedLengthTuple,
4
- type MinLengthArray,
5
- type NonEmptyArray,
6
- type NonEmptyTuple,
1
+ import type {
2
+ BoundedLengthArray,
3
+ FixedLengthTuple,
4
+ MinLengthArray,
5
+ NonEmptyArray,
6
+ NonEmptyTuple,
7
7
  } from 'ts-type-forge';
8
8
  import { IMap } from '../../collections/index.mjs';
9
9
  import { expectType } from '../../expect-type.mjs';
@@ -963,11 +963,13 @@ describe('Arr transformations', () => {
963
963
  expect(fruits.value[1]?.name).toBe('banana');
964
964
  }
965
965
 
966
- if (Optional.isSome(vegetables)) {
967
- expect(vegetables.value).toHaveLength(1);
968
-
969
- expect(vegetables.value[0]?.name).toBe('carrot');
966
+ if (!Optional.isSome(vegetables)) {
967
+ return;
970
968
  }
969
+
970
+ expect(vegetables.value).toHaveLength(1);
971
+
972
+ expect(vegetables.value[0]?.name).toBe('carrot');
971
973
  });
972
974
 
973
975
  test('should work with numeric keys', () => {
@@ -1,12 +1,12 @@
1
- import {
2
- type BoolOr,
3
- type ChangeArrayElement,
4
- type IsAny,
5
- type IsUnknown,
6
- type UnknownBrand,
1
+ import type {
2
+ BoolOr,
3
+ ChangeArrayElement,
4
+ IsAny,
5
+ IsUnknown,
6
+ UnknownBrand,
7
7
  } from 'ts-type-forge';
8
8
  import { asUint32, Num } from '../../number/index.mjs';
9
- import { type ArrayIndex, type SizeType } from '../../types.mjs';
9
+ import type { ArrayIndex, SizeType } from '../../types.mjs';
10
10
 
11
11
  /**
12
12
  * Type guard that checks if a value is an array.
@@ -1,9 +1,9 @@
1
- import {
2
- type BoundedLengthArray,
3
- type FixedLengthArray,
4
- type FixedLengthTuple,
5
- type MinLengthArray,
6
- type ReadonlyRecord,
1
+ import type {
2
+ BoundedLengthArray,
3
+ FixedLengthArray,
4
+ FixedLengthTuple,
5
+ MinLengthArray,
6
+ ReadonlyRecord,
7
7
  } from 'ts-type-forge';
8
8
  import { expectType } from '../../expect-type.mjs';
9
9
  import {
@@ -66,22 +66,26 @@ describe('Arr validations', () => {
66
66
  test('should work with readonly arrays', () => {
67
67
  const readonlyArray: readonly number[] = [1, 2, 3] as const;
68
68
 
69
- if (isArray(readonlyArray)) {
70
- expectType<typeof readonlyArray, readonly number[]>('=');
71
-
72
- expect(readonlyArray).toHaveLength(3);
69
+ if (!isArray(readonlyArray)) {
70
+ return;
73
71
  }
72
+
73
+ expectType<typeof readonlyArray, readonly number[]>('=');
74
+
75
+ expect(readonlyArray).toHaveLength(3);
74
76
  });
75
77
 
76
78
  test('should work with mutable arrays', () => {
77
79
  // transformer-ignore-next-line convert-to-readonly, append-as-const
78
80
  const mutableArray: number[] = [1, 2, 3];
79
81
 
80
- if (isArray(mutableArray)) {
81
- expectType<typeof mutableArray, number[]>('=');
82
-
83
- expect(mutableArray).toHaveLength(3);
82
+ if (!isArray(mutableArray)) {
83
+ return;
84
84
  }
85
+
86
+ expectType<typeof mutableArray, number[]>('=');
87
+
88
+ expect(mutableArray).toHaveLength(3);
85
89
  });
86
90
 
87
91
  test('should exclude impossible array types from unions', () => {
@@ -170,11 +174,13 @@ describe('Arr validations', () => {
170
174
  test('should work as type guard (additional)', () => {
171
175
  const value: unknown = [1, 2, 3] as const;
172
176
 
173
- if (isArray(value)) {
174
- expectType<typeof value, readonly unknown[]>('=');
175
-
176
- expect(value).toHaveLength(3);
177
+ if (!isArray(value)) {
178
+ return;
177
179
  }
180
+
181
+ expectType<typeof value, readonly unknown[]>('=');
182
+
183
+ expect(value).toHaveLength(3);
178
184
  });
179
185
 
180
186
  test('should handle array-like objects', () => {
@@ -238,14 +244,9 @@ describe('Arr validations', () => {
238
244
  });
239
245
 
240
246
  test('should work with generic function', () => {
241
- const processGeneric = <T,>(value: T | readonly number[]): number => {
242
- if (isArray(value)) {
243
- // Type is narrowed to array type within this block
244
- return value.length;
245
- }
246
-
247
- return 0;
248
- };
247
+ const processGeneric = <T,>(value: T | readonly number[]): number =>
248
+ // Type is narrowed to array type within the first branch
249
+ isArray(value) ? value.length : 0;
249
250
 
250
251
  expect(processGeneric([1, 2, 3])).toBe(3);
251
252
 
@@ -264,15 +265,12 @@ describe('Arr validations', () => {
264
265
  test('should work with conditional types', () => {
265
266
  type ArrayOrValue<T> = T extends readonly unknown[] ? T : readonly T[];
266
267
 
267
- const makeArray = <T,>(value: T): ArrayOrValue<T> => {
268
- if (isArray(value)) {
269
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
270
- return value as ArrayOrValue<T>;
271
- }
272
-
273
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
274
- return [value] as ArrayOrValue<T>;
275
- };
268
+ const makeArray = <T,>(value: T): ArrayOrValue<T> =>
269
+ isArray(value)
270
+ ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion
271
+ (value as ArrayOrValue<T>)
272
+ : // eslint-disable-next-line total-functions/no-unsafe-type-assertion
273
+ ([value] as ArrayOrValue<T>);
276
274
 
277
275
  assert.deepStrictEqual(makeArray([1, 2, 3]), [1, 2, 3]);
278
276
 
@@ -284,11 +282,13 @@ describe('Arr validations', () => {
284
282
 
285
283
  const tagged = Object.assign([1, 2, 3], { tag: 'test' }) as TaggedArray;
286
284
 
287
- if (isArray(tagged)) {
288
- expectType<typeof tagged, TaggedArray>('=');
289
-
290
- expect(tagged.tag).toBe('test');
285
+ if (!isArray(tagged)) {
286
+ return;
291
287
  }
288
+
289
+ expectType<typeof tagged, TaggedArray>('=');
290
+
291
+ expect(tagged.tag).toBe('test');
292
292
  });
293
293
 
294
294
  test('should work with branded types', () => {
@@ -26,7 +26,7 @@ describe('Array.some', () => {
26
26
  });
27
27
 
28
28
  test('case 2', () => {
29
- assert.isFalse(xs.some((x) => x <= 1 && 3 <= x));
29
+ assert.isFalse(xs.some((x) => 3 <= x && x <= 1));
30
30
  });
31
31
  });
32
32
 
@@ -1,9 +1,9 @@
1
1
  /* eslint-disable unicorn/prefer-iterator-to-array-at-end */
2
- import { type WidenLiteral } from 'ts-type-forge';
2
+ import type { WidenLiteral } from 'ts-type-forge';
3
3
  import { Optional, pipe } from '../functional/index.mjs';
4
4
  import { asUint32 } from '../number/index.mjs';
5
5
  import { tp, unknownToString } from '../others/index.mjs';
6
- import { type MapSetKeyType, type SizeType } from '../types.mjs';
6
+ import type { MapSetKeyType, SizeType } from '../types.mjs';
7
7
 
8
8
  /**
9
9
  * Interface for an immutable map with custom key mapping and lookup operations.
@@ -1014,10 +1014,10 @@ class IMapMappedClass<K, V, KM extends MapSetKeyType>
1014
1014
 
1015
1015
  /** @inheritdoc */
1016
1016
  get(key: K | (WidenLiteral<K> & {})): Optional<V> {
1017
- if (!this.has(key)) return Optional.none;
1018
-
1019
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, total-functions/no-unsafe-type-assertion
1020
- return Optional.some(this.#map.get(this.#toKey(key as K))!);
1017
+ return this.has(key)
1018
+ ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, total-functions/no-unsafe-type-assertion
1019
+ Optional.some(this.#map.get(this.#toKey(key as K))!)
1020
+ : Optional.none;
1021
1021
  }
1022
1022
 
1023
1023
  /** @inheritdoc */
@@ -1031,7 +1031,9 @@ class IMapMappedClass<K, V, KM extends MapSetKeyType>
1031
1031
  /** @inheritdoc */
1032
1032
  every(predicate: (value: V, key: K) => boolean): boolean {
1033
1033
  for (const [k, v] of this.entries()) {
1034
- if (!predicate(v, k)) return false;
1034
+ if (!predicate(v, k)) {
1035
+ return false;
1036
+ }
1035
1037
  }
1036
1038
 
1037
1039
  return true;
@@ -1040,7 +1042,9 @@ class IMapMappedClass<K, V, KM extends MapSetKeyType>
1040
1042
  /** @inheritdoc */
1041
1043
  some(predicate: (value: V, key: K) => boolean): boolean {
1042
1044
  for (const [k, v] of this.entries()) {
1043
- if (predicate(v, k)) return true;
1045
+ if (predicate(v, k)) {
1046
+ return true;
1047
+ }
1044
1048
  }
1045
1049
 
1046
1050
  return false;
@@ -1073,7 +1077,9 @@ class IMapMappedClass<K, V, KM extends MapSetKeyType>
1073
1077
  set(key: K, value: V): IMapMapped<K, V, KM> {
1074
1078
  const curr = this.get(key);
1075
1079
 
1076
- if (Optional.isSome(curr) && value === curr.value) return this;
1080
+ if (Optional.isSome(curr) && value === curr.value) {
1081
+ return this;
1082
+ }
1077
1083
 
1078
1084
  const keyMapped = this.#toKey(key);
1079
1085
 
@@ -1,4 +1,4 @@
1
- import { type DeepReadonly } from 'ts-type-forge';
1
+ import type { DeepReadonly } from 'ts-type-forge';
2
2
  import { Optional, Result } from '../functional/index.mjs';
3
3
  import { Num } from '../number/index.mjs';
4
4
  import { IMapMapped } from './imap-mapped.mjs';
@@ -1,9 +1,9 @@
1
1
  /* eslint-disable unicorn/prefer-iterator-to-array-at-end */
2
- import { type WidenLiteral } from 'ts-type-forge';
2
+ import type { WidenLiteral } from 'ts-type-forge';
3
3
  import { Optional, pipe } from '../functional/index.mjs';
4
4
  import { asUint32 } from '../number/index.mjs';
5
5
  import { tp, unknownToString } from '../others/index.mjs';
6
- import { type MapSetKeyType, type SizeType } from '../types.mjs';
6
+ import type { MapSetKeyType, SizeType } from '../types.mjs';
7
7
 
8
8
  /**
9
9
  * Interface for an immutable map with lookup operations and functional
@@ -759,10 +759,10 @@ class IMapClass<K extends MapSetKeyType, V>
759
759
 
760
760
  /** @inheritdoc */
761
761
  get(key: K | (WidenLiteral<K> & {})): Optional<V> {
762
- if (!this.has(key)) return Optional.none;
763
-
764
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion, @typescript-eslint/no-non-null-assertion
765
- return Optional.some(this.#map.get(key as K)!);
762
+ return this.has(key)
763
+ ? // eslint-disable-next-line total-functions/no-unsafe-type-assertion, @typescript-eslint/no-non-null-assertion
764
+ Optional.some(this.#map.get(key as K)!)
765
+ : Optional.none;
766
766
  }
767
767
 
768
768
  /** @inheritdoc */
@@ -776,7 +776,9 @@ class IMapClass<K extends MapSetKeyType, V>
776
776
  /** @inheritdoc */
777
777
  every(predicate: (value: V, key: K) => boolean): boolean {
778
778
  for (const [k, v] of this.entries()) {
779
- if (!predicate(v, k)) return false;
779
+ if (!predicate(v, k)) {
780
+ return false;
781
+ }
780
782
  }
781
783
 
782
784
  return true;
@@ -785,7 +787,9 @@ class IMapClass<K extends MapSetKeyType, V>
785
787
  /** @inheritdoc */
786
788
  some(predicate: (value: V, key: K) => boolean): boolean {
787
789
  for (const [k, v] of this.entries()) {
788
- if (predicate(v, k)) return true;
790
+ if (predicate(v, k)) {
791
+ return true;
792
+ }
789
793
  }
790
794
 
791
795
  return false;
@@ -812,7 +816,9 @@ class IMapClass<K extends MapSetKeyType, V>
812
816
  set(key: K, value: V): IMap<K, V> {
813
817
  const curr = this.get(key);
814
818
 
815
- if (Optional.isSome(curr) && value === curr.value) return this; // has no changes
819
+ if (Optional.isSome(curr) && value === curr.value) {
820
+ return this; // has no changes
821
+ }
816
822
 
817
823
  if (!this.has(key)) {
818
824
  return IMap.create([...this.#map, tp(key, value)]);
@@ -656,12 +656,14 @@ describe('IMap.every', () => {
656
656
  ['b', 'world'],
657
657
  ]);
658
658
 
659
- if (map.every((value): value is string => typeof value === 'string')) {
660
- // Type should be narrowed to IMap<string, string>
661
- const firstValue = Optional.unwrap(map.get('a'));
662
-
663
- assert.isTrue(isString(firstValue));
659
+ if (!map.every((value): value is string => typeof value === 'string')) {
660
+ return;
664
661
  }
662
+
663
+ // Type should be narrowed to IMap<string, string>
664
+ const firstValue = Optional.unwrap(map.get('a'));
665
+
666
+ assert.isTrue(isString(firstValue));
665
667
  });
666
668
  });
667
669