polymech-astro/packages/imagetools/utils/runtimeChecks.js
2025-08-26 12:17:29 +02:00

66 lines
2.0 KiB
JavaScript

import fs from "node:fs"
import path from "node:path"
import filterConfigs from "./filterConfigs.js"
import { cache_path } from "@polymech/cache"
import { sync as dir } from "@polymech/fs/dir"
export const sharp = await (async () => {
try {
if (await import("sharp")) {
return true;
}
} catch (error) {
return false;
}
})();
export const supportedImageTypes = [
"avif",
"jpeg",
"jpg",
"png",
"webp",
...(sharp ? ["heic", "heif", "tiff", "gif"] : ["jxl", "wp2"]),
];
// prettier-ignore
export const supportedConfigs = [
"src", "alt", "tag", "content", "sizes", "preload", "loading", "decoding", "attributes",
"layout", "placeholder", "breakpoints", "objectFit", "objectPosition", "backgroundSize",
"backgroundPosition", "format", "fallbackFormat", "includeSourceFormat", "formatOptions",
"fadeInTransition", "artDirectives", "flip", "flop", "invert", "flatten", "normalize",
"grayscale", "hue", "saturation", "brightness", "w", "h", "ar", "width", "height", "aspect",
"background", "tint", "blur", "median", "rotate", "quality", "fit", "kernel", "position",
"cacheDir", "assetFileNames",
];
/*
const configFile = await findUp([
"astro-imagetools.config.js",
"astro-imagetools.config.mjs",
]);
*/
/*
const configFunction = configFile
? await import(configFile).catch(async () => await import("/" + configFile))
: null;
*/
const configFunction = null
//const rawGlobalConfigOptions = configFunction?.default ?? {};
const rawGlobalConfigOptions = {}
const NonGlobalConfigOptions = ["src", "alt", "content"]
const GlobalConfigs = supportedConfigs.filter(
(key) => !NonGlobalConfigOptions.includes(key)
)
const GlobalConfigOptions = filterConfigs(
"Global",
rawGlobalConfigOptions,
GlobalConfigs
)
export { GlobalConfigOptions }
export const cwd = process.cwd().split(path.sep).join(path.posix.sep)
let fsCachePath = `${cache_path('imagetools')}/`
dir(fsCachePath)
export { fsCachePath }