forked from external-repos/squoosh
Nightly is no longer necessary for wee_alloc, so we don't need to rely on unstable versions of Rust anymore. As a bonus, this reduces size of each Rust-related Docker image by >1 GB: - `squoosh-rotate`: 2.94GB -> 1.87GB - `squoosh-resize`: 3.09GB -> 2.02GB - `squoosh-hqx`: 3.13GB -> 2.06GB
92 lines
3.2 KiB
JavaScript
92 lines
3.2 KiB
JavaScript
(function() {
|
|
const __exports = {};
|
|
let wasm;
|
|
|
|
let cachegetUint32Memory = null;
|
|
function getUint32Memory() {
|
|
if (cachegetUint32Memory === null || cachegetUint32Memory.buffer !== wasm.memory.buffer) {
|
|
cachegetUint32Memory = new Uint32Array(wasm.memory.buffer);
|
|
}
|
|
return cachegetUint32Memory;
|
|
}
|
|
|
|
let WASM_VECTOR_LEN = 0;
|
|
|
|
function passArray32ToWasm(arg) {
|
|
const ptr = wasm.__wbindgen_malloc(arg.length * 4);
|
|
getUint32Memory().set(arg, ptr / 4);
|
|
WASM_VECTOR_LEN = arg.length;
|
|
return ptr;
|
|
}
|
|
|
|
let cachegetInt32Memory = null;
|
|
function getInt32Memory() {
|
|
if (cachegetInt32Memory === null || cachegetInt32Memory.buffer !== wasm.memory.buffer) {
|
|
cachegetInt32Memory = new Int32Array(wasm.memory.buffer);
|
|
}
|
|
return cachegetInt32Memory;
|
|
}
|
|
|
|
function getArrayU32FromWasm(ptr, len) {
|
|
return getUint32Memory().subarray(ptr / 4, ptr / 4 + len);
|
|
}
|
|
/**
|
|
* @param {Uint32Array} input_image
|
|
* @param {number} input_width
|
|
* @param {number} input_height
|
|
* @param {number} factor
|
|
* @returns {Uint32Array}
|
|
*/
|
|
__exports.resize = function(input_image, input_width, input_height, factor) {
|
|
const retptr = 8;
|
|
const ret = wasm.resize(retptr, passArray32ToWasm(input_image), WASM_VECTOR_LEN, input_width, input_height, factor);
|
|
const memi32 = getInt32Memory();
|
|
const v0 = getArrayU32FromWasm(memi32[retptr / 4 + 0], memi32[retptr / 4 + 1]).slice();
|
|
wasm.__wbindgen_free(memi32[retptr / 4 + 0], memi32[retptr / 4 + 1] * 4);
|
|
return v0;
|
|
};
|
|
|
|
function init(module) {
|
|
|
|
let result;
|
|
const imports = {};
|
|
|
|
if (module instanceof URL || typeof module === 'string' || module instanceof Request) {
|
|
|
|
const response = fetch(module);
|
|
if (typeof WebAssembly.instantiateStreaming === 'function') {
|
|
result = WebAssembly.instantiateStreaming(response, imports)
|
|
.catch(e => {
|
|
console.warn("`WebAssembly.instantiateStreaming` failed. Assuming this is because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
|
|
return response
|
|
.then(r => r.arrayBuffer())
|
|
.then(bytes => WebAssembly.instantiate(bytes, imports));
|
|
});
|
|
} else {
|
|
result = response
|
|
.then(r => r.arrayBuffer())
|
|
.then(bytes => WebAssembly.instantiate(bytes, imports));
|
|
}
|
|
} else {
|
|
|
|
result = WebAssembly.instantiate(module, imports)
|
|
.then(result => {
|
|
if (result instanceof WebAssembly.Instance) {
|
|
return { instance: result, module };
|
|
} else {
|
|
return result;
|
|
}
|
|
});
|
|
}
|
|
return result.then(({instance, module}) => {
|
|
wasm = instance.exports;
|
|
init.__wbindgen_wasm_module = module;
|
|
|
|
return wasm;
|
|
});
|
|
}
|
|
|
|
self.wasm_bindgen = Object.assign(init, __exports);
|
|
|
|
})();
|