diff --git a/packages/bridge/src/runtime/composables.ts b/packages/bridge/src/runtime/composables.ts index 4a4f568eca..1476a5a017 100644 --- a/packages/bridge/src/runtime/composables.ts +++ b/packages/bridge/src/runtime/composables.ts @@ -26,7 +26,7 @@ export const useRuntimeConfig = () => { const nuxtApp = useNuxtApp() if (!nuxtApp.$config) { const runtimeConfig = reactive(nuxtApp.nuxt2Context.app.$config) - const copatibilityConfig = new Proxy(runtimeConfig, { + const compatibilityConfig = new Proxy(runtimeConfig, { get (target, prop) { if (prop === 'public') { return target.public @@ -42,8 +42,8 @@ export const useRuntimeConfig = () => { return true } }) - nuxtApp.provide('config', copatibilityConfig) - nuxtApp.$config = copatibilityConfig + nuxtApp.provide('config', compatibilityConfig) + nuxtApp.$config = compatibilityConfig } return nuxtApp.$config as RuntimeConfig } diff --git a/packages/nuxt3/src/app/nuxt.ts b/packages/nuxt3/src/app/nuxt.ts index 8cee287fef..10c247d681 100644 --- a/packages/nuxt3/src/app/nuxt.ts +++ b/packages/nuxt3/src/app/nuxt.ts @@ -118,35 +118,39 @@ export function createNuxtApp (options: CreateOptions) { nuxtApp.ssrContext.payload = nuxtApp.payload } - // Expose runtime config + // Expose client runtime-config to the payload if (process.server) { - nuxtApp.provide('config', options.ssrContext.runtimeConfig) - // Client's runtime-config nuxtApp.payload.config = { public: options.ssrContext.runtimeConfig.public, app: options.ssrContext.runtimeConfig.app } - } else { - const runtimeConfig = reactive(nuxtApp.payload.config) - const copatibilityConfig = new Proxy(runtimeConfig, { - get (target, prop) { - if (prop === 'public') { - return target.public - } - return target[prop] ?? target.public[prop] - }, - set (target, prop, value) { - if (prop === 'public' || prop === 'app') { - return false // Throws TypeError - } - target[prop] = value - target.public[prop] = value - return true - } - }) - nuxtApp.provide('config', copatibilityConfig) } + // Expose runtime config + const runtimeConfig = process.server + ? options.ssrContext.runtimeConfig + : reactive(nuxtApp.payload.config) + + // Backward compatibilty following #4254 + const compatibilityConfig = new Proxy(runtimeConfig, { + get (target, prop) { + if (prop === 'public') { + return target.public + } + return target[prop] ?? target.public[prop] + }, + set (target, prop, value) { + if (process.server || prop === 'public' || prop === 'app') { + return false // Throws TypeError + } + target[prop] = value + target.public[prop] = value + return true + } + }) + + nuxtApp.provide('config', compatibilityConfig) + return nuxtApp }