37 lines
1.1 KiB
JavaScript
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;
|
|
};
|