diff options
Diffstat (limited to 'packages/markdown/remark/src')
-rw-r--r-- | packages/markdown/remark/src/index.ts | 2 | ||||
-rw-r--r-- | packages/markdown/remark/src/rehype-images.ts | 13 | ||||
-rw-r--r-- | packages/markdown/remark/src/types.ts | 8 |
3 files changed, 15 insertions, 8 deletions
diff --git a/packages/markdown/remark/src/index.ts b/packages/markdown/remark/src/index.ts index 5c5dcdc66..ffae6be4f 100644 --- a/packages/markdown/remark/src/index.ts +++ b/packages/markdown/remark/src/index.ts @@ -116,7 +116,7 @@ export async function renderMarkdown( }); if (opts.experimentalAssets) { - parser.use(rehypeImages(await opts.imageService, opts.assetsDir)); + parser.use(rehypeImages(await opts.imageService, opts.assetsDir, opts.getImageMetadata)); } if (!isPerformanceBenchmark) { parser.use([rehypeHeadingIds]); diff --git a/packages/markdown/remark/src/rehype-images.ts b/packages/markdown/remark/src/rehype-images.ts index f94960ba0..fcd39cd60 100644 --- a/packages/markdown/remark/src/rehype-images.ts +++ b/packages/markdown/remark/src/rehype-images.ts @@ -1,11 +1,10 @@ -import sizeOf from 'image-size'; import { join as pathJoin } from 'node:path'; import { fileURLToPath } from 'node:url'; import { visit } from 'unist-util-visit'; import { pathToFileURL } from 'url'; -import type { MarkdownVFile } from './types.js'; +import type { ImageMetadata, MarkdownVFile } from './types.js'; -export function rehypeImages(imageService: any, assetsDir: URL | undefined) { +export function rehypeImages(imageService: any, assetsDir: URL | undefined, getImageMetadata: any) { return () => function (tree: any, file: MarkdownVFile) { visit(tree, (node) => { @@ -24,10 +23,10 @@ export function rehypeImages(imageService: any, assetsDir: URL | undefined) { fileURL = pathToFileURL(pathJoin(file.dirname, node.properties.src)); } - const fileData = sizeOf(fileURLToPath(fileURL)); - fileURL.searchParams.append('origWidth', fileData.width!.toString()); - fileURL.searchParams.append('origHeight', fileData.height!.toString()); - fileURL.searchParams.append('origFormat', fileData.type!.toString()); + const fileData = getImageMetadata!(fileURLToPath(fileURL)) as ImageMetadata; + fileURL.searchParams.append('origWidth', fileData.width.toString()); + fileURL.searchParams.append('origHeight', fileData.height.toString()); + fileURL.searchParams.append('origFormat', fileData.type.toString()); let options = { src: { diff --git a/packages/markdown/remark/src/types.ts b/packages/markdown/remark/src/types.ts index 38fe9fc74..1b88f2442 100644 --- a/packages/markdown/remark/src/types.ts +++ b/packages/markdown/remark/src/types.ts @@ -51,6 +51,13 @@ export interface AstroMarkdownOptions { smartypants?: boolean; } +export interface ImageMetadata { + src: string; + width: number; + height: number; + type: string; +} + export interface MarkdownRenderingOptions extends AstroMarkdownOptions { /** @internal */ fileURL?: URL; @@ -64,6 +71,7 @@ export interface MarkdownRenderingOptions extends AstroMarkdownOptions { imageService?: any; assetsDir?: URL; resolveImage?: (path: string) => Promise<string>; + getImageMetadata?: any; } export interface MarkdownHeading { |