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
@@ -1,104 +1,34 @@
1
1
  /**
2
2
  * Type guard that checks if a value is a non-null object.
3
3
  *
4
- * This function checks if a value has type `"object"` according to the `typeof` operator
5
- * and is not `null`. This includes all object types such as plain objects, arrays, dates,
6
- * regular expressions, and other object instances, but excludes functions.
4
+ * This function checks if a value has type `"object"` according to the `typeof`
5
+ * operator and is not `null`. This includes all object types such as plain
6
+ * objects, arrays, dates, regular expressions, and other object instances, but
7
+ * excludes functions.
7
8
  *
8
9
  * **Type Narrowing Behavior:**
10
+ *
9
11
  * - Narrows `unknown` to `object`
10
12
  * - Excludes `null`, `undefined`, and all primitive types
11
13
  * - Excludes functions (they have `typeof` === `"function"`, not `"object"`)
12
14
  * - Includes arrays, dates, regex, and other object instances
13
15
  *
14
- * **Note:** This function returns `true` for arrays. If you need to check for plain objects
15
- * specifically (excluding arrays), use `isRecord()` instead.
16
- *
17
- * @param u - The value to check
18
- * @returns `true` if `u` is an object and not `null`, `false` otherwise.
19
- * When `true`, TypeScript narrows the type to `object`.
20
- *
21
- * @example
22
- * Basic usage with different value types:
23
- * ```typescript
24
- * isNonNullObject({}); // true (plain object)
25
- * isNonNullObject([]); // true (arrays are objects)
26
- * isNonNullObject(new Date()); // true (Date instance)
27
- * isNonNullObject(/regex/); // true (RegExp instance)
28
- * isNonNullObject(new Map()); // true (Map instance)
29
- * isNonNullObject(null); // false (null is not considered object here)
30
- * isNonNullObject(undefined); // false (primitive)
31
- * isNonNullObject("string"); // false (primitive)
32
- * isNonNullObject(42); // false (primitive)
33
- * isNonNullObject(true); // false (primitive)
34
- * isNonNullObject(() => {}); // false (functions are not objects in this context)
35
- * ```
36
- *
37
- * @example
38
- * Type guard usage with unknown values:
39
- * ```typescript
40
- * const value: unknown = parseJsonData();
41
- *
42
- * if (isNonNullObject(value)) {
43
- * // value is now typed as object
44
- * console.log('Value is an object');
45
- *
46
- * // You can now safely use object-specific operations
47
- * console.log(Object.keys(value)); // Safe to call Object.keys
48
- * console.log(value.toString()); // Safe to call methods
49
- *
50
- * // But you may need additional checks for specific object types
51
- * if (Array.isArray(value)) {
52
- * console.log('It\'s an array with length:', value.length);
53
- * }
54
- * } else {
55
- * console.log('Value is not an object');
56
- * }
57
- * ```
16
+ * **Note:** This function returns `true` for arrays. If you need to check for
17
+ * plain objects specifically (excluding arrays), use `isRecord()` instead.
58
18
  *
59
19
  * @example
60
- * Filtering arrays to find objects:
61
- * ```typescript
62
- * const mixedArray: unknown[] = [
63
- * { name: 'John' },
64
- * 'string',
65
- * [1, 2, 3],
66
- * 42,
67
- * null,
68
- * new Date(),
69
- * () => 'function'
70
- * ];
71
20
  *
72
- * const objects = mixedArray.filter(isNonNullObject);
73
- * // objects contains: [{ name: 'John' }, [1, 2, 3], Date instance]
74
- * // Note: includes both plain objects and arrays
21
+ * ```ts
22
+ * const mixed: unknown[] = [{ id: 1 }, null, 'Ada'] as const;
75
23
  *
76
- * objects.forEach(obj => {
77
- * // Each obj is guaranteed to be an object
78
- * console.log('Object type:', obj.constructor.name);
79
- * });
80
- * ```
24
+ * const objects = mixed.filter(isNonNullObject);
81
25
  *
82
- * @example
83
- * Progressive type narrowing with other guards:
84
- * ```typescript
85
- * const apiResponse: unknown = await fetchData();
86
- *
87
- * if (isNonNullObject(apiResponse)) {
88
- * // apiResponse is now object
89
- *
90
- * if (isRecord(apiResponse)) {
91
- * // Further narrowed to UnknownRecord (plain object, not array)
92
- *
93
- * if (hasKey(apiResponse, 'status')) {
94
- * console.log('API status:', apiResponse.status);
95
- * }
96
- * } else if (Array.isArray(apiResponse)) {
97
- * console.log('Response is an array with length:', apiResponse.length);
98
- * }
99
- * }
26
+ * assert.deepStrictEqual(objects, [{ id: 1 }]);
100
27
  * ```
101
28
  *
29
+ * @param u - The value to check
30
+ * @returns `true` if `u` is an object and not `null`, `false` otherwise. When
31
+ * `true`, TypeScript narrows the type to `object`.
102
32
  * @see {@link isRecord} - For checking plain objects specifically (excludes arrays)
103
33
  */
