ts-data-forge 3.2.0 → 3.3.1

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 (426) hide show
  1. package/README.md +45 -21
  2. package/dist/array/impl/array-utils-creation.d.mts +116 -0
  3. package/dist/array/impl/array-utils-creation.d.mts.map +1 -0
  4. package/dist/array/impl/array-utils-creation.mjs +110 -0
  5. package/dist/array/impl/array-utils-creation.mjs.map +1 -0
  6. package/dist/array/impl/array-utils-element-access.d.mts +61 -0
  7. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -0
  8. package/dist/array/impl/array-utils-element-access.mjs +66 -0
  9. package/dist/array/impl/array-utils-element-access.mjs.map +1 -0
  10. package/dist/array/impl/array-utils-iterators.d.mts +59 -0
  11. package/dist/array/impl/array-utils-iterators.d.mts.map +1 -0
  12. package/dist/array/impl/array-utils-iterators.mjs +104 -0
  13. package/dist/array/impl/array-utils-iterators.mjs.map +1 -0
  14. package/dist/array/impl/array-utils-modification.d.mts +154 -0
  15. package/dist/array/impl/array-utils-modification.d.mts.map +1 -0
  16. package/dist/array/impl/array-utils-modification.mjs +139 -0
  17. package/dist/array/impl/array-utils-modification.mjs.map +1 -0
  18. package/dist/array/impl/array-utils-reducing-value.d.mts +214 -0
  19. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
  20. package/dist/array/impl/array-utils-reducing-value.mjs +160 -0
  21. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
  22. package/dist/array/impl/array-utils-search.d.mts +179 -0
  23. package/dist/array/impl/array-utils-search.d.mts.map +1 -0
  24. package/dist/array/impl/array-utils-search.mjs +153 -0
  25. package/dist/array/impl/array-utils-search.mjs.map +1 -0
  26. package/dist/array/impl/array-utils-set-op.d.mts +100 -0
  27. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -0
  28. package/dist/array/impl/array-utils-set-op.mjs +137 -0
  29. package/dist/array/impl/array-utils-set-op.mjs.map +1 -0
  30. package/dist/array/impl/array-utils-size.d.mts +24 -0
  31. package/dist/array/impl/array-utils-size.d.mts.map +1 -0
  32. package/dist/array/impl/array-utils-size.mjs +28 -0
  33. package/dist/array/impl/array-utils-size.mjs.map +1 -0
  34. package/dist/array/impl/array-utils-slice-clamped.d.mts +18 -0
  35. package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -0
  36. package/dist/array/impl/array-utils-slice-clamped.mjs +49 -0
  37. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -0
  38. package/dist/array/impl/array-utils-slicing.d.mts +120 -0
  39. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -0
  40. package/dist/array/impl/array-utils-slicing.mjs +140 -0
  41. package/dist/array/impl/array-utils-slicing.mjs.map +1 -0
  42. package/dist/array/impl/array-utils-transformation.d.mts +348 -0
  43. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -0
  44. package/dist/array/impl/array-utils-transformation.mjs +331 -0
  45. package/dist/array/impl/array-utils-transformation.mjs.map +1 -0
  46. package/dist/array/impl/array-utils-validation.d.mts +149 -0
  47. package/dist/array/impl/array-utils-validation.d.mts.map +1 -0
  48. package/dist/array/impl/array-utils-validation.mjs +166 -0
  49. package/dist/array/impl/array-utils-validation.mjs.map +1 -0
  50. package/dist/array/impl/index.d.mts +13 -0
  51. package/dist/array/impl/index.d.mts.map +1 -0
  52. package/dist/array/impl/index.mjs +13 -0
  53. package/dist/array/impl/index.mjs.map +1 -0
  54. package/dist/array/index.d.mts +1 -1
  55. package/dist/array/index.d.mts.map +1 -1
  56. package/dist/array/index.mjs +2 -1
  57. package/dist/array/index.mjs.map +1 -1
  58. package/dist/collections/imap-mapped.d.mts +83 -253
  59. package/dist/collections/imap-mapped.d.mts.map +1 -1
  60. package/dist/collections/imap-mapped.mjs +33 -164
  61. package/dist/collections/imap-mapped.mjs.map +1 -1
  62. package/dist/collections/imap.d.mts +436 -163
  63. package/dist/collections/imap.d.mts.map +1 -1
  64. package/dist/collections/imap.mjs +74 -94
  65. package/dist/collections/imap.mjs.map +1 -1
  66. package/dist/collections/iset-mapped.d.mts +828 -345
  67. package/dist/collections/iset-mapped.d.mts.map +1 -1
  68. package/dist/collections/iset-mapped.mjs +200 -242
  69. package/dist/collections/iset-mapped.mjs.map +1 -1
  70. package/dist/collections/iset.d.mts +397 -205
  71. package/dist/collections/iset.d.mts.map +1 -1
  72. package/dist/collections/iset.mjs +102 -184
  73. package/dist/collections/iset.mjs.map +1 -1
  74. package/dist/collections/queue.d.mts +155 -135
  75. package/dist/collections/queue.d.mts.map +1 -1
  76. package/dist/collections/queue.mjs +55 -156
  77. package/dist/collections/queue.mjs.map +1 -1
  78. package/dist/collections/stack.d.mts +154 -154
  79. package/dist/collections/stack.d.mts.map +1 -1
  80. package/dist/collections/stack.mjs +54 -203
  81. package/dist/collections/stack.mjs.map +1 -1
  82. package/dist/entry-point.d.mts +3 -0
  83. package/dist/entry-point.d.mts.map +1 -0
  84. package/dist/entry-point.mjs +62 -0
  85. package/dist/entry-point.mjs.map +1 -0
  86. package/dist/expect-type.d.mts +43 -172
  87. package/dist/expect-type.d.mts.map +1 -1
  88. package/dist/expect-type.mjs +43 -172
  89. package/dist/expect-type.mjs.map +1 -1
  90. package/dist/functional/match.d.mts +35 -140
  91. package/dist/functional/match.d.mts.map +1 -1
  92. package/dist/functional/match.mjs.map +1 -1
  93. package/dist/functional/optional.d.mts +282 -160
  94. package/dist/functional/optional.d.mts.map +1 -1
  95. package/dist/functional/optional.mjs +131 -71
  96. package/dist/functional/optional.mjs.map +1 -1
  97. package/dist/functional/pipe.d.mts +59 -113
  98. package/dist/functional/pipe.d.mts.map +1 -1
  99. package/dist/functional/pipe.mjs.map +1 -1
  100. package/dist/functional/result.d.mts +433 -332
  101. package/dist/functional/result.d.mts.map +1 -1
  102. package/dist/functional/result.mjs +233 -239
  103. package/dist/functional/result.mjs.map +1 -1
  104. package/dist/globals.d.mts +12 -5
  105. package/dist/guard/has-key.d.mts +23 -74
  106. package/dist/guard/has-key.d.mts.map +1 -1
  107. package/dist/guard/has-key.mjs +23 -74
  108. package/dist/guard/has-key.mjs.map +1 -1
  109. package/dist/guard/is-non-empty-string.d.mts +20 -87
  110. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  111. package/dist/guard/is-non-empty-string.mjs +20 -87
  112. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  113. package/dist/guard/is-non-null-object.d.mts +14 -84
  114. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  115. package/dist/guard/is-non-null-object.mjs +14 -84
  116. package/dist/guard/is-non-null-object.mjs.map +1 -1
  117. package/dist/guard/is-primitive.d.mts +13 -126
  118. package/dist/guard/is-primitive.d.mts.map +1 -1
  119. package/dist/guard/is-primitive.mjs +13 -126
  120. package/dist/guard/is-primitive.mjs.map +1 -1
  121. package/dist/guard/is-record.d.mts +21 -132
  122. package/dist/guard/is-record.d.mts.map +1 -1
  123. package/dist/guard/is-record.mjs +21 -132
  124. package/dist/guard/is-record.mjs.map +1 -1
  125. package/dist/guard/is-type.d.mts +201 -238
  126. package/dist/guard/is-type.d.mts.map +1 -1
  127. package/dist/guard/is-type.mjs +201 -238
  128. package/dist/guard/is-type.mjs.map +1 -1
  129. package/dist/guard/key-is-in.d.mts +22 -139
  130. package/dist/guard/key-is-in.d.mts.map +1 -1
  131. package/dist/guard/key-is-in.mjs +22 -139
  132. package/dist/guard/key-is-in.mjs.map +1 -1
  133. package/dist/index.d.mts +0 -1
  134. package/dist/index.d.mts.map +1 -1
  135. package/dist/index.mjs +0 -1
  136. package/dist/index.mjs.map +1 -1
  137. package/dist/iterator/range.d.mts +29 -62
  138. package/dist/iterator/range.d.mts.map +1 -1
  139. package/dist/iterator/range.mjs.map +1 -1
  140. package/dist/json/json.d.mts +191 -121
  141. package/dist/json/json.d.mts.map +1 -1
  142. package/dist/json/json.mjs +238 -136
  143. package/dist/json/json.mjs.map +1 -1
  144. package/dist/number/branded-types/finite-number.d.mts +24 -156
  145. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  146. package/dist/number/branded-types/finite-number.mjs +27 -159
  147. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  148. package/dist/number/branded-types/int.d.mts +122 -120
  149. package/dist/number/branded-types/int.d.mts.map +1 -1
  150. package/dist/number/branded-types/int.mjs +122 -120
  151. package/dist/number/branded-types/int.mjs.map +1 -1
  152. package/dist/number/branded-types/int16.d.mts +22 -30
  153. package/dist/number/branded-types/int16.d.mts.map +1 -1
  154. package/dist/number/branded-types/int16.mjs +22 -30
  155. package/dist/number/branded-types/int16.mjs.map +1 -1
  156. package/dist/number/branded-types/int32.d.mts +22 -31
  157. package/dist/number/branded-types/int32.d.mts.map +1 -1
  158. package/dist/number/branded-types/int32.mjs +22 -31
  159. package/dist/number/branded-types/int32.mjs.map +1 -1
  160. package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
  161. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  162. package/dist/number/branded-types/non-negative-finite-number.mjs +31 -39
  163. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  164. package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
  165. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  166. package/dist/number/branded-types/non-negative-int16.mjs +24 -34
  167. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  168. package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
  169. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  170. package/dist/number/branded-types/non-negative-int32.mjs +26 -35
  171. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  172. package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
  173. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  174. package/dist/number/branded-types/non-zero-finite-number.mjs +25 -40
  175. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  176. package/dist/number/branded-types/non-zero-int.d.mts +15 -30
  177. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  178. package/dist/number/branded-types/non-zero-int.mjs +15 -30
  179. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  180. package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
  181. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  182. package/dist/number/branded-types/non-zero-int16.mjs +27 -35
  183. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  184. package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
  185. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  186. package/dist/number/branded-types/non-zero-int32.mjs +29 -36
  187. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  188. package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
  189. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  190. package/dist/number/branded-types/non-zero-safe-int.mjs +39 -40
  191. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  192. package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
  193. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  194. package/dist/number/branded-types/non-zero-uint16.mjs +24 -35
  195. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  196. package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
  197. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  198. package/dist/number/branded-types/non-zero-uint32.mjs +24 -35
  199. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  200. package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
  201. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  202. package/dist/number/branded-types/positive-finite-number.mjs +29 -43
  203. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  204. package/dist/number/branded-types/positive-int.d.mts +133 -123
  205. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  206. package/dist/number/branded-types/positive-int.mjs +133 -123
  207. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  208. package/dist/number/branded-types/positive-int16.d.mts +24 -35
  209. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  210. package/dist/number/branded-types/positive-int16.mjs +24 -35
  211. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  212. package/dist/number/branded-types/positive-int32.d.mts +24 -35
  213. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  214. package/dist/number/branded-types/positive-int32.mjs +24 -35
  215. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  216. package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
  217. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  218. package/dist/number/branded-types/positive-safe-int.mjs +160 -34
  219. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  220. package/dist/number/branded-types/positive-uint16.d.mts +24 -35
  221. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  222. package/dist/number/branded-types/positive-uint16.mjs +24 -35
  223. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  224. package/dist/number/branded-types/positive-uint32.d.mts +26 -36
  225. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  226. package/dist/number/branded-types/positive-uint32.mjs +26 -36
  227. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  228. package/dist/number/branded-types/safe-int.d.mts +140 -99
  229. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  230. package/dist/number/branded-types/safe-int.mjs +142 -101
  231. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  232. package/dist/number/branded-types/safe-uint.d.mts +24 -33
  233. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  234. package/dist/number/branded-types/safe-uint.mjs +25 -34
  235. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  236. package/dist/number/branded-types/uint.d.mts +121 -30
  237. package/dist/number/branded-types/uint.d.mts.map +1 -1
  238. package/dist/number/branded-types/uint.mjs +121 -30
  239. package/dist/number/branded-types/uint.mjs.map +1 -1
  240. package/dist/number/branded-types/uint16.d.mts +26 -34
  241. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  242. package/dist/number/branded-types/uint16.mjs +26 -34
  243. package/dist/number/branded-types/uint16.mjs.map +1 -1
  244. package/dist/number/branded-types/uint32.d.mts +26 -68
  245. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  246. package/dist/number/branded-types/uint32.mjs +26 -68
  247. package/dist/number/branded-types/uint32.mjs.map +1 -1
  248. package/dist/number/enum/int8.d.mts +37 -101
  249. package/dist/number/enum/int8.d.mts.map +1 -1
  250. package/dist/number/enum/int8.mjs +39 -170
  251. package/dist/number/enum/int8.mjs.map +1 -1
  252. package/dist/number/enum/uint8.d.mts +45 -55
  253. package/dist/number/enum/uint8.d.mts.map +1 -1
  254. package/dist/number/enum/uint8.mjs +46 -155
  255. package/dist/number/enum/uint8.mjs.map +1 -1
  256. package/dist/number/num.d.mts +145 -206
  257. package/dist/number/num.d.mts.map +1 -1
  258. package/dist/number/num.mjs +143 -199
  259. package/dist/number/num.mjs.map +1 -1
  260. package/dist/number/refined-number-utils.d.mts +97 -21
  261. package/dist/number/refined-number-utils.d.mts.map +1 -1
  262. package/dist/number/refined-number-utils.mjs +91 -20
  263. package/dist/number/refined-number-utils.mjs.map +1 -1
  264. package/dist/object/object.d.mts +126 -208
  265. package/dist/object/object.d.mts.map +1 -1
  266. package/dist/object/object.mjs +68 -102
  267. package/dist/object/object.mjs.map +1 -1
  268. package/dist/others/cast-mutable.d.mts +12 -88
  269. package/dist/others/cast-mutable.d.mts.map +1 -1
  270. package/dist/others/cast-mutable.mjs +13 -89
  271. package/dist/others/cast-mutable.mjs.map +1 -1
  272. package/dist/others/cast-readonly.d.mts +12 -168
  273. package/dist/others/cast-readonly.d.mts.map +1 -1
  274. package/dist/others/cast-readonly.mjs +13 -169
  275. package/dist/others/cast-readonly.mjs.map +1 -1
  276. package/dist/others/if-then.d.mts +6 -83
  277. package/dist/others/if-then.d.mts.map +1 -1
  278. package/dist/others/if-then.mjs +6 -83
  279. package/dist/others/if-then.mjs.map +1 -1
  280. package/dist/others/map-nullable.d.mts +12 -136
  281. package/dist/others/map-nullable.d.mts.map +1 -1
  282. package/dist/others/map-nullable.mjs.map +1 -1
  283. package/dist/others/memoize-function.d.mts +14 -157
  284. package/dist/others/memoize-function.d.mts.map +1 -1
  285. package/dist/others/memoize-function.mjs +14 -157
  286. package/dist/others/memoize-function.mjs.map +1 -1
  287. package/dist/others/tuple.d.mts +33 -151
  288. package/dist/others/tuple.d.mts.map +1 -1
  289. package/dist/others/tuple.mjs +33 -151
  290. package/dist/others/tuple.mjs.map +1 -1
  291. package/dist/others/unknown-to-string.d.mts +11 -125
  292. package/dist/others/unknown-to-string.d.mts.map +1 -1
  293. package/dist/others/unknown-to-string.mjs +14 -127
  294. package/dist/others/unknown-to-string.mjs.map +1 -1
  295. package/dist/promise/promise.d.mts +33 -20
  296. package/dist/promise/promise.d.mts.map +1 -1
  297. package/dist/promise/promise.mjs +34 -21
  298. package/dist/promise/promise.mjs.map +1 -1
  299. package/dist/types.d.mts +1 -1
  300. package/package.json +54 -50
  301. package/src/array/impl/array-utils-creation.mts +192 -0
  302. package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
  303. package/src/array/impl/array-utils-element-access.mts +115 -0
  304. package/src/array/impl/array-utils-element-access.test.mts +151 -0
  305. package/src/array/impl/array-utils-iterators.mts +79 -0
  306. package/src/array/impl/array-utils-iterators.test.mts +98 -0
  307. package/src/array/impl/array-utils-modification.mts +434 -0
  308. package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
  309. package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
  310. package/src/array/impl/array-utils-reducing-value.mts +551 -0
  311. package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +45 -50
  312. package/src/array/impl/array-utils-search.mts +509 -0
  313. package/src/array/impl/array-utils-search.test.mts +346 -0
  314. package/src/array/impl/array-utils-set-op.mts +166 -0
  315. package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
  316. package/src/array/impl/array-utils-size.mts +30 -0
  317. package/src/array/impl/array-utils-size.test.mts +9 -0
  318. package/src/array/impl/array-utils-slice-clamped.mts +51 -0
  319. package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +12 -12
  320. package/src/array/impl/array-utils-slicing.mts +275 -0
  321. package/src/array/impl/array-utils-slicing.test.mts +158 -0
  322. package/src/array/impl/array-utils-transformation.mts +746 -0
  323. package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
  324. package/src/array/impl/array-utils-validation.mts +241 -0
  325. package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
  326. package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
  327. package/src/array/impl/index.mts +12 -0
  328. package/src/array/index.mts +1 -1
  329. package/src/collections/imap-mapped.mts +99 -265
  330. package/src/collections/imap.mts +477 -174
  331. package/src/collections/imap.test.mts +12 -19
  332. package/src/collections/iset-mapped.mts +892 -358
  333. package/src/collections/iset.mts +429 -213
  334. package/src/collections/queue.mts +174 -200
  335. package/src/collections/stack.mts +172 -245
  336. package/src/collections/stack.test.mts +9 -1
  337. package/src/entry-point.mts +2 -0
  338. package/src/expect-type.mts +43 -172
  339. package/src/functional/match.mts +35 -145
  340. package/src/functional/optional.mts +285 -163
  341. package/src/functional/optional.test.mts +4 -1
  342. package/src/functional/pipe.mts +60 -113
  343. package/src/functional/result.mts +452 -351
  344. package/src/functional/result.test.mts +9 -2
  345. package/src/globals.d.mts +12 -5
  346. package/src/guard/has-key.mts +23 -74
  347. package/src/guard/is-non-empty-string.mts +20 -87
  348. package/src/guard/is-non-null-object.mts +14 -84
  349. package/src/guard/is-non-null-object.test.mts +1 -1
  350. package/src/guard/is-primitive.mts +13 -126
  351. package/src/guard/is-primitive.test.mts +1 -1
  352. package/src/guard/is-record.mts +21 -132
  353. package/src/guard/is-record.test.mts +0 -1
  354. package/src/guard/is-type.mts +201 -238
  355. package/src/guard/is-type.test.mts +7 -7
  356. package/src/guard/key-is-in.mts +22 -139
  357. package/src/index.mts +0 -1
  358. package/src/iterator/range.mts +29 -62
  359. package/src/json/json.mts +202 -134
  360. package/src/json/json.test.mts +1 -3
  361. package/src/number/branded-types/finite-number.mts +27 -159
  362. package/src/number/branded-types/int.mts +122 -120
  363. package/src/number/branded-types/int16.mts +22 -30
  364. package/src/number/branded-types/int16.test.mts +24 -24
  365. package/src/number/branded-types/int32.mts +22 -31
  366. package/src/number/branded-types/int32.test.mts +39 -39
  367. package/src/number/branded-types/non-negative-finite-number.mts +31 -39
  368. package/src/number/branded-types/non-negative-int16.mts +24 -34
  369. package/src/number/branded-types/non-negative-int16.test.mts +16 -16
  370. package/src/number/branded-types/non-negative-int32.mts +26 -35
  371. package/src/number/branded-types/non-negative-int32.test.mts +30 -30
  372. package/src/number/branded-types/non-zero-finite-number.mts +25 -40
  373. package/src/number/branded-types/non-zero-int.mts +15 -30
  374. package/src/number/branded-types/non-zero-int16.mts +27 -35
  375. package/src/number/branded-types/non-zero-int16.test.mts +26 -26
  376. package/src/number/branded-types/non-zero-int32.mts +29 -36
  377. package/src/number/branded-types/non-zero-int32.test.mts +45 -42
  378. package/src/number/branded-types/non-zero-safe-int.mts +39 -40
  379. package/src/number/branded-types/non-zero-uint16.mts +24 -35
  380. package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
  381. package/src/number/branded-types/non-zero-uint32.mts +24 -35
  382. package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
  383. package/src/number/branded-types/positive-finite-number.mts +29 -43
  384. package/src/number/branded-types/positive-int.mts +134 -124
  385. package/src/number/branded-types/positive-int16.mts +24 -35
  386. package/src/number/branded-types/positive-int16.test.mts +14 -14
  387. package/src/number/branded-types/positive-int32.mts +24 -35
  388. package/src/number/branded-types/positive-int32.test.mts +26 -26
  389. package/src/number/branded-types/positive-safe-int.mts +160 -34
  390. package/src/number/branded-types/positive-uint16.mts +24 -35
  391. package/src/number/branded-types/positive-uint16.test.mts +16 -16
  392. package/src/number/branded-types/positive-uint32.mts +26 -36
  393. package/src/number/branded-types/positive-uint32.test.mts +31 -28
  394. package/src/number/branded-types/safe-int.mts +142 -101
  395. package/src/number/branded-types/safe-uint.mts +25 -34
  396. package/src/number/branded-types/uint.mts +121 -30
  397. package/src/number/branded-types/uint16.mts +26 -34
  398. package/src/number/branded-types/uint16.test.mts +16 -16
  399. package/src/number/branded-types/uint32.mts +26 -68
  400. package/src/number/branded-types/uint32.test.mts +28 -28
  401. package/src/number/enum/int8.mts +39 -170
  402. package/src/number/enum/uint8.mts +46 -155
  403. package/src/number/num.mts +157 -212
  404. package/src/number/num.test.mts +4 -4
  405. package/src/number/refined-number-utils.mts +109 -26
  406. package/src/object/object.mts +130 -212
  407. package/src/object/object.test.mts +29 -0
  408. package/src/others/cast-mutable.mts +13 -89
  409. package/src/others/cast-mutable.test.mts +80 -0
  410. package/src/others/cast-readonly.mts +13 -169
  411. package/src/others/if-then.mts +6 -83
  412. package/src/others/map-nullable.mts +12 -136
  413. package/src/others/map-nullable.test.mts +6 -6
  414. package/src/others/memoize-function.mts +14 -157
  415. package/src/others/tuple.mts +33 -151
  416. package/src/others/unknown-to-string.mts +15 -127
  417. package/src/others/unknown-to-string.test.mts +14 -2
  418. package/src/promise/promise.mts +34 -21
  419. package/src/promise/promise.test.mts +43 -0
  420. package/dist/array/array-utils.d.mts +0 -2956
  421. package/dist/array/array-utils.d.mts.map +0 -1
  422. package/dist/array/array-utils.mjs +0 -1838
  423. package/dist/array/array-utils.mjs.map +0 -1
  424. package/src/array/array-utils-search.test.mts +0 -169
  425. package/src/array/array-utils-slicing.test.mts +0 -274
  426. package/src/array/array-utils.mts +0 -4834
