ts-data-forge 3.3.0 → 4.0.0

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 (664) hide show
  1. package/README.md +37 -13
  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 +60 -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 +213 -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 +162 -0
  21. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -0
  22. package/dist/array/impl/array-utils-search.d.mts +178 -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 +329 -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 -254
  59. package/dist/collections/imap-mapped.d.mts.map +1 -1
  60. package/dist/collections/imap-mapped.mjs +40 -170
  61. package/dist/collections/imap-mapped.mjs.map +1 -1
  62. package/dist/collections/imap.d.mts +436 -164
  63. package/dist/collections/imap.d.mts.map +1 -1
  64. package/dist/collections/imap.mjs +83 -101
  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 -136
  75. package/dist/collections/queue.d.mts.map +1 -1
  76. package/dist/collections/queue.mjs +59 -160
  77. package/dist/collections/queue.mjs.map +1 -1
  78. package/dist/collections/stack.d.mts +154 -155
  79. package/dist/collections/stack.d.mts.map +1 -1
  80. package/dist/collections/stack.mjs +58 -207
  81. package/dist/collections/stack.mjs.map +1 -1
  82. package/dist/entry-point.d.mts +2 -0
  83. package/dist/entry-point.d.mts.map +1 -1
  84. package/dist/entry-point.mjs +8 -5
  85. package/dist/entry-point.mjs.map +1 -1
  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/index.d.mts +2 -2
  91. package/dist/functional/index.d.mts.map +1 -1
  92. package/dist/functional/index.mjs +4 -2
  93. package/dist/functional/index.mjs.map +1 -1
  94. package/dist/functional/match.d.mts +35 -140
  95. package/dist/functional/match.d.mts.map +1 -1
  96. package/dist/functional/match.mjs.map +1 -1
  97. package/dist/functional/optional/impl/index.d.mts +18 -0
  98. package/dist/functional/optional/impl/index.d.mts.map +1 -0
  99. package/dist/functional/optional/impl/index.mjs +17 -0
  100. package/dist/functional/optional/impl/index.mjs.map +1 -0
  101. package/dist/functional/optional/impl/optional-expect-to-be.d.mts +29 -0
  102. package/dist/functional/optional/impl/optional-expect-to-be.d.mts.map +1 -0
  103. package/dist/functional/optional/impl/optional-expect-to-be.mjs +25 -0
  104. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -0
  105. package/dist/functional/optional/impl/optional-filter.d.mts +29 -0
  106. package/dist/functional/optional/impl/optional-filter.d.mts.map +1 -0
  107. package/dist/functional/optional/impl/optional-filter.mjs +28 -0
  108. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -0
  109. package/dist/functional/optional/impl/optional-flat-map.d.mts +33 -0
  110. package/dist/functional/optional/impl/optional-flat-map.d.mts.map +1 -0
  111. package/dist/functional/optional/impl/optional-flat-map.mjs +21 -0
  112. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -0
  113. package/dist/functional/optional/impl/optional-from-nullable.d.mts +24 -0
  114. package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -0
  115. package/dist/functional/optional/impl/optional-from-nullable.mjs +29 -0
  116. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -0
  117. package/dist/functional/optional/impl/optional-is-none.d.mts +22 -0
  118. package/dist/functional/optional/impl/optional-is-none.d.mts.map +1 -0
  119. package/dist/functional/optional/impl/optional-is-none.mjs +25 -0
  120. package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -0
  121. package/dist/functional/optional/impl/optional-is-optional.d.mts +18 -0
  122. package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -0
  123. package/dist/functional/optional/impl/optional-is-optional.mjs +27 -0
  124. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -0
  125. package/dist/functional/optional/impl/optional-is-some.d.mts +22 -0
  126. package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -0
  127. package/dist/functional/optional/impl/optional-is-some.mjs +25 -0
  128. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -0
  129. package/dist/functional/optional/impl/optional-map.d.mts +31 -0
  130. package/dist/functional/optional/impl/optional-map.d.mts.map +1 -0
  131. package/dist/functional/optional/impl/optional-map.mjs +25 -0
  132. package/dist/functional/optional/impl/optional-map.mjs.map +1 -0
  133. package/dist/functional/optional/impl/optional-none.d.mts +16 -0
  134. package/dist/functional/optional/impl/optional-none.d.mts.map +1 -0
  135. package/dist/functional/optional/impl/optional-none.mjs +20 -0
  136. package/dist/functional/optional/impl/optional-none.mjs.map +1 -0
  137. package/dist/functional/optional/impl/optional-or-else.d.mts +35 -0
  138. package/dist/functional/optional/impl/optional-or-else.d.mts.map +1 -0
  139. package/dist/functional/optional/impl/optional-or-else.mjs +19 -0
  140. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -0
  141. package/dist/functional/optional/impl/optional-some.d.mts +19 -0
  142. package/dist/functional/optional/impl/optional-some.d.mts.map +1 -0
  143. package/dist/functional/optional/impl/optional-some.mjs +26 -0
  144. package/dist/functional/optional/impl/optional-some.mjs.map +1 -0
  145. package/dist/functional/optional/impl/optional-to-nullable.d.mts +27 -0
  146. package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -0
  147. package/dist/functional/optional/impl/optional-to-nullable.mjs +31 -0
  148. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -0
  149. package/dist/functional/optional/impl/optional-unwrap-or.d.mts +33 -0
  150. package/dist/functional/optional/impl/optional-unwrap-or.d.mts.map +1 -0
  151. package/dist/functional/optional/impl/optional-unwrap-or.mjs +19 -0
  152. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -0
  153. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts +29 -0
  154. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -0
  155. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +38 -0
  156. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -0
  157. package/dist/functional/optional/impl/optional-unwrap.d.mts +28 -0
  158. package/dist/functional/optional/impl/optional-unwrap.d.mts.map +1 -0
  159. package/dist/functional/optional/impl/optional-unwrap.mjs +11 -0
  160. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -0
  161. package/dist/functional/optional/impl/optional-zip.d.mts +31 -0
  162. package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -0
  163. package/dist/functional/optional/impl/optional-zip.mjs +39 -0
  164. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -0
  165. package/dist/functional/optional/impl/tag.d.mts +5 -0
  166. package/dist/functional/optional/impl/tag.d.mts.map +1 -0
  167. package/dist/functional/optional/impl/tag.mjs +7 -0
  168. package/dist/functional/optional/impl/tag.mjs.map +1 -0
  169. package/dist/functional/optional/impl/types.d.mts +22 -0
  170. package/dist/functional/optional/impl/types.d.mts.map +1 -0
  171. package/dist/functional/optional/impl/types.mjs +2 -0
  172. package/dist/functional/optional/impl/types.mjs.map +1 -0
  173. package/dist/functional/optional/index.d.mts +2 -0
  174. package/dist/functional/optional/index.d.mts.map +1 -0
  175. package/dist/functional/optional/index.mjs +3 -0
  176. package/dist/functional/optional/index.mjs.map +1 -0
  177. package/dist/functional/pipe.d.mts +63 -117
  178. package/dist/functional/pipe.d.mts.map +1 -1
  179. package/dist/functional/pipe.mjs +4 -3
  180. package/dist/functional/pipe.mjs.map +1 -1
  181. package/dist/functional/result/impl/index.d.mts +24 -0
  182. package/dist/functional/result/impl/index.d.mts.map +1 -0
  183. package/dist/functional/result/impl/index.mjs +23 -0
  184. package/dist/functional/result/impl/index.mjs.map +1 -0
  185. package/dist/functional/result/impl/result-err.d.mts +25 -0
  186. package/dist/functional/result/impl/result-err.d.mts.map +1 -0
  187. package/dist/functional/result/impl/result-err.mjs +32 -0
  188. package/dist/functional/result/impl/result-err.mjs.map +1 -0
  189. package/dist/functional/result/impl/result-expect-to-be.d.mts +27 -0
  190. package/dist/functional/result/impl/result-expect-to-be.d.mts.map +1 -0
  191. package/dist/functional/result/impl/result-expect-to-be.mjs +26 -0
  192. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -0
  193. package/dist/functional/result/impl/result-flat-map.d.mts +39 -0
  194. package/dist/functional/result/impl/result-flat-map.d.mts.map +1 -0
  195. package/dist/functional/result/impl/result-flat-map.mjs +24 -0
  196. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -0
  197. package/dist/functional/result/impl/result-fold.d.mts +45 -0
  198. package/dist/functional/result/impl/result-fold.d.mts.map +1 -0
  199. package/dist/functional/result/impl/result-fold.mjs +26 -0
  200. package/dist/functional/result/impl/result-fold.mjs.map +1 -0
  201. package/dist/functional/result/impl/result-from-promise.d.mts +32 -0
  202. package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -0
  203. package/dist/functional/result/impl/result-from-promise.mjs +32 -0
  204. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -0
  205. package/dist/functional/result/impl/result-from-throwable.d.mts +29 -0
  206. package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -0
  207. package/dist/functional/result/impl/result-from-throwable.mjs +46 -0
  208. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -0
  209. package/dist/functional/result/impl/result-is-err.d.mts +20 -0
  210. package/dist/functional/result/impl/result-is-err.d.mts.map +1 -0
  211. package/dist/functional/result/impl/result-is-err.mjs +23 -0
  212. package/dist/functional/result/impl/result-is-err.mjs.map +1 -0
  213. package/dist/functional/result/impl/result-is-ok.d.mts +20 -0
  214. package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -0
  215. package/dist/functional/result/impl/result-is-ok.mjs +23 -0
  216. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -0
  217. package/dist/functional/result/impl/result-is-result.d.mts +17 -0
  218. package/dist/functional/result/impl/result-is-result.d.mts.map +1 -0
  219. package/dist/functional/result/impl/result-is-result.mjs +26 -0
  220. package/dist/functional/result/impl/result-is-result.mjs.map +1 -0
  221. package/dist/functional/result/impl/result-map-err.d.mts +33 -0
  222. package/dist/functional/result/impl/result-map-err.d.mts.map +1 -0
  223. package/dist/functional/result/impl/result-map-err.mjs +25 -0
  224. package/dist/functional/result/impl/result-map-err.mjs.map +1 -0
  225. package/dist/functional/result/impl/result-map.d.mts +34 -0
  226. package/dist/functional/result/impl/result-map.d.mts.map +1 -0
  227. package/dist/functional/result/impl/result-map.mjs +25 -0
  228. package/dist/functional/result/impl/result-map.mjs.map +1 -0
  229. package/dist/functional/result/impl/result-ok.d.mts +25 -0
  230. package/dist/functional/result/impl/result-ok.d.mts.map +1 -0
  231. package/dist/functional/result/impl/result-ok.mjs +32 -0
  232. package/dist/functional/result/impl/result-ok.mjs.map +1 -0
  233. package/dist/functional/result/impl/result-or-else.d.mts +32 -0
  234. package/dist/functional/result/impl/result-or-else.d.mts.map +1 -0
  235. package/dist/functional/result/impl/result-or-else.mjs +20 -0
  236. package/dist/functional/result/impl/result-or-else.mjs.map +1 -0
  237. package/dist/functional/result/impl/result-swap.d.mts +20 -0
  238. package/dist/functional/result/impl/result-swap.d.mts.map +1 -0
  239. package/dist/functional/result/impl/result-swap.mjs +28 -0
  240. package/dist/functional/result/impl/result-swap.mjs.map +1 -0
  241. package/dist/functional/result/impl/result-to-optional.d.mts +28 -0
  242. package/dist/functional/result/impl/result-to-optional.d.mts.map +1 -0
  243. package/dist/functional/result/impl/result-to-optional.mjs +34 -0
  244. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -0
  245. package/dist/functional/result/impl/result-unwrap-err-or.d.mts +29 -0
  246. package/dist/functional/result/impl/result-unwrap-err-or.d.mts.map +1 -0
  247. package/dist/functional/result/impl/result-unwrap-err-or.mjs +20 -0
  248. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -0
  249. package/dist/functional/result/impl/result-unwrap-err-throw.d.mts +30 -0
  250. package/dist/functional/result/impl/result-unwrap-err-throw.d.mts.map +1 -0
  251. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +47 -0
  252. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -0
  253. package/dist/functional/result/impl/result-unwrap-err.d.mts +31 -0
  254. package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -0
  255. package/dist/functional/result/impl/result-unwrap-err.mjs +36 -0
  256. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -0
  257. package/dist/functional/result/impl/result-unwrap-ok-or.d.mts +29 -0
  258. package/dist/functional/result/impl/result-unwrap-ok-or.d.mts.map +1 -0
  259. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +20 -0
  260. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -0
  261. package/dist/functional/result/impl/result-unwrap-ok.d.mts +23 -0
  262. package/dist/functional/result/impl/result-unwrap-ok.d.mts.map +1 -0
  263. package/dist/functional/result/impl/result-unwrap-ok.mjs +11 -0
  264. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -0
  265. package/dist/functional/result/impl/result-unwrap-throw.d.mts +30 -0
  266. package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -0
  267. package/dist/functional/result/impl/result-unwrap-throw.mjs +41 -0
  268. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -0
  269. package/dist/functional/result/impl/result-zip.d.mts +29 -0
  270. package/dist/functional/result/impl/result-zip.d.mts.map +1 -0
  271. package/dist/functional/result/impl/result-zip.mjs +38 -0
  272. package/dist/functional/result/impl/result-zip.mjs.map +1 -0
  273. package/dist/functional/result/impl/tag.d.mts +5 -0
  274. package/dist/functional/result/impl/tag.d.mts.map +1 -0
  275. package/dist/functional/result/impl/tag.mjs +7 -0
  276. package/dist/functional/result/impl/tag.mjs.map +1 -0
  277. package/dist/functional/result/impl/types.d.mts +29 -0
  278. package/dist/functional/result/impl/types.d.mts.map +1 -0
  279. package/dist/functional/result/impl/types.mjs +2 -0
  280. package/dist/functional/result/impl/types.mjs.map +1 -0
  281. package/dist/functional/result/index.d.mts +2 -0
  282. package/dist/functional/result/index.d.mts.map +1 -0
  283. package/dist/functional/result/index.mjs +3 -0
  284. package/dist/functional/result/index.mjs.map +1 -0
  285. package/dist/globals.d.mts +95 -5
  286. package/dist/guard/has-key.d.mts +23 -74
  287. package/dist/guard/has-key.d.mts.map +1 -1
  288. package/dist/guard/has-key.mjs +23 -74
  289. package/dist/guard/has-key.mjs.map +1 -1
  290. package/dist/guard/is-non-empty-string.d.mts +20 -87
  291. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  292. package/dist/guard/is-non-empty-string.mjs +20 -87
  293. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  294. package/dist/guard/is-non-null-object.d.mts +14 -84
  295. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  296. package/dist/guard/is-non-null-object.mjs +14 -84
  297. package/dist/guard/is-non-null-object.mjs.map +1 -1
  298. package/dist/guard/is-primitive.d.mts +13 -126
  299. package/dist/guard/is-primitive.d.mts.map +1 -1
  300. package/dist/guard/is-primitive.mjs +13 -126
  301. package/dist/guard/is-primitive.mjs.map +1 -1
  302. package/dist/guard/is-record.d.mts +21 -132
  303. package/dist/guard/is-record.d.mts.map +1 -1
  304. package/dist/guard/is-record.mjs +21 -132
  305. package/dist/guard/is-record.mjs.map +1 -1
  306. package/dist/guard/is-type.d.mts +201 -238
  307. package/dist/guard/is-type.d.mts.map +1 -1
  308. package/dist/guard/is-type.mjs +201 -238
  309. package/dist/guard/is-type.mjs.map +1 -1
  310. package/dist/guard/key-is-in.d.mts +22 -139
  311. package/dist/guard/key-is-in.d.mts.map +1 -1
  312. package/dist/guard/key-is-in.mjs +22 -139
  313. package/dist/guard/key-is-in.mjs.map +1 -1
  314. package/dist/index.d.mts +0 -2
  315. package/dist/index.d.mts.map +1 -1
  316. package/dist/index.mjs +0 -5
  317. package/dist/index.mjs.map +1 -1
  318. package/dist/iterator/range.d.mts +29 -62
  319. package/dist/iterator/range.d.mts.map +1 -1
  320. package/dist/iterator/range.mjs.map +1 -1
  321. package/dist/json/json.d.mts +191 -122
  322. package/dist/json/json.d.mts.map +1 -1
  323. package/dist/json/json.mjs +246 -144
  324. package/dist/json/json.mjs.map +1 -1
  325. package/dist/number/branded-types/finite-number.d.mts +24 -156
  326. package/dist/number/branded-types/finite-number.d.mts.map +1 -1
  327. package/dist/number/branded-types/finite-number.mjs +28 -160
  328. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  329. package/dist/number/branded-types/int.d.mts +122 -120
  330. package/dist/number/branded-types/int.d.mts.map +1 -1
  331. package/dist/number/branded-types/int.mjs +123 -121
  332. package/dist/number/branded-types/int.mjs.map +1 -1
  333. package/dist/number/branded-types/int16.d.mts +22 -30
  334. package/dist/number/branded-types/int16.d.mts.map +1 -1
  335. package/dist/number/branded-types/int16.mjs +23 -31
  336. package/dist/number/branded-types/int16.mjs.map +1 -1
  337. package/dist/number/branded-types/int32.d.mts +22 -31
  338. package/dist/number/branded-types/int32.d.mts.map +1 -1
  339. package/dist/number/branded-types/int32.mjs +23 -32
  340. package/dist/number/branded-types/int32.mjs.map +1 -1
  341. package/dist/number/branded-types/non-negative-finite-number.d.mts +28 -36
  342. package/dist/number/branded-types/non-negative-finite-number.d.mts.map +1 -1
  343. package/dist/number/branded-types/non-negative-finite-number.mjs +32 -40
  344. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  345. package/dist/number/branded-types/non-negative-int16.d.mts +24 -34
  346. package/dist/number/branded-types/non-negative-int16.d.mts.map +1 -1
  347. package/dist/number/branded-types/non-negative-int16.mjs +25 -35
  348. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  349. package/dist/number/branded-types/non-negative-int32.d.mts +26 -35
  350. package/dist/number/branded-types/non-negative-int32.d.mts.map +1 -1
  351. package/dist/number/branded-types/non-negative-int32.mjs +27 -36
  352. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  353. package/dist/number/branded-types/non-zero-finite-number.d.mts +22 -37
  354. package/dist/number/branded-types/non-zero-finite-number.d.mts.map +1 -1
  355. package/dist/number/branded-types/non-zero-finite-number.mjs +26 -41
  356. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  357. package/dist/number/branded-types/non-zero-int.d.mts +15 -30
  358. package/dist/number/branded-types/non-zero-int.d.mts.map +1 -1
  359. package/dist/number/branded-types/non-zero-int.mjs +16 -31
  360. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  361. package/dist/number/branded-types/non-zero-int16.d.mts +27 -35
  362. package/dist/number/branded-types/non-zero-int16.d.mts.map +1 -1
  363. package/dist/number/branded-types/non-zero-int16.mjs +28 -36
  364. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  365. package/dist/number/branded-types/non-zero-int32.d.mts +29 -36
  366. package/dist/number/branded-types/non-zero-int32.d.mts.map +1 -1
  367. package/dist/number/branded-types/non-zero-int32.mjs +30 -37
  368. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  369. package/dist/number/branded-types/non-zero-safe-int.d.mts +37 -38
  370. package/dist/number/branded-types/non-zero-safe-int.d.mts.map +1 -1
  371. package/dist/number/branded-types/non-zero-safe-int.mjs +40 -41
  372. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  373. package/dist/number/branded-types/non-zero-uint16.d.mts +24 -35
  374. package/dist/number/branded-types/non-zero-uint16.d.mts.map +1 -1
  375. package/dist/number/branded-types/non-zero-uint16.mjs +25 -36
  376. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  377. package/dist/number/branded-types/non-zero-uint32.d.mts +24 -35
  378. package/dist/number/branded-types/non-zero-uint32.d.mts.map +1 -1
  379. package/dist/number/branded-types/non-zero-uint32.mjs +25 -36
  380. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  381. package/dist/number/branded-types/positive-finite-number.d.mts +26 -40
  382. package/dist/number/branded-types/positive-finite-number.d.mts.map +1 -1
  383. package/dist/number/branded-types/positive-finite-number.mjs +30 -44
  384. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  385. package/dist/number/branded-types/positive-int.d.mts +133 -123
  386. package/dist/number/branded-types/positive-int.d.mts.map +1 -1
  387. package/dist/number/branded-types/positive-int.mjs +134 -124
  388. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  389. package/dist/number/branded-types/positive-int16.d.mts +24 -35
  390. package/dist/number/branded-types/positive-int16.d.mts.map +1 -1
  391. package/dist/number/branded-types/positive-int16.mjs +25 -36
  392. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  393. package/dist/number/branded-types/positive-int32.d.mts +24 -35
  394. package/dist/number/branded-types/positive-int32.d.mts.map +1 -1
  395. package/dist/number/branded-types/positive-int32.mjs +25 -36
  396. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  397. package/dist/number/branded-types/positive-safe-int.d.mts +159 -33
  398. package/dist/number/branded-types/positive-safe-int.d.mts.map +1 -1
  399. package/dist/number/branded-types/positive-safe-int.mjs +161 -35
  400. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  401. package/dist/number/branded-types/positive-uint16.d.mts +24 -35
  402. package/dist/number/branded-types/positive-uint16.d.mts.map +1 -1
  403. package/dist/number/branded-types/positive-uint16.mjs +25 -36
  404. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  405. package/dist/number/branded-types/positive-uint32.d.mts +26 -36
  406. package/dist/number/branded-types/positive-uint32.d.mts.map +1 -1
  407. package/dist/number/branded-types/positive-uint32.mjs +27 -37
  408. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  409. package/dist/number/branded-types/safe-int.d.mts +140 -99
  410. package/dist/number/branded-types/safe-int.d.mts.map +1 -1
  411. package/dist/number/branded-types/safe-int.mjs +143 -102
  412. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  413. package/dist/number/branded-types/safe-uint.d.mts +24 -33
  414. package/dist/number/branded-types/safe-uint.d.mts.map +1 -1
  415. package/dist/number/branded-types/safe-uint.mjs +26 -35
  416. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  417. package/dist/number/branded-types/uint.d.mts +121 -30
  418. package/dist/number/branded-types/uint.d.mts.map +1 -1
  419. package/dist/number/branded-types/uint.mjs +122 -31
  420. package/dist/number/branded-types/uint.mjs.map +1 -1
  421. package/dist/number/branded-types/uint16.d.mts +26 -34
  422. package/dist/number/branded-types/uint16.d.mts.map +1 -1
  423. package/dist/number/branded-types/uint16.mjs +27 -35
  424. package/dist/number/branded-types/uint16.mjs.map +1 -1
  425. package/dist/number/branded-types/uint32.d.mts +26 -68
  426. package/dist/number/branded-types/uint32.d.mts.map +1 -1
  427. package/dist/number/branded-types/uint32.mjs +27 -69
  428. package/dist/number/branded-types/uint32.mjs.map +1 -1
  429. package/dist/number/enum/int8.d.mts +37 -101
  430. package/dist/number/enum/int8.d.mts.map +1 -1
  431. package/dist/number/enum/int8.mjs +40 -171
  432. package/dist/number/enum/int8.mjs.map +1 -1
  433. package/dist/number/enum/uint8.d.mts +45 -55
  434. package/dist/number/enum/uint8.d.mts.map +1 -1
  435. package/dist/number/enum/uint8.mjs +47 -156
  436. package/dist/number/enum/uint8.mjs.map +1 -1
  437. package/dist/number/num.d.mts +145 -206
  438. package/dist/number/num.d.mts.map +1 -1
  439. package/dist/number/num.mjs +143 -199
  440. package/dist/number/num.mjs.map +1 -1
  441. package/dist/number/refined-number-utils.d.mts +97 -21
  442. package/dist/number/refined-number-utils.d.mts.map +1 -1
  443. package/dist/number/refined-number-utils.mjs +91 -22
  444. package/dist/number/refined-number-utils.mjs.map +1 -1
  445. package/dist/object/object.d.mts +126 -208
  446. package/dist/object/object.d.mts.map +1 -1
  447. package/dist/object/object.mjs +68 -102
  448. package/dist/object/object.mjs.map +1 -1
  449. package/dist/others/cast-mutable.d.mts +12 -88
  450. package/dist/others/cast-mutable.d.mts.map +1 -1
  451. package/dist/others/cast-mutable.mjs +13 -89
  452. package/dist/others/cast-mutable.mjs.map +1 -1
  453. package/dist/others/cast-readonly.d.mts +12 -168
  454. package/dist/others/cast-readonly.d.mts.map +1 -1
  455. package/dist/others/cast-readonly.mjs +13 -169
  456. package/dist/others/cast-readonly.mjs.map +1 -1
  457. package/dist/others/if-then.d.mts +6 -83
  458. package/dist/others/if-then.d.mts.map +1 -1
  459. package/dist/others/if-then.mjs +6 -83
  460. package/dist/others/if-then.mjs.map +1 -1
  461. package/dist/others/map-nullable.d.mts +12 -136
  462. package/dist/others/map-nullable.d.mts.map +1 -1
  463. package/dist/others/map-nullable.mjs.map +1 -1
  464. package/dist/others/memoize-function.d.mts +14 -157
  465. package/dist/others/memoize-function.d.mts.map +1 -1
  466. package/dist/others/memoize-function.mjs +14 -157
  467. package/dist/others/memoize-function.mjs.map +1 -1
  468. package/dist/others/tuple.d.mts +33 -151
  469. package/dist/others/tuple.d.mts.map +1 -1
  470. package/dist/others/tuple.mjs +33 -151
  471. package/dist/others/tuple.mjs.map +1 -1
  472. package/dist/others/unknown-to-string.d.mts +11 -125
  473. package/dist/others/unknown-to-string.d.mts.map +1 -1
  474. package/dist/others/unknown-to-string.mjs +12 -126
  475. package/dist/others/unknown-to-string.mjs.map +1 -1
  476. package/dist/promise/promise.d.mts +33 -21
  477. package/dist/promise/promise.d.mts.map +1 -1
  478. package/dist/promise/promise.mjs +36 -24
  479. package/dist/promise/promise.mjs.map +1 -1
  480. package/package.json +58 -44
  481. package/src/array/impl/array-utils-creation.mts +192 -0
  482. package/src/array/{array-utils-creation.test.mts → impl/array-utils-creation.test.mts} +121 -72
  483. package/src/array/impl/array-utils-element-access.mts +115 -0
  484. package/src/array/impl/array-utils-element-access.test.mts +151 -0
  485. package/src/array/impl/array-utils-iterators.mts +79 -0
  486. package/src/array/impl/array-utils-iterators.test.mts +98 -0
  487. package/src/array/impl/array-utils-modification.mts +434 -0
  488. package/src/array/{array-utils-modification.test.mts → impl/array-utils-modification.test.mts} +41 -28
  489. package/src/array/{array-utils-overload-type-error.test.mts → impl/array-utils-overload-type-error.test.mts} +33 -33
  490. package/src/array/impl/array-utils-reducing-value.mts +535 -0
  491. package/src/array/{array-utils-reducing-value.test.mts → impl/array-utils-reducing-value.test.mts} +53 -58
  492. package/src/array/impl/array-utils-search.mts +509 -0
  493. package/src/array/impl/array-utils-search.test.mts +346 -0
  494. package/src/array/impl/array-utils-set-op.mts +166 -0
  495. package/src/array/{array-utils-set-op.test.mts → impl/array-utils-set-op.test.mts} +42 -35
  496. package/src/array/impl/array-utils-size.mts +30 -0
  497. package/src/array/impl/array-utils-size.test.mts +9 -0
  498. package/src/array/impl/array-utils-slice-clamped.mts +51 -0
  499. package/src/array/{array-utils-slice-clamped.test.mts → impl/array-utils-slice-clamped.test.mts} +13 -13
  500. package/src/array/impl/array-utils-slicing.mts +275 -0
  501. package/src/array/impl/array-utils-slicing.test.mts +158 -0
  502. package/src/array/impl/array-utils-transformation.mts +746 -0
  503. package/src/array/{array-utils-transformation.test.mts → impl/array-utils-transformation.test.mts} +662 -889
  504. package/src/array/impl/array-utils-validation.mts +241 -0
  505. package/src/array/{array-utils-validation.test.mts → impl/array-utils-validation.test.mts} +194 -107
  506. package/src/array/{array.test.mts → impl/array.test.mts} +2 -2
  507. package/src/array/impl/index.mts +12 -0
  508. package/src/array/index.mts +1 -1
  509. package/src/collections/imap-mapped.mts +99 -265
  510. package/src/collections/imap.mts +477 -174
  511. package/src/collections/imap.test.mts +12 -19
  512. package/src/collections/iset-mapped.mts +892 -358
  513. package/src/collections/iset.mts +429 -213
  514. package/src/collections/queue.mts +174 -200
  515. package/src/collections/stack.mts +172 -245
  516. package/src/collections/stack.test.mts +9 -1
  517. package/src/entry-point.mts +2 -0
  518. package/src/expect-type.mts +43 -172
  519. package/src/functional/index.mts +2 -2
  520. package/src/functional/match.mts +35 -145
  521. package/src/functional/optional/impl/index.mts +17 -0
  522. package/src/functional/optional/impl/optional-expect-to-be.mts +65 -0
  523. package/src/functional/optional/impl/optional-filter.mts +71 -0
  524. package/src/functional/optional/impl/optional-flat-map.mts +67 -0
  525. package/src/functional/optional/impl/optional-from-nullable.mts +28 -0
  526. package/src/functional/optional/impl/optional-is-none.mts +25 -0
  527. package/src/functional/optional/impl/optional-is-optional.mts +27 -0
  528. package/src/functional/optional/impl/optional-is-some.mts +25 -0
  529. package/src/functional/optional/impl/optional-map.mts +69 -0
  530. package/src/functional/optional/impl/optional-none.mts +17 -0
  531. package/src/functional/optional/impl/optional-or-else.mts +73 -0
  532. package/src/functional/optional/impl/optional-some.mts +23 -0
  533. package/src/functional/optional/impl/optional-to-nullable.mts +31 -0
  534. package/src/functional/optional/impl/optional-unwrap-or.mts +64 -0
  535. package/src/functional/optional/impl/optional-unwrap-throw.mts +39 -0
  536. package/src/functional/optional/impl/optional-unwrap.mts +41 -0
  537. package/src/functional/optional/impl/optional-zip.mts +40 -0
  538. package/src/functional/optional/impl/tag.mts +6 -0
  539. package/src/functional/optional/impl/types.mts +28 -0
  540. package/src/functional/optional/index.mts +1 -0
  541. package/src/functional/optional.test.mts +11 -9
  542. package/src/functional/pipe.mts +65 -118
  543. package/src/functional/pipe.test.mts +1 -1
  544. package/src/functional/result/impl/index.mts +23 -0
  545. package/src/functional/result/impl/result-err.mts +29 -0
  546. package/src/functional/result/impl/result-expect-to-be.mts +63 -0
  547. package/src/functional/result/impl/result-flat-map.mts +79 -0
  548. package/src/functional/result/impl/result-fold.mts +95 -0
  549. package/src/functional/result/impl/result-from-promise.mts +39 -0
  550. package/src/functional/result/impl/result-from-throwable.mts +42 -0
  551. package/src/functional/result/impl/result-is-err.mts +23 -0
  552. package/src/functional/result/impl/result-is-ok.mts +23 -0
  553. package/src/functional/result/impl/result-is-result.mts +23 -0
  554. package/src/functional/result/impl/result-map-err.mts +72 -0
  555. package/src/functional/result/impl/result-map.mts +73 -0
  556. package/src/functional/result/impl/result-ok.mts +29 -0
  557. package/src/functional/result/impl/result-or-else.mts +63 -0
  558. package/src/functional/result/impl/result-swap.mts +28 -0
  559. package/src/functional/result/impl/result-to-optional.mts +34 -0
  560. package/src/functional/result/impl/result-unwrap-err-or.mts +60 -0
  561. package/src/functional/result/impl/result-unwrap-err-throw.mts +53 -0
  562. package/src/functional/result/impl/result-unwrap-err.mts +36 -0
  563. package/src/functional/result/impl/result-unwrap-ok-or.mts +60 -0
  564. package/src/functional/result/impl/result-unwrap-ok.mts +35 -0
  565. package/src/functional/result/impl/result-unwrap-throw.mts +43 -0
  566. package/src/functional/result/impl/result-zip.mts +39 -0
  567. package/src/functional/result/impl/tag.mts +6 -0
  568. package/src/functional/result/impl/types.mts +35 -0
  569. package/src/functional/result/index.mts +1 -0
  570. package/src/functional/result.test.mts +14 -6
  571. package/src/globals.d.mts +95 -5
  572. package/src/guard/has-key.mts +23 -74
  573. package/src/guard/is-non-empty-string.mts +20 -87
  574. package/src/guard/is-non-empty-string.test.mts +1 -1
  575. package/src/guard/is-non-null-object.mts +14 -84
  576. package/src/guard/is-non-null-object.test.mts +4 -4
  577. package/src/guard/is-primitive.mts +13 -126
  578. package/src/guard/is-primitive.test.mts +4 -4
  579. package/src/guard/is-record.mts +21 -132
  580. package/src/guard/is-type.mts +201 -238
  581. package/src/guard/is-type.test.mts +10 -10
  582. package/src/guard/key-is-in.mts +22 -139
  583. package/src/index.mts +0 -2
  584. package/src/iterator/range.mts +29 -62
  585. package/src/json/json.mts +202 -134
  586. package/src/json/json.test.mts +1 -3
  587. package/src/number/branded-types/finite-number.mts +34 -166
  588. package/src/number/branded-types/int.mts +129 -127
  589. package/src/number/branded-types/int16.mts +31 -39
  590. package/src/number/branded-types/int16.test.mts +24 -24
  591. package/src/number/branded-types/int32.mts +31 -40
  592. package/src/number/branded-types/int32.test.mts +39 -39
  593. package/src/number/branded-types/non-negative-finite-number.mts +39 -47
  594. package/src/number/branded-types/non-negative-int16.mts +33 -43
  595. package/src/number/branded-types/non-negative-int16.test.mts +16 -16
  596. package/src/number/branded-types/non-negative-int32.mts +35 -44
  597. package/src/number/branded-types/non-negative-int32.test.mts +30 -30
  598. package/src/number/branded-types/non-zero-finite-number.mts +32 -47
  599. package/src/number/branded-types/non-zero-int.mts +22 -37
  600. package/src/number/branded-types/non-zero-int16.mts +36 -44
  601. package/src/number/branded-types/non-zero-int16.test.mts +26 -26
  602. package/src/number/branded-types/non-zero-int32.mts +38 -45
  603. package/src/number/branded-types/non-zero-int32.test.mts +45 -42
  604. package/src/number/branded-types/non-zero-safe-int.mts +48 -49
  605. package/src/number/branded-types/non-zero-uint16.mts +33 -44
  606. package/src/number/branded-types/non-zero-uint16.test.mts +16 -16
  607. package/src/number/branded-types/non-zero-uint32.mts +33 -44
  608. package/src/number/branded-types/non-zero-uint32.test.mts +28 -28
  609. package/src/number/branded-types/positive-finite-number.mts +37 -51
  610. package/src/number/branded-types/positive-int.mts +142 -132
  611. package/src/number/branded-types/positive-int16.mts +33 -44
  612. package/src/number/branded-types/positive-int16.test.mts +14 -14
  613. package/src/number/branded-types/positive-int32.mts +33 -44
  614. package/src/number/branded-types/positive-int32.test.mts +26 -26
  615. package/src/number/branded-types/positive-safe-int.mts +169 -43
  616. package/src/number/branded-types/positive-uint16.mts +33 -44
  617. package/src/number/branded-types/positive-uint16.test.mts +16 -16
  618. package/src/number/branded-types/positive-uint32.mts +35 -45
  619. package/src/number/branded-types/positive-uint32.test.mts +31 -28
  620. package/src/number/branded-types/safe-int.mts +151 -110
  621. package/src/number/branded-types/safe-uint.mts +34 -43
  622. package/src/number/branded-types/uint.mts +129 -38
  623. package/src/number/branded-types/uint16.mts +35 -43
  624. package/src/number/branded-types/uint16.test.mts +16 -16
  625. package/src/number/branded-types/uint32.mts +35 -77
  626. package/src/number/branded-types/uint32.test.mts +28 -28
  627. package/src/number/enum/int8.mts +42 -173
  628. package/src/number/enum/int8.test.mts +9 -9
  629. package/src/number/enum/uint8.mts +49 -158
  630. package/src/number/enum/uint8.test.mts +8 -8
  631. package/src/number/num.mts +157 -212
  632. package/src/number/num.test.mts +4 -4
  633. package/src/number/refined-number-utils.mts +109 -26
  634. package/src/object/object.mts +130 -212
  635. package/src/object/object.test.mts +29 -0
  636. package/src/others/cast-mutable.mts +13 -89
  637. package/src/others/cast-mutable.test.mts +80 -0
  638. package/src/others/cast-readonly.mts +13 -169
  639. package/src/others/if-then.mts +6 -83
  640. package/src/others/map-nullable.mts +12 -136
  641. package/src/others/map-nullable.test.mts +6 -6
  642. package/src/others/memoize-function.mts +14 -157
  643. package/src/others/tuple.mts +33 -151
  644. package/src/others/unknown-to-string.mts +12 -126
  645. package/src/others/unknown-to-string.test.mts +13 -1
  646. package/src/promise/promise.mts +34 -21
  647. package/src/promise/promise.test.mts +43 -0
  648. package/dist/array/array-utils.d.mts +0 -2956
  649. package/dist/array/array-utils.d.mts.map +0 -1
  650. package/dist/array/array-utils.mjs +0 -1838
  651. package/dist/array/array-utils.mjs.map +0 -1
  652. package/dist/functional/optional.d.mts +0 -360
  653. package/dist/functional/optional.d.mts.map +0 -1
  654. package/dist/functional/optional.mjs +0 -268
  655. package/dist/functional/optional.mjs.map +0 -1
  656. package/dist/functional/result.d.mts +0 -611
  657. package/dist/functional/result.d.mts.map +0 -1
  658. package/dist/functional/result.mjs +0 -545
  659. package/dist/functional/result.mjs.map +0 -1
  660. package/src/array/array-utils-search.test.mts +0 -169
  661. package/src/array/array-utils-slicing.test.mts +0 -274
  662. package/src/array/array-utils.mts +0 -4834
  663. package/src/functional/optional.mts +0 -591
  664. package/src/functional/result.mts +0 -986
