36 lines
850 B
JavaScript
36 lines
850 B
JavaScript
/**
|
|
* We use mjs extension as constants in this file is shared with the build script
|
|
* and we use `node --eval` to extract the constants.
|
|
*/
|
|
export const assetBaseUrl = "/assets/";
|
|
|
|
/**
|
|
* URL.canParse(props.src)
|
|
* @type {(url: string) => boolean}
|
|
*/
|
|
const UrlCanParse = (url) => {
|
|
try {
|
|
new URL(url);
|
|
return true;
|
|
} catch {
|
|
return false;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @type {import("@webstudio-is/image").ImageLoader}
|
|
*/
|
|
export const imageLoader = (props) => {
|
|
if (props.format === "raw") {
|
|
return props.src;
|
|
}
|
|
// IPX (sharp) does not support ico
|
|
if (props.src.endsWith('.ico')) {
|
|
return props.src;
|
|
}
|
|
// handle absolute urls
|
|
const path = UrlCanParse(props.src) ? `/${props.src}` : props.src;
|
|
// https://github.com/unjs/ipx?tab=readme-ov-file#modifiers
|
|
return `/_image/w_${props.width},q_${props.quality}${path}`;
|
|
};
|