import { writable } from "svelte/store"; export interface Err { type: Failure; txHash?: string; message?: string; } export enum Failure { TransactionFailed = 1, NotAuthenticated = 2, InsufficientBalance = 3, } export const error = writable(null); export class Unreachable extends Error { constructor(value?: never) { if (value) { super('unreachable value reached: ' + value); } else { super('unreachable code reached'); } } } class AssertionError extends Error { constructor(message?: string) { if (message) { super(`assertion failed: ${message}`); } else { super(`assertion failed`); } } } export function assert(value: unknown, message?: string): asserts value { if (! value) { throw new AssertionError(message); } } export function assertEq(actual: unknown, expected: unknown, message?: string): void { if (actual !== expected) { throw new AssertionError(`assertion failed: expected '${expected}', got '${actual}': ${message}`); } }