@pinia/nuxt
Version:
Nuxt Module for pinia
60 lines (57 loc) • 2.02 kB
JavaScript
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 };