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
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
@@ -132,7 +136,7 @@ Here are some examples of how to use utilities from `ts-data-forge`:
132
136
 
133
137
  The `expectType` utility allows you to make assertions about types at compile time. This is useful for ensuring type correctness in complex type manipulations or when refactoring.
134
138
 
135
- ```typescript
139
+ ```tsx
136
140
  import { expectType } from 'ts-data-forge';
137
141
 
138
142
  type User = { id: number; name: string };
@@ -158,7 +162,7 @@ expectType<User, any>('!='); // Error: Comparisons with `any` are also strictly
158
162
 
159
163
  Handle nullable values and error-prone operations safely.
160
164
 
161
- ```typescript
165
+ ```tsx
162
166
  import { match, Optional, pipe, Result } from 'ts-data-forge';
163
167
 
164
168
  // Optional for nullable values
@@ -212,7 +216,7 @@ assert(processResult(Result.err('Failed')) === 'Error: Failed');
212
216
 
213
217
  The `Num` object provides safe and convenient functions for numerical operations.
214
218
 
215
- ```typescript
219
+ ```tsx
216
220
  import { Num } from 'ts-data-forge';
217
221
 
218
222
  // Basic conversions
@@ -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
@@ -252,7 +256,7 @@ if (Num.isNonZero(value)) {
252
256
 
253
257
  `ts-data-forge` provides branded number types that enforce specific constraints at the type level.
254
258
 
255
- ```typescript
259
+ ```tsx
256
260
  import {
257
261
  asFiniteNumber,
258
262
  asInt,
@@ -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,15 +310,15 @@ 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`
314
318
 
315
319
  The `Arr` object provides a rich set of functions for array manipulation.
316
320
 
317
- ```typescript
321
+ ```tsx
318
322
  import { Arr, expectType, Optional } from 'ts-data-forge';
319
323
 
320
324
  const numbers: readonly number[] = [1, 2, 3, 4, 5, 2, 3];
@@ -369,7 +373,7 @@ if (Optional.isSome(oldestPerson)) {
369
373
 
370
374
  Type-safe, immutable data structures.
371
375
 
372
- ```typescript
376
+ ```tsx
373
377
  import { Arr, IMap, ISet, Optional } from 'ts-data-forge';
374
378
 
375
379
  // IMap usage - immutable operations
@@ -415,7 +419,7 @@ assert(setWithItems.size === 2);
415
419
 
416
420
  Safe type narrowing with comprehensive type guards.
417
421
 
418
- ```typescript
422
+ ```tsx
419
423
  import { hasKey, isNonNullObject, isRecord } from 'ts-data-forge';
420
424
 
421
425
  const processData = (data: unknown): string | undefined => {
@@ -448,7 +452,7 @@ assert(processData('not an object') === undefined);
448
452
 
449
453
  Generate ranges for iteration and array creation.
450
454
 
451
- ```typescript
455
+ ```tsx
452
456
  import { range } from 'ts-data-forge';
453
457
 
454
458
  // Traditional for loop using range
@@ -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":"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"}
@@ -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"}