Skip to content

Upgrading nuxt-og-image 5 to 6

Breaking5.1.13 → 6.10.4Breaking17Security13Deprecated3New30Changed24Fixed323Other16

BreakingUpgrade verdict

17 breaking changes and 10 security fixes.

  • Different query strings now share the same cached image unless you opt out.
  • The chromium renderer is now called browser, and it can run on Cloudflare.
  • Using Vue components to build OG images is no longer supported.
  • The css-inline option is no longer available.
Top 5 of 30 that need code or config changes

nuxt-og-image publishes an official migration guide for version 6. It covers more than the release notes do.

Migration guide ↗

Adds @clack/prompts ^1.8.1, @vue/compiler-sfc ^3.5.43, devalue ^6.0.2, exsolve ^1.1.1, fnv1a-64 ^0.1.2, lightningcss ^1.33.0, magicast ^0.5.5, nuxtseo-shared ^5.3.16, object-identity ^0.2.3, oxc-parser ^0.151.0, oxc-walker ^1.1.1, tinyexec ^1.3.1, ultrahtml ^1.7.0.

Drops @nuxt/devtools-kit, @resvg/resvg-js, @resvg/resvg-wasm, @unocss/core, @unocss/preset-wind3, execa, image-size, playwright-core, satori, satori-html, sirv, unwasm, yoga-wasm-web.

Installs 130 packages in all (was 152).

Breaking17
Ignores query params in cache key by default.
Renames the chromium renderer to browser and adds Cloudflare support.
chromiumbrowser
Drops component support.
Drops css-inline support.
css-inline
Reverts the takumi renderer back to default DPI 1.
takumi
Drops component support.
Stops bundling renderer dependencies; users must install the packages for their chosen renderer and runtime.
@takumi-rs/core@takumi-rs/wasmsatori@resvg/resvg-js@resvg/resvg-wasmplaywright-core
Replaces the legacy ogImage.fonts config with @nuxt/fonts integration, requiring global: true for fonts to be available.
@nuxt/fontsogImage.fontsfonts.familiesglobal
Requires a renderer suffix in OG Image component filenames, such as .takumi.vue or .satori.vue.
MyTemplate.takumi.vueMyTemplate.satori.vue
Stops bundling community templates in production; they must be ejected to the project before building.
NuxtSeoSimpleBlog
Changes OG image URL structure to a Cloudinary-style path format, replacing /__og-image__/image/ with /_og/d/ and /__og-image__/static/ with /_og/s/.
/__og-image__/image//_og/d//__og-image__/static//_og/s/
Multiple og images are supported with reworked paths.
Requires explicit provider dependencies.
Requires ejecting community templates.
Requires a component suffix for the renderer target.
Adds native Tailwind v4 support.
Integrates with Nuxt/fonts.
Security10
Nuxt OG Image has unauthenticated SSRF via fonts[].path URL parameter
Moderate
Nuxt OG Image cache poisoning through derivable cache keys on unsigned dynamic image routes
Moderate
Blocks embedded-IPv4 IPv6 bypasses.
nuxt-og-image SSRF — bypass of GHSA-pqhr-mp3f-hrpp / v6.2.5 fix (IPv6 + redirect)
Low · CVSS 3.7
Adds URL signing to prevent parameter tampering.
Nuxt OG Image is vulnerable to reflected XSS via query parameter injection into HTML attributes
Moderate · CVSS 6.1
Hardens security defaults.
Whitelists component props to prevent a cache key denial-of-service.
Nuxt OG Image is vulnerable to Denial of Service via unbounded image dimensions
Moderate
Nuxt OG Image vulnerable to Server-Side Request Forgery via user-controlled parameters
Moderate · CVSS 5.3
Deprecated3
Adds a strict mode and deprecates the html option.
html
Re-exports getOgImagePath as deprecated.
getOgImagePath
Re-exports getOgImagePath as deprecated.
getOgImagePath

