Upgrading nuxt-og-image 5 to 6
Breaking5.1.13 → 6.10.4Breaking17Security13Deprecated3New30Changed24Fixed323Other16
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.
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).
What you must change
chromiumbrowsercss-inlinetakumi@takumi-rs/core@takumi-rs/wasmsatori@resvg/resvg-js@resvg/resvg-wasmplaywright-core@nuxt/fontsogImage.fontsfonts.familiesglobalMyTemplate.takumi.vueMyTemplate.satori.vueNuxtSeoSimpleBlog/__og-image__/image//_og/d//__og-image__/static//_og/s/fonts[].path URL parameterDeprecations to plan for
html option.htmlgetOgImagePathgetOgImagePathAPI changes
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'