feat!: extend the SEO layer and drop the copied purge route
- extend vue-seo-layer (link dependency during development); every page takes its head from the SEO plugin through it - remove the copied shared purge route, library, plugin and their test: POST /api/__site__/cache/purge comes from vue-seo-layer with the same contract and environment variables - the page-less playground sets seo.htmlSitemap false; the smoke points NUXT_SEO_API_BASE at the fixture API (fails open) BREAKING CHANGE: server/api/__site__/cache/purge.post.ts, server/lib/siteCachePurge.ts and server/plugins/site-cache-purge.ts are no longer in this layer, and the runtime keys cachePurge and siteCache are declared by vue-seo-layer. An app without pages sets seo.htmlSitemap false.
This commit is contained in:
@@ -4,7 +4,9 @@
|
||||
//
|
||||
// Every path below is absolute and built from this file's directory: a
|
||||
// relative or ~ path in a layer config resolves against the consuming
|
||||
// project, not the layer. The layer declares no Nuxt modules.
|
||||
// project, not the layer. The layer declares no Nuxt modules; it extends
|
||||
// vue-seo-layer, which owns the page head and the shared site cache purge
|
||||
// route POST /api/__site__/cache/purge.
|
||||
import { fileURLToPath } from 'node:url'
|
||||
|
||||
const currentDir = fileURLToPath(new URL('.', import.meta.url))
|
||||
@@ -13,6 +15,9 @@ export default defineNuxtConfig({
|
||||
compatibilityDate: '2025-07-15',
|
||||
devtools: { enabled: false },
|
||||
|
||||
// Resolved from this layer's own node_modules.
|
||||
extends: ['vue-seo-layer'],
|
||||
|
||||
// Tokens first, then the neutral styles that use them. The app's own css
|
||||
// array loads after these, so its token overrides win.
|
||||
css: [`${currentDir}app/assets/css/faq-tokens.css`, `${currentDir}app/assets/css/faq-base.css`],
|
||||
@@ -23,31 +28,6 @@ export default defineNuxtConfig({
|
||||
// from request input.
|
||||
apiBase: 'http://127.0.0.1:8096/_faq/api/v1',
|
||||
},
|
||||
cachePurge: {
|
||||
// Server-only bearer token of the shared site cache purge route
|
||||
// POST /api/__site__/cache/purge (NUXT_CACHE_PURGE_TOKEN), the
|
||||
// backend's site_cache.purge_token. Shorter than 32 characters, the
|
||||
// route answers 404. Not under NUXT_SITE_: nuxt-site-config copies
|
||||
// every NUXT_SITE_* variable into the site config, which is published
|
||||
// in every page's payload.
|
||||
token: '',
|
||||
// NUXT_CACHE_PURGE_ALLOW_PROXIED: set it to true when the backend
|
||||
// reaches the site through a TLS-terminating proxy (an https
|
||||
// site_cache.purge_url on another host), which adds X-Forwarded-For,
|
||||
// X-Real-IP or Forwarded. The route then accepts proxied requests and
|
||||
// the bearer token is the only gate; unset, it answers 404 to any
|
||||
// proxied request.
|
||||
allowProxied: false,
|
||||
},
|
||||
// Deprecated (one release): the earlier names of cachePurge.token
|
||||
// (NUXT_SITE_CACHE_PURGE_TOKEN) and cachePurge.allowProxied
|
||||
// (NUXT_SITE_CACHE_ALLOW_PROXIED), read when the new ones are unset. The
|
||||
// layer's server/plugins/site-cache-purge.ts strips them from the site
|
||||
// config and logs a deprecation warning.
|
||||
siteCache: {
|
||||
purgeToken: '',
|
||||
allowProxied: false,
|
||||
},
|
||||
public: {
|
||||
faq: {
|
||||
// Same-origin base for browser fetches (NUXT_PUBLIC_FAQ_API_BASE).
|
||||
@@ -55,12 +35,4 @@ export default defineNuxtConfig({
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
// The shared site routes are never route-cached. Nitro wraps every
|
||||
// handler matching an app rule such as '/**': { swr } in its cached
|
||||
// handler, which keys by path, does not skip POST and hides request
|
||||
// headers, so the purge route would answer from the cache without running.
|
||||
routeRules: {
|
||||
'/api/__site__/**': { cache: false },
|
||||
},
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user