UNPKG

@hazae41/glacier

Version:

Yet another React data (re)fetching library

1 lines 4.1 kB
{"version":3,"file":"data.mjs","sources":["../../../../../src/mods/fetched/data.ts"],"sourcesContent":["import { Ok } from \"@hazae41/result\"\nimport { Awaitable } from \"libs/promises/promises.js\"\nimport { Cached, CachedInit, Timed, TimedInit } from \"./times.js\"\n\nexport interface DataInit<T> extends TimedInit, CachedInit {\n readonly data: T\n}\n\nexport namespace DataInit {\n\n export type Infer<T> = DataInit<Inner<T>>\n\n export type Inner<T> = T extends DataInit<infer Inner> ? Inner : never\n\n}\n\nexport namespace Data {\n\n export type Infer<T> = Data<Inner<T>>\n\n export type Inner<T> = T extends Data<infer Inner> ? Inner : never\n\n}\n\nexport class Data<T> extends Ok<T> implements DataInit<T>, Timed, Cached {\n\n readonly data: T\n\n readonly time: number\n\n readonly cooldown?: number\n readonly expiration?: number\n\n constructor(data: T, init: TimedInit & CachedInit = {}) {\n super(data)\n\n const { time = Date.now(), cooldown, expiration } = init\n\n this.data = data\n this.time = time\n this.cooldown = cooldown\n this.expiration = expiration\n }\n\n static from<T>(init: DataInit<T>): Data<T> {\n const { data, time, cooldown, expiration } = init\n\n return new Data(data, { time, cooldown, expiration })\n }\n\n isData(): this is Data<T> {\n return true\n }\n\n isFail(): false {\n return false\n }\n\n set<U>(inner: U): Data<U> {\n return new Data(inner, this)\n }\n\n setErr(inner: unknown): this {\n return this\n }\n\n setInit(init?: TimedInit & CachedInit): Data<T> {\n return new Data(this.inner, init)\n }\n\n async map<U>(mapper: (data: T) => Awaitable<U>): Promise<Data<U>> {\n return new Data<U>(await mapper(this.get()), this)\n }\n\n mapSync<U>(mapper: (data: T) => U): Data<U> {\n return new Data<U>(mapper(this.get()), this)\n }\n\n /**\n * Transform Result<Promise<T>, E> into Promise<Result<T, E>>\n * @returns `await this.inner` if `Ok`, `this` if `Err`\n */\n async await<T>(this: Data<PromiseLike<T>>): Promise<Data<Awaited<T>>> {\n return new Data(await this.inner, this)\n }\n\n /**\n * Transform Result<T, Promise<E>> into Promise<Result<T, E>>\n * @returns `await this.inner` if `Err`, `this` if `Ok`\n */\n async awaitErr(): Promise<this> {\n return this\n }\n\n /**\n * Transform Result<Promise<T>, Promise<E>> into Promise<Result<T, E>>\n * @returns `await this.inner`\n */\n async awaitAll<T>(this: Data<PromiseLike<T>>): Promise<Data<Awaited<T>>> {\n return await this.await()\n }\n\n}"],"names":[],"mappings":";;AAwBM,MAAO,IAAQ,SAAQ,EAAK,CAAA;AAEvB,IAAA,IAAI,CAAG;AAEP,IAAA,IAAI,CAAQ;AAEZ,IAAA,QAAQ,CAAS;AACjB,IAAA,UAAU,CAAS;IAE5B,WAAY,CAAA,IAAO,EAAE,IAAA,GAA+B,EAAE,EAAA;QACpD,KAAK,CAAC,IAAI,CAAC,CAAA;AAEX,QAAA,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;AAExD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;AAChB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;KAC7B;IAED,OAAO,IAAI,CAAI,IAAiB,EAAA;QAC9B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;AAEjD,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;KACtD;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAA;KACZ;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,KAAK,CAAA;KACb;AAED,IAAA,GAAG,CAAI,KAAQ,EAAA;AACb,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;KAC7B;AAED,IAAA,MAAM,CAAC,KAAc,EAAA;AACnB,QAAA,OAAO,IAAI,CAAA;KACZ;AAED,IAAA,OAAO,CAAC,IAA6B,EAAA;QACnC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;KAClC;IAED,MAAM,GAAG,CAAI,MAAiC,EAAA;AAC5C,QAAA,OAAO,IAAI,IAAI,CAAI,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;KACnD;AAED,IAAA,OAAO,CAAI,MAAsB,EAAA;AAC/B,QAAA,OAAO,IAAI,IAAI,CAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;KAC7C;AAED;;;AAGG;AACH,IAAA,MAAM,KAAK,GAAA;QACT,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;KACxC;AAED;;;AAGG;AACH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,OAAO,IAAI,CAAA;KACZ;AAED;;;AAGG;AACH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,OAAO,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;KAC1B;AAEF;;;;"}