plugin.js 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. import { defineNuxtPlugin, useRuntimeConfig } from "#app";
  2. import { destr } from "destr";
  3. import { createPersistence } from "./core.js";
  4. import { storages } from "./storages.js";
  5. function piniaPlugin(context) {
  6. const config = useRuntimeConfig();
  7. const options = config.public.piniaPluginPersistedstate;
  8. createPersistence(
  9. context,
  10. (p) => ({
  11. key: options.key ? options.key.replace(/%id/g, p.key ?? context.store.$id) : p.key ?? context.store.$id,
  12. debug: p.debug ?? options.debug ?? false,
  13. serializer: p.serializer ?? {
  14. serialize: (data) => JSON.stringify(data),
  15. deserialize: (data) => destr(data)
  16. },
  17. storage: p.storage ?? (options.storage ? options.storage === "cookies" ? storages.cookies(options.cookieOptions) : storages[options.storage]() : storages.cookies()),
  18. beforeHydrate: p.beforeHydrate,
  19. afterHydrate: p.afterHydrate,
  20. pick: p.pick,
  21. omit: p.omit
  22. }),
  23. options.auto ?? false
  24. );
  25. }
  26. export default defineNuxtPlugin({
  27. name: "pinia-plugin-persistedstate",
  28. setup({ $pinia }) {
  29. $pinia.use(piniaPlugin);
  30. }
  31. });