diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 6a21431..d60b4c4 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -19,7 +19,7 @@ "@ogstudio/auth": "workspace:*", "@ogstudio/db": "workspace:*", "@radix-ui/themes": "^3.0.3", - "@resvg/resvg-wasm": "2.4.0", + "@resvg/resvg-wasm": "2.6.2", "@tanstack/react-query": "^5.35.1", "@vercel/analytics": "^1.2.2", "@vercel/kv": "^1.0.1", diff --git a/apps/dashboard/src/app/api/og/[key]/route.ts b/apps/dashboard/src/app/api/og/[key]/route.ts index cb1cc51..d1b6253 100644 --- a/apps/dashboard/src/app/api/og/[key]/route.ts +++ b/apps/dashboard/src/app/api/og/[key]/route.ts @@ -1,5 +1,4 @@ import { kv } from "@vercel/kv"; -import { initWasm } from "@resvg/resvg-wasm"; import type { NextRequest } from "next/server"; import type { OGElement } from "../../../../lib/types"; import { @@ -8,13 +7,6 @@ import { exportToSvg, } from "../../../../lib/export"; import { loadFonts } from "../../../../lib/fonts"; -// @ts-expect-error -- this file does exist -import resvgWasm from "../resvg.wasm?module"; - -// eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- wrong type -const initWasmPromise = initWasm(resvgWasm); - -export const runtime = "edge"; export async function GET( request: NextRequest, @@ -32,7 +24,6 @@ export async function GET( ); const reactElements = elementsToReactElements(ogElements, dynamicTexts); - await initWasmPromise; const fonts = await loadFonts(ogElements); const svg = await exportToSvg(reactElements, fonts); const png = await exportToPng(svg); diff --git a/apps/dashboard/src/app/api/og/template/[name]/route.ts b/apps/dashboard/src/app/api/og/template/[name]/route.ts index 57ed08d..55e5ac6 100644 --- a/apps/dashboard/src/app/api/og/template/[name]/route.ts +++ b/apps/dashboard/src/app/api/og/template/[name]/route.ts @@ -1,19 +1,11 @@ -import { initWasm } from "@resvg/resvg-wasm"; import { elementsToReactElements, exportToPng, exportToSvg, } from "../../../../../lib/export"; import { TEMPLATES } from "../../../../../lib/templates"; -// @ts-expect-error -- this file does exist -import resvgWasm from "../../resvg.wasm?module"; import { loadFonts } from "../../../../../lib/fonts"; -// eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- wrong type -const initWasmPromise = initWasm(resvgWasm); - -export const runtime = "edge"; - export async function GET( _: Request, { params }: { params: { name: string } }, @@ -29,7 +21,6 @@ export async function GET( const ogElements = template.elements; const reactElements = elementsToReactElements(ogElements); - await initWasmPromise; const fonts = await loadFonts(ogElements); const svg = await exportToSvg(reactElements, fonts); const png = await exportToPng(svg); diff --git a/apps/dashboard/src/lib/export.ts b/apps/dashboard/src/lib/export.ts index 5853a10..176a9a6 100644 --- a/apps/dashboard/src/lib/export.ts +++ b/apps/dashboard/src/lib/export.ts @@ -16,10 +16,9 @@ if (process.env.VITEST_POOL_ID) { "node_modules/@resvg/resvg-wasm/index_bg.wasm", ), ); - // @ts-expect-error -- only present in Edge Runtime -} else if (typeof EdgeRuntime !== "string") { +} else { initWasmPromise = initWasm( - fetch("https://unpkg.com/@resvg/resvg-wasm@2.4.0/index_bg.wasm", { + fetch("https://unpkg.com/@resvg/resvg-wasm@2.6.2/index_bg.wasm", { cache: "no-store", }), ); @@ -130,7 +129,7 @@ export async function exportToSvg( } /** - * Export an SVG string to a PNG Uint8Array, using the provided font buffers. + * Export an SVG string to a PNG Uint8Array. */ export async function exportToPng(svg: string): Promise { await initWasmPromise; diff --git a/apps/dashboard/src/lib/fonts.ts b/apps/dashboard/src/lib/fonts.ts index 27e2f9e..88ed183 100644 --- a/apps/dashboard/src/lib/fonts.ts +++ b/apps/dashboard/src/lib/fonts.ts @@ -82,6 +82,7 @@ export async function loadFonts(elements: OGElement[]): Promise { const data = await fetch( // @ts-expect-error -- wrong inference `https://fonts.bunny.net/${fontName}/files/${fontName}-latin-${element.fontWeight}-normal.woff`, + { cache: "no-store" }, ).then((response) => response.arrayBuffer()); const fontData: FontData = { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f1fe49..13089f5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,8 +45,8 @@ importers: specifier: ^3.0.3 version: 3.0.3(@types/react-dom@18.2.18)(@types/react@18.2.45)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) '@resvg/resvg-wasm': - specifier: 2.4.0 - version: 2.4.0 + specifier: 2.6.2 + version: 2.6.2 '@tanstack/react-query': specifier: ^5.35.1 version: 5.35.1(react@18.2.0) @@ -821,6 +821,7 @@ packages: '@humanwhocodes/config-array@0.11.13': resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -828,6 +829,7 @@ packages: '@humanwhocodes/object-schema@2.0.1': resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + deprecated: Use @eslint/object-schema instead '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -1775,8 +1777,8 @@ packages: '@types/react-dom': optional: true - '@resvg/resvg-wasm@2.4.0': - resolution: {integrity: sha512-C7c51Nn4yTxXFKvgh2txJFNweaVcfUPQxwEUFw4aWsCmfiBDJsTSwviIF8EcwjQ6k8bPyMWCl1vw4BdxE569Cg==} + '@resvg/resvg-wasm@2.6.2': + resolution: {integrity: sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw==} engines: {node: '>= 10'} '@rollup/rollup-android-arm-eabi@4.9.1': @@ -3100,6 +3102,7 @@ packages: glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} @@ -4061,6 +4064,7 @@ packages: rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rollup@4.9.1: @@ -6195,7 +6199,7 @@ snapshots: '@types/react': 18.2.45 '@types/react-dom': 18.2.18 - '@resvg/resvg-wasm@2.4.0': {} + '@resvg/resvg-wasm@2.6.2': {} '@rollup/rollup-android-arm-eabi@4.9.1': optional: true