From d5a50ad97ab6a0f302e305a7c78044abb679981f Mon Sep 17 00:00:00 2001 From: Harlan Wilton Date: Mon, 22 Aug 2022 18:08:42 +1000 Subject: [PATCH] feat(nuxt): add `schema-org:meta` hook --- packages/nuxt/src/module.ts | 7 +++++++ packages/nuxt/src/runtime/plugin.ts | 14 +++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/packages/nuxt/src/module.ts b/packages/nuxt/src/module.ts index 974da3a..8cdfcdb 100644 --- a/packages/nuxt/src/module.ts +++ b/packages/nuxt/src/module.ts @@ -10,6 +10,7 @@ import type { NuxtModule } from '@nuxt/schema' import { dirname } from 'pathe' import type { UserConfig } from '@vueuse/schema-org' import { AliasRuntimePluginVite, AliasRuntimePluginWebpack } from '@vueuse/schema-org-vite' +import type { MetaInput } from 'schema-org-graph-js' export interface ModuleOptions extends UserConfig {} @@ -17,6 +18,12 @@ export interface ModuleHooks { } +declare module 'nuxt' { + export interface RuntimeNuxtHooks { + 'schema-org:meta': (meta: MetaInput) => void + } +} + const Pkg = '@vueuse/schema-org' export default defineNuxtModule({ diff --git a/packages/nuxt/src/runtime/plugin.ts b/packages/nuxt/src/runtime/plugin.ts index 7d354c6..b531d5f 100644 --- a/packages/nuxt/src/runtime/plugin.ts +++ b/packages/nuxt/src/runtime/plugin.ts @@ -3,7 +3,7 @@ import { defineNuxtPlugin } from '#app' import { unref, watch } from '#imports' import config from '#build/nuxt-schema-org-config.mjs' -export default defineNuxtPlugin((nuxtApp) => { +export default defineNuxtPlugin(async (nuxtApp) => { const ssr = !!nuxtApp.ssrContext?.url const client = createSchemaOrg({ @@ -14,7 +14,7 @@ export default defineNuxtPlugin((nuxtApp) => { // computed so only need to be done once nuxtApp._useHead(unref(fn)) }, - meta() { + async meta() { const head = nuxtApp.vueApp._context.provides.usehead const inferredMeta: Record = {} @@ -22,25 +22,25 @@ export default defineNuxtPlugin((nuxtApp) => { if (headTag.length) inferredMeta.title = headTag[0].props.children - return { + const schemaOrgMeta = { path: nuxtApp._route.path, ...inferredMeta, ...nuxtApp._route.meta, ...config.meta || {}, } + await nuxtApp.hooks.callHook('schema-org:meta', schemaOrgMeta) + return schemaOrgMeta }, }) nuxtApp.vueApp.use(client) if (ssr) { - client.generateSchema() - client.setupDOM() + await client.forceRefresh() return } watch(() => nuxtApp._route.path, () => { - client.generateSchema() - client.setupDOM() + client.forceRefresh() }) })