265 lines
4.4 KiB
JavaScript
265 lines
4.4 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
Object.defineProperty(exports, "__esModule", {
|
||
|
value: true
|
||
|
});
|
||
|
exports.validateConfig = validateConfig;
|
||
|
function _utils() {
|
||
|
const data = require("@parcel/utils");
|
||
|
_utils = function () {
|
||
|
return data;
|
||
|
};
|
||
|
return data;
|
||
|
}
|
||
|
// https://sharp.pixelplumbing.com/api-output#jpeg
|
||
|
const JPEG_OUTPUT_SCHEMA = {
|
||
|
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 = {
|
||
|
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 = {
|
||
|
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 = {
|
||
|
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 = {
|
||
|
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 = {
|
||
|
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 = {
|
||
|
type: 'object',
|
||
|
properties: {
|
||
|
quality: {
|
||
|
type: 'number'
|
||
|
},
|
||
|
compression: {
|
||
|
type: 'string'
|
||
|
},
|
||
|
lossless: {
|
||
|
type: 'boolean'
|
||
|
},
|
||
|
speed: {
|
||
|
type: 'number'
|
||
|
},
|
||
|
chromaSubsampling: {
|
||
|
type: 'string'
|
||
|
}
|
||
|
},
|
||
|
additionalProperties: true
|
||
|
};
|
||
|
const CONFIG_SCHEMA = {
|
||
|
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
|
||
|
};
|
||
|
function validateConfig(data, filePath) {
|
||
|
_utils().validateSchema.diagnostic(CONFIG_SCHEMA, {
|
||
|
data,
|
||
|
filePath
|
||
|
}, '@parcel/transformer-image', 'Invalid sharp config');
|
||
|
}
|