forked from external-repos/squoosh
* Refactoring codecs * Plugging in new processor * Fixing decorator * MozJPEG free issue * Better worker aborting, and terminate workers that aren't used for 10 seconds * Better comment * Ooops, half-typed comment * Uncommenting problematic line * Surma fixed it! * Abstracting WASM initialisation * Better comment * Don't need this. * Adding ticket * noInitalRun * Reverting MozJPEG issue demo * Making a const for worker timeout * Inline docs * Bail early rather than nesting * Addressing nits
19 lines
732 B
TypeScript
19 lines
732 B
TypeScript
import optipng, { OptiPngModule } from '../../../codecs/optipng/optipng';
|
||
import wasmUrl from '../../../codecs/optipng/optipng.wasm';
|
||
import { EncodeOptions } from './encoder-meta';
|
||
import { initWasmModule } from '../util';
|
||
|
||
let emscriptenModule: Promise<OptiPngModule>;
|
||
|
||
export async function compress(data: BufferSource, options: EncodeOptions): Promise<ArrayBuffer> {
|
||
if (!emscriptenModule) emscriptenModule = initWasmModule(optipng, wasmUrl);
|
||
|
||
const module = await emscriptenModule;
|
||
const resultView = module.compress(data, options);
|
||
const result = new Uint8Array(resultView);
|
||
module.free_result();
|
||
|
||
// wasm can’t run on SharedArrayBuffers, so we hard-cast to ArrayBuffer.
|
||
return result.buffer as ArrayBuffer;
|
||
}
|