28 lines
1 KiB
Text
28 lines
1 KiB
Text
---
|
|
import { getImage, type LocalImageProps, type RemoteImageProps } from 'astro:assets';
|
|
import { AstroError, AstroErrorData } from '../dist/core/errors/index.js';
|
|
|
|
// The TypeScript diagnostic for JSX props uses the last member of the union to suggest props, so it would be better for
|
|
// LocalImageProps to be last. Unfortunately, when we do this the error messages that remote images get are complete nonsense
|
|
// Not 100% sure how to fix this, seems to be a TypeScript issue. Unfortunate.
|
|
type Props = LocalImageProps | RemoteImageProps;
|
|
|
|
const props = Astro.props;
|
|
|
|
if (props.alt === undefined || props.alt === null) {
|
|
throw new AstroError(AstroErrorData.ImageMissingAlt);
|
|
}
|
|
|
|
// As a convenience, allow width and height to be string with a number in them, to match HTML's native `img`.
|
|
if (typeof props.width === 'string') {
|
|
props.width = parseInt(props.width);
|
|
}
|
|
|
|
if (typeof props.height === 'string') {
|
|
props.height = parseInt(props.height);
|
|
}
|
|
|
|
const image = await getImage(props);
|
|
---
|
|
|
|
<img src={image.src} {...image.attributes} />
|