diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2022-07-20 20:28:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-20 20:28:19 +0200 |
commit | d53936eb7d3fe4cda8e06f7310e4c8f12702b413 (patch) | |
tree | ad4b5cf09dee34e8618096c35e58b54c0312f2e1 /ext/web/02_event.js | |
parent | 6e350b2b7c7b027b31694875cdb423f494d1b423 (diff) |
Reland "feat: add "unhandledrejection" event support" (#15211)
Diffstat (limited to 'ext/web/02_event.js')
-rw-r--r-- | ext/web/02_event.js | 53 |
1 files changed, 53 insertions, 0 deletions
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; |