ts-data-forge 14.6.1 → 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 (393) 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 -292
  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.mjs +448 -265
  44. package/dist/collections/iset-mapped.mjs.map +1 -1
  45. package/dist/collections/iset.mjs +328 -201
  46. package/dist/collections/iset.mjs.map +1 -1
  47. package/dist/collections/queue.mjs +183 -151
  48. package/dist/collections/queue.mjs.map +1 -1
  49. package/dist/collections/stack.mjs +169 -140
  50. package/dist/collections/stack.mjs.map +1 -1
  51. package/dist/entry-point.mjs +4 -77
  52. package/dist/entry-point.mjs.map +1 -1
  53. package/dist/expect-type.mjs +70 -4
  54. package/dist/expect-type.mjs.map +1 -1
  55. package/dist/functional/async-result/async-result.mjs +2 -3
  56. package/dist/functional/async-result/async-result.mjs.map +1 -1
  57. package/dist/functional/async-result/impl/async-result-flat-map.mjs +19 -21
  58. package/dist/functional/async-result/impl/async-result-flat-map.mjs.map +1 -1
  59. package/dist/functional/async-result/impl/async-result-from-promise.mjs +9 -10
  60. package/dist/functional/async-result/impl/async-result-from-promise.mjs.map +1 -1
  61. package/dist/functional/async-result/impl/async-result-from-throwable.mjs +12 -14
  62. package/dist/functional/async-result/impl/async-result-from-throwable.mjs.map +1 -1
  63. package/dist/functional/async-result/impl/async-result-map-err.mjs +16 -19
  64. package/dist/functional/async-result/impl/async-result-map-err.mjs.map +1 -1
  65. package/dist/functional/async-result/impl/async-result-map.mjs +16 -19
  66. package/dist/functional/async-result/impl/async-result-map.mjs.map +1 -1
  67. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs +36 -9
  68. package/dist/functional/async-result/impl/async-result-unwrap-or.mjs.map +1 -1
  69. package/dist/functional/async-result/impl/index.mjs +8 -7
  70. package/dist/functional/async-result/impl/index.mjs.map +1 -1
  71. package/dist/functional/async-result/impl/types.mjs +2 -2
  72. package/dist/functional/async-result/impl/types.mjs.map +1 -1
  73. package/dist/functional/async-result/index.mjs +2 -3
  74. package/dist/functional/async-result/index.mjs.map +1 -1
  75. package/dist/functional/index.mjs +7 -11
  76. package/dist/functional/index.mjs.map +1 -1
  77. package/dist/functional/match.mjs +27 -13
  78. package/dist/functional/match.mjs.map +1 -1
  79. package/dist/functional/optional/impl/index.mjs +19 -18
  80. package/dist/functional/optional/impl/index.mjs.map +1 -1
  81. package/dist/functional/optional/impl/optional-expect-to-be.mjs +16 -18
  82. package/dist/functional/optional/impl/optional-expect-to-be.mjs.map +1 -1
  83. package/dist/functional/optional/impl/optional-filter.mjs +17 -19
  84. package/dist/functional/optional/impl/optional-filter.mjs.map +1 -1
  85. package/dist/functional/optional/impl/optional-flat-map.mjs +13 -15
  86. package/dist/functional/optional/impl/optional-flat-map.mjs.map +1 -1
  87. package/dist/functional/optional/impl/optional-from-nullable.mjs +26 -5
  88. package/dist/functional/optional/impl/optional-from-nullable.mjs.map +1 -1
  89. package/dist/functional/optional/impl/optional-is-none.mjs +21 -5
  90. package/dist/functional/optional/impl/optional-is-none.mjs.map +1 -1
  91. package/dist/functional/optional/impl/optional-is-optional.mjs +26 -8
  92. package/dist/functional/optional/impl/optional-is-optional.mjs.map +1 -1
  93. package/dist/functional/optional/impl/optional-is-some.mjs +22 -5
  94. package/dist/functional/optional/impl/optional-is-some.mjs.map +1 -1
  95. package/dist/functional/optional/impl/optional-map.mjs +16 -18
  96. package/dist/functional/optional/impl/optional-map.mjs.map +1 -1
  97. package/dist/functional/optional/impl/optional-match.mjs +16 -18
  98. package/dist/functional/optional/impl/optional-match.mjs.map +1 -1
  99. package/dist/functional/optional/impl/optional-none.mjs +18 -5
  100. package/dist/functional/optional/impl/optional-none.mjs.map +1 -1
  101. package/dist/functional/optional/impl/optional-or-else.mjs +13 -15
  102. package/dist/functional/optional/impl/optional-or-else.mjs.map +1 -1
  103. package/dist/functional/optional/impl/optional-some.mjs +23 -7
  104. package/dist/functional/optional/impl/optional-some.mjs.map +1 -1
  105. package/dist/functional/optional/impl/optional-to-nullable.mjs +28 -5
  106. package/dist/functional/optional/impl/optional-to-nullable.mjs.map +1 -1
  107. package/dist/functional/optional/impl/optional-unwrap-or.mjs +12 -14
  108. package/dist/functional/optional/impl/optional-unwrap-or.mjs.map +1 -1
  109. package/dist/functional/optional/impl/optional-unwrap-throw.mjs +34 -9
  110. package/dist/functional/optional/impl/optional-unwrap-throw.mjs.map +1 -1
  111. package/dist/functional/optional/impl/optional-unwrap.mjs +6 -9
  112. package/dist/functional/optional/impl/optional-unwrap.mjs.map +1 -1
  113. package/dist/functional/optional/impl/optional-zip.mjs +36 -5
  114. package/dist/functional/optional/impl/optional-zip.mjs.map +1 -1
  115. package/dist/functional/optional/impl/tag.mjs +4 -5
  116. package/dist/functional/optional/impl/tag.mjs.map +1 -1
  117. package/dist/functional/optional/impl/types.mjs +2 -2
  118. package/dist/functional/optional/impl/types.mjs.map +1 -1
  119. package/dist/functional/optional/index.mjs +2 -3
  120. package/dist/functional/optional/index.mjs.map +1 -1
  121. package/dist/functional/optional/optional.mjs +2 -3
  122. package/dist/functional/optional/optional.mjs.map +1 -1
  123. package/dist/functional/pipe.mjs +42 -14
  124. package/dist/functional/pipe.mjs.map +1 -1
  125. package/dist/functional/result/impl/index.mjs +28 -27
  126. package/dist/functional/result/impl/index.mjs.map +1 -1
  127. package/dist/functional/result/impl/result-err.mjs +29 -7
  128. package/dist/functional/result/impl/result-err.mjs.map +1 -1
  129. package/dist/functional/result/impl/result-expect-to-be.mjs +17 -18
  130. package/dist/functional/result/impl/result-expect-to-be.mjs.map +1 -1
  131. package/dist/functional/result/impl/result-flat-map.mjs +18 -21
  132. package/dist/functional/result/impl/result-flat-map.mjs.map +1 -1
  133. package/dist/functional/result/impl/result-fold.mjs +18 -21
  134. package/dist/functional/result/impl/result-fold.mjs.map +1 -1
  135. package/dist/functional/result/impl/result-from-optional.mjs +17 -20
  136. package/dist/functional/result/impl/result-from-optional.mjs.map +1 -1
  137. package/dist/functional/result/impl/result-from-promise.mjs +37 -8
  138. package/dist/functional/result/impl/result-from-promise.mjs.map +1 -1
  139. package/dist/functional/result/impl/result-from-throwable.mjs +41 -14
  140. package/dist/functional/result/impl/result-from-throwable.mjs.map +1 -1
  141. package/dist/functional/result/impl/result-is-err.mjs +21 -5
  142. package/dist/functional/result/impl/result-is-err.mjs.map +1 -1
  143. package/dist/functional/result/impl/result-is-ok.mjs +21 -5
  144. package/dist/functional/result/impl/result-is-ok.mjs.map +1 -1
  145. package/dist/functional/result/impl/result-is-result.mjs +25 -7
  146. package/dist/functional/result/impl/result-is-result.mjs.map +1 -1
  147. package/dist/functional/result/impl/result-map-err.mjs +18 -21
  148. package/dist/functional/result/impl/result-map-err.mjs.map +1 -1
  149. package/dist/functional/result/impl/result-map.mjs +18 -21
  150. package/dist/functional/result/impl/result-map.mjs.map +1 -1
  151. package/dist/functional/result/impl/result-match.mjs +17 -21
  152. package/dist/functional/result/impl/result-match.mjs.map +1 -1
  153. package/dist/functional/result/impl/result-ok.mjs +29 -7
  154. package/dist/functional/result/impl/result-ok.mjs.map +1 -1
  155. package/dist/functional/result/impl/result-or-else.mjs +14 -15
  156. package/dist/functional/result/impl/result-or-else.mjs.map +1 -1
  157. package/dist/functional/result/impl/result-safe-try.mjs +32 -21
  158. package/dist/functional/result/impl/result-safe-try.mjs.map +1 -1
  159. package/dist/functional/result/impl/result-safe-unwrap.mjs +40 -12
  160. package/dist/functional/result/impl/result-safe-unwrap.mjs.map +1 -1
  161. package/dist/functional/result/impl/result-swap.mjs +23 -8
  162. package/dist/functional/result/impl/result-swap.mjs.map +1 -1
  163. package/dist/functional/result/impl/result-to-optional.mjs +30 -7
  164. package/dist/functional/result/impl/result-to-optional.mjs.map +1 -1
  165. package/dist/functional/result/impl/result-unwrap-err-or.mjs +13 -14
  166. package/dist/functional/result/impl/result-unwrap-err-or.mjs.map +1 -1
  167. package/dist/functional/result/impl/result-unwrap-err-throw.mjs +43 -20
  168. package/dist/functional/result/impl/result-unwrap-err-throw.mjs.map +1 -1
  169. package/dist/functional/result/impl/result-unwrap-err.mjs +33 -8
  170. package/dist/functional/result/impl/result-unwrap-err.mjs.map +1 -1
  171. package/dist/functional/result/impl/result-unwrap-ok-or.mjs +13 -14
  172. package/dist/functional/result/impl/result-unwrap-ok-or.mjs.map +1 -1
  173. package/dist/functional/result/impl/result-unwrap-ok.mjs +6 -9
  174. package/dist/functional/result/impl/result-unwrap-ok.mjs.map +1 -1
  175. package/dist/functional/result/impl/result-unwrap-throw.mjs +38 -11
  176. package/dist/functional/result/impl/result-unwrap-throw.mjs.map +1 -1
  177. package/dist/functional/result/impl/result-zip.mjs +35 -5
  178. package/dist/functional/result/impl/result-zip.mjs.map +1 -1
  179. package/dist/functional/result/impl/tag.mjs +4 -5
  180. package/dist/functional/result/impl/tag.mjs.map +1 -1
  181. package/dist/functional/result/impl/types.mjs +2 -2
  182. package/dist/functional/result/impl/types.mjs.map +1 -1
  183. package/dist/functional/result/index.mjs +2 -3
  184. package/dist/functional/result/index.mjs.map +1 -1
  185. package/dist/functional/result/result.mjs +2 -3
  186. package/dist/functional/result/result.mjs.map +1 -1
  187. package/dist/functional/ternary-result/impl/index.mjs +29 -28
  188. package/dist/functional/ternary-result/impl/index.mjs.map +1 -1
  189. package/dist/functional/ternary-result/impl/tag.mjs +6 -6
  190. package/dist/functional/ternary-result/impl/tag.mjs.map +1 -1
  191. package/dist/functional/ternary-result/impl/ternary-result-err.mjs +17 -7
  192. package/dist/functional/ternary-result/impl/ternary-result-err.mjs.map +1 -1
  193. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs +15 -18
  194. package/dist/functional/ternary-result/impl/ternary-result-expect-to-be.mjs.map +1 -1
  195. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs +28 -32
  196. package/dist/functional/ternary-result/impl/ternary-result-flat-map.mjs.map +1 -1
  197. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs +24 -26
  198. package/dist/functional/ternary-result/impl/ternary-result-fold.mjs.map +1 -1
  199. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs +21 -8
  200. package/dist/functional/ternary-result/impl/ternary-result-from-promise.mjs.map +1 -1
  201. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs +28 -13
  202. package/dist/functional/ternary-result/impl/ternary-result-from-throwable.mjs.map +1 -1
  203. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs +19 -5
  204. package/dist/functional/ternary-result/impl/ternary-result-is-err.mjs.map +1 -1
  205. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs +21 -5
  206. package/dist/functional/ternary-result/impl/ternary-result-is-ok.mjs.map +1 -1
  207. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs +28 -8
  208. package/dist/functional/ternary-result/impl/ternary-result-is-ternary-result.mjs.map +1 -1
  209. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs +20 -5
  210. package/dist/functional/ternary-result/impl/ternary-result-is-warn.mjs.map +1 -1
  211. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs +17 -18
  212. package/dist/functional/ternary-result/impl/ternary-result-map-err.mjs.map +1 -1
  213. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs +20 -23
  214. package/dist/functional/ternary-result/impl/ternary-result-map-warn.mjs.map +1 -1
  215. package/dist/functional/ternary-result/impl/ternary-result-map.mjs +24 -26
  216. package/dist/functional/ternary-result/impl/ternary-result-map.mjs.map +1 -1
  217. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs +18 -7
  218. package/dist/functional/ternary-result/impl/ternary-result-ok.mjs.map +1 -1
  219. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs +11 -14
  220. package/dist/functional/ternary-result/impl/ternary-result-or-else.mjs.map +1 -1
  221. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs +24 -10
  222. package/dist/functional/ternary-result/impl/ternary-result-to-optional.mjs.map +1 -1
  223. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs +11 -14
  224. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-or.mjs.map +1 -1
  225. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs +30 -19
  226. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err-throw.mjs.map +1 -1
  227. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs +20 -8
  228. package/dist/functional/ternary-result/impl/ternary-result-unwrap-err.mjs.map +1 -1
  229. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs +11 -14
  230. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok-or.mjs.map +1 -1
  231. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs +7 -9
  232. package/dist/functional/ternary-result/impl/ternary-result-unwrap-ok.mjs.map +1 -1
  233. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs +30 -22
  234. package/dist/functional/ternary-result/impl/ternary-result-unwrap-throw.mjs.map +1 -1
  235. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs +11 -14
  236. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-or.mjs.map +1 -1
  237. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs +27 -17
  238. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn-throw.mjs.map +1 -1
  239. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs +20 -8
  240. package/dist/functional/ternary-result/impl/ternary-result-unwrap-warn.mjs.map +1 -1
  241. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs +21 -8
  242. package/dist/functional/ternary-result/impl/ternary-result-warn.mjs.map +1 -1
  243. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs +47 -19
  244. package/dist/functional/ternary-result/impl/ternary-result-zip.mjs.map +1 -1
  245. package/dist/functional/ternary-result/impl/types.mjs +2 -2
  246. package/dist/functional/ternary-result/impl/types.mjs.map +1 -1
  247. package/dist/functional/ternary-result/impl/variant-name.mjs +12 -14
  248. package/dist/functional/ternary-result/impl/variant-name.mjs.map +1 -1
  249. package/dist/functional/ternary-result/index.mjs +2 -3
  250. package/dist/functional/ternary-result/index.mjs.map +1 -1
  251. package/dist/functional/ternary-result/ternary-result.mjs +2 -3
  252. package/dist/functional/ternary-result/ternary-result.mjs.map +1 -1
  253. package/dist/guard/has-key.mjs +43 -4
  254. package/dist/guard/has-key.mjs.map +1 -1
  255. package/dist/guard/index.mjs +8 -8
  256. package/dist/guard/index.mjs.map +1 -1
  257. package/dist/guard/is-non-empty-string.mjs +39 -4
  258. package/dist/guard/is-non-empty-string.mjs.map +1 -1
  259. package/dist/guard/is-non-null-object.mjs +36 -4
  260. package/dist/guard/is-non-null-object.mjs.map +1 -1
  261. package/dist/guard/is-primitive.mjs +46 -15
  262. package/dist/guard/is-primitive.mjs.map +1 -1
  263. package/dist/guard/is-record.mjs +89 -6
  264. package/dist/guard/is-record.mjs.map +1 -1
  265. package/dist/guard/is-type.mjs +404 -19
  266. package/dist/guard/is-type.mjs.map +1 -1
  267. package/dist/guard/key-is-in.mjs +42 -4
  268. package/dist/guard/key-is-in.mjs.map +1 -1
  269. package/dist/index.mjs +12 -65
  270. package/dist/index.mjs.map +1 -1
  271. package/dist/iterator/index.mjs +2 -2
  272. package/dist/iterator/index.mjs.map +1 -1
  273. package/dist/iterator/range.mjs +19 -57
  274. package/dist/iterator/range.mjs.map +1 -1
  275. package/dist/json/index.mjs +2 -2
  276. package/dist/json/index.mjs.map +1 -1
  277. package/dist/json/json.mjs +346 -105
  278. package/dist/json/json.mjs.map +1 -1
  279. package/dist/number/branded-types/finite-number.mjs +148 -137
  280. package/dist/number/branded-types/finite-number.mjs.map +1 -1
  281. package/dist/number/branded-types/index.mjs +33 -33
  282. package/dist/number/branded-types/index.mjs.map +1 -1
  283. package/dist/number/branded-types/int.mjs +245 -209
  284. package/dist/number/branded-types/int.mjs.map +1 -1
  285. package/dist/number/branded-types/int16.mjs +141 -131
  286. package/dist/number/branded-types/int16.mjs.map +1 -1
  287. package/dist/number/branded-types/int32.mjs +141 -131
  288. package/dist/number/branded-types/int32.mjs.map +1 -1
  289. package/dist/number/branded-types/negative-finite-number.mjs +155 -149
  290. package/dist/number/branded-types/negative-finite-number.mjs.map +1 -1
  291. package/dist/number/branded-types/negative-int.mjs +125 -110
  292. package/dist/number/branded-types/negative-int.mjs.map +1 -1
  293. package/dist/number/branded-types/negative-safe-int.mjs +126 -115
  294. package/dist/number/branded-types/negative-safe-int.mjs.map +1 -1
  295. package/dist/number/branded-types/non-negative-finite-number.mjs +164 -154
  296. package/dist/number/branded-types/non-negative-finite-number.mjs.map +1 -1
  297. package/dist/number/branded-types/non-negative-int16.mjs +137 -125
  298. package/dist/number/branded-types/non-negative-int16.mjs.map +1 -1
  299. package/dist/number/branded-types/non-negative-int32.mjs +137 -125
  300. package/dist/number/branded-types/non-negative-int32.mjs.map +1 -1
  301. package/dist/number/branded-types/non-positive-finite-number.mjs +143 -139
  302. package/dist/number/branded-types/non-positive-finite-number.mjs.map +1 -1
  303. package/dist/number/branded-types/non-positive-int.mjs +116 -99
  304. package/dist/number/branded-types/non-positive-int.mjs.map +1 -1
  305. package/dist/number/branded-types/non-positive-safe-int.mjs +118 -107
  306. package/dist/number/branded-types/non-positive-safe-int.mjs.map +1 -1
  307. package/dist/number/branded-types/non-zero-finite-number.mjs +144 -129
  308. package/dist/number/branded-types/non-zero-finite-number.mjs.map +1 -1
  309. package/dist/number/branded-types/non-zero-int.mjs +102 -82
  310. package/dist/number/branded-types/non-zero-int.mjs.map +1 -1
  311. package/dist/number/branded-types/non-zero-int16.mjs +118 -105
  312. package/dist/number/branded-types/non-zero-int16.mjs.map +1 -1
  313. package/dist/number/branded-types/non-zero-int32.mjs +118 -105
  314. package/dist/number/branded-types/non-zero-int32.mjs.map +1 -1
  315. package/dist/number/branded-types/non-zero-safe-int.mjs +122 -108
  316. package/dist/number/branded-types/non-zero-safe-int.mjs.map +1 -1
  317. package/dist/number/branded-types/non-zero-uint16.mjs +118 -104
  318. package/dist/number/branded-types/non-zero-uint16.mjs.map +1 -1
  319. package/dist/number/branded-types/non-zero-uint32.mjs +118 -104
  320. package/dist/number/branded-types/non-zero-uint32.mjs.map +1 -1
  321. package/dist/number/branded-types/positive-finite-number.mjs +167 -160
  322. package/dist/number/branded-types/positive-finite-number.mjs.map +1 -1
  323. package/dist/number/branded-types/positive-int.mjs +260 -224
  324. package/dist/number/branded-types/positive-int.mjs.map +1 -1
  325. package/dist/number/branded-types/positive-int16.mjs +134 -122
  326. package/dist/number/branded-types/positive-int16.mjs.map +1 -1
  327. package/dist/number/branded-types/positive-int32.mjs +134 -122
  328. package/dist/number/branded-types/positive-int32.mjs.map +1 -1
  329. package/dist/number/branded-types/positive-safe-int.mjs +292 -258
  330. package/dist/number/branded-types/positive-safe-int.mjs.map +1 -1
  331. package/dist/number/branded-types/positive-uint16.mjs +134 -122
  332. package/dist/number/branded-types/positive-uint16.mjs.map +1 -1
  333. package/dist/number/branded-types/positive-uint32.mjs +134 -122
  334. package/dist/number/branded-types/positive-uint32.mjs.map +1 -1
  335. package/dist/number/branded-types/safe-int.mjs +284 -255
  336. package/dist/number/branded-types/safe-int.mjs.map +1 -1
  337. package/dist/number/branded-types/safe-uint.mjs +135 -124
  338. package/dist/number/branded-types/safe-uint.mjs.map +1 -1
  339. package/dist/number/branded-types/uint.mjs +248 -211
  340. package/dist/number/branded-types/uint.mjs.map +1 -1
  341. package/dist/number/branded-types/uint16.mjs +132 -121
  342. package/dist/number/branded-types/uint16.mjs.map +1 -1
  343. package/dist/number/branded-types/uint32.mjs +132 -121
  344. package/dist/number/branded-types/uint32.mjs.map +1 -1
  345. package/dist/number/enum/index.mjs +3 -3
  346. package/dist/number/enum/index.mjs.map +1 -1
  347. package/dist/number/enum/int8.mjs +146 -131
  348. package/dist/number/enum/int8.mjs.map +1 -1
  349. package/dist/number/enum/uint8.mjs +133 -119
  350. package/dist/number/enum/uint8.mjs.map +1 -1
  351. package/dist/number/index.mjs +6 -37
  352. package/dist/number/index.mjs.map +1 -1
  353. package/dist/number/num-arithmetic-types.mjs +42 -1
  354. package/dist/number/num-arithmetic-types.mjs.map +1 -1
  355. package/dist/number/num.mjs +541 -83
  356. package/dist/number/num.mjs.map +1 -1
  357. package/dist/number/refined-number-utils.mjs +294 -133
  358. package/dist/number/refined-number-utils.mjs.map +1 -1
  359. package/dist/object/index.mjs +2 -2
  360. package/dist/object/index.mjs.map +1 -1
  361. package/dist/object/object.mjs +355 -202
  362. package/dist/object/object.mjs.map +1 -1
  363. package/dist/others/cast-mutable.mjs +38 -11
  364. package/dist/others/cast-mutable.mjs.map +1 -1
  365. package/dist/others/cast-readonly.mjs +37 -11
  366. package/dist/others/cast-readonly.mjs.map +1 -1
  367. package/dist/others/debounce-function.mjs +22 -11
  368. package/dist/others/debounce-function.mjs.map +1 -1
  369. package/dist/others/fast-deep-equal.mjs +70 -51
  370. package/dist/others/fast-deep-equal.mjs.map +1 -1
  371. package/dist/others/if-then.mjs +32 -5
  372. package/dist/others/if-then.mjs.map +1 -1
  373. package/dist/others/index.mjs +10 -10
  374. package/dist/others/index.mjs.map +1 -1
  375. package/dist/others/map-nullable.mjs +11 -13
  376. package/dist/others/map-nullable.mjs.map +1 -1
  377. package/dist/others/memoize-function.mjs +14 -16
  378. package/dist/others/memoize-function.mjs.map +1 -1
  379. package/dist/others/tuple.mjs +52 -4
  380. package/dist/others/tuple.mjs.map +1 -1
  381. package/dist/others/unknown-to-string.mjs +91 -47
  382. package/dist/others/unknown-to-string.mjs.map +1 -1
  383. package/dist/promise/index.mjs +2 -2
  384. package/dist/promise/index.mjs.map +1 -1
  385. package/dist/promise/promise.mjs +51 -10
  386. package/dist/promise/promise.mjs.map +1 -1
  387. package/dist/string/index.mjs +2 -2
  388. package/dist/string/index.mjs.map +1 -1
  389. package/dist/string/str.mjs +250 -83
  390. package/dist/string/str.mjs.map +1 -1
  391. package/dist/types.mjs +3 -2
  392. package/dist/types.mjs.map +1 -1
  393. package/package.json +5 -6
