@monstermann/map 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/README.md +2496 -0
  2. package/dist/Map/clone.d.mts +10 -5
  3. package/dist/Map/clone.mjs +10 -5
  4. package/dist/Map/compact.d.mts +16 -12
  5. package/dist/Map/compact.mjs +12 -5
  6. package/dist/Map/create.d.mts +9 -2
  7. package/dist/Map/create.mjs +9 -2
  8. package/dist/Map/every.d.mts +58 -0
  9. package/dist/Map/every.mjs +55 -0
  10. package/dist/Map/filter.d.mts +25 -16
  11. package/dist/Map/filter.mjs +17 -5
  12. package/dist/Map/find.d.mts +54 -0
  13. package/dist/Map/find.mjs +54 -0
  14. package/dist/Map/findMap.d.mts +67 -0
  15. package/dist/Map/findMap.mjs +71 -0
  16. package/dist/Map/findMapAll.d.mts +67 -0
  17. package/dist/Map/findMapAll.mjs +72 -0
  18. package/dist/Map/findMapOr.d.mts +70 -0
  19. package/dist/Map/findMapOr.mjs +74 -0
  20. package/dist/Map/findMapOrElse.d.mts +70 -0
  21. package/dist/Map/findMapOrElse.mjs +74 -0
  22. package/dist/Map/findMapOrThrow.d.mts +67 -0
  23. package/dist/Map/findMapOrThrow.mjs +71 -0
  24. package/dist/Map/findOr.d.mts +56 -0
  25. package/dist/Map/findOr.mjs +57 -0
  26. package/dist/Map/findOrElse.d.mts +59 -0
  27. package/dist/Map/findOrElse.mjs +60 -0
  28. package/dist/Map/findOrThrow.d.mts +54 -0
  29. package/dist/Map/findOrThrow.mjs +55 -0
  30. package/dist/Map/findRemove.d.mts +54 -0
  31. package/dist/Map/findRemove.mjs +60 -0
  32. package/dist/Map/findRemoveOr.d.mts +56 -0
  33. package/dist/Map/findRemoveOr.mjs +62 -0
  34. package/dist/Map/findRemoveOrElse.d.mts +59 -0
  35. package/dist/Map/findRemoveOrElse.mjs +65 -0
  36. package/dist/Map/findRemoveOrThrow.d.mts +54 -0
  37. package/dist/Map/findRemoveOrThrow.mjs +60 -0
  38. package/dist/Map/findReplace.d.mts +56 -0
  39. package/dist/Map/findReplace.mjs +63 -0
  40. package/dist/Map/findReplaceOr.d.mts +58 -0
  41. package/dist/Map/findReplaceOr.mjs +65 -0
  42. package/dist/Map/findReplaceOrElse.d.mts +62 -0
  43. package/dist/Map/findReplaceOrElse.mjs +69 -0
  44. package/dist/Map/findReplaceOrThrow.d.mts +56 -0
  45. package/dist/Map/findReplaceOrThrow.mjs +63 -0
  46. package/dist/Map/forEach.d.mts +21 -12
  47. package/dist/Map/forEach.mjs +17 -5
  48. package/dist/Map/get.d.mts +15 -7
  49. package/dist/Map/get.mjs +15 -7
  50. package/dist/Map/getOr.d.mts +20 -14
  51. package/dist/Map/getOr.mjs +18 -9
  52. package/dist/Map/getOrElse.d.mts +20 -14
  53. package/dist/Map/getOrElse.mjs +18 -9
  54. package/dist/Map/getOrThrow.d.mts +19 -14
  55. package/dist/Map/getOrThrow.mjs +17 -9
  56. package/dist/Map/has.d.mts +15 -7
  57. package/dist/Map/has.mjs +15 -7
  58. package/dist/Map/hasAll.d.mts +15 -7
  59. package/dist/Map/hasAll.mjs +15 -7
  60. package/dist/Map/hasAny.d.mts +15 -7
  61. package/dist/Map/hasAny.mjs +15 -7
  62. package/dist/Map/hasNone.d.mts +15 -7
  63. package/dist/Map/hasNone.mjs +15 -7
  64. package/dist/Map/index.d.mts +21 -1
  65. package/dist/Map/index.mjs +41 -1
  66. package/dist/Map/is.d.mts +12 -5
  67. package/dist/Map/is.mjs +12 -5
  68. package/dist/Map/isEmpty.d.mts +12 -7
  69. package/dist/Map/isEmpty.mjs +12 -7
  70. package/dist/Map/isShallowEqual.d.mts +19 -11
  71. package/dist/Map/isShallowEqual.mjs +19 -11
  72. package/dist/Map/map.d.mts +25 -14
  73. package/dist/Map/map.mjs +21 -7
  74. package/dist/Map/mapEach.d.mts +21 -12
  75. package/dist/Map/mapEach.mjs +17 -5
  76. package/dist/Map/mapOr.d.mts +25 -14
  77. package/dist/Map/mapOr.mjs +21 -7
  78. package/dist/Map/mapOrElse.d.mts +25 -14
  79. package/dist/Map/mapOrElse.mjs +21 -7
  80. package/dist/Map/mapOrThrow.d.mts +24 -14
  81. package/dist/Map/mapOrThrow.mjs +20 -7
  82. package/dist/Map/none.d.mts +58 -0
  83. package/dist/Map/none.mjs +55 -0
  84. package/dist/Map/reject.d.mts +25 -16
  85. package/dist/Map/reject.mjs +17 -5
  86. package/dist/Map/remove.d.mts +15 -7
  87. package/dist/Map/remove.mjs +15 -7
  88. package/dist/Map/removeAll.d.mts +15 -7
  89. package/dist/Map/removeAll.mjs +15 -7
  90. package/dist/Map/removeOr.d.mts +16 -7
  91. package/dist/Map/removeOr.mjs +16 -7
  92. package/dist/Map/removeOrElse.d.mts +18 -12
  93. package/dist/Map/removeOrElse.mjs +16 -7
  94. package/dist/Map/removeOrThrow.d.mts +15 -7
  95. package/dist/Map/removeOrThrow.mjs +15 -7
  96. package/dist/Map/set.d.mts +16 -7
  97. package/dist/Map/set.mjs +16 -7
  98. package/dist/Map/some.d.mts +52 -0
  99. package/dist/Map/some.mjs +55 -0
  100. package/package.json +2 -2
  101. package/dist/Map/internals/types.d.mts +0 -14
package/README.md CHANGED
@@ -2,8 +2,2504 @@
2
2
 
3
3
  <h1>map</h1>
4
4
 
