ts-data-forge 3.2.0 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (426) hide show
  1. package/README.md +45 -21
  2. package/dist/array/impl/array-utils-creation.d.mts +116 -0
  3. package/dist/array/impl/array-utils-creation.d.mts.map +1 -0
  4. package/dist/array/impl/array-utils-creation.mjs +110 -0
  5. package/dist/array/impl/array-utils-creation.mjs.map +1 -0
  6. package/dist/array/impl/array-utils-element-access.d.mts +61 -0
  7. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -0
  8. package/dist/array/impl/array-utils-element-access.mjs +66 -0
  9. package/dist/array/impl/array-utils-element-access.mjs.map +1 -0
  10. package/dist/array/impl/array-utils-iterators.d.mts +59 -0
  11. package/dist/array/impl/array-utils-iterators.d.mts.map +1 -0
  12. package/dist/array/impl/array-utils-iterators.mjs +104 -0
  13. package/dist/array/impl/array-utils-iterators.mjs.map +1 -0
  14. package/dist/array/impl/array-utils-modification.d.mts +154 -0
  15. package/dist/array/impl/array-utils-modification.d.mts.map +1 -0
  16. package/dist/array/impl/array-utils-modification.mjs +139 -0
  17. package/dist/array/impl/array-utils-modification.mjs.map +1 -0
  18. package/dist/array/impl/array-utils-reducing-value.d.mts +214 -0
  19. package/dist/array/impl/array-utils-reducing-value.d.mts.map +1 -0
  20. package/dist/array/impl/array-utils-reducing-value.mjs +160 -0
  21. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
  22. package/dist/array/impl/array-utils-search.d.mts +179 -0
  23. package/dist/array/impl/array-utils-search.d.mts.map +1 -0
  24. package/dist/array/impl/array-utils-search.mjs +153 -0
  25. package/dist/array/impl/array-utils-search.mjs.map +1 -0
  26. package/dist/array/impl/array-utils-set-op.d.mts +100 -0
  27. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -0
  28. package/dist/array/impl/array-utils-set-op.mjs +137 -0
  29. package/dist/array/impl/array-utils-set-op.mjs.map +1 -0
  30. package/dist/array/impl/array-utils-size.d.mts +24 -0
  31. package/dist/array/impl/array-utils-size.d.mts.map +1 -0
  32. package/dist/array/impl/array-utils-size.mjs +28 -0
  33. package/dist/array/impl/array-utils-size.mjs.map +1 -0
  34. package/dist/array/impl/array-utils-slice-clamped.d.mts +18 -0
  35. package/dist/array/impl/array-utils-slice-clamped.d.mts.map +1 -0
  36. package/dist/array/impl/array-utils-slice-clamped.mjs +49 -0
  37. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -0
  38. package/dist/array/impl/array-utils-slicing.d.mts +120 -0
  39. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -0
  40. package/dist/array/impl/array-utils-slicing.mjs +140 -0
  41. package/dist/array/impl/array-utils-slicing.mjs.map +1 -0
  42. package/dist/array/impl/array-utils-transformation.d.mts +348 -0
  43. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -0
  44. package/dist/array/impl/array-utils-transformation.mjs +331 -0
  45. package/dist/array/impl/array-utils-transformation.mjs.map +1 -0
  46. package/dist/array/impl/array-utils-validation.d.mts +149 -0
  47. package/dist/array/impl/array-utils-validation.d.mts.map +1 -0
  48. package/dist/array/impl/array-utils-validation.mjs +166 -0
  49. package/dist/array/impl/array-utils-validation.mjs.map +1 -0
  50. package/dist/array/impl/index.d.mts +13 -0
  51. package/dist/array/impl/index.d.mts.map +1 -0
  52. package/dist/array/impl/index.mjs +13 -0
  53. package/dist/array/impl/index.mjs.map +1 -0
  54. package/dist/array/index.d.mts +1 -1
  55. package/dist/array/index.d.mts.map +1 -1
  56. package/dist/array/index.mjs +2 -1
  57. package/dist/array/index.mjs.map +1 -1
  58. package/dist/collections/imap-mapped.d.mts +83 -253
  59. package/dist/collections/imap-mapped.d.mts.map +1 -1
  60. package/dist/collections/imap-mapped.mjs +33 -164
  61. package/dist/collections/imap-mapped.mjs.map +1 -1
  62. package/dist/collections/imap.d.mts +436 -163
  63. package/dist/collections/imap.d.mts.map +1 -1
  64. package/dist/collections/imap.mjs +74 -94
  65. package/dist/collections/imap.mjs.map +1 -1
  66. package/dist/collections/iset-mapped.d.mts +828 -345
  67. package/dist/collections/iset-mapped.d.mts.map +1 -1
  68. package/dist/collections/iset-mapped.mjs +200 -242
  69. package/dist/collections/iset-mapped.mjs.map +1 -1
  70. package/dist/collections/iset.d.mts +397 -205
  71. package/dist/collections/iset.d.mts.map +1 -1
  72. package/dist/collections/iset.mjs +102 -184
  73. package/dist/collections/iset.mjs.map +1 -1
  74. package/dist/collections/queue.d.mts +155 -135
  75. package/dist/collections/queue.d.mts.map +1 -1
  76. package/dist/collections/queue.mjs +55 -156
  77. package/dist/collections/queue.mjs.map +1 -1
  78. package/dist/collections/stack.d.mts +154 -154
  79. package/dist/collections/stack.d.mts.map +1 -1
  80. package/dist/collections/stack.mjs +54 -203
  81. package/dist/collections/stack.mjs.map +1 -1
  82. package/dist/entry-point.d.mts +3 -0
  83. package/dist/entry-point.d.mts.map +1 -0
  84. package/dist/entry-point.mjs +62 -0
  85. package/dist/entry-point.mjs.map +1 -0
  86. package/dist/expect-type.d.mts +43 -172
  87. package/dist/expect-type.d.mts.map +1 -1
  88. package/dist/expect-type.mjs +43 -172
  89. package/dist/expect-type.mjs.map +1 -1
  90. package/dist/functional/match.d.mts +35 -140
  91. package/dist/functional/match.d.mts.map +1 -1
  92. package/dist/functional/match.mjs.map +1 -1
  93. package/dist/functional/optional.d.mts +282 -160
  94. package/dist/functional/optional.d.mts.map +1 -1
  95. package/dist/functional/optional.mjs +131 -71
  96. package/dist/functional/optional.mjs.map +1 -1
  97. package/dist/functional/pipe.d.mts +59 -113
  98. package/dist/functional/pipe.d.mts.map +1 -1
  99. package/dist/functional/pipe.mjs.map +1 -1
  100. package/dist/functional/result.d.mts +433 -332
  101. package/dist/functional/result.d.mts.map +1 -1
  102. package/dist/functional/result.mjs +233 -239
  103. package/dist/functional/result.mjs.map +1 -1
  104. package/dist/globals.d.mts +12 -5
  105. package/dist/guard/has-key.d.mts +23 -74
  106. package/dist/guard/has-key.d.mts.map +1 -1
  107. package/dist/guard/has-key.mjs +23 -74
  108. package/dist/guard/has-key.mjs.map +1 -1
  109. package/dist/guard/is-non-empty-string.d.mts +20 -87
  110. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  111. package/dist/guard/is-non-empty-string.mjs +20 -87
  112. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  113. package/dist/guard/is-non-null-object.d.mts +14 -84
  114. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  115. package/dist/guard/is-non-null-object.mjs +14 -84
  116. package/dist/guard/is-non-null-object.mjs.map +1 -1
  117. package/dist/guard/is-primitive.d.mts +13 -126
  118. package/dist/guard/is-primitive.d.mts.map +1 -1
  119. package/dist/guard/is-primitive.mjs +13 -126
  120. package/dist/guard/is-primitive.mjs.map +1 -1
  121. package/dist/guard/is-record.d.mts +21 -132
  122. package/dist/guard/is-record.d.mts.map +1 -1
  123. package/dist/guard/is-record.mjs +21 -132
  124. package/dist/guard/is-record.mjs.map +1 -1
  125. package/dist/guard/is-type.d.mts +201 -238
  126. package/dist/guard/is-type.d.mts.map +1 -1
  127. package/dist/guard/is-type.mjs +201 -238
  128. package/dist/guard/is-type.mjs.map +1 -1
  129. package/dist/guard/key-is-in.d.mts +22 -139
  130. package/dist/guard/key-is-in.d.mts.map +1 -1
  131. package/dist/guard/key-is-in.mjs +22 -139
  132. package/dist/guard/key-is-in.mjs.map +1 -1
  133. package/dist/index.d.mts +0 -1
  134. package/dist/index.d.mts.map +1 -1
  135. package/dist/index.mjs +0 -1
  136. package/dist/index.mjs.map +1 -1
  137. package/dist/iterator/range.d.mts +29 -62
  138. package/dist/iterator/range.d.mts.map +1 -1
  139. package/dist/iterator/range.mjs.map +1 -1
  140. package/dist/json/json.d.mts +191 -121
  141. package/dist/json/json.d.mts.map +1 -1
  142. package/dist/json/json.mjs +238 -136
  143. package/dist/json/json.mjs.map +1 -1
  144. package/dist/number/branded-types/finite-number.d.mts +24 -156
  145. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  146. package/dist/number/branded-types/finite-number.mjs +27 -159
  147. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  148. package/dist/number/branded-types/int.d.mts +122 -120
  149. package/dist/number/branded-types/int.d.mts.map +1 -1
  150. package/dist/number/branded-types/int.mjs +122 -120
  151. package/dist/number/branded-types/int.mjs.map +1 -1
  152. package/dist/number/branded-types/int16.d.mts +22 -30
  153. package/dist/number/branded-types/int16.d.mts.map +1 -1
  154. package/dist/number/branded-types/int16.mjs +22 -30
  155. package/dist/number/branded-types/int16.mjs.map +1 -1
  156. package/dist/number/branded-types/int32.d.mts +22 -31
  157. package/dist/number/branded-types/int32.d.mts.map +1 -1
  158. package/dist/number/branded-types/int32.mjs +22 -31
  159. package/dist/number/branded-types/int32.mjs.map +1 -1
  160. package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
  161. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  162. package/dist/number/branded-types/non-negative-finite-number.mjs +31 -39
  163. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  164. package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
  165. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  166. package/dist/number/branded-types/non-negative-int16.mjs +24 -34
  167. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  168. package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
  169. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  170. package/dist/number/branded-types/non-negative-int32.mjs +26 -35
  171. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  172. package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
  173. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  174. package/dist/number/branded-types/non-zero-finite-number.mjs +25 -40
  175. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  176. package/dist/number/branded-types/non-zero-int.d.mts +15 -30
  177. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  178. package/dist/number/branded-types/non-zero-int.mjs +15 -30
  179. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  180. package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
  181. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  182. package/dist/number/branded-types/non-zero-int16.mjs +27 -35
  183. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  184. package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
  185. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  186. package/dist/number/branded-types/non-zero-int32.mjs +29 -36
  187. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  188. package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
  189. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  190. package/dist/number/branded-types/non-zero-safe-int.mjs +39 -40
  191. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  192. package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
  193. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  194. package/dist/number/branded-types/non-zero-uint16.mjs +24 -35
  195. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  196. package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
  197. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  198. package/dist/number/branded-types/non-zero-uint32.mjs +24 -35
  199. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  200. package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
  201. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  202. package/dist/number/branded-types/positive-finite-number.mjs +29 -43
  203. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  204. package/dist/number/branded-types/positive-int.d.mts +133 -123
  205. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  206. package/dist/number/branded-types/positive-int.mjs +133 -123
  207. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  208. package/dist/number/branded-types/positive-int16.d.mts +24 -35
  209. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  210. package/dist/number/branded-types/positive-int16.mjs +24 -35
  211. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  212. package/dist/number/branded-types/positive-int32.d.mts +24 -35
  213. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  214. package/dist/number/branded-types/positive-int32.mjs +24 -35
  215. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  216. package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
  217. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  218. package/dist/number/branded-types/positive-safe-int.mjs +160 -34
  219. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  220. package/dist/number/branded-types/positive-uint16.d.mts +24 -35
  221. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  222. package/dist/number/branded-types/positive-uint16.mjs +24 -35
  223. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  224. package/dist/number/branded-types/positive-uint32.d.mts +26 -36
  225. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  226. package/dist/number/branded-types/positive-uint32.mjs +26 -36
  227. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  228. package/dist/number/branded-types/safe-int.d.mts +140 -99
  229. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  230. package/dist/number/branded-types/safe-int.mjs +142 -101
  231. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  232. package/dist/number/branded-types/safe-uint.d.mts +24 -33
  233. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  234. package/dist/number/branded-types/safe-uint.mjs +25 -34
  235. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  236. package/dist/number/branded-types/uint.d.mts +121 -30
  237. package/dist/number/branded-types/uint.d.mts.map +1 -1
  238. package/dist/number/branded-types/uint.mjs +121 -30
  239. package/dist/number/branded-types/uint.mjs.map +1 -1
  240. package/dist/number/branded-types/uint16.d.mts +26 -34
  241. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  242. package/dist/number/branded-types/uint16.mjs +26 -34
  243. package/dist/number/branded-types/uint16.mjs.map +1 -1
  244. package/dist/number/branded-types/uint32.d.mts +26 -68
  245. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  246. package/dist/number/branded-types/uint32.mjs +26 -68
  247. package/dist/number/branded-types/uint32.mjs.map +1 -1
  248. package/dist/number/enum/int8.d.mts +37 -101
  249. package/dist/number/enum/int8.d.mts.map +1 -1
  250. package/dist/number/enum/int8.mjs +39 -170
  251. package/dist/number/enum/int8.mjs.map +1 -1
  252. package/dist/number/enum/uint8.d.mts +45 -55
  253. package/dist/number/enum/uint8.d.mts.map +1 -1
  254. package/dist/number/enum/uint8.mjs +46 -155
  255. package/dist/number/enum/uint8.mjs.map +1 -1
  256. package/dist/number/num.d.mts +145 -206
  257. package/dist/number/num.d.mts.map +1 -1
  258. package/dist/number/num.mjs +143 -199
  259. package/dist/number/num.mjs.map +1 -1
  260. package/dist/number/refined-number-utils.d.mts +97 -21
  261. package/dist/number/refined-number-utils.d.mts.map +1 -1
  262. package/dist/number/refined-number-utils.mjs +91 -20
  263. package/dist/number/refined-number-utils.mjs.map +1 -1
  264. package/dist/object/object.d.mts +126 -208
  265. package/dist/object/object.d.mts.map +1 -1
  266. package/dist/object/object.mjs +68 -102
  267. package/dist/object/object.mjs.map +1 -1
  268. package/dist/others/cast-mutable.d.mts +12 -88
  269. package/dist/others/cast-mutable.d.mts.map +1 -1
  270. package/dist/others/cast-mutable.mjs +13 -89
  271. package/dist/others/cast-mutable.mjs.map +1 -1
  272. package/dist/others/cast-readonly.d.mts +12 -168
  273. package/dist/others/cast-readonly.d.mts.map +1 -1
  274. package/dist/others/cast-readonly.mjs +13 -169
  275. package/dist/others/cast-readonly.mjs.map +1 -1
  276. package/dist/others/if-then.d.mts +6 -83
  277. package/dist/others/if-then.d.mts.map +1 -1
  278. package/dist/others/if-then.mjs +6 -83
  279. package/dist/others/if-then.mjs.map +1 -1
  280. package/dist/others/map-nullable.d.mts +12 -136
  281. package/dist/others/map-nullable.d.mts.map +1 -1
  282. package/dist/others/map-nullable.mjs.map +1 -1
  283. package/dist/others/memoize-function.d.mts +14 -157
  284. package/dist/others/memoize-function.d.mts.map +1 -1
  285. package/dist/others/memoize-function.mjs +14 -157
  286. package/dist/others/memoize-function.mjs.map +1 -1
  287. package/dist/others/tuple.d.mts +33 -151
  288. package/dist/others/tuple.d.mts.map +1 -1
  289. package/dist/others/tuple.mjs +33 -151
  290. package/dist/others/tuple.mjs.map +1 -1
  291. package/dist/others/unknown-to-string.d.mts +11 -125
  292. package/dist/others/unknown-to-string.d.mts.map +1 -1
  293. package/dist/others/unknown-to-string.mjs +14 -127
  294. package/dist/others/unknown-to-string.mjs.map +1 -1
  295. package/dist/promise/promise.d.mts +33 -20
  296. package/dist/promise/promise.d.mts.map +1 -1
  297. package/dist/promise/promise.mjs +34 -21
  298. package/dist/promise/promise.mjs.map +1 -1
  299. package/dist/types.d.mts +1 -1
  300. package/package.json +54 -50
  301. package/src/array/impl/array-utils-creation.mts +192 -0
  302. package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
  303. package/src/array/impl/array-utils-element-access.mts +115 -0
  304. package/src/array/impl/array-utils-element-access.test.mts +151 -0
  305. package/src/array/impl/array-utils-iterators.mts +79 -0
  306. package/src/array/impl/array-utils-iterators.test.mts +98 -0
  307. package/src/array/impl/array-utils-modification.mts +434 -0
  308. package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
  309. package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
  310. package/src/array/impl/array-utils-reducing-value.mts +551 -0
  311. package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +45 -50
  312. package/src/array/impl/array-utils-search.mts +509 -0
  313. package/src/array/impl/array-utils-search.test.mts +346 -0
  314. package/src/array/impl/array-utils-set-op.mts +166 -0
  315. package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
  316. package/src/array/impl/array-utils-size.mts +30 -0
  317. package/src/array/impl/array-utils-size.test.mts +9 -0
  318. package/src/array/impl/array-utils-slice-clamped.mts +51 -0
  319. package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +12 -12
  320. package/src/array/impl/array-utils-slicing.mts +275 -0
  321. package/src/array/impl/array-utils-slicing.test.mts +158 -0
  322. package/src/array/impl/array-utils-transformation.mts +746 -0
  323. package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
  324. package/src/array/impl/array-utils-validation.mts +241 -0
  325. package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
  326. package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
  327. package/src/array/impl/index.mts +12 -0
  328. package/src/array/index.mts +1 -1
  329. package/src/collections/imap-mapped.mts +99 -265
  330. package/src/collections/imap.mts +477 -174
  331. package/src/collections/imap.test.mts +12 -19
  332. package/src/collections/iset-mapped.mts +892 -358
  333. package/src/collections/iset.mts +429 -213
  334. package/src/collections/queue.mts +174 -200
  335. package/src/collections/stack.mts +172 -245
  336. package/src/collections/stack.test.mts +9 -1
  337. package/src/entry-point.mts +2 -0
  338. package/src/expect-type.mts +43 -172
  339. package/src/functional/match.mts +35 -145
  340. package/src/functional/optional.mts +285 -163
  341. package/src/functional/optional.test.mts +4 -1
  342. package/src/functional/pipe.mts +60 -113
  343. package/src/functional/result.mts +452 -351
  344. package/src/functional/result.test.mts +9 -2
  345. package/src/globals.d.mts +12 -5
  346. package/src/guard/has-key.mts +23 -74
  347. package/src/guard/is-non-empty-string.mts +20 -87
  348. package/src/guard/is-non-null-object.mts +14 -84
  349. package/src/guard/is-non-null-object.test.mts +1 -1
  350. package/src/guard/is-primitive.mts +13 -126
  351. package/src/guard/is-primitive.test.mts +1 -1
  352. package/src/guard/is-record.mts +21 -132
  353. package/src/guard/is-record.test.mts +0 -1
  354. package/src/guard/is-type.mts +201 -238
  355. package/src/guard/is-type.test.mts +7 -7
  356. package/src/guard/key-is-in.mts +22 -139
  357. package/src/index.mts +0 -1
  358. package/src/iterator/range.mts +29 -62
  359. package/src/json/json.mts +202 -134
  360. package/src/json/json.test.mts +1 -3
  361. package/src/number/branded-types/finite-number.mts +27 -159
  362. package/src/number/branded-types/int.mts +122 -120
  363. package/src/number/branded-types/int16.mts +22 -30
  364. package/src/number/branded-types/int16.test.mts +24 -24
  365. package/src/number/branded-types/int32.mts +22 -31
  366. package/src/number/branded-types/int32.test.mts +39 -39
  367. package/src/number/branded-types/non-negative-finite-number.mts +31 -39
  368. package/src/number/branded-types/non-negative-int16.mts +24 -34
  369. package/src/number/branded-types/non-negative-int16.test.mts +16 -16
  370. package/src/number/branded-types/non-negative-int32.mts +26 -35
  371. package/src/number/branded-types/non-negative-int32.test.mts +30 -30
  372. package/src/number/branded-types/non-zero-finite-number.mts +25 -40
  373. package/src/number/branded-types/non-zero-int.mts +15 -30
  374. package/src/number/branded-types/non-zero-int16.mts +27 -35
  375. package/src/number/branded-types/non-zero-int16.test.mts +26 -26
  376. package/src/number/branded-types/non-zero-int32.mts +29 -36
  377. package/src/number/branded-types/non-zero-int32.test.mts +45 -42
  378. package/src/number/branded-types/non-zero-safe-int.mts +39 -40
  379. package/src/number/branded-types/non-zero-uint16.mts +24 -35
  380. package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
  381. package/src/number/branded-types/non-zero-uint32.mts +24 -35
  382. package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
  383. package/src/number/branded-types/positive-finite-number.mts +29 -43
  384. package/src/number/branded-types/positive-int.mts +134 -124
  385. package/src/number/branded-types/positive-int16.mts +24 -35
  386. package/src/number/branded-types/positive-int16.test.mts +14 -14
  387. package/src/number/branded-types/positive-int32.mts +24 -35
  388. package/src/number/branded-types/positive-int32.test.mts +26 -26
  389. package/src/number/branded-types/positive-safe-int.mts +160 -34
  390. package/src/number/branded-types/positive-uint16.mts +24 -35
  391. package/src/number/branded-types/positive-uint16.test.mts +16 -16
  392. package/src/number/branded-types/positive-uint32.mts +26 -36
  393. package/src/number/branded-types/positive-uint32.test.mts +31 -28
  394. package/src/number/branded-types/safe-int.mts +142 -101
  395. package/src/number/branded-types/safe-uint.mts +25 -34
  396. package/src/number/branded-types/uint.mts +121 -30
  397. package/src/number/branded-types/uint16.mts +26 -34
  398. package/src/number/branded-types/uint16.test.mts +16 -16
  399. package/src/number/branded-types/uint32.mts +26 -68
  400. package/src/number/branded-types/uint32.test.mts +28 -28
  401. package/src/number/enum/int8.mts +39 -170
  402. package/src/number/enum/uint8.mts +46 -155
  403. package/src/number/num.mts +157 -212
  404. package/src/number/num.test.mts +4 -4
  405. package/src/number/refined-number-utils.mts +109 -26
  406. package/src/object/object.mts +130 -212
  407. package/src/object/object.test.mts +29 -0
  408. package/src/others/cast-mutable.mts +13 -89
  409. package/src/others/cast-mutable.test.mts +80 -0
  410. package/src/others/cast-readonly.mts +13 -169
  411. package/src/others/if-then.mts +6 -83
  412. package/src/others/map-nullable.mts +12 -136
  413. package/src/others/map-nullable.test.mts +6 -6
  414. package/src/others/memoize-function.mts +14 -157
  415. package/src/others/tuple.mts +33 -151
  416. package/src/others/unknown-to-string.mts +15 -127
  417. package/src/others/unknown-to-string.test.mts +14 -2
  418. package/src/promise/promise.mts +34 -21
  419. package/src/promise/promise.test.mts +43 -0
  420. package/dist/array/array-utils.d.mts +0 -2956
  421. package/dist/array/array-utils.d.mts.map +0 -1
  422. package/dist/array/array-utils.mjs +0 -1838
  423. package/dist/array/array-utils.mjs.map +0 -1
  424. package/src/array/array-utils-search.test.mts +0 -169
  425. package/src/array/array-utils-slicing.test.mts +0 -274
  426. package/src/array/array-utils.mts +0 -4834
