ts-data-forge 14.6.1 → 14.6.2

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 (393) hide show
  1. package/dist/array/impl/array-utils-creation.mjs +126 -26
  2. package/dist/array/impl/array-utils-creation.mjs.map +1 -1
  3. package/dist/array/impl/array-utils-element-access.mjs +63 -30
  4. package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
  5. package/dist/array/impl/array-utils-iterators.mjs +69 -53
  6. package/dist/array/impl/array-utils-iterators.mjs.map +1 -1
  7. package/dist/array/impl/array-utils-length-bounded-array-cast.mjs +109 -73
  8. package/dist/array/impl/array-utils-length-bounded-array-cast.mjs.map +1 -1
  9. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs +71 -33
  10. package/dist/array/impl/array-utils-length-bounded-array-guard.mjs.map +1 -1
  11. package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs +102 -73
  12. package/dist/array/impl/array-utils-length-bounded-tuple-cast.mjs.map +1 -1
  13. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs +77 -33
  14. package/dist/array/impl/array-utils-length-bounded-tuple-guard.mjs.map +1 -1
  15. package/dist/array/impl/array-utils-modification.mjs +75 -122
  16. package/dist/array/impl/array-utils-modification.mjs.map +1 -1
  17. package/dist/array/impl/array-utils-reducing-value.mjs +100 -150
  18. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  19. package/dist/array/impl/array-utils-search.mjs +110 -134
  20. package/dist/array/impl/array-utils-search.mjs.map +1 -1
  21. package/dist/array/impl/array-utils-set-op.mjs +146 -38
  22. package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
  23. package/dist/array/impl/array-utils-size.mjs +10 -8
  24. package/dist/array/impl/array-utils-size.mjs.map +1 -1
  25. package/dist/array/impl/array-utils-slice-clamped.mjs +13 -50
  26. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
  27. package/dist/array/impl/array-utils-slicing.mjs +94 -78
  28. package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
  29. package/dist/array/impl/array-utils-transformation.mjs +291 -199
  30. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  31. package/dist/array/impl/array-utils-validation.mjs +54 -56
  32. package/dist/array/impl/array-utils-validation.mjs.map +1 -1
  33. package/dist/array/impl/index.mjs +17 -17
  34. package/dist/array/impl/index.mjs.map +1 -1
  35. package/dist/array/index.mjs +2 -3
  36. package/dist/array/index.mjs.map +1 -1
  37. package/dist/collections/imap-mapped.mjs +335 -292
  38. package/dist/collections/imap-mapped.mjs.map +1 -1
  39. package/dist/collections/imap.mjs +280 -239
  40. package/dist/collections/imap.mjs.map +1 -1
  41. package/dist/collections/index.mjs +7 -7
  42. package/dist/collections/index.mjs.map +1 -1
  43. package/dist/collections/iset-mapped.mjs +448 -265
  44. package/dist/collections/iset-mapped.mjs.map +1 -1
  45. package/dist/collections/iset.mjs +328 -201
  46. package/dist/collections/iset.mjs.map +1 -1
  47. package/dist/collections/queue.mjs +183 -151
  48. package/dist/collections/queue.mjs.map +1 -1
  49. package/dist/collections/stack.mjs +169 -140
  50. package/dist/collections/stack.mjs.map +1 -1
  51. package/dist/entry-point.mjs +4 -77
  52. package/dist/entry-point.mjs.map +1 -1
  53. package/dist/expect-type.mjs +70 -4
  54. package/dist/expect-type.mjs.map +1 -1
  55. package/dist/functional/async-result/async-result.mjs +2 -3
  56. package/dist/functional/async-result/async-result.mjs.map +1 -1
  57. package/dist/functional/async-result/impl/async-result-flat-map.mjs +19 -21
  58. package/dist/functional/async-result/impl/async-result-flat-map.mjs.map +1 -1
  59. package/dist/functional/async-result/impl/async-result-from-promise.mjs +9 -10
  60. package/dist/functional/async-result/impl/async-result-from-promise.mjs.map +1 -1
  61. package/dist/functional/async-result/impl/async-result-from-throwable.mjs +12 -14
  62. package/dist/functional/async-result/impl/async-result-from-throwable.mjs.map +1 -1
  63. package/dist/functional/async-result/impl/async-result-map-err.mjs +16 -19
  64. package/dist/functional/async-result/impl/async-result-map-err.mjs.map +1 -1
  65. package/dist/functional/async-result/impl/async-result-map.mjs +16 -19
  66. package/dist/functional/async-result/impl/async-result-map.mjs.map +1 -1
  67. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs +36 -9
  68. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs.map +1 -1
  69. package/dist/functional/async-result/impl/index.mjs +8 -7
  70. package/dist/functional/async-result/impl/index.mjs.map +1 -1
  71. package/dist/functional/async-result/impl/types.mjs +2 -2
  72. package/dist/functional/async-result/impl/types.mjs.map +1 -1
  73. package/dist/functional/async-result/index.mjs +2 -3
  74. package/dist/functional/async-result/index.mjs.map +1 -1
  75. package/dist/functional/index.mjs +7 -11
  76. package/dist/functional/index.mjs.map +1 -1
  77. package/dist/functional/match.mjs +27 -13
  78. package/dist/functional/match.mjs.map +1 -1
  79. package/dist/functional/optional/impl/index.mjs +19 -18
  80. package/dist/functional/optional/impl/index.mjs.map +1 -1
  81. package/dist/functional/optional/impl/optional-expect-to-be.mjs +16 -18
  82. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
  83. package/dist/functional/optional/impl/optional-filter.mjs +17 -19
  84. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
  85. package/dist/functional/optional/impl/optional-flat-map.mjs +13 -15
  86. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
  87. package/dist/functional/optional/impl/optional-from-nullable.mjs +26 -5
  88. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
  89. package/dist/functional/optional/impl/optional-is-none.mjs +21 -5
  90. package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
  91. package/dist/functional/optional/impl/optional-is-optional.mjs +26 -8
  92. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  93. package/dist/functional/optional/impl/optional-is-some.mjs +22 -5
  94. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
  95. package/dist/functional/optional/impl/optional-map.mjs +16 -18
  96. package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
  97. package/dist/functional/optional/impl/optional-match.mjs +16 -18
  98. package/dist/functional/optional/impl/optional-match.mjs.map +1 -1
  99. package/dist/functional/optional/impl/optional-none.mjs +18 -5
  100. package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
  101. package/dist/functional/optional/impl/optional-or-else.mjs +13 -15
  102. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
  103. package/dist/functional/optional/impl/optional-some.mjs +23 -7
  104. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  105. package/dist/functional/optional/impl/optional-to-nullable.mjs +28 -5
  106. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
  107. package/dist/functional/optional/impl/optional-unwrap-or.mjs +12 -14
  108. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
  109. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +34 -9
  110. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
  111. package/dist/functional/optional/impl/optional-unwrap.mjs +6 -9
  112. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
  113. package/dist/functional/optional/impl/optional-zip.mjs +36 -5
  114. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
  115. package/dist/functional/optional/impl/tag.mjs +4 -5
  116. package/dist/functional/optional/impl/tag.mjs.map +1 -1
  117. package/dist/functional/optional/impl/types.mjs +2 -2
  118. package/dist/functional/optional/impl/types.mjs.map +1 -1
  119. package/dist/functional/optional/index.mjs +2 -3
  120. package/dist/functional/optional/index.mjs.map +1 -1
  121. package/dist/functional/optional/optional.mjs +2 -3
  122. package/dist/functional/optional/optional.mjs.map +1 -1
  123. package/dist/functional/pipe.mjs +42 -14
  124. package/dist/functional/pipe.mjs.map +1 -1
  125. package/dist/functional/result/impl/index.mjs +28 -27
  126. package/dist/functional/result/impl/index.mjs.map +1 -1
  127. package/dist/functional/result/impl/result-err.mjs +29 -7
  128. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  129. package/dist/functional/result/impl/result-expect-to-be.mjs +17 -18
  130. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
  131. package/dist/functional/result/impl/result-flat-map.mjs +18 -21
  132. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
  133. package/dist/functional/result/impl/result-fold.mjs +18 -21
  134. package/dist/functional/result/impl/result-fold.mjs.map +1 -1
  135. package/dist/functional/result/impl/result-from-optional.mjs +17 -20
  136. package/dist/functional/result/impl/result-from-optional.mjs.map +1 -1
  137. package/dist/functional/result/impl/result-from-promise.mjs +37 -8
  138. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
  139. package/dist/functional/result/impl/result-from-throwable.mjs +41 -14
  140. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
  141. package/dist/functional/result/impl/result-is-err.mjs +21 -5
  142. package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
  143. package/dist/functional/result/impl/result-is-ok.mjs +21 -5
  144. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
  145. package/dist/functional/result/impl/result-is-result.mjs +25 -7
  146. package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
  147. package/dist/functional/result/impl/result-map-err.mjs +18 -21
  148. package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
  149. package/dist/functional/result/impl/result-map.mjs +18 -21
  150. package/dist/functional/result/impl/result-map.mjs.map +1 -1
  151. package/dist/functional/result/impl/result-match.mjs +17 -21
  152. package/dist/functional/result/impl/result-match.mjs.map +1 -1
  153. package/dist/functional/result/impl/result-ok.mjs +29 -7
  154. package/dist/functional/result/impl/result-ok.mjs.map +1 -1
  155. package/dist/functional/result/impl/result-or-else.mjs +14 -15
  156. package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
  157. package/dist/functional/result/impl/result-safe-try.mjs +32 -21
  158. package/dist/functional/result/impl/result-safe-try.mjs.map +1 -1
  159. package/dist/functional/result/impl/result-safe-unwrap.mjs +40 -12
  160. package/dist/functional/result/impl/result-safe-unwrap.mjs.map +1 -1
  161. package/dist/functional/result/impl/result-swap.mjs +23 -8
  162. package/dist/functional/result/impl/result-swap.mjs.map +1 -1
  163. package/dist/functional/result/impl/result-to-optional.mjs +30 -7
  164. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
  165. package/dist/functional/result/impl/result-unwrap-err-or.mjs +13 -14
  166. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
  167. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +43 -20
  168. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
  169. package/dist/functional/result/impl/result-unwrap-err.mjs +33 -8
  170. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
  171. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +13 -14
  172. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
  173. package/dist/functional/result/impl/result-unwrap-ok.mjs +6 -9
  174. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
  175. package/dist/functional/result/impl/result-unwrap-throw.mjs +38 -11
  176. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
  177. package/dist/functional/result/impl/result-zip.mjs +35 -5
  178. package/dist/functional/result/impl/result-zip.mjs.map +1 -1
  179. package/dist/functional/result/impl/tag.mjs +4 -5
  180. package/dist/functional/result/impl/tag.mjs.map +1 -1
  181. package/dist/functional/result/impl/types.mjs +2 -2
  182. package/dist/functional/result/impl/types.mjs.map +1 -1
  183. package/dist/functional/result/index.mjs +2 -3
  184. package/dist/functional/result/index.mjs.map +1 -1
  185. package/dist/functional/result/result.mjs +2 -3
  186. package/dist/functional/result/result.mjs.map +1 -1
  187. package/dist/functional/ternary-result/impl/index.mjs +29 -28
  188. package/dist/functional/ternary-result/impl/index.mjs.map +1 -1
  189. package/dist/functional/ternary-result/impl/tag.mjs +6 -6
  190. package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
  191. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +17 -7
  192. package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
  193. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs +15 -18
  194. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
  195. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +28 -32
  196. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
  197. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +24 -26
  198. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
  199. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +21 -8
  200. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
  201. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +28 -13
  202. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
  203. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +19 -5
  204. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
  205. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +21 -5
  206. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
  207. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +28 -8
  208. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
  209. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +20 -5
  210. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
  211. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +17 -18
  212. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
  213. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +20 -23
  214. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
  215. package/dist/functional/ternary-result/impl/ternary-result-map.mjs +24 -26
  216. package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
  217. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +18 -7
  218. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
  219. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +11 -14
  220. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
  221. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +24 -10
  222. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
  223. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs +11 -14
  224. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
  225. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +30 -19
  226. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
  227. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +20 -8
  228. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
  229. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs +11 -14
  230. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
  231. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +7 -9
  232. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
  233. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +30 -22
  234. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
  235. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs +11 -14
  236. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
  237. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +27 -17
  238. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
  239. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +20 -8
  240. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
  241. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +21 -8
  242. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
  243. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +47 -19
  244. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
  245. package/dist/functional/ternary-result/impl/types.mjs +2 -2
  246. package/dist/functional/ternary-result/impl/types.mjs.map +1 -1
  247. package/dist/functional/ternary-result/impl/variant-name.mjs +12 -14
  248. package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
  249. package/dist/functional/ternary-result/index.mjs +2 -3
  250. package/dist/functional/ternary-result/index.mjs.map +1 -1
  251. package/dist/functional/ternary-result/ternary-result.mjs +2 -3
  252. package/dist/functional/ternary-result/ternary-result.mjs.map +1 -1
  253. package/dist/guard/has-key.mjs +43 -4
  254. package/dist/guard/has-key.mjs.map +1 -1
  255. package/dist/guard/index.mjs +8 -8
  256. package/dist/guard/index.mjs.map +1 -1
  257. package/dist/guard/is-non-empty-string.mjs +39 -4
  258. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  259. package/dist/guard/is-non-null-object.mjs +36 -4
  260. package/dist/guard/is-non-null-object.mjs.map +1 -1
  261. package/dist/guard/is-primitive.mjs +46 -15
  262. package/dist/guard/is-primitive.mjs.map +1 -1
  263. package/dist/guard/is-record.mjs +89 -6
  264. package/dist/guard/is-record.mjs.map +1 -1
  265. package/dist/guard/is-type.mjs +404 -19
  266. package/dist/guard/is-type.mjs.map +1 -1
  267. package/dist/guard/key-is-in.mjs +42 -4
  268. package/dist/guard/key-is-in.mjs.map +1 -1
  269. package/dist/index.mjs +12 -65
  270. package/dist/index.mjs.map +1 -1
  271. package/dist/iterator/index.mjs +2 -2
  272. package/dist/iterator/index.mjs.map +1 -1
  273. package/dist/iterator/range.mjs +19 -57
  274. package/dist/iterator/range.mjs.map +1 -1
  275. package/dist/json/index.mjs +2 -2
  276. package/dist/json/index.mjs.map +1 -1
  277. package/dist/json/json.mjs +346 -105
  278. package/dist/json/json.mjs.map +1 -1
  279. package/dist/number/branded-types/finite-number.mjs +148 -137
  280. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  281. package/dist/number/branded-types/index.mjs +33 -33
  282. package/dist/number/branded-types/index.mjs.map +1 -1
  283. package/dist/number/branded-types/int.mjs +245 -209
  284. package/dist/number/branded-types/int.mjs.map +1 -1
  285. package/dist/number/branded-types/int16.mjs +141 -131
  286. package/dist/number/branded-types/int16.mjs.map +1 -1
  287. package/dist/number/branded-types/int32.mjs +141 -131
  288. package/dist/number/branded-types/int32.mjs.map +1 -1
  289. package/dist/number/branded-types/negative-finite-number.mjs +155 -149
  290. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  291. package/dist/number/branded-types/negative-int.mjs +125 -110
  292. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  293. package/dist/number/branded-types/negative-safe-int.mjs +126 -115
  294. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  295. package/dist/number/branded-types/non-negative-finite-number.mjs +164 -154
  296. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  297. package/dist/number/branded-types/non-negative-int16.mjs +137 -125
  298. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  299. package/dist/number/branded-types/non-negative-int32.mjs +137 -125
  300. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  301. package/dist/number/branded-types/non-positive-finite-number.mjs +143 -139
  302. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  303. package/dist/number/branded-types/non-positive-int.mjs +116 -99
  304. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  305. package/dist/number/branded-types/non-positive-safe-int.mjs +118 -107
  306. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  307. package/dist/number/branded-types/non-zero-finite-number.mjs +144 -129
  308. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  309. package/dist/number/branded-types/non-zero-int.mjs +102 -82
  310. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  311. package/dist/number/branded-types/non-zero-int16.mjs +118 -105
  312. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  313. package/dist/number/branded-types/non-zero-int32.mjs +118 -105
  314. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  315. package/dist/number/branded-types/non-zero-safe-int.mjs +122 -108
  316. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  317. package/dist/number/branded-types/non-zero-uint16.mjs +118 -104
  318. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  319. package/dist/number/branded-types/non-zero-uint32.mjs +118 -104
  320. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  321. package/dist/number/branded-types/positive-finite-number.mjs +167 -160
  322. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  323. package/dist/number/branded-types/positive-int.mjs +260 -224
  324. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  325. package/dist/number/branded-types/positive-int16.mjs +134 -122
  326. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  327. package/dist/number/branded-types/positive-int32.mjs +134 -122
  328. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  329. package/dist/number/branded-types/positive-safe-int.mjs +292 -258
  330. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  331. package/dist/number/branded-types/positive-uint16.mjs +134 -122
  332. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  333. package/dist/number/branded-types/positive-uint32.mjs +134 -122
  334. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  335. package/dist/number/branded-types/safe-int.mjs +284 -255
  336. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  337. package/dist/number/branded-types/safe-uint.mjs +135 -124
  338. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  339. package/dist/number/branded-types/uint.mjs +248 -211
  340. package/dist/number/branded-types/uint.mjs.map +1 -1
  341. package/dist/number/branded-types/uint16.mjs +132 -121
  342. package/dist/number/branded-types/uint16.mjs.map +1 -1
  343. package/dist/number/branded-types/uint32.mjs +132 -121
  344. package/dist/number/branded-types/uint32.mjs.map +1 -1
  345. package/dist/number/enum/index.mjs +3 -3
  346. package/dist/number/enum/index.mjs.map +1 -1
  347. package/dist/number/enum/int8.mjs +146 -131
  348. package/dist/number/enum/int8.mjs.map +1 -1
  349. package/dist/number/enum/uint8.mjs +133 -119
  350. package/dist/number/enum/uint8.mjs.map +1 -1
  351. package/dist/number/index.mjs +6 -37
  352. package/dist/number/index.mjs.map +1 -1
  353. package/dist/number/num-arithmetic-types.mjs +42 -1
  354. package/dist/number/num-arithmetic-types.mjs.map +1 -1
  355. package/dist/number/num.mjs +541 -83
  356. package/dist/number/num.mjs.map +1 -1
  357. package/dist/number/refined-number-utils.mjs +294 -133
  358. package/dist/number/refined-number-utils.mjs.map +1 -1
  359. package/dist/object/index.mjs +2 -2
  360. package/dist/object/index.mjs.map +1 -1
  361. package/dist/object/object.mjs +355 -202
  362. package/dist/object/object.mjs.map +1 -1
  363. package/dist/others/cast-mutable.mjs +38 -11
  364. package/dist/others/cast-mutable.mjs.map +1 -1
  365. package/dist/others/cast-readonly.mjs +37 -11
  366. package/dist/others/cast-readonly.mjs.map +1 -1
  367. package/dist/others/debounce-function.mjs +22 -11
  368. package/dist/others/debounce-function.mjs.map +1 -1
  369. package/dist/others/fast-deep-equal.mjs +70 -51
  370. package/dist/others/fast-deep-equal.mjs.map +1 -1
  371. package/dist/others/if-then.mjs +32 -5
  372. package/dist/others/if-then.mjs.map +1 -1
  373. package/dist/others/index.mjs +10 -10
  374. package/dist/others/index.mjs.map +1 -1
  375. package/dist/others/map-nullable.mjs +11 -13
  376. package/dist/others/map-nullable.mjs.map +1 -1
  377. package/dist/others/memoize-function.mjs +14 -16
  378. package/dist/others/memoize-function.mjs.map +1 -1
  379. package/dist/others/tuple.mjs +52 -4
  380. package/dist/others/tuple.mjs.map +1 -1
  381. package/dist/others/unknown-to-string.mjs +91 -47
  382. package/dist/others/unknown-to-string.mjs.map +1 -1
  383. package/dist/promise/index.mjs +2 -2
  384. package/dist/promise/index.mjs.map +1 -1
  385. package/dist/promise/promise.mjs +51 -10
  386. package/dist/promise/promise.mjs.map +1 -1
  387. package/dist/string/index.mjs +2 -2
  388. package/dist/string/index.mjs.map +1 -1
  389. package/dist/string/str.mjs +250 -83
  390. package/dist/string/str.mjs.map +1 -1
  391. package/dist/types.mjs +3 -2
  392. package/dist/types.mjs.map +1 -1
  393. package/package.json +5 -6