@@ -1,68 +1,111 @@
1
- import { Optional } from '../functional/index.mjs';
2
1
  /**
3
- * Interface for an immutable map with O(1) lookup performance and functional programming patterns.
2
+ * Interface for an immutable map with lookup operations and functional
3
+ * programming patterns.
4
4
  *
5
- * This interface defines all methods and properties available on IMap instances. All operations
6
- * that modify the map return new IMap instances, preserving immutability. The underlying implementation
7
- * uses JavaScript's native Map for O(1) average-case performance on get, set, has, and delete operations.
5
+ * This interface defines all methods and properties available on IMap
6
+ * instances. All operations that modify the map return new IMap instances,
7
+ * preserving immutability. The underlying implementation uses JavaScript's
8
+ * native Map but creates copies on mutations to maintain immutability.
8
9
  *
9
10
  * **Immutability Guarantees:**
11
+ *
10
12
  * - All mutation operations (set, delete, update) return new IMap instances
11
13
  * - Original IMap instances are never modified
12
14
  * - Safe for concurrent access and functional programming patterns
13
15
  *
14
16
  * **Performance Characteristics:**
15
- * - get/has/delete: O(1) average case
16
- * - set: O(1) average case
17
+ *
18
+ * - get/has: O(1) average case
19
+ * - set/delete: O(n) due to copying for immutability
17
20
  * - map/filter operations: O(n)
18
- * - Iteration: O(n)
21
+ * - iteration: O(n)
19
22
  *
20
- * @template K The type of the keys in the map. Must extend MapSetKeyType (string, number, boolean, etc.)
23
+ * @template K The type of the keys in the map. Must extend MapSetKeyType
24
+ * (string, number, boolean, etc.)
21
25
  * @template V The type of the values in the map.
22
- *
23
- * @example
24
- * ```typescript
25
- * // This is a type alias describing an interface, so it's not directly instantiated.
26
- * // See IMap.create for examples of creating IMap instances that conform to this interface.
27
- *
28
- * // Example of how you might use a variable that implements this structure:
29
- * declare const userMap: IMap<string, User>;
30
- *
31
- * // Immutable operations - original map is never modified
32
- * const hasUser = userMap.has("alice"); // O(1)
33
- * const user = userMap.get("alice").unwrapOr(defaultUser); // O(1)
34
- * const newMap = userMap.set("bob", newUser); // O(1) - returns new IMap
35
- * const updated = userMap.update("alice", u => ({ ...u, active: true })); // O(1)
36
- *
37
- * // Functional transformations
38
- * const activeUsers = userMap.map((user, id) => ({ ...user, lastSeen: Date.now() })); // O(n)
39
- * ```
40
26
  */
