ts-data-forge 9.0.0 → 10.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 (447) hide show
  1. package/README.md +1 -1
  2. package/dist/array/impl/array-utils-creation.d.mts +4 -4
  3. package/dist/array/impl/array-utils-creation.d.mts.map +1 -1
  4. package/dist/array/impl/array-utils-creation.mjs +17 -112
  5. package/dist/array/impl/array-utils-creation.mjs.map +1 -1
  6. package/dist/array/impl/array-utils-element-access.d.mts.map +1 -1
  7. package/dist/array/impl/array-utils-element-access.mjs +22 -61
  8. package/dist/array/impl/array-utils-element-access.mjs.map +1 -1
  9. package/dist/array/impl/array-utils-iterators.d.mts.map +1 -1
  10. package/dist/array/impl/array-utils-iterators.mjs +9 -63
  11. package/dist/array/impl/array-utils-iterators.mjs.map +1 -1
  12. package/dist/array/impl/array-utils-modification.d.mts +7 -7
  13. package/dist/array/impl/array-utils-modification.d.mts.map +1 -1
  14. package/dist/array/impl/array-utils-modification.mjs +78 -78
  15. package/dist/array/impl/array-utils-modification.mjs.map +1 -1
  16. package/dist/array/impl/array-utils-reducing-value.mjs +95 -89
  17. package/dist/array/impl/array-utils-reducing-value.mjs.map +1 -1
  18. package/dist/array/impl/array-utils-search.mjs +100 -92
  19. package/dist/array/impl/array-utils-search.mjs.map +1 -1
  20. package/dist/array/impl/array-utils-set-op.d.mts.map +1 -1
  21. package/dist/array/impl/array-utils-set-op.mjs +31 -141
  22. package/dist/array/impl/array-utils-set-op.mjs.map +1 -1
  23. package/dist/array/impl/array-utils-size.d.mts.map +1 -1
  24. package/dist/array/impl/array-utils-size.mjs +4 -8
  25. package/dist/array/impl/array-utils-size.mjs.map +1 -1
  26. package/dist/array/impl/array-utils-slice-clamped.mjs +11 -12
  27. package/dist/array/impl/array-utils-slice-clamped.mjs.map +1 -1
  28. package/dist/array/impl/array-utils-slicing.d.mts.map +1 -1
  29. package/dist/array/impl/array-utils-slicing.mjs +44 -96
  30. package/dist/array/impl/array-utils-slicing.mjs.map +1 -1
  31. package/dist/array/impl/array-utils-transformation.d.mts +4 -4
  32. package/dist/array/impl/array-utils-transformation.d.mts.map +1 -1
  33. package/dist/array/impl/array-utils-transformation.mjs +150 -292
  34. package/dist/array/impl/array-utils-transformation.mjs.map +1 -1
  35. package/dist/array/impl/array-utils-validation.d.mts +17 -17
  36. package/dist/array/impl/array-utils-validation.d.mts.map +1 -1
  37. package/dist/array/impl/array-utils-validation.mjs +23 -174
  38. package/dist/array/impl/array-utils-validation.mjs.map +1 -1
  39. package/dist/array/impl/index.mjs +1 -1
  40. package/dist/collections/imap-mapped.d.mts.map +1 -1
  41. package/dist/collections/imap-mapped.mjs +243 -330
  42. package/dist/collections/imap-mapped.mjs.map +1 -1
  43. package/dist/collections/imap.d.mts.map +1 -1
  44. package/dist/collections/imap.mjs +190 -275
  45. package/dist/collections/imap.mjs.map +1 -1
  46. package/dist/collections/iset-mapped.d.mts +1 -1
  47. package/dist/collections/iset-mapped.d.mts.map +1 -1
  48. package/dist/collections/iset-mapped.mjs +222 -444
  49. package/dist/collections/iset-mapped.mjs.map +1 -1
  50. package/dist/collections/iset.d.mts +1 -1
  51. package/dist/collections/iset.d.mts.map +1 -1
  52. package/dist/collections/iset.mjs +158 -324
  53. package/dist/collections/iset.mjs.map +1 -1
  54. package/dist/collections/queue.d.mts.map +1 -1
  55. package/dist/collections/queue.mjs +106 -178
  56. package/dist/collections/queue.mjs.map +1 -1
  57. package/dist/collections/stack.d.mts.map +1 -1
  58. package/dist/collections/stack.mjs +95 -165
  59. package/dist/collections/stack.mjs.map +1 -1
  60. package/dist/entry-point.mjs +2 -0
  61. package/dist/entry-point.mjs.map +1 -1
  62. package/dist/expect-type.d.mts +1 -1
  63. package/dist/expect-type.d.mts.map +1 -1
  64. package/dist/expect-type.mjs +1 -69
  65. package/dist/expect-type.mjs.map +1 -1
  66. package/dist/functional/match.mjs +9 -9
  67. package/dist/functional/match.mjs.map +1 -1
  68. package/dist/functional/optional/impl/optional-expect-to-be.mjs +13 -14
  69. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
  70. package/dist/functional/optional/impl/optional-filter.mjs +14 -15
  71. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
  72. package/dist/functional/optional/impl/optional-flat-map.mjs +10 -11
  73. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
  74. package/dist/functional/optional/impl/optional-from-nullable.d.mts.map +1 -1
  75. package/dist/functional/optional/impl/optional-from-nullable.mjs +1 -25
  76. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
  77. package/dist/functional/optional/impl/optional-is-none.d.mts.map +1 -1
  78. package/dist/functional/optional/impl/optional-is-none.mjs +0 -19
  79. package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
  80. package/dist/functional/optional/impl/optional-is-optional.d.mts.map +1 -1
  81. package/dist/functional/optional/impl/optional-is-optional.mjs +1 -23
  82. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  83. package/dist/functional/optional/impl/optional-is-some.d.mts.map +1 -1
  84. package/dist/functional/optional/impl/optional-is-some.mjs +0 -20
  85. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
  86. package/dist/functional/optional/impl/optional-map.mjs +13 -14
  87. package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
  88. package/dist/functional/optional/impl/optional-none.mjs +0 -16
  89. package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
  90. package/dist/functional/optional/impl/optional-or-else.mjs +10 -11
  91. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
  92. package/dist/functional/optional/impl/optional-some.d.mts.map +1 -1
  93. package/dist/functional/optional/impl/optional-some.mjs +2 -21
  94. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  95. package/dist/functional/optional/impl/optional-to-nullable.d.mts.map +1 -1
  96. package/dist/functional/optional/impl/optional-to-nullable.mjs +1 -27
  97. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
  98. package/dist/functional/optional/impl/optional-unwrap-or.mjs +9 -10
  99. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
  100. package/dist/functional/optional/impl/optional-unwrap-throw.d.mts.map +1 -1
  101. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +4 -32
  102. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
  103. package/dist/functional/optional/impl/optional-unwrap.mjs +4 -4
  104. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
  105. package/dist/functional/optional/impl/optional-zip.d.mts.map +1 -1
  106. package/dist/functional/optional/impl/optional-zip.mjs +1 -35
  107. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
  108. package/dist/functional/optional/impl/tag.mjs +2 -3
  109. package/dist/functional/optional/impl/tag.mjs.map +1 -1
  110. package/dist/functional/pipe.d.mts.map +1 -1
  111. package/dist/functional/pipe.mjs +9 -34
  112. package/dist/functional/pipe.mjs.map +1 -1
  113. package/dist/functional/result/impl/result-err.d.mts.map +1 -1
  114. package/dist/functional/result/impl/result-err.mjs +2 -27
  115. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  116. package/dist/functional/result/impl/result-expect-to-be.mjs +13 -15
  117. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
  118. package/dist/functional/result/impl/result-flat-map.mjs +16 -16
  119. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
  120. package/dist/functional/result/impl/result-fold.mjs +16 -16
  121. package/dist/functional/result/impl/result-fold.mjs.map +1 -1
  122. package/dist/functional/result/impl/result-from-promise.d.mts.map +1 -1
  123. package/dist/functional/result/impl/result-from-promise.mjs +4 -31
  124. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
  125. package/dist/functional/result/impl/result-from-throwable.d.mts.map +1 -1
  126. package/dist/functional/result/impl/result-from-throwable.mjs +8 -38
  127. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
  128. package/dist/functional/result/impl/result-is-err.d.mts.map +1 -1
  129. package/dist/functional/result/impl/result-is-err.mjs +0 -19
  130. package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
  131. package/dist/functional/result/impl/result-is-ok.d.mts.map +1 -1
  132. package/dist/functional/result/impl/result-is-ok.mjs +0 -19
  133. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
  134. package/dist/functional/result/impl/result-is-result.d.mts.map +1 -1
  135. package/dist/functional/result/impl/result-is-result.mjs +1 -23
  136. package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
  137. package/dist/functional/result/impl/result-map-err.mjs +16 -16
  138. package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
  139. package/dist/functional/result/impl/result-map.mjs +16 -16
  140. package/dist/functional/result/impl/result-map.mjs.map +1 -1
  141. package/dist/functional/result/impl/result-ok.d.mts.map +1 -1
  142. package/dist/functional/result/impl/result-ok.mjs +2 -27
  143. package/dist/functional/result/impl/result-ok.mjs.map +1 -1
  144. package/dist/functional/result/impl/result-or-else.mjs +10 -12
  145. package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
  146. package/dist/functional/result/impl/result-swap.d.mts.map +1 -1
  147. package/dist/functional/result/impl/result-swap.mjs +4 -22
  148. package/dist/functional/result/impl/result-swap.mjs.map +1 -1
  149. package/dist/functional/result/impl/result-to-optional.d.mts.map +1 -1
  150. package/dist/functional/result/impl/result-to-optional.mjs +0 -27
  151. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
  152. package/dist/functional/result/impl/result-unwrap-err-or.mjs +9 -11
  153. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
  154. package/dist/functional/result/impl/result-unwrap-err-throw.d.mts.map +1 -1
  155. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +13 -40
  156. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
  157. package/dist/functional/result/impl/result-unwrap-err.d.mts.map +1 -1
  158. package/dist/functional/result/impl/result-unwrap-err.mjs +4 -32
  159. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
  160. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +9 -11
  161. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
  162. package/dist/functional/result/impl/result-unwrap-ok.mjs +4 -4
  163. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
  164. package/dist/functional/result/impl/result-unwrap-throw.d.mts.map +1 -1
  165. package/dist/functional/result/impl/result-unwrap-throw.mjs +4 -35
  166. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
  167. package/dist/functional/result/impl/result-zip.d.mts.map +1 -1
  168. package/dist/functional/result/impl/result-zip.mjs +1 -34
  169. package/dist/functional/result/impl/result-zip.mjs.map +1 -1
  170. package/dist/functional/result/impl/tag.mjs +2 -3
  171. package/dist/functional/result/impl/tag.mjs.map +1 -1
  172. package/dist/functional/ternary-result/impl/tag.mjs +3 -5
  173. package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
  174. package/dist/functional/ternary-result/impl/ternary-result-err.d.mts.map +1 -1
  175. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +2 -15
  176. package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
  177. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs +13 -13
  178. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
  179. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +27 -26
  180. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
  181. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +21 -22
  182. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
  183. package/dist/functional/ternary-result/impl/ternary-result-from-promise.d.mts.map +1 -1
  184. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +4 -20
  185. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
  186. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.d.mts.map +1 -1
  187. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +7 -25
  188. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
  189. package/dist/functional/ternary-result/impl/ternary-result-is-err.d.mts.map +1 -1
  190. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +0 -17
  191. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
  192. package/dist/functional/ternary-result/impl/ternary-result-is-ok.d.mts.map +1 -1
  193. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +0 -19
  194. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
  195. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.d.mts.map +1 -1
  196. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +1 -25
  197. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
  198. package/dist/functional/ternary-result/impl/ternary-result-is-warn.d.mts.map +1 -1
  199. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +0 -18
  200. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
  201. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +13 -15
  202. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
  203. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +18 -18
  204. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
  205. package/dist/functional/ternary-result/impl/ternary-result-map.mjs +21 -22
  206. package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
  207. package/dist/functional/ternary-result/impl/ternary-result-ok.d.mts.map +1 -1
  208. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +2 -16
  209. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
  210. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +9 -9
  211. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
  212. package/dist/functional/ternary-result/impl/ternary-result-to-optional.d.mts.map +1 -1
  213. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +4 -22
  214. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
  215. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs +9 -9
  216. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
  217. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.d.mts.map +1 -1
  218. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +12 -27
  219. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
  220. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.d.mts.map +1 -1
  221. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +4 -19
  222. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
  223. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs +9 -9
  224. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
  225. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +4 -5
  226. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
  227. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.d.mts.map +1 -1
  228. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +15 -27
  229. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
  230. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs +9 -9
  231. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
  232. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.d.mts.map +1 -1
  233. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +10 -24
  234. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
  235. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.d.mts.map +1 -1
  236. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +4 -19
  237. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
  238. package/dist/functional/ternary-result/impl/ternary-result-warn.d.mts.map +1 -1
  239. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +3 -19
  240. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
  241. package/dist/functional/ternary-result/impl/ternary-result-zip.d.mts.map +1 -1
  242. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +14 -45
  243. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
  244. package/dist/functional/ternary-result/impl/variant-name.d.mts +1 -1
  245. package/dist/functional/ternary-result/impl/variant-name.d.mts.map +1 -1
  246. package/dist/functional/ternary-result/impl/variant-name.mjs +8 -9
  247. package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
  248. package/dist/guard/as-length-bounded-array.d.mts +117 -0
  249. package/dist/guard/as-length-bounded-array.d.mts.map +1 -0
  250. package/dist/guard/as-length-bounded-array.mjs +37 -0
  251. package/dist/guard/as-length-bounded-array.mjs.map +1 -0
  252. package/dist/guard/has-key.d.mts.map +1 -1
  253. package/dist/guard/has-key.mjs +0 -41
  254. package/dist/guard/has-key.mjs.map +1 -1
  255. package/dist/guard/index.d.mts +2 -0
  256. package/dist/guard/index.d.mts.map +1 -1
  257. package/dist/guard/index.mjs +2 -0
  258. package/dist/guard/index.mjs.map +1 -1
  259. package/dist/guard/is-length-bounded-array.d.mts +159 -0
  260. package/dist/guard/is-length-bounded-array.d.mts.map +1 -0
  261. package/dist/guard/is-length-bounded-array.mjs +7 -0
  262. package/dist/guard/is-length-bounded-array.mjs.map +1 -0
  263. package/dist/guard/is-length-bounded-string.d.mts +5 -6
  264. package/dist/guard/is-length-bounded-string.d.mts.map +1 -1
  265. package/dist/guard/is-length-bounded-string.mjs +0 -157
  266. package/dist/guard/is-length-bounded-string.mjs.map +1 -1
  267. package/dist/guard/is-non-empty-string.d.mts +1 -1
  268. package/dist/guard/is-non-empty-string.d.mts.map +1 -1
  269. package/dist/guard/is-non-empty-string.mjs +1 -38
  270. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  271. package/dist/guard/is-non-null-object.d.mts.map +1 -1
  272. package/dist/guard/is-non-null-object.mjs +1 -35
  273. package/dist/guard/is-non-null-object.mjs.map +1 -1
  274. package/dist/guard/is-primitive.d.mts.map +1 -1
  275. package/dist/guard/is-primitive.mjs +12 -43
  276. package/dist/guard/is-primitive.mjs.map +1 -1
  277. package/dist/guard/is-record.d.mts.map +1 -1
  278. package/dist/guard/is-record.mjs +0 -86
  279. package/dist/guard/is-record.mjs.map +1 -1
  280. package/dist/guard/is-type.d.mts.map +1 -1
  281. package/dist/guard/is-type.mjs +12 -399
  282. package/dist/guard/is-type.mjs.map +1 -1
  283. package/dist/guard/key-is-in.d.mts.map +1 -1
  284. package/dist/guard/key-is-in.mjs +0 -40
  285. package/dist/guard/key-is-in.mjs.map +1 -1
  286. package/dist/index.mjs +2 -0
  287. package/dist/index.mjs.map +1 -1
  288. package/dist/iterator/range.mjs +16 -16
  289. package/dist/iterator/range.mjs.map +1 -1
  290. package/dist/json/json.d.mts.map +1 -1
  291. package/dist/json/json.mjs +52 -340
  292. package/dist/json/json.mjs.map +1 -1
  293. package/dist/number/branded-types/finite-number.d.mts +3 -3
  294. package/dist/number/branded-types/finite-number.mjs +135 -154
  295. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  296. package/dist/number/branded-types/int.d.mts +4 -4
  297. package/dist/number/branded-types/int.mjs +205 -245
  298. package/dist/number/branded-types/int.mjs.map +1 -1
  299. package/dist/number/branded-types/int16.d.mts +15 -15
  300. package/dist/number/branded-types/int16.mjs +116 -123
  301. package/dist/number/branded-types/int16.mjs.map +1 -1
  302. package/dist/number/branded-types/int32.d.mts +11 -11
  303. package/dist/number/branded-types/int32.mjs +116 -123
  304. package/dist/number/branded-types/int32.mjs.map +1 -1
  305. package/dist/number/branded-types/negative-finite-number.d.mts +4 -4
  306. package/dist/number/branded-types/negative-finite-number.mjs +129 -144
  307. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  308. package/dist/number/branded-types/negative-int.d.mts +5 -5
  309. package/dist/number/branded-types/negative-int.mjs +94 -113
  310. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  311. package/dist/number/branded-types/negative-safe-int.d.mts +5 -5
  312. package/dist/number/branded-types/negative-safe-int.mjs +103 -124
  313. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  314. package/dist/number/branded-types/non-negative-finite-number.d.mts +5 -5
  315. package/dist/number/branded-types/non-negative-finite-number.mjs +136 -142
  316. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  317. package/dist/number/branded-types/non-negative-int16.d.mts +16 -16
  318. package/dist/number/branded-types/non-negative-int16.mjs +109 -118
  319. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  320. package/dist/number/branded-types/non-negative-int32.d.mts +12 -12
  321. package/dist/number/branded-types/non-negative-int32.mjs +110 -119
  322. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  323. package/dist/number/branded-types/non-positive-finite-number.d.mts +3 -3
  324. package/dist/number/branded-types/non-positive-finite-number.mjs +120 -124
  325. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  326. package/dist/number/branded-types/non-positive-int.d.mts +4 -4
  327. package/dist/number/branded-types/non-positive-int.mjs +167 -212
  328. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  329. package/dist/number/branded-types/non-positive-safe-int.d.mts +4 -4
  330. package/dist/number/branded-types/non-positive-safe-int.mjs +95 -106
  331. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  332. package/dist/number/branded-types/non-zero-finite-number.d.mts +4 -4
  333. package/dist/number/branded-types/non-zero-finite-number.mjs +114 -123
  334. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  335. package/dist/number/branded-types/non-zero-int.d.mts +2 -2
  336. package/dist/number/branded-types/non-zero-int.mjs +72 -83
  337. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  338. package/dist/number/branded-types/non-zero-int16.d.mts +7 -7
  339. package/dist/number/branded-types/non-zero-int16.mjs +96 -107
  340. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  341. package/dist/number/branded-types/non-zero-int32.d.mts +5 -5
  342. package/dist/number/branded-types/non-zero-int32.mjs +97 -108
  343. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  344. package/dist/number/branded-types/non-zero-safe-int.d.mts +2 -2
  345. package/dist/number/branded-types/non-zero-safe-int.mjs +100 -111
  346. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  347. package/dist/number/branded-types/non-zero-uint16.d.mts +8 -8
  348. package/dist/number/branded-types/non-zero-uint16.mjs +96 -107
  349. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  350. package/dist/number/branded-types/non-zero-uint32.d.mts +6 -6
  351. package/dist/number/branded-types/non-zero-uint32.mjs +96 -107
  352. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  353. package/dist/number/branded-types/positive-finite-number.d.mts +8 -8
  354. package/dist/number/branded-types/positive-finite-number.mjs +139 -141
  355. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  356. package/dist/number/branded-types/positive-int.d.mts +11 -11
  357. package/dist/number/branded-types/positive-int.mjs +228 -271
  358. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  359. package/dist/number/branded-types/positive-int16.d.mts +19 -19
  360. package/dist/number/branded-types/positive-int16.mjs +109 -118
  361. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  362. package/dist/number/branded-types/positive-int32.d.mts +15 -15
  363. package/dist/number/branded-types/positive-int32.mjs +109 -118
  364. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  365. package/dist/number/branded-types/positive-safe-int.d.mts +11 -11
  366. package/dist/number/branded-types/positive-safe-int.mjs +244 -275
  367. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  368. package/dist/number/branded-types/positive-uint16.d.mts +17 -17
  369. package/dist/number/branded-types/positive-uint16.mjs +109 -118
  370. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  371. package/dist/number/branded-types/positive-uint32.d.mts +13 -13
  372. package/dist/number/branded-types/positive-uint32.mjs +110 -119
  373. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  374. package/dist/number/branded-types/safe-int.d.mts +4 -4
  375. package/dist/number/branded-types/safe-int.mjs +251 -292
  376. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  377. package/dist/number/branded-types/safe-uint.d.mts +8 -8
  378. package/dist/number/branded-types/safe-uint.mjs +111 -119
  379. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  380. package/dist/number/branded-types/uint.d.mts +8 -8
  381. package/dist/number/branded-types/uint.mjs +198 -225
  382. package/dist/number/branded-types/uint.mjs.map +1 -1
  383. package/dist/number/branded-types/uint16.d.mts +14 -14
  384. package/dist/number/branded-types/uint16.mjs +109 -119
  385. package/dist/number/branded-types/uint16.mjs.map +1 -1
  386. package/dist/number/branded-types/uint32.d.mts +10 -10
  387. package/dist/number/branded-types/uint32.mjs +110 -117
  388. package/dist/number/branded-types/uint32.mjs.map +1 -1
  389. package/dist/number/enum/int8.mjs +119 -145
  390. package/dist/number/enum/int8.mjs.map +1 -1
  391. package/dist/number/enum/uint8.mjs +107 -121
  392. package/dist/number/enum/uint8.mjs.map +1 -1
  393. package/dist/number/num.d.mts +2 -2
  394. package/dist/number/num.d.mts.map +1 -1
  395. package/dist/number/num.mjs +76 -537
  396. package/dist/number/num.mjs.map +1 -1
  397. package/dist/number/refined-number-utils.d.mts +1 -1
  398. package/dist/number/refined-number-utils.d.mts.map +1 -1
  399. package/dist/number/refined-number-utils.mjs +127 -263
  400. package/dist/number/refined-number-utils.mjs.map +1 -1
  401. package/dist/object/object.d.mts.map +1 -1
  402. package/dist/object/object.mjs +107 -222
  403. package/dist/object/object.mjs.map +1 -1
  404. package/dist/others/cast-mutable.d.mts.map +1 -1
  405. package/dist/others/cast-mutable.mjs +8 -37
  406. package/dist/others/cast-mutable.mjs.map +1 -1
  407. package/dist/others/cast-readonly.d.mts.map +1 -1
  408. package/dist/others/cast-readonly.mjs +8 -36
  409. package/dist/others/cast-readonly.mjs.map +1 -1
  410. package/dist/others/debounce-function.d.mts.map +1 -1
  411. package/dist/others/debounce-function.mjs +7 -16
  412. package/dist/others/debounce-function.mjs.map +1 -1
  413. package/dist/others/fast-deep-equal.d.mts.map +1 -1
  414. package/dist/others/fast-deep-equal.mjs +43 -59
  415. package/dist/others/fast-deep-equal.mjs.map +1 -1
  416. package/dist/others/if-then.d.mts.map +1 -1
  417. package/dist/others/if-then.mjs +0 -29
  418. package/dist/others/if-then.mjs.map +1 -1
  419. package/dist/others/map-nullable.mjs +9 -9
  420. package/dist/others/map-nullable.mjs.map +1 -1
  421. package/dist/others/memoize-function.mjs +12 -12
  422. package/dist/others/memoize-function.mjs.map +1 -1
  423. package/dist/others/tuple.d.mts.map +1 -1
  424. package/dist/others/tuple.mjs +0 -50
  425. package/dist/others/tuple.mjs.map +1 -1
  426. package/dist/others/unknown-to-string.d.mts.map +1 -1
  427. package/dist/others/unknown-to-string.mjs +41 -88
  428. package/dist/others/unknown-to-string.mjs.map +1 -1
  429. package/dist/promise/promise.d.mts.map +1 -1
  430. package/dist/promise/promise.mjs +4 -49
  431. package/dist/promise/promise.mjs.map +1 -1
  432. package/package.json +14 -13
  433. package/src/array/impl/array-utils-creation.mts +3 -3
  434. package/src/array/impl/array-utils-modification.mts +7 -7
  435. package/src/array/impl/array-utils-modification.test.mts +4 -4
  436. package/src/array/impl/array-utils-transformation.mts +4 -4
  437. package/src/array/impl/array-utils-transformation.test.mts +7 -7
  438. package/src/array/impl/array-utils-validation.mts +24 -24
  439. package/src/array/impl/array-utils-validation.test.mts +94 -92
  440. package/src/collections/queue.test.mts +1 -1
  441. package/src/guard/as-length-bounded-array.mts +190 -0
  442. package/src/guard/as-length-bounded-array.test.mts +118 -0
  443. package/src/guard/index.mts +2 -0
  444. package/src/guard/is-length-bounded-array.mts +195 -0
  445. package/src/guard/is-length-bounded-array.test.mts +169 -0
  446. package/src/guard/is-length-bounded-string.mts +6 -6
  447. package/src/object/object.test.mts +3 -3
