Skip to content

Commit

Permalink
fix: support virtual images when prerendering
Browse files Browse the repository at this point in the history
Relates to #287
  • Loading branch information
harlan-zw committed Dec 13, 2024
1 parent cdfc3fb commit 057aa9b
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 5 deletions.
1 change: 1 addition & 0 deletions playground/nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ export default defineNuxtConfig({
'/search?foo=2',
'/satori/image',
'/prebuilt',
'/virtual-image',
],
ignore: [
'/not-prerendered',
Expand Down
54 changes: 54 additions & 0 deletions playground/pages/virtual-image.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<script setup>
import { defineOgImageComponent, definePageMeta, useServerSeoMeta } from '#imports'
definePageMeta({
title: 'Home',
description: 'This is the home page',
breadcrumbTitle: 'Home',
})
useServerSeoMeta({
title: 'Welcome to the playground',
ogTitle: 'Welcome to the playground',
})
defineOgImageComponent('NuxtSeo', {
theme: '#fcfcfc',
colorMode: 'dark',
siteLogo: '/my-img.png',
})
</script>

<template>
<div class="px-7 my-5">
<div>
<ul>
<li>
<NuxtLink href="/chromium/screenshot">
Chromium screenshot
</NuxtLink>
</li>
<li>
<NuxtLink href="/chromium/component">
Chromium component
</NuxtLink>
</li>
</ul>
<ul>
<li>
<NuxtLink href="/satori/">
Satori index
</NuxtLink>
</li>
<li>
<a target="_blank" href="/__og-image__/image/satori/og.png">Satori png</a>
</li>
<li>
<NuxtLink to="/satori/image">
Satori image
</NuxtLink>
</li>
</ul>
</div>
</div>
</template>
7 changes: 7 additions & 0 deletions playground/server/routes/my-img.png.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { defineEventHandler, setHeader } from 'h3'

export default defineEventHandler((e) => {
// return a simple png
setHeader(e, 'Content-Type', 'image/png')
return Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=', 'base64')
})
15 changes: 10 additions & 5 deletions src/runtime/server/og-image/satori/plugins/imageSrc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,18 @@ export default defineSatoriTransformer([
// because we can't fetch public files using $fetch when prerendering
imageBuffer = await resolveLocalFilePathImage(publicStoragePath, srcWithoutBase)
}
else {
if (!imageBuffer) {
// see if we can fetch it from a kv host if we're using an edge provider
imageBuffer = (await e.$fetch(src, {
baseURL: useNitroOrigin(e),
responseType: 'arrayBuffer',
})
imageBuffer = (await e.$fetch(src, { responseType: 'arrayBuffer' })
.catch(() => {})) as BufferSource | undefined
if (!imageBuffer && !import.meta.prerender) {
// see if we can fetch it from a kv host if we're using an edge provider
imageBuffer = (await e.$fetch(src, {
baseURL: useNitroOrigin(e),
responseType: 'arrayBuffer',
})
.catch(() => {})) as BufferSource | undefined
}
}
// convert relative images to base64 as satori will have no chance of resolving
if (imageBuffer)
Expand Down

0 comments on commit 057aa9b

Please sign in to comment.