{"version":3,"file":"helper.mjs","sources":["../../../../src/mods/scroll/helper.ts"],"sourcesContent":["import { Some } from \"@hazae41/option\";\nimport { Err, Ok } from \"@hazae41/result\";\nimport { Arrays } from \"libs/arrays/arrays.js\";\nimport { DEFAULT_EQUALS, DEFAULT_SERIALIZER } from \"mods/defaults.js\";\nimport { Fetched } from \"mods/result/fetched.js\";\nimport { TimesInit } from \"mods/result/times.js\";\nimport { FetchError } from \"mods/types/fetcher.js\";\nexport var Scroll;\n(function (Scroll) {\n    function getCacheKey(key, settings) {\n        if (typeof key === \"string\")\n            return key;\n        const { keySerializer = DEFAULT_SERIALIZER } = settings;\n        return `scroll:${keySerializer.stringify(key)}`;\n    }\n    Scroll.getCacheKey = getCacheKey;\n    /**\n     * Fetch first page and compare it to the previous first page\n     * @param core\n     * @param scroller\n     * @param cacheKey\n     * @param fetcher\n     * @param aborter\n     * @param settings\n     * @returns\n     */\n    async function first(core, cacheKey, aborter, settings) {\n        const { dataEqualser = DEFAULT_EQUALS } = settings;\n        const aborted = await core.runWithTimeout(async (signal) => {\n            return await settings.fetcher(settings.key, { signal });\n        }, aborter, settings.timeout);\n        if (aborted.isErr())\n            return aborted;\n        const times = TimesInit.merge(aborted.get(), settings);\n        const timed = Fetched.from(aborted.get()).setTimes(times);\n        return new Ok(await core.mutate(cacheKey, async (previous) => {\n            if (timed.isErr())\n                return new Some(timed);\n            const prenormalized = await core.prenormalize(timed, settings);\n            if (prenormalized?.isData() && previous.real?.data && dataEqualser(prenormalized.inner, previous.real.data.inner))\n                return new Some(previous.real.data);\n            return new Some(timed);\n        }, settings));\n    }\n    Scroll.first = first;\n    /**\n     * Scroll to the next page\n     * @param core\n     * @param scroller\n     * @param cacheKey\n     * @param fetcher\n     * @param aborter\n     * @param settings\n     * @returns\n     */\n    async function scroll(core, cacheKey, aborter, settings) {\n        const previous = await core.get(cacheKey, settings);\n        const previousPages = previous.real?.data?.inner ?? [];\n        const previousPage = Arrays.last(previousPages);\n        const key = settings.scroller(previousPage);\n        if (key == null)\n            return new Err(new FetchError(`Can't scroll`));\n        const aborted = await core.runWithTimeout(async (signal) => {\n            return await settings.fetcher(key, { signal });\n        }, aborter, settings.timeout);\n        if (aborted.isErr())\n            return aborted;\n        const times = TimesInit.merge(aborted.get(), settings);\n        const timed = Fetched.from(aborted.get()).setTimes(times);\n        return new Ok(await core.mutate(cacheKey, (previous) => {\n            const previousPages = previous.real?.data?.inner ?? [];\n            const paginated = timed.mapSync(data => [...previousPages, ...data]);\n            return new Some(paginated);\n        }, settings));\n    }\n    Scroll.scroll = scroll;\n})(Scroll || (Scroll = {}));\n//# sourceMappingURL=helper.js.map"],"names":[],"mappings":"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"}