41
27
  type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
42
- /** The number of elements in the map. */
28
+ /**
29
+ * The number of elements in the map.
30
+ *
31
+ * @example
32
+ *
33
+ * ```ts
34
+ * const entries = [
35
+ * ['a', 1],
36
+ * ['b', 2],
37
+ * ] satisfies readonly (readonly [string, number])[];
38
+ *
39
+ * const map = IMap.create(entries);
40
+ *
41
+ * assert(map.size === 2);
42
+ * ```
43
+ */
43
44
  size: SizeType.Arr;
44
45
  /**
45
- * Checks if a key exists in the map.
46
- * Allows for wider literal types for keys during checking.
46
+ * Checks if a key exists in the map. Allows for wider literal types for keys
47
+ * during checking.
48
+ *
49
+ * @example
50
+ *
51
+ * ```ts
52
+ * const map = IMap.create<'id' | 'enabled', number | boolean>([
53
+ * ['id', 42],
54
+ * ['enabled', true],
55
+ * ]);
56
+ *
57
+ * assert.ok(map.has('id'));
58
+ * assert.notOk(map.has('missing'));
59
+ * ```
60
+ *
47
61
  * @param key The key to check.
48
62
  * @returns `true` if the key exists, `false` otherwise.
49
63
  */
50
64
  has: (key: K | (WidenLiteral<K> & {})) => boolean;
