val 0.7.0

An arbitrary precision calculator language
Documentation
import { useEffect, useState } from 'react';
import init from 'val-wasm';

type State =
  | { status: 'loading' }
  | { status: 'ready' }
  | { status: 'error'; error: string };

interface UseValWasm {
  error: string | undefined;
  loaded: boolean;
  loading: boolean;
}

export function useValWasm(): UseValWasm {
  const [state, setState] = useState<State>({ status: 'loading' });

  useEffect(() => {
    let cancelled = false;

    const initialize = async () => {
      try {
        await init();

        if (!cancelled) {
          setState({ status: 'ready' });
        }
      } catch (err) {
        if (!cancelled) {
          setState({
            status: 'error',
            error: `Failed to initialize val: ${
              err instanceof Error ? err.message : String(err)
            }`,
          });
        }
      }
    };

    initialize();

    return () => {
      cancelled = true;
    };
  }, []);

  return {
    error: state.status === 'error' ? state.error : undefined,
    loaded: state.status === 'ready',
    loading: state.status === 'loading',
  };
}