{"version":3,"file":"callback.cjs","names":["Deferred"],"sources":["../../src/utils/callback.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Deferred } from './promise';\n\n/**\n * Bind the callback and only invoke the callback once regardless how many times `BindOnceFuture.call` is invoked.\n */\nexport class BindOnceFuture<\n  R,\n  This = unknown,\n  T extends (this: This, ...args: unknown[]) => R = () => R,\n> {\n  private _isCalled = false;\n  private _deferred = new Deferred<R>();\n  private _callback: T;\n  private _that: This;\n\n  constructor(callback: T, that: This) {\n    this._callback = callback;\n    this._that = that;\n  }\n\n  get isCalled() {\n    return this._isCalled;\n  }\n\n  get promise() {\n    return this._deferred.promise;\n  }\n\n  call(...args: Parameters<T>): Promise<R> {\n    if (!this._isCalled) {\n      this._isCalled = true;\n      try {\n        Promise.resolve(this._callback.call(this._that, ...args)).then(\n          val => this._deferred.resolve(val),\n          err => this._deferred.reject(err)\n        );\n      } catch (err) {\n        this._deferred.reject(err);\n      }\n    }\n    return this._deferred.promise;\n  }\n}\n"],"mappings":";;;;;AAUA,IAAa,iBAAb,MAIE;CACA,YAAoB;CACpB,YAAoB,IAAIA,gBAAAA,SAAY;CACpC;CACA;CAEA,YAAY,UAAa,MAAY;EACnC,KAAK,YAAY;EACjB,KAAK,QAAQ;CACf;CAEA,IAAI,WAAW;EACb,OAAO,KAAK;CACd;CAEA,IAAI,UAAU;EACZ,OAAO,KAAK,UAAU;CACxB;CAEA,KAAK,GAAG,MAAiC;EACvC,IAAI,CAAC,KAAK,WAAW;GACnB,KAAK,YAAY;GACjB,IAAI;IACF,QAAQ,QAAQ,KAAK,UAAU,KAAK,KAAK,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,MACxD,QAAO,KAAK,UAAU,QAAQ,GAAG,IACjC,QAAO,KAAK,UAAU,OAAO,GAAG,CAClC;GACF,SAAS,KAAK;IACZ,KAAK,UAAU,OAAO,GAAG;GAC3B;EACF;EACA,OAAO,KAAK,UAAU;CACxB;AACF"}