51
65
  /**
52
66
  * Retrieves the value associated with a key.
67
+ *
68
+ * @example
69
+ *
70
+ * ```ts
71
+ * const map = IMap.create([['user', { id: 1 }]]);
72
+ *
73
+ * assert.deepStrictEqual(map.get('user'), Optional.some({ id: 1 }));
74
+ * assert.deepStrictEqual(map.get('missing'), Optional.none);
75
+ * ```
76
+ *
53
77
  * @param key The key to retrieve.
54
- * @returns The value associated with the key wrapped with Optional.some, or `Optional.none` if the key does not exist.
78
+ * @returns The value associated with the key wrapped with Optional.some, or
79
+ * `Optional.none` if the key does not exist.
55
80
  */
56
81
  get: (key: K | (WidenLiteral<K> & {})) => Optional<V>;
57
82
  /**
58
83
  * Checks if all elements in the map satisfy a predicate.
84
+ *
85
+ * @example
86
+ *
87
+ * ```ts
88
+ * const map = IMap.create([
89
+ * ['a', 2],
90
+ * ['b', 4],
91
+ * ]);
92
+ *
93
+ * const allEven = map.every((value) => value % 2 === 0);
94
+ * const isNarrowed = map.every((value): value is 2 | 4 => value % 2 === 0);
95
+ *
96
+ * assert.ok(allEven);
97
+ * assert.ok(isNarrowed);
98
+ * ```
99
+ *
59
100
  * @param predicate A function to test each key-value pair.
60
101
  * @returns `true` if all elements satisfy the predicate, `false` otherwise.
61
102
  */
