]> git.ipfire.org Git - thirdparty/vuejs/pinia.git/commitdiff
refactor(nuxt): wip nuxt plugin
authorEduardo San Martin Morote <posva13@gmail.com>
Fri, 13 Aug 2021 18:38:29 +0000 (20:38 +0200)
committerEduardo San Martin Morote <posva13@gmail.com>
Fri, 13 Aug 2021 18:38:29 +0000 (20:38 +0200)
nuxt/index.ts
nuxt/plugin.ts
nuxt/types.d.ts [new file with mode: 0644]

index de4df0f0000f7a9a207e8bc7ba3f4f1d303ce609..cad20570f5653e7e1b96f3e9c18d3155110cf520 100644 (file)
@@ -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<PiniaNuxtOptions>({
 
     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 &&
index e25ad6dc0ba00d4666ad3f51de7ccffa6c0de32f..e365e3f239ac5501a5a5354506de28c2ad7d96f9 100644 (file)
@@ -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 (file)
index 0000000..a0539a8
--- /dev/null
@@ -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
+  }
+}