{"version":3,"sources":["../src/defer.ts"],"sourcesContent":["export enum Status {\n  PENDING = 'pending',\n  RESOLVED = 'resolved',\n  REJECTED = 'rejected',\n}\n\nconst counter: [number, number] = [0, 0];\nexport const getId = () => {\n  const result = Date.now() * 100;\n  if (counter[0] !== result) {\n    counter[0] = result;\n    counter[1] = 0;\n  }\n  return (counter[0] + counter[1]++).toString(16);\n};\n\nexport class Deferred<T = void, S = unknown, E = unknown> {\n  private txts = getId();\n  private _promise: Promise<T>;\n  private _resolve?: (value: T | PromiseLike<T>) => void;\n  private _reject?: (error: E) => void;\n  private _status: Status = Status.PENDING;\n\n  public state: S;\n\n  constructor() {\n    this._promise = new Promise<T>((resolve, reject) => {\n      this._resolve = resolve;\n      this._reject = reject;\n    })\n      .catch((error) => {\n        this._status = Status.REJECTED;\n        throw error;\n      })\n      .then((value) => {\n        this._status = Status.RESOLVED;\n        return value;\n      });\n    this.resolve = this.resolve.bind(this);\n    this.reject = this.reject.bind(this);\n  }\n\n  get id() {\n    return this.txts;\n  }\n\n  get [Symbol.toStringTag]() {\n    return `Deferred ${this.txts} ${this._status}`;\n  }\n\n  get promise() {\n    return this._promise;\n  }\n\n  get status() {\n    return this._status;\n  }\n\n  resolve(value: T | PromiseLike<T>) {\n    this._resolve(value);\n\n    return this;\n  }\n\n  reject(error: E) {\n    this._reject(error);\n\n    return this;\n  }\n}\n\nexport const defer = <T = void, E = unknown>() => {\n  return new Deferred<T, E>();\n};\n"],"names":["Deferred","Status","defer","getId","counter","result","Date","now","toString","txts","_promise","_resolve","_reject","_status","state","Promise","resolve","reject","catch","error","then","value","bind","id","Symbol","toStringTag","promise","status"],"mappings":";;;;;;;;;;;QAgBaA;eAAAA;;QAhBDC;eAAAA;;QAuECC;eAAAA;;QAhEAC;eAAAA;;;AAPN,IAAA,AAAKF,gCAAAA;;;;WAAAA;;AAMZ,MAAMG,UAA4B;IAAC;IAAG;CAAE;AACjC,MAAMD,QAAQ;IACnB,MAAME,SAASC,KAAKC,GAAG,KAAK;IAC5B,IAAIH,OAAO,CAAC,EAAE,KAAKC,QAAQ;QACzBD,OAAO,CAAC,EAAE,GAAGC;QACbD,OAAO,CAAC,EAAE,GAAG;IACf;IACA,OAAO,AAACA,CAAAA,OAAO,CAAC,EAAE,GAAGA,OAAO,CAAC,EAAE,EAAC,EAAGI,QAAQ,CAAC;AAC9C;AAEO,MAAMR;IACHS,OAAON,QAAQ;IACfO,SAAqB;IACrBC,SAA+C;IAC/CC,QAA6B;IAC7BC,oBAAiC;IAElCC,MAAS;IAEhB,aAAc;QACZ,IAAI,CAACJ,QAAQ,GAAG,IAAIK,QAAW,CAACC,SAASC;YACvC,IAAI,CAACN,QAAQ,GAAGK;YAChB,IAAI,CAACJ,OAAO,GAAGK;QACjB,GACGC,KAAK,CAAC,CAACC;YACN,IAAI,CAACN,OAAO;YACZ,MAAMM;QACR,GACCC,IAAI,CAAC,CAACC;YACL,IAAI,CAACR,OAAO;YACZ,OAAOQ;QACT;QACF,IAAI,CAACL,OAAO,GAAG,IAAI,CAACA,OAAO,CAACM,IAAI,CAAC,IAAI;QACrC,IAAI,CAACL,MAAM,GAAG,IAAI,CAACA,MAAM,CAACK,IAAI,CAAC,IAAI;IACrC;IAEA,IAAIC,KAAK;QACP,OAAO,IAAI,CAACd,IAAI;IAClB;IAEA,IAAI,CAACe,OAAOC,WAAW,CAAC,GAAG;QACzB,OAAO,CAAC,SAAS,EAAE,IAAI,CAAChB,IAAI,CAAC,CAAC,EAAE,IAAI,CAACI,OAAO,EAAE;IAChD;IAEA,IAAIa,UAAU;QACZ,OAAO,IAAI,CAAChB,QAAQ;IACtB;IAEA,IAAIiB,SAAS;QACX,OAAO,IAAI,CAACd,OAAO;IACrB;IAEAG,QAAQK,KAAyB,EAAE;QACjC,IAAI,CAACV,QAAQ,CAACU;QAEd,OAAO,IAAI;IACb;IAEAJ,OAAOE,KAAQ,EAAE;QACf,IAAI,CAACP,OAAO,CAACO;QAEb,OAAO,IAAI;IACb;AACF;AAEO,MAAMjB,QAAQ;IACnB,OAAO,IAAIF;AACb"}