val 0.4.0

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

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

export function useValWasm(): UseValWasm {
  const [error, setError] = useState<string | undefined>(undefined);
  const [loaded, setLoaded] = useState<boolean>(false);
  const [loading, setLoading] = useState<boolean>(true);

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

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

        if (!cancelled) {
          setLoaded(true);
        }
      } catch (err) {
        if (!cancelled) {
          setError(
            `Failed to initialize val: ${
              err instanceof Error ? err.message : String(err)
            }`
          );
        }
      } finally {
        if (!cancelled) {
          setLoading(false);
        }
      }
    };

    initialize();

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

  return { error, loaded, loading };
}