{"version":3,"file":"mediaSynchronizationQueue.mjs","names":[],"sources":["../../../../src/hooks/playback/internal/mediaSynchronizationQueue.ts"],"sourcesContent":["export interface MediaAdapterOperationToken {\n  epoch: number;\n  identity: object | undefined;\n}\n\nexport class MediaSynchronizationQueue {\n  private epoch = 0;\n  private tail: Promise<void> = Promise.resolve();\n\n  invalidate() {\n    this.epoch += 1;\n  }\n\n  enqueue<Result>(operation: () => Promise<Result>): Promise<Result> {\n    const pendingOperation = this.tail.then(operation, operation);\n    this.tail = pendingOperation.then(\n      () => undefined,\n      () => undefined\n    );\n    return pendingOperation;\n  }\n\n  run<Result>(\n    getIdentity: () => object | undefined,\n    operation: () => Promise<Result>,\n    superseded: () => Result\n  ): Promise<Result> {\n    const token = this.capture(getIdentity());\n    return this.enqueue(async () => {\n      if (!this.isCurrent(token, getIdentity())) {\n        return superseded();\n      }\n\n      try {\n        const result = await operation();\n        return this.isCurrent(token, getIdentity()) ? result : superseded();\n      } catch (operationError) {\n        if (!this.isCurrent(token, getIdentity())) {\n          return superseded();\n        }\n        throw operationError;\n      }\n    });\n  }\n\n  capture(identity: object | undefined): MediaAdapterOperationToken {\n    return { epoch: this.epoch, identity };\n  }\n\n  isCurrent(token: MediaAdapterOperationToken, identity: object | undefined) {\n    return token.epoch === this.epoch && Object.is(token.identity, identity);\n  }\n}\n"],"mappings":";AAKA,IAAa,4BAAb,MAAuC;;EACrB,KAAA,QAAA;EACc,KAAA,OAAA,QAAQ,QAAQ;;CAE9C,aAAa;EACX,KAAK,SAAS;CAChB;CAEA,QAAgB,WAAmD;EACjE,MAAM,mBAAmB,KAAK,KAAK,KAAK,WAAW,SAAS;EAC5D,KAAK,OAAO,iBAAiB,WACrB,KAAA,SACA,KAAA,CACR;EACA,OAAO;CACT;CAEA,IACE,aACA,WACA,YACiB;EACjB,MAAM,QAAQ,KAAK,QAAQ,YAAY,CAAC;EACxC,OAAO,KAAK,QAAQ,YAAY;GAC9B,IAAI,CAAC,KAAK,UAAU,OAAO,YAAY,CAAC,GACtC,OAAO,WAAW;GAGpB,IAAI;IACF,MAAM,SAAS,MAAM,UAAU;IAC/B,OAAO,KAAK,UAAU,OAAO,YAAY,CAAC,IAAI,SAAS,WAAW;GACpE,SAAS,gBAAgB;IACvB,IAAI,CAAC,KAAK,UAAU,OAAO,YAAY,CAAC,GACtC,OAAO,WAAW;IAEpB,MAAM;GACR;EACF,CAAC;CACH;CAEA,QAAQ,UAA0D;EAChE,OAAO;GAAE,OAAO,KAAK;GAAO;EAAS;CACvC;CAEA,UAAU,OAAmC,UAA8B;EACzE,OAAO,MAAM,UAAU,KAAK,SAAS,OAAO,GAAG,MAAM,UAAU,QAAQ;CACzE;AACF"}