@@ -1,27 +1,127 @@
1
- import { range as range$1 } from '../../iterator/range.mjs';
2
-
3
- const zeros = (len) => (
4
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
5
- Array.from({ length: len }, () => 0)
6
- );
7
- const seq = (len) => (
8
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
9
- Array.from({ length: len }, (_, i) => i)
10
- );
11
- const create = (len, init) => (
12
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
13
- Array.from({ length: Math.max(0, len) }, () => init)
14
- );
15
- const newArray = create;
16
- const generate = (generatorFn) => Array.from(generatorFn());
17
- const generateAsync = (generatorFn) => Array.fromAsync(generatorFn());
18
- const copy = (array) => (
19
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
20
- array.slice()
21
- );
22
- function range(start, end, step = 1) {
23
- return Array.from(range$1(start, end, step));
24
- }
25
1
 
26
- export { copy, create, generate, generateAsync, newArray, range, seq, zeros };
27
- //# sourceMappingURL=array-utils-creation.mjs.map
2
+ import { range as rangeIterator } from '../../iterator/index.mjs';
3
+ /**
4
+ * Creates an array of zeros with the specified length.
5
+ *
6
+ * @example
7
+ *
8
+ * ```ts
9
+ * const emptyZeros = Arr.zeros(0);
10
+ *
11
+ * const threeZeros = Arr.zeros(3);
12
+ *
13
+ * assert.deepStrictEqual(emptyZeros, []);
14
+ *
15
+ * assert.deepStrictEqual(threeZeros, [0, 0, 0]);
16
+ * ```
17
+ */
18
+ export const zeros = (len) =>
19
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
20
+ Array.from({ length: len }, () => 0);
21
+ /**
22
+ * Creates a sequence of consecutive integers from 0 to `len-1`.
23
+ *
24
+ * @example
25
+ *
26
+ * ```ts
27
+ * const emptySeq = Arr.seq(0);
28
+ *
29
+ * const firstFive = Arr.seq(5);
30
+ *
31
+ * assert.deepStrictEqual(emptySeq, []);
32
+ *
33
+ * assert.deepStrictEqual(firstFive, [0, 1, 2, 3, 4]);
34
+ * ```
35
+ */
36
+ export const seq = (len) =>
37
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
38
+ Array.from({ length: len }, (_, i) => i);
39
+ /**
40
+ * Creates a new array of the specified length, filled with the initial value.
41
+ *
42
+ * @example
43
+ *
44
+ * ```ts
45
+ * const threeOnes = Arr.create(3, 1);
46
+ *
47
+ * const emptyStrings = Arr.create(0, 'Ada');
48
+ *
49
+ * assert.deepStrictEqual(threeOnes, [1, 1, 1]);
50
+ *
51
+ * assert.deepStrictEqual(emptyStrings, []);
52
+ * ```
53
+ */
54
+ export const create = (len, init) =>
55
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
56
+ Array.from({ length: Math.max(0, len) }, () => init);
57
+ /**
58
+ * Alias for `create`.
59
+ *
60
+ * @see {@link create}
61
+ */
62
+ export const newArray = create;
63
+ /**
64
+ * Generates an array from a generator function.
65
+ *
66
+ * @example
67
+ *
68
+ * ```ts
69
+ * const numbers = Arr.generate(function* () {
70
+ * yield 1;
71
+ *
72
+ * yield 2;
73
+ *
74
+ * yield 3;
75
+ * });
76
+ *
77
+ * assert.deepStrictEqual(numbers, [1, 2, 3]);
78
+ * ```
79
+ */
80
+ export const generate = (generatorFn) => Array.from(generatorFn());
81
+ /**
82
+ * Generates an array from an async generator function.
83
+ *
84
+ * @example
85
+ *
86
+ * ```ts
87
+ * const values = await Arr.generateAsync(async function* () {
88
+ * yield 'Ada';
89
+ *
90
+ * await Promise.resolve();
91
+ *
92
+ * yield 'Lovelace';
93
+ * });
94
+ *
95
+ * assert.deepStrictEqual(values, ['Ada', 'Lovelace']);
96
+ * ```
97
+ */
98
+ export const generateAsync = (generatorFn) => Array.fromAsync(generatorFn());
99
+ /**
100
+ * Creates a shallow copy of an array.
101
+ *
102
+ * @example
103
+ *
104
+ * ```ts
105
+ * const original = [{ id: 1 }, { id: 2 }] as const;
106
+ *
107
+ * const cloned = Arr.copy(original);
108
+ *
109
+ * assert.deepStrictEqual(cloned, original);
110
+ *
111
+ * assert.notStrictEqual(cloned, original);
112
+ * ```
113
+ */
114
+ export const copy = (array) =>
115
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
116
+ array.slice();
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+ export function range(start, end, step = 1) {
125
+ return Array.from(rangeIterator(start, end, step));
126
+ }
127
+ //# sourceMappingURL=array-utils-creation.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"array-utils-creation.mjs","sources":["../../../src/array/impl/array-utils-creation.mts"],"sourcesContent":["import {\n type BoolOr,\n type FixedLengthArray,\n type FixedLengthTuple,\n type Index,\n type IsUnion,\n type List,\n type Min,\n type NonEmptyArray,\n type NonZeroSafeIntWithSmallInt,\n type PositiveSafeIntWithSmallInt,\n type RelaxedExclude,\n type SafeInt,\n type SafeIntWithSmallInt,\n type SafeUint,\n type SafeUintWithSmallInt,\n type Seq,\n type SmallUint,\n type StructuralPrefixLength,\n type SupportedLength,\n} from 'ts-type-forge';\nimport { expectType } from '../../expect-type.mjs';\nimport { range as rangeIterator } from '../../iterator/index.mjs';\nimport { type SizeType } from '../../types.mjs';\n\n/**\n * Creates an array of zeros with the specified length.\n *\n * @example\n *\n * ```ts\n * const emptyZeros = Arr.zeros(0);\n *\n * const threeZeros = Arr.zeros(3);\n *\n * assert.deepStrictEqual(emptyZeros, []);\n *\n * assert.deepStrictEqual(threeZeros, [0, 0, 0]);\n * ```\n */\nexport const zeros = <N extends SizeType.ArgArr>(\n len: N,\n): N extends SmallUint\n ? FixedLengthTuple<N, 0>\n : N extends SizeType.ArgArrPositive\n ? NonEmptyArray<0>\n : readonly 0[] =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Array.from({ length: len }, () => 0) as never;\n\n/**\n * Creates a sequence of consecutive integers from 0 to `len-1`.\n *\n * @example\n *\n * ```ts\n * const emptySeq = Arr.seq(0);\n *\n * const firstFive = Arr.seq(5);\n *\n * assert.deepStrictEqual(emptySeq, []);\n *\n * assert.deepStrictEqual(firstFive, [0, 1, 2, 3, 4]);\n * ```\n */\nexport const seq = <N extends SizeType.ArgArr>(\n len: N,\n): N extends SmallUint\n ? Seq<N>\n : N extends SizeType.ArgArrPositive\n ? NonEmptyArray<SizeType.Arr>\n : readonly SizeType.Arr[] =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Array.from({ length: len }, (_, i) => i) as never;\n\n/**\n * Creates a new array of the specified length, filled with the initial value.\n *\n * @example\n *\n * ```ts\n * const threeOnes = Arr.create(3, 1);\n *\n * const emptyStrings = Arr.create(0, 'Ada');\n *\n * assert.deepStrictEqual(threeOnes, [1, 1, 1]);\n *\n * assert.deepStrictEqual(emptyStrings, []);\n * ```\n */\nexport const create = <N extends SizeType.ArgArr, const V>(\n len: N,\n init: V,\n): N extends StructuralPrefixLength\n ? FixedLengthTuple<N, V>\n : N extends SupportedLength\n ? FixedLengthArray<N, V>\n : N extends SizeType.ArgArrPositive\n ? NonEmptyArray<V>\n : readonly V[] =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Array.from({ length: Math.max(0, len) }, () => init) as never;\n\n/**\n * Alias for `create`.\n *\n * @see {@link create}\n */\nexport const newArray = create;\n\n/**\n * Generates an array from a generator function.\n *\n * @example\n *\n * ```ts\n * const numbers = Arr.generate(function* () {\n * yield 1;\n *\n * yield 2;\n *\n * yield 3;\n * });\n *\n * assert.deepStrictEqual(numbers, [1, 2, 3]);\n * ```\n */\nexport const generate = <T,>(\n generatorFn: () => Generator<T, void, unknown>,\n): readonly T[] => Array.from(generatorFn());\n\n/**\n * Generates an array from an async generator function.\n *\n * @example\n *\n * ```ts\n * const values = await Arr.generateAsync(async function* () {\n * yield 'Ada';\n *\n * await Promise.resolve();\n *\n * yield 'Lovelace';\n * });\n *\n * assert.deepStrictEqual(values, ['Ada', 'Lovelace']);\n * ```\n */\nexport const generateAsync = <T,>(\n generatorFn: () => AsyncGenerator<T, void, unknown>,\n): Promise<readonly T[]> => Array.fromAsync(generatorFn());\n\n/**\n * Creates a shallow copy of an array.\n *\n * @example\n *\n * ```ts\n * const original = [{ id: 1 }, { id: 2 }] as const;\n *\n * const cloned = Arr.copy(original);\n *\n * assert.deepStrictEqual(cloned, original);\n *\n * assert.notStrictEqual(cloned, original);\n * ```\n */\nexport const copy = <const Ar extends readonly unknown[]>(array: Ar): Ar =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n array.slice() as unknown as Ar;\n\ntype LT = Readonly<{ [N in SmallUint]: Index<N> }>;\n\ntype RangeList<S extends SmallUint, E extends SmallUint> =\n BoolOr<IsUnion<S>, IsUnion<E>> extends true\n ? readonly RelaxedExclude<LT[E], LT[Min<S>]>[] // Avoid incorrect type calculation for unions with Seq\n : List.Skip<S, Seq<E>>;\n\nexpectType<RangeList<1, 5>, readonly [1, 2, 3, 4]>('=');\n\nexpectType<RangeList<1, 2>, readonly [1]>('=');\n\nexpectType<RangeList<1, 1>, readonly []>('=');\n\nexpectType<RangeList<1, 1 | 3>, readonly (1 | 2)[]>('=');\n\nexpectType<RangeList<1 | 3, 3 | 5>, readonly (1 | 2 | 3 | 4)[]>('=');\n\nexpectType<RangeList<1 | 2 | 3, 5 | 6 | 7>, readonly (1 | 2 | 3 | 4 | 5 | 6)[]>(\n '=',\n);\n\nexpectType<RangeList<5, 1>, readonly []>('=');\n\n/**\n * Creates an array of numbers within a specified range with optional step.\n *\n * @example\n *\n * ```ts\n * const ascending = Arr.range(asUint32(1), asUint32(5));\n *\n * const empty = Arr.range(asUint32(2), asUint32(2));\n *\n * assert.deepStrictEqual(ascending, [1, 2, 3, 4]);\n *\n * assert.deepStrictEqual(empty, []);\n * ```\n */\nexport function range<S extends SmallUint, E extends SmallUint>(\n start: S,\n end: E,\n step?: 1,\n): RangeList<S, E>;\n\nexport function range(\n start: SafeUintWithSmallInt,\n end: SafeUintWithSmallInt,\n step?: PositiveSafeIntWithSmallInt,\n): readonly SafeUint[];\n\nexport function range(\n start: SafeIntWithSmallInt,\n end: SafeIntWithSmallInt,\n step?: NonZeroSafeIntWithSmallInt,\n): readonly SafeInt[];\n\nexport function range(\n start: SafeIntWithSmallInt,\n end: SafeIntWithSmallInt,\n step: NonZeroSafeIntWithSmallInt = 1,\n): readonly SafeInt[] {\n return Array.from(rangeIterator(start, end, step));\n}\n"],"names":["rangeIterator"],"mappings":";;AAwCO,MAAM,QAAQ,CACnB,GAAA;AAAA;AAAA,EAOA,MAAM,IAAA,CAAK,EAAE,QAAQ,GAAA,EAAI,EAAG,MAAM,CAAC;AAAA;AAiB9B,MAAM,MAAM,CACjB,GAAA;AAAA;AAAA,EAOA,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,KAAI,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC;AAAA;MAiB5B,MAAA,GAAS,CACpB,GAAA,EACA,IAAA;AAAA;AAAA,EASA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,EAAE,EAAG,MAAM,IAAI;AAAA;AAO9C,MAAM,QAAA,GAAW;AAmBjB,MAAM,WAAW,CACtB,WAAA,KACiB,KAAA,CAAM,IAAA,CAAK,aAAa;AAmBpC,MAAM,gBAAgB,CAC3B,WAAA,KAC0B,KAAA,CAAM,SAAA,CAAU,aAAa;AAiBlD,MAAM,OAAO,CAAsC,KAAA;AAAA;AAAA,EAExD,MAAM,KAAA;AAAM;AA0DP,SAAS,KAAA,CACd,KAAA,EACA,GAAA,EACA,IAAA,GAAmC,CAAA,EACf;AACpB,EAAA,OAAO,MAAM,IAAA,CAAKA,OAAA,CAAc,KAAA,EAAO,GAAA,EAAK,IAAI,CAAC,CAAA;AACnD;;;;"}
1
+ {"version":3,"file":"array-utils-creation.mjs","sourceRoot":"","sources":["../../../src/array/impl/array-utils-creation.mts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGlE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,GAAM,EAKW,EAAE;AACnB,oEAAoE;AACpE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAU,CAAC;AAEhD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,GAAM,EAKsB,EAAE;AAC9B,oEAAoE;AACpE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAU,CAAC;AAEpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,GAAM,EACN,IAAO,EAOY,EAAE;AACrB,oEAAoE;AACpE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAU,CAAC;AAEhE;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE/B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,WAA8C,EAChC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAE7C;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,WAAmD,EAC5B,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAsC,KAAS,EAAM,EAAE;AACzE,oEAAoE;AACpE,KAAK,CAAC,KAAK,EAAmB,CAAC;AASjC,UAAU,CAAyC,GAAG,CAAC,CAAC;AAExD,UAAU,CAAgC,GAAG,CAAC,CAAC;AAE/C,UAAU,CAA+B,GAAG,CAAC,CAAC;AAE9C,UAAU,CAA0C,GAAG,CAAC,CAAC;AAEzD,UAAU,CAAsD,GAAG,CAAC,CAAC;AAErE,UAAU,CACR,GAAG,CACJ,CAAC;AAEF,UAAU,CAA+B,GAAG,CAAC,CAAC;AAmC9C,MAAM,UAAU,KAAK,CACnB,KAA0B,EAC1B,GAAwB,EACxB,IAAI,GAA+B,CAAC;IAEpC,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -1,31 +1,64 @@
1
- import { none } from '../../functional/optional/impl/optional-none.mjs';
2
- import { some } from '../../functional/optional/impl/optional-some.mjs';
3
- import '@sindresorhus/is';
4
- import { pipe } from '../../functional/pipe.mjs';
5
-
6
- function at(...args) {
7
- switch (args.length) {
8
- case 2:
9
- return atImpl(...args);
10
- case 1:
11
- return (array) => atImpl(array, ...args);
12
- }
1
+ import { Optional, pipe } from '../../functional/index.mjs';
2
+ export function at(...args) {
3
+ switch (args.length) {
4
+ case 2:
5
+ return atImpl(...args);
6
+ case 1:
7
+ return (array) => atImpl(array, ...args);
8
+ }
13
9
  }
14
- const atImpl = (array, index$1) => pipe(index$1 < 0 ? array.length + index$1 : index$1).map(
15
- (normalizedIndex) => normalizedIndex < 0 || normalizedIndex >= array.length ? none : (
16
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
17
- some(array[normalizedIndex])
18
- )
19
- ).value;
20
- const head = (array) => (
21
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
22
- array.length === 0 ? none : some(array.at(0))
23
- );
24
- const last = (array) => (
25
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
26
- array.length === 0 ? none : some(array.at(-1))
27
- );
28
- const first = head;
29
-
30
- export { at, first, head, last };
31
- //# sourceMappingURL=array-utils-element-access.mjs.map
10
+ const atImpl = (array, index) => pipe(index < 0 ? array.length + index : index).map((normalizedIndex) => normalizedIndex < 0 || normalizedIndex >= array.length
11
+ ? Optional.none
12
+ : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
13
+ Optional.some(array[normalizedIndex])).value;
14
+ /**
15
+ * Returns the first element of an array as an Optional.
16
+ *
17
+ * @example
18
+ *
19
+ * ```ts
20
+ * const users = [{ id: 1 }, { id: 2 }] as const;
21
+ *
22
+ * const empty: readonly Readonly<{ id: number }>[] = [] as const;
23
+ *
24
+ * const first = Arr.head(users);
25
+ *
26
+ * const none = Arr.head(empty);
27
+ *
28
+ * assert.deepStrictEqual(first, Optional.some({ id: 1 }));
29
+ *
30
+ * assert.deepStrictEqual(none, Optional.none);
31
+ * ```
32
+ */
33
+ export const head = (array) =>
34
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
35
+ (array.length === 0 ? Optional.none : Optional.some(array.at(0)));
36
+ /**
37
+ * Returns the last element of an array as an Optional.
38
+ *
39
+ * @example
40
+ *
41
+ * ```ts
42
+ * const queue = ['first', 'second'] as const;
43
+ *
44
+ * const emptyQueue: readonly string[] = [] as const;
45
+ *
46
+ * const lastValue = Arr.last(queue);
47
+ *
48
+ * const none = Arr.last(emptyQueue);
49
+ *
50
+ * assert.deepStrictEqual(lastValue, Optional.some('second'));
51
+ *
52
+ * assert.deepStrictEqual(none, Optional.none);
53
+ * ```
54
+ */
55
+ export 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
+ export const first = head;
64
+ //# sourceMappingURL=array-utils-element-access.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"array-utils-element-access.mjs","sources":["../../../src/array/impl/array-utils-element-access.mts"],"sourcesContent":["import { type NonEmptyTuple } from 'ts-type-forge';\nimport { Optional, pipe } from '../../functional/index.mjs';\nimport {\n type ArgArrayIndexWithNegative,\n type None,\n type SizeType,\n type Some,\n} from '../../types.mjs';\n\n/**\n * Safely retrieves an element at a given index from an array, returning an Optional.\n *\n * @example\n *\n * ```ts\n * const letters: readonly string[] = ['a', 'b', 'c'] as const;\n *\n * const two = Arr.at(letters, 1);\n *\n * const last = Arr.at(-1)(letters);\n *\n * const missing = Arr.at(letters, 5);\n *\n * assert.deepStrictEqual(two, Optional.some('b'));\n *\n * assert.deepStrictEqual(last, Optional.some('c'));\n *\n * assert.deepStrictEqual(missing, Optional.none);\n * ```\n */\nexport function at<const Ar extends readonly unknown[]>(\n array: Ar,\n index: ArgArrayIndexWithNegative<Ar>,\n): Optional<Ar[number]>;\n\n// Curried version\n\nexport function at(\n index: SizeType.ArgArrWithNegative,\n): <E>(array: readonly E[]) => Optional<E>;\n\nexport function at<E>(\n ...args:\n | readonly [array: readonly E[], index: SizeType.ArgArrWithNegative]\n | readonly [index: SizeType.ArgArrWithNegative]\n): Optional<E> | ((array: readonly E[]) => Optional<E>) {\n switch (args.length) {\n case 2:\n return atImpl(...args);\n\n case 1:\n return (array) => atImpl(array, ...args);\n }\n}\n\nconst atImpl = <E,>(\n array: readonly E[],\n index: SizeType.ArgArrWithNegative,\n): Optional<E> =>\n pipe(index < 0 ? array.length + index : index).map((normalizedIndex) =>\n normalizedIndex < 0 || normalizedIndex >= array.length\n ? Optional.none\n : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n Optional.some(array[normalizedIndex]!),\n ).value;\n\n/**\n * Returns the first element of an array as an Optional.\n *\n * @example\n *\n * ```ts\n * const users = [{ id: 1 }, { id: 2 }] as const;\n *\n * const empty: readonly Readonly<{ id: number }>[] = [] as const;\n *\n * const first = Arr.head(users);\n *\n * const none = Arr.head(empty);\n *\n * assert.deepStrictEqual(first, Optional.some({ id: 1 }));\n *\n * assert.deepStrictEqual(none, Optional.none);\n * ```\n */\nexport const head = <const Ar extends readonly unknown[]>(\n array: Ar,\n): Ar extends readonly []\n ? None\n : Ar extends readonly [infer E, ...unknown[]]\n ? Some<E>\n : Ar extends NonEmptyTuple<infer E>\n ? Some<E>\n : Optional<Ar[number]> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (array.length === 0 ? Optional.none : Optional.some(array.at(0))) as never;\n\n/**\n * Returns the last element of an array as an Optional.\n *\n * @example\n *\n * ```ts\n * const queue = ['first', 'second'] as const;\n *\n * const emptyQueue: readonly string[] = [] as const;\n *\n * const lastValue = Arr.last(queue);\n *\n * const none = Arr.last(emptyQueue);\n *\n * assert.deepStrictEqual(lastValue, Optional.some('second'));\n *\n * assert.deepStrictEqual(none, Optional.none);\n * ```\n */\nexport const last = <const Ar extends readonly unknown[]>(\n array: Ar,\n): Ar extends readonly []\n ? None\n : Ar extends readonly [...unknown[], infer E]\n ? Some<E>\n : Ar extends NonEmptyTuple<infer E>\n ? Some<E>\n : Optional<Ar[number]> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n (array.length === 0 ? Optional.none : Optional.some(array.at(-1))) as never;\n\n/**\n * Alias for `head`.\n *\n * @see {@link head}\n */\nexport const first = head;\n"],"names":["index","Optional.none","Optional.some"],"mappings":";;;;;AAyCO,SAAS,MACX,IAAA,EAGmD;AACtD,EAAA,QAAQ,KAAK,MAAA;AAAQ,IACnB,KAAK,CAAA;AACH,MAAA,OAAO,MAAA,CAAO,GAAG,IAAI,CAAA;AAAA,IAEvB,KAAK,CAAA;AACH,MAAA,OAAO,CAAC,KAAA,KAAU,MAAA,CAAO,KAAA,EAAO,GAAG,IAAI,CAAA;AAAA;AAE7C;AAEA,MAAM,MAAA,GAAS,CACb,KAAA,EACAA,OAAA,KAEA,IAAA,CAAKA,OAAA,GAAQ,CAAA,GAAI,KAAA,CAAM,MAAA,GAASA,OAAA,GAAQA,OAAK,CAAA,CAAE,GAAA;AAAA,EAAI,CAAC,eAAA,KAClD,eAAA,GAAkB,KAAK,eAAA,IAAmB,KAAA,CAAM,SAC5CC,IAAS;AAAA;AAAA,IAETC,IAAS,CAAK,KAAA,CAAM,eAAe,CAAE;AAAA;AAC3C,CAAA,CAAE,KAAA;AAqBG,MAAM,OAAO,CAClB,KAAA;AAAA;AAAA,EASC,KAAA,CAAM,MAAA,KAAW,CAAA,GAAID,IAAS,GAAOC,IAAS,CAAK,KAAA,CAAM,EAAA,CAAG,CAAC,CAAC;AAAA;AAqB1D,MAAM,OAAO,CAClB,KAAA;AAAA;AAAA,EASC,KAAA,CAAM,MAAA,KAAW,CAAA,GAAID,IAAS,GAAOC,IAAS,CAAK,KAAA,CAAM,EAAA,CAAG,EAAE,CAAC;AAAA;AAO3D,MAAM,KAAA,GAAQ;;;;"}
1
+ {"version":3,"file":"array-utils-element-access.mjs","sourceRoot":"","sources":["../../../src/array/impl/array-utils-element-access.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAwC5D,MAAM,UAAU,EAAE,CAChB,GAAG,IAE8C;IAEjD,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC;YACJ,OAAO,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAEzB,KAAK,CAAC;YACJ,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,MAAM,GAAG,CACb,KAAmB,EACnB,KAAkC,EACrB,EAAE,CACf,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CACrE,eAAe,GAAG,CAAC,IAAI,eAAe,IAAI,KAAK,CAAC,MAAM;IACpD,CAAC,CAAC,QAAQ,CAAC,IAAI;IACf,CAAC,CAAC,oEAAoE;QACpE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAE,CAAC,CAC3C,CAAC,KAAK,CAAC;AAEV;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,KAAS,EAOkB,EAAE;AAC7B,oEAAoE;AACpE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAU,CAAC;AAE7E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,KAAS,EAOkB,EAAE;AAC7B,oEAAoE;AACpE,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAU,CAAC;AAE9E;;;;GAIG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC"}
@@ -1,56 +1,72 @@
1
- import '../../number/branded-types/finite-number.mjs';
2
- import '../../number/branded-types/int.mjs';
3
- import '../../number/branded-types/int16.mjs';
4
- import '../../number/branded-types/int32.mjs';
5
- import '../../number/branded-types/negative-finite-number.mjs';
6
- import '../../number/branded-types/negative-int.mjs';
7
- import '../../number/branded-types/negative-safe-int.mjs';
8
- import '../../number/branded-types/non-negative-finite-number.mjs';
9
- import '../../number/branded-types/non-negative-int16.mjs';
10
- import '../../number/branded-types/non-negative-int32.mjs';
11
- import '../../number/branded-types/non-positive-finite-number.mjs';
12
- import '../../number/branded-types/non-positive-int.mjs';
13
- import '../../number/branded-types/non-positive-safe-int.mjs';
14
- import '../../number/branded-types/non-zero-finite-number.mjs';
15
- import '../../number/branded-types/non-zero-int.mjs';
16
- import '../../number/branded-types/non-zero-int16.mjs';
17
- import '../../number/branded-types/non-zero-int32.mjs';
18
- import '../../number/branded-types/non-zero-safe-int.mjs';
19
- import '../../number/branded-types/non-zero-uint16.mjs';
20
- import '../../number/branded-types/non-zero-uint32.mjs';
21
- import '../../number/branded-types/positive-finite-number.mjs';
22
- import '../../number/branded-types/positive-int.mjs';
23
- import '../../number/branded-types/positive-int16.mjs';
24
- import '../../number/branded-types/positive-int32.mjs';
25
- import '../../number/branded-types/positive-safe-int.mjs';
26
- import '../../number/branded-types/positive-uint16.mjs';
27
- import '../../number/branded-types/positive-uint32.mjs';
28
- import '../../number/branded-types/safe-int.mjs';
29
- import '../../number/branded-types/safe-uint.mjs';
30
- import '../../number/branded-types/uint.mjs';
31
- import '../../number/branded-types/uint16.mjs';
32
- import { asUint32 } from '../../number/branded-types/uint32.mjs';
33
- import '../../number/enum/int8.mjs';
34
- import '../../number/enum/uint8.mjs';
35
- import '../../number/num.mjs';
36
- import '../../number/refined-number-utils.mjs';
37
-
38
- const entries = function* (array) {
39
- for (const [index, value] of array.entries()) {
40
- yield [asUint32(index), value];
41
- }
1
+ import { asUint32 } from '../../number/index.mjs';
2
+ /**
3
+ * Returns an iterator of `[index, value]` pairs for an array.
4
+ *
5
+ * @example
6
+ *
7
+ * ```ts
8
+ * const tags = ['alpha', 'beta', 'gamma'] as const;
9
+ *
10
+ * const entryList = Array.from(
11
+ * Arr.entries(tags),
12
+ * ([index, tag]) => [Number(index), tag] as const,
13
+ * );
14
+ *
15
+ * assert.deepStrictEqual(
16
+ * entryList,
17
+ * Array.from([
18
+ * [0, 'alpha'],
19
+ * [1, 'beta'],
20
+ * [2, 'gamma'],
21
+ * ]),
22
+ * );
23
+ * ```
24
+ */
25
+ export const entries = function* (array) {
26
+ for (const [index, value] of array.entries()) {
27
+ yield [asUint32(index), value];
28
+ }
42
29
  };
43
- const values = function* (array) {
44
- for (const value of array) {
45
- yield value;
46
- }
30
+ /**
31
+ * Returns an iterator of values for an array.
32
+ *
33
+ * @example
34
+ *
35
+ * ```ts
36
+ * const players = ['Ada', 'Grace', 'Alan'] as readonly string[];
37
+ *
38
+ * const valueList = Array.from(Arr.values(players));
39
+ *
40
+ * assert.deepStrictEqual(valueList, players);
41
+ * ```
42
+ */
43
+ export const values = function* (array) {
44
+ for (const value of array) {
45
+ yield value;
46
+ }
47
47
  };
48
- const indices = function* (array) {
49
- for (const key of array.keys()) {
50
- yield asUint32(key);
51
- }
48
+ /**
49
+ * Returns an iterator of indices for an array.
50
+ *
51
+ * @example
52
+ *
53
+ * ```ts
54
+ * const items = ['zero', 'one', 'two'] as const;
55
+ *
56
+ * const indexList = Array.from(Arr.indices(items));
57
+ *
58
+ * assert.deepStrictEqual(indexList, [0, 1, 2]);
59
+ * ```
60
+ */
61
+ export const indices = function* (array) {
62
+ for (const key of array.keys()) {
63
+ yield asUint32(key);
64
+ }
52
65
  };
53
- const keys = indices;
54
-
55
- export { entries, indices, keys, values };
56
- //# sourceMappingURL=array-utils-iterators.mjs.map
66
+ /**
67
+ * Alias for `indices`.
68
+ *
69
+ * @see {@link indices}
70
+ */
71
+ export const keys = indices;
72
+ //# sourceMappingURL=array-utils-iterators.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"array-utils-iterators.mjs","sources":["../../../src/array/impl/array-utils-iterators.mts"],"sourcesContent":["import { asUint32 } from '../../number/index.mjs';\nimport { type SizeType } from '../../types.mjs';\n\n/**\n * Returns an iterator of `[index, value]` pairs for an array.\n *\n * @example\n *\n * ```ts\n * const tags = ['alpha', 'beta', 'gamma'] as const;\n *\n * const entryList = Array.from(\n * Arr.entries(tags),\n * ([index, tag]) => [Number(index), tag] as const,\n * );\n *\n * assert.deepStrictEqual(\n * entryList,\n * Array.from([\n * [0, 'alpha'],\n * [1, 'beta'],\n * [2, 'gamma'],\n * ]),\n * );\n * ```\n */\nexport const entries = function* <E>(\n array: readonly E[],\n): ArrayIterator<readonly [SizeType.Arr, E]> {\n for (const [index, value] of array.entries()) {\n yield [asUint32(index), value] as const;\n }\n};\n\n/**\n * Returns an iterator of values for an array.\n *\n * @example\n *\n * ```ts\n * const players = ['Ada', 'Grace', 'Alan'] as readonly string[];\n *\n * const valueList = Array.from(Arr.values(players));\n *\n * assert.deepStrictEqual(valueList, players);\n * ```\n */\nexport const values = function* <E>(array: readonly E[]): ArrayIterator<E> {\n for (const value of array) {\n yield value;\n }\n};\n\n/**\n * Returns an iterator of indices for an array.\n *\n * @example\n *\n * ```ts\n * const items = ['zero', 'one', 'two'] as const;\n *\n * const indexList = Array.from(Arr.indices(items));\n *\n * assert.deepStrictEqual(indexList, [0, 1, 2]);\n * ```\n */\nexport const indices = function* <E>(\n array: readonly E[],\n): ArrayIterator<SizeType.Arr> {\n for (const key of array.keys()) {\n yield asUint32(key);\n }\n};\n\n/**\n * Alias for `indices`.\n *\n * @see {@link indices}\n */\nexport const keys = indices;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BO,MAAM,OAAA,GAAU,WACrB,KAAA,EAC2C;AAC3C,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,KAAK,CAAA,IAAK,KAAA,CAAM,SAAQ,EAAG;AAC5C,IAAA,MAAM,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,KAAK,CAAA;AAAA,EAC/B;AACF;AAeO,MAAM,MAAA,GAAS,WAAc,KAAA,EAAuC;AACzE,EAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAeO,MAAM,OAAA,GAAU,WACrB,KAAA,EAC6B;AAC7B,EAAA,KAAA,MAAW,GAAA,IAAO,KAAA,CAAM,IAAA,EAAK,EAAG;AAC9B,IAAA,MAAM,SAAS,GAAG,CAAA;AAAA,EACpB;AACF;AAOO,MAAM,IAAA,GAAO;;;;"}
1
+ {"version":3,"file":"array-utils-iterators.mjs","sourceRoot":"","sources":["../../../src/array/impl/array-utils-iterators.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,EAC9B,KAAmB;IAEnB,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAU,CAAC;IAC1C,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAK,KAAmB;IACrD,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC,EAC9B,KAAmB;IAEnB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/B,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;AACH,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC"}
@@ -1,87 +1,123 @@
1
- import { isFixedLengthArray, isMinLengthArray, isBoundedLengthArray, isMaxLengthArray } from './array-utils-length-bounded-array-guard.mjs';
2
-
3
- function asFixedLengthArray(...args) {
4
- switch (args.length) {
5
- case 2:
6
- return asFixedLengthArrayImpl(...args);
7
- case 1:
8
- return (xs) => asFixedLengthArrayImpl(args[0], xs);
9
- }
1
+ import { isBoundedLengthArray, isFixedLengthArray, isMaxLengthArray, isMinLengthArray, } from './array-utils-length-bounded-array-guard.mjs';
2
+ export function asFixedLengthArray(...args) {
3
+ switch (args.length) {
4
+ case 2:
5
+ return asFixedLengthArrayImpl(...args);
6
+ case 1:
7
+ return (xs) => asFixedLengthArrayImpl(args[0], xs);
8
+ }
10
9
  }
11
10
  const asFixedLengthArrayImpl = (length, xs) => {
12
- const actualLength = xs.length;
13
- if (!isFixedLengthArray(length, xs)) {
14
- throw new TypeError(
15
- `Expected an array of length ${length}, got an array of length ${actualLength}`
16
- );
17
- }
18
- return xs;
11
+ const actualLength = xs.length;
12
+ if (!isFixedLengthArray(length, xs)) {
13
+ throw new TypeError(`Expected an array of length ${length}, got an array of length ${actualLength}`);
14
+ }
15
+ return xs;
19
16
  };
20
- function asMinLengthArray(...args) {
21
- switch (args.length) {
22
- case 2:
23
- return asMinLengthArrayImpl(...args);
24
- case 1:
25
- return (xs) => asMinLengthArrayImpl(args[0], xs);
26
- }
17
+ export function asMinLengthArray(...args) {
18
+ switch (args.length) {
19
+ case 2:
20
+ return asMinLengthArrayImpl(...args);
21
+ case 1:
22
+ return (xs) => asMinLengthArrayImpl(args[0], xs);
23
+ }
27
24
  }
28
25
  const asMinLengthArrayImpl = (minLength, xs) => {
29
- const actualLength = xs.length;
30
- if (!isMinLengthArray(minLength, xs)) {
31
- throw new TypeError(
32
- `Expected an array of length >= ${minLength}, got an array of length ${actualLength}`
33
- );
34
- }
35
- return xs;
26
+ const actualLength = xs.length;
27
+ if (!isMinLengthArray(minLength, xs)) {
28
+ throw new TypeError(`Expected an array of length >= ${minLength}, got an array of length ${actualLength}`);
29
+ }
30
+ return xs;
36
31
  };
37
- function asMaxLengthArray(...args) {
38
- switch (args.length) {
39
- case 2:
40
- return asMaxLengthArrayImpl(...args);
41
- case 1:
42
- return (xs) => asMaxLengthArrayImpl(args[0], xs);
43
- }
32
+ export function asMaxLengthArray(...args) {
33
+ switch (args.length) {
34
+ case 2:
35
+ return asMaxLengthArrayImpl(...args);
36
+ case 1:
37
+ return (xs) => asMaxLengthArrayImpl(args[0], xs);
38
+ }
44
39
  }
45
40
  const asMaxLengthArrayImpl = (maxLength, xs) => {
46
- const actualLength = xs.length;
47
- if (!isMaxLengthArray(maxLength, xs)) {
48
- throw new TypeError(
49
- `Expected an array of length <= ${maxLength}, got an array of length ${actualLength}`
50
- );
51
- }
52
- return xs;
41
+ const actualLength = xs.length;
42
+ if (!isMaxLengthArray(maxLength, xs)) {
43
+ throw new TypeError(`Expected an array of length <= ${maxLength}, got an array of length ${actualLength}`);
44
+ }
45
+ return xs;
53
46
  };
54
- function asBoundedLengthArray(...args) {
55
- switch (args.length) {
56
- case 3:
57
- return asBoundedLengthArrayImpl(...args);
58
- case 2:
59
- return (xs) => asBoundedLengthArrayImpl(args[0], args[1], xs);
60
- }
47
+ export function asBoundedLengthArray(...args) {
48
+ switch (args.length) {
49
+ case 3:
50
+ return asBoundedLengthArrayImpl(...args);
51
+ case 2:
52
+ return (xs) => asBoundedLengthArrayImpl(args[0], args[1], xs);
53
+ }
61
54
  }
62
55
  const asBoundedLengthArrayImpl = (minLength, maxLength, xs) => {
63
- const actualLength = xs.length;
64
- if (!isBoundedLengthArray(minLength, maxLength, xs)) {
65
- throw new TypeError(
66
- `Expected an array of length in [${minLength}, ${maxLength}], got an array of length ${actualLength}`
67
- );
68
- }
69
- return xs;
56
+ const actualLength = xs.length;
57
+ if (!isBoundedLengthArray(minLength, maxLength, xs)) {
58
+ throw new TypeError(`Expected an array of length in [${minLength}, ${maxLength}], got an array of length ${actualLength}`);
59
+ }
60
+ return xs;
70
61
  };
71
- const asEmptyArray = (xs) => {
72
- if (!isFixedLengthArray(0, xs)) {
73
- throw new TypeError(
74
- `Expected an empty array, got an array of length ${xs.length}`
75
- );
76
- }
77
- return xs;
62
+ /**
63
+ * Casts an array to `FixedLengthArray<0, E>` after checking that it is empty.
64
+ *
65
+ * `Arr.isEmpty` narrows to that same type, so this is its cast counterpart —
66
+ * the length-0 specialization of {@link asFixedLengthArray}. Use this instead
67
+ * of writing `xs as unknown as FixedLengthArray<0, E>`: the length is verified
68
+ * at runtime, and the original array type is preserved via intersection.
69
+ *
70
+ * @example
71
+ *
72
+ * ```ts
73
+ * const nothing = Arr.asEmptyArray([]);
74
+ *
75
+ * const atMost5: MaxLengthArray<5, never> = nothing; // OK (0 <= 5)
76
+ *
77
+ * // Arr.asEmptyArray([1]); // throws TypeError
78
+ * ```
79
+ *
80
+ * @template Xs - The input array type (tuple types are preserved).
81
+ * @param xs - The array to cast.
82
+ * @returns `xs` typed as `FixedLengthArray<0, Xs[number]> & Xs`.
83
+ * @throws {TypeError} If `xs` is not empty.
84
+ */
85
+ export const asEmptyArray = (xs) => {
86
+ if (!isFixedLengthArray(0, xs)) {
87
+ throw new TypeError(`Expected an empty array, got an array of length ${xs.length}`);
88
+ }
89
+ return xs;
78
90
  };
79
- const asNonEmptyArray = (xs) => {
80
- if (!isMinLengthArray(1, xs)) {
81
- throw new TypeError("Expected a non-empty array, got an empty array");
82
- }
83
- return xs;
91
+ /**
92
+ * Casts an array to `NonEmptyArray<E>` after checking that it has at least one
93
+ * element.
94
+ *
95
+ * `NonEmptyArray<E>` is an alias of `MinLengthArray<1, E>`, so this is the
96
+ * length-1 specialization of {@link asMinLengthArray}. Use this instead of
97
+ * writing `xs as unknown as NonEmptyArray<E>`: the length is verified at
98
+ * runtime, and the original array type (e.g. tuple types) is preserved via
99
+ * intersection, so the result also benefits from the structural tuple prefix
100
+ * (`xs[0]` without `undefined` under `noUncheckedIndexedAccess`).
101
+ *
102
+ * @example
103
+ *
104
+ * ```ts
105
+ * const history = Arr.asNonEmptyArray([0, 1, 2, 3]);
106
+ *
107
+ * const first: number = history[0]; // OK — no `undefined`
108
+ *
109
+ * // Arr.asNonEmptyArray([]); // throws TypeError
110
+ * ```
111
+ *
112
+ * @template Xs - The input array type (tuple types are preserved).
113
+ * @param xs - The array to cast.
114
+ * @returns `xs` typed as `NonEmptyArray<Xs[number]> & Xs`.
115
+ * @throws {TypeError} If `xs` is empty.
116
+ */
117
+ export const asNonEmptyArray = (xs) => {
118
+ if (!isMinLengthArray(1, xs)) {
119
+ throw new TypeError('Expected a non-empty array, got an empty array');
120
+ }
121
+ return xs;
84
122
  };
85
-
86
- export { asBoundedLengthArray, asEmptyArray, asFixedLengthArray, asMaxLengthArray, asMinLengthArray, asNonEmptyArray };
87
- //# sourceMappingURL=array-utils-length-bounded-array-cast.mjs.map
123
+ //# sourceMappingURL=array-utils-length-bounded-array-cast.mjs.map