62
103
  every: ((predicate: (value: V, key: K) => boolean) => boolean) &
63
104
  /**
64
- * Checks if all elements in the map satisfy a type predicate.
65
- * Narrows the type of values in the map if the predicate returns true for all elements.
105
+ * Checks if all elements in the map satisfy a type predicate. Narrows the
106
+ * type of values in the map if the predicate returns true for all
107
+ * elements.
108
+ *
66
109
  * @template W The narrowed type of the values.
67
110
  * @param predicate A type predicate function.
68
111
  * @returns `true` if all elements satisfy the predicate, `false` otherwise.
@@ -70,18 +113,70 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
70
113
  (<W extends V>(predicate: (value: V, key: K) => value is W) => this is IMap<K, W>);
71
114
  /**
72
115
  * Checks if at least one element in the map satisfies a predicate.
116
+ *
117
+ * @example
118
+ *
119
+ * ```ts
120
+ * const entries = [
121
+ * ['alice', 3],
122
+ * ['bob', 5],
123
+ * ] satisfies readonly (readonly [string, number])[];
124
+ *
125
+ * const map = IMap.create(entries);
126
+ *
127
+ * assert.ok(map.some((value) => value > 4));
128
+ * assert.notOk(map.some((value) => value > 10));
129
+ * ```
130
+ *
73
131
  * @param predicate A function to test each key-value pair.
74
- * @returns `true` if at least one element satisfies the predicate, `false` otherwise.
132
+ * @returns `true` if at least one element satisfies the predicate, `false`
133
+ * otherwise.
75
134
  */
