{"version":3,"file":"core.cjs","sources":["../../../../src/mods/core/core.ts"],"sourcesContent":["import { Mutex } from \"@hazae41/mutex\";\nimport { Option, Some } from \"@hazae41/option\";\nimport { Ortho } from \"libs/ortho/ortho.js\";\nimport { Time } from \"libs/time/time.js\";\nimport { DEFAULT_EQUALS } from \"mods/defaults.js\";\nimport { Data } from \"mods/result/data.js\";\nimport { Fail } from \"mods/result/fail.js\";\nimport { Fetched } from \"mods/result/fetched.js\";\nimport { SyncIdentity } from \"mods/serializers/serializer.js\";\nimport { DataState, FailState, FakeState, RealState } from \"mods/types/state.js\";\nexport class AsyncStorageError extends Error {\n    #class = AsyncStorageError;\n    name = this.#class.name;\n    constructor() {\n        super(`Storage is asynchronous`);\n    }\n}\nexport class TimeoutError extends Error {\n    #class = TimeoutError;\n    name = this.#class.name;\n    constructor() {\n        super(`Timed out`);\n    }\n}\nexport class CooldownError extends Error {\n    #class = CooldownError;\n    name = this.#class.name;\n    constructor() {\n        super(`Cooled down`);\n    }\n}\nexport class MissingKeyError extends Error {\n    #class = MissingKeyError;\n    name = this.#class.name;\n    constructor() {\n        super(`Missing a key`);\n    }\n}\nexport class MissingFetcherError extends Error {\n    #class = MissingFetcherError;\n    name = this.#class.name;\n    constructor() {\n        super(`Missing a fetcher`);\n    }\n}\nexport class Core {\n    settings;\n    onState = new Ortho();\n    onAborter = new Ortho();\n    #queries = new Map();\n    raw = new Map();\n    #mounted = true;\n    constructor(settings) {\n        this.settings = settings;\n        new FinalizationRegistry(() => {\n            this.clean();\n        }).register(this, undefined);\n    }\n    clean() {\n        for (const metadata of this.#queries.values())\n            clearTimeout(metadata.inner.timeout);\n        this.#mounted = false;\n    }\n    getAborterSync(cacheKey) {\n        return this.#queries.get(cacheKey)?.inner?.aborter;\n    }\n    getStateSync(cacheKey) {\n        return this.#queries.get(cacheKey)?.inner?.state;\n    }\n    #getOrCreateMetadata(cacheKey) {\n        let metadata = this.#queries.get(cacheKey);\n        if (metadata != null)\n            return metadata;\n        const counter = 0;\n        const optimizers = new Map();\n        metadata = new Mutex({ cacheKey, counter, optimizers });\n        this.#queries.set(cacheKey, metadata);\n        return metadata;\n    }\n    async fetchOrReplace(cacheKey, aborter, callback) {\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        if (metadata.inner.aborter != null)\n            metadata.inner.aborter.abort();\n        try {\n            const promise = callback();\n            metadata.inner.pending = promise;\n            metadata.inner.aborter = aborter;\n            this.onAborter.dispatch(cacheKey, aborter);\n            return await promise;\n        }\n        finally {\n            if (metadata.inner.aborter === aborter) {\n                metadata.inner.aborter = undefined;\n                metadata.inner.pending = undefined;\n                this.onAborter.dispatch(cacheKey, undefined);\n            }\n        }\n    }\n    async fetchOrJoin(cacheKey, aborter, callback) {\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        if (metadata.inner.pending != null)\n            return await metadata.inner.pending;\n        try {\n            const promise = callback();\n            metadata.inner.aborter = aborter;\n            metadata.inner.pending = promise;\n            this.onAborter.dispatch(cacheKey, aborter);\n            return await promise;\n        }\n        finally {\n            if (metadata.inner.aborter === aborter) {\n                metadata.inner.aborter = undefined;\n                metadata.inner.pending = undefined;\n                this.onAborter.dispatch(cacheKey, undefined);\n            }\n        }\n    }\n    async #get(cacheKey, settings) {\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        if (metadata.inner.state != null)\n            return metadata.inner.state;\n        const stored = await settings.storage?.get?.(cacheKey);\n        const state = await this.unstore(stored, settings);\n        metadata.inner.state = state;\n        this.raw.set(cacheKey, Option.wrap(stored));\n        this.onState.dispatch(cacheKey, state);\n        return state;\n    }\n    async get(cacheKey, settings) {\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        return await metadata.lock(async () => await this.#get(cacheKey, settings));\n    }\n    async store(state, settings) {\n        const { dataSerializer = SyncIdentity, errorSerializer = SyncIdentity } = settings;\n        if (state.real == null)\n            return undefined;\n        const { time, cooldown, expiration } = state.real.current;\n        const data = await Option.map(state.real.data, d => d.map(dataSerializer.stringify));\n        const error = await Option.map(state.real.error, d => d.mapErr(errorSerializer.stringify));\n        return { version: 2, data, error, time, cooldown, expiration };\n    }\n    async unstore(stored, settings) {\n        const { dataSerializer = SyncIdentity, errorSerializer = SyncIdentity } = settings;\n        if (stored == null)\n            return new RealState(undefined);\n        if (stored.version == null) {\n            const { time, cooldown, expiration } = stored;\n            const times = { time, cooldown, expiration };\n            const data = Option.wrap(stored.data).mapSync(x => new Data(dataSerializer.parse(x), times));\n            const error = Option.wrap(stored.error).mapSync(x => new Fail(errorSerializer.parse(x), times));\n            if (error.isSome())\n                return new RealState(new FailState(error.get(), data.get()));\n            if (data.isSome())\n                return new RealState(new DataState(data.get()));\n            return new RealState(undefined);\n        }\n        if (stored.version === 2) {\n            const data = await Option.wrap(stored.data).map(x => Data.from(x).map(dataSerializer.parse));\n            const error = await Option.wrap(stored.error).map(x => Fail.from(x).mapErr(errorSerializer.parse));\n            if (error.isSome())\n                return new RealState(new FailState(error.get(), data.get()));\n            if (data.isSome())\n                return new RealState(new DataState(data.get()));\n            return new RealState(undefined);\n        }\n        return new RealState(undefined);\n    }\n    /**\n     * Set full state and store it in storage\n     * @param cacheKey\n     * @param setter\n     * @param settings\n     * @returns\n     */\n    async set(cacheKey, setter, settings) {\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        return await metadata.lock(async () => {\n            const previous = await this.#get(cacheKey, settings);\n            const current = await setter(previous);\n            if (current === previous)\n                return previous;\n            const stored = await this.store(current, settings);\n            metadata.inner.state = current;\n            this.raw.set(cacheKey, Option.wrap(stored));\n            this.onState.dispatch(cacheKey, current);\n            if (settings.storage)\n                await settings.storage.set?.(cacheKey, stored);\n            await settings.indexer?.({ current, previous }, { core: this });\n            return current;\n        });\n    }\n    #mergeRealStateWithFetched(previous, fetched) {\n        if (fetched == null)\n            return new RealState(undefined);\n        if (fetched.isData())\n            return new RealState(new DataState(fetched));\n        return new RealState(new FailState(fetched, previous.real?.data));\n    }\n    #mergeFakeStateWithFetched(previous, fetched) {\n        if (fetched == null)\n            return new FakeState(undefined, previous.real);\n        if (fetched.isData())\n            return new FakeState(new DataState(fetched), previous.real);\n        return new FakeState(new FailState(fetched, previous.data), previous.real);\n    }\n    /**\n     * Set real state, compare times, compare data/error, and then reoptimize\n     * @param cacheKey\n     * @param setter\n     * @param settings\n     * @returns\n     */\n    async update(cacheKey, setter, settings) {\n        const { dataEqualser = DEFAULT_EQUALS, errorEqualser = DEFAULT_EQUALS } = settings;\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        return await this.set(cacheKey, async (previous) => {\n            const updated = await setter(previous);\n            if (updated === previous)\n                return previous;\n            let next = new RealState(updated.real);\n            if (next.real && previous.real && Time.isBefore(next.real?.current.time, previous.real.current.time))\n                return previous;\n            next = this.#mergeRealStateWithFetched(next, await this.#normalize(next.real?.current, settings));\n            if (next.real?.current.isData() && previous.real?.current.isData() && dataEqualser(next.real.current.inner, previous.real.current.inner))\n                next = new RealState(new DataState(new Data(previous.real.current.inner, next.real.current)));\n            if (next.real?.current.isFail() && previous.real?.current.isFail() && errorEqualser(next.real.current.inner, previous.real.current.inner))\n                next = new RealState(new FailState(new Fail(previous.real.current.inner, next.real.current), previous.real.data));\n            return await this.#reoptimize(metadata.inner, next);\n        }, settings);\n    }\n    /**\n     * Apply fetched result to previous state, and update it\n     * @param cacheKey\n     * @param previous\n     * @param fetched\n     * @param settings\n     * @returns\n     */\n    async mutate(cacheKey, mutator, settings) {\n        return await this.update(cacheKey, async (previous) => {\n            const mutate = await mutator(previous);\n            if (mutate.isNone())\n                return previous;\n            const fetched = Option.mapSync(mutate.get(), Fetched.from);\n            return this.#mergeRealStateWithFetched(previous, fetched);\n        }, settings);\n    }\n    /**\n     * Mutate real state to undefined (keep fake state)\n     * @param cacheKey\n     * @param settings\n     * @returns\n     */\n    async delete(cacheKey, settings) {\n        return await this.mutate(cacheKey, () => new Some(undefined), settings);\n    }\n    /**\n     * Erase and reapply all optimizations\n     * @param state\n     * @param optimizers\n     * @returns\n     */\n    async #reoptimize(metadata, state) {\n        let reoptimized = new RealState(state.real);\n        for (const optimizer of metadata.optimizers.values()) {\n            const optimized = await optimizer(reoptimized);\n            if (optimized.isNone())\n                continue;\n            const fetched = Option.mapSync(optimized.get(), Fetched.from);\n            reoptimized = this.#mergeFakeStateWithFetched(reoptimized, fetched);\n        }\n        return reoptimized;\n    }\n    async reoptimize(cacheKey, settings) {\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        return await this.set(cacheKey, async (previous) => {\n            return await this.#reoptimize(metadata.inner, previous);\n        }, settings);\n    }\n    async optimize(cacheKey, uuid, optimizer, settings) {\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        return await this.set(cacheKey, async (previous) => {\n            if (metadata.inner.optimizers.has(uuid)) {\n                metadata.inner.optimizers.delete(uuid);\n                previous = await this.#reoptimize(metadata.inner, previous);\n            }\n            metadata.inner.optimizers.set(uuid, optimizer);\n            const optimized = await optimizer(previous);\n            if (optimized.isNone())\n                return previous;\n            const fetched = Option.mapSync(optimized.get(), Fetched.from);\n            return this.#mergeFakeStateWithFetched(previous, fetched);\n        }, settings);\n    }\n    async deoptimize(cacheKey, uuid) {\n        return this.#getOrCreateMetadata(cacheKey).inner.optimizers.delete(uuid);\n    }\n    async runWithTimeout(callback, aborter, delay) {\n        const timeout = delay ? setTimeout(() => {\n            aborter.abort(new TimeoutError());\n        }, delay) : undefined;\n        try {\n            return await callback(aborter.signal);\n        }\n        finally {\n            clearTimeout(timeout);\n        }\n    }\n    /**\n     * Transform children into refs and normalize them\n     * @param data\n     * @param settings\n     * @returns\n     */\n    async #normalize(fetched, settings) {\n        if (settings.normalizer == null)\n            return fetched;\n        return await settings.normalizer(fetched, { core: this, shallow: false });\n    }\n    /**\n     * Transform children into refs but do not normalize them\n     * @param data\n     * @param settings\n     * @returns\n     */\n    async prenormalize(fetched, settings) {\n        if (settings.normalizer == null)\n            return fetched;\n        return await settings.normalizer(fetched, { core: this, shallow: true });\n    }\n    /**\n     * Assume cacheKey changed and reindex it\n     * @param cacheKey\n     * @param settings\n     */\n    async reindex(cacheKey, settings) {\n        const current = await this.get(cacheKey, settings);\n        await settings.indexer?.({ current }, { core: this });\n    }\n    async increment(cacheKey, settings) {\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        metadata.inner.counter++;\n        clearTimeout(metadata.inner.timeout);\n        metadata.inner.timeout = undefined;\n    }\n    async decrement(cacheKey, settings) {\n        const metadata = this.#getOrCreateMetadata(cacheKey);\n        const eraseAfterTimeout = async () => {\n            if (!this.#mounted)\n                return;\n            if (metadata.inner.counter > 0)\n                return;\n            await this.delete(cacheKey, settings);\n        };\n        metadata.inner.counter--;\n        if (metadata.inner.counter > 0)\n            return;\n        const expiration = metadata.inner.state?.real?.current.expiration;\n        if (expiration == null)\n            return;\n        if (Date.now() > expiration) {\n            await this.delete(cacheKey, settings);\n            return;\n        }\n        const delay = expiration - Date.now();\n        metadata.inner.timeout = setTimeout(eraseAfterTimeout, delay);\n    }\n}\n//# sourceMappingURL=core.js.map"],"names":["Ortho","Mutex","Option","SyncIdentity","RealState","data","Data","Fail","FailState","DataState","FakeState","DEFAULT_EQUALS","Time","fetched","Fetched","Some","state"],"mappings":"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"}