mirror of
https://github.com/SamEyeBam/animate.git
synced 2025-09-28 23:15:25 +00:00
261 lines
4.5 KiB
JavaScript
261 lines
4.5 KiB
JavaScript
// @flow
|
|
import type {SchemaEntity} from '@parcel/utils';
|
|
import {validateSchema} from '@parcel/utils';
|
|
|
|
// https://sharp.pixelplumbing.com/api-output#jpeg
|
|
const JPEG_OUTPUT_SCHEMA: SchemaEntity = {
|
|
type: 'object',
|
|
properties: {
|
|
quality: {
|
|
type: 'number',
|
|
},
|
|
progressive: {
|
|
type: 'boolean',
|
|
},
|
|
chromaSubsampling: {
|
|
type: 'string',
|
|
},
|
|
optimiseCoding: {
|
|
type: 'boolean',
|
|
},
|
|
optimizeCoding: {
|
|
type: 'boolean',
|
|
},
|
|
mozjpeg: {
|
|
type: 'boolean',
|
|
},
|
|
trellisQuantisation: {
|
|
type: 'boolean',
|
|
},
|
|
overshootDeringing: {
|
|
type: 'boolean',
|
|
},
|
|
optimiseScans: {
|
|
type: 'boolean',
|
|
},
|
|
optimizeScans: {
|
|
type: 'boolean',
|
|
},
|
|
quantisationTable: {
|
|
type: 'number',
|
|
},
|
|
quantizationTable: {
|
|
type: 'number',
|
|
},
|
|
force: {
|
|
type: 'boolean',
|
|
},
|
|
},
|
|
additionalProperties: true,
|
|
};
|
|
|
|
// https://sharp.pixelplumbing.com/api-output#png
|
|
const PNG_OUTPUT_SCHEMA: SchemaEntity = {
|
|
type: 'object',
|
|
properties: {
|
|
quality: {
|
|
type: 'number',
|
|
},
|
|
progressive: {
|
|
type: 'boolean',
|
|
},
|
|
compressionLevel: {
|
|
type: 'number',
|
|
},
|
|
adaptiveFiltering: {
|
|
type: 'boolean',
|
|
},
|
|
palette: {
|
|
type: 'boolean',
|
|
},
|
|
colours: {
|
|
type: 'number',
|
|
},
|
|
colors: {
|
|
type: 'number',
|
|
},
|
|
dither: {
|
|
type: 'number',
|
|
},
|
|
force: {
|
|
type: 'boolean',
|
|
},
|
|
},
|
|
additionalProperties: true,
|
|
};
|
|
|
|
// https://sharp.pixelplumbing.com/api-output#webp
|
|
const WEBP_OUTPUT_SCHEMA: SchemaEntity = {
|
|
type: 'object',
|
|
properties: {
|
|
quality: {
|
|
type: 'number',
|
|
},
|
|
alphaQuality: {
|
|
type: 'number',
|
|
},
|
|
lossless: {
|
|
type: 'boolean',
|
|
},
|
|
nearLossless: {
|
|
type: 'boolean',
|
|
},
|
|
smartSubsample: {
|
|
type: 'boolean',
|
|
},
|
|
reductionEffort: {
|
|
type: 'number',
|
|
},
|
|
pageHeight: {
|
|
type: 'number',
|
|
},
|
|
loop: {
|
|
type: 'number',
|
|
},
|
|
delay: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'number',
|
|
},
|
|
},
|
|
force: {
|
|
type: 'boolean',
|
|
},
|
|
},
|
|
additionalProperties: true,
|
|
};
|
|
|
|
// https://sharp.pixelplumbing.com/api-output#gif
|
|
const GIF_OUTPUT_SCHEMA: SchemaEntity = {
|
|
type: 'object',
|
|
properties: {
|
|
pageHeight: {
|
|
type: 'number',
|
|
},
|
|
loop: {
|
|
type: 'number',
|
|
},
|
|
delay: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'number',
|
|
},
|
|
},
|
|
force: {
|
|
type: 'boolean',
|
|
},
|
|
},
|
|
additionalProperties: true,
|
|
};
|
|
|
|
// https://sharp.pixelplumbing.com/api-output#tiff
|
|
const TIFF_OUTPUT_SCHEMA: SchemaEntity = {
|
|
type: 'object',
|
|
properties: {
|
|
quality: {
|
|
type: 'number',
|
|
},
|
|
force: {
|
|
type: 'boolean',
|
|
},
|
|
compression: {
|
|
type: 'string',
|
|
},
|
|
predictor: {
|
|
type: 'string',
|
|
},
|
|
pyramid: {
|
|
type: 'boolean',
|
|
},
|
|
tile: {
|
|
type: 'boolean',
|
|
},
|
|
tileWidth: {
|
|
type: 'number',
|
|
},
|
|
tileHeight: {
|
|
type: 'number',
|
|
},
|
|
xres: {
|
|
type: 'number',
|
|
},
|
|
yres: {
|
|
type: 'number',
|
|
},
|
|
bitdepth: {
|
|
type: 'number',
|
|
},
|
|
},
|
|
additionalProperties: true,
|
|
};
|
|
|
|
// https://sharp.pixelplumbing.com/api-output#avif
|
|
const AVIF_OUTPUT_SCHEMA: SchemaEntity = {
|
|
type: 'object',
|
|
properties: {
|
|
quality: {
|
|
type: 'number',
|
|
},
|
|
lossless: {
|
|
type: 'boolean',
|
|
},
|
|
speed: {
|
|
type: 'number',
|
|
},
|
|
chromaSubsampling: {
|
|
type: 'string',
|
|
},
|
|
},
|
|
additionalProperties: true,
|
|
};
|
|
|
|
// https://sharp.pixelplumbing.com/api-output#heif
|
|
const HEIF_OUTPUT_SCHEMA: SchemaEntity = {
|
|
type: 'object',
|
|
properties: {
|
|
quality: {
|
|
type: 'number',
|
|
},
|
|
compression: {
|
|
type: 'string',
|
|
},
|
|
lossless: {
|
|
type: 'boolean',
|
|
},
|
|
speed: {
|
|
type: 'number',
|
|
},
|
|
chromaSubsampling: {
|
|
type: 'string',
|
|
},
|
|
},
|
|
additionalProperties: true,
|
|
};
|
|
|
|
const CONFIG_SCHEMA: SchemaEntity = {
|
|
type: 'object',
|
|
properties: {
|
|
// Fallback quality
|
|
quality: {
|
|
type: 'number',
|
|
},
|
|
jpeg: JPEG_OUTPUT_SCHEMA,
|
|
png: PNG_OUTPUT_SCHEMA,
|
|
webp: WEBP_OUTPUT_SCHEMA,
|
|
gif: GIF_OUTPUT_SCHEMA,
|
|
tiff: TIFF_OUTPUT_SCHEMA,
|
|
avif: AVIF_OUTPUT_SCHEMA,
|
|
heif: HEIF_OUTPUT_SCHEMA,
|
|
},
|
|
additionalProperties: false,
|
|
};
|
|
|
|
export function validateConfig(data: any, filePath: string) {
|
|
validateSchema.diagnostic(
|
|
CONFIG_SCHEMA,
|
|
{data, filePath},
|
|
'@parcel/transformer-image',
|
|
'Invalid sharp config',
|
|
);
|
|
}
|