76
135
  some: (predicate: (value: V, key: K) => boolean) => boolean;
77
136
  /**
78
137
  * Deletes a key-value pair from the map.
138
+ *
139
+ * @example
140
+ *
141
+ * ```ts
142
+ * const original = IMap.create([
143
+ * ['a', 1],
144
+ * ['b', 2],
145
+ * ]);
146
+ *
147
+ * const withoutB = original.delete('b');
148
+ *
149
+ * assert.deepStrictEqual(original.get('b'), Optional.some(2));
150
+ * assert.deepStrictEqual(withoutB.get('b'), Optional.none);
151
+ * assert(original.size === 2);
152
+ * assert(withoutB.size === 1);
153
+ * ```
154
+ *
79
155
  * @param key The key to delete.
80
156
  * @returns A new IMap instance without the specified key.
81
157
  */
82
158
  delete: (key: K) => IMap<K, V>;
83
159
  /**
84
160
  * Sets a key-value pair in the map.
161
+ *
162
+ * @example
163
+ *
164
+ * ```ts
165
+ * const entries = [['count', 1]] satisfies readonly (readonly [
166
+ * 'count' | 'status',
167
+ * number | string,
168
+ * ])[];
169
+ *
170
+ * const base = IMap.create<'count' | 'status', number | string>(entries);
171
+ *
172
+ * const updated = base.set('count', 2);
173
+ * const extended = base.set('status', 'ok');
174
+ *
175
+ * assert.deepStrictEqual(base.get('count'), Optional.some(1));
176
+ * assert.deepStrictEqual(updated.get('count'), Optional.some(2));
177
+ * assert.deepStrictEqual(extended.get('status'), Optional.some('ok'));
178
+ * ```
179
+ *
85
180
  * @param key The key to set.
86
181
  * @param value The value to associate with the key.
87
182
  * @returns A new IMap instance with the specified key-value pair.
@@ -89,13 +184,62 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
89
184
  set: (key: K, value: V) => IMap<K, V>;
90
185
  /**
91
186
  * Updates the value associated with a key using an updater function.
187
+ *
188
+ * @example
189
+ *
190
+ * ```ts
191
+ * const entries = [
192
+ * ['alice', 10],
193
+ * ['bob', 8],
194
+ * ] satisfies readonly (readonly ['alice' | 'bob' | 'charlie', number])[];
195
+ *
196
+ * const scores = IMap.create<'alice' | 'bob' | 'charlie', number>(entries);
197
+ *
198
+ * const boosted = scores.update('alice', (value) => value + 5);
199
+ * const unchanged = scores.update('charlie', (value) => value + 1);
200
+ *
201
+ * assert.deepStrictEqual(boosted.get('alice'), Optional.some(15));
202
+ * assert.deepStrictEqual(scores.get('alice'), Optional.some(10));
203
+ * assert(unchanged === scores);
204
+ * ```
205
+ *
92
206
  * @param key The key whose value to update.
93
- * @param updater A function that takes the current value and returns the new value.
207
+ * @param updater A function that takes the current value and returns the new
208
+ * value.
94
209
  * @returns A new IMap instance with the updated value.
95
210
  */
96
211
  update: (key: K, updater: (value: V) => V) => IMap<K, V>;
97
212
  /**
98
213
  * Applies a series of mutations to the map.
214
+ *
215
+ * @example
216
+ *
217
+ * ```ts
218
+ * const entries = [
219
+ * ['a', 1],
220
+ * ['b', 2],
221
+ * ] satisfies readonly (readonly ['a' | 'b' | 'c', number])[];
222
+ *
223
+ * const base = IMap.create<'a' | 'b' | 'c', number>(entries);
224
+ *
225
+ * const actions: readonly Readonly<
226
+ * | { type: 'set'; key: 'c'; value: number }
227
+ * | { type: 'update'; key: 'b'; updater: (value: number) => number }
228
+ * | { type: 'delete'; key: 'a' }
229
+ * >[] = [
230
+ * { type: 'set', key: 'c', value: 3 },
231
+ * { type: 'update', key: 'b', updater: (value) => value * 10 },
232
+ * { type: 'delete', key: 'a' },
233
+ * ];
234
+ *
235
+ * const mutated = base.withMutations(actions);
236
+ *
237
+ * assert.deepStrictEqual(mutated.get('c'), Optional.some(3));
238
+ * assert.deepStrictEqual(mutated.get('b'), Optional.some(20));
239
+ * assert.deepStrictEqual(mutated.get('a'), Optional.none);
240
+ * assert.deepStrictEqual(base.get('b'), Optional.some(2));
241
+ * ```
242
+ *
99
243
  * @param actions An array of mutation actions (delete, set, or update).
100
244
  * @returns A new IMap instance with all mutations applied.
101
245
  */
@@ -113,6 +257,25 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
113
257
  }>[]) => IMap<K, V>;
114
258
  /**
115
259
  * Maps the values of the map to new values.
260
+ *
261
+ * @example
262
+ *
263
+ * ```ts
264
+ * const entries = [
265
+ * ['a', 1],
266
+ * ['b', 2],
267
+ * ] satisfies readonly (readonly [string, number])[];
268
+ *
269
+ * const map = IMap.create(entries);
270
+ *
271
+ * const doubled = map.map((value) => value * 2);
272
+ *
273
+ * assert.deepStrictEqual(Array.from(doubled), [
274
+ * ['a', 2],
275
+ * ['b', 4],
276
+ * ]);
277
+ * ```
278
+ *
116
279
  * @template V2 The type of the new values.
117
280
  * @param mapFn A function that maps a value and key to a new value.
118
281
  * @returns A new IMap instance with mapped values.
@@ -120,6 +283,25 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
120
283
  map: <V2>(mapFn: (value: V, key: K) => V2) => IMap<K, V2>;
121
284
  /**
122
285
  * Maps the keys of the map to new keys.
286
+ *
287
+ * @example
288
+ *
289
+ * ```ts
290
+ * const entries = [
291
+ * ['first', 1],
292
+ * ['second', 2],
293
+ * ] satisfies readonly (readonly [string, number])[];
294
+ *
295
+ * const map = IMap.create(entries);
296
+ *
297
+ * const upperKeys = map.mapKeys((key) => key.toUpperCase());
298
+ *
299
+ * assert.deepStrictEqual(Array.from(upperKeys), [
300
+ * ['FIRST', 1],
301
+ * ['SECOND', 2],
302
+ * ]);
303
+ * ```
304
+ *
123
305
  * @template K2 The type of the new keys.
124
306
  * @param mapFn A function that maps a key to a new key.
125
307
  * @returns A new IMap instance with mapped keys and original values.
@@ -127,6 +309,27 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
127
309
  mapKeys: <K2 extends MapSetKeyType>(mapFn: (key: K) => K2) => IMap<K2, V>;
128
310
  /**
129
311
  * Maps the entries (key-value pairs) of the map to new entries.
312
+ *
313
+ * @example
314
+ *
315
+ * ```ts
316
+ * const entries = [
317
+ * ['a', 1],
318
+ * ['b', 2],
319
+ * ] satisfies readonly (readonly [string, number])[];
320
+ *
321
+ * const map = IMap.create(entries);
322
+ *
323
+ * const swapped = map.mapEntries(
324
+ * ([key, value]) => [value, key] satisfies readonly [number, string],
325
+ * );
326
+ *
327
+ * assert.deepStrictEqual(Array.from(swapped), [
328
+ * [1, 'a'],
329
+ * [2, 'b'],
330
+ * ]);
331
+ * ```
332
+ *
130
333
  * @template K2 The type of the new keys in the entries.
131
334
  * @template V2 The type of the new values in the entries.
132
335
  * @param mapFn A function that maps an entry to a new entry.
@@ -135,66 +338,215 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
135
338
  mapEntries: <K2 extends MapSetKeyType, V2>(mapFn: (entry: readonly [K, V]) => readonly [K2, V2]) => IMap<K2, V2>;
136
339
  /**
137
340
  * Executes a callback function for each key-value pair in the map.
341
+ *
342
+ * @example
343
+ *
344
+ * ```ts
345
+ * const map = IMap.create([
346
+ * ['a', 1],
347
+ * ['b', 2],
348
+ * ]);
349
+ *
350
+ * const entries: (readonly [string, number])[] = [];
351
+ *
352
+ * for (const [key, value] of map.entries()) {
353
+ * entries.push([key, value]);
354
+ * }
355
+ *
356
+ * assert.deepStrictEqual(entries, [
357
+ * ['a', 1],
358
+ * ['b', 2],
359
+ * ]);
360
+ * ```
361
+ *
138
362
  * @param callbackfn A function to execute for each element.
139
363
  */