@@ -2,25 +2,23 @@
2
2
  * Type guard that checks if a value is `undefined`.
3
3
  *
4
4
  * **Type Narrowing Behavior:**
5
+ *
5
6
  * - Narrows the input type to `undefined` when `true`
6
7
  * - Useful for explicit undefined checks
7
8
  *
8
- * @param u - The value to check
9
- * @returns `true` if `u` is `undefined`, `false` otherwise.
10
- * When `true`, TypeScript narrows the type to `undefined`.
11
- *
12
9
  * @example
13
- * ```typescript
14
- * const value: string | undefined = getValue();
15
- *
16
- * if (isUndefined(value)) {
17
- * // value is now typed as undefined
18
- * console.log('Value is undefined');
19
- * } else {
20
- * // value is now typed as string
21
- * console.log('Value length:', value.length);
22
- * }
10
+ *
11
+ * ```ts
12
+ * const values: (number | undefined)[] = [1, undefined, 2];
13
+ *
14
+ * const undefinedValues = values.filter(isUndefined);
15
+ *
16
+ * assert.deepStrictEqual(undefinedValues, [undefined]);
23
17
  * ```
18
+ *
19
+ * @param u - The value to check
20
+ * @returns `true` if `u` is `undefined`, `false` otherwise. When `true`,
21
+ * TypeScript narrows the type to `undefined`.
24
22
  */
25
23
  export const isUndefined = (u: unknown): u is undefined => u === undefined;
26
24
 
@@ -28,27 +26,25 @@ export const isUndefined = (u: unknown): u is undefined => u === undefined;
28
26
  * Type guard that checks if a value is not `undefined`.
29
27
  *
30
28
  * **Type Narrowing Behavior:**
29
+ *
31
30
  * - Excludes `undefined` from the input type when `true`
32
31
  * - Preserves all other types in the union
33
32
  * - Commonly used to filter out undefined values
34
33
  *
35
- * @template T - The type of the input value
36
- * @param u - The value to check
37
- * @returns `true` if `u` is not `undefined`, `false` otherwise.
38
- * When `true`, TypeScript excludes `undefined` from the type.
39
- *
40
34
  * @example
41
- * ```typescript
42
- * const items: (string | undefined)[] = ['a', undefined, 'b', undefined, 'c'];
43
35
  *
