From d53936eb7d3fe4cda8e06f7310e4c8f12702b413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 20 Jul 2022 20:28:19 +0200 Subject: Reland "feat: add "unhandledrejection" event support" (#15211) --- ext/web/02_event.js | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'ext') diff --git a/ext/web/02_event.js b/ext/web/02_event.js index 5d8f69673..105c7d3c4 100644 --- a/ext/web/02_event.js +++ b/ext/web/02_event.js @@ -1278,6 +1278,58 @@ [SymbolToStringTag] = "ProgressEvent"; } + class PromiseRejectionEvent extends Event { + #promise = null; + #reason = null; + + get promise() { + return this.#promise; + } + get reason() { + return this.#reason; + } + + constructor( + type, + { + bubbles, + cancelable, + composed, + promise, + reason, + } = {}, + ) { + super(type, { + bubbles: bubbles, + cancelable: cancelable, + composed: composed, + }); + + this.#promise = promise; + this.#reason = reason; + } + + [SymbolFor("Deno.privateCustomInspect")](inspect) { + return inspect(consoleInternal.createFilteredInspectProxy({ + object: this, + evaluate: this instanceof PromiseRejectionEvent, + keys: [ + ...EVENT_PROPS, + "promise", + "reason", + ], + })); + } + + // TODO(lucacasonato): remove when this interface is spec aligned + [SymbolToStringTag] = "PromiseRejectionEvent"; + } + + defineEnumerableProps(PromiseRejectionEvent, [ + "promise", + "reason", + ]); + const _eventHandlers = Symbol("eventHandlers"); function makeWrappedHandler(handler, isSpecialErrorEventHandler) { @@ -1426,6 +1478,7 @@ window.MessageEvent = MessageEvent; window.CustomEvent = CustomEvent; window.ProgressEvent = ProgressEvent; + window.PromiseRejectionEvent = PromiseRejectionEvent; window.dispatchEvent = EventTarget.prototype.dispatchEvent; window.addEventListener = EventTarget.prototype.addEventListener; window.removeEventListener = EventTarget.prototype.removeEventListener; -- cgit v1.2.3