nuxt-og-image
Version:
Enlightened OG Image generation for Nuxt.
40 lines (39 loc) • 1.21 kB
JavaScript
import { useNitroOrigin, useStorage } from "#imports";
import { prefixStorage } from "unstorage";
export const assets = prefixStorage(useStorage(), "/assets");
export async function loadFont({ e, publicStoragePath }, font) {
const { name, weight } = font;
if (font.data)
return font;
if (font.key && await assets.hasItem(font.key)) {
let fontData = await assets.getItem(font.key);
if (fontData instanceof Uint8Array) {
const decoder = new TextDecoder();
fontData = decoder.decode(fontData);
}
font.data = Buffer.from(fontData, "base64");
return font;
}
let data;
if (font.path) {
if (import.meta.dev || import.meta.prerender) {
const key = `${publicStoragePath}${font.path.replace("./", ":").replace("/", ":")}`;
if (await useStorage().hasItem(key))
data = await useStorage().getItemRaw(key);
} else {
data = await e.$fetch(font.path, {
baseURL: useNitroOrigin(e),
responseType: "arrayBuffer"
});
}
} else {
data = await e.$fetch(`/__og-image__/font/${name}/${weight}.ttf`, {
responseType: "arrayBuffer",
query: {
font
}
});
}
font.data = data;
return font;
}