44
- * const definedItems = items.filter(isNotUndefined);
45
- * // definedItems is now string[] - undefined values are filtered out
36
+ * ```ts
37
+ * const values: (number | undefined)[] = [1, undefined, 2];
46
38
  *
47
- * definedItems.forEach(item => {
48
- * // item is guaranteed to be string, not undefined
49
- * console.log(item.toUpperCase());
50
- * });
39
+ * const definedValues = values.filter(isNotUndefined);
40
+ *
41
+ * assert.deepStrictEqual(definedValues, [1, 2]);
51
42
  * ```
43
+ *
44
+ * @template T - The type of the input value
45
+ * @param u - The value to check
46
+ * @returns `true` if `u` is not `undefined`, `false` otherwise. When `true`,
47
+ * TypeScript excludes `undefined` from the type.
52
48
  */
53
49
  export const isNotUndefined = <T,>(u: T): u is RelaxedExclude<T, undefined> =>
54
50
  u !== undefined;
@@ -57,22 +53,23 @@ export const isNotUndefined = <T,>(u: T): u is RelaxedExclude<T, undefined> =>
57
53
  * Type guard that checks if a value is a boolean.
58
54
  *
59
55
  * **Type Narrowing Behavior:**
56
+ *
60
57
  * - Narrows `unknown` to `boolean` when `true`
