ts-data-forge 14.6.0 → 14.6.2

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