Files
squoosh/src_old/codecs/encoders.ts
Jake Archibald a6477b82fc wip
# Conflicts:
#	codecs/cpp.Dockerfile
#	codecs/imagequant/example.html
#	codecs/webp/dec/webp_dec.d.ts
#	codecs/webp/dec/webp_dec.js
#	codecs/webp/dec/webp_dec.wasm
#	codecs/webp/enc/webp_enc.d.ts
#	codecs/webp/enc/webp_enc.js
#	codecs/webp/enc/webp_enc.wasm
#	package-lock.json
#	package.json
#	src/codecs/tiny.webp
#	src_old/codecs/encoders.ts
#	src_old/codecs/processor-worker/tiny.avif
#	src_old/codecs/processor-worker/tiny.webp
#	src_old/codecs/tiny.webp
#	src_old/components/compress/index.tsx
#	src_old/lib/util.ts
#	src_old/sw/util.ts
2020-09-16 10:08:50 +01:00

86 lines
2.6 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 avif from './avif/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
| avif.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
| avif.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,
[avif.type]: avif,
[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;
});