61
58
  * - Preserves literal boolean types (`true | false`)
62
59
  *
63
- * @param u - The value to check
64
- * @returns `true` if `u` is a boolean, `false` otherwise.
65
- * When `true`, TypeScript narrows the type to `boolean`.
66
- *
67
60
  * @example
68
- * ```typescript
69
- * const userInput: unknown = parseInput();
70
61
  *
71
- * if (isBoolean(userInput)) {
72
- * // userInput is now typed as boolean
73
- * console.log('Boolean value:', userInput ? 'true' : 'false');
74
- * }
62
+ * ```ts
63
+ * const flags: unknown[] = [true, 'no', false];
64
+ *
65
+ * const booleans = flags.filter(isBoolean);
66
+ *
67
+ * assert.deepStrictEqual(booleans, [true, false]);
75
68
  * ```
69
+ *
70
+ * @param u - The value to check
71
+ * @returns `true` if `u` is a boolean, `false` otherwise. When `true`,
72
+ * TypeScript narrows the type to `boolean`.
76
73
  */
77
74
  export const isBoolean = (u: unknown): u is boolean => typeof u === 'boolean';
78
75
 
@@ -80,24 +77,24 @@ export const isBoolean = (u: unknown): u is boolean => typeof u === 'boolean';
80
77
  * Type guard that checks if a value is not a boolean.
81
78
  *
82
79
  * **Type Narrowing Behavior:**
80
+ *
83
81
  * - Excludes `boolean` from the input type when `true`
84
82
  * - Preserves all other types in the union
85
83
  *
86
- * @template T - The type of the input value
87
- * @param u - The value to check
88
- * @returns `true` if `u` is not a boolean, `false` otherwise.
89
- * When `true`, TypeScript excludes `boolean` from the type.
90
- *
91
84
  * @example
92
- * ```typescript
93
- * type MixedValue = string | number | boolean;
94
- * const value: MixedValue = getValue();
95
- *
96
- * if (isNotBoolean(value)) {
97
- * // value is now string | number
98
- * console.log('Non-boolean value:', value);
99
- * }
85
+ *
86
+ * ```ts
87
+ * const flags: unknown[] = [true, 'no', false];
88
+ *
89
+ * const nonBooleans = flags.filter(isNotBoolean);
90
+ *
91
+ * assert.deepStrictEqual(nonBooleans, ['no']);
100
92
  * ```
