/* A stupid thing I wrote so I could have the same assert function in the browser that I have in Node. This should just be standard in JavaScript. */ import { log } from "./logging.js"; /* This is the error that is thrown when an `assert()` fails. */ export class AssertionError extends Error { /* This is from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error which claims you have to do this weird stuff to make your error actually work. */ constructor(...params) { // Pass remaining arguments (including vendor specific ones) to parent constructor super(...params); // Maintains proper stack trace for where our error was thrown (only available on V8) if (Error.captureStackTrace) { // this "only on V8" is managed by the Error.captureStackTrace test above Error.captureStackTrace(this, AssertionError); } this.name = 'AssertionError'; // Custom debugging information this.date = new Date(); } } /* If `test` is false then it logs the message and raises the `AssertionError`. ___TODO___: Implement a way to "compile out" these assertions. + `test boolean` -- The code only does `if(!test)` so should work with most any falsy thing. + `message string` -- The message to log and then attach to the thrown `AssertionError`. + ___throws___ `AssertionError(message)` */ export const assert = (test, message) => { if(!test) { log.assert(test, message); throw new AssertionError(message); } } export default assert;