140
364
  forEach: (callbackfn: (value: V, key: K) => void) => void;
141
365
  /**
142
366
  * Returns an iterator for the keys in the map.
367
+ *
368
+ * @example
369
+ *
370
+ * ```ts
371
+ * const entries = [
372
+ * ['a', 1],
373
+ * ['b', 2],
374
+ * ] satisfies readonly (readonly [string, number])[];
375
+ *
376
+ * const map = IMap.create(entries);
377
+ *
378
+ * const keys = Array.from(map.keys());
379
+ *
380
+ * assert.deepStrictEqual(keys, ['a', 'b']);
381
+ * ```
382
+ *
143
383
  * @returns An iterable iterator of keys.
144
384
  */
145
385
  keys: () => IterableIterator<K>;
146
386
  /**
147
387
  * Returns an iterator for the values in the map.
388
+ *
389
+ * @example
390
+ *
391
+ * ```ts
392
+ * const entries = [
393
+ * ['a', 1],
394
+ * ['b', 2],
395
+ * ] satisfies readonly (readonly [string, number])[];
396
+ *
397
+ * const map = IMap.create(entries);
398
+ *
399
+ * const values = Array.from(map.values());
400
+ *
401
+ * assert.deepStrictEqual(values, [1, 2]);
402
+ * ```
403
+ *
148
404
  * @returns An iterable iterator of values.
149
405
  */
150
406
  values: () => IterableIterator<V>;
151
407
  /**
152
408
  * Returns an iterator for the entries (key-value pairs) in the map.
409
+ *
410
+ * @example
411
+ *
412
+ * ```ts
413
+ * const map = IMap.create([
414
+ * ['a', 1],
415
+ * ['b', 2],
416
+ * ]);
417
+ *
418
+ * const entries = Array.from(map.entries());
419
+ *
420
+ * assert.deepStrictEqual(entries, [
421
+ * ['a', 1],
422
+ * ['b', 2],
423
+ * ]);
424
+ * ```
425
+ *
153
426
  * @returns An iterable iterator of entries.
154
427
  */
155
428
  entries: () => IterableIterator<readonly [K, V]>;
156
429
  /**
157
430
  * Converts the keys of the map to an array.
431
+ *
432
+ * @example
433
+ *
434
+ * ```ts
435
+ * const entries = [
436
+ * ['x', 10],
437
+ * ['y', 20],
438
+ * ] satisfies readonly (readonly [string, number])[];
439
+ *
440
+ * const map = IMap.create(entries);
441
+ *
442
+ * assert.deepStrictEqual(map.toKeysArray(), ['x', 'y']);
443
+ * ```
444
+ *
158
445
  * @returns A readonly array of keys.
159
446
  */
160
447
  toKeysArray: () => readonly K[];
161
448
  /**
162
449
  * Converts the values of the map to an array.
450
+ *
451
+ * @example
452
+ *
453
+ * ```ts
454
+ * const entries = [
455
+ * ['x', 10],
456
+ * ['y', 20],
457
+ * ] satisfies readonly (readonly [string, number])[];
458
+ *
459
+ * const map = IMap.create(entries);
460
+ *
461
+ * assert.deepStrictEqual(map.toValuesArray(), [10, 20]);
462
+ * ```
463
+ *
163
464
  * @returns A readonly array of values.
164
465
  */
165
466
  toValuesArray: () => readonly V[];
166
467
  /**
167
468
  * Converts the entries (key-value pairs) of the map to an array.
469
+ *
470
+ * @example
471
+ *
472
+ * ```ts
473
+ * const entries = [
474
+ * ['a', 1],
475
+ * ['b', 2],
476
+ * ] satisfies readonly (readonly [string, number])[];
477
+ *
478
+ * const map = IMap.create(entries);
479
+ *
480
+ * assert.deepStrictEqual(map.toEntriesArray(), [
481
+ * ['a', 1],
482
+ * ['b', 2],
483
+ * ]);
484
+ * ```
485
+ *
168
486
  * @returns A readonly array of entries.
169
487
  */
170
488
  toEntriesArray: () => readonly (readonly [K, V])[];
171
489
  /**
172
- * Converts the map to an array of entries (key-value pairs).
173
- * Alias for `toEntriesArray`.
490
+ * Converts the map to an array of entries (key-value pairs). Alias for
491
+ * `toEntriesArray`.
492
+ *
493
+ * @example
494
+ *
495
+ * ```ts
496
+ * const entries = [
497
+ * ['k1', 'v1'],
498
+ * ['k2', 'v2'],
499
+ * ] satisfies readonly (readonly [string, string])[];
500
+ *
501
+ * const map = IMap.create(entries);
502
+ *
503
+ * assert.deepStrictEqual(map.toArray(), [
504
+ * ['k1', 'v1'],
505
+ * ['k2', 'v2'],
506
+ * ]);
507
+ * ```
508
+ *
174
509
  * @returns A readonly array of entries.
175
510
  */
176
511
  toArray: () => readonly (readonly [K, V])[];
177
512
  /**
178
513
  * Returns the underlying readonly JavaScript Map.
514
+ *
515
+ * @example
516
+ *
517
+ * ```ts
518
+ * const entries = [['key', 1]] satisfies readonly (readonly [string, number])[];
519
+ *
520
+ * const map = IMap.create(entries);
521
+ *
522
+ * const raw = map.toRawMap();
523
+ *
524
+ * assert.ok(is.map(raw));
525
+ * assert(raw.get('key') === 1);
526
+ * ```
527
+ *
179
528
  * @returns The raw ReadonlyMap instance.
180
529
  */
181
530
  toRawMap: () => ReadonlyMap<K, V>;
182
531
  }>;
