mirror of
https://github.com/Noratrieb/riverdelta.git
synced 2026-01-14 16:35:03 +01:00
41 lines
905 B
TypeScript
41 lines
905 B
TypeScript
export function encodeUtf8(s: string): Uint8Array {
|
|
return new TextEncoder().encode(s);
|
|
}
|
|
|
|
export class Ids {
|
|
private nextId = 0;
|
|
|
|
public next(): number {
|
|
return this.nextId++;
|
|
}
|
|
}
|
|
|
|
export function unwrap<T>(value: T | undefined): T {
|
|
if (value === undefined) {
|
|
throw new Error("tried to unwrap undefined value");
|
|
}
|
|
return value;
|
|
}
|
|
|
|
/**
|
|
* A `Map` that can have arbitrarily complex keys.
|
|
* It uses JSON+string equality instead of refernece equality.
|
|
*/
|
|
export class ComplexMap<K, V> {
|
|
inner = new Map<string | number, V>();
|
|
|
|
public get(key: K): V | undefined {
|
|
return this.inner.get(this.mangleKey(key));
|
|
}
|
|
|
|
public set(key: K, value: V): void {
|
|
this.inner.set(this.mangleKey(key), value);
|
|
}
|
|
|
|
private mangleKey(key: K): string | number {
|
|
if (typeof key === "string" || typeof key === "number") {
|
|
return key;
|
|
}
|
|
return JSON.stringify(key);
|
|
}
|
|
}
|