93
+ *
94
+ * @template T - The type of the input value
95
+ * @param u - The value to check
96
+ * @returns `true` if `u` is not a boolean, `false` otherwise. When `true`,
97
+ * TypeScript excludes `boolean` from the type.
101
98
  */
102
99
  export const isNotBoolean = <T,>(u: T): u is RelaxedExclude<T, boolean> =>
103
100
  typeof u !== 'boolean';
@@ -106,28 +103,24 @@ export const isNotBoolean = <T,>(u: T): u is RelaxedExclude<T, boolean> =>
106
103
  * Type guard that checks if a value is a number.
107
104
  *
108
105
  * **Type Narrowing Behavior:**
106
+ *
109
107
  * - Narrows `unknown` to `number` when `true`
110
108
  * - Includes `NaN`, `Infinity`, and `-Infinity` as valid numbers
111
109
  * - Preserves literal number types when possible
112
110
  *
113
- * @param u - The value to check
114
- * @returns `true` if `u` is a number, `false` otherwise.
115
- * When `true`, TypeScript narrows the type to `number`.
116
- *
117
111
  * @example
118
- * ```typescript
119
- * const userInput: unknown = parseInput();
120
- *
121
- * if (isNumber(userInput)) {
122
- * // userInput is now typed as number
123
- * console.log('Number value:', userInput.toFixed(2));
124
- *
125
- * // Note: this includes NaN and Infinity
126
- * if (Number.isFinite(userInput)) {
127
- * console.log('Finite number:', userInput);
128
- * }
129
- * }
112
+ *
113
+ * ```ts
114
+ * const mixed: unknown[] = [1, '2', 3];
115
+ *
116
+ * const numbers = mixed.filter(isNumber);
117
+ *
118
+ * assert.deepStrictEqual(numbers, [1, 3]);
130
119
  * ```
120
+ *
121
+ * @param u - The value to check
122
+ * @returns `true` if `u` is a number, `false` otherwise. When `true`,
123
+ * TypeScript narrows the type to `number`.
131
124
  */
132
125
  export const isNumber = (u: unknown): u is number => typeof u === 'number';
133
126
 
@@ -135,22 +128,24 @@ export const isNumber = (u: unknown): u is number => typeof u === 'number';
135
128
  * Type guard that checks if a value is not a number.
136
129
  *
137
130
  * **Type Narrowing Behavior:**
131
+ *
138
132
  * - Excludes `number` from the input type when `true`
139
133
  * - Preserves all other types in the union
140
134
  *
141
- * @template T - The type of the input value
142
- * @param u - The value to check
143
- * @returns `true` if `u` is not a number, `false` otherwise.
144
- * When `true`, TypeScript excludes `number` from the type.
145
- *
146
135
  * @example
147
- * ```typescript
148
- * type Value = string | number | boolean;
149
- * const values: Value[] = ['hello', 42, true, 3.14, false];
150
136
  *
