UNPKG

astro

Version:

Astro is a modern site builder with web best practices, performance, and DX front-of-mind.

30 lines (29 loc) • 1.6 kB
import { fileExtension, joinPaths, prependForwardSlash, removeBase } from "@astrojs/internal-helpers/path"; import { getAssetsPrefix } from "./getAssetsPrefix.js"; import { hashTransform, propsToFilename } from "./hash.js"; import { isESMImportedImage } from "./imageKind.js"; import { createPlaceholderURL, stringifyPlaceholderURL } from "./url.js"; // Must stay deterministic: each runtime resolves images on its own and the build dedupes by hash. export function resolveStaticImage(options, hashProperties, originalFSPath, config) { const ESMImportedImageSrc = isESMImportedImage(options.src) ? options.src.src : options.src; const assetPrefix = getAssetsPrefix(fileExtension(ESMImportedImageSrc), config.assetsPrefix); const finalOriginalPath = removeBase(removeBase(ESMImportedImageSrc, config.base), assetPrefix); const hash = hashTransform(options, config.serviceEntrypoint, hashProperties); const finalFilePath = prependForwardSlash(joinPaths(isESMImportedImage(options.src) ? "" : config.assetsDir, prependForwardSlash(propsToFilename(finalOriginalPath, options, hash)))); const url = createPlaceholderURL(config.assetsPrefix ? encodeURI(joinPaths(assetPrefix, finalFilePath)) : encodeURI(prependForwardSlash(joinPaths(config.base, finalFilePath)))); if (config.assetQueryParams) { config.assetQueryParams.forEach((value, key) => { url.searchParams.set(key, value); }); } return { url: stringifyPlaceholderURL(url), image: { originalPath: finalOriginalPath, hash, finalPath: finalFilePath, originalSrcPath: originalFSPath, transform: options } }; }