UNPKG

@pinia/nuxt

Version:
60 lines (57 loc) 2.02 kB
import { defineNuxtModule, createResolver, isNuxtMajorVersion, resolveModule, addPlugin, addImports, addImportsDir } from '@nuxt/kit'; import { fileURLToPath } from 'node:url'; const module = defineNuxtModule({ meta: { name: "pinia", configKey: "pinia", compatibility: { nuxt: "^2.0.0 || >=3.0.0-rc.5", bridge: true } }, defaults: { disableVuex: true }, setup(options, nuxt) { const { resolve } = createResolver(import.meta.url); const runtimeDir = fileURLToPath(new URL("./runtime", import.meta.url)); if (nuxt.options.features && // ts options.disableVuex && isNuxtMajorVersion(2, nuxt)) { nuxt.options.features.store = false; } nuxt.options.build.transpile.push(resolve(runtimeDir)); if (isNuxtMajorVersion(2, nuxt)) { nuxt.options.alias.pinia = nuxt.options.alias.pinia || // FIXME: remove this deprecated call. Ensure it works in Nuxt 2 to 3 resolveModule("pinia/dist/pinia.mjs", { paths: [nuxt.options.rootDir, import.meta.url] }); } nuxt.hook("prepare:types", ({ references }) => { references.push({ types: "@pinia/nuxt" }); }); nuxt.hook("modules:done", () => { if (isNuxtMajorVersion(2, nuxt)) { addPlugin(resolve(runtimeDir, "plugin.vue2")); } else { addPlugin(resolve(runtimeDir, "plugin.vue3")); addPlugin(resolve(runtimeDir, "payload-plugin")); } }); const composables = resolve(runtimeDir, "composables"); addImports([ { from: composables, name: "defineStore" }, { from: composables, name: "acceptHMRUpdate" }, { from: composables, name: "usePinia" }, { from: composables, name: "storeToRefs" } ]); if (!options.storesDirs) { options.storesDirs = [resolve(nuxt.options.srcDir, "stores")]; } if (options.storesDirs) { for (const storeDir of options.storesDirs) { addImportsDir(resolve(nuxt.options.rootDir, storeDir)); } } } }); export { module as default };