UNPKG

vike

Version:

The Framework *You* Control - Next.js & Nuxt alternative for unprecedented flexibility and dependability.

41 lines (40 loc) 1.94 kB
import '../assertEnvClient.js'; export { getPageContextPublicClientShared }; export { getPageContextPublicClientMinimal }; import { objectAssign } from '../../utils/objectAssign.js'; import { assertPropertyGetters, getPageContextPublicShared, } from '../../shared-server-client/getPageContextPublicShared.js'; function getPageContextPublicClientShared(pageContext) { // TO-DO/soon/proxy: use proxy const Page = pageContext.config?.Page || // TO-DO/next-major-release: remove pageContext.exports?.Page; objectAssign(pageContext, { Page }); // TO-DO/next-major-release: after we remove supportVueReactiviy() we can call this later inside the agnostic getPageContextPublicShared() assertPropertyGetters(pageContext); // TO-DO/next-major-release: remove // - Requires https://github.com/vikejs/vike-vue/issues/198 // - Last time I tried to remove it (https://github.com/vikejs/vike/commit/705fd23598d9d69bf46a52c8550216cd7117ce71) the tests were failing as expected: only the Vue integrations that used shallowReactive() failed. supportVueReactiviy(pageContext); return getPageContextPublicClientMinimal(pageContext); } function getPageContextPublicClientMinimal(pageContext) { const pageContextPublic = getPageContextPublicShared(pageContext); return pageContextPublic; } // With Vue + Client Routing, the `pageContext` is made reactive: // ```js // import { reactive } from 'vue' // // See /examples/vue-full/renderer/createVueApp.ts // const pageContextReactive = reactive(pageContext) // ``` function supportVueReactiviy(pageContext) { resolveGetters(pageContext); } // Remove property descriptor getters because they break Vue's reactivity. // E.g. resolve the `pageContext.urlPathname` getter. function resolveGetters(pageContext) { Object.entries(pageContext).forEach(([key, val]) => { delete pageContext[key]; pageContext[key] = val; }); }