django-vue3-admin-web/node_modules/aws-crt/dist/common/cancel.js
2025-10-20 21:21:14 +08:00

131 lines
4.6 KiB
JavaScript

"use strict";
/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.newCancellablePromiseFromNextEvent = exports.CancelController = exports.EVENT_NAME = void 0;
/**
*
* A module containing support for cancelling asynchronous operations
*
* @packageDocumentation
* @module cancel
*/
const events_1 = require("events");
const promise = __importStar(require("./promise"));
exports.EVENT_NAME = 'cancelled';
/**
* CRT implementation of the ICancelController interface
*/
class CancelController {
constructor(options) {
this.cancelled = false;
if (options && options.emitterFactory) {
this.emitter = options.emitterFactory();
}
else {
this.emitter = new events_1.EventEmitter();
}
}
/**
* Cancels all asynchronous operations associated with this controller
*/
cancel() {
if (!this.cancelled) {
this.cancelled = true;
this.emitter.emit(exports.EVENT_NAME);
this.emitter.removeAllListeners(exports.EVENT_NAME);
}
}
/**
* Checks whether or not the controller is in the cancelled state
*/
hasBeenCancelled() {
return this.cancelled;
}
/**
* Registers a callback to be notified when cancel() is invoked externally. In general, the callback
* will cancel an asynchronous operation by rejecting the associated promise.
*
* IMPORTANT: The listener is invoked synchronously if the controller has already been cancelled.
*
* @param listener - function to invoke on cancel; invoked synchronously if the controller has been cancelled
*
* @return undefined if the controller has already been cancelled, otherwise a function object whose invocation
* will remove the listener from the controller's event emitter.
*
*/
addListener(listener) {
if (this.cancelled) {
listener();
return undefined;
}
this.emitter.on(exports.EVENT_NAME, listener);
return () => { this.emitter.removeListener(exports.EVENT_NAME, listener); };
}
}
exports.CancelController = CancelController;
/**
* Creates a promise that can be rejected by a CancelController and resolved by the receipt of an event from an
* EventEmitter.
*
* @param config promise creation options
*/
function newCancellablePromiseFromNextEvent(config) {
let onEvent = undefined;
let cancelRemoveListener = undefined;
let liftedPromise = promise.newLiftedPromise();
onEvent = (eventData) => {
try {
if (config.eventDataTransformer) {
liftedPromise.resolve(config.eventDataTransformer(eventData));
}
else {
liftedPromise.resolve(eventData);
}
}
catch (err) {
liftedPromise.reject(err);
}
};
config.emitter.addListener(config.eventName, onEvent);
if (config.cancelController) {
cancelRemoveListener = config.cancelController.addListener(() => {
liftedPromise.reject(config.cancelMessage);
});
}
return promise.makeSelfCleaningPromise(liftedPromise.promise, () => {
if (onEvent) {
config.emitter.removeListener(config.eventName, onEvent);
}
if (cancelRemoveListener) {
cancelRemoveListener();
}
});
}
exports.newCancellablePromiseFromNextEvent = newCancellablePromiseFromNextEvent;
//# sourceMappingURL=cancel.js.map