unstorage-pinia-plugin
Version:
Pinia store persistence and hydration using Unstorage
1 lines • 3.33 kB
Source Map (JSON)
{"version":3,"file":"unstorage-pinia-plugin.mjs","sources":["../src/index.ts"],"sourcesContent":["import type { PiniaPluginContext, StateTree, Store } from 'pinia';\nimport { createStorage } from 'unstorage';\nimport type { Driver, Storage } from 'unstorage';\n\nexport interface UnstorageStoreOptions {\n driver: Driver,\n filter?: Array<string>\n storage?: Storage\n}\n\ndeclare module 'pinia' {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n export interface DefineStoreOptionsBase<S extends StateTree, Store> {\n unstorage?: UnstorageStoreOptions\n }\n}\n\nconst configureStore = (store: Store, storage: Storage, filter?: Array<string>) => {\n storage.getItem(store.$id).then((state) => {\n store.$patch(state);\n });\n\n const _filter = (filter) ?? Object.keys(store.$state);\n\n store.$subscribe(() => storage.setItem(store.$id,\n JSON.stringify(Object.fromEntries(\n Object.entries(store.$state).filter(([key]) => (_filter.indexOf(key) ?? 0) > -1)\n ))\n ));\n\n storage.setItem(store.$id,\n JSON.stringify(Object.fromEntries(\n Object.entries(store.$state).filter(([key]) => (_filter.indexOf(key) ?? 0) > -1)\n ))\n );\n};\n\nconst unstorageOptionsBag: Record<string, UnstorageStoreOptions> = {};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const persistStore = (store: any, unstorageOptions: UnstorageStoreOptions) => {\n unstorageOptionsBag[(store as Store).$id] = unstorageOptions;\n return store;\n};\n\nexport interface UnstoragePluginOptions {\n driver?: Driver\n}\n\nexport const createUnstoragePlugin = ({ driver }: UnstoragePluginOptions = {}) => ({ options, store }: PiniaPluginContext) => {\n if(options.unstorage) {\n configureStore(store, createStorage({ driver: options.unstorage.driver }), options.unstorage.filter);\n }\n else if(unstorageOptionsBag[store.$id]) {\n configureStore(store, createStorage({ driver: unstorageOptionsBag[store.$id].driver }), unstorageOptionsBag[store.$id].filter );\n }\n else if(driver) {\n configureStore(store, createStorage({ driver }));\n }\n};\n"],"names":["configureStore","store","storage","filter","state","_filter","key","unstorageOptionsBag","persistStore","unstorageOptions","createUnstoragePlugin","driver","options","createStorage"],"mappings":";AAiBA,MAAMA,IAAiB,CAACC,GAAcC,GAAkBC,MAA2B;AACjF,EAAAD,EAAQ,QAAQD,EAAM,GAAG,EAAE,KAAK,CAACG,MAAU;AACzC,IAAAH,EAAM,OAAOG,CAAK;AAAA,EAAA,CACnB;AAED,QAAMC,IAAWF,KAAW,OAAO,KAAKF,EAAM,MAAM;AAE9C,EAAAA,EAAA,WAAW,MAAMC,EAAQ;AAAA,IAAQD,EAAM;AAAA,IAC3C,KAAK,UAAU,OAAO;AAAA,MACpB,OAAO,QAAQA,EAAM,MAAM,EAAE,OAAO,CAAC,CAACK,CAAG,OAAOD,EAAQ,QAAQC,CAAG,KAAK,KAAK,EAAE;AAAA,IAAA,CAChF;AAAA,EAAA,CACF,GAEOJ,EAAA;AAAA,IAAQD,EAAM;AAAA,IACpB,KAAK,UAAU,OAAO;AAAA,MACpB,OAAO,QAAQA,EAAM,MAAM,EAAE,OAAO,CAAC,CAACK,CAAG,OAAOD,EAAQ,QAAQC,CAAG,KAAK,KAAK,EAAE;AAAA,IAAA,CAChF;AAAA,EAAA;AAEL,GAEMC,IAA6D,CAAA,GAGtDC,IAAe,CAACP,GAAYQ,OAClBF,EAAAN,EAAgB,GAAG,IAAIQ,GACrCR,IAOIS,IAAwB,CAAC,EAAE,QAAAC,EAAO,IAA4B,CAAC,MAAM,CAAC,EAAE,SAAAC,GAAS,OAAAX,QAAgC;AAC5H,EAAGW,EAAQ,YACMZ,EAAAC,GAAOY,EAAc,EAAE,QAAQD,EAAQ,UAAU,OAAQ,CAAA,GAAGA,EAAQ,UAAU,MAAM,IAE7FL,EAAoBN,EAAM,GAAG,IACnCD,EAAeC,GAAOY,EAAc,EAAE,QAAQN,EAAoBN,EAAM,GAAG,EAAE,OAAA,CAAQ,GAAGM,EAAoBN,EAAM,GAAG,EAAE,MAAO,IAExHU,KACNX,EAAeC,GAAOY,EAAc,EAAE,QAAAF,EAAA,CAAQ,CAAC;AAEnD;"}