151
- * const nonNumbers = values.filter(isNotNumber);
152
- * // nonNumbers is now (string | boolean)[] - numbers are filtered out
137
+ * ```ts
138
+ * const mixed: unknown[] = [1, '2', 3];
139
+ *
140
+ * const nonNumbers = mixed.filter(isNotNumber);
141
+ *
142
+ * assert.deepStrictEqual(nonNumbers, ['2']);
153
143
  * ```
144
+ *
145
+ * @template T - The type of the input value
146
+ * @param u - The value to check
147
+ * @returns `true` if `u` is not a number, `false` otherwise. When `true`,
148
+ * TypeScript excludes `number` from the type.
154
149
  */
155
150
  export const isNotNumber = <T,>(u: T): u is RelaxedExclude<T, number> =>
156
151
  typeof u !== 'number';
@@ -159,23 +154,23 @@ export const isNotNumber = <T,>(u: T): u is RelaxedExclude<T, number> =>
159
154
  * Type guard that checks if a value is a bigint.
160
155
  *
161
156
  * **Type Narrowing Behavior:**
157
+ *
162
158
  * - Narrows `unknown` to `bigint` when `true`
163
159
  * - Identifies values created with `BigInt()` constructor or `n` suffix
164
160
  *
165
- * @param u - The value to check
166
- * @returns `true` if `u` is a bigint, `false` otherwise.
167
- * When `true`, TypeScript narrows the type to `bigint`.
168
- *
169
161
  * @example
170
- * ```typescript
171
- * const userInput: unknown = parseInput();
172
- *
173
- * if (isBigint(userInput)) {
174
- * // userInput is now typed as bigint
175
- * console.log('BigInt value:', userInput.toString());
176
- * const doubled = userInput * 2n; // Safe bigint operations
177
- * }
162
+ *
163
+ * ```ts
164
+ * const values: unknown[] = [1n, 2, 3n];
165
+ *
166
+ * const bigints = values.filter(isBigint);
167
+ *
168
+ * assert.deepStrictEqual(bigints, [1n, 3n]);
178
169
  * ```
170
+ *
171
+ * @param u - The value to check
172
+ * @returns `true` if `u` is a bigint, `false` otherwise. When `true`,
173
+ * TypeScript narrows the type to `bigint`.
179
174
  */
180
175
  export const isBigint = (u: unknown): u is bigint => typeof u === 'bigint';
181
176
 
@@ -183,24 +178,24 @@ export const isBigint = (u: unknown): u is bigint => typeof u === 'bigint';
183
178
  * Type guard that checks if a value is not a bigint.
184
179
  *
185
180
  * **Type Narrowing Behavior:**
181
+ *
186
182
  * - Excludes `bigint` from the input type when `true`
187
183
  * - Preserves all other types in the union
188
184
  *
189
- * @template T - The type of the input value
190
- * @param u - The value to check
191
- * @returns `true` if `u` is not a bigint, `false` otherwise.
192
- * When `true`, TypeScript excludes `bigint` from the type.
193
- *
194
185
  * @example
195
- * ```typescript
196
- * type NumericValue = number | bigint;
197
- * const value: NumericValue = getValue();
198
- *
199
- * if (isNotBigint(value)) {
200
- * // value is now number
201
- * console.log('Regular number:', value.toFixed(2));
202
- * }
186
+ *
187
+ * ```ts
188
+ * const values: unknown[] = [1n, 2, 3n];
189
+ *
190
+ * const nonBigints = values.filter(isNotBigint);
191
+ *
192
+ * assert.deepStrictEqual(nonBigints, [2]);
203
193
  * ```
194
+ *
195
+ * @template T - The type of the input value
196
+ * @param u - The value to check
197
+ * @returns `true` if `u` is not a bigint, `false` otherwise. When `true`,
198
+ * TypeScript excludes `bigint` from the type.
204
199
  */
205
200
  export const isNotBigint = <T,>(u: T): u is RelaxedExclude<T, bigint> =>
206
201
  typeof u !== 'bigint';
@@ -209,29 +204,24 @@ export const isNotBigint = <T,>(u: T): u is RelaxedExclude<T, bigint> =>
209
204
  * Type guard that checks if a value is a string.
210
205
  *
211
206
  * **Type Narrowing Behavior:**
207
+ *
212
208
  * - Narrows `unknown` to `string` when `true`
213
209
  * - Preserves literal string types when possible
214
210
  * - Includes empty strings
215
211
  *
216
- * @param u - The value to check
217
- * @returns `true` if `u` is a string, `false` otherwise.
218
- * When `true`, TypeScript narrows the type to `string`.
219
- *
220
212
  * @example
221
- * ```typescript
222
- * const userInput: unknown = parseInput();
223
- *
224
- * if (isString(userInput)) {
225
- * // userInput is now typed as string
226
- * console.log('String length:', userInput.length);
227
- * console.log('Uppercase:', userInput.toUpperCase());
228
- *
229
- * // You can further check for non-empty strings
230
- * if (userInput.length > 0) {
231
- * console.log('Non-empty string:', userInput);
232
- * }
233
- * }
213
+ *
214
+ * ```ts
215
+ * const values: unknown[] = ['Ada', 42, 'Lovelace'];
216
+ *
217
+ * const strings = values.filter(isString);
218
+ *
219
+ * assert.deepStrictEqual(strings, ['Ada', 'Lovelace']);
234
220
  * ```
221
+ *
222
+ * @param u - The value to check
223
+ * @returns `true` if `u` is a string, `false` otherwise. When `true`,
224
+ * TypeScript narrows the type to `string`.
235
225
  */
236
226
  export const isString = (u: unknown): u is string => typeof u === 'string';
237
227
 
@@ -239,22 +229,24 @@ export const isString = (u: unknown): u is string => typeof u === 'string';
239
229
  * Type guard that checks if a value is not a string.
240
230
  *
241
231
  * **Type Narrowing Behavior:**
232
+ *
242
233
  * - Excludes `string` from the input type when `true`
243
234
  * - Preserves all other types in the union
244
235
  *
245
- * @template T - The type of the input value
246
- * @param u - The value to check
247
- * @returns `true` if `u` is not a string, `false` otherwise.
248
- * When `true`, TypeScript excludes `string` from the type.
249
- *
250
236
  * @example
251
- * ```typescript
252
- * type Value = string | number | boolean;
253
- * const mixedValues: Value[] = ['hello', 42, true, 'world', 3.14];
254
237
  *
