summaryrefslogtreecommitdiff
path: root/ext/web/02_event.js
diff options
context:
space:
mode:
Diffstat (limited to 'ext/web/02_event.js')
-rw-r--r--ext/web/02_event.js53
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;