UNPKG

vek-engine

Version:

Efficient WebAssembly-based vector math engine for JavaScript/TypeScript

110 lines 12.6 kB
/** *********************************************************************** * Copyright 2022-present Jonathan Barronville * * * * This Source Code Form is subject to the terms of the Mozilla Public * * License, v. 2.0. If a copy of the MPL was not distributed with this * * file, You can obtain one at https://mozilla.org/MPL/2.0/. * *********************************************************************** */ const isEnvBrowser = (() => { return (typeof window !== 'undefined' && window !== null && typeof window.document !== 'undefined' && window.document !== null && typeof document !== 'undefined' && document === window.document); })(); const isEnvNode = (() => { return (typeof process !== 'undefined' && process !== null && typeof process.versions !== 'undefined' && process.versions !== null && typeof process.versions.node === 'string'); })(); const isEnvDebug = (() => { if (isEnvBrowser) { return window._vekDebugModeIsEnabled === true; } else if (isEnvNode) { return (process.env['NODE_ENV'] === 'development' || process.env['NODE_ENV'] === 'test'); } else { return false; } })(); const isEnvRelease = (() => !isEnvDebug)(); const _assertOk = await (async () => { let ok; if (isEnvRelease) { // eslint-disable-next-line @typescript-eslint/no-empty-function ok = () => { }; } else if (isEnvBrowser) { void ({ ok } = await import('assert')); } else if (isEnvNode) { void ({ ok } = await import('node:assert')); } else { throw new TypeError('Could not import the `assert` module'); } return ok; })(); function assertOk(value) { void _assertOk(value); } const loadWasmModule = async (imports) => { const env = (() => { if (isEnvDebug) { return 'debug'; } else if (isEnvRelease) { return 'release'; } else { return 'release'; } })(); const { instantiate: instantiateModule } = await (async () => { switch (env) { case 'debug': { return import('../dist-wasm/debug.js'); } case 'release': { return import('../dist-wasm/release.js'); } } })(); const wasmFileUrl = (() => { switch (env) { case 'debug': { return new URL('../dist-wasm/debug.wasm', import.meta.url); } case 'release': { return new URL('../dist-wasm/release.wasm', import.meta.url); } } })(); let module; if (isEnvBrowser) { const response = await fetch(wasmFileUrl); module = await WebAssembly.compileStreaming(response); } else if (isEnvNode) { const { readFile } = await import('node:fs/promises'); const buffer = await readFile(wasmFileUrl); module = await WebAssembly.compile(buffer); } else { throw new TypeError('Could not load the WebAssembly module'); } imports = { env: { ...imports?.env }, }; const exports = await instantiateModule(module, imports); return Object.freeze({ ...exports }); }; export { assertOk, isEnvBrowser, isEnvDebug, isEnvNode, isEnvRelease, loadWasmModule, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLm1qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsaXRpZXMubXRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBVUgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDekIsT0FBTyxDQUNMLE9BQU8sTUFBTSxLQUFLLFdBQVc7UUFDN0IsTUFBTSxLQUFLLElBQUk7UUFDZixPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssV0FBVztRQUN0QyxNQUFNLENBQUMsUUFBUSxLQUFLLElBQUk7UUFDeEIsT0FBTyxRQUFRLEtBQUssV0FBVztRQUMvQixRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FDN0IsQ0FBQTtBQUNILENBQUMsQ0FBQyxFQUFFLENBQUE7QUFFSixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUN0QixPQUFPLENBQ0wsT0FBTyxPQUFPLEtBQUssV0FBVztRQUM5QixPQUFPLEtBQUssSUFBSTtRQUNoQixPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssV0FBVztRQUN2QyxPQUFPLENBQUMsUUFBUSxLQUFLLElBQUk7UUFDekIsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQzFDLENBQUE7QUFDSCxDQUFDLENBQUMsRUFBRSxDQUFBO0FBRUosTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDdkIsSUFBSSxZQUFZLEVBQUU7UUFDaEIsT0FBTyxNQUFNLENBQUMsc0JBQXNCLEtBQUssSUFBSSxDQUFBO0tBQzlDO1NBQU0sSUFBSSxTQUFTLEVBQUU7UUFDcEIsT0FBTyxDQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssYUFBYTtZQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLE1BQU0sQ0FDbkMsQ0FBQTtLQUNGO1NBQU07UUFDTCxPQUFPLEtBQUssQ0FBQTtLQUNiO0FBQ0gsQ0FB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O1FBQ1IsR0FBRyxFQUFFLEVBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFDO0tBQ3ZCLENBQUE7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUV4RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUFDLENBQUE7QUFDcEMsQ0FBQyxDQUFBO0FBRUQsT0FBTyxFQUNMLFFBQVEsRUFDUixZQUFZLEVBQ1osVUFBVSxFQUNWLFNBQVMsRUFDVCxZQUFZLEVBQ1osY0FBYyxHQUNmLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogQ29weXJpZ2h0IDIwMjItcHJlc2VudCBKb25hdGhhbiBCYXJyb252aWxsZSAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAqIFRoaXMgU291cmNlIENvZGUgRm9ybSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTW96aWxsYSBQdWJsaWMgKlxuICogTGljZW5zZSwgdi4gMi4wLiBJZiBhIGNvcHkgb2YgdGhlIE1QTCB3YXMgbm90IGRpc3RyaWJ1dGVkIHdpdGggdGhpcyAqXG4gKiBmaWxlLCBZb3UgY2FuIG9idGFpbiBvbmUgYXQgaHR0cHM6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4gICAgICAgICAgICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICovXG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgX3Zla0RlYnVnTW9kZUlzRW5hYmxlZD86IGJvb2xlYW5cbiAgfVxufVxuXG50eXBlIExvYWRXYXNtTW9kdWxlSW1wb3J0c1QgPSB7ZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn1cblxuY29uc3QgaXNFbnZCcm93c2VyID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHdpbmRvdyAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgd2luZG93LmRvY3VtZW50ICE9PSBudWxsICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIGRvY3VtZW50ID09PSB3aW5kb3cuZG9jdW1lbnRcbiAgKVxufSkoKVxuXG5jb25zdCBpc0Vudk5vZGUgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHByb2Nlc3MgIT09IG51bGwgJiZcbiAgICB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBwcm9jZXNzLnZlcnNpb25zICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZSA9PT0gJ3N0cmluZydcbiAgKVxufSkoKVxuXG5jb25zdCBpc0VudkRlYnVnID0gKCgpID0+IHtcbiAgaWYgKGlzRW52QnJvd3Nlcikge1xuICAgIHJldHVybiB3aW5kb3cuX3Zla0RlYnVnTW9kZUlzRW5hYmxlZCA9PT0gdHJ1ZVxuICB9IGVsc2UgaWYgKGlzRW52Tm9kZSkge1xuICAgIHJldHVybiAoXG4gICAgICBwcm9jZXNzLmVudlsnTk9ERV9FTlYnXSA9PT0gJ2RldmVsb3BtZW50JyB8fFxuICAgICAgcHJvY2Vzcy5lbnZbJ05PREVfRU5WJ10gPT09ICd0ZXN0J1xuICAgIClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufSkoKVxuXG5jb25zdCBpc0VudlJlbGVhc2UgPSAoKCkgPT4gIWlzRW52RGVidWcpKClcblxuY29uc3QgX2Fzc2VydE9rID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgdHlwZSBPa1QgPSBBd2FpdGVkPHR5cGVvZiBpbXBvcnQoJ25vZGU6YXNzZXJ0Jyk+WydvayddXG5cbiAgbGV0IG9rOiBPa1QgfCB1bmRlZmluZWRcblxuICBpZiAoaXNFbnZSZWxlYXNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIG9rID0gKCkgPT4ge31cbiAgfSBlbHNlIGlmIChpc0VudkJyb3dzZXIpIHtcbiAgICB2b2lkICh7b2t9ID0gYXdhaXQgaW1wb3J0KCdhc3NlcnQnKSlcbiAgfSBlbHNlIGlmIChpc0Vudk5vZGUpIHtcbiAgICB2b2lkICh7b2t9ID0gYXdhaXQgaW1wb3J0KCdub2RlOmFzc2VydCcpKVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBpbXBvcnQgdGhlIGBhc3NlcnRgIG1vZHVsZScpXG4gIH1cblxuICByZXR1cm4gb2tcbn0pKClcblxuZnVuY3Rpb24gYXNzZXJ0T2sodmFsdWU6IHVua25vd24pOiBhc3NlcnRzIHZhbHVlIHtcbiAgdm9pZCBfYXNzZXJ0T2sodmFsdWUpXG59XG5cbmNvbnN0IGxvYWRXYXNtTW9kdWxlID0gYXN5bmMgKGltcG9ydHM/OiBMb2FkV2FzbU1vZHVsZUltcG9ydHNUKSA9PiB7XG4gIGNvbnN0IGVudiA9ICgoKSA9PiB7XG4gICAgaWYgKGlzRW52RGVidWcpIHtcbiAgICAgIHJldHVybiAnZGVidWcnIGFzIGNvbnN0XG4gICAgfSBlbHNlIGlmIChpc0VudlJlbGVhc2UpIHtcbiAgICAgIHJldHVybiAncmVsZWFzZScgYXMgY29uc3RcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdyZWxlYXNlJyBhcyBjb25zdFxuICAgIH1cbiAgfSkoKVxuXG4gIGNvbnN0IHtpbnN0YW50aWF0ZTogaW5zdGFudGlhdGVNb2R1bGV9ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICB0eXBlIFByb21pc2VkTW9kdWxlVCA9IFByb21pc2U8XG4gICAgICBBd2FpdGVkPHR5cGVvZiBpbXBvcnQoJy4uL2Rpc3Qtd2FzbS9kZWJ1Zy5qcycpPlxuICAgID5cblxuICAgIHN3aXRjaCAoZW52KSB7XG4gICAgICBjYXNlICdkZWJ1Zyc6IHtcbiAgICAgICAgcmV0dXJuIGltcG9ydCgnLi4vZGlzdC13YXNtL2RlYnVnLmpzJylcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsZWFzZSc6IHtcbiAgICAgICAgcmV0dXJuIGltcG9ydCgnLi4vZGlzdC13YXNtL3JlbGVhc2UuanMnKSBhcyB1bmtub3duIGFzIFByb21pc2VkTW9kdWxlVFxuICAgICAgfVxuICAgIH1cbiAgfSkoKVxuXG4gIGNvbnN0IHdhc21GaWxlVXJsID0gKCgpID0+IHtcbiAgICBzd2l0Y2ggKGVudikge1xuICAgICAgY2FzZSAnZGVidWcnOiB7XG4gICAgICAgIHJldHVybiBuZXcgVVJMKCcuLi9kaXN0LXdhc20vZGVidWcud2FzbScsIGltcG9ydC5tZXRhLnVybClcbiAgICAgIH1cblxuICAgICAgY2FzZSAncmVsZWFzZSc6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVUkwoJy4uL2Rpc3Qtd2FzbS9yZWxlYXNlLndhc20nLCBpbXBvcnQubWV0YS51cmwpXG4gICAgICB9XG4gICAgfVxuICB9KSgpXG5cbiAgbGV0IG1vZHVsZTogV2ViQXNzZW1ibHkuTW9kdWxlIHwgdW5kZWZpbmVkXG5cbiAgaWYgKGlzRW52QnJvd3Nlcikge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2god2FzbUZpbGVVcmwpXG5cbiAgICBtb2R1bGUgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlU3RyZWFtaW5nKHJlc3BvbnNlKVxuICB9IGVsc2UgaWYgKGlzRW52Tm9kZSkge1xuICAgIGNvbnN0IHtyZWFkRmlsZX0gPSBhd2FpdCBpbXBvcnQoJ25vZGU6ZnMvcHJvbWlzZXMnKVxuXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgcmVhZEZpbGUod2FzbUZpbGVVcmwpXG5cbiAgICBtb2R1bGUgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGJ1ZmZlcilcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb3VsZCBub3QgbG9hZCB0aGUgV2ViQXNzZW1ibHkgbW9kdWxlJylcbiAgfVxuXG4gIGltcG9ydHMgPSB7XG4gICAgZW52OiB7Li4uaW1wb3J0cz8uZW52fSxcbiAgfVxuXG4gIGNvbnN0IGV4cG9ydHMgPSBhd2FpdCBpbnN0YW50aWF0ZU1vZHVsZShtb2R1bGUsIGltcG9ydHMpXG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoey4uLmV4cG9ydHN9KVxufVxuXG5leHBvcnQge1xuICBhc3NlcnRPayxcbiAgaXNFbnZCcm93c2VyLFxuICBpc0VudkRlYnVnLFxuICBpc0Vudk5vZGUsXG4gIGlzRW52UmVsZWFzZSxcbiAgbG9hZFdhc21Nb2R1bGUsXG59XG4iXX0=