{"version":3,"file":"fail.mjs","sources":["../../../../../src/mods/fetched/fail.ts"],"sourcesContent":["import { Err } from \"@hazae41/result\"\nimport { Awaitable } from \"libs/promises/promises.js\"\nimport { Cached, CachedInit, Timed, TimedInit } from \"./times.js\"\n\nexport interface FailInit<T> extends TimedInit, CachedInit {\n  readonly error: T\n}\n\nexport namespace FailInit {\n\n  export type Infer<T> = FailInit<Inner<T>>\n\n  export type Inner<T> = T extends FailInit<infer Inner> ? Inner : never\n\n}\n\nexport namespace Fail {\n\n  export type Infer<T> = Fail<Inner<T>>\n\n  export type Inner<T> = T extends Fail<infer Inner> ? Inner : never\n\n}\n\nexport class Fail<T> extends Err<T> implements FailInit<T>, Timed, Cached {\n\n  readonly error: T\n\n  readonly time: number\n\n  readonly cooldown?: number\n  readonly expiration?: number\n\n  constructor(error: T, init: TimedInit & CachedInit = {}) {\n    super(error)\n\n    const { time = Date.now(), cooldown, expiration } = init\n\n    this.error = error\n    this.time = time\n    this.cooldown = cooldown\n    this.expiration = expiration\n  }\n\n  static from<T>(init: FailInit<T>): Fail<T> {\n    const { error, time, cooldown, expiration } = init\n\n    return new Fail(error, { time, cooldown, expiration })\n  }\n\n  isData(): false {\n    return false\n  }\n\n  isFail(): this is Fail<T> {\n    return true\n  }\n\n  set(inner: unknown): this {\n    return this\n  }\n\n  setErr<U>(inner: U): Fail<U> {\n    return new Fail(inner, this)\n  }\n\n  setInit(init?: TimedInit & CachedInit): Fail<T> {\n    return new Fail(this.inner, init)\n  }\n\n  async mapErr<U>(mapper: (data: T) => Awaitable<U>): Promise<Fail<U>> {\n    return new Fail<U>(await mapper(this.getErr()), this)\n  }\n\n  mapErrSync<U>(mapper: (data: T) => U): Fail<U> {\n    return new Fail<U>(mapper(this.getErr()), 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(): Promise<this> {\n    return 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<T>(this: Fail<PromiseLike<T>>): Promise<Fail<Awaited<T>>> {\n    return new Fail(await this.inner, 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: Fail<PromiseLike<T>>): Promise<Fail<Awaited<T>>> {\n    return await this.awaitErr()\n  }\n\n}"],"names":[],"mappings":";;AAwBM,MAAO,IAAQ,SAAQ,GAAM,CAAA;AAExB,IAAA,KAAK,CAAG;AAER,IAAA,IAAI,CAAQ;AAEZ,IAAA,QAAQ,CAAS;AACjB,IAAA,UAAU,CAAS;IAE5B,WAAY,CAAA,KAAQ,EAAE,IAAA,GAA+B,EAAE,EAAA;QACrD,KAAK,CAAC,KAAK,CAAC,CAAA;AAEZ,QAAA,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;AAExD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;AAClB,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,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;AAElD,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;KACvD;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,KAAK,CAAA;KACb;IAED,MAAM,GAAA;AACJ,QAAA,OAAO,IAAI,CAAA;KACZ;AAED,IAAA,GAAG,CAAC,KAAc,EAAA;AAChB,QAAA,OAAO,IAAI,CAAA;KACZ;AAED,IAAA,MAAM,CAAI,KAAQ,EAAA;AAChB,QAAA,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;KAC7B;AAED,IAAA,OAAO,CAAC,IAA6B,EAAA;QACnC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;KAClC;IAED,MAAM,MAAM,CAAI,MAAiC,EAAA;AAC/C,QAAA,OAAO,IAAI,IAAI,CAAI,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;KACtD;AAED,IAAA,UAAU,CAAI,MAAsB,EAAA;AAClC,QAAA,OAAO,IAAI,IAAI,CAAI,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;KAChD;AAED;;;AAGG;AACH,IAAA,MAAM,KAAK,GAAA;AACT,QAAA,OAAO,IAAI,CAAA;KACZ;AAED;;;AAGG;AACH,IAAA,MAAM,QAAQ,GAAA;QACZ,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;KACxC;AAED;;;AAGG;AACH,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,OAAO,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;KAC7B;AAEF;;;;"}