vek-engine
Version:
Efficient WebAssembly-based vector math engine for JavaScript/TypeScript
110 lines • 12.6 kB
JavaScript
/**
***********************************************************************
* 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=