type Reviver = (key: string, value: any) => any;

export function deserialize<type>(value: string, reviver?: Reviver): type {
    return JSON.parse(value, (key, value_) => {
        let value = value_;
        if (value?.__type === "bigint") value = BigInt(value.value);
        if (value?.__type === "Map") value = new Map(value.value);
        return reviver?.(key, value) ?? value;
    });
}