@@ -35,462 +35,240 @@ import '../number/enum/uint8.mjs';
35
35
  import '../number/num.mjs';
36
36
  import '../number/refined-number-utils.mjs';
37
37
 
38
- /** Provides utility functions for ISetMapped. */
39
38
  var ISetMapped;
40
- (function (ISetMapped) {
41
- /**
42
- * Creates a new ISetMapped instance with custom element transformation
43
- * functions.
44
- *
45
- * This factory function creates an immutable set that can use complex objects
46
- * as elements by providing bidirectional transformation functions. The
47
- * `toKey` function converts your custom element type to a primitive type that
48
- * can be efficiently stored, while `fromKey` reconstructs the original
49
- * element type for iteration and access.
50
- *
51
- * **Performance:** O(n) where n is the number of elements in the iterable.
52
- *
53
- * @example
54
- *
55
- * ```ts
56
- * type Point = Readonly<{ x: number; tag: string }>;
57
- *
58
- * const toKey = (point: Point) => JSON.stringify(point);
59
- *
60
- * // eslint-disable-next-line total-functions/no-unsafe-type-assertion
61
- * const fromKey = (key: string) => JSON.parse(key) as Point;
62
- *
63
- * const set = ISetMapped.create<Point, string>(
64
- * [
65
- * { x: 1, tag: 'a' },
66
- * { x: 1, tag: 'a' },
67
- * { x: 2, tag: 'b' },
68
- * ],
69
- * toKey,
70
- * fromKey,
71
- * );
72
- *
73
- * assert.deepStrictEqual(Array.from(set), [
74
- * { x: 1, tag: 'a' },
75
- * { x: 2, tag: 'b' },
76
- * ]);
77
- * ```
78
- *
79
- * @template K The type of the custom elements.
80
- * @template KM The type of the mapped primitive keys.
81
- * @param iterable An iterable of elements using the custom element type.
82
- * @param toKey A function that converts a custom element `K` to a primitive
83
- * key `KM`. This function must be deterministic and produce unique values
84
- * for unique elements.
85
- * @param fromKey A function that converts a primitive key `KM` back to the
86
- * custom element `K`. This should be the inverse of `toKey`.
87
- * @returns A new ISetMapped instance containing all unique elements from the
88
- * iterable.
89
- */
90
- ISetMapped.create = (iterable, toKey, fromKey) => new ISetMappedClass(iterable, toKey, fromKey);
91
- /**
92
- * Checks if two ISetMapped instances are structurally equal.
93
- *
94
- * Two ISetMapped instances are considered equal if they have the same size
95
- * and contain exactly the same elements. The comparison is performed on the
96
- * underlying mapped keys, so the transformation functions themselves don't
97
- * need to be identical. Elements are compared based on their mapped key
98
- * representations.
99
- *
100
- * **Performance:** O(n) where n is the size of the smaller set.
101
- *
102
- * @example
103
- *
104
- * ```ts
105
- * type Point = Readonly<{ x: number; tag: string }>;
106
- *
107
- * const toKey = (point: Point) => JSON.stringify(point);
108
- *
109
- * // eslint-disable-next-line total-functions/no-unsafe-type-assertion
110
- * const fromKey = (key: string) => JSON.parse(key) as Point;
111
- *
112
- * const first = ISetMapped.create<Point, string>(
113
- * [
114
- * { x: 1, tag: 'a' },
115
- * { x: 2, tag: 'b' },
116
- * ],
117
- * toKey,
118
- * fromKey,
119
- * );
120
- *
121
- * const second = ISetMapped.create<Point, string>(
122
- * [
123
- * { x: 2, tag: 'b' },
124
- * { x: 1, tag: 'a' },
125
- * ],
126
- * toKey,
127
- * fromKey,
128
- * );
129
- *
130
- * const third = ISetMapped.create<Point, string>(
131
- * [{ x: 3, tag: 'c' }],
132
- * toKey,
133
- * fromKey,
134
- * );
135
- *
136
- * assert.isTrue(ISetMapped.equal(first, second));
137
- *
138
- * assert.isFalse(ISetMapped.equal(first, third));
139
- * ```
140
- *
141
- * @template K The type of the custom elements.
142
- * @template KM The type of the mapped primitive keys.
143
- * @param a The first ISetMapped instance to compare.
144
- * @param b The second ISetMapped instance to compare.
145
- * @returns `true` if the sets contain exactly the same elements, `false`
146
- * otherwise.
147
- */
148
- ISetMapped.equal = (a, b) => a.size === b.size && a.every((e) => b.has(e));
149
- /**
150
- * Computes the difference between two ISetMapped instances.
151
- *
152
- * @example
153
- *
154
- * ```ts
155
- * type Point = Readonly<{ x: number; tag: string }>;
156
- *
157
- * const toKey = (point: Point) => JSON.stringify(point);
158
- *
159
- * // eslint-disable-next-line total-functions/no-unsafe-type-assertion
160
- * const fromKey = (key: string) => JSON.parse(key) as Point;
161
- *
162
- * const previous = ISetMapped.create<Point, string>(
163
- * [
164
- * { x: 1, tag: 'a' },
165
- * { x: 2, tag: 'b' },
166
- * ],
167
- * toKey,
168
- * fromKey,
169
- * );
170
- *
171
- * const current = ISetMapped.create<Point, string>(
172
- * [
173
- * { x: 2, tag: 'b' },
174
- * { x: 3, tag: 'c' },
175
- * ],
176
- * toKey,
177
- * fromKey,
178
- * );
179
- *
180
- * const { added, deleted } = ISetMapped.diff(previous, current);
181
- *
182
- * assert.deepStrictEqual(Array.from(added), [{ x: 3, tag: 'c' }]);
183
- *
184
- * assert.deepStrictEqual(Array.from(deleted), [{ x: 1, tag: 'a' }]);
185
- * ```
186
- *
187
- * @template K The type of the elements.
188
- * @template KM The type of the mapped keys.
189
- * @param oldSet The original set.
190
- * @param newSet The new set.
191
- * @returns An object containing sets of added and deleted elements.
192
- */
193
- ISetMapped.diff = (oldSet, newSet) => ({
194
- deleted: oldSet.subtract(newSet),
195
- added: newSet.subtract(oldSet),
196
- });
197
- /**
198
- * Computes the intersection of two ISetMapped instances.
199
- *
200
- * @example
201
- *
202
- * ```ts
203
- * type Point = Readonly<{ x: number; tag: string }>;
204
- *
205
- * const toKey = (point: Point) => JSON.stringify(point);
206
- *
207
- * // eslint-disable-next-line total-functions/no-unsafe-type-assertion
208
- * const fromKey = (key: string) => JSON.parse(key) as Point;
209
- *
210
- * const left = ISetMapped.create<Point, string>(
211
- * [
212
- * { x: 1, tag: 'a' },
213
- * { x: 2, tag: 'b' },
214
- * ],
215
- * toKey,
216
- * fromKey,
217
- * );
218
- *
219
- * const right = ISetMapped.create<Point, string>(
220
- * [{ x: 2, tag: 'b' }],
221
- * toKey,
222
- * fromKey,
223
- * );
224
- *
225
- * const overlap = ISetMapped.intersection(left, right);
226
- *
227
- * assert.deepStrictEqual(Array.from(overlap), [{ x: 2, tag: 'b' }]);
228
- * ```
229
- *
230
- * @template K The type of the elements.
231
- * @template KM The type of the mapped keys.
232
- * @param a The first set.
233
- * @param b The second set.
234
- * @returns A new ISetMapped instance representing the intersection.
235
- */
236
- ISetMapped.intersection = (a, b) => a.intersect(b);
237
- /**
238
- * Computes the union of two ISetMapped instances.
239
- *
240
- * @example
241
- *
242
- * ```ts
243
- * type Point = Readonly<{ x: number; tag: string }>;
244
- *
245
- * const toKey = (point: Point) => JSON.stringify(point);
246
- *
247
- * // eslint-disable-next-line total-functions/no-unsafe-type-assertion
248
- * const fromKey = (key: string) => JSON.parse(key) as Point;
249
- *
250
- * const left = ISetMapped.create<Point, string>(
251
- * [{ x: 1, tag: 'a' }],
252
- * toKey,
253
- * fromKey,
254
- * );
255
- *
256
- * const right = ISetMapped.create<Point, string>(
257
- * [{ x: 2, tag: 'b' }],
258
- * toKey,
259
- * fromKey,
260
- * );
261
- *
262
- * const combined = ISetMapped.union(left, right);
263
- *
264
- * assert.deepStrictEqual(Array.from(combined), [
265
- * { x: 1, tag: 'a' },
266
- * { x: 2, tag: 'b' },
267
- * ]);
268
- * ```
269
- *
270
- * @template K The type of the elements.
271
- * @template KM The type of the mapped keys.
272
- * @param a The first set.
273
- * @param b The second set.
274
- * @returns A new ISetMapped instance representing the union.
275
- */
276
- ISetMapped.union = (a, b) => a.union(b);
39
+ ((ISetMapped2) => {
40
+ ISetMapped2.create = (iterable, toKey, fromKey) => new ISetMappedClass(iterable, toKey, fromKey);
41
+ ISetMapped2.equal = (a, b) => a.size === b.size && a.every((e) => b.has(e));
42
+ ISetMapped2.diff = (oldSet, newSet) => ({
43
+ deleted: oldSet.subtract(newSet),
44
+ added: newSet.subtract(oldSet)
45
+ });
46
+ ISetMapped2.intersection = (a, b) => a.intersect(b);
47
+ ISetMapped2.union = (a, b) => a.union(b);
277
48
  })(ISetMapped || (ISetMapped = {}));
278
- /**
279
- * Internal class implementation for ISetMapped providing immutable set
280
- * operations with element transformation.
281
- *
282
- * This class implements the ISetMapped interface by maintaining a JavaScript
283
- * Set with primitive keys internally while exposing an API that works with
284
- * custom element types. The transformation between custom and primitive
285
- * elements is handled transparently through the provided `toKey` and `fromKey`
286
- * functions.
287
- *
288
- * **Implementation Details:**
289
- *
290
- * - Uses ReadonlySet<KM> internally where KM is the primitive key type
291
- * - Stores transformation functions for bidirectional element conversion
292
- * - Implements copy-on-write semantics for efficiency
293
- * - Provides optional debug messaging for development
294
- *
295
- * @template K The type of the custom elements.
296
- * @template KM The type of the mapped primitive keys.
297
- * @implements ISetMapped
298
- * @implements Iterable
299
- * @internal This class should not be used directly. Use ISetMapped.create() instead.
300
- */
301
49
  class ISetMappedClass {
302
- #set;
303
- #toKey;
304
- #fromKey;
305
- #showNotFoundMessage;
306
- /**
307
- * Constructs an ISetMappedClass instance with custom element transformation.
308
- *
309
- * @param iterable An iterable of elements using the custom element type K.
310
- * @param toKey A function that converts a custom element K to a primitive key
311
- * KM. Must be deterministic and produce unique values for unique elements.
312
- * @param fromKey A function that converts a primitive key KM back to the
313
- * custom element K. Should be the inverse of the toKey function.
314
- * @param showNotFoundMessage Whether to log warning messages when operations
315
- * are performed on non-existent elements. Useful for debugging. Defaults to
316
- * false for production use.
317
- * @internal Use ISetMapped.create() instead of calling this constructor directly.
318
- */
319
- constructor(iterable, toKey, fromKey, showNotFoundMessage = false) {
320
- this.#set = new Set(Array.from(iterable, toKey));
321
- this.#toKey = toKey;
322
- this.#fromKey = fromKey;
323
- this.#showNotFoundMessage = showNotFoundMessage;
50
+ #set;
51
+ #toKey;
52
+ #fromKey;
53
+ #showNotFoundMessage;
54
+ /**
55
+ * Constructs an ISetMappedClass instance with custom element transformation.
56
+ *
57
+ * @param iterable An iterable of elements using the custom element type K.
58
+ * @param toKey A function that converts a custom element K to a primitive key
59
+ * KM. Must be deterministic and produce unique values for unique elements.
60
+ * @param fromKey A function that converts a primitive key KM back to the
61
+ * custom element K. Should be the inverse of the toKey function.
62
+ * @param showNotFoundMessage Whether to log warning messages when operations
63
+ * are performed on non-existent elements. Useful for debugging. Defaults to
64
+ * false for production use.
65
+ * @internal Use ISetMapped.create() instead of calling this constructor directly.
66
+ */
67
+ constructor(iterable, toKey, fromKey, showNotFoundMessage = false) {
68
+ this.#set = new Set(Array.from(iterable, toKey));
69
+ this.#toKey = toKey;
70
+ this.#fromKey = fromKey;
71
+ this.#showNotFoundMessage = showNotFoundMessage;
72
+ }
73
+ /** @inheritdoc */
74
+ get size() {
75
+ return asUint32(this.#set.size);
76
+ }
77
+ /** @inheritdoc */
78
+ get isEmpty() {
79
+ return this.size === 0;
80
+ }
81
+ /** @inheritdoc */
82
+ has(key) {
83
+ return this.#set.has(this.#toKey(key));
84
+ }
85
+ /** @inheritdoc */
86
+ every(predicate) {
87
+ for (const key of this.values()) {
88
+ if (!predicate(key)) return false;
324
89
  }
325
- /** @inheritdoc */
326
- get size() {
327
- return asUint32(this.#set.size);
90
+ return true;
91
+ }
92
+ /** @inheritdoc */
93
+ some(predicate) {
94
+ for (const key of this.values()) {
95
+ if (predicate(key)) return true;
328
96
  }
329
- /** @inheritdoc */
330
- get isEmpty() {
331
- return this.size === 0;
97
+ return false;
98
+ }
99
+ /** @inheritdoc */
100
+ add(key) {
101
+ if (this.has(key)) return this;
102
+ return ISetMapped.create(
103
+ [...this.#set, this.#toKey(key)].map(this.#fromKey),
104
+ this.#toKey,
105
+ this.#fromKey
106
+ );
107
+ }
108
+ /** @inheritdoc */
109
+ delete(key) {
110
+ if (!this.has(key)) {
111
+ if (this.#showNotFoundMessage) {
112
+ console.warn(
113
+ `ISetMapped.delete: key not found: ${String(this.#toKey(key))}`
114
+ );
115
+ }
116
+ return this;
332
117
  }
333
- /** @inheritdoc */
334
- has(key) {
335
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
336
- return this.#set.has(this.#toKey(key));
118
+ const keyMapped = this.#toKey(key);
119
+ return ISetMapped.create(
120
+ Array.from(this.#set).filter((k) => !Object.is(k, keyMapped)).map(this.#fromKey),
121
+ this.#toKey,
122
+ this.#fromKey
123
+ );
124
+ }
125
+ /** @inheritdoc */
126
+ withMutations(actions) {
127
+ const mut_result = new Set(this.#set);
128
+ const updateFn = (action) => {
129
+ const key = this.#toKey(action.key);
130
+ switch (action.type) {
131
+ case "delete":
132
+ mut_result.delete(key);
133
+ break;
134
+ case "add":
135
+ mut_result.add(key);
136
+ break;
137
+ }
138
+ };
139
+ for (const action of actions) {
140
+ updateFn(action);
337
141
  }
338
- /** @inheritdoc */
339
- every(predicate) {
340
- for (const key of this.values()) {
341
- if (!predicate(key))
342
- return false;
343
- }
344
- return true;
142
+ return ISetMapped.create(
143
+ Array.from(mut_result, this.#fromKey),
144
+ this.#toKey,
145
+ this.#fromKey
146
+ );
147
+ }
148
+ /** @inheritdoc */
149
+ map(mapFn) {
150
+ return ISetMapped.create(
151
+ this.toArray().map(mapFn),
152
+ this.#toKey,
153
+ this.#fromKey
154
+ );
155
+ }
156
+ /** @inheritdoc */
157
+ filter(predicate) {
158
+ return ISetMapped.create(
159
+ this.toArray().filter(predicate),
160
+ this.#toKey,
161
+ this.#fromKey
162
+ );
163
+ }
164
+ /** @inheritdoc */
165
+ filterNot(predicate) {
166
+ return ISetMapped.create(
167
+ this.toArray().filter((k) => !predicate(k)),
168
+ this.#toKey,
169
+ this.#fromKey
170
+ );
171
+ }
172
+ /** @inheritdoc */
173
+ forEach(callbackfn) {
174
+ for (const km of this.#set) {
175
+ callbackfn(this.#fromKey(km));
345
176
  }
346
- /** @inheritdoc */
347
- some(predicate) {
348
- for (const key of this.values()) {
349
- if (predicate(key))
350
- return true;
351
- }
352
- return false;
177
+ }
178
+ /** @inheritdoc */
179
+ isSubsetOf(set) {
180
+ return this.every((k) => set.has(k));
181
+ }
182
+ /** @inheritdoc */
183
+ isSupersetOf(set) {
184
+ return set.every((k) => this.has(k));
185
+ }
186
+ /** @inheritdoc */
187
+ subtract(set) {
188
+ return ISetMapped.create(
189
+ this.toArray().filter((k) => !set.has(k)),
190
+ this.#toKey,
191
+ this.#fromKey
192
+ );
193
+ }
194
+ /** @inheritdoc */
195
+ intersect(set) {
196
+ return ISetMapped.create(
197
+ this.toArray().filter((k) => set.has(k)),
198
+ this.#toKey,
199
+ this.#fromKey
200
+ );
201
+ }
202
+ /** @inheritdoc */
203
+ union(set) {
204
+ return ISetMapped.create(
205
+ [...this.values(), ...set.values()],
206
+ this.#toKey,
207
+ this.#fromKey
208
+ );
209
+ }
210
+ /**
211
+ * @example
212
+ *
213
+ * ```ts
214
+ * type Point = Readonly<{ x: number; tag: string }>;
215
+ *
216
+ * const toKey = (point: Point) => JSON.stringify(point);
217
+ *
218
+ * // eslint-disable-next-line total-functions/no-unsafe-type-assertion
219
+ * const fromKey = (key: string) => JSON.parse(key) as Point;
220
+ *
221
+ * const set = ISetMapped.create<Point, string>(
222
+ * [
223
+ * { x: 1, tag: 'a' },
224
+ * { x: 2, tag: 'b' },
225
+ * ],
226
+ * toKey,
227
+ * fromKey,
228
+ * );
229
+ *
230
+ * const collected = Array.from(set);
231
+ *
232
+ * assert.deepStrictEqual(collected, [
233
+ * { x: 1, tag: 'a' },
234
+ * { x: 2, tag: 'b' },
235
+ * ]);
236
+ * ```
237
+ *
238
+ * @inheritdoc
239
+ */
240
+ *[Symbol.iterator]() {
241
+ for (const k of this.keys()) {
242
+ yield k;
353
243
  }
354
- /** @inheritdoc */
355
- add(key) {
356
- if (this.has(key))
357
- return this;
358
- return ISetMapped.create([...this.#set, this.#toKey(key)].map(this.#fromKey), this.#toKey, this.#fromKey);
244
+ }
245
+ /** @inheritdoc */
246
+ *keys() {
247
+ for (const km of this.#set) {
248
+ yield this.#fromKey(km);
359
249
  }
360
- /** @inheritdoc */
361
- delete(key) {
362
- if (!this.has(key)) {
363
- if (this.#showNotFoundMessage) {
364
- console.warn(`ISetMapped.delete: key not found: ${String(this.#toKey(key))}`);
365
- }
366
- return this;
367
- }
368
- const keyMapped = this.#toKey(key);
369
- return ISetMapped.create(Array.from(this.#set)
370
- .filter((k) => !Object.is(k, keyMapped))
371
- .map(this.#fromKey), this.#toKey, this.#fromKey);
250
+ }
251
+ /** @inheritdoc */
252
+ *values() {
253
+ for (const km of this.#set) {
254
+ yield this.#fromKey(km);
372
255
  }
373
- /** @inheritdoc */
374
- withMutations(actions) {
375
- const mut_result = new Set(this.#set);
376
- const updateFn = (action) => {
377
- const key = this.#toKey(action.key);
378
- switch (action.type) {
379
- case 'delete':
380
- mut_result.delete(key);
381
- break;
382
- case 'add':
383
- mut_result.add(key);
384
- break;
385
- }
386
- };
387
- for (const action of actions) {
388
- updateFn(action);
389
- }
390
- return ISetMapped.create(Array.from(mut_result, this.#fromKey), this.#toKey, this.#fromKey);
391
- }
392
- /** @inheritdoc */
393
- map(mapFn) {
394
- return ISetMapped.create(this.toArray().map(mapFn), this.#toKey, this.#fromKey);
395
- }
396
- /** @inheritdoc */
397
- filter(predicate) {
398
- return ISetMapped.create(this.toArray().filter(predicate), this.#toKey, this.#fromKey);
399
- }
400
- /** @inheritdoc */
401
- filterNot(predicate) {
402
- return ISetMapped.create(this.toArray().filter((k) => !predicate(k)), this.#toKey, this.#fromKey);
403
- }
404
- /** @inheritdoc */
405
- forEach(callbackfn) {
406
- for (const km of this.#set) {
407
- callbackfn(this.#fromKey(km));
408
- }
409
- }
410
- /** @inheritdoc */
411
- isSubsetOf(set) {
412
- return this.every((k) => set.has(k));
413
- }
414
- /** @inheritdoc */
415
- isSupersetOf(set) {
416
- return set.every((k) => this.has(k));
417
- }
418
- /** @inheritdoc */
419
- subtract(set) {
420
- return ISetMapped.create(this.toArray().filter((k) => !set.has(k)), this.#toKey, this.#fromKey);
421
- }
422
- /** @inheritdoc */
423
- intersect(set) {
424
- return ISetMapped.create(this.toArray().filter((k) => set.has(k)), this.#toKey, this.#fromKey);
425
- }
426
- /** @inheritdoc */
427
- union(set) {
428
- return ISetMapped.create([...this.values(), ...set.values()], this.#toKey, this.#fromKey);
429
- }
430
- /**
431
- * @example
432
- *
433
- * ```ts
434
- * type Point = Readonly<{ x: number; tag: string }>;
435
- *
436
- * const toKey = (point: Point) => JSON.stringify(point);
437
- *
438
- * // eslint-disable-next-line total-functions/no-unsafe-type-assertion
439
- * const fromKey = (key: string) => JSON.parse(key) as Point;
440
- *
441
- * const set = ISetMapped.create<Point, string>(
442
- * [
443
- * { x: 1, tag: 'a' },
444
- * { x: 2, tag: 'b' },
445
- * ],
446
- * toKey,
447
- * fromKey,
448
- * );
449
- *
450
- * const collected = Array.from(set);
451
- *
452
- * assert.deepStrictEqual(collected, [
453
- * { x: 1, tag: 'a' },
454
- * { x: 2, tag: 'b' },
455
- * ]);
456
- * ```
457
- *
458
- * @inheritdoc
459
- */
460
- *[Symbol.iterator]() {
461
- for (const k of this.keys()) {
462
- yield k;
463
- }
464
- }
465
- /** @inheritdoc */
466
- *keys() {
467
- for (const km of this.#set) {
468
- yield this.#fromKey(km);
469
- }
470
- }
471
- /** @inheritdoc */
472
- *values() {
473
- for (const km of this.#set) {
474
- // JavaScript Set's values() is an alias for keys()
475
- yield this.#fromKey(km);
476
- }
477
- }
478
- /** @inheritdoc */
479
- *entries() {
480
- for (const km of this.#set) {
481
- // JavaScript Set's entries() yields [value, value]
482
- const a = this.#fromKey(km);
483
- yield [a, a];
484
- }
485
- }
486
- /** @inheritdoc */
487
- toArray() {
488
- return Array.from(this.values());
489
- }
490
- /** @inheritdoc */
491
- toRawSet() {
492
- return this.#set;
256
+ }
257
+ /** @inheritdoc */
258
+ *entries() {
259
+ for (const km of this.#set) {
260
+ const a = this.#fromKey(km);
261
+ yield [a, a];
493
262
  }
263
+ }
264
+ /** @inheritdoc */
265
+ toArray() {
266
+ return Array.from(this.values());
267
+ }
268
+ /** @inheritdoc */
269
+ toRawSet() {
270
+ return this.#set;
271
+ }
494
272
  }
495
273
 
496
274
  export { ISetMapped };