mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-15 10:09:45 +00:00
Fixup Emscripten factory & types
These days Emscripten returns a Promise to the module directly without hacks.
This commit is contained in:
2
codecs/avif/dec/avif_dec.d.ts
vendored
2
codecs/avif/dec/avif_dec.d.ts
vendored
@@ -2,5 +2,5 @@ interface AVIFModule extends EmscriptenWasm.Module {
|
|||||||
decode(data: BufferSource): ImageData | null;
|
decode(data: BufferSource): ImageData | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function(opts: EmscriptenWasm.ModuleOpts): AVIFModule;
|
export default function(opts: EmscriptenWasm.ModuleOpts): Promise<AVIFModule>;
|
||||||
|
|
||||||
|
|||||||
2
codecs/avif/enc/avif_enc.d.ts
vendored
2
codecs/avif/enc/avif_enc.d.ts
vendored
@@ -4,4 +4,4 @@ interface AVIFModule extends EmscriptenWasm.Module {
|
|||||||
encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array | null;
|
encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function(opts: EmscriptenWasm.ModuleOpts): AVIFModule;
|
export default function(opts: EmscriptenWasm.ModuleOpts): Promise<AVIFModule>;
|
||||||
|
|||||||
2
codecs/imagequant/imagequant.d.ts
vendored
2
codecs/imagequant/imagequant.d.ts
vendored
@@ -3,4 +3,4 @@ interface QuantizerModule extends EmscriptenWasm.Module {
|
|||||||
zx_quantize(data: BufferSource, width: number, height: number, dither: number): Uint8ClampedArray;
|
zx_quantize(data: BufferSource, width: number, height: number, dither: number): Uint8ClampedArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function(opts: EmscriptenWasm.ModuleOpts): QuantizerModule;
|
export default function(opts: EmscriptenWasm.ModuleOpts): Promise<QuantizerModule>;
|
||||||
|
|||||||
2
codecs/mozjpeg_enc/mozjpeg_enc.d.ts
vendored
2
codecs/mozjpeg_enc/mozjpeg_enc.d.ts
vendored
@@ -4,4 +4,4 @@ interface MozJPEGModule extends EmscriptenWasm.Module {
|
|||||||
encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array;
|
encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function(opts: EmscriptenWasm.ModuleOpts): MozJPEGModule;
|
export default function(opts: EmscriptenWasm.ModuleOpts): Promise<MozJPEGModule>;
|
||||||
|
|||||||
2
codecs/webp/dec/webp_dec.d.ts
vendored
2
codecs/webp/dec/webp_dec.d.ts
vendored
@@ -2,4 +2,4 @@ interface WebPModule extends EmscriptenWasm.Module {
|
|||||||
decode(data: BufferSource): ImageData | null;
|
decode(data: BufferSource): ImageData | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function(opts: EmscriptenWasm.ModuleOpts): WebPModule;
|
export default function(opts: EmscriptenWasm.ModuleOpts): Promise<WebPModule>;
|
||||||
|
|||||||
2
codecs/webp/enc/webp_enc.d.ts
vendored
2
codecs/webp/enc/webp_enc.d.ts
vendored
@@ -4,4 +4,4 @@ interface WebPModule extends EmscriptenWasm.Module {
|
|||||||
encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array | null;
|
encode(data: BufferSource, width: number, height: number, options: EncodeOptions): Uint8Array | null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function(opts: EmscriptenWasm.ModuleOpts): WebPModule;
|
export default function(opts: EmscriptenWasm.ModuleOpts): Promise<WebPModule>;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
export type ModuleFactory<M extends EmscriptenWasm.Module> = (
|
export type ModuleFactory<M extends EmscriptenWasm.Module> = (
|
||||||
opts: EmscriptenWasm.ModuleOpts,
|
opts: EmscriptenWasm.ModuleOpts,
|
||||||
) => M;
|
) => Promise<M>;
|
||||||
|
|
||||||
export function initEmscriptenModule<T extends EmscriptenWasm.Module>(
|
export function initEmscriptenModule<T extends EmscriptenWasm.Module>(
|
||||||
moduleFactory: ModuleFactory<T>,
|
moduleFactory: ModuleFactory<T>,
|
||||||
@@ -8,25 +8,16 @@ export function initEmscriptenModule<T extends EmscriptenWasm.Module>(
|
|||||||
workerUrl?: string,
|
workerUrl?: string,
|
||||||
mainUrl?: string,
|
mainUrl?: string,
|
||||||
): Promise<T> {
|
): Promise<T> {
|
||||||
return new Promise((resolve) => {
|
return moduleFactory({
|
||||||
const module = moduleFactory({
|
// Just to be safe, don't automatically invoke any wasm functions
|
||||||
// Just to be safe, don't automatically invoke any wasm functions
|
mainScriptUrlOrBlob: mainUrl,
|
||||||
mainScriptUrlOrBlob: mainUrl,
|
noInitialRun: true,
|
||||||
noInitialRun: true,
|
locateFile(url: string): string {
|
||||||
locateFile(url: string): string {
|
// Redirect the request for the wasm binary to whatever webpack gave us.
|
||||||
// Redirect the request for the wasm binary to whatever webpack gave us.
|
if (url.endsWith('.wasm')) return wasmUrl;
|
||||||
if (url.endsWith('.wasm')) return wasmUrl;
|
if (url.endsWith('.worker.js')) return workerUrl!;
|
||||||
if (url.endsWith('.worker.js')) return workerUrl!;
|
return url;
|
||||||
return url;
|
},
|
||||||
},
|
|
||||||
onRuntimeInitialized() {
|
|
||||||
// An Emscripten is a then-able that resolves with itself, causing an infite loop when you
|
|
||||||
// wrap it in a real promise. Delete the `then` prop solves this for now.
|
|
||||||
// https://github.com/kripken/emscripten/issues/5820
|
|
||||||
delete (module as any).then;
|
|
||||||
resolve(module);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user