images.ts — astro Source File
Architecture documentation for images.ts, a typescript file in the astro codebase.
Entity Profile
Relationship Graph
Source Code
export type MarkdownImagePath = { raw: string; safeName: string };
export function getMarkdownCodeForImages(
localImagePaths: MarkdownImagePath[],
remoteImagePaths: string[],
html: string,
) {
return `
import { getImage } from "astro:assets";
${localImagePaths
.map((entry) => `import Astro__${entry.safeName} from ${JSON.stringify(entry.raw)};`)
.join('\n')}
const images = async function(html) {
const imageSources = {};
${localImagePaths
.map((entry) => {
const rawUrl = JSON.stringify(entry.raw).replace(/'/g, ''');
return `{
const regex = new RegExp('__ASTRO_IMAGE_="([^"]*' + ${rawUrl.replace(
/[.*+?^${}()|[\]\\]/g,
'\\\\$&',
)} + '[^"]*)"', 'g');
let match;
let occurrenceCounter = 0;
while ((match = regex.exec(html)) !== null) {
const matchKey = ${rawUrl} + '_' + occurrenceCounter;
const imageProps = JSON.parse(match[1].replace(/"/g, '"').replace(/'/g, "'"));
const { src, ...props } = imageProps;
imageSources[matchKey] = await getImage({src: Astro__${entry.safeName}, ...props});
occurrenceCounter++;
}
}`;
})
.join('\n')}
${remoteImagePaths
.map((raw) => {
const rawUrl = JSON.stringify(raw).replace(/'/g, ''');
return `{
const regex = new RegExp('__ASTRO_IMAGE_="([^"]*' + ${rawUrl.replace(
/[.*+?^${}()|[\]\\]/g,
'\\\\$&',
)} + '[^"]*)"', 'g');
let match;
let occurrenceCounter = 0;
while ((match = regex.exec(html)) !== null) {
const matchKey = ${rawUrl} + '_' + occurrenceCounter;
const props = JSON.parse(match[1].replace(/"/g, '"').replace(/'/g, "'"));
imageSources[matchKey] = await getImage(props);
occurrenceCounter++;
}
}`;
})
.join('\n')}
return imageSources;
};
async function updateImageReferences(html) {
const imageSources = await images(html);
return html.replaceAll(/__ASTRO_IMAGE_="([^"]+)"/gm, (full, imagePath) => {
const decodedImagePath = JSON.parse(imagePath.replace(/"/g, '"'));
// Use the 'index' property for each image occurrence
const srcKey = decodedImagePath.src + '_' + decodedImagePath.index;
if (imageSources[srcKey].srcSet && imageSources[srcKey].srcSet.values.length > 0) {
imageSources[srcKey].attributes.srcset = imageSources[srcKey].srcSet.attribute;
}
const { index, ...attributesWithoutIndex } = imageSources[srcKey].attributes;
return spreadAttributes({
src: imageSources[srcKey].src,
...attributesWithoutIndex,
});
});
}
const html = async () => await updateImageReferences(${JSON.stringify(html)});
`;
}
Domain
Subdomains
Functions
Types
Source
Frequently Asked Questions
What does images.ts do?
images.ts is a source file in the astro codebase, written in typescript. It belongs to the CoreAstro domain, RenderingEngine subdomain.
What functions are defined in images.ts?
images.ts defines 1 function(s): getMarkdownCodeForImages.
Where is images.ts in the architecture?
images.ts is located at packages/astro/src/vite-plugin-markdown/images.ts (domain: CoreAstro, subdomain: RenderingEngine, directory: packages/astro/src/vite-plugin-markdown).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free