Generated by DepDelta from published .d.ts files. Not mixed with prose notes.

  • added: export * from 'h3'
  • added: export * from 'nitropack/runtime'
  • changed: const prerenderOptionsCache: Storage<OgImageOptions> | undefined → const prerenderOptionsCache: Storage<OgImageOptions | [string, OgImageOptions][]> | undefined
  • added: function loadIcons(): Promise<OgImageIconsData>
  • added: const createBrowser: () => Promise<Browser | void>
  • removed: const createBrowser: () => Promise<Browser | void>
  • removed: const cssInline: _CssInline
  • removed: default cssInline
  • added: function guardedFetch(url: string, init: { headers?: Record<string, string>; signal: AbortSignal; isBlockedAddress?: (address: string) => boolean }): Promise<Response>
  • added: index OgImageComponents[key: string]: Record<string, any>
  • added: interface OgImageComponents
  • added: const fontRequirements: { weights: number[]; styles: Array<'normal' | 'italic'>; families: string[]; hasDynamicBindings: boolean }
  • added: const hasNuxtFonts: boolean
  • added: function getComponentFontMap(): Record<string, { weights: number[]; styles: Array<'normal' | 'italic'>; families: string[]; hasDynamicBindings: boolean; category?: 'app' | 'community' | 'pro' }>
  • added: const wrapHarfBuzz: (instance: unknown) => unknown
  • added: default wrapHarfBuzz
  • added: const callbacks: Record<string, WebAssembly.Module | Promise<WebAssembly.Module>> | undefined
  • added: default callbacks
  • added: const createHarfBuzz: (options: { convertJsFunctionToWasm?: (callback: WebAssembly.ImportValue, signature: string) => WebAssembly.ExportValue; instantiateWasm: (imports: WebAssembly…
  • added: default createHarfBuzz
  • added: function getIslandHash(input: { name: string; props?: Record<string, any> | string | null; context?: Record<string, any>; source?: string }): string
  • added: function fetchWithEvent<T>(event: H3Event, request: FetchRequest, options?: FetchOptions): Promise<T>
  • added: const renderer: Renderer | { __mock__: true } | undefined
  • added: default renderer
  • removed: const renderer: Renderer | { __mock__: true } | undefined
  • removed: default renderer
  • removed: const cssInline: { inline: (css: string, html: string) => string }
  • removed: default function init(): Promise<void>
  • removed: function inline(css: string, html: string): string
  • added: interface NuxtSSRContext
  • added: property NuxtSSRContext._ogImageDevtoolsInstance?: ActiveHeadEntry<Head>
  • added: property NuxtSSRContext._ogImageInstance?: ActiveHeadEntry<Head>
  • added: property NuxtSSRContext._ogImagePayloads?: OgImagePayload[]
  • removed: function asOgImageCollection<T>(collection: Collection<T>): Collection<T>
  • changed: const ogImageSchema: z.ZodOptional<z.ZodObject<{ url: z.ZodOptional<z.ZodString>; component: z.ZodOptional<z.ZodString>; props: z.ZodRecord<z.ZodString, z.ZodAny> }, 'strip', z.Zod… → const ogImageSchema: any
  • changed: const schema: z.ZodObject<{ ogImage: z.ZodOptional<z.ZodObject<{ url: z.ZodOptional<z.ZodString>; component: z.ZodOptional<z.ZodString>; props: z.ZodRecord<z.ZodString, z.Zo… → const schema: z.ZodObject<{ [x: string]: any }, z.core.$strip>
  • added: const asOgImageCollection: <T>(collection: any) => T
  • added: const defineOgImageSchema: (options?: nuxtseo_shared_content.ContentSchemaOptions | undefined) => z.ZodOptional<z.ZodObject<{ url: z.ZodOptional<z.ZodString>; component: z.ZodOptional<z.…
  • removed: const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>
  • removed: export = _default
  • removed: property ModuleOptions.componentOptions?: Pick<AddComponentOptions, 'global'>
  • removed: property ModuleOptions.fonts: InputFontConfig[]
  • removed: property ModuleOptions.googleFontMirror?: string
  • removed: property ModuleOptions.strictNuxtContentPaths?: boolean
  • changed: property ModuleHooks.'nuxt-og-image:components': (ctx: { components: OgImageComponent[] }) => Promise<void> | void → property ModuleHooks.'nuxt-og-image:components': (ctx: { components: OgImageComponent[]; detectedRenderers: Set<RendererType> }) => Promise<void> | void
  • changed: property ModuleHooks.'nuxt-og-image:runtime-config': (config: ModuleOptions) => Promise<void> | void → property ModuleHooks.'nuxt-og-image:runtime-config': (config: OgImageRuntimeConfig) => Promise<void> | void
  • changed: property ModuleOptions.defaults: OgImageOptions → property ModuleOptions.defaults: Omit<OgImageOptions, 'component' | 'renderer' | 'props' | 'url' | 'html' | 'key' | 'cacheKey' | '_query' | '_hash' | 'socialPreview'>
  • changed: property ModuleOptions.runtimeCacheStorage: boolean | (Record<string, any> & { driver: string }) → property ModuleOptions.runtimeCacheStorage: boolean | string | (Record<string, any> & { driver: string })
  • added: export { OgImageComponent } from '../dist/runtime/types'
  • added: export { OgImageOptions } from '../dist/runtime/types'
  • added: export { OgImageRenderEventContext } from '../dist/runtime/types'
  • added: export { OgImageRuntimeConfig } from '../dist/runtime/types'
  • added: export { RuntimeCompatibilitySchema } from '../dist/runtime/types'
  • added: export { VNode } from '../dist/runtime/types'
  • added: property ModuleOptions.browser?: BrowserConfig
  • added: property ModuleOptions.buildCache?: boolean | { base?: string }
  • added: property ModuleOptions.cacheMaxAgeSeconds?: number
  • added: property ModuleOptions.cacheVersion?: string | false
  • added: property ModuleOptions.emojiStrategy?: 'auto' | 'local' | 'fetch'
  • added: property ModuleOptions.fontSubsets?: string[]
  • added: property ModuleOptions.includeTwitter?: boolean
  • added: property ModuleOptions.security?: { maxDimension?: number; maxDpr?: number; renderTimeout?: number; imageFetchTimeout?: number; maxQueryParamSize?: number | null; restrictRuntimeImagesToOrigin?: boolean | string[]; secret?: string | false; strict?: boolean }
  • added: property ModuleOptions.warnMissingSuffix?: boolean
  • added: function clientProcessOgImageOptions(input: DefineOgImageInput | DefineOgImageInput[], route: RouteLocationNormalizedLoaded, basePath: string): string[]
  • removed: const _default: import('vue').DefineComponent<OgImageOptions<'NuxtSeo'>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string,…
  • removed: default _default
  • removed: const _default: import('vue').DefineComponent<OgImagePageScreenshotOptions, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, strin…
  • removed: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • removed: const _default: typeof __VLS_export
  • removed: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • removed: const _default: typeof __VLS_export
  • removed: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • removed: const _default: typeof __VLS_export
  • removed: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • removed: const _default: typeof __VLS_export
  • removed: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • removed: const _default: typeof __VLS_export
  • removed: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • removed: const _default: typeof __VLS_export
  • removed: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • removed: const _default: typeof __VLS_export
  • removed: default _default
  • removed: const _default: typeof __VLS_export
  • removed: default _default
  • added: const _default: typeof __VLS_export
  • added: default _default
  • removed: const _default: typeof __VLS_export
  • removed: default _default
  • added: function defineOgImageRaw(_options?: DefineOgImageInput | DefineOgImageInput[]): string[]
  • changed: function defineOgImage(_options?: DefineOgImageInput): void → function defineOgImage<T extends keyof OgImageComponents>(component: T, propsOrOptions?: ReactiveComponentProps<OgImageComponents[T]> | OgImageComponentOptions<T>[], options?: OgImageOptions | OgImageComponentOptions<T>[]): string[]
  • changed: function defineOgImageComponent<T extends keyof OgImageComponents>(component: T, props?: Partial<ExtractComponentProps<OgImageComponents[T]>>, options?: OgImageOptions): void → function defineOgImageComponent<T extends keyof OgImageComponents>(component: T, props?: ReactiveComponentProps<OgImageComponents[T]>, options?: OgImageOptions): string[]
  • changed: function defineOgImageScreenshot(options?: OgImagePageScreenshotOptions): void → function defineOgImageScreenshot(options?: OgImagePageScreenshotOptions): string[]
  • changed: function defineOgImage(_options?: DefineOgImageInput): void → function defineOgImage<T extends keyof OgImageComponents>(_component: T, _props?: ReactiveComponentProps<OgImageComponents[T]>, _options?: OgImageOptions): void
  • changed: function defineOgImageComponent<T extends keyof OgImageComponents>(component: T, props?: Partial<ExtractComponentProps<OgImageComponents[T]>>, options?: OgImageOptions): void → function defineOgImageComponent<T extends keyof OgImageComponents>(_component: T, _props?: ReactiveComponentProps<OgImageComponents[T]>, _options?: OgImageOptions): void
  • changed: function defineOgImageScreenshot(options?: OgImagePageScreenshotOptions): void → function defineOgImageScreenshot(_options?: OgImagePageScreenshotOptions): void
  • added: const defineOgImage: typeof _defineOgImage
  • added: const defineOgImageComponent: typeof _defineOgImageComponent
  • added: const defineOgImageScreenshot: typeof _defineOgImageScreenshot
  • changed: function createOgImageMeta(src: string, input: OgImageOptions | OgImagePrebuilt, ssrContext: NuxtSSRContext): void → function createOgImageMeta(src: string, input: OgImageOptions | OgImagePrebuilt, ssrContext: NuxtSSRContext, pagePath?: string, head?: VueHeadClient): void
  • changed: function getOgImagePath(pagePath: string, _options?: Partial<OgImageOptions>): string → function getOgImagePath(_pagePath: string, _options?: Partial<OgImageOptionsInternal>): GetOgImagePathResult
  • changed: function resolveComponentName(component: OgImageOptions['component'], fallback: string): OgImageOptions['component'] → function resolveComponentName(component: OgImageOptionsInternal['component']): OgImageOptionsInternal['component']
  • added: declare module 'nuxt/app'
  • added: interface GetOgImagePathResult
  • added: property GetOgImagePathResult.hash?: string
  • added: property GetOgImagePathResult.path: string
  • removed: function ogImageCanonicalUrls(nuxtApp: NuxtSSRContext['nuxt']): void
  • removed: function routeRuleOgImage(nuxtApp: NuxtSSRContext['nuxt']): void
  • added: const ogImageCanonicalUrls: import('nuxt/app').Plugin<Record<string, unknown>> & import('nuxt/app').ObjectPlugin<Record<string, unknown>>
  • added: const routeRuleOgImage: import('nuxt/app').Plugin<Record<string, unknown>> & import('nuxt/app').ObjectPlugin<Record<string, unknown>>
  • removed: const gray: (s: string) => string
  • added: function detectBase64MimeType(data: string): string
  • added: function extractSocialPreviewTags(html: string): [Record<string, string>, DevToolsMetaDataExtraction[]]
  • added: function toBase64Image(data: string | ArrayBuffer): string
  • added: function withoutQuery(path: string): string | undefined
  • added: function getOgImageUrl(event: H3Event, options?: Options): string
  • added: function getOgImageUrl(event: H3Event, pagePath: string, options?: Options): string
  • added: function createBrowser(_event?: H3Event): Promise<Browser | void>
  • added: function createBrowser(event?: H3Event): Promise<Browser>
  • added: function createBrowser(_event?: H3Event): Promise<Browser | void>
  • added: function createBrowser(_event?: H3Event): Promise<Browser | void>
  • removed: function createBrowser(): Promise<Browser | void>
  • removed: function createBrowser(): Promise<Browser | void>
  • removed: function createBrowser(): Promise<Browser | void>
  • removed: const _default: { initWasmPromise: Promise<void>; cssInline: { inline: typeof inline } }
  • removed: default _default
  • removed: const _default: { initWasmPromise: any; cssInline: { inline: any } }
  • removed: default _default
  • removed: const _default: { initWasmPromise: any; cssInline: { inline: any } }
  • removed: default _default
  • added: function guardedFetch(url: string, { headers, signal, isBlockedAddress }: GuardedFetchInit): Promise<Response>
  • added: function guardedFetch(url: string, { headers, signal }: GuardedFetchInit): Promise<Response>
  • added: interface GuardedFetchInit
  • added: property GuardedFetchInit.headers?: Record<string, string>
  • added: property GuardedFetchInit.isBlockedAddress?: (address: string) => boolean
  • added: property GuardedFetchInit.signal: AbortSignal
  • added: function resolve(event: H3Event, font: FontConfig): Promise<Buffer<ArrayBufferLike>>
  • added: function resolve(event: H3Event, font: FontConfig): Promise<Buffer>
  • added: function fetchSpecialFontUrl(path: string, siteUrl: string | undefined, timeout: number): Promise<Buffer>
  • added: function isDataFontUrl(path: string): boolean
  • added: function isExternalFontUrl(path: string): boolean
  • added: function resolve(event: H3Event, font: FontConfig): Promise<Buffer<any>>
  • added: const _default: { initWasmPromise: Promise<void>; Resvg: typeof import('@resvg/resvg-wasm').Resvg }
  • added: default _default
  • added: const _default: { readonly then: <TResult1 = unknown, TResult2 = never>(onfulfilled?: ((value: unknown) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: (…
  • added: default _default
  • added: const _default: { initWasmPromise: Promise<void>; Renderer: typeof Renderer; extractResourceUrls: typeof extractResourceUrls }
  • added: default _default
  • added: const _default: { initWasmPromise: Promise<void>; Renderer: typeof import('@takumi-rs/core').Renderer; extractResourceUrls: typeof extractResourceUrls }
  • added: default _default
  • added: function extractResourceUrls(nodes: Node | Node[]): string[]
  • added: const _default: { initWasmPromise: Promise<import('@takumi-rs/wasm').InitOutput>; Renderer: typeof Renderer; extractResourceUrls: typeof extractResourceUrls }
  • added: default _default
  • added: function createWorkerQueue<TMessage, TResponse>(options: QueueOptions): { enqueue: (buildMessage: Job<TMessage, TResponse>['buildMessage']) => Promise<TResponse>; shutdown: () => void }
  • added: function parseWorkerTimeout(value: string | undefined, fallback?: number): number
  • added: const BrowserRenderer: Renderer
  • added: default BrowserRenderer
  • added: function createScreenshot({ basePath, e, options, extension, timings }: OgImageRenderEventContext, browser: Browser): Promise<Buffer>
  • added: function generateBuildCacheKey(options: Record<string, any>, extension: string): string
  • added: function getBuildCachedImage(options: Record<string, any>, extension: string): Buffer | null
  • added: function getComponentHash(componentName: string): string
  • added: function setBuildCachedImage(options: Record<string, any>, extension: string, data: Buffer | Uint8Array, maxAgeSeconds: number): void
  • changed: const fontCache: Storage<BufferSource> → const fontCache: BoundedMap<BufferSource>
  • changed: const prerenderOptionsCache: Storage<OgImageOptions> | undefined → const prerenderOptionsCache: Storage<OgImageOptions | [string, OgImageOptions][]> | undefined
  • added: const fontArrayCache: BoundedMap<RuntimeFontConfig[]>
  • removed: const fontCache: Storage<OgImageOptions<'NuxtSeo'>>
  • changed: const prerenderOptionsCache: Storage<OgImageOptions> | undefined → const prerenderOptionsCache: Storage<OgImageOptions | [string, OgImageOptions][]> | undefined
  • removed: const ChromiumRenderer: Renderer
  • removed: default ChromiumRenderer
  • removed: function createScreenshot({ basePath, e, options, extension }: OgImageRenderEventContext, browser: Browser): Promise<Buffer>
  • removed: function extractAndNormaliseOgImageOptions(html: string): OgImageOptions | false
  • removed: function resolvePathCacheKey(e: H3Event, path: string): string
  • added: function defineTransformer(transformer: VNodeTransformer | VNodeTransformer[]): VNodeTransformer | VNodeTransformer[]
  • added: function walkTree(e: OgImageRenderEventContext, node: VNode, plugins: (VNodeTransformer | VNodeTransformer[])[]): (void | Promise<void>)[]
  • added: const _default: import('../../../../types.js').VNodeTransformer | import('../../../../types.js').VNodeTransformer[]
  • added: default _default
  • added: const _default: import('../../../../types.js').VNodeTransformer | import('../../../../types.js').VNodeTransformer[]
  • added: default _default
  • added: const _default: import('../../../../types.js').VNodeTransformer | import('../../../../types.js').VNodeTransformer[]
  • added: default _default
  • added: function parseStyleAttr(style: string | null | undefined): Record<string, any> | undefined
  • added: const EMOJI_CODEPOINT_TO_NAME: Record<string, string>
  • added: const RE_MATCH_EMOJIS: RegExp
  • added: function getEmojiCodePoint(emoji: string): string
  • added: function getEmojiIconNames(codePoint: string, _emojiSet: string): string[]
  • added: function getEmojiSvg(ctx: OgImageRenderEventContext, emojiChar: string): Promise<string | null>
  • added: function applyEmojis(ctx: OgImageRenderEventContext, island: NuxtIslandResponse): Promise<void>
  • added: declare module '#og-image-virtual/iconify-json-icons.mjs'
  • added: function getEmojiSvg(ctx: OgImageRenderEventContext, emojiChar: string): Promise<string | null>
  • added: function getEmojiSvg(): null
  • added: const SVG_CAMEL_ATTR_VALUES: Set<string>
  • added: export { parseStyleAttr }
  • added: function createVNodes(ctx: OgImageRenderEventContext, options?: CreateVNodesOptions): Promise<VNode>
  • added: function elementToVNode(el: ElementNode): VNode
  • added: function htmlToVNode(html: string): VNode
  • added: function resolveSvgDimension(props: Record<string, any>, style: Record<string, any> | undefined, key: 'width' | 'height'): number | undefined
  • added: function warnUnsupportedSvgElements(vnode: VNode, component?: string): void
  • added: interface CreateVNodesOptions
  • added: property CreateVNodesOptions.wrapperStyle?: string
  • added: function fetchPathHtmlAndExtractOptions(e: H3Event, path: string, key: string): Promise<H3Error | DevToolsExtractPayload>
  • added: interface DevToolsExtractPayload
  • added: property DevToolsExtractPayload.options: OgImageOptionsInternal[]
  • added: property DevToolsExtractPayload.socialPreview: { root: Record<string, string>; images: DevToolsMetaDataExtraction[] }
  • added: function fontFormat(src: string): FontFormat
  • added: function selectFontSource(f: { src: string; satoriSrc?: string }, supportedFormats: Set<FontFormat>): { src: string; isStaticFallback: boolean } | null
  • added: type FontFormat = 'ttf' | 'otf' | 'woff' | 'woff2'
  • added: function buildSubsetFamilyChain(fonts: RuntimeFontConfig[]): Map<string, string[]>
  • added: function renameSubsetFonts(fonts: RuntimeFontConfig[]): RuntimeFontConfig[]
  • added: function resolveSubsetChain(family: string, chains: Map<string, string[]>): string[] | undefined
  • added: export { buildSubsetFamilyChain } from './font-subsets'
  • added: export { codepointsIntersectRanges } from './unicode-range'
  • added: export { extractCodepoints } from './unicode-range'
  • added: export { parseUnicodeRange } from './unicode-range'
  • added: export { renameSubsetFonts } from './font-subsets'
  • added: export { resolveSubsetChain } from './font-subsets'
  • added: function getDefaultFontFamily(options: { props?: Record<string, any> }): { fontFamilyOverride: string | undefined; defaultFont: string | undefined }
  • added: function loadAllFonts(event: H3Event, options: LoadFontsOptions): Promise<RuntimeFontConfig[]>
  • added: function loadAllFontsDebug(component?: string): { component: string | undefined; componentReqs: { families: any; weights: any; hasDynamicBindings: any } | null; globalReqs: { families: any; weights: any }; componentFontMapKeys: string[]; resolvedFontFamilies: string[] }
  • added: function loadDefinedFonts(event: OgImageRenderEventContext, fontDefs: any[]): Promise<RuntimeFontConfig[]>
  • added: function loadFontsForRenderer(event: OgImageRenderEventContext, options: LoadFontsForRendererOptions): Promise<RuntimeFontConfig[]>
  • added: interface LoadFontsForRendererOptions extends LoadFontsOptions
  • added: interface LoadFontsOptions
  • added: property LoadFontsForRendererOptions.fontDefs?: any[]
  • added: property LoadFontsOptions.codepoints?: Set<number>
  • added: property LoadFontsOptions.component?: string
  • added: property LoadFontsOptions.fontFamilyOverride?: string
  • added: property LoadFontsOptions.supportedFormats: Set<FontFormat>
  • removed: function useChromiumRenderer(): Promise<import('../../types.js').Renderer>
  • removed: function useSatoriRenderer(): Promise<import('../../types.js').Renderer>
  • added: function getBrowserRenderer(): Promise<import('../../types.js').Renderer>
  • added: function getSatoriRenderer(): Promise<import('../../types.js').Renderer>
  • added: function getTakumiRenderer(): Promise<import('../../types.js').Renderer>
  • removed: const assets: import('unstorage').Storage<any>
  • removed: function loadFont({ e, publicStoragePath }: OgImageRenderEventContext, font: ResolvedFontConfig): Promise<ResolvedFontConfig>
  • removed: function useCssInline(): Promise<any>
  • removed: function useResvg(): Promise<new (svg: Uint8Array | string, options?: import('@resvg/resvg-wasm').ResvgRenderOptions) => { free(): void; render(): { free(): void; asPng(): Uint8Array; readonly height: number; readonly pixels: Uint8Array; readonly width: number }; toString(): string; innerBBox(): { free(): void; height: number; width: number; x: number; y: number } | undefined; getBBox(): { free()…
  • removed: function useSatori(): Promise<typeof _satori>
  • removed: function useSharp(): Promise<typeof _sharp>
  • added: function getResvg(): Promise<any>
  • added: function getSatori(): Promise<typeof _satori>
  • added: function getSharp(): Promise<import('sharp').SharpConstructor>
  • changed: const _default: import('../../../../types.js').SatoriTransformer | import('../../../../types.js').SatoriTransformer[] → const _default: import('../../../../types.js').VNodeTransformer | import('../../../../types.js').VNodeTransformer[]
  • changed: const _default: import('../../../../types.js').SatoriTransformer | import('../../../../types.js').SatoriTransformer[] → const _default: import('../../../../types.js').VNodeTransformer | import('../../../../types.js').VNodeTransformer[]
  • removed: const _default: import('../../../../types.js').SatoriTransformer | import('../../../../types.js').SatoriTransformer[]
  • removed: default _default
  • changed: const _default: import('../../../../types.js').SatoriTransformer | import('../../../../types.js').SatoriTransformer[] → const _default: import('../../../../types.js').VNodeTransformer | import('../../../../types.js').VNodeTransformer[]
  • removed: const _default: import('../../../../types.js').SatoriTransformer | import('../../../../types.js').SatoriTransformer[]
  • removed: default _default
  • changed: const _default: import('../../../../types.js').SatoriTransformer | import('../../../../types.js').SatoriTransformer[] → const _default: import('../../../../types.js').VNodeTransformer | import('../../../../types.js').VNodeTransformer[]
  • removed: const _default: import('../../../../types.js').SatoriTransformer | import('../../../../types.js').SatoriTransformer[]
  • removed: default _default
  • changed: function createSvg(event: OgImageRenderEventContext): Promise<string | void> → function createSvg(event: OgImageRenderEventContext): Promise<{ svg: string | void; warnings: string[]; fonts: RuntimeFontConfig[] }>
  • removed: function applyEmojis(ctx: OgImageRenderEventContext, island: NuxtIslandResponse): Promise<string | boolean>
  • removed: function applyInlineCss(ctx: OgImageRenderEventContext, island: NuxtIslandResponse): Promise<boolean>
  • removed: function defineSatoriTransformer(transformer: SatoriTransformer | SatoriTransformer[]): SatoriTransformer | SatoriTransformer[]
  • removed: function walkSatoriTree(e: OgImageRenderEventContext, node: VNode, plugins: (SatoriTransformer | SatoriTransformer[])[]): (void | Promise<void>)[]
  • added: export { SVG_CAMEL_ATTR_VALUES } from '../core/vnodes'
  • added: export { htmlToVNode } from '../core/vnodes'
  • added: export { resolveSvgDimension } from '../core/vnodes'
  • added: export { warnUnsupportedSvgElements } from '../core/vnodes'
  • added: function getExtractResourceUrls(): Promise<(node: Node) => string[] | Promise<string[]>>
  • added: function getTakumi(): Promise<any>
  • added: function createTakumiNodes(ctx: OgImageRenderEventContext): Promise<Node>
  • added: function vnodeToTakumiNode(vnode: VNode, inheritedColor?: string): Promise<Node>
  • added: const TakumiRenderer: Renderer
  • added: default TakumiRenderer
  • added: function codepointsIntersectRanges(codepoints: Set<number>, ranges: [number, number][]): boolean
  • added: function extractCodepoints(node: VNode | Record<string, any>): Set<number>
  • added: function parseUnicodeRange(range: string): [number, number][] | null
  • added: const GRADIENT_COLOR_SPACE_RE: RegExp
  • added: function resolveColorMix(value: string): string
  • added: function splitCssDeclarations(style: string): string[]
  • added: function stripGradientColorSpace(value: string): string
  • added: function getImageDimensions(data: Uint8Array): { width?: number; height?: number }
  • removed: const _default: import('nitropack').NitroAppPlugin
  • removed: default _default
  • added: const _default: any
  • added: default _default
  • removed: const _default: import('nitropack').NitroAppPlugin
  • removed: default _default
  • changed: const _default: import('nitropack').NitroAppPlugin → const _default: any
  • removed: const _default: import('h3').EventHandler<import('h3').EventHandlerRequest, Promise<any>>
  • removed: default _default
  • changed: const _default: import('h3').EventHandler<import('h3').EventHandlerRequest, Promise<any>> → const _default: any
  • changed: const _default: import('h3').EventHandler<import('h3').EventHandlerRequest, Promise<{ siteConfigUrl: string; componentNames: any; runtimeConfig: import('../../types.js').OgIma… → const _default: any
  • removed: const _default: import('h3').EventHandler<import('h3').EventHandlerRequest, Promise<any>>
  • removed: default _default
  • changed: const _default: import('h3').EventHandler<import('h3').EventHandlerRequest, Promise<any>> → const _default: any
  • added: const _default: any
  • added: default _default
  • added: function autoEjectCommunityTemplate(component: OgImageComponent, runtimeConfig: OgImageRuntimeConfig): void
  • changed: function useOgImageBufferCache(ctx: OgImageRenderEventContext, options: { baseCacheKey: string | false; cacheMaxAgeSeconds?: number }): Promise<void | H3Error | { cachedItem: false | BufferSource; enabled: boolean; update: (image: BufferSource | Buffer | Uint8Array) => Promise<void> }> → function useOgImageBufferCache(ctx: OgImageRenderEventContext, options: { baseCacheKey: string | false; cacheMaxAgeSeconds?: number; purge?: boolean }): Promise<void | { cachedItem: false | BufferSource; enabled: boolean; update: (image: BufferSource | Buffer | Uint8Array) => Promise<void> }>
  • added: function getCloudflareEnv(event?: H3Event): CloudflareEnv | undefined
  • added: type CloudflareEnv = Record<string, unknown>
  • added: function getCloudflareAssets(event: H3Event): AssetsBinding | undefined
  • added: function tryCloudflareAssetsFetch(event: H3Event, path: string, signal?: AbortSignal): Promise<ArrayBuffer | undefined>
  • removed: function decodeObjectHtmlEntities(obj: Record<string, string | any>): Record<string, any>
  • removed: function fontEventHandler(e: H3Event): Promise<any>
  • added: function fetchLocalAsset(event: H3Event, path: string, options: FetchLocalAssetOptions): Promise<ArrayBuffer | undefined>
  • added: interface FetchLocalAssetOptions
  • added: property FetchLocalAssetOptions.fetchTimeout: number
  • added: property FetchLocalAssetOptions.headers?: Record<string, string>
  • added: property FetchLocalAssetOptions.includeExternalFallback?: boolean
  • added: property FetchLocalAssetOptions.onStepFailure?: (url: string, err: unknown) => void
  • added: function getFetchTimeout(runtimeConfig: OgImageRuntimeConfig): number
  • removed: function withoutQuery(path: string): string | undefined
  • changed: function createNitroRouteRuleMatcher(): ((path: string) => NitroRouteRules) → function createNitroRouteRuleMatcher(): ((path: string) => OgImageRouteRules)
  • changed: function fetchIsland(e: H3Event, component: string, props: Record<string, any>): Promise<NuxtIslandResponse> → function fetchIsland(e: H3Event, component: string, props: Record<string, any>, timeout?: number): Promise<NuxtIslandResponse>
  • changed: function normaliseOptions(_options: DefineOgImageInput): OgImageOptions | OgImagePrebuilt → function normaliseOptions(_options: DefineOgImageInput): NormalisedOptions
  • added: interface NormalisedOptions
  • added: property NormalisedOptions.component?: OgImageComponent
  • added: property NormalisedOptions.options: OgImageOptionsInternal | OgImagePrebuilt
  • added: property NormalisedOptions.renderer: RendererType
  • removed: function nuxtContentPlugin(nitroApp: NitroApp): void
  • added: function parsePurgeRequest(value: unknown, secret: string | false | undefined): PurgeRequest
  • added: type PurgeRequest = { _tag: 'None' } | { _tag: 'Authorized' } | { _tag: 'Denied' }
  • added: function getEventQuery(event: H3Event): import('ufo').ParsedQuery
  • added: function expandIPv6(addr: string): number[] | null
  • added: function fetchWithRedirectValidation(initialUrl: string, opts: SafeFetchOptions): Promise<ArrayBuffer | null>
  • added: function isBlockedAddress(address: string): boolean
  • added: function isBlockedUrl(url: string): boolean
  • added: function parseSameOriginPath(input: unknown): SameOriginPathResult
  • added: function resolveSameOriginUrl(path: string, origin: string | undefined): string | null
  • added: interface SafeFetchOptions
  • added: property SafeFetchOptions.headers?: Record<string, string>
  • added: property SafeFetchOptions.signal?: AbortSignal
  • added: property SafeFetchOptions.timeout: number
  • added: property SafeFetchOptions.trustedHost?: string
  • added: type SameOriginPath = string & { readonly [sameOriginPathBrand]: true }
  • added: type SameOriginPathResult = { _tag: 'Ok'; value: SameOriginPath } | { _tag: 'Err'; reason: string }
  • added: function toStorageKey(namespace: StorageKeyNamespace, identity: unknown): StorageKey
  • added: type StorageKey = string & { readonly [storageKeyBrand]: true }
  • added: type StorageKeyNamespace = 'image' | 'devtools' | 'emoji' | 'prerender'
  • added: const TIMING_CTX_KEY = '_ogImageTimings'
  • added: function createTimings(): Timings
  • added: interface TimingEntry
  • added: interface Timings
  • added: property TimingEntry.count?: number
  • added: property TimingEntry.dur: number
  • added: property TimingEntry.name: string
  • added: property Timings.entries: () => TimingEntry[]
  • added: property Timings.header: () => string
  • added: property Timings.measure: <T>(name: string, fn: () => Promise<T> | T) => Promise<T>
  • added: property Timings.record: (name: string, ms: number) => void
  • added: property Timings.start: (name: string) => () => number
  • added: function withTimeout<T>(promise: Promise<T> | T, ms: number, label: string): Promise<T>
  • changed: function getOgImagePath(pagePath: string, _options?: Partial<OgImageOptions>): string → function getOgImagePath(event: H3Event, _pagePath: string, _options?: Partial<OgImageOptionsInternal>): GetOgImagePathResult
  • added: interface GetOgImagePathResult
  • added: property GetOgImagePathResult.hash?: string
  • added: property GetOgImagePathResult.path: string
  • removed: function normaliseFontInput(fonts: InputFontConfig[]): ResolvedFontConfig[]
  • removed: function toBase64Image(data: string | ArrayBuffer): string
  • removed: function useOgImageRuntimeConfig(): {}
  • changed: function generateMeta(url: OgImagePrebuilt['url'] | string, resolvedOptions: OgImageOptions | OgImagePrebuilt): ResolvableMeta[] → function generateMeta(url: OgImagePrebuilt['url'] | string, resolvedOptions: OgImageOptions | OgImagePrebuilt, metaOptions?: GenerateMetaOptions): ResolvableMeta[]
  • changed: function separateProps(options: OgImageOptions | undefined, ignoreKeys?: string[]): { props: Record<string, any> } → function separateProps(options: OgImageOptions | undefined, ignoreKeys?: string[]): OgImageOptions
  • added: export { buildOgImageUrl } from './shared/urlEncoding'
  • added: export { decodeOgImageParams } from './shared/urlEncoding'
  • added: export { encodeOgImageParams } from './shared/urlEncoding'
  • added: export { extractEncodedSegment } from './shared/urlEncoding'
  • added: export { extractSocialPreviewTags } from './pure'
  • added: export { hashOgImageOptions } from './shared/urlEncoding'
  • added: export { parseOgImageUrl } from './shared/urlEncoding'
  • added: export { signEncodedParams } from './shared/urlEncoding'
  • added: export { toBase64Image } from './pure'
  • added: export { verifyOgImageSignature } from './shared/urlEncoding'
  • added: function sanitizeProps(props: Record<string, any>): Record<string, any>
  • added: interface GenerateMetaOptions
  • added: property GenerateMetaOptions.includeTwitter?: boolean
  • added: function hashKey(value: unknown): string
  • added: function buildOgImageUrl(options: Record<string, any>, extension?: string, isStatic?: boolean, defaults?: Record<string, any>, secret?: string): BuildOgImageUrlResult
  • added: function decodeOgImageParams(encoded: string): Record<string, any>
  • added: function digestCanonical(value: unknown): string
  • added: function encodeOgImageParams(options: Record<string, any>, defaults?: Record<string, any>): string
  • added: function extractEncodedSegment(path: string, extension: string): string
  • added: function hashOgImageOptions(options: Record<string, any>, componentHash?: string, version?: string): string
  • added: function parseOgImageUrl(url: string): { options: Record<string, any>; extension: string; isStatic: boolean; hash?: string }
  • added: function signEncodedParams(encoded: string, secret: string): string
  • added: function verifyOgImageSignature(encoded: string, signature: string, secret: string): boolean
  • added: interface BuildOgImageUrlResult
  • added: property BuildOgImageUrlResult.hash?: string
  • added: property BuildOgImageUrlResult.url: string
  • removed: interface ResolvedFontConfig extends FontConfig
  • removed: interface SatoriTransformer
  • removed: property FontConfig.key?: string
  • removed: property FontConfig.name: string
  • removed: property FontConfig.path?: string
  • removed: property OgImageOptions.component?: T | string
  • removed: property OgImageOptions.renderer?: 'chromium' | 'satori'
  • removed: property OgImageRenderEventContext.isDebugJsonPayload: boolean
  • removed: property OgImageRenderEventContext.unocss: UnoGenerator
  • removed: property OgImageRuntimeConfig.fonts: FontConfig[]
  • removed: property OgImageRuntimeConfig.strictNuxtContentPaths: boolean
  • removed: property ResolvedFontConfig.cacheKey: string
  • removed: property ResolvedFontConfig.data?: BufferSource
  • removed: property RuntimeCompatibilitySchema.chromium: 'chrome-launcher' | 'on-demand' | 'playwright' | false
  • removed: property RuntimeCompatibilitySchema['css-inline']: 'node' | 'wasm' | 'wasm-fs' | false
  • removed: property SatoriTransformer.filter: (node: VNode) => boolean
  • removed: property SatoriTransformer.transform: (node: VNode, e: OgImageRenderEventContext) => Promise<void> | void
  • removed: type InputFontConfig = (`${string}:${number}` | `${string}:${'normal' | 'ital'}:${number}` | string | FontConfig)
  • removed: type VNode = ReturnType<typeof html>
  • changed: interface OgImageOptions<T extends keyof OgImageComponents = 'NuxtSeo'> → interface OgImageOptions
  • changed: property FontConfig.absolutePath?: boolean → property FontConfig.absolutePath?: string
  • changed: property FontConfig.style?: 'normal' | 'ital' → property FontConfig.style: 'normal' | 'italic'
  • changed: property FontConfig.weight?: string | number → property FontConfig.weight: number
  • changed: property OgImageOptions.emojis?: IconifyEmojiIconSets → property OgImageOptions.emojis?: IconifyEmojiIconSets | false
  • changed: property OgImageOptions.extension?: 'png' | 'jpeg' | 'jpg' → property OgImageOptions.extension?: 'png' | 'jpeg' | 'jpg' | 'webp' | 'svg' | 'html'
  • changed: property OgImageOptions.fonts?: InputFontConfig[] → property OgImageOptions.fonts?: any
  • changed: property OgImageOptions.props?: OgImageComponents[T] | Record<string, any> → property OgImageOptions.props?: Record<string, any>
  • changed: property OgImageRenderEventContext._nitro: NitroApp → property OgImageRenderEventContext._nitro: ReturnType<typeof import('#nuxtseo/nitro').useNitroApp>
  • changed: property OgImageRenderEventContext.basePath: string → property OgImageRenderEventContext.basePath: SameOriginPath
  • changed: property OgImageRenderEventContext.extension: 'png' | 'jpeg' | 'jpg' | 'svg' | 'html' | 'json' → property OgImageRenderEventContext.extension: 'png' | 'jpeg' | 'jpg' | 'webp' | 'svg' | 'html' | 'json'
  • changed: property OgImageRenderEventContext.options: OgImageOptions → property OgImageRenderEventContext.options: OgImageOptionsInternal
  • changed: property OgImageRuntimeConfig.defaults: OgImageOptions → property OgImageRuntimeConfig.defaults: Omit<OgImageOptions, 'component' | 'renderer' | 'props' | 'url' | 'html' | 'key' | 'cacheKey' | '_query' | '_hash' | 'socialPreview'>
  • changed: property Renderer.name: 'chromium' | 'satori' → property Renderer.name: 'browser' | 'satori' | 'takumi'
  • changed: property RuntimeCompatibilitySchema.resvg: 'node' | 'wasm' | 'wasm-fs' | false → property RuntimeCompatibilitySchema.resvg: 'node' | 'node-dev' | 'wasm' | 'wasm-fs' | 'wasm-edge' | false
  • changed: property RuntimeCompatibilitySchema.satori: 'node' | 'wasm' | 'wasm-fs' | false → property RuntimeCompatibilitySchema.satori: 'node' | 'wasm' | 'wasm-fs' | 'wasm-edge' | false
  • changed: property RuntimeCompatibilitySchema.wasm?: NitroOptions['wasm'] → property RuntimeCompatibilitySchema.wasm?: any
  • changed: type DefineOgImageInput = OgImageOptions | OgImagePrebuilt | false → type DefineOgImageInput = OgImageOptionsInternal | OgImagePrebuilt | false
  • changed: type OgImagePageScreenshotOptions = Omit<OgImageOptions, 'html' | 'renderer' | 'component' | 'satori' | 'resvg' | 'sharp'> → type OgImagePageScreenshotOptions = Omit<OgImageOptions, 'html' | 'component' | 'satori' | 'resvg' | 'sharp' | 'screenshot'> & Omit<ScreenshotOptions, 'width' | 'height' | 'delay'> & { delay?: nu…
  • added: interface DevToolsMetaDataExtraction
  • added: interface OgImageIconsData
  • added: interface OgImageOptionsInternal extends OgImageOptions
  • added: interface RuntimeCompatibilityMeta
  • added: interface RuntimeFontConfig extends FontConfig
  • added: interface VNode
  • added: interface VNodeTransformer
  • added: property DevToolsMetaDataExtraction.key: string
  • added: property DevToolsMetaDataExtraction.og?: Record<string, string>
  • added: property DevToolsMetaDataExtraction.twitter?: Record<string, string>
  • added: property FontConfig.fallback?: boolean
  • added: property FontConfig.family: string
  • added: property FontConfig.localPath: string
  • added: property FontConfig.satoriSrc?: string
  • added: property FontConfig.src: string
  • added: property FontConfig.unicodeRange?: string
  • added: property FontConfig.weightRange?: [number, number]
  • added: property OgImageComponent.propNames?: string[]
  • added: property OgImageComponent.renderer: RendererType
  • added: property OgImageIconsData.height: number
  • added: property OgImageIconsData.icons: Record<string, { body: string; width?: number; height?: number }>
  • added: property OgImageIconsData.width: number
  • added: property OgImageOptions._hash?: string
  • added: property OgImageOptions.cacheKey?: string
  • added: property OgImageOptions.key?: string
  • added: property OgImageOptions.takumi?: { format?: 'png' | 'jpeg' | 'webp'; images?: Array<{ src: string; data: ArrayBuffer | Uint8Array }>; fetchedResources?: Array<{ src: string; data: ArrayBuffer | Uint8Array }>; persistentImages?: Array<{ src: string; data: ArrayBuffer }>; devicePixelRatio?: number }
  • added: property OgImageOptionsInternal.component?: string
  • added: property OgImageOptionsInternal.renderer?: RendererType
  • added: property OgImageRenderEventContext.isDevToolsContextRequest: boolean
  • added: property OgImageRenderEventContext.timings: Timings
  • added: property OgImageRuntimeConfig.browser?: { provider?: BrowserProvider; binding?: string }
  • added: property OgImageRuntimeConfig.browserEnabled: boolean
  • added: property OgImageRuntimeConfig.buildCacheDir?: string
  • added: property OgImageRuntimeConfig.communityTemplatesDir?: string
  • added: property OgImageRuntimeConfig.cssFramework: 'tailwind' | 'unocss' | 'none'
  • added: property OgImageRuntimeConfig.hasNuxtContent?: boolean
  • added: property OgImageRuntimeConfig.includeTwitter: boolean
  • added: property OgImageRuntimeConfig.rootDir?: string
  • added: property OgImageRuntimeConfig.security: { maxDimension: number; maxDpr: number; renderTimeout: number; imageFetchTimeout: number; maxQueryParamSize: number | null; restrictRuntimeImagesToOrigin: false | string[]; secret: string; strict: boolean }
  • added: property OgImageRuntimeConfig.srcDir?: string
  • added: property RuntimeCompatibilityMeta.takumiVersion?: 1 | 2
  • added: property RuntimeCompatibilitySchema.browser: 'chrome-launcher' | 'on-demand' | 'playwright' | 'cloudflare' | false
  • added: property RuntimeCompatibilitySchema.emoji?: 'local' | 'fetch'
  • added: property RuntimeCompatibilitySchema.fetch?: 'node' | 'web'
  • added: property RuntimeCompatibilitySchema.takumi: 'node' | 'node-dev' | 'wasm' | false
  • added: property RuntimeFontConfig.cacheKey: string
  • added: property RuntimeFontConfig.data: BufferSource
  • added: property RuntimeFontConfig.originalFamily?: string
  • added: property VNode._emojiMatches?: RegExpMatchArray | null
  • added: property VNode.props: { style?: Record<string, any>; children?: string | (VNode | string | null)[]; [key: string]: any }
  • added: property VNode.type: string
  • added: property VNodeTransformer.filter: (node: VNode) => boolean
  • added: property VNodeTransformer.transform: (node: VNode, e: OgImageRenderEventContext) => Promise<void> | void
  • added: type BrowserConfig = boolean | { provider: BrowserProvider; binding?: string }
  • added: type BrowserProvider = 'playwright' | 'chrome-launcher' | 'on-demand' | 'cloudflare'
  • added: type EmojiStrategy = 'auto' | 'local' | 'fetch'
  • added: type ReactiveComponentProps<T extends Component> = { [K in keyof ExtractComponentProps<T>]?: MaybeRefOrGetter<ExtractComponentProps<T>[K]> }
  • added: type RendererType = 'satori' | 'browser' | 'takumi'
  • added: type RuntimeCompatibilityPayload = Partial<Omit<RuntimeCompatibilitySchema, 'wasm'>> & RuntimeCompatibilityMeta
  • added: export { OgImageComponent } from '../dist/runtime/types'
  • added: export { OgImageOptions } from '../dist/runtime/types'
  • added: export { OgImageRenderEventContext } from '../dist/runtime/types'
  • added: export { OgImageRuntimeConfig } from '../dist/runtime/types'
  • added: export { RuntimeCompatibilitySchema } from '../dist/runtime/types'
  • added: export { VNode } from '../dist/runtime/types'
  • removed: declare module '#og-image/bindings/chromium'
  • removed: declare module '#og-image/bindings/css-inline'
  • removed: declare module '#og-image/renderers/chromium'
  • removed: declare module '@css-inline/css-inline-wasm'
  • added: declare module '#nuxtseo/h3'
  • added: declare module '#nuxtseo/nitro'
  • added: declare module '#og-image/bindings/browser'
  • added: declare module '#og-image/bindings/fetch'
  • added: declare module '#og-image/font-requirements'
  • added: declare module '#og-image/harfbuzz-adapter'
  • added: declare module '#og-image/harfbuzz-callbacks'
  • added: declare module '#og-image/harfbuzz-factory'
  • added: declare module '#og-image/island-hash'
  • added: declare module '#og-image/nitro-fetch'
  • added: declare module '#og-image/renderers/browser'