5
+ ![Minified](https://img.shields.io/badge/Minified-5.87_KB-blue?style=flat-square&labelColor=%2315161D&color=%2369a1ff) ![Minzipped](https://img.shields.io/badge/Minzipped-1.42_KB-blue?style=flat-square&labelColor=%2315161D&color=%2369a1ff)
6
+
5
7
  **Functional utilities for maps.**
6
8
 
7
9
  [Documentation](https://MichaelOstermann.github.io/map)
8
10
 
9
11
  </div>
12
+
13
+ ## Features
14
+
15
+ - Opt-in mutability with [`remmi`](https://michaelostermann.github.io/remmi/)
16
+ - Reference preservation (`filter(map, () => true) === map`)
17
+ - Pipe-friendly (`pipe(filter(() => true))(map)`)
18
+ - Graceful failure handling (`get()`, `getOr()`, `getOrElse()`, `getOrThrow()`)
19
+
20
+ ## Installation
21
+
22
+ ```sh [npm]
23
+ npm install @monstermann/map
24
+ ```
25
+
26
+ ```sh [pnpm]
27
+ pnpm add @monstermann/map
28
+ ```
29
+
30
+ ```sh [yarn]
31
+ yarn add @monstermann/map
32
+ ```
33
+
34
+ ```sh [bun]
35
+ bun add @monstermann/map
36
+ ```
37
+
38
+ ## Tree-shaking
39
+
40
+ ### Installation
41
+
42
+ ```sh [npm]
43
+ npm install -D @monstermann/unplugin-map
44
+ ```
45
+
46
+ ```sh [pnpm]
47
+ pnpm -D add @monstermann/unplugin-map
48
+ ```
49
+
50
+ ```sh [yarn]
51
+ yarn -D add @monstermann/unplugin-map
52
+ ```
53
+
54
+ ```sh [bun]
55
+ bun -D add @monstermann/unplugin-map
56
+ ```
57
+
58
+ ### Usage
59
+
60
+ ```ts [Vite]
61
+ // vite.config.ts
62
+ import map from "@monstermann/unplugin-map/vite";
63
+
64
+ export default defineConfig({
65
+ plugins: [map()],
66
+ });
67
+ ```
68
+
69
+ ```ts [Rollup]
70
+ // rollup.config.js
71
+ import map from "@monstermann/unplugin-map/rollup";
72
+
73
+ export default {
74
+ plugins: [map()],
75
+ };
76
+ ```
77
+
78
+ ```ts [Rolldown]
79
+ // rolldown.config.js
80
+ import map from "@monstermann/unplugin-map/rolldown";
81
+
82
+ export default {
83
+ plugins: [map()],
84
+ };
85
+ ```
86
+
87
+ ```ts [Webpack]
88
+ // webpack.config.js
89
+ const map = require("@monstermann/unplugin-map/webpack");
90
+
91
+ module.exports = {
92
+ plugins: [map()],
93
+ };
94
+ ```
95
+
96
+ ```ts [Rspack]
97
+ // rspack.config.js
98
+ const map = require("@monstermann/unplugin-map/rspack");
99
+
100
+ module.exports = {
101
+ plugins: [map()],
102
+ };
103
+ ```
104
+
105
+ ```ts [ESBuild]
106
+ // esbuild.config.js
107
+ import { build } from "esbuild";
108
+ import map from "@monstermann/unplugin-map/esbuild";
109
+
110
+ build({
111
+ plugins: [map()],
112
+ });
113
+ ```
114
+
115
+ ## Map
116
+
117
+ ### clone
118
+
119
+ ```ts
120
+ function Map.clone<K, V>(target: ReadonlyMap<K, V>): Map<K, V>
121
+ ```
122
+
123
+ Creates a shallow copy of the map, unless marked as mutable with `markAsMutable` inside a mutation context (see [@monstermann/remmi](https://michaelostermann.github.io/remmi/#clonearray-array)).
124
+
125
+ #### Example
126
+
127
+ ```ts [data-first]
128
+ import { Map } from "@monstermann/map";
129
+
130
+ const original = new Map([
131
+ ["a", 1],
132
+ ["b", 2],
133
+ ]);
134
+
135
+ const copy = Map.clone(original); // Map { 'a' => 1, 'b' => 2 }
136
+ ```
137
+
138
+ ```ts [data-last]
139
+ import { Map } from "@monstermann/map";
140
+
141
+ const original = new Map([
142
+ ["a", 1],
143
+ ["b", 2],
144
+ ]);
145
+
146
+ const copy = pipe(original, Map.clone()); // Map { 'a' => 1, 'b' => 2 }
147
+ ```
148
+
149
+ ### compact
150
+
151
+ ```ts
152
+ function Map.compact<K, V>(
153
+ target: ReadonlyMap<K, V>,
154
+ ): ReadonlyMap<K, Exclude<V, null | undefined>>
155
+ ```
156
+
157
+ Removes all entries with `null` or `undefined` values.
158
+
159
+ #### Example
160
+
161
+ ```ts [data-first]
162
+ import { Map } from "@monstermann/map";
163
+
164
+ Map.compact(
165
+ new Map([
166
+ ["a", 1],
167
+ ["b", null],
168
+ ["c", undefined],
169
+ ]),
170
+ ); // Map(1) { "a" => 1 }
171
+ ```
172
+
173
+ ```ts [data-last]
174
+ import { Map } from "@monstermann/map";
175
+
176
+ pipe(
177
+ new Map([
178
+ ["a", 1],
179
+ ["b", null],
180
+ ["c", undefined],
181
+ ]),
182
+ Map.compact(),
183
+ ); // Map(1) { "a" => 1 }
184
+ ```
185
+
186
+ ### create
187
+
188
+ ```ts
189
+ function Map.create<K, V>(
190
+ iterable?: Iterable<readonly [K, V]> | null | undefined,
191
+ ): Map<K, V>
192
+ ```
193
+
194
+ Creates a new Map from an iterable of key-value pairs.
195
+
196
+ #### Example
197
+
198
+ ```ts
199
+ import { Map } from "@monstermann/map";
200
+
201
+ Map.create([
202
+ ["a", 1],
203
+ ["b", 2],
204
+ ["c", 3],
205
+ ]); // Map(2) { "a" => 1, "b" => 2, "c" => 3 }
206
+ ```
207
+
208
+ ### every
209
+
210
+ ```ts
211
+ function Map.every<K, V>(
212
+ target: ReadonlyMap<K, V>,
213
+ predicate: (
214
+ value: NoInfer<V>,
215
+ key: NoInfer<K>,
216
+ target: ReadonlyMap<K, V>,
217
+ ) => boolean,
218
+ ): boolean
219
+ ```
220
+
221
+ Tests whether all entries in the map pass the test implemented by the `predicate` function. It returns `true` if all entries pass, otherwise `false`.
222
+
223
+ #### Example
224
+
225
+ ```ts [data-first]
226
+ import { Map } from "@monstermann/map";
227
+
228
+ Map.every(
229
+ new Map([
230
+ ["a", 2],
231
+ ["b", 4],
232
+ ["c", 6],
233
+ ]),
234
+ (value) => value % 2 === 0,
235
+ ); // true
236
+ ```
237
+
238
+ ```ts [data-last]
239
+ import { Map } from "@monstermann/map";
240
+
241
+ pipe(
242
+ new Map([
243
+ ["a", 2],
244
+ ["b", 4],
245
+ ["c", 6],
246
+ ]),
247
+ Map.every((value) => value % 2 === 0),
248
+ ); // true
249
+ ```
250
+
251
+ ### filter
252
+
253
+ ```ts
254
+ function Map.filter<K, V>(
255
+ target: ReadonlyMap<K, V>,
256
+ predicate: (
257
+ value: NoInfer<V>,
258
+ key: NoInfer<K>,
259
+ target: ReadonlyMap<K, V>,
260
+ ) => boolean,
261
+ ): ReadonlyMap<K, V>
262
+ ```
263
+
264
+ Returns a new map containing only entries that satisfy the predicate function.
265
+
266
+ #### Example
267
+
268
+ ```ts [data-first]
269
+ import { Map } from "@monstermann/map";
270
+
271
+ Map.filter(
272
+ new Map([
273
+ ["a", 1],
274
+ ["b", 2],
275
+ ["c", 3],
276
+ ]),
277
+ (value) => value > 1,
278
+ ); // Map(2) { "b" => 2, "c" => 3 }
279
+ ```
280
+
281
+ ```ts [data-last]
282
+ import { Map } from "@monstermann/map";
283
+
284
+ pipe(
285
+ new Map([
286
+ ["a", 1],
287
+ ["b", 2],
288
+ ["c", 3],
289
+ ]),
290
+ Map.filter((value) => value > 1),
291
+ ); // Map(2) { "b" => 2, "c" => 3 }
292
+ ```
293
+
294
+ ### find
295
+
296
+ ```ts
297
+ function Map.find<K, V>(
298
+ target: ReadonlyMap<K, V>,
299
+ predicate: (
300
+ value: NoInfer<V>,
301
+ key: NoInfer<K>,
302
+ target: ReadonlyMap<K, V>,
303
+ ) => boolean,
304
+ ): V | undefined
305
+ ```
306
+
307
+ Returns the first value in the map that satisfies the provided `predicate` function, or `undefined` if no value is found.
308
+
309
+ #### Example
310
+
311
+ ```ts [data-first]
312
+ import { Map } from "@monstermann/map";
313
+
314
+ Map.find(
315
+ new Map([
316
+ ["a", 1],
317
+ ["b", 2],
318
+ ["c", 3],
319
+ ]),
320
+ (value) => value > 2,
321
+ ); // 3
322
+ ```
323
+
324
+ ```ts [data-last]
325
+ import { Map } from "@monstermann/map";
326
+
327
+ pipe(
328
+ new Map([
329
+ ["a", 1],
330
+ ["b", 2],
331
+ ["c", 3],
332
+ ]),
333
+ Map.find((value) => value > 2),
334
+ ); // 3
335
+ ```
336
+
337
+ ### findMap
338
+
339
+ ```ts
340
+ function Map.findMap<K, V>(
341
+ target: ReadonlyMap<K, V>,
342
+ predicate: (
343
+ value: NoInfer<V>,
344
+ key: NoInfer<K>,
345
+ target: ReadonlyMap<K, V>,
346
+ ) => boolean,
347
+ mapper: (
348
+ value: NoInfer<V>,
349
+ key: NoInfer<K>,
350
+ target: ReadonlyMap<K, V>,
351
+ ) => V,
352
+ ): ReadonlyMap<K, V>
353
+ ```
354
+
355
+ Finds the first entry in the map that satisfies the provided `predicate` function and applies the `mapper` function to it, returning a new map with the mapped value.
356
+
357
+ #### Example
358
+
359
+ ```ts [data-first]
360
+ import { Map } from "@monstermann/map";
361
+
362
+ Map.findMap(
363
+ new Map([
364
+ ["a", 1],
365
+ ["b", 2],
366
+ ["c", 3],
367
+ ]),
368
+ (value) => value > 1,
369
+ (value) => value * 10,
370
+ ); // Map(3) { "a" => 1, "b" => 20, "c" => 3 }
371
+ ```
372
+
373
+ ```ts [data-last]
374
+ import { Map } from "@monstermann/map";
375
+
376
+ pipe(
377
+ new Map([
378
+ ["a", 1],
379
+ ["b", 2],
380
+ ["c", 3],
381
+ ]),
382
+ Map.findMap(
383
+ (value) => value > 1,
384
+ (value) => value * 10,
385
+ ),
386
+ ); // Map(3) { "a" => 1, "b" => 20, "c" => 3 }
387
+ ```
388
+
389
+ ### findMapAll
390
+
391
+ ```ts
392
+ function Map.findMapAll<K, V>(
393
+ target: ReadonlyMap<K, V>,
394
+ predicate: (
395
+ value: NoInfer<V>,
396
+ key: NoInfer<K>,
397
+ target: ReadonlyMap<K, V>,
398
+ ) => boolean,
399
+ mapper: (
400
+ value: NoInfer<V>,
401
+ key: NoInfer<K>,
402
+ target: ReadonlyMap<K, V>,
403
+ ) => V,
404
+ ): ReadonlyMap<K, V>
405
+ ```
406
+
407
+ Finds all entries in the map that satisfy the provided `predicate` function and applies the `mapper` function to each of them, returning a new map with the mapped values.
408
+
409
+ #### Example
410
+
411
+ ```ts [data-first]
412
+ import { Map } from "@monstermann/map";
413
+
414
+ Map.findMapAll(
415
+ new Map([
416
+ ["a", 1],
417
+ ["b", 2],
418
+ ["c", 3],
419
+ ]),
420
+ (value) => value > 1,
421
+ (value) => value * 10,
422
+ ); // Map(3) { "a" => 1, "b" => 20, "c" => 30 }
423
+ ```
424
+
425
+ ```ts [data-last]
426
+ import { Map } from "@monstermann/map";
427
+
428
+ pipe(
429
+ new Map([
430
+ ["a", 1],
431
+ ["b", 2],
432
+ ["c", 3],
433
+ ]),
434
+ Map.findMapAll(
435
+ (value) => value > 1,
436
+ (value) => value * 10,
437
+ ),
438
+ ); // Map(3) { "a" => 1, "b" => 20, "c" => 30 }
439
+ ```
440
+
441
+ ### findMapOr
442
+
443
+ ```ts
444
+ function Map.findMapOr<K, V, O>(
445
+ target: ReadonlyMap<K, V>,
446
+ predicate: (
447
+ value: NoInfer<V>,
448
+ key: NoInfer<K>,
449
+ target: ReadonlyMap<K, V>,
450
+ ) => boolean,
451
+ mapper: (
452
+ value: NoInfer<V>,
453
+ key: NoInfer<K>,
454
+ target: ReadonlyMap<K, V>,
455
+ ) => V,
456
+ or: O,
457
+ ): ReadonlyMap<K, V> | O
458
+ ```
459
+
460
+ Finds the first entry in the map that satisfies the provided `predicate` function and applies the `mapper` function to it, returning a new map with the mapped value, or `or` if no entry is found.
461
+
462
+ #### Example
463
+
464
+ ```ts [data-first]
465
+ import { Map } from "@monstermann/map";
466
+
467
+ Map.findMapOr(
468
+ new Map([
469
+ ["a", 1],
470
+ ["b", 2],
471
+ ["c", 3],
472
+ ]),
473
+ (value) => value > 10,
474
+ (value) => value * 10,
475
+ new Map(),
476
+ ); // Map(0) {}
477
+ ```
478
+
479
+ ```ts [data-last]
480
+ import { Map } from "@monstermann/map";
481
+
482
+ pipe(
483
+ new Map([
484
+ ["a", 1],
485
+ ["b", 2],
486
+ ["c", 3],
487
+ ]),
488
+ Map.findMapOr(
489
+ (value) => value > 10,
490
+ (value) => value * 10,
491
+ new Map(),
492
+ ),
493
+ ); // Map(0) {}
494
+ ```
495
+
496
+ ### findMapOrElse
497
+
498
+ ```ts
499
+ function Map.findMapOrElse<K, V, O>(
500
+ target: ReadonlyMap<K, V>,
501
+ predicate: (
502
+ value: NoInfer<V>,
503
+ key: NoInfer<K>,
504
+ target: ReadonlyMap<K, V>,
505
+ ) => boolean,
506
+ mapper: (
507
+ value: NoInfer<V>,
508
+ key: NoInfer<K>,
509
+ target: ReadonlyMap<K, V>,
510
+ ) => V,
511
+ orElse: (target: ReadonlyMap<K, V>) => O,
512
+ ): ReadonlyMap<K, V> | O
513
+ ```
514
+
515
+ Finds the first entry in the map that satisfies the provided `predicate` function and applies the `mapper` function to it, returning a new map with the mapped value, or the result of calling `orElse` with the map if no entry is found.
516
+
517
+ #### Example
518
+
519
+ ```ts [data-first]
520
+ import { Map } from "@monstermann/map";
521
+
522
+ Map.findMapOrElse(
523
+ new Map([
524
+ ["a", 1],
525
+ ["b", 2],
526
+ ["c", 3],
527
+ ]),
528
+ (value) => value > 10,
529
+ (value) => value * 10,
530
+ (map) => map.size,
531
+ ); // 3
532
+ ```
533
+
534
+ ```ts [data-last]
535
+ import { Map } from "@monstermann/map";
536
+
537
+ pipe(
538
+ new Map([
539
+ ["a", 1],
540
+ ["b", 2],
541
+ ["c", 3],
542
+ ]),
543
+ Map.findMapOrElse(
544
+ (value) => value > 10,
545
+ (value) => value * 10,
546
+ (map) => map.size,
547
+ ),
548
+ ); // 3
549
+ ```
550
+
551
+ ### findMapOrThrow
552
+
553
+ ```ts
554
+ function Map.findMapOrThrow<K, V>(
555
+ target: ReadonlyMap<K, V>,
556
+ predicate: (
557
+ value: NoInfer<V>,
558
+ key: NoInfer<K>,
559
+ target: ReadonlyMap<K, V>,
560
+ ) => boolean,
561
+ mapper: (
562
+ value: NoInfer<V>,
563
+ key: NoInfer<K>,
564
+ target: ReadonlyMap<K, V>,
565
+ ) => V,
566
+ ): ReadonlyMap<K, V>
567
+ ```
568
+
569
+ Finds the first entry in the map that satisfies the provided `predicate` function and applies the `mapper` function to it, returning a new map with the mapped value, or throws an error if no entry is found.
570
+
571
+ #### Example
572
+
573
+ ```ts [data-first]
574
+ import { Map } from "@monstermann/map";
575
+
576
+ Map.findMapOrThrow(
577
+ new Map([
578
+ ["a", 1],
579
+ ["b", 2],
580
+ ["c", 3],
581
+ ]),
582
+ (value) => value > 1,
583
+ (value) => value * 10,
584
+ ); // Map(3) { "a" => 1, "b" => 20, "c" => 3 }
585
+ ```
586
+
587
+ ```ts [data-last]
588
+ import { Map } from "@monstermann/map";
589
+
590
+ pipe(
591
+ new Map([
592
+ ["a", 1],
593
+ ["b", 2],
594
+ ["c", 3],
595
+ ]),
596
+ Map.findMapOrThrow(
597
+ (value) => value > 1,
598
+ (value) => value * 10,
599
+ ),
600
+ ); // Map(3) { "a" => 1, "b" => 20, "c" => 3 }
601
+ ```
602
+
603
+ ### findOr
604
+
605
+ ```ts
606
+ function Map.findOr<K, V, O>(
607
+ target: ReadonlyMap<K, V>,
608
+ predicate: (
609
+ value: NoInfer<V>,
610
+ key: NoInfer<K>,
611
+ target: ReadonlyMap<K, V>,
612
+ ) => boolean,
613
+ or: O,
614
+ ): V | O
615
+ ```
616
+
617
+ Returns the first value in the map that satisfies the provided `predicate` function, or `or` if no value is found.
618
+
619
+ #### Example
620
+
621
+ ```ts [data-first]
622
+ import { Map } from "@monstermann/map";
623
+
624
+ Map.findOr(
625
+ new Map([
626
+ ["a", 1],
627
+ ["b", 2],
628
+ ["c", 3],
629
+ ]),
630
+ (value) => value > 10,
631
+ 0,
632
+ ); // 0
633
+ ```
634
+
635
+ ```ts [data-last]
636
+ import { Map } from "@monstermann/map";
637
+
638
+ pipe(
639
+ new Map([
640
+ ["a", 1],
641
+ ["b", 2],
642
+ ["c", 3],
643
+ ]),
644
+ Map.findOr((value) => value > 10, 0),
645
+ ); // 0
646
+ ```
647
+
648
+ ### findOrElse
649
+
650
+ ```ts
651
+ function Map.findOrElse<K, V, O>(
652
+ target: ReadonlyMap<K, V>,
653
+ predicate: (
654
+ value: NoInfer<V>,
655
+ key: NoInfer<K>,
656
+ target: ReadonlyMap<K, V>,
657
+ ) => boolean,
658
+ orElse: (target: ReadonlyMap<K, V>) => O,
659
+ ): V | O
660
+ ```
661
+
662
+ Returns the first value in the map that satisfies the provided `predicate` function, or the result of calling `orElse` with the map if no value is found.
663
+
664
+ #### Example
665
+
666
+ ```ts [data-first]
667
+ import { Map } from "@monstermann/map";
668
+
669
+ Map.findOrElse(
670
+ new Map([
671
+ ["a", 1],
672
+ ["b", 2],
673
+ ["c", 3],
674
+ ]),
675
+ (value) => value > 10,
676
+ (map) => map.size,
677
+ ); // 3
678
+ ```
679
+
680
+ ```ts [data-last]
681
+ import { Map } from "@monstermann/map";
682
+
683
+ pipe(
684
+ new Map([
685
+ ["a", 1],
686
+ ["b", 2],
687
+ ["c", 3],
688
+ ]),
689
+ Map.findOrElse(
690
+ (value) => value > 10,
691
+ (map) => map.size,
692
+ ),
693
+ ); // 3
694
+ ```
695
+
696
+ ### findOrThrow
697
+
698
+ ```ts
699
+ function Map.findOrThrow<K, V>(
700
+ target: ReadonlyMap<K, V>,
701
+ predicate: (
702
+ value: NoInfer<V>,
703
+ key: NoInfer<K>,
704
+ target: ReadonlyMap<K, V>,
705
+ ) => boolean,
706
+ ): V
707
+ ```
708
+
709
+ Returns the first value in the map that satisfies the provided `predicate` function, or throws an error if no value is found.
710
+
711
+ #### Example
712
+
713
+ ```ts [data-first]
714
+ import { Map } from "@monstermann/map";
715
+
716
+ Map.findOrThrow(
717
+ new Map([
718
+ ["a", 1],
719
+ ["b", 2],
720
+ ["c", 3],
721
+ ]),
722
+ (value) => value > 2,
723
+ ); // 3
724
+ ```
725
+
726
+ ```ts [data-last]
727
+ import { Map } from "@monstermann/map";
728
+
729
+ pipe(
730
+ new Map([
731
+ ["a", 1],
732
+ ["b", 2],
733
+ ["c", 3],
734
+ ]),
735
+ Map.findOrThrow((value) => value > 2),
736
+ ); // 3
737
+ ```
738
+
739
+ ### findRemove
740
+
741
+ ```ts
742
+ function Map.findRemove<K, V>(
743
+ target: ReadonlyMap<K, V>,
744
+ predicate: (
745
+ value: NoInfer<V>,
746
+ key: NoInfer<K>,
747
+ target: ReadonlyMap<K, V>,
748
+ ) => boolean,
749
+ ): ReadonlyMap<K, V>
750
+ ```
751
+
752
+ Finds the first entry in the map that satisfies the provided `predicate` function and removes it, returning a new map without the removed entry.
753
+
754
+ #### Example
755
+
756
+ ```ts [data-first]
757
+ import { Map } from "@monstermann/map";
758
+
759
+ Map.findRemove(
760
+ new Map([
761
+ ["a", 1],
762
+ ["b", 2],
763
+ ["c", 3],
764
+ ]),
765
+ (value) => value > 1,
766
+ ); // Map(2) { "a" => 1, "c" => 3 }
767
+ ```
768
+
769
+ ```ts [data-last]
770
+ import { Map } from "@monstermann/map";
771
+
772
+ pipe(
773
+ new Map([
774
+ ["a", 1],
775
+ ["b", 2],
776
+ ["c", 3],
777
+ ]),
778
+ Map.findRemove((value) => value > 1),
779
+ ); // Map(2) { "a" => 1, "c" => 3 }
780
+ ```
781
+
782
+ ### findRemoveOr
783
+
784
+ ```ts
785
+ function Map.findRemoveOr<K, V, O>(
786
+ target: ReadonlyMap<K, V>,
787
+ predicate: (
788
+ value: NoInfer<V>,
789
+ key: NoInfer<K>,
790
+ target: ReadonlyMap<K, V>,
791
+ ) => boolean,
792
+ or: O,
793
+ ): ReadonlyMap<K, V> | O
794
+ ```
795
+
796
+ Finds the first entry in the map that satisfies the provided `predicate` function and removes it, returning a new map without the removed entry, or `or` if no entry is found.
797
+
798
+ #### Example
799
+
800
+ ```ts [data-first]
801
+ import { Map } from "@monstermann/map";
802
+
803
+ Map.findRemoveOr(
804
+ new Map([
805
+ ["a", 1],
806
+ ["b", 2],
807
+ ["c", 3],
808
+ ]),
809
+ (value) => value > 10,
810
+ new Map(),
811
+ ); // Map(0) {}
812
+ ```
813
+
814
+ ```ts [data-last]
815
+ import { Map } from "@monstermann/map";
816
+
817
+ pipe(
818
+ new Map([
819
+ ["a", 1],
820
+ ["b", 2],
821
+ ["c", 3],
822
+ ]),
823
+ Map.findRemoveOr((value) => value > 10, new Map()),
824
+ ); // Map(0) {}
825
+ ```
826
+
827
+ ### findRemoveOrElse
828
+
829
+ ```ts
830
+ function Map.findRemoveOrElse<K, V, O>(
831
+ target: ReadonlyMap<K, V>,
832
+ predicate: (
833
+ value: NoInfer<V>,
834
+ key: NoInfer<K>,
835
+ target: ReadonlyMap<K, V>,
836
+ ) => boolean,
837
+ orElse: (target: ReadonlyMap<K, V>) => O,
838
+ ): ReadonlyMap<K, V> | O
839
+ ```
840
+
841
+ Finds the first entry in the map that satisfies the provided `predicate` function and removes it, returning a new map without the removed entry, or the result of calling `orElse` with the map if no entry is found.
842
+
843
+ #### Example
844
+
845
+ ```ts [data-first]
846
+ import { Map } from "@monstermann/map";
847
+
848
+ Map.findRemoveOrElse(
849
+ new Map([
850
+ ["a", 1],
851
+ ["b", 2],
852
+ ["c", 3],
853
+ ]),
854
+ (value) => value > 10,
855
+ (map) => map.size,
856
+ ); // 3
857
+ ```
858
+
859
+ ```ts [data-last]
860
+ import { Map } from "@monstermann/map";
861
+
862
+ pipe(
863
+ new Map([
864
+ ["a", 1],
865
+ ["b", 2],
866
+ ["c", 3],
867
+ ]),
868
+ Map.findRemoveOrElse(
869
+ (value) => value > 10,
870
+ (map) => map.size,
871
+ ),
872
+ ); // 3
873
+ ```
874
+
875
+ ### findRemoveOrThrow
876
+
877
+ ```ts
878
+ function Map.findRemoveOrThrow<K, V>(
879
+ target: ReadonlyMap<K, V>,
880
+ predicate: (
881
+ value: NoInfer<V>,
882
+ key: NoInfer<K>,
883
+ target: ReadonlyMap<K, V>,
884
+ ) => boolean,
885
+ ): ReadonlyMap<K, V>
886
+ ```
887
+
888
+ Finds the first entry in the map that satisfies the provided `predicate` function and removes it, returning a new map without the removed entry, or throws an error if no entry is found.
889
+
890
+ #### Example
891
+
892
+ ```ts [data-first]
893
+ import { Map } from "@monstermann/map";
894
+
895
+ Map.findRemoveOrThrow(
896
+ new Map([
897
+ ["a", 1],
898
+ ["b", 2],
899
+ ["c", 3],
900
+ ]),
901
+ (value) => value > 1,
902
+ ); // Map(2) { "a" => 1, "c" => 3 }
903
+ ```
904
+
905
+ ```ts [data-last]
906
+ import { Map } from "@monstermann/map";
907
+
908
+ pipe(
909
+ new Map([
910
+ ["a", 1],
911
+ ["b", 2],
912
+ ["c", 3],
913
+ ]),
914
+ Map.findRemoveOrThrow((value) => value > 1),
915
+ ); // Map(2) { "a" => 1, "c" => 3 }
916
+ ```
917
+
918
+ ### findReplace
919
+
920
+ ```ts
921
+ function Map.findReplace<K, V>(
922
+ target: ReadonlyMap<K, V>,
923
+ predicate: (
924
+ value: NoInfer<V>,
925
+ key: NoInfer<K>,
926
+ target: ReadonlyMap<K, V>,
927
+ ) => boolean,
928
+ replacement: NoInfer<V>,
929
+ ): ReadonlyMap<K, V>
930
+ ```
931
+
932
+ Finds the first entry in the map that satisfies the provided `predicate` function and replaces its value with `replacement`, returning a new map with the replaced value.
933
+
934
+ #### Example
935
+
936
+ ```ts [data-first]
937
+ import { Map } from "@monstermann/map";
938
+
939
+ Map.findReplace(
940
+ new Map([
941
+ ["a", 1],
942
+ ["b", 2],
943
+ ["c", 3],
944
+ ]),
945
+ (value) => value > 1,
946
+ 10,
947
+ ); // Map(3) { "a" => 1, "b" => 10, "c" => 3 }
948
+ ```
949
+
950
+ ```ts [data-last]
951
+ import { Map } from "@monstermann/map";
952
+
953
+ pipe(
954
+ new Map([
955
+ ["a", 1],
956
+ ["b", 2],
957
+ ["c", 3],
958
+ ]),
959
+ Map.findReplace((value) => value > 1, 10),
960
+ ); // Map(3) { "a" => 1, "b" => 10, "c" => 3 }
961
+ ```
962
+
963
+ ### findReplaceOr
964
+
965
+ ```ts
966
+ function Map.findReplaceOr<K, V, O>(
967
+ target: ReadonlyMap<K, V>,
968
+ predicate: (
969
+ value: NoInfer<V>,
970
+ key: NoInfer<K>,
971
+ target: ReadonlyMap<K, V>,
972
+ ) => boolean,
973
+ replacement: NoInfer<V>,
974
+ or: O,
975
+ ): ReadonlyMap<K, V> | O
976
+ ```
977
+
978
+ Finds the first entry in the map that satisfies the provided `predicate` function and replaces its value with `replacement`, returning a new map with the replaced value, or `or` if no entry is found.
979
+
980
+ #### Example
981
+
982
+ ```ts [data-first]
983
+ import { Map } from "@monstermann/map";
984
+
985
+ Map.findReplaceOr(
986
+ new Map([
987
+ ["a", 1],
988
+ ["b", 2],
989
+ ["c", 3],
990
+ ]),
991
+ (value) => value > 10,
992
+ 99,
993
+ new Map(),
994
+ ); // Map(0) {}
995
+ ```
996
+
997
+ ```ts [data-last]
998
+ import { Map } from "@monstermann/map";
999
+
1000
+ pipe(
1001
+ new Map([
1002
+ ["a", 1],
1003
+ ["b", 2],
1004
+ ["c", 3],
1005
+ ]),
1006
+ Map.findReplaceOr((value) => value > 10, 99, new Map()),
1007
+ ); // Map(0) {}
1008
+ ```
1009
+
1010
+ ### findReplaceOrElse
1011
+
1012
+ ```ts
1013
+ function Map.findReplaceOrElse<K, V, O>(
1014
+ target: ReadonlyMap<K, V>,
1015
+ predicate: (
1016
+ value: NoInfer<V>,
1017
+ key: NoInfer<K>,
1018
+ target: ReadonlyMap<K, V>,
1019
+ ) => boolean,
1020
+ replacement: NoInfer<V>,
1021
+ orElse: (target: ReadonlyMap<K, V>) => O,
1022
+ ): ReadonlyMap<K, V> | O
1023
+ ```
1024
+
1025
+ Finds the first entry in the map that satisfies the provided `predicate` function and replaces its value with `replacement`, returning a new map with the replaced value, or the result of calling `orElse` with the map if no entry is found.
1026
+
1027
+ #### Example
1028
+
1029
+ ```ts [data-first]
1030
+ import { Map } from "@monstermann/map";
1031
+
1032
+ Map.findReplaceOrElse(
1033
+ new Map([
1034
+ ["a", 1],
1035
+ ["b", 2],
1036
+ ["c", 3],
1037
+ ]),
1038
+ (value) => value > 10,
1039
+ 99,
1040
+ (map) => map.size,
1041
+ ); // 3
1042
+ ```
1043
+
1044
+ ```ts [data-last]
1045
+ import { Map } from "@monstermann/map";
1046
+
1047
+ pipe(
1048
+ new Map([
1049
+ ["a", 1],
1050
+ ["b", 2],
1051
+ ["c", 3],
1052
+ ]),
1053
+ Map.findReplaceOrElse(
1054
+ (value) => value > 10,
1055
+ 99,
1056
+ (map) => map.size,
1057
+ ),
1058
+ ); // 3
1059
+ ```
1060
+
1061
+ ### findReplaceOrThrow
1062
+
1063
+ ```ts
1064
+ function Map.findReplaceOrThrow<K, V>(
1065
+ target: ReadonlyMap<K, V>,
1066
+ predicate: (
1067
+ value: NoInfer<V>,
1068
+ key: NoInfer<K>,
1069
+ target: ReadonlyMap<K, V>,
1070
+ ) => boolean,
1071
+ replacement: NoInfer<V>,
1072
+ ): ReadonlyMap<K, V>
1073
+ ```
1074
+
1075
+ Finds the first entry in the map that satisfies the provided `predicate` function and replaces its value with `replacement`, returning a new map with the replaced value, or throws an error if no entry is found.
1076
+
1077
+ #### Example
1078
+
1079
+ ```ts [data-first]
1080
+ import { Map } from "@monstermann/map";
1081
+
1082
+ Map.findReplaceOrThrow(
1083
+ new Map([
1084
+ ["a", 1],
1085
+ ["b", 2],
1086
+ ["c", 3],
1087
+ ]),
1088
+ (value) => value > 1,
1089
+ 99,
1090
+ ); // Map(3) { "a" => 1, "b" => 99, "c" => 3 }
1091
+ ```
1092
+
1093
+ ```ts [data-last]
1094
+ import { Map } from "@monstermann/map";
1095
+
1096
+ pipe(
1097
+ new Map([
1098
+ ["a", 1],
1099
+ ["b", 2],
1100
+ ["c", 3],
1101
+ ]),
1102
+ Map.findReplaceOrThrow((value) => value > 1, 99),
1103
+ ); // Map(3) { "a" => 1, "b" => 99, "c" => 3 }
1104
+ ```
1105
+
1106
+ ### forEach
1107
+
1108
+ ```ts
1109
+ function Map.forEach<K, V>(
1110
+ target: ReadonlyMap<K, V>,
1111
+ fn: (
1112
+ value: NoInfer<V>,
1113
+ key: NoInfer<K>,
1114
+ target: ReadonlyMap<K, V>,
1115
+ ) => any,
1116
+ ): ReadonlyMap<K, V>
1117
+ ```
1118
+
1119
+ Executes a function for each entry in the map and returns the original map.
1120
+
1121
+ #### Example
1122
+
1123
+ ```ts [data-first]
1124
+ import { Map } from "@monstermann/map";
1125
+
1126
+ Map.forEach(
1127
+ new Map([
1128
+ ["a", 1],
1129
+ ["b", 2],
1130
+ ]),
1131
+ (value, key) => console.log(key, value),
1132
+ ); // Map(2) { "a" => 1, "b" => 2 }
1133
+ ```
1134
+
1135
+ ```ts [data-last]
1136
+ import { Map } from "@monstermann/map";
1137
+
1138
+ pipe(
1139
+ new Map([
1140
+ ["a", 1],
1141
+ ["b", 2],
1142
+ ]),
1143
+ Map.forEach((value, key) => console.log(key, value)),
1144
+ ); // Map(2) { "a" => 1, "b" => 2 }
1145
+ ```
1146
+
1147
+ ### get
1148
+
1149
+ ```ts
1150
+ function Map.get<K, V>(
1151
+ target: ReadonlyMap<K, V>,
1152
+ key: NoInfer<K>,
1153
+ ): V | undefined
1154
+ ```
1155
+
1156
+ Gets the value associated with the specified key, or `undefined` if the key doesn't exist.
1157
+
1158
+ #### Example
1159
+
1160
+ ```ts [data-first]
1161
+ import { Map } from "@monstermann/map";
1162
+
1163
+ Map.get(
1164
+ new Map([
1165
+ ["a", 1],
1166
+ ["b", 2],
1167
+ ]),
1168
+ "a",
1169
+ ); // 1
1170
+
1171
+ Map.get(
1172
+ new Map([
1173
+ ["a", 1],
1174
+ ["b", 2],
1175
+ ]),
1176
+ "c",
1177
+ ); // undefined
1178
+ ```
1179
+
1180
+ ```ts [data-last]
1181
+ import { Map } from "@monstermann/map";
1182
+
1183
+ pipe(
1184
+ new Map([
1185
+ ["a", 1],
1186
+ ["b", 2],
1187
+ ]),
1188
+ Map.get("a"),
1189
+ ); // 1
1190
+
1191
+ pipe(
1192
+ new Map([
1193
+ ["a", 1],
1194
+ ["b", 2],
1195
+ ]),
1196
+ Map.get("c"),
1197
+ ); // undefined
1198
+ ```
1199
+
1200
+ ### getOr
1201
+
1202
+ ```ts
1203
+ function Map.getOr<K, V, U>(
1204
+ target: ReadonlyMap<K, V>,
1205
+ key: NoInfer<K>,
1206
+ or: U,
1207
+ ): Exclude<V, null | undefined> | U
1208
+ ```
1209
+
1210
+ Gets the value associated with the specified key, or returns the fallback value if the value is `null` or `undefined`.
1211
+
1212
+ #### Example
1213
+
1214
+ ```ts [data-first]
1215
+ import { Map } from "@monstermann/map";
1216
+
1217
+ Map.getOr(
1218
+ new Map([
1219
+ ["a", 1],
1220
+ ["b", null],
1221
+ ]),
1222
+ "a",
1223
+ 0,
1224
+ ); // 1
1225
+
1226
+ Map.getOr(
1227
+ new Map([
1228
+ ["a", 1],
1229
+ ["b", null],
1230
+ ]),
1231
+ "b",
1232
+ 0,
1233
+ ); // 0
1234
+
1235
+ Map.getOr(
1236
+ new Map([
1237
+ ["a", 1],
1238
+ ["b", null],
1239
+ ]),
1240
+ "c",
1241
+ 0,
1242
+ ); // 0
1243
+ ```
1244
+
1245
+ ```ts [data-last]
1246
+ import { Map } from "@monstermann/map";
1247
+
1248
+ pipe(
1249
+ new Map([
1250
+ ["a", 1],
1251
+ ["b", null],
1252
+ ]),
1253
+ Map.getOr("a", 0),
1254
+ ); // 1
1255
+
1256
+ pipe(
1257
+ new Map([
1258
+ ["a", 1],
1259
+ ["b", null],
1260
+ ]),
1261
+ Map.getOr("b", 0),
1262
+ ); // 0
1263
+
1264
+ pipe(
1265
+ new Map([
1266
+ ["a", 1],
1267
+ ["b", null],
1268
+ ]),
1269
+ Map.getOr("c", 0),
1270
+ ); // 0
1271
+ ```
1272
+
1273
+ ### getOrElse
1274
+
1275
+ ```ts
1276
+ function Map.getOrElse<K, V, U>(
1277
+ target: ReadonlyMap<K, V>,
1278
+ key: NoInfer<K>,
1279
+ orElse: (target: ReadonlyMap<K, V>) => U,
1280
+ ): Exclude<V, null | undefined> | U
1281
+ ```
1282
+
1283
+ Gets the value associated with the specified key, or calls the provided function to compute a fallback value if the value is `null` or `undefined`.
1284
+
1285
+ #### Example
1286
+
1287
+ ```ts [data-first]
1288
+ import { Map } from "@monstermann/map";
1289
+
1290
+ Map.getOrElse(
1291
+ new Map([
1292
+ ["a", 1],
1293
+ ["b", null],
1294
+ ]),
1295
+ "a",
1296
+ () => 0,
1297
+ ); // 1
1298
+
1299
+ Map.getOrElse(
1300
+ new Map([
1301
+ ["a", 1],
1302
+ ["b", null],
1303
+ ]),
1304
+ "b",
1305
+ () => 0,
1306
+ ); // 0
1307
+
1308
+ Map.getOrElse(
1309
+ new Map([
1310
+ ["a", 1],
1311
+ ["b", null],
1312
+ ]),
1313
+ "c",
1314
+ (map) => map.size,
1315
+ ); // 2
1316
+ ```
1317
+
1318
+ ```ts [data-last]
1319
+ import { Map } from "@monstermann/map";
1320
+
1321
+ pipe(
1322
+ new Map([
1323
+ ["a", 1],
1324
+ ["b", null],
1325
+ ]),
1326
+ Map.getOrElse("a", () => 0),
1327
+ ); // 1
1328
+
1329
+ pipe(
1330
+ new Map([
1331
+ ["a", 1],
1332
+ ["b", null],
1333
+ ]),
1334
+ Map.getOrElse("b", () => 0),
1335
+ ); // 0
1336
+
1337
+ pipe(
1338
+ new Map([
1339
+ ["a", 1],
1340
+ ["b", null],
1341
+ ]),
1342
+ Map.getOrElse("c", (map) => map.size),
1343
+ ); // 2
1344
+ ```
1345
+
1346
+ ### getOrThrow
1347
+
1348
+ ```ts
1349
+ function Map.getOrThrow<K, V>(
1350
+ target: ReadonlyMap<K, V>,
1351
+ key: NoInfer<K>,
1352
+ ): Exclude<V, null | undefined>
1353
+ ```
1354
+
1355
+ Gets the value associated with the specified key, or throws an error if the value is `null` or `undefined`.
1356
+
1357
+ #### Example
1358
+
1359
+ ```ts [data-first]
1360
+ import { Map } from "@monstermann/map";
1361
+
1362
+ Map.getOrThrow(
1363
+ new Map([
1364
+ ["a", 1],
1365
+ ["b", 2],
1366
+ ]),
1367
+ "a",
1368
+ ); // 1
1369
+
1370
+ Map.getOrThrow(
1371
+ new Map([
1372
+ ["a", 1],
1373
+ ["b", null],
1374
+ ]),
1375
+ "b",
1376
+ ); // throws FnError
1377
+
1378
+ Map.getOrThrow(
1379
+ new Map([
1380
+ ["a", 1],
1381
+ ["b", 2],
1382
+ ]),
1383
+ "c",
1384
+ ); // throws FnError
1385
+ ```
1386
+
1387
+ ```ts [data-last]
1388
+ import { Map } from "@monstermann/map";
1389
+
1390
+ pipe(
1391
+ new Map([
1392
+ ["a", 1],
1393
+ ["b", 2],
1394
+ ]),
1395
+ Map.getOrThrow("a"),
1396
+ ); // 1
1397
+
1398
+ pipe(
1399
+ new Map([
1400
+ ["a", 1],
1401
+ ["b", null],
1402
+ ]),
1403
+ Map.getOrThrow("b"),
1404
+ ); // throws FnError
1405
+
1406
+ pipe(
1407
+ new Map([
1408
+ ["a", 1],
1409
+ ["b", 2],
1410
+ ]),
1411
+ Map.getOrThrow("c"),
1412
+ ); // throws FnError
1413
+ ```
1414
+
1415
+ ### has
1416
+
1417
+ ```ts
1418
+ function Map.has<K, V>(
1419
+ target: ReadonlyMap<K, V>,
1420
+ key: NoInfer<K>,
1421
+ ): boolean
1422
+ ```
1423
+
1424
+ Checks whether the map contains the specified key.
1425
+
1426
+ #### Example
1427
+
1428
+ ```ts [data-first]
1429
+ import { Map } from "@monstermann/map";
1430
+
1431
+ Map.has(
1432
+ new Map([
1433
+ ["a", 1],
1434
+ ["b", 2],
1435
+ ]),
1436
+ "a",
1437
+ ); // true
1438
+
1439
+ Map.has(
1440
+ new Map([
1441
+ ["a", 1],
1442
+ ["b", 2],
1443
+ ]),
1444
+ "c",
1445
+ ); // false
1446
+ ```
1447
+
1448
+ ```ts [data-last]
1449
+ import { Map } from "@monstermann/map";
1450
+
1451
+ pipe(
1452
+ new Map([
1453
+ ["a", 1],
1454
+ ["b", 2],
1455
+ ]),
1456
+ Map.has("a"),
1457
+ ); // true
1458
+
1459
+ pipe(
1460
+ new Map([
1461
+ ["a", 1],
1462
+ ["b", 2],
1463
+ ]),
1464
+ Map.has("c"),
1465
+ ); // false
1466
+ ```
1467
+
1468
+ ### hasAll
1469
+
1470
+ ```ts
1471
+ function Map.hasAll<K, V>(
1472
+ target: ReadonlyMap<K, V>,
1473
+ keys: Iterable<NoInfer<K>>,
1474
+ ): boolean
1475
+ ```
1476
+
1477
+ Checks whether the map contains all of the specified keys.
1478
+
1479
+ #### Example
1480
+
1481
+ ```ts [data-first]
1482
+ import { Map } from "@monstermann/map";
1483
+
1484
+ Map.hasAll(
1485
+ new Map([
1486
+ ["a", 1],
1487
+ ["b", 2],
1488
+ ["c", 3],
1489
+ ]),
1490
+ ["a", "b"],
1491
+ ); // true
1492
+
1493
+ Map.hasAll(
1494
+ new Map([
1495
+ ["a", 1],
1496
+ ["b", 2],
1497
+ ["c", 3],
1498
+ ]),
1499
+ ["a", "d"],
1500
+ ); // false
1501
+ ```
1502
+
1503
+ ```ts [data-last]
1504
+ import { Map } from "@monstermann/map";
1505
+
1506
+ pipe(
1507
+ new Map([
1508
+ ["a", 1],
1509
+ ["b", 2],
1510
+ ["c", 3],
1511
+ ]),
1512
+ Map.hasAll(["a", "b"]),
1513
+ ); // true
1514
+
1515
+ pipe(
1516
+ new Map([
1517
+ ["a", 1],
1518
+ ["b", 2],
1519
+ ["c", 3],
1520
+ ]),
1521
+ Map.hasAll(["a", "d"]),
1522
+ ); // false
1523
+ ```
1524
+
1525
+ ### hasAny
1526
+
1527
+ ```ts
1528
+ function Map.hasAny<K, V>(
1529
+ target: ReadonlyMap<K, V>,
1530
+ keys: Iterable<NoInfer<K>>,
1531
+ ): boolean
1532
+ ```
1533
+
1534
+ Checks whether the map contains any of the specified keys.
1535
+
1536
+ #### Example
1537
+
1538
+ ```ts [data-first]
1539
+ import { Map } from "@monstermann/map";
1540
+
1541
+ Map.hasAny(
1542
+ new Map([
1543
+ ["a", 1],
1544
+ ["b", 2],
1545
+ ]),
1546
+ ["a", "c"],
1547
+ ); // true
1548
+
1549
+ Map.hasAny(
1550
+ new Map([
1551
+ ["a", 1],
1552
+ ["b", 2],
1553
+ ]),
1554
+ ["c", "d"],
1555
+ ); // false
1556
+ ```
1557
+
1558
+ ```ts [data-last]
1559
+ import { Map } from "@monstermann/map";
1560
+
1561
+ pipe(
1562
+ new Map([
1563
+ ["a", 1],
1564
+ ["b", 2],
1565
+ ]),
1566
+ Map.hasAny(["a", "c"]),
1567
+ ); // true
1568
+
1569
+ pipe(
1570
+ new Map([
1571
+ ["a", 1],
1572
+ ["b", 2],
1573
+ ]),
1574
+ Map.hasAny(["c", "d"]),
1575
+ ); // false
1576
+ ```
1577
+
1578
+ ### hasNone
1579
+
1580
+ ```ts
1581
+ function Map.hasNone<K, V>(
1582
+ target: ReadonlyMap<K, V>,
1583
+ keys: Iterable<NoInfer<K>>,
1584
+ ): boolean
1585
+ ```
1586
+
1587
+ Checks whether the map contains none of the specified keys.
1588
+
1589
+ #### Example
1590
+
1591
+ ```ts [data-first]
1592
+ import { Map } from "@monstermann/map";
1593
+
1594
+ Map.hasNone(
1595
+ new Map([
1596
+ ["a", 1],
1597
+ ["b", 2],
1598
+ ]),
1599
+ ["c", "d"],
1600
+ ); // true
1601
+
1602
+ Map.hasNone(
1603
+ new Map([
1604
+ ["a", 1],
1605
+ ["b", 2],
1606
+ ]),
1607
+ ["a", "c"],
1608
+ ); // false
1609
+ ```
1610
+
1611
+ ```ts [data-last]
1612
+ import { Map } from "@monstermann/map";
1613
+
1614
+ pipe(
1615
+ new Map([
1616
+ ["a", 1],
1617
+ ["b", 2],
1618
+ ]),
1619
+ Map.hasNone(["c", "d"]),
1620
+ ); // true
1621
+
1622
+ pipe(
1623
+ new Map([
1624
+ ["a", 1],
1625
+ ["b", 2],
1626
+ ]),
1627
+ Map.hasNone(["a", "c"]),
1628
+ ); // false
1629
+ ```
1630
+
1631
+ ### is
1632
+
1633
+ ```ts
1634
+ function Map.is(
1635
+ target: unknown,
1636
+ ): target is Map<unknown, unknown>
1637
+ ```
1638
+
1639
+ Type guard that checks whether a value is a Map instance.
1640
+
1641
+ #### Example
1642
+
1643
+ ```ts [data-first]
1644
+ import { Map } from "@monstermann/map";
1645
+
1646
+ Map.is(new Map()); // true
1647
+ Map.is({}); // false
1648
+ Map.is([]); // false
1649
+ ```
1650
+
1651
+ ```ts [data-last]
1652
+ import { Map } from "@monstermann/map";
1653
+
1654
+ pipe(new Map(), Map.is()); // true
1655
+ pipe({}, Map.is()); // false
1656
+ pipe([], Map.is()); // false
1657
+ ```
1658
+
1659
+ ### isEmpty
1660
+
1661
+ ```ts
1662
+ function Map.isEmpty<T, U>(target: ReadonlyMap<T, U>): boolean
1663
+ ```
1664
+
1665
+ Checks whether the map is empty (contains no entries).
1666
+
1667
+ #### Example
1668
+
1669
+ ```ts [data-first]
1670
+ import { Map } from "@monstermann/map";
1671
+
1672
+ Map.isEmpty(new Map()); // true
1673
+ Map.isEmpty(new Map([["a", 1]])); // false
1674
+ ```
1675
+
1676
+ ```ts [data-last]
1677
+ import { Map } from "@monstermann/map";
1678
+
1679
+ pipe(new Map(), Map.isEmpty()); // true
1680
+ pipe(new Map([["a", 1]]), Map.isEmpty()); // false
1681
+ ```
1682
+
1683
+ ### isShallowEqual
1684
+
1685
+ ```ts
1686
+ function Map.isShallowEqual<K, V>(
1687
+ target: ReadonlyMap<K, V>,
1688
+ source: ReadonlyMap<NoInfer<K>, NoInfer<V>>,
1689
+ ): boolean
1690
+ ```
1691
+
1692
+ Checks whether two maps are shallowly equal (same keys and values using strict equality).
1693
+
1694
+ #### Example
1695
+
1696
+ ```ts [data-first]
1697
+ import { Map } from "@monstermann/map";
1698
+
1699
+ Map.isShallowEqual(
1700
+ new Map([
1701
+ ["a", 1],
1702
+ ["b", 2],
1703
+ ]),
1704
+ new Map([
1705
+ ["a", 1],
1706
+ ["b", 2],
1707
+ ]),
1708
+ ); // true
1709
+
1710
+ Map.isShallowEqual(
1711
+ new Map([
1712
+ ["a", 1],
1713
+ ["b", 2],
1714
+ ]),
1715
+ new Map([
1716
+ ["a", 1],
1717
+ ["b", 3],
1718
+ ]),
1719
+ ); // false
1720
+ ```
1721
+
1722
+ ```ts [data-last]
1723
+ import { Map } from "@monstermann/map";
1724
+
1725
+ pipe(
1726
+ new Map([
1727
+ ["a", 1],
1728
+ ["b", 2],
1729
+ ]),
1730
+ Map.isShallowEqual(
1731
+ new Map([
1732
+ ["a", 1],
1733
+ ["b", 2],
1734
+ ]),
1735
+ ),
1736
+ ); // true
1737
+
1738
+ pipe(
1739
+ new Map([
1740
+ ["a", 1],
1741
+ ["b", 2],
1742
+ ]),
1743
+ Map.isShallowEqual(
1744
+ new Map([
1745
+ ["a", 1],
1746
+ ["b", 3],
1747
+ ]),
1748
+ ),
1749
+ ); // false
1750
+ ```
1751
+
1752
+ ### map
1753
+
1754
+ ```ts
1755
+ function Map.map<K, V>(
1756
+ target: ReadonlyMap<K, V>,
1757
+ key: NoInfer<K>,
1758
+ transform: (
1759
+ value: NoInfer<V>,
1760
+ key: NoInfer<K>,
1761
+ target: ReadonlyMap<K, V>,
1762
+ ) => V,
1763
+ ): ReadonlyMap<K, V>
1764
+ ```
1765
+
1766
+ Transforms the value at the specified key using the provided function. Returns the original map if the key doesn't exist.
1767
+
1768
+ #### Example
1769
+
1770
+ ```ts [data-first]
1771
+ import { Map } from "@monstermann/map";
1772
+
1773
+ Map.map(
1774
+ new Map([
1775
+ ["a", 1],
1776
+ ["b", 2],
1777
+ ]),
1778
+ "a",
1779
+ (value) => value * 2,
1780
+ ); // Map(2) { "a" => 2, "b" => 2 }
1781
+
1782
+ Map.map(
1783
+ new Map([
1784
+ ["a", 1],
1785
+ ["b", 2],
1786
+ ]),
1787
+ "c",
1788
+ (value) => value * 2,
1789
+ ); // Map(2) { "a" => 1, "b" => 2 }
1790
+ ```
1791
+
1792
+ ```ts [data-last]
1793
+ import { Map } from "@monstermann/map";
1794
+
1795
+ pipe(
1796
+ new Map([
1797
+ ["a", 1],
1798
+ ["b", 2],
1799
+ ]),
1800
+ Map.map("a", (value) => value * 2),
1801
+ ); // Map(2) { "a" => 2, "b" => 2 }
1802
+
1803
+ pipe(
1804
+ new Map([
1805
+ ["a", 1],
1806
+ ["b", 2],
1807
+ ]),
1808
+ Map.map("c", (value) => value * 2),
1809
+ ); // Map(2) { "a" => 1, "b" => 2 }
1810
+ ```
1811
+
1812
+ ### mapEach
1813
+
1814
+ ```ts
1815
+ function Map.mapEach<K, V, U>(
1816
+ target: ReadonlyMap<K, V>,
1817
+ fn: (
1818
+ value: NoInfer<V>,
1819
+ key: NoInfer<K>,
1820
+ target: ReadonlyMap<K, V>,
1821
+ ) => U,
1822
+ ): ReadonlyMap<K, U>
1823
+ ```
1824
+
1825
+ Transforms all values in the map using the provided function.
1826
+
1827
+ #### Example
1828
+
1829
+ ```ts [data-first]
1830
+ import { Map } from "@monstermann/map";
1831
+
1832
+ Map.mapEach(
1833
+ new Map([
1834
+ ["a", 1],
1835
+ ["b", 2],
1836
+ ]),
1837
+ (value, key) => value * 2,
1838
+ ); // Map(2) { "a" => 2, "b" => 4 }
1839
+ ```
1840
+
1841
+ ```ts [data-last]
1842
+ import { Map } from "@monstermann/map";
1843
+
1844
+ pipe(
1845
+ new Map([
1846
+ ["a", 1],
1847
+ ["b", 2],
1848
+ ]),
1849
+ Map.mapEach((value, key) => value * 2),
1850
+ ); // Map(2) { "a" => 2, "b" => 4 }
1851
+ ```
1852
+
1853
+ ### mapOr
1854
+
1855
+ ```ts
1856
+ function Map.mapOr<K, V, U>(
1857
+ target: ReadonlyMap<K, V>,
1858
+ key: NoInfer<K>,
1859
+ transform: (
1860
+ value: NoInfer<V>,
1861
+ key: NoInfer<K>,
1862
+ target: ReadonlyMap<K, V>,
1863
+ ) => V,
1864
+ or: U,
1865
+ ): ReadonlyMap<K, V> | U
1866
+ ```
1867
+
1868
+ Transforms the value at the specified key using the provided function, or returns the fallback value if the key doesn't exist.
1869
+
1870
+ #### Example
1871
+
1872
+ ```ts [data-first]
1873
+ import { Map } from "@monstermann/map";
1874
+
1875
+ Map.mapOr(
1876
+ new Map([
1877
+ ["a", 1],
1878
+ ["b", 2],
1879
+ ]),
1880
+ "a",
1881
+ (value) => value * 2,
1882
+ null,
1883
+ ); // Map(2) { "a" => 2, "b" => 2 }
1884
+
1885
+ Map.mapOr(
1886
+ new Map([
1887
+ ["a", 1],
1888
+ ["b", 2],
1889
+ ]),
1890
+ "c",
1891
+ (value) => value * 2,
1892
+ null,
1893
+ ); // null
1894
+ ```
1895
+
1896
+ ```ts [data-last]
1897
+ import { Map } from "@monstermann/map";
1898
+
1899
+ pipe(
1900
+ new Map([
1901
+ ["a", 1],
1902
+ ["b", 2],
1903
+ ]),
1904
+ Map.mapOr("a", (value) => value * 2, null),
1905
+ ); // Map(2) { "a" => 2, "b" => 2 }
1906
+
1907
+ pipe(
1908
+ new Map([
1909
+ ["a", 1],
1910
+ ["b", 2],
1911
+ ]),
1912
+ Map.mapOr("c", (value) => value * 2, null),
1913
+ ); // null
1914
+ ```
1915
+
1916
+ ### mapOrElse
1917
+
1918
+ ```ts
1919
+ function Map.mapOrElse<K, V, U>(
1920
+ target: ReadonlyMap<K, V>,
1921
+ key: NoInfer<K>,
1922
+ transform: (
1923
+ value: NoInfer<V>,
1924
+ key: NoInfer<K>,
1925
+ target: ReadonlyMap<K, V>,
1926
+ ) => V,
1927
+ orElse: (target: ReadonlyMap<K, V>) => U,
1928
+ ): ReadonlyMap<K, V> | U
1929
+ ```
1930
+
1931
+ Transforms the value at the specified key using the provided function, or calls the fallback function if the key doesn't exist.
1932
+
1933
+ #### Example
1934
+
1935
+ ```ts [data-first]
1936
+ import { Map } from "@monstermann/map";
1937
+
1938
+ Map.mapOrElse(
1939
+ new Map([
1940
+ ["a", 1],
1941
+ ["b", 2],
1942
+ ]),
1943
+ "a",
1944
+ (value) => value * 2,
1945
+ () => null,
1946
+ ); // Map(2) { "a" => 2, "b" => 2 }
1947
+
1948
+ Map.mapOrElse(
1949
+ new Map([
1950
+ ["a", 1],
1951
+ ["b", 2],
1952
+ ]),
1953
+ "c",
1954
+ (value) => value * 2,
1955
+ (map) => map.size,
1956
+ ); // 2
1957
+ ```
1958
+
1959
+ ```ts [data-last]
1960
+ import { Map } from "@monstermann/map";
1961
+
1962
+ pipe(
1963
+ new Map([
1964
+ ["a", 1],
1965
+ ["b", 2],
1966
+ ]),
1967
+ Map.mapOrElse(
1968
+ "a",
1969
+ (value) => value * 2,
1970
+ () => null,
1971
+ ),
1972
+ ); // Map(2) { "a" => 2, "b" => 2 }
1973
+
1974
+ pipe(
1975
+ new Map([
1976
+ ["a", 1],
1977
+ ["b", 2],
1978
+ ]),
1979
+ Map.mapOrElse(
1980
+ "c",
1981
+ (value) => value * 2,
1982
+ (map) => map.size,
1983
+ ),
1984
+ ); // 2
1985
+ ```
1986
+
1987
+ ### mapOrThrow
1988
+
1989
+ ```ts
1990
+ function Map.mapOrThrow<K, V>(
1991
+ target: ReadonlyMap<K, V>,
1992
+ key: NoInfer<K>,
1993
+ transform: (
1994
+ value: NoInfer<V>,
1995
+ key: NoInfer<K>,
1996
+ target: ReadonlyMap<K, V>,
1997
+ ) => V,
1998
+ ): ReadonlyMap<K, V>
1999
+ ```
2000
+
2001
+ Transforms the value at the specified key using the provided function, or throws an error if the key doesn't exist.
2002
+
2003
+ #### Example
2004
+
2005
+ ```ts [data-first]
2006
+ import { Map } from "@monstermann/map";
2007
+
2008
+ Map.mapOrThrow(
2009
+ new Map([
2010
+ ["a", 1],
2011
+ ["b", 2],
2012
+ ]),
2013
+ "a",
2014
+ (value) => value * 2,
2015
+ ); // Map(2) { "a" => 2, "b" => 2 }
2016
+
2017
+ Map.mapOrThrow(
2018
+ new Map([
2019
+ ["a", 1],
2020
+ ["b", 2],
2021
+ ]),
2022
+ "c",
2023
+ (value) => value * 2,
2024
+ ); // throws FnError
2025
+ ```
2026
+
2027
+ ```ts [data-last]
2028
+ import { Map } from "@monstermann/map";
2029
+
2030
+ pipe(
2031
+ new Map([
2032
+ ["a", 1],
2033
+ ["b", 2],
2034
+ ]),
2035
+ Map.mapOrThrow("a", (value) => value * 2),
2036
+ ); // Map(2) { "a" => 2, "b" => 2 }
2037
+
2038
+ pipe(
2039
+ new Map([
2040
+ ["a", 1],
2041
+ ["b", 2],
2042
+ ]),
2043
+ Map.mapOrThrow("c", (value) => value * 2),
2044
+ ); // throws FnError
2045
+ ```
2046
+
2047
+ ### none
2048
+
2049
+ ```ts
2050
+ function Map.none<K, V>(
2051
+ target: ReadonlyMap<K, V>,
2052
+ predicate: (
2053
+ value: NoInfer<V>,
2054
+ key: NoInfer<K>,
2055
+ target: ReadonlyMap<K, V>,
2056
+ ) => boolean,
2057
+ ): boolean
2058
+ ```
2059
+
2060
+ Returns `true` if no entries in the map satisfy the provided `predicate` function, otherwise returns `false`.
2061
+
2062
+ #### Example
2063
+
2064
+ ```ts [data-first]
2065
+ import { Map } from "@monstermann/map";
2066
+
2067
+ Map.none(
2068
+ new Map([
2069
+ ["a", 1],
2070
+ ["b", 2],
2071
+ ["c", 3],
2072
+ ]),
2073
+ (value) => value > 10,
2074
+ ); // true
2075
+ ```
2076
+
2077
+ ```ts [data-last]
2078
+ import { Map } from "@monstermann/map";
2079
+
2080
+ pipe(
2081
+ new Map([
2082
+ ["a", 1],
2083
+ ["b", 2],
2084
+ ["c", 3],
2085
+ ]),
2086
+ Map.none((value) => value > 10),
2087
+ ); // true
2088
+ ```
2089
+
2090
+ ### reject
2091
+
2092
+ ```ts
2093
+ function Map.reject<K, V>(
2094
+ target: ReadonlyMap<K, V>,
2095
+ by: (
2096
+ value: NoInfer<V>,
2097
+ key: NoInfer<K>,
2098
+ target: ReadonlyMap<K, V>,
2099
+ ) => boolean,
2100
+ ): ReadonlyMap<K, V>
2101
+ ```
2102
+
2103
+ Returns a new map excluding entries that satisfy the predicate function.
2104
+
2105
+ #### Example
2106
+
2107
+ ```ts [data-first]
2108
+ import { Map } from "@monstermann/map";
2109
+
2110
+ Map.reject(
2111
+ new Map([
2112
+ ["a", 1],
2113
+ ["b", 2],
2114
+ ["c", 3],
2115
+ ]),
2116
+ (value) => value > 1,
2117
+ ); // Map(1) { "a" => 1 }
2118
+ ```
2119
+
2120
+ ```ts [data-last]
2121
+ import { Map } from "@monstermann/map";
2122
+
2123
+ pipe(
2124
+ new Map([
2125
+ ["a", 1],
2126
+ ["b", 2],
2127
+ ["c", 3],
2128
+ ]),
2129
+ Map.reject((value) => value > 1),
2130
+ ); // Map(1) { "a" => 1 }
2131
+ ```
2132
+
2133
+ ### remove
2134
+
2135
+ ```ts
2136
+ function Map.remove<K, V>(
2137
+ target: ReadonlyMap<K, V>,
2138
+ key: NoInfer<K>,
2139
+ ): ReadonlyMap<K, V>
2140
+ ```
2141
+
2142
+ Removes the specified key from the map. Returns the original map if the key doesn't exist.
2143
+
2144
+ #### Example
2145
+
2146
+ ```ts [data-first]
2147
+ import { Map } from "@monstermann/map";
2148
+
2149
+ Map.remove(
2150
+ new Map([
2151
+ ["a", 1],
2152
+ ["b", 2],
2153
+ ]),
2154
+ "a",
2155
+ ); // Map(1) { "b" => 2 }
2156
+
2157
+ Map.remove(
2158
+ new Map([
2159
+ ["a", 1],
2160
+ ["b", 2],
2161
+ ]),
2162
+ "c",
2163
+ ); // Map(2) { "a" => 1, "b" => 2 }
2164
+ ```
2165
+
2166
+ ```ts [data-last]
2167
+ import { Map } from "@monstermann/map";
2168
+
2169
+ pipe(
2170
+ new Map([
2171
+ ["a", 1],
2172
+ ["b", 2],
2173
+ ]),
2174
+ Map.remove("a"),
2175
+ ); // Map(1) { "b" => 2 }
2176
+
2177
+ pipe(
2178
+ new Map([
2179
+ ["a", 1],
2180
+ ["b", 2],
2181
+ ]),
2182
+ Map.remove("c"),
2183
+ ); // Map(2) { "a" => 1, "b" => 2 }
2184
+ ```
2185
+
2186
+ ### removeAll
2187
+
2188
+ ```ts
2189
+ function Map.removeAll<K, V>(
2190
+ target: ReadonlyMap<K, V>,
2191
+ keys: Iterable<NoInfer<K>>,
2192
+ ): ReadonlyMap<K, V>
2193
+ ```
2194
+
2195
+ Removes all specified keys from the map.
2196
+
2197
+ #### Example
2198
+
2199
+ ```ts [data-first]
2200
+ import { Map } from "@monstermann/map";
2201
+
2202
+ Map.removeAll(
2203
+ new Map([
2204
+ ["a", 1],
2205
+ ["b", 2],
2206
+ ["c", 3],
2207
+ ]),
2208
+ ["a", "c"],
2209
+ ); // Map(1) { "b" => 2 }
2210
+
2211
+ Map.removeAll(
2212
+ new Map([
2213
+ ["a", 1],
2214
+ ["b", 2],
2215
+ ["c", 3],
2216
+ ]),
2217
+ ["d", "e"],
2218
+ ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
2219
+ ```
2220
+
2221
+ ```ts [data-last]
2222
+ import { Map } from "@monstermann/map";
2223
+
2224
+ pipe(
2225
+ new Map([
2226
+ ["a", 1],
2227
+ ["b", 2],
2228
+ ["c", 3],
2229
+ ]),
2230
+ Map.removeAll(["a", "c"]),
2231
+ ); // Map(1) { "b" => 2 }
2232
+
2233
+ pipe(
2234
+ new Map([
2235
+ ["a", 1],
2236
+ ["b", 2],
2237
+ ["c", 3],
2238
+ ]),
2239
+ Map.removeAll(["d", "e"]),
2240
+ ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
2241
+ ```
2242
+
2243
+ ### removeOr
2244
+
2245
+ ```ts
2246
+ function Map.removeOr<K, V, U>(
2247
+ target: ReadonlyMap<K, V>,
2248
+ key: NoInfer<K>,
2249
+ or: U,
2250
+ ): Map<K, V> | U
2251
+ ```
2252
+
2253
+ Removes the specified key from the map, or returns the fallback value if the key doesn't exist.
2254
+
2255
+ #### Example
2256
+
2257
+ ```ts [data-first]
2258
+ import { Map } from "@monstermann/map";
2259
+
2260
+ Map.removeOr(
2261
+ new Map([
2262
+ ["a", 1],
2263
+ ["b", 2],
2264
+ ]),
2265
+ "a",
2266
+ null,
2267
+ ); // Map(1) { "b" => 2 }
2268
+
2269
+ Map.removeOr(
2270
+ new Map([
2271
+ ["a", 1],
2272
+ ["b", 2],
2273
+ ]),
2274
+ "c",
2275
+ null,
2276
+ ); // null
2277
+ ```
2278
+
2279
+ ```ts [data-last]
2280
+ import { Map } from "@monstermann/map";
2281
+
2282
+ pipe(
2283
+ new Map([
2284
+ ["a", 1],
2285
+ ["b", 2],
2286
+ ]),
2287
+ Map.removeOr("a", null),
2288
+ ); // Map(1) { "b" => 2 }
2289
+
2290
+ pipe(
2291
+ new Map([
2292
+ ["a", 1],
2293
+ ["b", 2],
2294
+ ]),
2295
+ Map.removeOr("c", null),
2296
+ ); // null
2297
+ ```
2298
+
2299
+ ### removeOrElse
2300
+
2301
+ ```ts
2302
+ function Map.removeOrElse<K, V, U>(
2303
+ target: ReadonlyMap<K, V>,
2304
+ key: NoInfer<K>,
2305
+ orElse: (target: ReadonlyMap<K, V>) => U,
2306
+ ): Map<K, V> | U
2307
+ ```
2308
+
2309
+ Removes the specified key from the map, or calls the fallback function if the key doesn't exist.
2310
+
2311
+ #### Example
2312
+
2313
+ ```ts [data-first]
2314
+ import { Map } from "@monstermann/map";
2315
+
2316
+ Map.removeOrElse(
2317
+ new Map([
2318
+ ["a", 1],
2319
+ ["b", 2],
2320
+ ]),
2321
+ "a",
2322
+ () => null,
2323
+ ); // Map(1) { "b" => 2 }
2324
+
2325
+ Map.removeOrElse(
2326
+ new Map([
2327
+ ["a", 1],
2328
+ ["b", 2],
2329
+ ]),
2330
+ "c",
2331
+ (map) => map.size,
2332
+ ); // 2
2333
+ ```
2334
+
2335
+ ```ts [data-last]
2336
+ import { Map } from "@monstermann/map";
2337
+
2338
+ pipe(
2339
+ new Map([
2340
+ ["a", 1],
2341
+ ["b", 2],
2342
+ ]),
2343
+ Map.removeOrElse("a", () => null),
2344
+ ); // Map(1) { "b" => 2 }
2345
+
2346
+ pipe(
2347
+ new Map([
2348
+ ["a", 1],
2349
+ ["b", 2],
2350
+ ]),
2351
+ Map.removeOrElse("c", (map) => map.size),
2352
+ ); // 2
2353
+ ```
2354
+
2355
+ ### removeOrThrow
2356
+
2357
+ ```ts
2358
+ function Map.removeOrThrow<K, V>(
2359
+ target: ReadonlyMap<K, V>,
2360
+ key: NoInfer<K>,
2361
+ ): Map<K, V>
2362
+ ```
2363
+
2364
+ Removes the specified key from the map, or throws an error if the key doesn't exist.
2365
+
2366
+ #### Example
2367
+
2368
+ ```ts [data-first]
2369
+ import { Map } from "@monstermann/map";
2370
+
2371
+ Map.removeOrThrow(
2372
+ new Map([
2373
+ ["a", 1],
2374
+ ["b", 2],
2375
+ ]),
2376
+ "a",
2377
+ ); // Map(1) { "b" => 2 }
2378
+
2379
+ Map.removeOrThrow(
2380
+ new Map([
2381
+ ["a", 1],
2382
+ ["b", 2],
2383
+ ]),
2384
+ "c",
2385
+ ); // throws FnError
2386
+ ```
2387
+
2388
+ ```ts [data-last]
2389
+ import { Map } from "@monstermann/map";
2390
+
2391
+ pipe(
2392
+ new Map([
2393
+ ["a", 1],
2394
+ ["b", 2],
2395
+ ]),
2396
+ Map.removeOrThrow("a"),
2397
+ ); // Map(1) { "b" => 2 }
2398
+
2399
+ pipe(
2400
+ new Map([
2401
+ ["a", 1],
2402
+ ["b", 2],
2403
+ ]),
2404
+ Map.removeOrThrow("c"),
2405
+ ); // throws FnError
2406
+ ```
2407
+
2408
+ ### set
2409
+
2410
+ ```ts
2411
+ function Map.set<K, V>(
2412
+ target: ReadonlyMap<K, V>,
2413
+ key: NoInfer<K>,
2414
+ value: NoInfer<V>,
2415
+ ): ReadonlyMap<K, V>
2416
+ ```
2417
+
2418
+ Sets or updates the value for the specified key in the map.
2419
+
2420
+ #### Example
2421
+
2422
+ ```ts [data-first]
2423
+ import { Map } from "@monstermann/map";
2424
+
2425
+ Map.set(
2426
+ new Map([
2427
+ ["a", 1],
2428
+ ["b", 2],
2429
+ ]),
2430
+ "a",
2431
+ 10,
2432
+ ); // Map(2) { "a" => 10, "b" => 2 }
2433
+
2434
+ Map.set(
2435
+ new Map([
2436
+ ["a", 1],
2437
+ ["b", 2],
2438
+ ]),
2439
+ "c",
2440
+ 3,
2441
+ ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
2442
+ ```
2443
+
2444
+ ```ts [data-last]
2445
+ import { Map } from "@monstermann/map";
2446
+
2447
+ pipe(
2448
+ new Map([
2449
+ ["a", 1],
2450
+ ["b", 2],
2451
+ ]),
2452
+ Map.set("a", 10),
2453
+ ); // Map(2) { "a" => 10, "b" => 2 }
2454
+
2455
+ pipe(
2456
+ new Map([
2457
+ ["a", 1],
2458
+ ["b", 2],
2459
+ ]),
2460
+ Map.set("c", 3),
2461
+ ); // Map(3) { "a" => 1, "b" => 2, "c" => 3 }
2462
+ ```
2463
+
2464
+ ### some
2465
+
2466
+ ```ts
2467
+ function Map.some<K, V>(
2468
+ target: ReadonlyMap<K, V>,
2469
+ predicate: (
2470
+ value: NoInfer<V>,
2471
+ key: NoInfer<K>,
2472
+ target: ReadonlyMap<K, V>,
2473
+ ) => boolean,
2474
+ ): boolean
2475
+ ```
2476
+
2477
+ Returns `true` if at least one entry in the map satisfies the provided `predicate` function, otherwise returns `false`.
2478
+
2479
+ #### Example
2480
+
2481
+ ```ts [data-first]
2482
+ import { Map } from "@monstermann/map";
2483
+
2484
+ Map.some(
2485
+ new Map([
2486
+ ["a", 1],
2487
+ ["b", 2],
2488
+ ["c", 3],
2489
+ ]),
2490
+ (value) => value > 2,
2491
+ ); // true
2492
+ ```
2493
+
2494
+ ```ts [data-last]
2495
+ import { Map } from "@monstermann/map";
2496
+
2497
+ pipe(
2498
+ new Map([
2499
+ ["a", 1],
2500
+ ["b", 2],
2501
+ ["c", 3],
2502
+ ]),
2503
+ Map.some((value) => value > 2),
2504
+ ); // true
2505
+ ```