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