@@ -0,0 +1,346 @@
1
+ import { expectType } from '../../expect-type.mjs';
2
+ import { Optional } from '../../functional/index.mjs';
3
+ import {
4
+ find,
5
+ findIndex,
6
+ findLast,
7
+ findLastIndex,
8
+ indexOf,
9
+ indexOfFrom,
10
+ lastIndexOf,
11
+ lastIndexOfFrom,
12
+ } from './array-utils-search.mjs';
13
+
14
+ describe('Arr search operations', () => {
15
+ describe('find', () => {
16
+ test('should find first element matching predicate', () => {
17
+ const numbers = [1, 2, 3, 4, 5];
18
+ const firstEven = find(numbers, (n) => n % 2 === 0);
19
+ expect(Optional.isSome(firstEven)).toBe(true);
20
+ expect(Optional.unwrap(firstEven)).toBe(2);
21
+ });
22
+
23
+ test('should return None when no element matches', () => {
24
+ const odds = [1, 3, 5];
25
+ const firstEven = find(odds, (n) => n % 2 === 0);
26
+ expect(Optional.isNone(firstEven)).toBe(true);
27
+ });
28
+
29
+ test('should work with curried version', () => {
30
+ const isEven = (n: number): boolean => n % 2 === 0;
31
+ const findEven = find<number>(isEven);
32
+
33
+ const result1 = findEven([1, 2, 3]);
34
+ const result2 = findEven([1, 3, 5]);
35
+
36
+ expect(Optional.isSome(result1)).toBe(true);
37
+ expect(Optional.unwrap(result1)).toBe(2);
38
+ expect(Optional.isNone(result2)).toBe(true);
39
+ });
40
+
41
+ test('should work with type guard predicate', () => {
42
+ const values: readonly (string | number)[] = [1, 'a', 2, 'b'];
43
+ const firstString = find(
44
+ values,
45
+ (x): x is string => typeof x === 'string',
46
+ );
47
+
48
+ expectType<typeof firstString, Optional<string>>('=');
49
+ expect(Optional.isSome(firstString)).toBe(true);
50
+ expect(Optional.unwrap(firstString)).toBe('a');
51
+ });
52
+
53
+ test('should provide index and array to predicate', () => {
54
+ const numbers = [10, 20, 30];
55
+ const foundWithIndex = find(numbers, (value, index, arr) => {
56
+ expect(arr).toBe(numbers);
57
+ return index === 1 && value === 20;
58
+ });
59
+
60
+ expect(Optional.unwrap(foundWithIndex)).toBe(20);
61
+ });
62
+
63
+ test('should return first match when multiple elements match', () => {
64
+ const numbers = [2, 4, 6, 8];
65
+ const firstEven = find(numbers, (n) => n % 2 === 0);
66
+ expect(Optional.unwrap(firstEven)).toBe(2);
67
+ });
68
+
69
+ test('should work with empty array', () => {
70
+ const empty: readonly number[] = [];
71
+ const result = find(empty, () => true);
72
+ expect(Optional.isNone(result)).toBe(true);
73
+ });
74
+ });
75
+
76
+ describe('findLast', () => {
77
+ test('should find last element matching predicate', () => {
78
+ const numbers = [1, 2, 3, 4, 5];
79
+ const lastEven = findLast(numbers, (n) => n % 2 === 0);
80
+ expect(Optional.isSome(lastEven)).toBe(true);
81
+ expect(Optional.unwrap(lastEven)).toBe(4);
82
+ });
83
+
84
+ test('should return None when no element matches', () => {
85
+ const odds = [1, 3, 5];
86
+ const lastEven = findLast(odds, (n) => n % 2 === 0);
87
+ expect(Optional.isNone(lastEven)).toBe(true);
88
+ });
89
+
90
+ test('should work with curried version', () => {
91
+ const isPositive = (n: number): boolean => n > 0;
92
+ const findLastPositive = findLast(isPositive);
93
+ const result = findLastPositive([-1, 2, -3, 4]);
94
+ expect(Optional.isSome(result)).toBe(true);
95
+ expect(Optional.unwrap(result)).toBe(4);
96
+ });
97
+
98
+ test('should work with empty array', () => {
99
+ const empty: number[] = [];
100
+ const result = findLast(empty, (n) => n > 0);
101
+ expect(Optional.isNone(result)).toBe(true);
102
+ });
103
+
104
+ test('should pass index and array to predicate', () => {
105
+ const numbers = [10, 20, 30, 40];
106
+ const lastWithIndex2 = findLast(numbers, (_, idx, arr) => {
107
+ expect(arr).toBe(numbers);
108
+ return idx === 2;
109
+ });
110
+ expect(Optional.unwrap(lastWithIndex2)).toBe(30);
111
+ });
112
+
113
+ test('should find last occurrence', () => {
114
+ const numbers = [1, 2, 2, 3, 2, 4];
115
+ const lastTwo = findLast(numbers, (n) => n === 2);
116
+ expect(Optional.unwrap(lastTwo)).toBe(2);
117
+
118
+ // Verify it's actually the last occurrence by checking behavior
119
+ const index = numbers.lastIndexOf(2);
120
+ expect(index).toBe(4); // Last 2 is at index 4
121
+ });
122
+ });
123
+
124
+ describe('findIndex', () => {
125
+ test('should find index of matching element', () => {
126
+ const arr = ['a', 'b', 'c'];
127
+ const result = findIndex(arr, (x) => x === 'b');
128
+
129
+ expect(result).toBeGreaterThanOrEqual(0);
130
+ expectType<typeof result, SizeType.Arr | -1>('=');
131
+ expect(result).toBe(1);
132
+ });
133
+
134
+ test('should return None for no match', () => {
135
+ const arr = ['a', 'b', 'c'];
136
+ const result = findIndex(arr, (x) => x === 'd');
137
+
138
+ expect(result).toBe(-1);
139
+ });
140
+ });
141
+
142
+ describe('findLastIndex', () => {
143
+ test('should find last index matching predicate', () => {
144
+ const numbers = [1, 2, 3, 4, 2, 5];
145
+ const lastTwoIndex = findLastIndex(numbers, (n) => n === 2);
146
+ expect(lastTwoIndex).toBe(4);
147
+ });
148
+
149
+ test('should return -1 when no element matches', () => {
150
+ const odds = [1, 3, 5];
151
+ const lastEvenIndex = findLastIndex(odds, (n) => n % 2 === 0);
152
+ expect(lastEvenIndex).toBe(-1);
153
+ });
154
+
155
+ test('should work with curried version', () => {
156
+ const isPositive = (n: number): boolean => n > 0;
157
+ const findLastPositiveIndex = findLastIndex(isPositive);
158
+ const result = findLastPositiveIndex([-1, 2, -3, 4, -5]);
159
+ expect(result).toBe(3); // index of last positive number (4)
160
+ });
161
+
162
+ test('should work with empty array', () => {
163
+ const empty: number[] = [];
164
+ const result = findLastIndex(empty, (n) => n > 0);
165
+ expect(result).toBe(-1);
166
+ });
167
+
168
+ test('should pass index and array to predicate', () => {
169
+ const numbers = [10, 20, 30, 40];
170
+ const lastWithIndex2OrHigher = findLastIndex(numbers, (_, idx, arr) => {
171
+ expect(arr).toBe(numbers);
172
+ return idx >= 2;
173
+ });
174
+ expect(lastWithIndex2OrHigher).toBe(3); // last index >= 2
175
+ });
176
+
177
+ test('should find last occurrence with complex conditions', () => {
178
+ const data = [
179
+ { id: 1, active: true },
180
+ { id: 2, active: false },
181
+ { id: 3, active: true },
182
+ { id: 4, active: false },
183
+ { id: 5, active: true },
184
+ ];
185
+ const lastActiveIndex = findLastIndex(data, (item) => item.active);
186
+ expect(lastActiveIndex).toBe(4); // last active item
187
+ });
188
+
189
+ test('should work with tuples', () => {
190
+ const tuple = [10, 20, 30, 20, 40] as const;
191
+ const lastTwentyIndex = findLastIndex(tuple, (x) => x === 20);
192
+ expect(lastTwentyIndex).toBe(3); // last occurrence of 20
193
+ });
194
+
195
+ test('should search from end to beginning', () => {
196
+ // Verify search order by using side effects
197
+ const numbers = [1, 2, 3, 4, 5];
198
+ const mut_searchOrder: number[] = [];
199
+
200
+ findLastIndex(numbers, (val, idx) => {
201
+ mut_searchOrder.push(idx);
202
+ return val === 3;
203
+ });
204
+
205
+ // Should search from end: 4, 3, 2 (stops at 2 when found)
206
+ expect(mut_searchOrder).toStrictEqual([4, 3, 2]);
207
+ });
208
+
209
+ test('should handle single element array', () => {
210
+ const single = [42];
211
+ const foundIndex = findLastIndex(single, (n) => n === 42);
212
+ const notFoundIndex = findLastIndex(single, (n) => n === 0);
213
+
214
+ expect(foundIndex).toBe(0);
215
+ expect(notFoundIndex).toBe(-1);
216
+ });
217
+
218
+ test('should work with string arrays', () => {
219
+ const words = ['hello', 'world', 'test', 'hello', 'end'];
220
+ const lastHelloIndex = findLastIndex(words, (word) => word === 'hello');
221
+ expect(lastHelloIndex).toBe(3);
222
+ });
223
+ });
224
+
225
+ describe('indexOf', () => {
226
+ test('should find index of element', () => {
227
+ const arr = ['a', 'b', 'c', 'b'];
228
+ const result = indexOf(arr, 'b');
229
+
230
+ expect(result).toBeGreaterThanOrEqual(0);
231
+ if (result !== -1) {
232
+ expectType<typeof result, SizeType.Arr>('=');
233
+ expect(result).toBe(1);
234
+ }
235
+ });
236
+
237
+ test('should return -1 for non-existent element', () => {
238
+ const arr = ['a', 'b', 'c'];
239
+ const result = indexOf(arr, 'd');
240
+
241
+ expect(result).toBe(-1);
242
+ });
243
+ });
244
+
245
+ describe('indexOfFrom', () => {
246
+ test('should find index of element from specified index', () => {
247
+ const arr = ['a', 'b', 'c', 'b'];
248
+ const result = indexOfFrom(arr, 'b', 2);
249
+
250
+ expect(result).toBeGreaterThanOrEqual(0);
251
+ if (result !== -1) {
252
+ expectType<typeof result, SizeType.Arr>('=');
253
+ expect(result).toBe(3);
254
+ }
255
+ });
256
+
257
+ test('should return -1 when element not found from index', () => {
258
+ const arr = ['a', 'b', 'c', 'b'];
259
+ const result = indexOfFrom(arr, 'a', 1);
260
+
261
+ expect(result).toBe(-1);
262
+ });
263
+
264
+ test('should find first occurrence when fromIndex is 0', () => {
265
+ const arr = ['a', 'b', 'c', 'b'];
266
+ const result = indexOfFrom(arr, 'b', 0);
267
+
268
+ expect(result).toBe(1);
269
+ });
270
+
271
+ test('should handle negative fromIndex', () => {
272
+ const arr = ['a', 'b', 'c', 'b'];
273
+ const result = indexOfFrom(arr, 'b', -2);
274
+
275
+ expect(result).toBe(3);
276
+ });
277
+
278
+ test('should handle fromIndex beyond array length', () => {
279
+ const arr = ['a', 'b', 'c'];
280
+ const result = indexOfFrom(arr, 'a', 10);
281
+
282
+ expect(result).toBe(-1);
283
+ });
284
+ });
285
+
286
+ describe('lastIndexOf', () => {
287
+ test('should find last index of element', () => {
288
+ const arr = ['a', 'b', 'c', 'b'];
289
+ const result = lastIndexOf(arr, 'b');
290
+
291
+ expect(result).toBeGreaterThanOrEqual(0);
292
+ if (result !== -1) {
293
+ expectType<typeof result, SizeType.Arr>('=');
294
+ expect(result).toBe(3);
295
+ }
296
+ });
297
+
298
+ test('should return -1 for non-existent element', () => {
299
+ const arr = ['a', 'b', 'c'];
300
+ const result = lastIndexOf(arr, 'd');
301
+
302
+ expect(result).toBe(-1);
303
+ });
304
+ });
305
+
306
+ describe('lastIndexOfFrom', () => {
307
+ test('should find last index of element from specified index', () => {
308
+ const arr = ['a', 'b', 'c', 'b', 'e'];
309
+ const result = lastIndexOfFrom(arr, 'b', 2);
310
+
311
+ expect(result).toBeGreaterThanOrEqual(0);
312
+ if (result !== -1) {
313
+ expectType<typeof result, SizeType.Arr>('=');
314
+ expect(result).toBe(1);
315
+ }
316
+ });
317
+
318
+ test('should return -1 when element not found before index', () => {
319
+ const arr = ['a', 'b', 'c', 'b'];
320
+ const result = lastIndexOfFrom(arr, 'b', 0);
321
+
322
+ expect(result).toBe(-1);
323
+ });
324
+
325
+ test('should find last occurrence when fromIndex covers all elements', () => {
326
+ const arr = ['a', 'b', 'c', 'b'];
327
+ const result = lastIndexOfFrom(arr, 'b', 10);
328
+
329
+ expect(result).toBe(3);
330
+ });
331
+
332
+ test('should handle negative fromIndex', () => {
333
+ const arr = ['a', 'b', 'c', 'b'];
334
+ const result = lastIndexOfFrom(arr, 'b', -1);
335
+
336
+ expect(result).toBe(3);
337
+ });
338
+
339
+ test('should handle fromIndex of 0', () => {
340
+ const arr = ['a', 'b', 'c', 'b'];
341
+ const result = lastIndexOfFrom(arr, 'a', 0);
342
+
343
+ expect(result).toBe(0);
344
+ });
345
+ });
346
+ });
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Checks if two arrays are equal by comparing their elements.
3
+ *
4
+ * @example
5
+ *
6
+ * ```ts
7
+ * const numbers = [1, 2, 3] as const;
8
+ * const sameNumbers = [1, 2, 3] as const;
9
+ * const differentNumbers = [1, 2, 4] as const;
10
+ *
11
+ * assert.ok(Arr.eq(numbers, sameNumbers));
12
+ * assert.notOk(Arr.eq(numbers, differentNumbers));
13
+ * ```
14
+ */
15
+ export const eq = <E,>(
16
+ array1: readonly E[],
17
+ array2: readonly E[],
18
+ equality: (a: E, b: E) => boolean = Object.is,
19
+ ): boolean =>
20
+ array1.length === array2.length &&
21
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
22
+ array1.every((v, i) => equality(v, array2[i]!));
23
+
24
+ /**
25
+ * Alias for `eq`.
26
+ *
27
+ * @see {@link eq}
28
+ */
29
+ export const equal = eq;
30
+
31
+ /**
32
+ * Checks if the first array is a subset of the second array.
33
+ *
34
+ * @example
35
+ *
36
+ * ```ts
37
+ * const subset = [1, 2] as const;
38
+ * const superset = [1, 2, 3] as const;
39
+ * const notSubset = [2, 4] as const;
40
+ *
41
+ * assert.ok(Arr.isSubset(subset, superset));
42
+ * assert.notOk(Arr.isSubset(notSubset, superset));
43
+ * ```
44
+ */
45
+ export const isSubset = <E1 extends Primitive, E2 extends Primitive = E1>(
46
+ array1: readonly E1[],
47
+ array2: readonly E2[],
48
+ ): boolean =>
49
+ array1.every((a) =>
50
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
51
+ array2.includes(a as E1 & E2),
52
+ );
53
+
54
+ /**
55
+ * Checks if the first array is a superset of the second array.
56
+ *
57
+ * @example
58
+ *
59
+ * ```ts
60
+ * const potentialSuperset = ['a', 'b', 'c'] as const;
61
+ * const subset = ['a', 'c'] as const;
62
+ * const notSuperset = ['a', 'd'] as const;
63
+ *
64
+ * assert.ok(Arr.isSuperset(potentialSuperset, subset));
65
+ * assert.notOk(Arr.isSuperset(subset, potentialSuperset));
66
+ * assert.notOk(Arr.isSuperset(potentialSuperset, notSuperset));
67
+ * ```
68
+ */
69
+ export const isSuperset = <E1 extends Primitive, E2 extends Primitive = E1>(
70
+ array1: readonly E1[],
71
+ array2: readonly E2[],
72
+ ): boolean => isSubset(array2, array1);
73
+
74
+ /**
75
+ * Returns the intersection of two arrays.
76
+ *
77
+ * @example
78
+ *
79
+ * ```ts
80
+ * const refs = ['Ada', 'Alan', 'Grace'] as const;
81
+ * const attendees = ['Grace', 'Alan', 'Barbara'] as const;
82
+ *
83
+ * const both = Arr.setIntersection(refs, attendees);
84
+ *
85
+ * assert.deepStrictEqual(both, ['Alan', 'Grace']);
86
+ * ```
87
+ */
88
+ export const setIntersection = <
89
+ E1 extends Primitive,
90
+ E2 extends Primitive = E1,
91
+ >(
92
+ array1: readonly E1[],
93
+ array2: readonly E2[],
94
+ ): readonly (E1 & E2)[] =>
95
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
96
+ array1.filter((e) => array2.includes(e as E1 & E2)) as (E1 & E2)[];
97
+
98
+ /**
99
+ * Returns the set difference of two arrays (elements in first but not in second).
100
+ *
101
+ * @example
102
+ *
103
+ * ```ts
104
+ * const baseline = [1, 2, 3, 4] as const;
105
+ * const removed = [2, 4] as const;
106
+ *
107
+ * const remaining = Arr.setDifference(baseline, removed);
108
+ *
109
+ * assert.deepStrictEqual(remaining, [1, 3]);
110
+ * ```
111
+ */
112
+ export const setDifference = <E extends Primitive>(
113
+ array1: readonly E[],
114
+ array2: readonly E[],
115
+ ): readonly E[] => array1.filter((e) => !array2.includes(e));
116
+
117
+ /**
118
+ * Returns the set difference of two sorted numeric arrays (optimized for sorted arrays).
119
+ *
120
+ * @example
121
+ *
122
+ * ```ts
123
+ * const upcoming = [1, 3, 5, 7, 9] as const;
124
+ * const completed = [3, 4, 7] as const;
125
+ *
126
+ * const remaining = Arr.sortedNumSetDifference(upcoming, completed);
127
+ *
128
+ * const expected = [1, 5, 9] as const;
129
+ *
130
+ * assert.deepStrictEqual(remaining, expected);
131
+ * ```
132
+ */
133
+ export const sortedNumSetDifference = <E extends number>(
134
+ sortedList1: readonly E[],
135
+ sortedList2: readonly E[],
136
+ ): readonly E[] => {
137
+ const mut_result: E[] = [];
138
+ let mut_it1 = 0; // iterator for sortedList1
139
+ let mut_it2 = 0; // iterator for sortedList2
140
+
141
+ while (mut_it1 < sortedList1.length && mut_it2 < sortedList2.length) {
142
+ // Non-null assertions are safe due to loop condition
143
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
144
+ const val1 = sortedList1[mut_it1]!;
145
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
146
+ const val2 = sortedList2[mut_it2]!;
147
+
148
+ if (val1 === val2) {
149
+ mut_it1 += 1;
150
+ mut_it2 += 1;
151
+ } else if (val1 < val2) {
152
+ mut_result.push(val1);
153
+ mut_it1 += 1;
154
+ } else {
155
+ // val1 > val2
156
+ mut_it2 += 1;
157
+ }
158
+ }
159
+ // Add remaining elements from sortedList1
160
+ for (; mut_it1 < sortedList1.length; mut_it1 += 1) {
161
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
162
+ mut_result.push(sortedList1[mut_it1]!);
163
+ }
164
+
165
+ return mut_result;
166
+ };