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
package/README.md CHANGED
@@ -32,6 +32,10 @@ This library offers a range of utilities, including:
32
32
  - **JSON Handling**: Type-safe JSON parsing and stringification.
33
33
  - **And more**: Including memoization, casting utilities, and other helpful tools.
34
34
 
35
+ ## Documentation
36
+
37
+ - API reference: <https://noshiro-pf.github.io/ts-data-forge/>
38
+
35
39
  ## Installation
36
40
 
37
41
  ```bash
@@ -235,8 +239,8 @@ assert(clamp(-10) === 0);
235
239
  // Rounding utilities
236
240
  const round2 = Num.round(2);
237
241
 
238
- assert(round2(3.14159) === 3.14);
239
- assert(Num.roundAt(3.14159, 3) === 3.142);
242
+ assert(round2(3.141_59) === 3.14);
243
+ assert(Num.roundAt(3.141_59, 3) === 3.142);
240
244
  assert(Num.roundToInt(3.7) === 4);
241
245
 
242
246
  // Type guards
@@ -284,9 +288,9 @@ assert.throw(() => {
284
288
 
285
289
  // Range-constrained types (16-bit, 32-bit)
286
290
  const int16 = asInt16(1000); // Int16: [-32768, 32767]
287
- const uint32 = asUint32(3000000000); // Uint32: [0, 4294967295]
291
+ const uint32 = asUint32(3_000_000_000); // Uint32: [0, 4294967295]
288
292
  assert(int16 === 1000);
289
- assert(uint32 === 3000000000);
293
+ assert(uint32 === 3_000_000_000);
290
294
 
291
295
  // Non-zero and positive variants
292
296
  const nonZeroInt = asNonZeroInt(5); // NonZeroInt - excludes zero
@@ -296,9 +300,9 @@ assert(positiveInt === 10);
296
300
 
297
301
  // Type-safe arithmetic with automatic clamping
298
302
  const sum = Int16.add(int16, asInt16(2000)); // Int16 (3000)
299
- const clamped = Int16.clamp(100000); // Int16 (32767 - clamped to MAX_VALUE)
303
+ const clamped = Int16.clamp(100_000); // Int16 (32767 - clamped to MAX_VALUE)
300
304
  assert(sum === 3000);
301
- assert(clamped === 32767);
305
+ assert(clamped === 32_767);
302
306
 
303
307
  // Safe division with non-zero types
304
308
  const ratio = NonZeroInt.div(asNonZeroInt(10), nonZeroInt); // No division by zero risk
@@ -306,8 +310,8 @@ assert(ratio === 2);
306
310
 
307
311
  // Random generation within type constraints
308
312
  const randomInt16 = Int16.random(); // Int16 (random value in valid range)
309
- assert(-32768 <= randomInt16);
310
- assert(randomInt16 <= 32767);
313
+ assert(-32_768 <= randomInt16);
314
+ assert(randomInt16 <= 32_767);
311
315
  ```
312
316
 
313
317
  ### 4. Array Utilities with `Arr`
@@ -480,25 +484,45 @@ assert.deepStrictEqual(mut_stepValues, [0, 2, 4, 6, 8]);
480
484
  Safely work with readonly types when interfacing with mutable APIs.
481
485
 