255
- * const nonStrings = mixedValues.filter(isNotString);
256
- * // nonStrings is now (number | boolean)[] - strings are filtered out
238
+ * ```ts
239
+ * const values: unknown[] = ['Ada', 42, 'Lovelace'];
240
+ *
241
+ * const nonStrings = values.filter(isNotString);
242
+ *
243
+ * assert.deepStrictEqual(nonStrings, [42]);
257
244
  * ```
245
+ *
246
+ * @template T - The type of the input value
247
+ * @param u - The value to check
248
+ * @returns `true` if `u` is not a string, `false` otherwise. When `true`,
249
+ * TypeScript excludes `string` from the type.
258
250
  */
259
251
  export const isNotString = <T,>(u: T): u is RelaxedExclude<T, string> =>
260
252
  typeof u !== 'string';
@@ -263,23 +255,25 @@ export const isNotString = <T,>(u: T): u is RelaxedExclude<T, string> =>
263
255
  * Type guard that checks if a value is a symbol.
264
256
  *
265
257
  * **Type Narrowing Behavior:**
258
+ *
266
259
  * - Narrows `unknown` to `symbol` when `true`
267
260
  * - Identifies values created with `Symbol()` constructor
268
261
  *
269
- * @param u - The value to check
270
- * @returns `true` if `u` is a symbol, `false` otherwise.
271
- * When `true`, TypeScript narrows the type to `symbol`.
272
- *
273
262
  * @example
274
- * ```typescript
275
- * const userInput: unknown = parseInput();
276
- *
277
- * if (isSymbol(userInput)) {
278
- * // userInput is now typed as symbol
279
- * console.log('Symbol description:', userInput.description);
280
- * console.log('Symbol string:', userInput.toString());
281
- * }
263
+ *
264
+ * ```ts
265
+ * const id = Symbol('id');
266
+ * const shared = Symbol.for('shared');
267
+ * const tokens: unknown[] = [id, 'shared', shared];
268
+ *
269
+ * const symbols = tokens.filter(isSymbol);
270
+ *
271
+ * assert.deepStrictEqual(symbols, [id, shared]);
282
272
  * ```
273
+ *
274
+ * @param u - The value to check
275
+ * @returns `true` if `u` is a symbol, `false` otherwise. When `true`,
276
+ * TypeScript narrows the type to `symbol`.
283
277
  */
284
278
  export const isSymbol = (u: unknown): u is symbol => typeof u === 'symbol';
285
279
 
@@ -287,24 +281,25 @@ export const isSymbol = (u: unknown): u is symbol => typeof u === 'symbol';
287
281
  * Type guard that checks if a value is not a symbol.
288
282
  *
289
283
  * **Type Narrowing Behavior:**
284
+ *
290
285
  * - Excludes `symbol` from the input type when `true`
291
286
  * - Preserves all other types in the union
292
287
  *
293
- * @template T - The type of the input value
294
- * @param u - The value to check
295
- * @returns `true` if `u` is not a symbol, `false` otherwise.
296
- * When `true`, TypeScript excludes `symbol` from the type.
297
- *
298
288
  * @example
299
- * ```typescript
300
- * type PropertyKey = string | number | symbol;
301
- * const key: PropertyKey = getPropertyKey();
302
- *
303
- * if (isNotSymbol(key)) {
304
- * // key is now string | number
305
- * console.log('Non-symbol key:', key);
306
- * }
289
+ *
290
+ * ```ts
291
+ * const id = Symbol('id');
292
+ * const tokens: unknown[] = [id, 'shared'];
293
+ *
294
+ * const nonSymbols = tokens.filter(isNotSymbol);
295
+ *
296
+ * assert.deepStrictEqual(nonSymbols, ['shared']);
307
297
  * ```
298
+ *
299
+ * @template T - The type of the input value
300
+ * @param u - The value to check
301
+ * @returns `true` if `u` is not a symbol, `false` otherwise. When `true`,
302
+ * TypeScript excludes `symbol` from the type.
308
303
  */
309
304
  export const isNotSymbol = <T,>(u: T): u is RelaxedExclude<T, symbol> =>
310
305
  typeof u !== 'symbol';
@@ -313,25 +308,23 @@ export const isNotSymbol = <T,>(u: T): u is RelaxedExclude<T, symbol> =>
313
308
  * Type guard that checks if a value is `null`.
314
309
  *
315
310
  * **Type Narrowing Behavior:**
311
+ *
316
312
  * - Narrows the input type to `null` when `true`
317
313
  * - Useful for explicit null checks
318
314
  *
319
- * @param u - The value to check
320
- * @returns `true` if `u` is `null`, `false` otherwise.
321
- * When `true`, TypeScript narrows the type to `null`.
322
- *
323
315
  * @example
324
- * ```typescript
325
- * const value: string | null = getValue();
326
- *
327
- * if (isNull(value)) {
328
- * // value is now typed as null
329
- * console.log('Value is null');
330
- * } else {
331
- * // value is now typed as string
332
- * console.log('Value length:', value.length);
333
- * }
316
+ *
317
+ * ```ts
318
+ * const values: readonly (number | null)[] = [null, 5] as const;
319
+ *
320
+ * const nullValues = values.filter(isNull);
321
+ *
322
+ * assert.deepStrictEqual(nullValues, [null]);
334
323
  * ```
324
+ *
325
+ * @param u - The value to check
326
+ * @returns `true` if `u` is `null`, `false` otherwise. When `true`, TypeScript
327
+ * narrows the type to `null`.
335
328
  */
336
329
  export const isNull = (u: unknown): u is null => u === null;
337
330
 
@@ -339,112 +332,82 @@ export const isNull = (u: unknown): u is null => u === null;
339
332
  * Type guard that checks if a value is not `null`.
340
333
  *
341
334
  * **Type Narrowing Behavior:**
335
+ *
342
336
  * - Excludes `null` from the input type when `true`
343
337
  * - Preserves all other types including `undefined`
344
338
  * - Commonly used to filter out null values
345
339
  *
346
- * @template T - The type of the input value (which could be `null`)
347
- * @param u - The value to check
348
- * @returns `true` if `u` is not `null`, `false` otherwise.
349
- * When `true`, TypeScript excludes `null` from the type.
350
- *
351
340
  * @example
352
- * ```typescript
353
- * const items: (string | null)[] = ['a', null, 'b', null, 'c'];
354
341
  *
