signal.cjs 930 B

123456789101112131415161718192021222324252627282930
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.raceWithSignal = void 0;
  4. async function raceWithSignal(promise, signal) {
  5. if (signal === undefined) {
  6. return promise;
  7. }
  8. let listener;
  9. return Promise.race([
  10. promise.catch((err) => {
  11. if (!signal?.aborted) {
  12. throw err;
  13. }
  14. else {
  15. return undefined;
  16. }
  17. }),
  18. new Promise((_, reject) => {
  19. listener = () => {
  20. reject(new Error("Aborted"));
  21. };
  22. signal.addEventListener("abort", listener);
  23. // Must be here inside the promise to avoid a race condition
  24. if (signal.aborted) {
  25. reject(new Error("Aborted"));
  26. }
  27. }),
  28. ]).finally(() => signal.removeEventListener("abort", listener));
  29. }
  30. exports.raceWithSignal = raceWithSignal;