thi-ng/umbrella

View on GitHub
packages/errors/src/assert.ts

Summary

Maintainability
A
35 mins
Test Coverage
import { defError } from "./deferror.js";

export const AssertionError = defError<any>(() => "Assertion failed");

/**
 * Takes a `test` result or predicate function without args and throws error
 * with given `msg` if test failed (i.e. is falsy).
 *
 * @remarks
 * The function is only enabled if `process.env.NODE_ENV != "production"` or if
 * the `UMBRELLA_ASSERTS` or `VITE_UMBRELLA_ASSERTS` env var is set to 1.
 */
export const assert = (
    typeof process !== "undefined" && process.env !== undefined
        ? process.env.NODE_ENV !== "production" ||
          !!process.env.UMBRELLA_ASSERTS
        : (<any>import.meta).env
        ? (<any>import.meta).env.MODE !== "production" ||
          !!(<any>import.meta).env.UMBRELLA_ASSERTS ||
          !!(<any>import.meta).env.VITE_UMBRELLA_ASSERTS
        : true
)
    ? (test: boolean | (() => boolean), msg?: string | (() => string)) => {
            if ((typeof test === "function" && !test()) || !test) {
                throw new AssertionError(
                    typeof msg === "function" ? msg() : msg
                );
            }
      }
    : () => {};