{"version":3,"file":"basic.cjs","sources":["../../../../../src/mods/storages/local/basic.ts"],"sourcesContent":["import { Err, Ok } from \"@hazae41/result\";\nimport { SyncIdentity } from \"mods/serializers/serializer.js\";\nimport { useEffect, useRef } from \"react\";\nimport { StorageCreationError } from \"../errors.js\";\n/**\n * Asynchronous local storage\n *\n * Use for compatibility with SSR\n * Use for storing large objects\n *\n * Won't display data on first render or hydratation, you can either:\n * - use SyncLocalStorage\n * - use useFallback\n *\n * @see SyncLocalStorage\n * @see useFallback\n */\nexport function useAsyncLocalStorage(params) {\n    const storage = useRef();\n    if (storage.current == null)\n        storage.current = AsyncLocalStorage.tryCreate(params).ignore();\n    useEffect(() => () => {\n        if (!storage.current?.isOk())\n            return;\n        storage.current?.inner.unmount().catch(console.error);\n    }, []);\n    return storage.current;\n}\n/**\n * Asynchronous local storage\n *\n * Use for compatibility with SSR\n * Use for storing large objects\n *\n * Won't display data on first render or hydratation, you can either:\n * - use SyncLocalStorage\n * - use useFallback\n *\n * @see SyncLocalStorage\n * @see useFallback\n */\nexport class AsyncLocalStorage {\n    prefix;\n    keySerializer;\n    valueSerializer;\n    async = true;\n    #onunload;\n    #storageKeys = new Map();\n    constructor(prefix = \"xswr:\", keySerializer = SyncIdentity, valueSerializer = JSON) {\n        this.prefix = prefix;\n        this.keySerializer = keySerializer;\n        this.valueSerializer = valueSerializer;\n        this.#onunload = () => this.collectSync();\n        addEventListener(\"beforeunload\", this.#onunload);\n    }\n    static tryCreate(params = {}) {\n        const { prefix, keySerializer, valueSerializer } = params;\n        if (typeof localStorage === \"undefined\")\n            return new Err(new StorageCreationError());\n        return new Ok(new AsyncLocalStorage(prefix, keySerializer, valueSerializer));\n    }\n    async unmount() {\n        removeEventListener(\"beforeunload\", this.#onunload);\n        await this.collect();\n    }\n    async collect() {\n        this.collectSync();\n    }\n    collectSync() {\n        for (const [key, expiration] of this.#storageKeys) {\n            if (expiration > Date.now())\n                continue;\n            this.#delete(key);\n        }\n    }\n    async get(cacheKey) {\n        const key = await this.keySerializer.stringify(cacheKey);\n        const item = localStorage.getItem(this.prefix + key);\n        if (item === null)\n            return;\n        const state = await this.valueSerializer.parse(item);\n        if (state.expiration != null)\n            this.#storageKeys.set(key, state.expiration);\n        return state;\n    }\n    async set(cacheKey, state) {\n        if (state == null)\n            return await this.delete(cacheKey);\n        const storageKey = await this.keySerializer.stringify(cacheKey);\n        const storageItem = await this.valueSerializer.stringify(state);\n        if (state.expiration != null)\n            this.#storageKeys.set(storageKey, state.expiration);\n        localStorage.setItem(this.prefix + storageKey, storageItem);\n    }\n    async #delete(storageKey) {\n        this.#storageKeys.delete(storageKey);\n        localStorage.removeItem(this.prefix + storageKey);\n    }\n    async delete(cacheKey) {\n        const key = await this.keySerializer.stringify(cacheKey);\n        await this.#delete(key);\n    }\n}\n//# sourceMappingURL=basic.js.map"],"names":["useRef","useEffect","SyncIdentity","Err","StorageCreationError","Ok"],"mappings":";;;;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,oBAAoB,CAAC,MAAM,EAAE;AAC7C,IAAI,MAAM,OAAO,GAAGA,YAAM,EAAE,CAAC;AAC7B,IAAI,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI;AAC/B,QAAQ,OAAO,CAAC,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;AACvE,IAAIC,eAAS,CAAC,MAAM,MAAM;AAC1B,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE;AACpC,YAAY,OAAO;AACnB,QAAQ,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9D,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC;AAC3B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,iBAAiB,CAAC;AAC/B,IAAI,MAAM,CAAC;AACX,IAAI,aAAa,CAAC;AAClB,IAAI,eAAe,CAAC;AACpB,IAAI,KAAK,GAAG,IAAI,CAAC;AACjB,IAAI,SAAS,CAAC;AACd,IAAI,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;AAC7B,IAAI,WAAW,CAAC,MAAM,GAAG,OAAO,EAAE,aAAa,GAAGC,uBAAY,EAAE,eAAe,GAAG,IAAI,EAAE;AACxF,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AAC3C,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AAC/C,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;AAClD,QAAQ,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACzD,KAAK;AACL,IAAI,OAAO,SAAS,CAAC,MAAM,GAAG,EAAE,EAAE;AAClC,QAAQ,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;AAClE,QAAQ,IAAI,OAAO,YAAY,KAAK,WAAW;AAC/C,YAAY,OAAO,IAAIC,UAAG,CAAC,IAAIC,2BAAoB,EAAE,CAAC,CAAC;AACvD,QAAQ,OAAO,IAAIC,SAAE,CAAC,IAAI,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;AACrF,KAAK;AACL,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC5D,QAAQ,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AAC7B,KAAK;AACL,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;AAC3B,KAAK;AACL,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE;AAC3D,YAAY,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE;AACvC,gBAAgB,SAAS;AACzB,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC9B,SAAS;AACT,KAAK;AACL,IAAI,MAAM,GAAG,CAAC,QAAQ,EAAE;AACxB,QAAQ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACjE,QAAQ,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;AAC7D,QAAQ,IAAI,IAAI,KAAK,IAAI;AACzB,YAAY,OAAO;AACnB,QAAQ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7D,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI;AACpC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;AACzD,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,MAAM,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE;AAC/B,QAAQ,IAAI,KAAK,IAAI,IAAI;AACzB,YAAY,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/C,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACxE,QAAQ,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxE,QAAQ,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI;AACpC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;AAChE,QAAQ,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC;AACpE,KAAK;AACL,IAAI,MAAM,OAAO,CAAC,UAAU,EAAE;AAC9B,QAAQ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC7C,QAAQ,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;AAC1D,KAAK;AACL,IAAI,MAAM,MAAM,CAAC,QAAQ,EAAE;AAC3B,QAAQ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACjE,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChC,KAAK;AACL;;;;;"}