@azure/core-rest-pipeline
Version:
Isomorphic client library for making HTTP requests in node.js and browser.
33 lines • 1.37 kB
JavaScript
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
/**
* Creates a native AbortSignal which reflects the state of the provided AbortSignalLike.
* If the AbortSignalLike is already a native AbortSignal, it is returned as is.
* @param abortSignalLike - The AbortSignalLike to wrap.
* @returns - An object containing the native AbortSignal and an optional cleanup function. The cleanup function should be called when the AbortSignal is no longer needed.
*/
export function wrapAbortSignalLike(abortSignalLike) {
if (abortSignalLike instanceof AbortSignal) {
return { abortSignal: abortSignalLike };
}
if (abortSignalLike.aborted) {
return {
abortSignal: AbortSignal.abort("reason" in abortSignalLike ? abortSignalLike.reason : undefined),
};
}
const controller = new AbortController();
let needsCleanup = true;
function cleanup() {
if (needsCleanup) {
abortSignalLike.removeEventListener("abort", listener);
needsCleanup = false;
}
}
function listener() {
controller.abort("reason" in abortSignalLike ? abortSignalLike.reason : undefined);
cleanup();
}
abortSignalLike.addEventListener("abort", listener);
return { abortSignal: controller.signal, cleanup };
}
//# sourceMappingURL=wrapAbortSignal.js.map