Test/node_modules/multimath/lib/wa_detect.js
2026-04-09 22:54:00 +07:00

37 lines
1.1 KiB
JavaScript

// Detect WebAssembly support.
// - Check global WebAssembly object
// - Try to load simple module (can be disabled via CSP)
//
'use strict';
var wa;
module.exports = function hasWebAssembly() {
// use cache if called before;
if (typeof wa !== 'undefined') return wa;
wa = false;
if (typeof WebAssembly === 'undefined') return wa;
// If WebAssenbly is disabled, code can throw on compile
try {
// https://github.com/brion/min-wasm-fail/blob/master/min-wasm-fail.in.js
// Additional check that WA internals are correct
/* eslint-disable comma-spacing, max-len */
var bin = new Uint8Array([ 0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11 ]);
var module = new WebAssembly.Module(bin);
var instance = new WebAssembly.Instance(module, {});
// test storing to and loading from a non-zero location via a parameter.
// Safari on iOS 11.2.5 returns 0 unexpectedly at non-zero locations
if (instance.exports.test(4) !== 0) wa = true;
return wa;
} catch (__) {}
return wa;
};