{"version":3,"sources":["../index.ts"],"sourcesContent":["import {writable as internal, type Writable} from 'svelte/store'\n\ndeclare type Updater<T> = (value: T) => T;\ndeclare type StoreDict<T> = { [key: string]: Writable<T> }\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ninterface Stores {\n  local: StoreDict<any>,\n  session: StoreDict<any>,\n}\n\nconst stores : Stores = {\n  local: {},\n  session: {}\n}\n\ninterface Serializer<T> {\n  parse(text: string): T\n  stringify(object: T): string\n}\n\ntype StorageType = 'local' | 'session'\n\ninterface Options<T> {\n  serializer?: Serializer<T>\n  storage?: StorageType\n}\n\nfunction getStorage(type: StorageType) {\n  return type === 'local' ? localStorage : sessionStorage\n}\n\n/** @deprecated `writable()` has been renamed to `persisted()` */\nexport function writable<T>(key: string, initialValue: T, options?: Options<T>): Writable<T> {\n  console.warn(\"writable() has been deprecated. Please use persisted() instead.\\n\\nchange:\\n\\nimport { writable } from 'svelte-local-storage-store'\\n\\nto:\\n\\nimport { persisted } from 'svelte-local-storage-store'\")\n  return persisted<T>(key, initialValue, options)\n}\nexport function persisted<T>(key: string, initialValue: T, options?: Options<T>): Writable<T> {\n  const serializer = options?.serializer ?? JSON\n  const storageType = options?.storage ?? 'local'\n  const browser = typeof(window) !== 'undefined' && typeof(document) !== 'undefined'\n  const storage = browser ? getStorage(storageType) : null\n\n  function updateStorage(key: string, value: T) {\n    storage?.setItem(key, serializer.stringify(value))\n  }\n\n  if (!stores[storageType][key]) {\n    const store = internal(initialValue, (set) => {\n      const json = storage?.getItem(key)\n\n      if (json) {\n        set(<T>serializer.parse(json))\n      }\n\n      if (browser && storageType == 'local') {\n        const handleStorage = (event: StorageEvent) => {\n          if (event.key === key)\n            set(event.newValue ? serializer.parse(event.newValue) : null)\n        }\n\n        window.addEventListener(\"storage\", handleStorage)\n\n        return () => window.removeEventListener(\"storage\", handleStorage)\n      }\n    })\n\n    const {subscribe, set} = store\n\n    stores[storageType][key] = {\n      set(value: T) {\n        updateStorage(key, value)\n        set(value)\n      },\n      update(callback: Updater<T>) {\n        return store.update((last) => {\n          const value = callback(last)\n\n          updateStorage(key, value)\n\n          return value\n        })\n      },\n      subscribe\n    }\n  }\n\n  return stores[storageType][key]\n}\n"],"mappings":";AAAA,SAAQ,YAAY,gBAA8B;AAWlD,IAAM,SAAkB;AAAA,EACtB,OAAO,CAAC;AAAA,EACR,SAAS,CAAC;AACZ;AAcA,SAAS,WAAW,MAAmB;AACrC,SAAO,SAAS,UAAU,eAAe;AAC3C;AAGO,SAAS,SAAY,KAAa,cAAiB,SAAmC;AAC3F,UAAQ,KAAK,sMAAsM;AACnN,SAAO,UAAa,KAAK,cAAc,OAAO;AAChD;AACO,SAAS,UAAa,KAAa,cAAiB,SAAmC;AArC9F;AAsCE,QAAM,cAAa,wCAAS,eAAT,YAAuB;AAC1C,QAAM,eAAc,wCAAS,YAAT,YAAoB;AACxC,QAAM,UAAU,OAAO,WAAY,eAAe,OAAO,aAAc;AACvE,QAAM,UAAU,UAAU,WAAW,WAAW,IAAI;AAEpD,WAAS,cAAcA,MAAa,OAAU;AAC5C,uCAAS,QAAQA,MAAK,WAAW,UAAU,KAAK;AAAA,EAClD;AAEA,MAAI,CAAC,OAAO,WAAW,EAAE,GAAG,GAAG;AAC7B,UAAM,QAAQ,SAAS,cAAc,CAACC,SAAQ;AAC5C,YAAM,OAAO,mCAAS,QAAQ;AAE9B,UAAI,MAAM;AACR,QAAAA,KAAO,WAAW,MAAM,IAAI,CAAC;AAAA,MAC/B;AAEA,UAAI,WAAW,eAAe,SAAS;AACrC,cAAM,gBAAgB,CAAC,UAAwB;AAC7C,cAAI,MAAM,QAAQ;AAChB,YAAAA,KAAI,MAAM,WAAW,WAAW,MAAM,MAAM,QAAQ,IAAI,IAAI;AAAA,QAChE;AAEA,eAAO,iBAAiB,WAAW,aAAa;AAEhD,eAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,MAClE;AAAA,IACF,CAAC;AAED,UAAM,EAAC,WAAW,IAAG,IAAI;AAEzB,WAAO,WAAW,EAAE,GAAG,IAAI;AAAA,MACzB,IAAI,OAAU;AACZ,sBAAc,KAAK,KAAK;AACxB,YAAI,KAAK;AAAA,MACX;AAAA,MACA,OAAO,UAAsB;AAC3B,eAAO,MAAM,OAAO,CAAC,SAAS;AAC5B,gBAAM,QAAQ,SAAS,IAAI;AAE3B,wBAAc,KAAK,KAAK;AAExB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO,OAAO,WAAW,EAAE,GAAG;AAChC;","names":["key","set"]}