{"version":3,"file":"create-cache.mjs","sources":["../../../src/create-cache.ts"],"sourcesContent":["import { type CacheHandler, type Metadata } from \"@nimpl/cache\";\n\nimport { objectToStream, streamToRaw } from \"./lib/stream\";\n\nexport const cache =\n    <Params extends unknown[], Callback extends (...args: Params) => Promise<unknown>>(\n        callback: Callback,\n        options: {\n            key: string;\n            duration?: Pick<Metadata, \"stale\" | \"revalidate\" | \"expire\">;\n            cacheHandler: CacheHandler;\n        },\n    ) =>\n    async (...args: Params): Promise<Awaited<ReturnType<Callback>>> => {\n        const { key, duration, cacheHandler } = options;\n        const cacheEntry = await cacheHandler.get(key);\n\n        try {\n            if (cacheEntry?.value && cacheEntry.value instanceof ReadableStream) {\n                return streamToRaw(cacheEntry.value).then(JSON.parse);\n            }\n        } catch (error) {\n            console.error(error);\n        }\n\n        const data = (await callback(...args)) as Awaited<ReturnType<Callback>>;\n        await cacheHandler.set(\n            key,\n            Promise.resolve({\n                value: objectToStream(data),\n                tags: [],\n                timestamp: performance.timeOrigin + performance.now(),\n                stale: duration?.stale || 30,\n                revalidate: duration?.revalidate || 60,\n                expire: duration?.expire || 120,\n            }),\n        );\n\n        return Promise.resolve<Awaited<ReturnType<Callback>>>(data);\n    };\n\nexport const createCache = (cacheHandler: CacheHandler) => {\n    return {\n        cache: (\n            callback: (...args: unknown[]) => Promise<unknown>,\n            options: {\n                key: string;\n                duration?: Pick<Metadata, \"stale\" | \"revalidate\" | \"expire\">;\n            },\n        ) => cache(callback, { ...options, cacheHandler }),\n    };\n};\n"],"names":[],"mappings":";;AAIO,MAAM,KAAK,GACd,CACI,QAAkB,EAClB,OAIC,KAEL,OAAO,GAAG,IAAY,KAA4C;IAC9D,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO;IAC/C,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;AAE9C,IAAA,IAAI;AACA,QAAA,IAAI,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,KAAI,UAAU,CAAC,KAAK,YAAY,cAAc,EAAE;AACjE,YAAA,OAAO,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QACzD;IACJ;IAAE,OAAO,KAAK,EAAE;AACZ,QAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;IACxB;IAEA,MAAM,IAAI,IAAI,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAkC;IACvE,MAAM,YAAY,CAAC,GAAG,CAClB,GAAG,EACH,OAAO,CAAC,OAAO,CAAC;AACZ,QAAA,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,WAAW,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QACrD,KAAK,EAAE,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,KAAI,EAAE;QAC5B,UAAU,EAAE,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,UAAU,KAAI,EAAE;QACtC,MAAM,EAAE,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,KAAI,GAAG;AAClC,KAAA,CAAC,CACL;AAED,IAAA,OAAO,OAAO,CAAC,OAAO,CAAgC,IAAI,CAAC;AAC/D;AAEG,MAAM,WAAW,GAAG,CAAC,YAA0B,KAAI;IACtD,OAAO;AACH,QAAA,KAAK,EAAE,CACH,QAAkD,EAClD,OAGC,KACA,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,CAAC;KACrD;AACL;;;;"}