From de9dca573546ff3451953dd52f151ebd26742254 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Sun, 16 Jun 2024 01:39:16 -1000 Subject: [PATCH] feat(config): :sparkles: Add option to never convert vector images --- config/config.example.toml | 2 ++ packages/config-manager/config.type.ts | 2 ++ packages/media-manager/media-converter.ts | 8 ++++++++ 3 files changed, 12 insertions(+) diff --git a/config/config.example.toml b/config/config.example.toml index 4d10ed70..0b001920 100644 --- a/config/config.example.toml +++ b/config/config.example.toml @@ -160,6 +160,8 @@ convert_images = true # Can be: "image/jxl", "image/webp", "image/avif", "image/png", "image/jpeg", "image/heif", "image/gif" # JXL support will likely not work convert_to = "image/webp" +# Also convert SVG images? +convert_vector = false # [s3] # Can be left blank if you don't use the S3 media backend diff --git a/packages/config-manager/config.type.ts b/packages/config-manager/config.type.ts index 13e10a1b..829d732a 100644 --- a/packages/config-manager/config.type.ts +++ b/packages/config-manager/config.type.ts @@ -224,10 +224,12 @@ export const configValidator = z.object({ .object({ convert_images: z.boolean().default(false), convert_to: z.string().default("image/webp"), + convert_vector: z.boolean().default(false), }) .default({ convert_images: false, convert_to: "image/webp", + convert_vector: false, }), }) .default({ diff --git a/packages/media-manager/media-converter.ts b/packages/media-manager/media-converter.ts index 58c0a3d8..4ea793df 100644 --- a/packages/media-manager/media-converter.ts +++ b/packages/media-manager/media-converter.ts @@ -3,6 +3,7 @@ * @module MediaManager * @description Handles media conversion between formats */ +import { config } from "config-manager"; import sharp from "sharp"; export const supportedMediaFormats = [ @@ -33,6 +34,13 @@ export class MediaConverter { * @returns Whether the media is convertable */ public isConvertable(file: File) { + if ( + file.type === "image/svg+xml" && + !config.media.conversion.convert_vector + ) { + return false; + } + return supportedMediaFormats.includes(file.type); }