183
532
  /**
184
- * Represents an immutable map with high-performance operations and functional programming support.
533
+ * Represents an immutable map with high-performance operations and functional
534
+ * programming support.
185
535
  *
186
- * IMap is a persistent data structure that provides all the functionality of JavaScript's Map
187
- * while maintaining immutability. All operations that would normally mutate the map instead
188
- * return new IMap instances, making it safe for functional programming and concurrent access.
536
+ * IMap is a persistent data structure that provides all the functionality of
537
+ * JavaScript's Map while maintaining immutability. All operations that would
538
+ * normally mutate the map instead return new IMap instances, making it safe for
539
+ * functional programming and concurrent access.
189
540
  *
190
541
  * **Key Features:**
542
+ *
191
543
  * - **Immutable**: All mutation operations return new instances
192
- * - **High Performance**: O(1) average-case for get/set/has/delete operations
193
544
  * - **Type Safe**: Full TypeScript support with generic key/value types
194
545
  * - **Iterable**: Implements standard JavaScript iteration protocols
195
546
  * - **Functional**: Rich API for map, filter, reduce-style operations
196
547
  *
197
548
  * **When to Use:**
549
+ *
198
550
  * - State management in functional applications
199
551
  * - Caching with immutable guarantees
200
552
  * - Data structures that need to be shared across components
@@ -202,156 +554,76 @@ type IMapInterface<K extends MapSetKeyType, V> = Readonly<{
202
554
  *
203
555
  * @template K The type of the keys in the map. Must extend MapSetKeyType.
204
556
  * @template V The type of the values in the map.
205
- *
206
- * @example
207
- * ```typescript
208
- * // Create an immutable map with initial data
209
- * let userPreferences = IMap.create<string, UserPreference>([
210
- * ["theme", { value: "dark", lastModified: Date.now() }],
211
- * ["language", { value: "en", lastModified: Date.now() }]
212
- * ]);
213
- *
214
- * console.log(userPreferences.get("theme").unwrapOr(defaultPreference));
215
- * console.log(userPreferences.size); // Output: 2
216
- *
217
- * // All operations return new instances - original is unchanged
218
- * const updated = userPreferences
219
- * .set("notifications", { value: true, lastModified: Date.now() })
220
- * .update("theme", pref => ({ ...pref, value: "light" }));
221
- *
222
- * console.log(userPreferences.has("notifications")); // false (original unchanged)
223
- * console.log(updated.has("notifications")); // true (new instance)
224
- *
225
- * // Efficient iteration and transformation
226
- * for (const [key, preference] of updated) {
227
- * console.log(`${key}: ${preference.value}`);
228
- * }
229
- *
230
- * // Functional transformations
231
- * const withTimestamps = updated.map((pref, key) => ({
232
- * ...pref,
233
- * accessedAt: Date.now()
234
- * }));
235
- *
236
- * // Type-safe operations with narrowing
237
- * const stringKeys = IMap.create<number | string, any>([[1, "a"], ["b", 2]]);
238
- * const onlyStringKeys = stringKeys.mapKeys(key =>
239
- * typeof key === "string" ? key : key.toString()
240
- * );
241
- * ```
242
557
  */
243
558
  export type IMap<K extends MapSetKeyType, V> = Iterable<readonly [K, V]> & IMapInterface<K, V>;
244
- /**
245
- * Provides utility functions for IMap.
246
- */
559
+ /** Provides utility functions for IMap. */
247
560
  export declare namespace IMap {
248
561
  /**
249
562
  * Creates a new IMap instance from an iterable of key-value pairs.
250
563
  *
251
- * This factory function accepts any iterable of [key, value] tuples, including arrays,
252
- * JavaScript Maps, other IMaps, or custom iterables. The resulting IMap will contain
253
- * all the entries from the input iterable.
564
+ * This factory function accepts any iterable of [key, value] tuples,
565
+ * including arrays, JavaScript Maps, other IMaps, or custom iterables. The
566
+ * resulting IMap will contain all the entries from the input iterable.
254
567
  *
255
568
  * **Performance:** O(n) where n is the number of entries in the iterable.
256
569
  *
257
- * @template K The type of the keys. Must extend MapSetKeyType.
258
- * @template V The type of the values.
259
- * @param iterable An iterable of key-value pairs (e.g., Array, Map, IMap, etc.)
260
- * @returns A new IMap instance containing all entries from the iterable.
261
- *
262
570
  * @example
263
- * ```typescript
264
- * // From array of tuples
265
- * const userScores = IMap.create<string, number>([
266
- * ["alice", 95],
267
- * ["bob", 87],
268
- * ["charlie", 92]
571
+ *
572
+ * ```ts
573
+ * const map = IMap.create<string, number | string>([
574
+ * ['id', 1],
575
+ * ['status', 'active'],
269
576
  * ]);
270
- * console.log(userScores.get("alice").unwrap()); // Output: 95
271
- *
272
- * // From JavaScript Map
273
- * const jsMap = new Map([["config", { debug: true }], ["env", "production"]]);
274
- * const config = IMap.create(jsMap);
275
- * console.log(config.get("env").unwrap()); // Output: "production"
276
- *
277
- * // From another IMap (creates a copy)
278
- * const originalMap = IMap.create<string, boolean>([["enabled", true]]);
279
- * const copiedMap = IMap.create(originalMap);
280
- * console.log(copiedMap.get("enabled").unwrap()); // Output: true
281
- *
282
- * // Empty map
283
- * const emptyMap = IMap.create<string, number>([]);
284
- * console.log(emptyMap.size); // Output: 0
285
- *
286
- * // From custom iterable
287
- * function* generateEntries(): Generator<[string, number]> {
288
- * for (const i of range(3)) {
289
- * yield [`item${i}`, i * 10];
290
- * }
291
- * }
292
- * const generatedMap = IMap.create(generateEntries());
293
- * console.log(generatedMap.size); // Output: 3
577
+ *
578
+ * assert(map.size === 2);
579
+ * assert.deepStrictEqual(map.get('status'), Optional.some('active'));
294
580
  * ```
581
+ *
582
+ * @template K The type of the keys. Must extend MapSetKeyType.
583
+ * @template V The type of the values.
584
+ * @param iterable An iterable of key-value pairs (e.g., Array, Map, IMap,
585
+ * etc.)
586
+ * @returns A new IMap instance containing all entries from the iterable.
295
587
  */
296
588
  const create: <K extends MapSetKeyType, V>(iterable: Iterable<readonly [K, V]>) => IMap<K, V>;
297
589
  /**
298
590
  * Checks if two IMap instances are structurally equal.
299
591
  *
300
- * Two IMaps are considered equal if they have the same size and contain exactly the same
301
- * key-value pairs. The order of entries does not matter for equality comparison.
302
- * Values are compared using JavaScript's `===` operator.
592
+ * Two IMaps are considered equal if they have the same size and contain
593
+ * exactly the same key-value pairs. The order of entries does not matter for
594
+ * equality comparison. Values are compared using JavaScript's `===`
595
+ * operator.
303
596
  *
304
597
  * **Performance:** O(n) where n is the size of the smaller map.
305
598
  *
306
- * @template K The type of the keys.
307
- * @template V The type of the values.
308
- * @param a The first IMap instance to compare.
309
- * @param b The second IMap instance to compare.
310
- * @returns `true` if the maps contain exactly the same key-value pairs, `false` otherwise.
311
- *
312
599
  * @example
313
- * ```typescript
314
- * // Basic equality comparison
315
- * const preferences1 = IMap.create<string, boolean>([
316
- * ["darkMode", true],
317
- * ["notifications", false]
318
- * ]);
319
- * const preferences2 = IMap.create<string, boolean>([
320
- * ["darkMode", true],
321
- * ["notifications", false]
322
- * ]);
323
- * const preferences3 = IMap.create<string, boolean>([
324
- * ["notifications", false],
325
- * ["darkMode", true] // Order doesn't matter
326
- * ]);
327
- *
328
- * console.log(IMap.equal(preferences1, preferences2)); // true
329
- * console.log(IMap.equal(preferences1, preferences3)); // true (order doesn't matter)
330
600
  *
331
- * // Different values
332
- * const preferences4 = IMap.create<string, boolean>([
333
- * ["darkMode", false], // Different value
334
- * ["notifications", false]
601
+ * ```ts
602
+ * const first = IMap.create<'a' | 'b', number>([
603
+ * ['a', 1],
604
+ * ['b', 2],
335
605
  * ]);
336
- * console.log(IMap.equal(preferences1, preferences4)); // false
337
606
  *
338
- * // Different keys
339
- * const preferences5 = IMap.create<string, boolean>([
340
- * ["darkMode", true],
341
- * ["sounds", false] // Different key
607
+ * const second = IMap.create<'a' | 'b', number>([
608
+ * ['b', 2],
609
+ * ['a', 1],
342
610
  * ]);
343
- * console.log(IMap.equal(preferences1, preferences5)); // false
344
611
  *
345
- * // Empty maps
346
- * const empty1 = IMap.create<string, number>([]);
347
- * const empty2 = IMap.create<string, number>([]);
348
- * console.log(IMap.equal(empty1, empty2)); // true
612
+ * const third = IMap.create<'a' | 'b', number>([
613
+ * ['a', 1],
614
+ * ['b', 3],
615
+ * ]);
349
616
  *
350
- * // Note: For deep equality of object values, use a custom comparison
351
- * const users1 = IMap.create<string, User>([["1", { name: "Alice" }]]);
352
- * const users2 = IMap.create<string, User>([["1", { name: "Alice" }]]);
353
- * console.log(IMap.equal(users1, users2)); // false (different object references)
617
+ * assert.ok(IMap.equal(first, second));
618
+ * assert.notOk(IMap.equal(first, third));
354
619
  * ```
620
+ *
621
+ * @template K The type of the keys.
622
+ * @template V The type of the values.
623
+ * @param a The first IMap instance to compare.
624
+ * @param b The second IMap instance to compare.
625
+ * @returns `true` if the maps contain exactly the same key-value pairs,
626
+ * `false` otherwise.
355
627
  */
356
628
  const equal: <K extends MapSetKeyType, V>(a: IMap<K, V>, b: IMap<K, V>) => boolean;
357
629
  }