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
@@ -0,0 +1,434 @@
1
+ import { asPositiveUint32 } from '../../number/index.mjs';
2
+ import { castMutable } from '../../others/index.mjs';
3
+ import { copy, create } from './array-utils-creation.mjs';
4
+
5
+ /**
6
+ * Returns a new array with an element at the specified index replaced.
7
+ *
8
+ * @example
9
+ *
10
+ * ```ts
11
+ * const scores: number[] = [10, 20, 30];
12
+ *
13
+ * const updated = Arr.set(scores, 1, 25);
14
+ *
15
+ * assert.deepStrictEqual(updated, [10, 25, 30]);
16
+ * ```
17
+ */
18
+ export function set<const Ar extends readonly unknown[], const V = Ar[number]>(
19
+ array: Ar,
20
+ index: ArgArrayIndex<Ar>,
21
+ newValue: V,
22
+ ): IsFixedLengthList<Ar> extends true
23
+ ? Readonly<{ [K in keyof Ar]: Ar[K] | V }>
24
+ : Ar extends NonEmptyArray<unknown>
25
+ ? NonEmptyArray<Ar[number] | V>
26
+ : readonly (Ar[number] | V)[];
27
+
28
+ // curried version
29
+ export function set<const V>(
30
+ index: SizeType.ArgArr,
31
+ newValue: V,
32
+ ): <const Ar extends readonly unknown[]>(
33
+ array: Ar,
34
+ ) => IsFixedLengthList<Ar> extends true
35
+ ? Readonly<{ [K in keyof Ar]: Ar[K] | V }>
36
+ : Ar extends NonEmptyArray<unknown>
37
+ ? NonEmptyArray<Ar[number] | V>
38
+ : readonly (Ar[number] | V)[];
39
+
40
+ export function set<E, const V = E>(
41
+ ...args:
42
+ | readonly [array: readonly E[], index: SizeType.ArgArr, newValue: V]
43
+ | readonly [index: SizeType.ArgArr, newValue: V]
44
+ ): readonly (E | V)[] | ((array: readonly E[]) => readonly (E | V)[]) {
45
+ switch (args.length) {
46
+ case 3: {
47
+ const [array, index, newValue] = args;
48
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
49
+ return (array as (E | V)[]).with(index, newValue);
50
+ }
51
+ case 2: {
52
+ const [index, newValue] = args;
53
+ return (array) => set(array, index, newValue);
54
+ }
55
+ }
56
+ }
57
+
58
+ /**
59
+ * Returns a new array with an element at the specified index updated by applying a function.
60
+ *
61
+ * @example
62
+ *
63
+ * ```ts
64
+ * const temperatures: number[] = [20, 21, 22];
65
+ *
66
+ * const increased = Arr.toUpdated(temperatures, 1, (value) => value + 5);
67
+ * const incrementLast = Arr.toUpdated<number>(
68
+ * 2,
69
+ * (value) => value + 1,
70
+ * )(temperatures);
71
+ *
72
+ * assert.deepStrictEqual(increased, [20, 26, 22]);
73
+ * assert.deepStrictEqual(incrementLast, [20, 21, 23]);
74
+ * ```
75
+ */
76
+ export function toUpdated<
77
+ const Ar extends readonly unknown[],
78
+ const V = Ar[number],
79
+ >(
80
+ array: Ar,
81
+ index: ArgArrayIndex<Ar>,
82
+ updater: (prev: Ar[number]) => V,
83
+ ): IsFixedLengthList<Ar> extends true
84
+ ? Readonly<{ [K in keyof Ar]: Ar[K] | V }>
85
+ : Ar extends NonEmptyArray<unknown>
86
+ ? NonEmptyArray<Ar[number] | V>
87
+ : readonly (Ar[number] | V)[];
88
+
89
+ // curried version
90
+ export function toUpdated<E, const V = E>(
91
+ index: SizeType.ArgArr,
92
+ updater: (prev: E) => V,
93
+ ): <const Ar extends readonly E[]>(
94
+ array: Ar,
95
+ ) => IsFixedLengthList<Ar> extends true
96
+ ? Readonly<{ [K in keyof Ar]: Ar[K] | V }>
97
+ : Ar extends NonEmptyArray<unknown>
98
+ ? NonEmptyArray<Ar[number] | V>
99
+ : readonly (Ar[number] | V)[];
100
+
101
+ export function toUpdated<E, V = E>(
102
+ ...args:
103
+ | readonly [
104
+ array: readonly E[],
105
+ index: SizeType.ArgArr,
106
+ updater: (prev: E) => V,
107
+ ]
108
+ | readonly [index: SizeType.ArgArr, updater: (prev: E) => V]
109
+ ): readonly (E | V)[] | ((array: readonly E[]) => readonly (E | V)[]) {
110
+ switch (args.length) {
111
+ case 3: {
112
+ const [array, index, updater] = args;
113
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion, total-functions/no-unsafe-type-assertion
114
+ return (array as (E | V)[]).with(index, updater(array[index]!));
115
+ }
116
+ case 2: {
117
+ const [index, updater] = args;
118
+ return (array) => toUpdated(array, index, updater);
119
+ }
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Returns a new array with a value inserted at the specified index.
125
+ *
126
+ * @example
127
+ *
128
+ * ```ts
129
+ * const numbers = [1, 2, 4] as const;
130
+ *
131
+ * const withThree = Arr.toInserted(numbers, 2, 3);
132
+ * const appendFive = Arr.toInserted(3, 5)(numbers);
133
+ *
134
+ * assert.deepStrictEqual(withThree, [1, 2, 3, 4]);
135
+ * assert.deepStrictEqual(appendFive, [1, 2, 4, 5]);
136
+ * ```
137
+ */
138
+ export function toInserted<
139
+ const Ar extends readonly unknown[],
140
+ const V = Ar[number],
141
+ >(
142
+ array: Ar,
143
+ index: ArgArrayIndexWithNegative<Ar>,
144
+ newValue: V,
145
+ ): IsFixedLengthList<Ar> extends true
146
+ ? ArrayOfLength<CastToNumber<Increment<Ar['length']>>, Ar[number] | V>
147
+ : NonEmptyArray<Ar[number] | V>;
148
+
149
+ // curried version
150
+ export function toInserted<const V>(
151
+ index: SizeType.ArgArrWithNegative,
152
+ newValue: V,
153
+ ): <const Ar extends readonly unknown[]>(
154
+ array: Ar,
155
+ ) => IsFixedLengthList<Ar> extends true
156
+ ? ArrayOfLength<CastToNumber<Increment<Ar['length']>>, Ar[number] | V>
157
+ : NonEmptyArray<Ar[number] | V>;
158
+
159
+ export function toInserted<E, const V = E>(
160
+ ...args:
161
+ | readonly [
162
+ array: readonly E[],
163
+ index: SizeType.ArgArrWithNegative,
164
+ newValue: V,
165
+ ]
166
+ | readonly [index: SizeType.ArgArrWithNegative, newValue: V]
167
+ ): NonEmptyArray<E | V> | ((array: readonly E[]) => NonEmptyArray<E | V>) {
168
+ switch (args.length) {
169
+ case 3: {
170
+ const [array, index, newValue] = args;
171
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
172
+ return (array as readonly (E | V)[]).toSpliced(
173
+ index,
174
+ 0,
175
+ newValue,
176
+ ) as unknown as NonEmptyArray<E | V>;
177
+ }
178
+ case 2: {
179
+ const [index, newValue] = args;
180
+ return (array) => toInserted(array, index, newValue);
181
+ }
182
+ }
183
+ }
184
+
185
+ type CastToNumber<T> = T extends number ? T : never;
186
+
187
+ /**
188
+ * Returns a new array with the element at the specified index removed.
189
+ *
190
+ * @example
191
+ *
192
+ * ```ts
193
+ * const letters = ['a', 'b', 'c', 'd'] as const;
194
+ *
195
+ * const withoutSecond = Arr.toRemoved(letters, 1);
196
+ * const withoutFirstCurried = Arr.toRemoved(0)(letters);
197
+ *
198
+ * assert.deepStrictEqual(withoutSecond, ['a', 'c', 'd']);
199
+ * assert.deepStrictEqual(withoutFirstCurried, ['b', 'c', 'd']);
200
+ * ```
201
+ */
202
+ export function toRemoved<const Ar extends readonly unknown[]>(
203
+ array: Ar,
204
+ index: ArgArrayIndexWithNegative<Ar>,
205
+ ): readonly Ar[number][];
206
+
207
+ export function toRemoved(
208
+ index: SizeType.ArgArrWithNegative,
209
+ ): <E>(array: readonly E[]) => readonly E[];
210
+
211
+ export function toRemoved<E>(
212
+ ...args:
213
+ | readonly [array: readonly E[], index: SizeType.ArgArrWithNegative]
214
+ | readonly [index: SizeType.ArgArrWithNegative]
215
+ ): readonly E[] | ((array: readonly E[]) => readonly E[]) {
216
+ switch (args.length) {
217
+ case 2: {
218
+ const [array, index] = args;
219
+ return array.toSpliced(index, 1);
220
+ }
221
+ case 1: {
222
+ const [index] = args;
223
+ return (array) => toRemoved(array, index);
224
+ }
225
+ }
226
+ }
227
+
228
+ /**
229
+ * Returns a new array with a value appended to the end.
230
+ *
231
+ * @example
232
+ *
233
+ * ```ts
234
+ * const base = [1, 2] as const;
235
+ *
236
+ * const appended = Arr.toPushed(base, 3);
237
+ * const appendedCurried = Arr.toPushed(4)(base);
238
+ *
239
+ * assert.deepStrictEqual(appended, [1, 2, 3]);
240
+ * assert.deepStrictEqual(appendedCurried, [1, 2, 4]);
241
+ * ```
242
+ */
243
+ export function toPushed<const Ar extends readonly unknown[], const V>(
244
+ array: Ar,
245
+ newValue: V,
246
+ ): readonly [...Ar, V];
247
+
248
+ export function toPushed<const V>(
249
+ newValue: V,
250
+ ): <const Ar extends readonly unknown[]>(array: Ar) => readonly [...Ar, V];
251
+
252
+ export function toPushed<const Ar extends readonly unknown[], const V>(
253
+ ...args: readonly [array: Ar, newValue: V] | readonly [newValue: V]
254
+ ): readonly [...Ar, V] | ((array: Ar) => readonly [...Ar, V]) {
255
+ switch (args.length) {
256
+ case 2: {
257
+ const [array, newValue] = args;
258
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
259
+ return array.toSpliced(array.length, 0, newValue) as unknown as readonly [
260
+ ...Ar,
261
+ V,
262
+ ];
263
+ }
264
+ case 1: {
265
+ const [newValue] = args;
266
+ return (array) => toPushed(array, newValue);
267
+ }
268
+ }
269
+ }
270
+
271
+ /**
272
+ * Returns a new array with a value prepended to the beginning.
273
+ *
274
+ * @example
275
+ *
276
+ * ```ts
277
+ * const base = [2, 3] as const;
278
+ *
279
+ * const prefixed = Arr.toUnshifted(base, 1);
280
+ * const prefixedCurried = Arr.toUnshifted(0)(base);
281
+ *
282
+ * assert.deepStrictEqual(prefixed, [1, 2, 3]);
283
+ * assert.deepStrictEqual(prefixedCurried, [0, 2, 3]);
284
+ * ```
285
+ */
286
+ export function toUnshifted<const Ar extends readonly unknown[], const V>(
287
+ array: Ar,
288
+ newValue: V,
289
+ ): readonly [V, ...Ar];
290
+
291
+ export function toUnshifted<const V>(
292
+ newValue: V,
293
+ ): <const Ar extends readonly unknown[]>(array: Ar) => readonly [V, ...Ar];
294
+
295
+ export function toUnshifted<Ar extends readonly unknown[], const V>(
296
+ ...args: readonly [array: Ar, newValue: V] | readonly [newValue: V]
297
+ ): readonly [V, ...Ar] | ((array: Ar) => readonly [V, ...Ar]) {
298
+ switch (args.length) {
299
+ case 2: {
300
+ const [array, newValue] = args;
301
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
302
+ return array.toSpliced(0, 0, newValue) as unknown as readonly [V, ...Ar];
303
+ }
304
+ case 1: {
305
+ const [newValue] = args;
306
+ return (array) => toUnshifted(array, newValue);
307
+ }
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Returns a new array with all elements replaced by the specified value.
313
+ *
314
+ * @example
315
+ *
316
+ * ```ts
317
+ * const base = [1, 2, 3];
318
+ *
319
+ * const filled = Arr.toFilled(base, 0);
320
+ * const filledCurried = Arr.toFilled('x')(base);
321
+ *
322
+ * assert.deepStrictEqual(filled, [0, 0, 0]);
323
+ * assert.deepStrictEqual(filledCurried, ['x', 'x', 'x']);
324
+ * ```
325
+ */
326
+ export function toFilled<const Ar extends readonly unknown[], const V>(
327
+ array: Ar,
328
+ value: V,
329
+ ): IsFixedLengthList<Ar> extends true
330
+ ? ArrayOfLength<Ar['length'], V>
331
+ : Ar extends NonEmptyArray<unknown>
332
+ ? NonEmptyArray<V>
333
+ : readonly V[];
334
+
335
+ // curried version
336
+ export function toFilled<const V>(
337
+ value: V,
338
+ ): <const Ar extends readonly unknown[]>(
339
+ array: Ar,
340
+ ) => IsFixedLengthList<Ar> extends true
341
+ ? ArrayOfLength<Ar['length'], V>
342
+ : Ar extends NonEmptyArray<unknown>
343
+ ? NonEmptyArray<V>
344
+ : readonly V[];
345
+
346
+ export function toFilled<E>(
347
+ ...args: readonly [array: readonly E[], value: E] | readonly [value: E]
348
+ ): readonly E[] | ((array: readonly E[]) => readonly E[]) {
349
+ switch (args.length) {
350
+ case 2: {
351
+ const [array, value] = args;
352
+ return create(asPositiveUint32(array.length), value);
353
+ }
354
+ case 1: {
355
+ const [value] = args;
356
+ return (array) => toFilled(array, value);
357
+ }
358
+ }
359
+ }
360
+
361
+ /**
362
+ * Returns a new array with elements in the specified range replaced by the specified value.
363
+ *
364
+ * @example
365
+ *
366
+ * ```ts
367
+ * const base = [0, 1, 2, 3, 4];
368
+ *
369
+ * const filledMiddle = Arr.toRangeFilled(base, 9, [1, 4]);
370
+ * const filledPrefix = Arr.toRangeFilled(8, [0, 2])(base);
371
+ *
372
+ * assert.deepStrictEqual(filledMiddle, [0, 9, 9, 9, 4]);
373
+ * assert.deepStrictEqual(filledPrefix, [8, 8, 2, 3, 4]);
374
+ * ```
375
+ */
376
+ export function toRangeFilled<const Ar extends readonly unknown[], const V>(
377
+ array: Ar,
378
+ value: V,
379
+ fillRange: readonly [
380
+ start: ArgArrayIndexWithNegative<Ar>,
381
+ end: ArgArrayIndexWithNegative<Ar>,
382
+ ],
383
+ ): IsFixedLengthList<Ar> extends true
384
+ ? ArrayOfLength<Ar['length'], V | Ar[number]>
385
+ : Ar extends NonEmptyArray<unknown>
386
+ ? NonEmptyArray<V | Ar[number]>
387
+ : readonly (V | Ar[number])[];
388
+
389
+ // curried version
390
+ export function toRangeFilled<const V>(
391
+ value: V,
392
+ fillRange: readonly [
393
+ start: SizeType.ArgArrWithNegative,
394
+ end: SizeType.ArgArrWithNegative,
395
+ ],
396
+ ): <const Ar extends readonly unknown[]>(
397
+ array: Ar,
398
+ ) => IsFixedLengthList<Ar> extends true
399
+ ? ArrayOfLength<Ar['length'], V | Ar[number]>
400
+ : Ar extends NonEmptyArray<unknown>
401
+ ? NonEmptyArray<V | Ar[number]>
402
+ : readonly (V | Ar[number])[];
403
+
404
+ export function toRangeFilled<E, const V>(
405
+ ...args:
406
+ | readonly [
407
+ array: readonly E[],
408
+ value: V,
409
+ fillRange: readonly [
410
+ start: SizeType.ArgArrWithNegative,
411
+ end: SizeType.ArgArrWithNegative,
412
+ ],
413
+ ]
414
+ | readonly [
415
+ value: V,
416
+ fillRange: readonly [
417
+ start: SizeType.ArgArrWithNegative,
418
+ end: SizeType.ArgArrWithNegative,
419
+ ],
420
+ ]
421
+ ): readonly (E | V)[] | ((array: readonly E[]) => readonly (E | V)[]) {
422
+ switch (args.length) {
423
+ case 3: {
424
+ const [array, value, [start, end]] = args;
425
+ const mut_cp: (E | V)[] = castMutable(copy(array));
426
+ mut_cp.fill(value, start, end);
427
+ return mut_cp;
428
+ }
429
+ case 2: {
430
+ const [value, fillRange] = args;
431
+ return (array) => toRangeFilled(array, value, fillRange);
432
+ }
433
+ }
434
+ }
@@ -1,11 +1,20 @@
1
- import { expectType } from '../expect-type.mjs';
2
- import { asUint32 } from '../number/index.mjs';
3
- import { Arr } from './array-utils.mjs';
1
+ import { expectType } from '../../expect-type.mjs';
2
+ import { asUint32 } from '../../number/index.mjs';
3
+ import {
4
+ set,
5
+ toFilled,
6
+ toInserted,
7
+ toPushed,
8
+ toRangeFilled,
9
+ toRemoved,
10
+ toUnshifted,
11
+ toUpdated,
12
+ } from './array-utils-modification.mjs';
4
13
 
5
14
  describe('Arr modifications', () => {
6
15
  describe('toUpdated', () => {
7
16
  const xs = [1, 2, 3] as const;
8
- const result = Arr.toUpdated(xs, 1, (x) => x + 2);
17
+ const result = toUpdated(xs, 1, (x) => x + 2);
9
18
 
10
19
  expectType<typeof result, ArrayOfLength<3, number>>('=');
11
20
 
@@ -18,7 +27,7 @@ describe('Arr modifications', () => {
18
27
  const xs = [1, 2, 3] as const;
19
28
 
20
29
  test('case 1', () => {
21
- const result = Arr.toInserted(xs, 1, 5);
30
+ const result = toInserted(xs, 1, 5);
22
31
 
23
32
  expectType<typeof result, ArrayOfLength<4, 1 | 2 | 3 | 5>>('=');
24
33
 
@@ -26,7 +35,7 @@ describe('Arr modifications', () => {
26
35
  });
27
36
 
28
37
  test('case 2 (insert head)', () => {
29
- const result = Arr.toInserted(xs, 0, 5);
38
+ const result = toInserted(xs, 0, 5);
30
39
 
31
40
  expectType<typeof result, ArrayOfLength<4, 1 | 2 | 3 | 5>>('=');
32
41
 
@@ -34,7 +43,11 @@ describe('Arr modifications', () => {
34
43
  });
35
44
 
36
45
  test('case 3 (insert tail)', () => {
37
- const result = Arr.toInserted(['a', 'b', 'c'], asUint32(999), 5);
46
+ const result = toInserted(
47
+ ['a', 'b', 'c'] as readonly string[],
48
+ asUint32(999),
49
+ 5,
50
+ );
38
51
 
39
52
  expectType<typeof result, NonEmptyArray<string | 5>>('=');
40
53
 
@@ -45,7 +58,7 @@ describe('Arr modifications', () => {
45
58
  describe('toRemoved', () => {
46
59
  test('case 1', () => {
47
60
  const xs = [1, 2, 3] as const;
48
- const result = Arr.toRemoved(xs, 1);
61
+ const result = toRemoved(xs, 1);
49
62
 
50
63
  expectType<typeof result, readonly (1 | 2 | 3)[]>('=');
51
64
 
@@ -54,7 +67,7 @@ describe('Arr modifications', () => {
54
67
 
55
68
  test('case 2 (remove head)', () => {
56
69
  const xs = [1, 2, 3] as const;
57
- const result = Arr.toRemoved(xs, 0);
70
+ const result = toRemoved(xs, 0);
58
71
 
59
72
  expectType<typeof result, readonly (1 | 2 | 3)[]>('=');
60
73
 
@@ -63,7 +76,7 @@ describe('Arr modifications', () => {
63
76
 
64
77
  test('case 3 (remove tail)', () => {
65
78
  const xs = [1, 2, 3] as const;
66
- const result = Arr.toRemoved(xs, 2);
79
+ const result = toRemoved(xs, 2);
67
80
 
68
81
  expectType<typeof result, readonly (1 | 2 | 3)[]>('=');
69
82
 
@@ -72,7 +85,7 @@ describe('Arr modifications', () => {
72
85
 
73
86
  test('case 4 (number[])', () => {
74
87
  const xs: number[] = [1, 2, 3];
75
- const result = Arr.toRemoved(xs, 5);
88
+ const result = toRemoved(xs, 5);
76
89
 
77
90
  expectType<typeof result, readonly number[]>('=');
78
91
 
@@ -83,7 +96,7 @@ describe('Arr modifications', () => {
83
96
  describe('toPushed', () => {
84
97
  test('case 1', () => {
85
98
  const xs = [1, 2, 3] as const;
86
- const result = Arr.toPushed(xs, 4 as const);
99
+ const result = toPushed(xs, 4 as const);
87
100
 
88
101
  expectType<typeof result, readonly [1, 2, 3, 4]>('=');
89
102
 
@@ -92,7 +105,7 @@ describe('Arr modifications', () => {
92
105
 
93
106
  test('case 2', () => {
94
107
  const xs: number[] = [1, 2, 3];
95
- const result = Arr.toPushed(xs, 4 as const);
108
+ const result = toPushed(xs, 4 as const);
96
109
 
97
110
  expectType<typeof result, readonly [...number[], 4]>('=');
98
111
 
@@ -104,7 +117,7 @@ describe('Arr modifications', () => {
104
117
  test('case 1', () => {
105
118
  const xs = [1, 2, 3] as const;
106
119
 
107
- const result = Arr.toUnshifted(xs, 4 as const);
120
+ const result = toUnshifted(xs, 4 as const);
108
121
 
109
122
  expectType<typeof result, readonly [4, 1, 2, 3]>('=');
110
123
 
@@ -114,7 +127,7 @@ describe('Arr modifications', () => {
114
127
  test('case 2', () => {
115
128
  const xs: number[] = [1, 2, 3];
116
129
 
117
- const result = Arr.toUnshifted(xs, 4 as const);
130
+ const result = toUnshifted(xs, 4 as const);
118
131
 
119
132
  expectType<typeof result, readonly [4, ...number[]]>('=');
120
133
 
@@ -125,13 +138,13 @@ describe('Arr modifications', () => {
125
138
  describe('toFilled', () => {
126
139
  test('should fill entire array with value', () => {
127
140
  const arr = [1, 2, 3, 4, 5];
128
- const result = Arr.toFilled(arr, 0);
141
+ const result = toFilled(arr, 0);
129
142
 
130
143
  expect(result).toStrictEqual([0, 0, 0, 0, 0]);
131
144
  });
132
145
 
133
146
  test('should work with curried version', () => {
134
- const fillWithZero = Arr.toFilled(0);
147
+ const fillWithZero = toFilled(0);
135
148
  const arr = [1, 2, 3];
136
149
  const result = fillWithZero(arr);
137
150
 
@@ -142,35 +155,35 @@ describe('Arr modifications', () => {
142
155
  describe('toRangeFilled', () => {
143
156
  test('should fill array with range', () => {
144
157
  const arr = [1, 2, 3, 4, 5];
145
- const result = Arr.toRangeFilled(arr, 0, [1, 4]);
158
+ const result = toRangeFilled(arr, 0, [1, 4]);
146
159
 
147
160
  expect(result).toStrictEqual([1, 0, 0, 0, 5]);
148
161
  });
149
162
 
150
163
  test('should fill with range starting from 0', () => {
151
164
  const arr = [1, 2, 3, 4, 5];
152
- const result = Arr.toRangeFilled(arr, 9, [0, 3]);
165
+ const result = toRangeFilled(arr, 9, [0, 3]);
153
166
 
154
167
  expect(result).toStrictEqual([9, 9, 9, 4, 5]);
155
168
  });
156
169
 
157
170
  test('should handle empty range', () => {
158
171
  const arr = [1, 2, 3];
159
- const result = Arr.toRangeFilled(arr, 0, [2, 2]);
172
+ const result = toRangeFilled(arr, 0, [2, 2]);
160
173
 
161
174
  expect(result).toStrictEqual([1, 2, 3]);
162
175
  });
163
176
 
164
177
  test('should clamp range to array bounds', () => {
165
178
  const arr = [1, 2, 3];
166
- const result = Arr.toRangeFilled(arr, 0, [1, 10]);
179
+ const result = toRangeFilled(arr, 0, [1, 10]);
167
180
 
168
181
  expect(result).toStrictEqual([1, 0, 0]);
169
182
  });
170
183
 
171
184
  test('should handle negative start (clamped to 0)', () => {
172
185
  const arr = [1, 2, 3];
173
- const result = Arr.toRangeFilled(arr, 9, [-5, 2]);
186
+ const result = toRangeFilled(arr, 9, [-5, 2]);
174
187
 
175
188
  expect(result).toStrictEqual([9, 9, 3]);
176
189
  });
@@ -179,19 +192,19 @@ describe('Arr modifications', () => {
179
192
  const arr = [1, 2, 3];
180
193
 
181
194
  // @ts-expect-error start must be an integer
182
- expect(Arr.toRangeFilled(arr, 0, [1.5, 3])).toStrictEqual([1, 0, 0]);
195
+ expect(toRangeFilled(arr, 0, [1.5, 3])).toStrictEqual([1, 0, 0]);
183
196
  });
184
197
 
185
198
  test('A non-integer ending value should result in a type error', () => {
186
199
  const arr = [1, 2, 3];
187
200
 
188
201
  // @ts-expect-error end must be an integer
189
- expect(Arr.toRangeFilled(arr, 0, [1, 2.5])).toStrictEqual([1, 0, 3]);
202
+ expect(toRangeFilled(arr, 0, [1, 2.5])).toStrictEqual([1, 0, 3]);
190
203
  });
191
204
  });
192
205
 
193
206
  describe('set', () => {
194
- const result = Arr.set([1, 2, 3], 1, 4);
207
+ const result = set([1, 2, 3], 1, 4);
195
208
 
196
209
  expectType<typeof result, readonly [1 | 4, 2 | 4, 3 | 4]>('=');
197
210
 
@@ -201,7 +214,7 @@ describe('Arr modifications', () => {
201
214
 
202
215
  test('should work with different value types', () => {
203
216
  const nums = [1, 2, 3] as const;
204
- const withString = Arr.set(nums, 1, 'two');
217
+ const withString = set(nums, 1, 'two');
205
218
  expectType<typeof withString, readonly [1 | 'two', 2 | 'two', 3 | 'two']>(
206
219
  '=',
207
220
  );
@@ -210,13 +223,13 @@ describe('Arr modifications', () => {
210
223
 
211
224
  test('should work at index 0', () => {
212
225
  const tuple = ['a', 'b', 'c'] as const;
213
- const updated = Arr.set(tuple, 0, 'A');
226
+ const updated = set(tuple, 0, 'A');
214
227
  expect(updated).toStrictEqual(['A', 'b', 'c']);
215
228
  });
216
229
 
217
230
  test('should work at last index', () => {
218
231
  const tuple = ['a', 'b', 'c'] as const;
219
- const updated = Arr.set(tuple, 2, 'C');
232
+ const updated = set(tuple, 2, 'C');
220
233
  expect(updated).toStrictEqual(['a', 'b', 'C']);
221
234
  });
222
235
  });