482
486
  ```tsx
487
+ import type * as React from 'react';
483
488
  import { castMutable } from 'ts-data-forge';
484
489
 
485
490
  // Example: Material-UI Autocomplete
486
491
  import { Autocomplete, TextField } from '@mui/material';
487
492
 
493
+ // Immer.js example
494
+ import { produce } from 'immer';
495
+
488
496
  export const SomeComponent: React.FC = () => (
489
497
  <Autocomplete
490
498
  options={castMutable(readonlyOptions)}
491
- renderInput={(params) => (
492
- <TextField {...params} placeholder="Select an option" />
499
+ renderInput={({
500
+ InputLabelProps,
501
+ InputProps,
502
+ disabled,
503
+ fullWidth,
504
+ id,
505
+ inputProps,
506
+ size,
507
+ }) => (
508
+ <TextField
509
+ slotProps={{
510
+ inputLabel: InputLabelProps,
511
+ input: InputProps,
512
+ htmlInput: inputProps,
513
+ }}
514
+ disabled={disabled}
515
+ fullWidth={fullWidth}
516
+ id={id}
517
+ size={size}
518
+ placeholder="Select an option"
519
+ />
493
520
  )}
494
521
  />
495
522
  );
496
523
 
497
524
  const readonlyOptions: readonly string[] = ['Option 1', 'Option 2', 'Option 3'];
498
525
 
499
- // Immer.js example
500
- import { produce } from 'immer';
501
-
502
526
  type State = Readonly<{
503
527
  items: readonly string[];
504
528
  }>;
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Creates an array of zeros with the specified length.
3
+ *
4
+ * @example
5
+ *
6
+ * ```ts
7
+ * const emptyZeros = Arr.zeros(0);
8
+ * const threeZeros = Arr.zeros(3);
9
+ *
10
+ * assert.deepStrictEqual(emptyZeros, []);
11
+ * assert.deepStrictEqual(threeZeros, [0, 0, 0]);
12
+ * ```
13
+ */
14
+ export declare const zeros: <N extends SizeType.ArgArr>(len: N) => N extends SmallUint ? ArrayOfLength<N, 0> : N extends SizeType.ArgArrPositive ? NonEmptyArray<0> : readonly 0[];
15
+ /**
16
+ * Creates a sequence of consecutive integers from 0 to `len-1`.
17
+ *
18
+ * @example
19
+ *
20
+ * ```ts
21
+ * const emptySeq = Arr.seq(0);
22
+ * const firstFive = Arr.seq(5);
23
+ *
24
+ * assert.deepStrictEqual(emptySeq, []);
25
+ * assert.deepStrictEqual(firstFive, [0, 1, 2, 3, 4]);
26
+ * ```
27
+ */
28
+ export declare const seq: <N extends SizeType.ArgArr>(len: N) => N extends SmallUint ? Seq<N> : N extends SizeType.ArgArrPositive ? NonEmptyArray<SizeType.Arr> : readonly SizeType.Arr[];
29
+ /**
30
+ * Creates a new array of the specified length, filled with the initial value.
31
+ *
32
+ * @example
33
+ *
34
+ * ```ts
35
+ * const threeOnes = Arr.create(3, 1);
36
+ * const emptyStrings = Arr.create(0, 'Ada');
37
+ *
38
+ * assert.deepStrictEqual(threeOnes, [1, 1, 1]);
39
+ * assert.deepStrictEqual(emptyStrings, []);
40
+ * ```
41
+ */
42
+ export declare const create: <const V, N extends SizeType.ArgArr>(len: N, init: V) => N extends SmallUint ? ArrayOfLength<N, V> : N extends SizeType.ArgArrPositive ? NonEmptyArray<V> : readonly V[];
43
+ /**
44
+ * Alias for `create`.
45
+ *
46
+ * @see {@link create}
47
+ */
48
+ export declare const newArray: <const V, N extends SizeType.ArgArr>(len: N, init: V) => N extends SmallUint ? ArrayOfLength<N, V> : N extends SizeType.ArgArrPositive ? NonEmptyArray<V> : readonly V[];
49
+ /**
50
+ * Generates an array from a generator function.
51
+ *
52
+ * @example
53
+ *
54
+ * ```ts
55
+ * const numbers = Arr.generate(function* () {
56
+ * yield 1;
57
+ * yield 2;
58
+ * yield 3;
59
+ * });
60
+ *
61
+ * assert.deepStrictEqual(numbers, [1, 2, 3]);
62
+ * ```
63
+ */
64
+ export declare const generate: <T>(generatorFn: () => Generator<T, void, unknown>) => readonly T[];
65
+ /**
66
+ * Generates an array from an async generator function.
67
+ *
68
+ * @example
69
+ *
70
+ * ```ts
71
+ * const values = await Arr.generateAsync(async function* () {
72
+ * yield 'Ada';
73
+ * await Promise.resolve();
74
+ * yield 'Lovelace';
75
+ * });
76
+ *
77
+ * assert.deepStrictEqual(values, ['Ada', 'Lovelace']);
78
+ * ```
79
+ */
80
+ export declare const generateAsync: <T>(generatorFn: () => AsyncGenerator<T, void, unknown>) => Promise<readonly T[]>;
81
+ /**
82
+ * Creates a shallow copy of an array.
83
+ *
84
+ * @example
85
+ *
86
+ * ```ts
87
+ * const original = [{ id: 1 }, { id: 2 }] as const;
88
+ * const cloned = Arr.copy(original);
89
+ *
90
+ * assert.deepStrictEqual(cloned, original);
91
+ * assert.notStrictEqual(cloned, original);
92
+ * ```
93
+ */
94
+ export declare const copy: <const Ar extends readonly unknown[]>(array: Ar) => Ar;
95
+ type LT = Readonly<{
96
+ [N in SmallUint]: Index<N>;
97
+ }>;
98
+ type RangeList<S extends SmallUint, E extends SmallUint> = BoolOr<IsUnion<S>, IsUnion<E>> extends true ? readonly RelaxedExclude<LT[E], LT[Min<S>]>[] : List.Skip<S, Seq<E>>;
99
+ /**
100
+ * Creates an array of numbers within a specified range with optional step.
101
+ *
102
+ * @example
103
+ *
104
+ * ```ts
105
+ * const ascending = Arr.range(asUint32(1), asUint32(5));
106
+ * const empty = Arr.range(asUint32(2), asUint32(2));
107
+ *
108
+ * assert.deepStrictEqual(ascending, [1, 2, 3, 4]);
109
+ * assert.deepStrictEqual(empty, []);
110
+ * ```
111
+ */
112
+ export declare function range<S extends SmallUint, E extends SmallUint>(start: S, end: E, step?: 1): RangeList<S, E>;
113
+ export declare function range(start: SafeUintWithSmallInt, end: SafeUintWithSmallInt, step?: PositiveSafeIntWithSmallInt): readonly SafeUint[];
114
+ export declare function range(start: SafeIntWithSmallInt, end: SafeIntWithSmallInt, step?: NonZeroSafeIntWithSmallInt): readonly SafeInt[];
115
+ export {};
116
+ //# sourceMappingURL=array-utils-creation.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-utils-creation.d.mts","sourceRoot":"","sources":["../../../src/array/impl/array-utils-creation.mts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,EAC7C,KAAK,CAAC,KACL,CAAC,SAAS,SAAS,GAClB,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,CAAC,SAAS,QAAQ,CAAC,cAAc,GAC/B,aAAa,CAAC,CAAC,CAAC,GAChB,SAAS,CAAC,EAEiC,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,GAAG,GAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,EAC3C,KAAK,CAAC,KACL,CAAC,SAAS,SAAS,GAClB,GAAG,CAAC,CAAC,CAAC,GACN,CAAC,SAAS,QAAQ,CAAC,cAAc,GAC/B,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,GAC3B,SAAS,QAAQ,CAAC,GAAG,EAEwB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,QAAQ,CAAC,MAAM,EACvD,KAAK,CAAC,EACN,MAAM,CAAC,KACN,CAAC,SAAS,SAAS,GAClB,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,CAAC,SAAS,QAAQ,CAAC,cAAc,GAC/B,aAAa,CAAC,CAAC,CAAC,GAChB,SAAS,CAAC,EAE+C,CAAC;AAEhE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,SAhBQ,CAAC,EAAE,CAAC,SAAS,QAAQ,CAAC,MAAM,OAClD,CAAC,QACA,CAAC,KACN,CAAC,SAAS,SAAS,GAClB,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GACnB,CAAC,SAAS,QAAQ,CAAC,cAAc,GAC/B,aAAa,CAAC,CAAC,CAAC,GAChB,SAAS,CAAC,EASc,CAAC;AAE/B;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,EACxB,aAAa,MAAM,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,KAC7C,SAAS,CAAC,EAA+B,CAAC;AAE7C;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,EAC7B,aAAa,MAAM,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,KAClD,OAAO,CAAC,SAAS,CAAC,EAAE,CAAmC,CAAC;AAE3D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,EAAE,SAAS,SAAS,OAAO,EAAE,EAAE,OAAO,EAAE,KAAG,EAEtC,CAAC;AAEjC,KAAK,EAAE,GAAG,QAAQ,CAAC;KAChB,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEH,KAAK,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,IACrD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,GACvC,SAAS,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAC5C,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAY3B;;;;;;;;;;;;GAYG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,SAAS,EAC5D,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,CAAC,EACN,IAAI,CAAC,EAAE,CAAC,GACP,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEnB,wBAAgB,KAAK,CACnB,KAAK,EAAE,oBAAoB,EAC3B,GAAG,EAAE,oBAAoB,EACzB,IAAI,CAAC,EAAE,2BAA2B,GACjC,SAAS,QAAQ,EAAE,CAAC;AAEvB,wBAAgB,KAAK,CACnB,KAAK,EAAE,mBAAmB,EAC1B,GAAG,EAAE,mBAAmB,EACxB,IAAI,CAAC,EAAE,0BAA0B,GAChC,SAAS,OAAO,EAAE,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { range as range$1 } from '../../iterator/range.mjs';
2
+
3
+ /**
4
+ * Creates an array of zeros with the specified length.
5
+ *
6
+ * @example
7
+ *
8
+ * ```ts
9
+ * const emptyZeros = Arr.zeros(0);
10
+ * const threeZeros = Arr.zeros(3);
11
+ *
12
+ * assert.deepStrictEqual(emptyZeros, []);
13
+ * assert.deepStrictEqual(threeZeros, [0, 0, 0]);
14
+ * ```
15
+ */
16
+ const zeros = (len) =>
17
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
18
+ Array.from({ length: len }).fill(0);
19
+ /**
20
+ * Creates a sequence of consecutive integers from 0 to `len-1`.
21
+ *
22
+ * @example
23
+ *
24
+ * ```ts
25
+ * const emptySeq = Arr.seq(0);
26
+ * const firstFive = Arr.seq(5);
27
+ *
28
+ * assert.deepStrictEqual(emptySeq, []);
29
+ * assert.deepStrictEqual(firstFive, [0, 1, 2, 3, 4]);
30
+ * ```
31
+ */
32
+ const seq = (len) =>
33
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
34
+ Array.from({ length: len }, (_, i) => i);
35
+ /**
36
+ * Creates a new array of the specified length, filled with the initial value.
37
+ *
38
+ * @example
39
+ *
40
+ * ```ts
41
+ * const threeOnes = Arr.create(3, 1);
42
+ * const emptyStrings = Arr.create(0, 'Ada');
43
+ *
44
+ * assert.deepStrictEqual(threeOnes, [1, 1, 1]);
45
+ * assert.deepStrictEqual(emptyStrings, []);
46
+ * ```
47
+ */
48
+ const create = (len, init) =>
49
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
50
+ Array.from({ length: Math.max(0, len) }, () => init);
51
+ /**
52
+ * Alias for `create`.
53
+ *
54
+ * @see {@link create}
55
+ */
56
+ const newArray = create;
57
+ /**
58
+ * Generates an array from a generator function.
59
+ *
60
+ * @example
61
+ *
62
+ * ```ts
63
+ * const numbers = Arr.generate(function* () {
64
+ * yield 1;
65
+ * yield 2;
66
+ * yield 3;
67
+ * });
68
+ *
69
+ * assert.deepStrictEqual(numbers, [1, 2, 3]);
70
+ * ```
71
+ */
72
+ const generate = (generatorFn) => Array.from(generatorFn());
73
+ /**
74
+ * Generates an array from an async generator function.
75
+ *
76
+ * @example
77
+ *
78
+ * ```ts
79
+ * const values = await Arr.generateAsync(async function* () {
80
+ * yield 'Ada';
81
+ * await Promise.resolve();
82
+ * yield 'Lovelace';
83
+ * });
84
+ *
85
+ * assert.deepStrictEqual(values, ['Ada', 'Lovelace']);
86
+ * ```
87
+ */
88
+ const generateAsync = (generatorFn) => Array.fromAsync(generatorFn());
89
+ /**
90
+ * Creates a shallow copy of an array.
91
+ *
92
+ * @example
93
+ *
94
+ * ```ts
95
+ * const original = [{ id: 1 }, { id: 2 }] as const;
96
+ * const cloned = Arr.copy(original);
97
+ *
98
+ * assert.deepStrictEqual(cloned, original);
99
+ * assert.notStrictEqual(cloned, original);
100
+ * ```
101
+ */
102
+ const copy = (array) =>
103
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
104
+ array.slice();
105
+ function range(start, end, step = 1) {
106
+ return Array.from(range$1(start, end, step));
107
+ }
108
+
109
+ export { copy, create, generate, generateAsync, newArray, range, seq, zeros };
110
+ //# sourceMappingURL=array-utils-creation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-utils-creation.mjs","sources":["../../../src/array/impl/array-utils-creation.mts"],"sourcesContent":[null],"names":["rangeIterator"],"mappings":";;AAGA;;;;;;;;;;;;AAYG;AACI,MAAM,KAAK,GAAG,CACnB,GAAM;AAMN;AACA,KAAK,CAAC,IAAI,CAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAEvC;;;;;;;;;;;;AAYG;AACI,MAAM,GAAG,GAAG,CACjB,GAAM;AAMN;AACA,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;AAEzC;;;;;;;;;;;;AAYG;MACU,MAAM,GAAG,CACpB,GAAM,EACN,IAAO;AAMP;AACA,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,IAAI;AAErD;;;;AAIG;AACI,MAAM,QAAQ,GAAG;AAExB;;;;;;;;;;;;;;AAcG;AACI,MAAM,QAAQ,GAAG,CACtB,WAA8C,KAC7B,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE;AAE3C;;;;;;;;;;;;;;AAcG;AACI,MAAM,aAAa,GAAG,CAC3B,WAAmD,KACzB,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE;AAEzD;;;;;;;;;;;;AAYG;AACI,MAAM,IAAI,GAAG,CAAsC,KAAS;AACjE;AACA,KAAK,CAAC,KAAK;AAoDP,SAAU,KAAK,CACnB,KAA0B,EAC1B,GAAwB,EACxB,OAAmC,CAAC,EAAA;AAEpC,IAAA,OAAO,KAAK,CAAC,IAAI,CAACA,OAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACpD;;;;"}
@@ -0,0 +1,61 @@
1
+ import { Optional } from '../../functional/index.mjs';
2
+ /**
3
+ * Safely retrieves an element at a given index from an array, returning an Optional.
4
+ *
5
+ * @example
6
+ *
7
+ * ```ts
8
+ * const letters: readonly string[] = ['a', 'b', 'c'];
9
+ *
10
+ * const two = Arr.at(letters, 1);
11
+ * const last = Arr.at(-1)(letters);
12
+ * const missing = Arr.at(letters, 5);
13
+ *
14
+ * assert.deepStrictEqual(two, Optional.some('b'));
15
+ * assert.deepStrictEqual(last, Optional.some('c'));
16
+ * assert.deepStrictEqual(missing, Optional.none);
17
+ * ```
18
+ */
19
+ export declare function at<const Ar extends readonly unknown[]>(array: Ar, index: ArgArrayIndexWithNegative<Ar>): Optional<Ar[number]>;
20
+ export declare function at(index: SizeType.ArgArrWithNegative): <E>(array: readonly E[]) => Optional<E>;
21
+ /**
22
+ * Returns the first element of an array as an Optional.
23
+ *
24
+ * @example
25
+ *
26
+ * ```ts
27
+ * const users = [{ id: 1 }, { id: 2 }];
28
+ * const empty: { id: number }[] = [];
29
+ *
30
+ * const first = Arr.head(users);
31
+ * const none = Arr.head(empty);
32
+ *
33
+ * assert.deepStrictEqual(first, Optional.some({ id: 1 }));
34
+ * assert.deepStrictEqual(none, Optional.none);
35
+ * ```
36
+ */
37
+ export declare const head: <const Ar extends readonly unknown[]>(array: Ar) => Ar extends readonly [] ? Optional.None : Ar extends readonly [infer E, ...unknown[]] ? Optional.Some<E> : Ar extends NonEmptyArray<infer E> ? Optional.Some<E> : Optional<Ar[number]>;
38
+ /**
39
+ * Returns the last element of an array as an Optional.
40
+ *
41
+ * @example
42
+ *
43
+ * ```ts
44
+ * const queue = ['first', 'second'];
45
+ * const emptyQueue: string[] = [];
46
+ *
47
+ * const lastValue = Arr.last(queue);
48
+ * const none = Arr.last(emptyQueue);
49
+ *
50
+ * assert.deepStrictEqual(lastValue, Optional.some('second'));
51
+ * assert.deepStrictEqual(none, Optional.none);
52
+ * ```
53
+ */
54
+ export declare const last: <const Ar extends readonly unknown[]>(array: Ar) => Ar extends readonly [] ? Optional.None : Ar extends readonly [...unknown[], infer E] ? Optional.Some<E> : Ar extends NonEmptyArray<infer E> ? Optional.Some<E> : Optional<Ar[number]>;
55
+ /**
56
+ * Alias for `head`.
57
+ *
58
+ * @see {@link head}
59
+ */
60
+ export declare const first: <const Ar extends readonly unknown[]>(array: Ar) => Ar extends readonly [] ? Optional.None : Ar extends readonly [infer E, ...unknown[]] ? Optional.Some<E> : Ar extends NonEmptyArray<infer E> ? Optional.Some<E> : Optional<Ar[number]>;
61
+ //# sourceMappingURL=array-utils-element-access.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-utils-element-access.d.mts","sourceRoot":"","sources":["../../../src/array/impl/array-utils-element-access.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAQ,MAAM,4BAA4B,CAAC;AAE5D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,OAAO,EAAE,EACpD,KAAK,EAAE,EAAE,EACT,KAAK,EAAE,yBAAyB,CAAC,EAAE,CAAC,GACnC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAIxB,wBAAgB,EAAE,CAChB,KAAK,EAAE,QAAQ,CAAC,kBAAkB,GACjC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AAyB3C;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,EAAE,SAAS,SAAS,OAAO,EAAE,EACtD,OAAO,EAAE,KACR,EAAE,SAAS,SAAS,EAAE,GACrB,QAAQ,CAAC,IAAI,GACb,EAAE,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,GACzC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAChB,EAAE,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAC/B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAEiD,CAAC;AAE7E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,EAAE,SAAS,SAAS,OAAO,EAAE,EACtD,OAAO,EAAE,KACR,EAAE,SAAS,SAAS,EAAE,GACrB,QAAQ,CAAC,IAAI,GACb,EAAE,SAAS,SAAS,CAAC,GAAG,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC,GACzC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAChB,EAAE,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAC/B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAEkD,CAAC;AAE9E;;;;GAIG;AACH,eAAO,MAAM,KAAK,SA7CS,EAAE,SAAS,SAAS,OAAO,EAAE,SAC/C,EAAE,KACR,EAAE,SAAS,SAAS,EAAE,GACrB,QAAQ,CAAC,IAAI,GACb,EAAE,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,GACzC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAChB,EAAE,SAAS,aAAa,CAAC,MAAM,CAAC,CAAC,GAC/B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAChB,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAqCF,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { Optional } from '../../functional/optional.mjs';
2
+ import { pipe } from '../../functional/pipe.mjs';
3
+ import '../../functional/result.mjs';
4
+
5
+ function at(...args) {
6
+ switch (args.length) {
7
+ case 2: {
8
+ const [array, index] = args;
9
+ return pipe(index < 0 ? array.length + index : index).map((normalizedIndex) => normalizedIndex < 0 || normalizedIndex >= array.length
10
+ ? Optional.none
11
+ : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
12
+ Optional.some(array[normalizedIndex])).value;
13
+ }
14
+ case 1: {
15
+ const [index] = args;
16
+ return (array) => at(array, index);
17
+ }
18
+ }
19
+ }
20
+ /**
21
+ * Returns the first element of an array as an Optional.
22
+ *
23
+ * @example
24
+ *
25
+ * ```ts
26
+ * const users = [{ id: 1 }, { id: 2 }];
27
+ * const empty: { id: number }[] = [];
28
+ *
29
+ * const first = Arr.head(users);
30
+ * const none = Arr.head(empty);
31
+ *
32
+ * assert.deepStrictEqual(first, Optional.some({ id: 1 }));
33
+ * assert.deepStrictEqual(none, Optional.none);
34
+ * ```
35
+ */
36
+ const head = (array) =>
37
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
38
+ (array.length === 0 ? Optional.none : Optional.some(array.at(0)));
39
+ /**
40
+ * Returns the last element of an array as an Optional.
41
+ *
42
+ * @example
43
+ *
44
+ * ```ts
45
+ * const queue = ['first', 'second'];
46
+ * const emptyQueue: string[] = [];
47
+ *
48
+ * const lastValue = Arr.last(queue);
49
+ * const none = Arr.last(emptyQueue);
50
+ *
51
+ * assert.deepStrictEqual(lastValue, Optional.some('second'));
52
+ * assert.deepStrictEqual(none, Optional.none);
53
+ * ```
54
+ */
55
+ const last = (array) =>
56
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
57
+ (array.length === 0 ? Optional.none : Optional.some(array.at(-1)));
58
+ /**
59
+ * Alias for `head`.
60
+ *
61
+ * @see {@link head}
62
+ */
63
+ const first = head;
64
+
65
+ export { at, first, head, last };
66
+ //# sourceMappingURL=array-utils-element-access.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-utils-element-access.mjs","sources":["../../../src/array/impl/array-utils-element-access.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AA8BM,SAAU,EAAE,CAChB,GAAG,IAE8C,EAAA;AAEjD,IAAA,QAAQ,IAAI,CAAC,MAAM;QACjB,KAAK,CAAC,EAAE;AACN,YAAA,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI;AAC3B,YAAA,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CACvD,CAAC,eAAe,KACd,eAAe,GAAG,CAAC,IAAI,eAAe,IAAI,KAAK,CAAC;kBAC5C,QAAQ,CAAC;AACX;oBACE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAE,CAAC,CAC7C,CAAC,KAAK;QACT;QACA,KAAK,CAAC,EAAE;AACN,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI;YACpB,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;QACpC;;AAEJ;AAEA;;;;;;;;;;;;;;;AAeG;AACI,MAAM,IAAI,GAAG,CAClB,KAAS;AAQT;AACA,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAElE;;;;;;;;;;;;;;;AAeG;AACI,MAAM,IAAI,GAAG,CAClB,KAAS;AAQT;AACA,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEnE;;;;AAIG;AACI,MAAM,KAAK,GAAG;;;;"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Returns an iterator of `[index, value]` pairs for an array.
3
+ *
4
+ * @example
5
+ *
6
+ * ```ts
7
+ * const tags = ['alpha', 'beta', 'gamma'] as const;
8
+ *
9
+ * const entryList = Array.from(
10
+ * Arr.entries(tags),
11
+ * ([index, tag]) => [Number(index), tag] as const,
12
+ * );
13
+ *
14
+ * assert.deepStrictEqual(
15
+ * entryList,
16
+ * Array.from([
17
+ * [0, 'alpha'],
18
+ * [1, 'beta'],
19
+ * [2, 'gamma'],
20
+ * ]),
21
+ * );
22
+ * ```
23
+ */
24
+ export declare const entries: <E>(array: readonly E[]) => ArrayIterator<readonly [SizeType.Arr, E]>;
25
+ /**
26
+ * Returns an iterator of values for an array.
27
+ *
28
+ * @example
29
+ *
30
+ * ```ts
31
+ * const players = ['Ada', 'Grace', 'Alan'];
32
+ *
33
+ * const valueList = Array.from(Arr.values(players));
34
+ *
35
+ * assert.deepStrictEqual(valueList, players);
36
+ * ```
37
+ */
38
+ export declare const values: <E>(array: readonly E[]) => ArrayIterator<E>;
39
+ /**
40
+ * Returns an iterator of indices for an array.
41
+ *
42
+ * @example
43
+ *
44
+ * ```ts
45
+ * const items = ['zero', 'one', 'two'] as const;
46
+ *
47
+ * const indexList = Array.from(Arr.indices(items));
48
+ *
49
+ * assert.deepStrictEqual(indexList, [0, 1, 2]);
50
+ * ```
51
+ */
52
+ export declare const indices: <E>(array: readonly E[]) => ArrayIterator<SizeType.Arr>;
53
+ /**
54
+ * Alias for `indices`.
55
+ *
56
+ * @see {@link indices}
57
+ */
58
+ export declare const keys: <E>(array: readonly E[]) => ArrayIterator<SizeType.Arr>;
59
+ //# sourceMappingURL=array-utils-iterators.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-utils-iterators.d.mts","sourceRoot":"","sources":["../../../src/array/impl/array-utils-iterators.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,OAAO,GAAc,CAAC,EACjC,OAAO,SAAS,CAAC,EAAE,KAClB,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAI1C,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM,GAAc,CAAC,EAAE,OAAO,SAAS,CAAC,EAAE,KAAG,aAAa,CAAC,CAAC,CAIxE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,OAAO,GAAc,CAAC,EACjC,OAAO,SAAS,CAAC,EAAE,KAClB,aAAa,CAAC,QAAQ,CAAC,GAAG,CAI5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,IAAI,GAbiB,CAAC,SAC1B,SAAS,CAAC,EAAE,KAClB,aAAa,CAAC,QAAQ,CAAC,GAAG,CAWF,CAAC"}
@@ -0,0 +1,104 @@
1
+ import '../../number/branded-types/finite-number.mjs';
2
+ import '../../number/branded-types/int.mjs';
3
+ import '../../number/branded-types/int16.mjs';
4
+ import '../../number/branded-types/int32.mjs';
5
+ import '../../number/branded-types/non-negative-finite-number.mjs';
6
+ import '../../number/branded-types/non-negative-int16.mjs';
7
+ import '../../number/branded-types/non-negative-int32.mjs';
8
+ import '../../number/branded-types/non-zero-finite-number.mjs';
9
+ import '../../number/branded-types/non-zero-int.mjs';
10
+ import '../../number/branded-types/non-zero-int16.mjs';
11
+ import '../../number/branded-types/non-zero-int32.mjs';
12
+ import '../../number/branded-types/non-zero-safe-int.mjs';
13
+ import '../../number/branded-types/non-zero-uint16.mjs';
14
+ import '../../number/branded-types/non-zero-uint32.mjs';
15
+ import '../../number/branded-types/positive-finite-number.mjs';
16
+ import '../../number/branded-types/positive-int.mjs';
17
+ import '../../number/branded-types/positive-int16.mjs';
18
+ import '../../number/branded-types/positive-int32.mjs';
19
+ import '../../number/branded-types/positive-safe-int.mjs';
20
+ import '../../number/branded-types/positive-uint16.mjs';
21
+ import '../../number/branded-types/positive-uint32.mjs';
22
+ import '../../number/branded-types/safe-int.mjs';
23
+ import '../../number/branded-types/safe-uint.mjs';
24
+ import '../../number/branded-types/uint.mjs';
25
+ import '../../number/branded-types/uint16.mjs';
26
+ import { asUint32 } from '../../number/branded-types/uint32.mjs';
27
+ import '../../number/enum/int8.mjs';
28
+ import '../../number/enum/uint8.mjs';
29
+ import '../../number/num.mjs';
30
+ import '../../number/refined-number-utils.mjs';
31
+
32
+ /**
33
+ * Returns an iterator of `[index, value]` pairs for an array.
34
+ *
35
+ * @example
36
+ *
37
+ * ```ts
38
+ * const tags = ['alpha', 'beta', 'gamma'] as const;
39
+ *
40
+ * const entryList = Array.from(
41
+ * Arr.entries(tags),
42
+ * ([index, tag]) => [Number(index), tag] as const,
43
+ * );
44
+ *
45
+ * assert.deepStrictEqual(
46
+ * entryList,
47
+ * Array.from([
48
+ * [0, 'alpha'],
49
+ * [1, 'beta'],
50
+ * [2, 'gamma'],
51
+ * ]),
52
+ * );
53
+ * ```
54
+ */
55
+ const entries = function* (array) {
56
+ for (const [index, value] of array.entries()) {
57
+ yield [asUint32(index), value];
58
+ }
59
+ };
60
+ /**
61
+ * Returns an iterator of values for an array.
62
+ *
63
+ * @example
64
+ *
65
+ * ```ts
66
+ * const players = ['Ada', 'Grace', 'Alan'];
67
+ *
68
+ * const valueList = Array.from(Arr.values(players));
69
+ *
70
+ * assert.deepStrictEqual(valueList, players);
71
+ * ```
72
+ */
73
+ const values = function* (array) {
74
+ for (const value of array.values()) {
75
+ yield value;
76
+ }
77
+ };
78
+ /**
79
+ * Returns an iterator of indices for an array.
80
+ *
81
+ * @example
82
+ *
83
+ * ```ts
84
+ * const items = ['zero', 'one', 'two'] as const;
85
+ *
86
+ * const indexList = Array.from(Arr.indices(items));
87
+ *
88
+ * assert.deepStrictEqual(indexList, [0, 1, 2]);
89
+ * ```
90
+ */
91
+ const indices = function* (array) {
92
+ for (const key of array.keys()) {
93
+ yield asUint32(key);
94
+ }
95
+ };
96
+ /**
97
+ * Alias for `indices`.
98
+ *
99
+ * @see {@link indices}
100
+ */
101
+ const keys = indices;
102
+
103
+ export { entries, indices, keys, values };
104
+ //# sourceMappingURL=array-utils-iterators.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-utils-iterators.mjs","sources":["../../../src/array/impl/array-utils-iterators.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACI,MAAM,OAAO,GAAG,WACrB,KAAmB,EAAA;AAEnB,IAAA,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE;QAC5C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAU;IACzC;AACF;AAEA;;;;;;;;;;;;AAYG;AACI,MAAM,MAAM,GAAG,WAAc,KAAmB,EAAA;IACrD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE;AAClC,QAAA,MAAM,KAAK;IACb;AACF;AAEA;;;;;;;;;;;;AAYG;AACI,MAAM,OAAO,GAAG,WACrB,KAAmB,EAAA;IAEnB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAC9B,QAAA,MAAM,QAAQ,CAAC,GAAG,CAAC;IACrB;AACF;AAEA;;;;AAIG;AACI,MAAM,IAAI,GAAG;;;;"}