UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

1 lines 6.08 kB
{"version":3,"sources":["../../../packages/core/async/cancellation.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,qBAAa,uBAAuB;IAChC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAEtD;;;OAGG;gBACS,iBAAiB,CAAC,EAAE,MAAM;IAQtC,uEAAuE;IACvE,IAAW,uBAAuB,IAAI,OAAO,CAE5C;IAED,+EAA+E;IAC/E,IAAW,KAAK,IAAI,iBAAiB,CAEpC;IAED;;;;;OAKG;WACW,uBAAuB,CAAC,GAAG,MAAM,EAAE,iBAAiB,EAAE,GAAG,uBAAuB;IAU9F,+CAA+C;IACxC,MAAM,IAAI,IAAI;IAKrB;;;OAGG;IACI,WAAW,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAKnD,gGAAgG;IACzF,OAAO,IAAI,IAAI;IAStB,OAAO,CAAC,WAAW;CAQtB;AAED,kEAAkE;AAClE,qBAAa,iBAAiB;IASd,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,MAAM,CAAC,IAAI,CAA2B;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IAErD;;;OAGG;gBAC0B,MAAM,EAAE,uBAAuB;IAO5D,gDAAgD;IAChD,WAAkB,IAAI,IAAI,iBAAiB,CAK1C;IAED,sFAAsF;IACtF,IAAW,uBAAuB,IAAI,OAAO,CAE5C;IAED,oEAAoE;IAC7D,4BAA4B,IAAI,IAAI;IAM3C;;;OAGG;IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI3C,OAAO,CAAC,MAAM;CAUjB","file":"cancellation.d.ts","sourcesContent":["/** Signals to a CancellationToken that it should be canceled. */\r\nexport class CancellationTokenSource {\r\n private timerHandle = 0;\r\n private disposed = false;\r\n private canceled = false;\r\n private readonly cancellationToken: CancellationToken;\r\n\r\n /**\r\n * Initializes a new instance of the CancellationTokenSource class.\r\n * @param millisecondsDelay The optional time interval in milliseconds to wait before canceling.\r\n */\r\n constructor(millisecondsDelay?: number) {\r\n this.cancellationToken = new CancellationToken(this);\r\n\r\n if (millisecondsDelay) {\r\n this.cancelAfter(millisecondsDelay);\r\n }\r\n }\r\n\r\n /** Gets a value indicating whether cancellation has been requested. */\r\n public get isCancellationRequested(): boolean {\r\n return this.canceled;\r\n }\r\n\r\n /** Gets the CancellationToken associated with this CancellationTokenSource. */\r\n public get token(): CancellationToken {\r\n return this.cancellationToken;\r\n }\r\n\r\n /**\r\n * Creates a CancellationTokenSource that will be in the canceled state when any of the source tokens\r\n * in the specified array are in the canceled state.\r\n * @param tokens An array that contains the cancellation token instances to observe.\r\n * @returns A CancellationTokenSource that is linked to the source tokens.\r\n */\r\n public static createLinkedTokenSource(...tokens: CancellationToken[]): CancellationTokenSource {\r\n const source = new CancellationTokenSource();\r\n\r\n tokens.forEach((token) => {\r\n token.register(source.cancel.bind(this));\r\n });\r\n\r\n return source;\r\n }\r\n\r\n /** Communicates a request for cancellation. */\r\n public cancel(): void {\r\n this.canceled = true;\r\n this.cancelTimer();\r\n }\r\n\r\n /**\r\n * Schedules a cancel operation on this CancellationTokenSource after the specified number of milliseconds.\r\n * @param millisecondsDelay The time span to wait before canceling this CancellationTokenSource.\r\n */\r\n public cancelAfter(millisecondsDelay: number): void {\r\n this.cancelTimer();\r\n this.timerHandle = setTimeout(<TimerHandler>this.cancel.bind(this), millisecondsDelay);\r\n }\r\n\r\n /** Releases all resources used by the current instance of the CancellationTokenSource class. */\r\n public dispose(): void {\r\n if (this.disposed) {\r\n return;\r\n }\r\n\r\n this.disposed = true;\r\n this.cancelTimer();\r\n }\r\n\r\n private cancelTimer(): void {\r\n if (this.timerHandle === 0) {\r\n return;\r\n }\r\n\r\n clearTimeout(this.timerHandle);\r\n this.timerHandle = 0;\r\n }\r\n}\r\n\r\n/** Propagates notification that operations should be canceled. */\r\nexport class CancellationToken {\r\n private static none: CancellationToken = null;\r\n private readonly parentCancel: () => void;\r\n private readonly callbacks = new Array<() => void>();\r\n\r\n /**\r\n * Initializes a new instance of the CancellationToken class.\r\n * @param source The underlying CancellationTokenSource.\r\n */\r\n constructor(private readonly source: CancellationTokenSource) {\r\n // this is a 'bait & switch' because only a CTS is allowed to trigger cancellation\r\n const originalCancel = source.cancel;\r\n this.parentCancel = () => originalCancel.call(this.source);\r\n this.source.cancel = () => this.cancel();\r\n }\r\n\r\n /** Returns an empty CancellationToken value. */\r\n public static get NONE(): CancellationToken {\r\n if (CancellationToken.none === null) {\r\n CancellationToken.none = new CancellationTokenSource().token;\r\n }\r\n return CancellationToken.none;\r\n }\r\n\r\n /** Gets a value indicating whether cancellation has been requested for this token. */\r\n public get isCancellationRequested(): boolean {\r\n return this.source.isCancellationRequested;\r\n }\r\n\r\n /** Throws an Error if this token has had cancellation requested. */\r\n public throwIfCancellationRequested(): void {\r\n if (this.isCancellationRequested) {\r\n throw new Error('The operation was canceled.');\r\n }\r\n }\r\n\r\n /**\r\n * Registers a function that will be called when this CancellationToken is canceled.\r\n * @param callback The function to be executed when the CancellationToken is canceled.\r\n */\r\n public register(callback: () => void): void {\r\n this.callbacks.push(callback);\r\n }\r\n\r\n private cancel(): void {\r\n if (this.isCancellationRequested) {\r\n return;\r\n }\r\n\r\n this.parentCancel();\r\n this.callbacks.forEach((callback) => {\r\n callback();\r\n });\r\n }\r\n}\r\n"]}