summaryrefslogtreecommitdiff
path: root/packages/markdown
diff options
context:
space:
mode:
Diffstat (limited to 'packages/markdown')
-rw-r--r--packages/markdown/remark/package.json1
-rw-r--r--packages/markdown/remark/src/index.ts2
-rw-r--r--packages/markdown/remark/src/rehype-images.ts13
-rw-r--r--packages/markdown/remark/src/types.ts8
4 files changed, 15 insertions, 9 deletions
diff --git a/packages/markdown/remark/package.json b/packages/markdown/remark/package.json
index 1dda55cc7..38d55f079 100644
--- a/packages/markdown/remark/package.json
+++ b/packages/markdown/remark/package.json
@@ -30,7 +30,6 @@
"dependencies": {
"@astrojs/prism": "^2.1.0",
"github-slugger": "^1.4.0",
- "image-size": "^1.0.2",
"import-meta-resolve": "^2.1.0",
"rehype-raw": "^6.1.1",
"rehype-stringify": "^9.0.3",
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 {