355
- * const nonNullItems = items.filter(isNotNull);
356
- * // nonNullItems is now string[] - null values are filtered out
342
+ * ```ts
343
+ * const values: (number | null)[] = [null, 5];
344
+ *
345
+ * const nonNullValues = values.filter(isNotNull);
357
346
  *
358
- * nonNullItems.forEach(item => {
359
- * // item is guaranteed to be string, not null
360
- * console.log(item.toUpperCase());
361
- * });
347
+ * assert.deepStrictEqual(nonNullValues, [5]);
362
348
  * ```
349
+ *
350
+ * @template T - The type of the input value (which could be `null`)
351
+ * @param u - The value to check
352
+ * @returns `true` if `u` is not `null`, `false` otherwise. When `true`,
353
+ * TypeScript excludes `null` from the type.
363
354
  */
364
355
  export const isNotNull = <T,>(u: T | null): u is T => u !== null;
365
356
 
366
357
  /**
367
358
  * Type guard that checks if a value is `null` or `undefined` (nullish).
368
359
  *
369
- * This function uses the loose equality operator (`==`) to check for both `null` and `undefined`
370
- * in a single comparison, which is the standard JavaScript idiom for nullish checks.
360
+ * This function uses the loose equality operator (`==`) to check for both
361
+ * `null` and `undefined` in a single comparison, which is the standard
362
+ * JavaScript idiom for nullish checks.
371
363
  *
372
364
  * **Type Narrowing Behavior:**
365
+ *
373
366
  * - Narrows the input type to `null | undefined` when `true`
374
367
  * - Useful for checking if a value is "nullish" (either null or undefined)
375
368
  *
376
- * @param u - The value to check
377
- * @returns `true` if `u` is `null` or `undefined`, `false` otherwise.
378
- * When `true`, TypeScript narrows the type to `null | undefined`.
379
- *
380
369
  * @example
381
- * ```typescript
382
- * const value: string | null | undefined = getValue();
383
- *
384
- * if (isNullish(value)) {
385
- * // value is now typed as null | undefined
386
- * console.log('Value is nullish');
387
- * } else {
388
- * // value is now typed as string
389
- * console.log('Value length:', value.length);
390
- * }
370
+ *
371
+ * ```ts
372
+ * const values: (string | null | undefined)[] = ['Ada', null, undefined];
373
+ *
374
+ * const nullishValues = values.filter(isNullish);
375
+ *
376
+ * assert.deepStrictEqual(nullishValues, [null, undefined]);
391
377
  * ```
378
+ *
379
+ * @param u - The value to check
380
+ * @returns `true` if `u` is `null` or `undefined`, `false` otherwise. When
381
+ * `true`, TypeScript narrows the type to `null | undefined`.
392
382
  */
393
383
  export const isNullish = (u: unknown): u is null | undefined => u == null;
394
384
 
395
385
  /**
396
386
  * Type guard that checks if a value is not `null` or `undefined` (non-nullish).
397
387
  *
398
- * This function uses the loose inequality operator (`!=`) to check that a value is neither
399
- * `null` nor `undefined` in a single comparison. This is equivalent to TypeScript's
400
- * `NonNullable<T>` utility type.
388
+ * This function uses the loose inequality operator (`!=`) to check that a value
389
+ * is neither `null` nor `undefined` in a single comparison. This is equivalent
390
+ * to TypeScript's `NonNullable<T>` utility type.
401
391
  *
402
392
  * **Type Narrowing Behavior:**
393
+ *
403
394
  * - Excludes both `null` and `undefined` from the input type when `true`
404
395
  * - Equivalent to applying TypeScript's `NonNullable<T>` utility type
405
396
  * - Commonly used to filter out nullish values from arrays
406
397
  *
407
- * @template T - The type of the input value
408
- * @param u - The value to check
409
- * @returns `true` if `u` is not `null` and not `undefined`, `false` otherwise.
410
- * When `true`, TypeScript narrows the type to `NonNullable<T>`.
411
- *
412
398
  * @example
413
- * ```typescript
414
- * const items: (string | null | undefined)[] = [
415
- * 'hello',
416
- * null,
417
- * 'world',
418
- * undefined,
419
- * 'test'
420
- * ];
421
- *
422
- * const definedItems = items.filter(isNonNullish);
423
- * // definedItems is now string[] - both null and undefined values are filtered out
424
- *
425
- * definedItems.forEach(item => {
426
- * // item is guaranteed to be string, never null or undefined
427
- * console.log(item.toUpperCase());
428
- * });
429
- * ```
430
399
  *
431
- * @example
432
- * Progressive validation with optional chaining alternative:
433
- * ```typescript
434
- * interface User {
435
- * profile?: {
436
- * name?: string;
437
- * email?: string;
438
- * };
439
- * }
440
- *
441
- * const user: User = getUser();
442
- *
443
- * // Instead of optional chaining: user.profile?.name
444
- * if (isNonNullish(user.profile) && isNonNullish(user.profile.name)) {
445
- * // user.profile.name is now guaranteed to be string
446
- * console.log('User name:', user.profile.name.toUpperCase());
447
- * }
400
+ * ```ts
401
+ * const values: (string | null | undefined)[] = ['Ada', null, undefined];
402
+ *
403
+ * const definedValues = values.filter(isNonNullish);
404
+ *
405
+ * assert.deepStrictEqual(definedValues, ['Ada']);
448
406
  * ```
407
+ *
408
+ * @template T - The type of the input value
409
+ * @param u - The value to check
410
+ * @returns `true` if `u` is not `null` and not `undefined`, `false` otherwise.
411
+ * When `true`, TypeScript narrows the type to `NonNullable<T>`.
449
412
  */
450
413
  export const isNonNullish = <T,>(u: T): u is NonNullable<T> => u != null;