ts-data-forge 14.6.0 → 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 (409) 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 -291
  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.d.mts.map +1 -1
  44. package/dist/collections/iset-mapped.mjs +448 -263
  45. package/dist/collections/iset-mapped.mjs.map +1 -1
  46. package/dist/collections/iset.mjs +328 -201
  47. package/dist/collections/iset.mjs.map +1 -1
  48. package/dist/collections/queue.mjs +183 -151
  49. package/dist/collections/queue.mjs.map +1 -1
  50. package/dist/collections/stack.mjs +169 -140
  51. package/dist/collections/stack.mjs.map +1 -1
  52. package/dist/entry-point.mjs +4 -77
  53. package/dist/entry-point.mjs.map +1 -1
  54. package/dist/expect-type.mjs +70 -4
  55. package/dist/expect-type.mjs.map +1 -1
  56. package/dist/functional/async-result/async-result.mjs +2 -3
  57. package/dist/functional/async-result/async-result.mjs.map +1 -1
  58. package/dist/functional/async-result/impl/async-result-flat-map.mjs +19 -21
  59. package/dist/functional/async-result/impl/async-result-flat-map.mjs.map +1 -1
  60. package/dist/functional/async-result/impl/async-result-from-promise.mjs +9 -10
  61. package/dist/functional/async-result/impl/async-result-from-promise.mjs.map +1 -1
  62. package/dist/functional/async-result/impl/async-result-from-throwable.mjs +12 -14
  63. package/dist/functional/async-result/impl/async-result-from-throwable.mjs.map +1 -1
  64. package/dist/functional/async-result/impl/async-result-map-err.mjs +16 -19
  65. package/dist/functional/async-result/impl/async-result-map-err.mjs.map +1 -1
  66. package/dist/functional/async-result/impl/async-result-map.mjs +16 -19
  67. package/dist/functional/async-result/impl/async-result-map.mjs.map +1 -1
  68. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs +36 -9
  69. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs.map +1 -1
  70. package/dist/functional/async-result/impl/index.mjs +8 -7
  71. package/dist/functional/async-result/impl/index.mjs.map +1 -1
  72. package/dist/functional/async-result/impl/types.mjs +2 -2
  73. package/dist/functional/async-result/impl/types.mjs.map +1 -1
  74. package/dist/functional/async-result/index.mjs +2 -3
  75. package/dist/functional/async-result/index.mjs.map +1 -1
  76. package/dist/functional/index.mjs +7 -11
  77. package/dist/functional/index.mjs.map +1 -1
  78. package/dist/functional/match.mjs +27 -13
  79. package/dist/functional/match.mjs.map +1 -1
  80. package/dist/functional/optional/impl/index.mjs +19 -18
  81. package/dist/functional/optional/impl/index.mjs.map +1 -1
  82. package/dist/functional/optional/impl/optional-expect-to-be.mjs +16 -18
  83. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
  84. package/dist/functional/optional/impl/optional-filter.mjs +17 -19
  85. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
  86. package/dist/functional/optional/impl/optional-flat-map.mjs +13 -15
  87. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
  88. package/dist/functional/optional/impl/optional-from-nullable.mjs +26 -5
  89. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
  90. package/dist/functional/optional/impl/optional-is-none.mjs +21 -5
  91. package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
  92. package/dist/functional/optional/impl/optional-is-optional.mjs +26 -8
  93. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  94. package/dist/functional/optional/impl/optional-is-some.mjs +22 -5
  95. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
  96. package/dist/functional/optional/impl/optional-map.mjs +16 -18
  97. package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
  98. package/dist/functional/optional/impl/optional-match.mjs +16 -18
  99. package/dist/functional/optional/impl/optional-match.mjs.map +1 -1
  100. package/dist/functional/optional/impl/optional-none.mjs +18 -5
  101. package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
  102. package/dist/functional/optional/impl/optional-or-else.mjs +13 -15
  103. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
  104. package/dist/functional/optional/impl/optional-some.mjs +23 -7
  105. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  106. package/dist/functional/optional/impl/optional-to-nullable.mjs +28 -5
  107. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
  108. package/dist/functional/optional/impl/optional-unwrap-or.mjs +12 -14
  109. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
  110. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +34 -9
  111. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
  112. package/dist/functional/optional/impl/optional-unwrap.mjs +6 -9
  113. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
  114. package/dist/functional/optional/impl/optional-zip.mjs +36 -5
  115. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
  116. package/dist/functional/optional/impl/tag.mjs +4 -5
  117. package/dist/functional/optional/impl/tag.mjs.map +1 -1
  118. package/dist/functional/optional/impl/types.mjs +2 -2
  119. package/dist/functional/optional/impl/types.mjs.map +1 -1
  120. package/dist/functional/optional/index.mjs +2 -3
  121. package/dist/functional/optional/index.mjs.map +1 -1
  122. package/dist/functional/optional/optional.mjs +2 -3
  123. package/dist/functional/optional/optional.mjs.map +1 -1
  124. package/dist/functional/pipe.mjs +42 -14
  125. package/dist/functional/pipe.mjs.map +1 -1
  126. package/dist/functional/result/impl/index.mjs +28 -27
  127. package/dist/functional/result/impl/index.mjs.map +1 -1
  128. package/dist/functional/result/impl/result-err.mjs +29 -7
  129. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  130. package/dist/functional/result/impl/result-expect-to-be.mjs +17 -18
  131. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
  132. package/dist/functional/result/impl/result-flat-map.mjs +18 -21
  133. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
  134. package/dist/functional/result/impl/result-fold.mjs +18 -21
  135. package/dist/functional/result/impl/result-fold.mjs.map +1 -1
  136. package/dist/functional/result/impl/result-from-optional.mjs +17 -20
  137. package/dist/functional/result/impl/result-from-optional.mjs.map +1 -1
  138. package/dist/functional/result/impl/result-from-promise.mjs +37 -8
  139. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
  140. package/dist/functional/result/impl/result-from-throwable.mjs +41 -14
  141. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
  142. package/dist/functional/result/impl/result-is-err.mjs +21 -5
  143. package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
  144. package/dist/functional/result/impl/result-is-ok.mjs +21 -5
  145. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
  146. package/dist/functional/result/impl/result-is-result.mjs +25 -7
  147. package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
  148. package/dist/functional/result/impl/result-map-err.mjs +18 -21
  149. package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
  150. package/dist/functional/result/impl/result-map.mjs +18 -21
  151. package/dist/functional/result/impl/result-map.mjs.map +1 -1
  152. package/dist/functional/result/impl/result-match.mjs +17 -21
  153. package/dist/functional/result/impl/result-match.mjs.map +1 -1
  154. package/dist/functional/result/impl/result-ok.mjs +29 -7
  155. package/dist/functional/result/impl/result-ok.mjs.map +1 -1
  156. package/dist/functional/result/impl/result-or-else.mjs +14 -15
  157. package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
  158. package/dist/functional/result/impl/result-safe-try.mjs +32 -21
  159. package/dist/functional/result/impl/result-safe-try.mjs.map +1 -1
  160. package/dist/functional/result/impl/result-safe-unwrap.mjs +40 -12
  161. package/dist/functional/result/impl/result-safe-unwrap.mjs.map +1 -1
  162. package/dist/functional/result/impl/result-swap.mjs +23 -8
  163. package/dist/functional/result/impl/result-swap.mjs.map +1 -1
  164. package/dist/functional/result/impl/result-to-optional.mjs +30 -7
  165. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
  166. package/dist/functional/result/impl/result-unwrap-err-or.mjs +13 -14
  167. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
  168. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +43 -20
  169. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
  170. package/dist/functional/result/impl/result-unwrap-err.mjs +33 -8
  171. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
  172. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +13 -14
  173. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
  174. package/dist/functional/result/impl/result-unwrap-ok.mjs +6 -9
  175. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
  176. package/dist/functional/result/impl/result-unwrap-throw.mjs +38 -11
  177. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
  178. package/dist/functional/result/impl/result-zip.mjs +35 -5
  179. package/dist/functional/result/impl/result-zip.mjs.map +1 -1
  180. package/dist/functional/result/impl/tag.mjs +4 -5
  181. package/dist/functional/result/impl/tag.mjs.map +1 -1
  182. package/dist/functional/result/impl/types.mjs +2 -2
  183. package/dist/functional/result/impl/types.mjs.map +1 -1
  184. package/dist/functional/result/index.mjs +2 -3
  185. package/dist/functional/result/index.mjs.map +1 -1
  186. package/dist/functional/result/result.mjs +2 -3
  187. package/dist/functional/result/result.mjs.map +1 -1
  188. package/dist/functional/ternary-result/impl/index.mjs +29 -28
  189. package/dist/functional/ternary-result/impl/index.mjs.map +1 -1
  190. package/dist/functional/ternary-result/impl/tag.mjs +6 -6
  191. package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
  192. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +17 -7
  193. package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
  194. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs +15 -18
  195. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
  196. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +28 -32
  197. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
  198. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +24 -26
  199. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
  200. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +21 -8
  201. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
  202. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +28 -13
  203. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
  204. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +19 -5
  205. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
  206. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +21 -5
  207. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
  208. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +28 -8
  209. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
  210. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +20 -5
  211. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
  212. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +17 -18
  213. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
  214. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +20 -23
  215. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
  216. package/dist/functional/ternary-result/impl/ternary-result-map.mjs +24 -26
  217. package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
  218. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +18 -7
  219. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
  220. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +11 -14
  221. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
  222. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +24 -10
  223. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
  224. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs +11 -14
  225. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
  226. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +30 -19
  227. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
  228. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +20 -8
  229. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
  230. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs +11 -14
  231. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
  232. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +7 -9
  233. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
  234. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +30 -22
  235. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
  236. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs +11 -14
  237. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
  238. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +27 -17
  239. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
  240. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +20 -8
  241. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
  242. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +21 -8
  243. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
  244. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +47 -19
  245. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
  246. package/dist/functional/ternary-result/impl/types.mjs +2 -2
  247. package/dist/functional/ternary-result/impl/types.mjs.map +1 -1
  248. package/dist/functional/ternary-result/impl/variant-name.mjs +12 -14
  249. package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
  250. package/dist/functional/ternary-result/index.mjs +2 -3
  251. package/dist/functional/ternary-result/index.mjs.map +1 -1
  252. package/dist/functional/ternary-result/ternary-result.mjs +2 -3
  253. package/dist/functional/ternary-result/ternary-result.mjs.map +1 -1
  254. package/dist/guard/has-key.mjs +43 -4
  255. package/dist/guard/has-key.mjs.map +1 -1
  256. package/dist/guard/index.mjs +8 -8
  257. package/dist/guard/index.mjs.map +1 -1
  258. package/dist/guard/is-non-empty-string.mjs +39 -4
  259. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  260. package/dist/guard/is-non-null-object.mjs +36 -4
  261. package/dist/guard/is-non-null-object.mjs.map +1 -1
  262. package/dist/guard/is-primitive.mjs +46 -15
  263. package/dist/guard/is-primitive.mjs.map +1 -1
  264. package/dist/guard/is-record.mjs +89 -6
  265. package/dist/guard/is-record.mjs.map +1 -1
  266. package/dist/guard/is-type.mjs +404 -19
  267. package/dist/guard/is-type.mjs.map +1 -1
  268. package/dist/guard/key-is-in.mjs +42 -4
  269. package/dist/guard/key-is-in.mjs.map +1 -1
  270. package/dist/index.mjs +12 -65
  271. package/dist/index.mjs.map +1 -1
  272. package/dist/iterator/index.mjs +2 -2
  273. package/dist/iterator/index.mjs.map +1 -1
  274. package/dist/iterator/range.mjs +19 -57
  275. package/dist/iterator/range.mjs.map +1 -1
  276. package/dist/json/index.mjs +2 -2
  277. package/dist/json/index.mjs.map +1 -1
  278. package/dist/json/json.mjs +346 -105
  279. package/dist/json/json.mjs.map +1 -1
  280. package/dist/number/branded-types/finite-number.mjs +148 -137
  281. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  282. package/dist/number/branded-types/index.mjs +33 -33
  283. package/dist/number/branded-types/index.mjs.map +1 -1
  284. package/dist/number/branded-types/int.mjs +245 -209
  285. package/dist/number/branded-types/int.mjs.map +1 -1
  286. package/dist/number/branded-types/int16.mjs +141 -131
  287. package/dist/number/branded-types/int16.mjs.map +1 -1
  288. package/dist/number/branded-types/int32.mjs +141 -131
  289. package/dist/number/branded-types/int32.mjs.map +1 -1
  290. package/dist/number/branded-types/negative-finite-number.mjs +155 -149
  291. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  292. package/dist/number/branded-types/negative-int.mjs +125 -110
  293. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  294. package/dist/number/branded-types/negative-safe-int.mjs +126 -115
  295. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  296. package/dist/number/branded-types/non-negative-finite-number.mjs +164 -154
  297. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  298. package/dist/number/branded-types/non-negative-int16.mjs +137 -125
  299. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  300. package/dist/number/branded-types/non-negative-int32.mjs +137 -125
  301. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  302. package/dist/number/branded-types/non-positive-finite-number.mjs +143 -139
  303. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  304. package/dist/number/branded-types/non-positive-int.mjs +116 -99
  305. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  306. package/dist/number/branded-types/non-positive-safe-int.mjs +118 -107
  307. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  308. package/dist/number/branded-types/non-zero-finite-number.mjs +144 -129
  309. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  310. package/dist/number/branded-types/non-zero-int.mjs +102 -82
  311. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  312. package/dist/number/branded-types/non-zero-int16.mjs +118 -105
  313. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  314. package/dist/number/branded-types/non-zero-int32.mjs +118 -105
  315. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  316. package/dist/number/branded-types/non-zero-safe-int.mjs +122 -108
  317. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  318. package/dist/number/branded-types/non-zero-uint16.mjs +118 -104
  319. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  320. package/dist/number/branded-types/non-zero-uint32.mjs +118 -104
  321. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  322. package/dist/number/branded-types/positive-finite-number.mjs +167 -160
  323. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  324. package/dist/number/branded-types/positive-int.mjs +260 -224
  325. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  326. package/dist/number/branded-types/positive-int16.mjs +134 -122
  327. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  328. package/dist/number/branded-types/positive-int32.mjs +134 -122
  329. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  330. package/dist/number/branded-types/positive-safe-int.mjs +292 -258
  331. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  332. package/dist/number/branded-types/positive-uint16.mjs +134 -122
  333. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  334. package/dist/number/branded-types/positive-uint32.mjs +134 -122
  335. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  336. package/dist/number/branded-types/safe-int.mjs +284 -255
  337. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  338. package/dist/number/branded-types/safe-uint.mjs +135 -124
  339. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  340. package/dist/number/branded-types/uint.mjs +248 -211
  341. package/dist/number/branded-types/uint.mjs.map +1 -1
  342. package/dist/number/branded-types/uint16.mjs +132 -121
  343. package/dist/number/branded-types/uint16.mjs.map +1 -1
  344. package/dist/number/branded-types/uint32.mjs +132 -121
  345. package/dist/number/branded-types/uint32.mjs.map +1 -1
  346. package/dist/number/enum/index.mjs +3 -3
  347. package/dist/number/enum/index.mjs.map +1 -1
  348. package/dist/number/enum/int8.mjs +146 -131
  349. package/dist/number/enum/int8.mjs.map +1 -1
  350. package/dist/number/enum/uint8.mjs +133 -119
  351. package/dist/number/enum/uint8.mjs.map +1 -1
  352. package/dist/number/index.mjs +6 -37
  353. package/dist/number/index.mjs.map +1 -1
  354. package/dist/number/num-arithmetic-types.mjs +42 -1
  355. package/dist/number/num-arithmetic-types.mjs.map +1 -1
  356. package/dist/number/num.mjs +541 -83
  357. package/dist/number/num.mjs.map +1 -1
  358. package/dist/number/refined-number-utils.mjs +294 -133
  359. package/dist/number/refined-number-utils.mjs.map +1 -1
  360. package/dist/object/index.mjs +2 -2
  361. package/dist/object/index.mjs.map +1 -1
  362. package/dist/object/object.mjs +355 -202
  363. package/dist/object/object.mjs.map +1 -1
  364. package/dist/others/cast-mutable.mjs +38 -11
  365. package/dist/others/cast-mutable.mjs.map +1 -1
  366. package/dist/others/cast-readonly.mjs +37 -11
  367. package/dist/others/cast-readonly.mjs.map +1 -1
  368. package/dist/others/debounce-function.mjs +22 -11
  369. package/dist/others/debounce-function.mjs.map +1 -1
  370. package/dist/others/fast-deep-equal.mjs +70 -51
  371. package/dist/others/fast-deep-equal.mjs.map +1 -1
  372. package/dist/others/if-then.mjs +32 -5
  373. package/dist/others/if-then.mjs.map +1 -1
  374. package/dist/others/index.mjs +10 -10
  375. package/dist/others/index.mjs.map +1 -1
  376. package/dist/others/map-nullable.mjs +11 -13
  377. package/dist/others/map-nullable.mjs.map +1 -1
  378. package/dist/others/memoize-function.mjs +14 -16
  379. package/dist/others/memoize-function.mjs.map +1 -1
  380. package/dist/others/tuple.mjs +52 -4
  381. package/dist/others/tuple.mjs.map +1 -1
  382. package/dist/others/unknown-to-string.mjs +91 -47
  383. package/dist/others/unknown-to-string.mjs.map +1 -1
  384. package/dist/promise/index.mjs +2 -2
  385. package/dist/promise/index.mjs.map +1 -1
  386. package/dist/promise/promise.mjs +51 -10
  387. package/dist/promise/promise.mjs.map +1 -1
  388. package/dist/string/index.mjs +2 -2
  389. package/dist/string/index.mjs.map +1 -1
  390. package/dist/string/str.mjs +250 -83
  391. package/dist/string/str.mjs.map +1 -1
  392. package/dist/types.mjs +3 -2
  393. package/dist/types.mjs.map +1 -1
  394. package/package.json +5 -6
  395. package/src/array/impl/array-utils-length-constraint-preservation.test.mts +2 -2
  396. package/src/collections/imap-mapped.mts +4 -4
  397. package/src/collections/imap.mts +1 -1
  398. package/src/collections/imap.test.mts +1 -1
  399. package/src/collections/iset-mapped.mts +2 -1
  400. package/src/collections/iset.mts +1 -1
  401. package/src/functional/async-result.test.mts +3 -2
  402. package/src/functional/optional.test.mts +2 -1
  403. package/src/functional/result.test.mts +0 -2
  404. package/src/guard/is-non-empty-string.test.mts +2 -2
  405. package/src/guard/is-non-null-object.test.mts +3 -3
  406. package/src/guard/is-primitive.test.mts +3 -3
  407. package/src/guard/is-type.test.mts +3 -3
  408. package/src/json/json.test.mts +1 -1
  409. package/src/number/enum/int8.mts +1 -1
@@ -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