sharedValidateOptions() — astro Function Reference
Architecture documentation for the sharedValidateOptions() function in shared.ts from the astro codebase.
Entity Profile
Dependency Diagram
graph TD 9892657b_1b02_23f3_df9c_1395df173d5b["sharedValidateOptions()"] a016e3b9_7fbf_ffde_b5f4_749606ced138["shared.ts"] 9892657b_1b02_23f3_df9c_1395df173d5b -->|defined in| a016e3b9_7fbf_ffde_b5f4_749606ced138 style 9892657b_1b02_23f3_df9c_1395df173d5b fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/integrations/vercel/src/image/shared.ts lines 101–171
export function sharedValidateOptions(
options: ImageTransform,
serviceConfig: Record<string, any>,
mode: 'development' | 'production',
) {
const vercelImageOptions = serviceConfig as VercelImageConfig;
if (
mode === 'development' &&
(!vercelImageOptions.sizes || vercelImageOptions.sizes.length === 0)
) {
throw new Error('Vercel Image Optimization requires at least one size to be configured.');
}
const configuredWidths = vercelImageOptions.sizes.sort((a, b) => a - b);
// The logic for finding the perfect width is a bit confusing, here it goes:
// For images where no width has been specified:
// - For local, imported images, fallback to nearest width we can find in our configured
// - For remote images, that's an error, width is always required.
// For images where a width has been specified:
// - If the width that the user asked for isn't in `sizes`, then fallback to the nearest one, but save the width
// the user asked for so we can put it on the `img` tag later.
// - Otherwise, just use as-is.
// The end goal is:
// - The size on the page is always the one the user asked for or the base image's size
// - The actual size of the image file is always one of `sizes`, either the one the user asked for or the nearest to it
if (!options.width) {
const src = options.src;
if (isESMImportedImage(src)) {
const nearestWidth = configuredWidths.reduce((prev, curr) => {
return Math.abs(curr - src.width) < Math.abs(prev - src.width) ? curr : prev;
});
// Use the image's base width to inform the `width` and `height` on the `img` tag
options.inputtedWidth = src.width;
options.width = nearestWidth;
} else {
throw new Error(`Missing \`width\` parameter for remote image ${options.src}`);
}
} else {
if (!configuredWidths.includes(options.width)) {
const nearestWidth = configuredWidths.reduce((prev, curr) => {
return Math.abs(curr - options.width!) < Math.abs(prev - options.width!) ? curr : prev;
});
// Save the width the user asked for to inform the `width` and `height` on the `img` tag
options.inputtedWidth = options.width;
options.width = nearestWidth;
}
}
if (options.widths) {
// Vercel only supports a fixed set of widths, so remove any that aren't in the list
options.widths = options.widths.filter((w) => configuredWidths.includes(w));
// Oh no, we've removed all the widths! Let's add the nearest one back in
if (options.widths.length === 0) {
options.widths = [options.width];
}
}
if (options.quality && typeof options.quality === 'string') {
options.quality = options.quality in qualityTable ? qualityTable[options.quality] : undefined;
}
if (!options.quality) {
options.quality = 100;
}
return options;
}
Domain
Subdomains
Source
Frequently Asked Questions
What does sharedValidateOptions() do?
sharedValidateOptions() is a function in the astro codebase, defined in packages/integrations/vercel/src/image/shared.ts.
Where is sharedValidateOptions() defined?
sharedValidateOptions() is defined in packages/integrations/vercel/src/image/shared.ts at line 101.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free