From: Eduardo San Martin Morote Date: Fri, 13 Aug 2021 18:38:29 +0000 (+0200) Subject: refactor(nuxt): wip nuxt plugin X-Git-Tag: @pinia/nuxt@0.0.1~45 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=48bc4c68aaca69765b5e1f8e8362a071b0781ac3;p=thirdparty%2Fvuejs%2Fpinia.git refactor(nuxt): wip nuxt plugin --- diff --git a/nuxt/index.ts b/nuxt/index.ts index de4df0f0..cad20570 100644 --- a/nuxt/index.ts +++ b/nuxt/index.ts @@ -1,6 +1,6 @@ // @ts-check import { resolve } from 'upath' -import { addPlugin, defineNuxtModule } from '@nuxt/kit' +import { addPlugin, defineNuxtModule, resolveModule } from '@nuxt/kit' export interface PiniaNuxtOptions { /** @@ -27,6 +27,10 @@ const module = defineNuxtModule({ addPlugin({ src: resolve(__dirname, 'plugin') }) + // Define pinia resolution to ensure plugins register global context successfully + nuxt.options.alias['pinia'] = + nuxt.options.alias['pinia'] || resolveModule('pinia') + // transpile pinia if @vue/composition-api is transpiled because we must use the same instance if ( !nuxt.options.dev && diff --git a/nuxt/plugin.ts b/nuxt/plugin.ts index e25ad6dc..e365e3f2 100644 --- a/nuxt/plugin.ts +++ b/nuxt/plugin.ts @@ -1,12 +1,21 @@ import { defineNuxtPlugin } from '@nuxt/app' -import { markRaw } from '@nuxt/app/node_modules/@vue/runtime-core' -import { createPinia, setActivePinia } from 'pinia' +import { markRaw, isVue2, Vue2 } from 'vue-demi' +import { createPinia, setActivePinia, PiniaPlugin } from 'pinia' -const PiniaPlugin = defineNuxtPlugin((nuxt) => { +if (isVue2) { + Vue2(PiniaPlugin) +} + +a._legacyContext + +const PiniaNuxtPlugin = defineNuxtPlugin((nuxt) => { const pinia = createPinia() - // if Vue 2, simulate new Vue({ pinia }) - nuxt.app.pinia = pinia + if (isVue2) { + // simulate new Vue({ pinia }) + nuxt._legacyContext.app.pinia = pinia + // nuxt.app.pinia = pinia + } // TODO: handle this once we know how to do it // add $pinia to the context @@ -20,9 +29,11 @@ const PiniaPlugin = defineNuxtPlugin((nuxt) => { if (process.server) { // beforeNuxt render set nuxtState.pinia = pinia.state.value + nuxt.payload.data.pinia = pinia.state.value } else { // set pinia.state.value = nuxtState.pinia + pinia.state.value = nuxt.payload.data.pinia } }) -export default PiniaPlugin +export default PiniaNuxtPlugin diff --git a/nuxt/types.d.ts b/nuxt/types.d.ts new file mode 100644 index 00000000..a0539a89 --- /dev/null +++ b/nuxt/types.d.ts @@ -0,0 +1,16 @@ +import '@nuxt/app' +import 'pinia' +import { Pinia } from 'pinia' + +// declare module '@nuxt/app' { +// export interface Context { +// pinia: Pinia +// $pinia: Pinia +// } +// } + +declare module 'pinia' { + export interface PiniaCustomProperties { + $nuxt: Context + } +}