104
34
  export declare const isNonNullObject: (u: unknown) => u is object;
@@ -1 +1 @@
1
- {"version":3,"file":"is-non-null-object.d.mts","sourceRoot":"","sources":["../../src/guard/is-non-null-object.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsGG;AAEH,eAAO,MAAM,eAAe,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,MACb,CAAC"}
1
+ {"version":3,"file":"is-non-null-object.d.mts","sourceRoot":"","sources":["../../src/guard/is-non-null-object.mts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,eAAO,MAAM,eAAe,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,MACb,CAAC"}
@@ -1,104 +1,34 @@
1
1
  /**
2
2
  * Type guard that checks if a value is a non-null object.
3
3
  *
4
- * This function checks if a value has type `"object"` according to the `typeof` operator
5
- * and is not `null`. This includes all object types such as plain objects, arrays, dates,
6
- * regular expressions, and other object instances, but excludes functions.
4
+ * This function checks if a value has type `"object"` according to the `typeof`
5
+ * operator and is not `null`. This includes all object types such as plain
6
+ * objects, arrays, dates, regular expressions, and other object instances, but
7
+ * excludes functions.
7
8
  *
8
9
  * **Type Narrowing Behavior:**
10
+ *
9
11
  * - Narrows `unknown` to `object`
10
12
  * - Excludes `null`, `undefined`, and all primitive types
11
13
  * - Excludes functions (they have `typeof` === `"function"`, not `"object"`)
12
14
  * - Includes arrays, dates, regex, and other object instances
13
15
  *
14
- * **Note:** This function returns `true` for arrays. If you need to check for plain objects
15
- * specifically (excluding arrays), use `isRecord()` instead.
16
- *
17
- * @param u - The value to check
18
- * @returns `true` if `u` is an object and not `null`, `false` otherwise.
19
- * When `true`, TypeScript narrows the type to `object`.
20
- *
21
- * @example
22
- * Basic usage with different value types:
23
- * ```typescript
24
- * isNonNullObject({}); // true (plain object)
25
- * isNonNullObject([]); // true (arrays are objects)
26
- * isNonNullObject(new Date()); // true (Date instance)
27
- * isNonNullObject(/regex/); // true (RegExp instance)
28
- * isNonNullObject(new Map()); // true (Map instance)
29
- * isNonNullObject(null); // false (null is not considered object here)
30
- * isNonNullObject(undefined); // false (primitive)
31
- * isNonNullObject("string"); // false (primitive)
32
- * isNonNullObject(42); // false (primitive)
33
- * isNonNullObject(true); // false (primitive)
34
- * isNonNullObject(() => {}); // false (functions are not objects in this context)
35
- * ```
36
- *
37
- * @example
38
- * Type guard usage with unknown values:
39
- * ```typescript
40
- * const value: unknown = parseJsonData();
41
- *
42
- * if (isNonNullObject(value)) {
43
- * // value is now typed as object
44
- * console.log('Value is an object');
45
- *
46
- * // You can now safely use object-specific operations
47
- * console.log(Object.keys(value)); // Safe to call Object.keys
48
- * console.log(value.toString()); // Safe to call methods
49
- *
50
- * // But you may need additional checks for specific object types
51
- * if (Array.isArray(value)) {
52
- * console.log('It\'s an array with length:', value.length);
53
- * }
54
- * } else {
55
- * console.log('Value is not an object');
56
- * }
57
- * ```
16
+ * **Note:** This function returns `true` for arrays. If you need to check for
17
+ * plain objects specifically (excluding arrays), use `isRecord()` instead.
58
18
  *
59
19
  * @example
60
- * Filtering arrays to find objects:
61
- * ```typescript
62
- * const mixedArray: unknown[] = [
63
- * { name: 'John' },
64
- * 'string',
65
- * [1, 2, 3],
66
- * 42,
67
- * null,
68
- * new Date(),
69
- * () => 'function'
70
- * ];
71
20
  *
72
- * const objects = mixedArray.filter(isNonNullObject);
73
- * // objects contains: [{ name: 'John' }, [1, 2, 3], Date instance]
74
- * // Note: includes both plain objects and arrays
21
+ * ```ts
22
+ * const mixed: unknown[] = [{ id: 1 }, null, 'Ada'] as const;
75
23
  *
76
- * objects.forEach(obj => {
77
- * // Each obj is guaranteed to be an object
78
- * console.log('Object type:', obj.constructor.name);
79
- * });
80
- * ```
24
+ * const objects = mixed.filter(isNonNullObject);
81
25
  *
82
- * @example
83
- * Progressive type narrowing with other guards:
84
- * ```typescript
85
- * const apiResponse: unknown = await fetchData();
86
- *
87
- * if (isNonNullObject(apiResponse)) {
88
- * // apiResponse is now object
89
- *
90
- * if (isRecord(apiResponse)) {
91
- * // Further narrowed to UnknownRecord (plain object, not array)
92
- *
93
- * if (hasKey(apiResponse, 'status')) {
94
- * console.log('API status:', apiResponse.status);
95
- * }
96
- * } else if (Array.isArray(apiResponse)) {
97
- * console.log('Response is an array with length:', apiResponse.length);
98
- * }
99
- * }
26
+ * assert.deepStrictEqual(objects, [{ id: 1 }]);
100
27
  * ```
101
28
  *
29
+ * @param u - The value to check
30
+ * @returns `true` if `u` is an object and not `null`, `false` otherwise. When
31
+ * `true`, TypeScript narrows the type to `object`.
102
32
  * @see {@link isRecord} - For checking plain objects specifically (excludes arrays)
103
33
  */
104
34
  // eslint-disable-next-line @typescript-eslint/no-restricted-types
@@ -1 +1 @@
1
- {"version":3,"file":"is-non-null-object.mjs","sources":["../../src/guard/is-non-null-object.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsGG;AACH;AACO,MAAM,eAAe,GAAG,CAAC,CAAU,KACxC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK;;;;"}
1
+ {"version":3,"file":"is-non-null-object.mjs","sources":["../../src/guard/is-non-null-object.mts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCG;AACH;AACO,MAAM,eAAe,GAAG,CAAC,CAAU,KACxC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK;;;;"}
@@ -1,146 +1,33 @@
1
1
  /**
2
2
  * Type guard that checks if a value is a primitive type.
3
3
  *
4
- * This function identifies JavaScript primitive types, which are immutable data types that are
5
- * not objects. The primitive types are: `string`, `number`, `boolean`, `undefined`, `symbol`,
6
- * `bigint`, and `null`.
4
+ * This function identifies JavaScript primitive types, which are immutable data
5
+ * types that are not objects. The primitive types are: `string`, `number`,
6
+ * `boolean`, `undefined`, `symbol`, `bigint`, and `null`.
7
7
  *
8
- * **Important Note:** Although `null` has `typeof null === "object"` due to a historical
9
- * JavaScript quirk, this function correctly identifies `null` as a primitive value.
8
+ * **Important Note:** Although `null` has `typeof null === "object"` due to a
9
+ * historical JavaScript quirk, this function correctly identifies `null` as a
10
+ * primitive value.
10
11
  *
11
12
  * **Type Narrowing Behavior:**
13
+ *
12
14
  * - Narrows the input type to `Primitive` (union of all primitive types)
13
15
  * - Excludes object types, arrays, functions, and other non-primitive values
14
16
  * - Includes `null` despite its misleading `typeof` result
15
17
  *
16
- * @param u - The value to check
17
- * @returns `true` if `u` is a primitive type, `false` otherwise.
18
- * When `true`, TypeScript narrows the type to `Primitive`.
19
- *
20
18
  * @example
21
- * Basic usage with different value types:
22
- * ```typescript
23
- * isPrimitive("hello"); // true (string)
24
- * isPrimitive(42); // true (number)
25
- * isPrimitive(true); // true (boolean)
26
- * isPrimitive(undefined); // true (undefined)
27
- * isPrimitive(Symbol('test')); // true (symbol)
28
- * isPrimitive(123n); // true (bigint)
29
- * isPrimitive(null); // true (null is primitive despite typeof quirk)
30
- *
31
- * isPrimitive({}); // false (object)
32
- * isPrimitive([]); // false (array)
33
- * isPrimitive(() => {}); // false (function)
34
- * isPrimitive(new Date()); // false (object instance)
35
- * isPrimitive(/regex/); // false (RegExp object)
36
- * ```
37
19
  *
38
- * @example
39
- * Type guard usage for separating primitives from objects:
40
- * ```typescript
41
- * const values: unknown[] = [
42
- * 'string',
43
- * 42,
44
- * true,
45
- * null,
46
- * undefined,
47
- * {},
48
- * [],
49
- * new Date()
50
- * ];
20
+ * ```ts
21
+ * const values: readonly unknown[] = [42, 'Ada', null, { id: 1 }] as const;
51
22
  *
52
23
  * const primitives = values.filter(isPrimitive);
53
- * const objects = values.filter(value => !isPrimitive(value));
54
- *
55
- * primitives.forEach(primitive => {
56
- * // primitive is now typed as Primitive
57
- * console.log('Primitive value:', primitive);
58
- * console.log('Type:', typeof primitive);
59
- * });
60
- * ```
61
- *
62
- * @example
63
- * Deep cloning detection - primitives don't need cloning:
64
- * ```typescript
65
- * function deepClone<T>(value: T): T {
66
- * if (isPrimitive(value)) {
67
- * // Primitives are immutable, return as-is
68
- * return value;
69
- * }
70
24
  *
71
- * // Handle object cloning for non-primitives
72
- * if (Array.isArray(value)) {
73
- * return value.map(deepClone) as T;
74
- * }
75
- *
76
- * if (isRecord(value)) {
77
- * const cloned = {} as T;
78
- * for (const key in value) {
79
- * if (Object.hasOwn(value, key)) {
80
- * cloned[key] = deepClone(value[key]);
81
- * }
82
- * }
83
- * return cloned;
84
- * }
85
- *
86
- * // For other object types, return as-is or implement specific cloning
87
- * return value;
88
- * }
89
- * ```
90
- *
91
- * @example
92
- * Serialization helpers:
93
- * ```typescript
94
- * function canSerializeDirectly(value: unknown): boolean {
95
- * if (isPrimitive(value)) {
96
- * // Most primitives can be serialized directly
97
- * return typeof value !== 'symbol' && typeof value !== 'bigint';
98
- * }
99
- * return false;
100
- * }
101
- *
102
- * function safeStringify(value: unknown): string {
103
- * if (isPrimitive(value)) {
104
- * if (value === null) return 'null';
105
- * if (value === undefined) return 'undefined';
106
- * if (typeof value === 'symbol') return value.toString();
107
- * if (typeof value === 'bigint') return value.toString() + 'n';
108
- * return String(value);
109
- * }
110
- *
111
- * return JSON.stringify(value);
112
- * }
25
+ * assert.deepStrictEqual(primitives, [42, 'Ada', null]);
113
26
  * ```
114
27
  *
115
- * @example
116
- * Type narrowing in conditional logic:
117
- * ```typescript
118
- * function processValue(value: unknown): string {
119
- * if (isPrimitive(value)) {
120
- * // value is now Primitive type
121
- * switch (typeof value) {
122
- * case 'string':
123
- * return `String: ${value}`;
124
- * case 'number':
125
- * return `Number: ${value}`;
126
- * case 'boolean':
127
- * return `Boolean: ${value}`;
128
- * case 'undefined':
129
- * return 'Undefined';
130
- * case 'symbol':
131
- * return `Symbol: ${value.description || 'unnamed'}`;
132
- * case 'bigint':
133
- * return `BigInt: ${value}n`;
134
- * case 'object': // This is null
135
- * return 'Null';
136
- * default:
137
- * return 'Unknown primitive';
138
- * }
139
- * } else {
140
- * return `Object: ${value?.constructor?.name || 'Unknown'}`;
141
- * }
142
- * }
143
- * ```
28
+ * @param u - The value to check
29
+ * @returns `true` if `u` is a primitive type, `false` otherwise. When `true`,
30
+ * TypeScript narrows the type to `Primitive`.
144
31
  */
145
32
  export declare const isPrimitive: (u: unknown) => u is Primitive;
146
33
  //# sourceMappingURL=is-primitive.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"is-primitive.d.mts","sourceRoot":"","sources":["../../src/guard/is-primitive.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+IG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,SAa7C,CAAC"}
1
+ {"version":3,"file":"is-primitive.d.mts","sourceRoot":"","sources":["../../src/guard/is-primitive.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,OAAO,KAAG,CAAC,IAAI,SAa7C,CAAC"}
@@ -1,146 +1,33 @@
1
1
  /**
2
2
  * Type guard that checks if a value is a primitive type.
3
3
  *
4
- * This function identifies JavaScript primitive types, which are immutable data types that are
5
- * not objects. The primitive types are: `string`, `number`, `boolean`, `undefined`, `symbol`,
6
- * `bigint`, and `null`.
4
+ * This function identifies JavaScript primitive types, which are immutable data
5
+ * types that are not objects. The primitive types are: `string`, `number`,
6
+ * `boolean`, `undefined`, `symbol`, `bigint`, and `null`.
7
7
  *
8
- * **Important Note:** Although `null` has `typeof null === "object"` due to a historical
9
- * JavaScript quirk, this function correctly identifies `null` as a primitive value.
8
+ * **Important Note:** Although `null` has `typeof null === "object"` due to a
9
+ * historical JavaScript quirk, this function correctly identifies `null` as a
10
+ * primitive value.
10
11
  *
11
12
  * **Type Narrowing Behavior:**
13
+ *
12
14
  * - Narrows the input type to `Primitive` (union of all primitive types)
13
15
  * - Excludes object types, arrays, functions, and other non-primitive values
14
16
  * - Includes `null` despite its misleading `typeof` result
15
17
  *
16
- * @param u - The value to check
17
- * @returns `true` if `u` is a primitive type, `false` otherwise.
18
- * When `true`, TypeScript narrows the type to `Primitive`.
19
- *
20
18
  * @example
21
- * Basic usage with different value types:
22
- * ```typescript
23
- * isPrimitive("hello"); // true (string)
24
- * isPrimitive(42); // true (number)
25
- * isPrimitive(true); // true (boolean)
26
- * isPrimitive(undefined); // true (undefined)
27
- * isPrimitive(Symbol('test')); // true (symbol)
28
- * isPrimitive(123n); // true (bigint)
29
- * isPrimitive(null); // true (null is primitive despite typeof quirk)
30
- *
31
- * isPrimitive({}); // false (object)
32
- * isPrimitive([]); // false (array)
33
- * isPrimitive(() => {}); // false (function)
34
- * isPrimitive(new Date()); // false (object instance)
35
- * isPrimitive(/regex/); // false (RegExp object)
36
- * ```
37
19
  *
38
- * @example
39
- * Type guard usage for separating primitives from objects:
40
- * ```typescript
41
- * const values: unknown[] = [
42
- * 'string',
43
- * 42,
44
- * true,
45
- * null,
46
- * undefined,
47
- * {},
48
- * [],
49
- * new Date()
50
- * ];
20
+ * ```ts
21
+ * const values: readonly unknown[] = [42, 'Ada', null, { id: 1 }] as const;
51
22
  *
52
23
  * const primitives = values.filter(isPrimitive);
53
- * const objects = values.filter(value => !isPrimitive(value));
54
- *
55
- * primitives.forEach(primitive => {
56
- * // primitive is now typed as Primitive
57
- * console.log('Primitive value:', primitive);
58
- * console.log('Type:', typeof primitive);
59
- * });
60
- * ```
61
- *
62
- * @example
63
- * Deep cloning detection - primitives don't need cloning:
64
- * ```typescript
65
- * function deepClone<T>(value: T): T {
66
- * if (isPrimitive(value)) {
67
- * // Primitives are immutable, return as-is
68
- * return value;
69
- * }
70
24
  *
71
- * // Handle object cloning for non-primitives
72
- * if (Array.isArray(value)) {
73
- * return value.map(deepClone) as T;
74
- * }
75
- *
76
- * if (isRecord(value)) {
77
- * const cloned = {} as T;
78
- * for (const key in value) {
79
- * if (Object.hasOwn(value, key)) {
80
- * cloned[key] = deepClone(value[key]);
81
- * }
82
- * }
83
- * return cloned;
84
- * }
85
- *
86
- * // For other object types, return as-is or implement specific cloning
87
- * return value;
88
- * }
89
- * ```
90
- *
91
- * @example
92
- * Serialization helpers:
93
- * ```typescript
94
- * function canSerializeDirectly(value: unknown): boolean {
95
- * if (isPrimitive(value)) {
96
- * // Most primitives can be serialized directly
97
- * return typeof value !== 'symbol' && typeof value !== 'bigint';
98
- * }
99
- * return false;
100
- * }
101
- *
102
- * function safeStringify(value: unknown): string {
103
- * if (isPrimitive(value)) {
104
- * if (value === null) return 'null';
105
- * if (value === undefined) return 'undefined';
106
- * if (typeof value === 'symbol') return value.toString();
107
- * if (typeof value === 'bigint') return value.toString() + 'n';
108
- * return String(value);
109
- * }
110
- *
111
- * return JSON.stringify(value);
112
- * }
25
+ * assert.deepStrictEqual(primitives, [42, 'Ada', null]);
113
26
  * ```
114
27
  *
115
- * @example
116
- * Type narrowing in conditional logic:
117
- * ```typescript
118
- * function processValue(value: unknown): string {
119
- * if (isPrimitive(value)) {
120
- * // value is now Primitive type
121
- * switch (typeof value) {
122
- * case 'string':
123
- * return `String: ${value}`;
124
- * case 'number':
125
- * return `Number: ${value}`;
126
- * case 'boolean':
127
- * return `Boolean: ${value}`;
128
- * case 'undefined':
129
- * return 'Undefined';
130
- * case 'symbol':
131
- * return `Symbol: ${value.description || 'unnamed'}`;
132
- * case 'bigint':
133
- * return `BigInt: ${value}n`;
134
- * case 'object': // This is null
135
- * return 'Null';
136
- * default:
137
- * return 'Unknown primitive';
138
- * }
139
- * } else {
140
- * return `Object: ${value?.constructor?.name || 'Unknown'}`;
141
- * }
142
- * }
143
- * ```
28
+ * @param u - The value to check
29
+ * @returns `true` if `u` is a primitive type, `false` otherwise. When `true`,
30
+ * TypeScript narrows the type to `Primitive`.
144
31
  */
145
32
  const isPrimitive = (u) => {
146
33
  switch (typeof u) {
@@ -1 +1 @@
1
- {"version":3,"file":"is-primitive.mjs","sources":["../../src/guard/is-primitive.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+IG;AACI,MAAM,WAAW,GAAG,CAAC,CAAU,KAAoB;IACxD,QAAQ,OAAO,CAAC;AACd,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,WAAW;AAChB,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,UAAU;AACf,QAAA,KAAK,QAAQ;YACX,OAAO,CAAC,KAAK,IAAI;;AAEvB;;;;"}
1
+ {"version":3,"file":"is-primitive.mjs","sources":["../../src/guard/is-primitive.mts"],"sourcesContent":[null],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACI,MAAM,WAAW,GAAG,CAAC,CAAU,KAAoB;IACxD,QAAQ,OAAO,CAAC;AACd,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,WAAW;AAChB,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,IAAI;AACb,QAAA,KAAK,UAAU;AACf,QAAA,KAAK,QAAQ;YACX,OAAO,CAAC,KAAK,IAAI;;AAEvB;;;;"}