make async equality collections sync iterables
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import { Equater, MaybeAsyncEquater } from "./types.js";
|
||||
import { asAsyncGenerator } from "./utils.js";
|
||||
|
||||
export interface EqualityMap<K, V> extends Iterable<[K, V]> {
|
||||
readonly size: number;
|
||||
@@ -149,12 +148,12 @@ export function createEqualityMap<K, V>(keyComparer?: Equater<K>): EqualityMap<K
|
||||
return keyComparer ? new CustomEqualityMap<K, V>(keyComparer) : new NativeEqualityMap<K, V>();
|
||||
}
|
||||
|
||||
export interface AsyncEqualityMap<K, V> extends AsyncIterable<[K, V]> {
|
||||
export interface AsyncEqualityMap<K, V> extends Iterable<[K, V]> {
|
||||
get(key: K): Promise<V | undefined>;
|
||||
set(key: K, value: V): Promise<V | undefined>;
|
||||
contains(key: K): Promise<boolean>;
|
||||
remove(key: K): Promise<V | undefined>;
|
||||
clear(): Promise<void>;
|
||||
clear(): void;
|
||||
}
|
||||
|
||||
class NativeAsyncEqualityMap<K, V> implements AsyncEqualityMap<K, V> {
|
||||
@@ -180,12 +179,12 @@ class NativeAsyncEqualityMap<K, V> implements AsyncEqualityMap<K, V> {
|
||||
return existing;
|
||||
}
|
||||
|
||||
async clear() {
|
||||
clear() {
|
||||
this.#map.clear();
|
||||
}
|
||||
|
||||
[Symbol.asyncIterator]() {
|
||||
return asAsyncGenerator(this.#map[Symbol.iterator]());
|
||||
[Symbol.iterator]() {
|
||||
return this.#map[Symbol.iterator]();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -242,12 +241,14 @@ class CustomAsyncEqualityMap<K, V> implements AsyncEqualityMap<K, V> {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
async clear() {
|
||||
clear() {
|
||||
this.#list.length = 0;
|
||||
}
|
||||
|
||||
[Symbol.asyncIterator]() {
|
||||
return asAsyncGenerator(this.#list[Symbol.iterator]());
|
||||
*[Symbol.iterator]() {
|
||||
for (const entry of this.#list) {
|
||||
yield [entry[0], entry[1]] as [K, V]; // no entry mutation allowed!
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user