@@ -1,277 +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
- import '@sindresorhus/is';
38
- import { unknownToString } from '../others/unknown-to-string.mjs';
39
-
40
- var ISetMapped;
41
- ((ISetMapped2) => {
42
- ISetMapped2.create = (iterable, toKey, fromKey) => new ISetMappedClass(iterable, toKey, fromKey);
43
- ISetMapped2.equal = (a, b) => a.size === b.size && a.every((e) => b.has(e));
44
- ISetMapped2.diff = (oldSet, newSet) => ({
45
- deleted: oldSet.subtract(newSet),
46
- added: newSet.subtract(oldSet)
47
- });
48
- ISetMapped2.intersection = (a, b) => a.intersect(b);
49
- 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);
50
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
+ */
51
266
  class ISetMappedClass {
52
- #set;
53
- #toKey;
54
- #fromKey;
55
- #showNotFoundMessage;
56
- /**
57
- * Constructs an ISetMappedClass instance with custom element transformation.
58
- *
59
- * @param iterable An iterable of elements using the custom element type K.
60
- * @param toKey A function that converts a custom element K to a primitive key
61
- * KM. Must be deterministic and produce unique values for unique elements.
62
- * @param fromKey A function that converts a primitive key KM back to the
63
- * custom element K. Should be the inverse of the toKey function.
64
- * @param showNotFoundMessage Whether to log warning messages when operations
65
- * are performed on non-existent elements. Useful for debugging. Defaults to
66
- * false for production use.
67
- * @internal Use ISetMapped.create() instead of calling this constructor directly.
68
- */
69
- constructor(iterable, toKey, fromKey, showNotFoundMessage = false) {
70
- this.#set = new Set(Array.from(iterable, toKey));
71
- this.#toKey = toKey;
72
- this.#fromKey = fromKey;
73
- this.#showNotFoundMessage = showNotFoundMessage;
74
- }
75
- /** @inheritdoc */
76
- get size() {
77
- return asUint32(this.#set.size);
78
- }
79
- /** @inheritdoc */
80
- get isEmpty() {
81
- return this.size === 0;
82
- }
83
- /** @inheritdoc */
84
- has(key) {
85
- return this.#set.has(this.#toKey(key));
86
- }
87
- /** @inheritdoc */
88
- every(predicate) {
89
- for (const key of this.values()) {
90
- 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;
91
289
  }
92
- return true;
93
- }
94
- /** @inheritdoc */
95
- some(predicate) {
96
- for (const key of this.values()) {
97
- if (predicate(key)) return true;
290
+ /** @inheritdoc */
291
+ get size() {
292
+ return asUint32(this.#set.size);
98
293
  }
99
- return false;
100
- }
101
- /** @inheritdoc */
102
- add(key) {
103
- if (this.has(key)) return this;
104
- return ISetMapped.create(
105
- [...this.#set, this.#toKey(key)].map(this.#fromKey),
106
- this.#toKey,
107
- this.#fromKey
108
- );
109
- }
110
- /** @inheritdoc */
111
- delete(key) {
112
- if (!this.has(key)) {
113
- if (this.#showNotFoundMessage) {
114
- console.warn(
115
- `ISetMapped.delete: key not found: ${unknownToString(this.#toKey(key))}`
116
- );
117
- }
118
- return this;
294
+ /** @inheritdoc */
295
+ get isEmpty() {
296
+ return this.size === 0;
119
297
  }
120
- const keyMapped = this.#toKey(key);
121
- return ISetMapped.create(
122
- Array.from(this.#set).filter((k) => !Object.is(k, keyMapped)).map(this.#fromKey),
123
- this.#toKey,
124
- this.#fromKey
125
- );
126
- }
127
- /** @inheritdoc */
128
- withMutations(actions) {
129
- const mut_result = new Set(this.#set);
130
- const updateFn = (action) => {
131
- const key = this.#toKey(action.key);
132
- switch (action.type) {
133
- case "delete":
134
- mut_result.delete(key);
135
- break;
136
- case "add":
137
- mut_result.add(key);
138
- break;
139
- }
140
- };
141
- for (const action of actions) {
142
- 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));
143
302
  }
144
- return ISetMapped.create(
145
- Array.from(mut_result, this.#fromKey),
146
- this.#toKey,
147
- this.#fromKey
148
- );
149
- }
150
- /** @inheritdoc */
151
- map(mapFn) {
152
- return ISetMapped.create(
153
- this.toArray().map(mapFn),
154
- this.#toKey,
155
- this.#fromKey
156
- );
157
- }
158
- /** @inheritdoc */
159
- filter(predicate) {
160
- return ISetMapped.create(
161
- this.toArray().filter(predicate),
162
- this.#toKey,
163
- this.#fromKey
164
- );
165
- }
166
- /** @inheritdoc */
167
- filterNot(predicate) {
168
- return ISetMapped.create(
169
- this.toArray().filter((k) => !predicate(k)),
170
- this.#toKey,
171
- this.#fromKey
172
- );
173
- }
174
- /** @inheritdoc */
175
- forEach(callbackfn) {
176
- for (const km of this.#set) {
177
- 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;
178
310
  }
179
- }
180
- /** @inheritdoc */
181
- isSubsetOf(set) {
182
- return this.every((k) => set.has(k));
183
- }
184
- /** @inheritdoc */
185
- isSupersetOf(set) {
186
- return set.every((k) => this.has(k));
187
- }
188
- /** @inheritdoc */
189
- subtract(set) {
190
- return ISetMapped.create(
191
- this.toArray().filter((k) => !set.has(k)),
192
- this.#toKey,
193
- this.#fromKey
194
- );
195
- }
196
- /** @inheritdoc */
197
- intersect(set) {
198
- return ISetMapped.create(
199
- this.toArray().filter((k) => set.has(k)),
200
- this.#toKey,
201
- this.#fromKey
202
- );
203
- }
204
- /** @inheritdoc */
205
- union(set) {
206
- return ISetMapped.create(
207
- [...this.values(), ...set.values()],
208
- this.#toKey,
209
- this.#fromKey
210
- );
211
- }
212
- /**
213
- * @example
214
- *
215
- * ```ts
216
- * type Point = Readonly<{ x: number; tag: string }>;
217
- *
218
- * const toKey = (point: Point) => JSON.stringify(point);
219
- *
220
- * // eslint-disable-next-line total-functions/no-unsafe-type-assertion
221
- * const fromKey = (key: string) => JSON.parse(key) as Point;
222
- *
223
- * const set = ISetMapped.create<Point, string>(
224
- * [
225
- * { x: 1, tag: 'a' },
226
- * { x: 2, tag: 'b' },
227
- * ],
228
- * toKey,
229
- * fromKey,
230
- * );
231
- *
232
- * const collected = Array.from(set);
233
- *
234
- * assert.deepStrictEqual(collected, [
235
- * { x: 1, tag: 'a' },
236
- * { x: 2, tag: 'b' },
237
- * ]);
238
- * ```
239
- *
240
- * @inheritdoc
241
- */
242
- *[Symbol.iterator]() {
243
- for (const k of this.keys()) {
244
- 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;
245
318
  }
246
- }
247
- /** @inheritdoc */
248
- *keys() {
249
- for (const km of this.#set) {
250
- 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);
251
324
  }
252
- }
253
- /** @inheritdoc */
254
- *values() {
255
- for (const km of this.#set) {
256
- 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);
257
337
  }
258
- }
259
- /** @inheritdoc */
260
- *entries() {
261
- for (const km of this.#set) {
262
- const a = this.#fromKey(km);
263
- 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;
264
458
  }
265
- }
266
- /** @inheritdoc */
267
- toArray() {
268
- return Array.from(this.values());
269
- }
270
- /** @inheritdoc */
271
- toRawSet() {
272
- return this.#set;
273
- }
274
459
  }
275
-
276
- export { ISetMapped };
277
- //# sourceMappingURL=iset-mapped.mjs.map
460
+ //# sourceMappingURL=iset-mapped.mjs.map