Add support for new config.yaml
This commit is contained in:
@@ -1,3 +1,7 @@
|
||||
import { getImage } from '@astrojs/image';
|
||||
import type { OpenGraph } from '@astrolib/seo/src/types';
|
||||
import type { ImageMetadata } from 'astro';
|
||||
|
||||
const load = async function () {
|
||||
let images: Record<string, () => Promise<unknown>> | undefined = undefined;
|
||||
try {
|
||||
@@ -8,12 +12,12 @@ const load = async function () {
|
||||
return images;
|
||||
};
|
||||
|
||||
let _images;
|
||||
let _images: Record<string, () => Promise<unknown>> | undefined = undefined;
|
||||
|
||||
/** */
|
||||
export const fetchLocalImages = async () => {
|
||||
_images = _images || load();
|
||||
return await _images;
|
||||
_images = _images || (await load());
|
||||
return _images;
|
||||
};
|
||||
|
||||
/** */
|
||||
@@ -33,5 +37,58 @@ export const findImage = async (imagePath?: string) => {
|
||||
const images = await fetchLocalImages();
|
||||
const key = imagePath.replace('~/', '/src/');
|
||||
|
||||
return typeof images[key] === 'function' ? (await images[key]())['default'] : null;
|
||||
return images && typeof images[key] === 'function'
|
||||
? ((await images[key]()) as { default: unknown })['default']
|
||||
: null;
|
||||
};
|
||||
|
||||
/** */
|
||||
export const adaptOpenGraphImages = async (
|
||||
openGraph: OpenGraph = {},
|
||||
astroSite: URL | undefined = new URL('')
|
||||
): Promise<OpenGraph> => {
|
||||
if (!openGraph?.images?.length) {
|
||||
return openGraph;
|
||||
}
|
||||
|
||||
const images = openGraph.images;
|
||||
const defaultWidth = 1200;
|
||||
const defaultHeight = 626;
|
||||
|
||||
const adaptedImages = await Promise.all(
|
||||
images.map(async (image) => {
|
||||
if (image?.url) {
|
||||
const resolvedImage = (await findImage(image.url)) as ImageMetadata | undefined;
|
||||
if (!resolvedImage) {
|
||||
return {
|
||||
url: '',
|
||||
};
|
||||
}
|
||||
|
||||
const _image = await getImage({
|
||||
src: resolvedImage,
|
||||
alt: 'Placeholder alt',
|
||||
width: image?.width || defaultWidth,
|
||||
height: image?.height || defaultHeight,
|
||||
});
|
||||
|
||||
if (typeof _image === 'object') {
|
||||
return {
|
||||
url: typeof _image.src === 'string' ? String(new URL(_image.src, astroSite)) : 'pepe',
|
||||
width: typeof _image.width === 'number' ? _image.width : undefined,
|
||||
height: typeof _image.height === 'number' ? _image.height : undefined,
|
||||
};
|
||||
}
|
||||
return {
|
||||
url: '',
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
url: '',
|
||||
};
|
||||
})
|
||||
);
|
||||
|
||||
return { ...openGraph, ...(adaptedImages ? { images: adaptedImages } : {}) };
|
||||
};
|
||||
|
Reference in New Issue
Block a user