| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- globalThis.process ??= {}; globalThis.process.env ??= {};
- import { A as AstroError, at as MissingSharp } from './astro/server_WO3f6Mge.mjs';
- import { b as baseService, p as parseQuality } from './image-endpoint_DVs7qPGs.mjs';
- let sharp;
- const qualityTable = {
- low: 25,
- mid: 50,
- high: 80,
- max: 100
- };
- async function loadSharp() {
- let sharpImport;
- try {
- sharpImport = (await import('sharp')).default;
- } catch {
- throw new AstroError(MissingSharp);
- }
- sharpImport.cache(false);
- return sharpImport;
- }
- const fitMap = {
- fill: "fill",
- contain: "inside",
- cover: "cover",
- none: "outside",
- "scale-down": "inside",
- outside: "outside",
- inside: "inside"
- };
- const sharpService = {
- validateOptions: baseService.validateOptions,
- getURL: baseService.getURL,
- parseURL: baseService.parseURL,
- getHTMLAttributes: baseService.getHTMLAttributes,
- getSrcSet: baseService.getSrcSet,
- async transform(inputBuffer, transformOptions, config) {
- if (!sharp) sharp = await loadSharp();
- const transform = transformOptions;
- if (transform.format === "svg") return { data: inputBuffer, format: "svg" };
- const result = sharp(inputBuffer, {
- failOnError: false,
- pages: -1,
- limitInputPixels: config.service.config.limitInputPixels
- });
- result.rotate();
- const withoutEnlargement = Boolean(transform.fit);
- if (transform.width && transform.height && transform.fit) {
- const fit = fitMap[transform.fit] ?? "inside";
- result.resize({
- width: Math.round(transform.width),
- height: Math.round(transform.height),
- fit,
- position: transform.position,
- withoutEnlargement
- });
- } else if (transform.height && !transform.width) {
- result.resize({
- height: Math.round(transform.height),
- withoutEnlargement
- });
- } else if (transform.width) {
- result.resize({
- width: Math.round(transform.width),
- withoutEnlargement
- });
- }
- if (transform.format) {
- let quality = void 0;
- if (transform.quality) {
- const parsedQuality = parseQuality(transform.quality);
- if (typeof parsedQuality === "number") {
- quality = parsedQuality;
- } else {
- quality = transform.quality in qualityTable ? qualityTable[transform.quality] : void 0;
- }
- }
- const isGifInput = inputBuffer[0] === 71 && // 'G'
- inputBuffer[1] === 73 && // 'I'
- inputBuffer[2] === 70 && // 'F'
- inputBuffer[3] === 56 && // '8'
- (inputBuffer[4] === 57 || inputBuffer[4] === 55) && // '9' or '7'
- inputBuffer[5] === 97;
- if (transform.format === "webp" && isGifInput) {
- result.webp({ quality: typeof quality === "number" ? quality : void 0, loop: 0 });
- } else {
- result.toFormat(transform.format, { quality });
- }
- }
- const { data, info } = await result.toBuffer({ resolveWithObject: true });
- const needsCopy = "buffer" in data && data.buffer instanceof SharedArrayBuffer;
- return {
- data: needsCopy ? new Uint8Array(data) : data,
- format: info.format
- };
- }
- };
- var sharp_default = sharpService;
- export { sharp_default as default };
|