mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-11 16:26:20 +00:00
This makes building simpler and allows us to potentially use multithreading version in the future. For now points to a custom fork of OxiPNG that enables WebAssembly support, as PR is still pending review.
79 lines
2.5 KiB
TypeScript
79 lines
2.5 KiB
TypeScript
import * as identity from './identity/encoder-meta';
|
|
import * as oxiPNG from './oxipng/encoder-meta';
|
|
import * as mozJPEG from './mozjpeg/encoder-meta';
|
|
import * as webP from './webp/encoder-meta';
|
|
import * as browserPNG from './browser-png/encoder-meta';
|
|
import * as browserJPEG from './browser-jpeg/encoder-meta';
|
|
import * as browserWebP from './browser-webp/encoder-meta';
|
|
import * as browserGIF from './browser-gif/encoder-meta';
|
|
import * as browserTIFF from './browser-tiff/encoder-meta';
|
|
import * as browserJP2 from './browser-jp2/encoder-meta';
|
|
import * as browserBMP from './browser-bmp/encoder-meta';
|
|
import * as browserPDF from './browser-pdf/encoder-meta';
|
|
|
|
export interface EncoderSupportMap {
|
|
[key: string]: boolean;
|
|
}
|
|
|
|
export type EncoderState =
|
|
identity.EncoderState |
|
|
oxiPNG.EncoderState |
|
|
mozJPEG.EncoderState |
|
|
webP.EncoderState |
|
|
browserPNG.EncoderState |
|
|
browserJPEG.EncoderState |
|
|
browserWebP.EncoderState |
|
|
browserGIF.EncoderState |
|
|
browserTIFF.EncoderState |
|
|
browserJP2.EncoderState |
|
|
browserBMP.EncoderState |
|
|
browserPDF.EncoderState;
|
|
|
|
export type EncoderOptions =
|
|
identity.EncodeOptions |
|
|
oxiPNG.EncodeOptions |
|
|
mozJPEG.EncodeOptions |
|
|
webP.EncodeOptions |
|
|
browserPNG.EncodeOptions |
|
|
browserJPEG.EncodeOptions |
|
|
browserWebP.EncodeOptions |
|
|
browserGIF.EncodeOptions |
|
|
browserTIFF.EncodeOptions |
|
|
browserJP2.EncodeOptions |
|
|
browserBMP.EncodeOptions |
|
|
browserPDF.EncodeOptions;
|
|
|
|
export type EncoderType = keyof typeof encoderMap;
|
|
|
|
export const encoderMap = {
|
|
[identity.type]: identity,
|
|
[oxiPNG.type]: oxiPNG,
|
|
[mozJPEG.type]: mozJPEG,
|
|
[webP.type]: webP,
|
|
[browserPNG.type]: browserPNG,
|
|
[browserJPEG.type]: browserJPEG,
|
|
[browserWebP.type]: browserWebP,
|
|
// Safari & Firefox only:
|
|
[browserBMP.type]: browserBMP,
|
|
// Safari only:
|
|
[browserGIF.type]: browserGIF,
|
|
[browserTIFF.type]: browserTIFF,
|
|
[browserJP2.type]: browserJP2,
|
|
[browserPDF.type]: browserPDF,
|
|
};
|
|
|
|
export const encoders = Array.from(Object.values(encoderMap));
|
|
|
|
/** Does this browser support a given encoder? Indexed by label */
|
|
export const encodersSupported = Promise.resolve().then(async () => {
|
|
const encodersSupported: EncoderSupportMap = {};
|
|
|
|
await Promise.all(encoders.map(async (encoder) => {
|
|
// If the encoder provides a featureTest, call it, otherwise assume supported.
|
|
const isSupported = !('featureTest' in encoder) || await encoder.featureTest();
|
|
encodersSupported[encoder.type] = isSupported;
|
|
}));
|
|
|
|
return encodersSupported;
|
|
});
|