| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 33e2ee5 commit ab0eb4f
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -14,6 +14,7 @@ const { | |||
| 14 | 14 | Symbol, | |
| 15 | 15 | SymbolFor, | |
| 16 | 16 | SymbolToStringTag, | |
| 17 | + SafeWeakMap, | ||
| 17 | 18 | SafeWeakSet, | |
| 18 | 19 | } = primordials; | |
| 19 | 20 | ||
@@ -577,21 +578,27 @@ function emitUnhandledRejectionOrErr(that, err, event) { | |||
| 577 | 578 | process.emit('error', err, event); | |
| 578 | 579 | } | |
| 579 | 580 | ||
| 581 | + // A map of emitter -> map of name -> handler | ||
| 582 | + const eventHandlerValueMap = new SafeWeakMap(); | ||
| 583 | + | ||
| 580 | 584 | function defineEventHandler(emitter, name) { | |
| 581 | 585 | // 8.1.5.1 Event handlers - basically `on[eventName]` attributes | |
| 582 | - let eventHandlerValue; | ||
| 583 | 586 | ObjectDefineProperty(emitter, `on${name}`, { | |
| 584 | 587 | get() { | |
| 585 | - return eventHandlerValue; | ||
| 588 | + return eventHandlerValueMap.get(this)?.get(name); | ||
| 586 | 589 | }, | |
| 587 | 590 | set(value) { | |
| 588 | - if (eventHandlerValue) { | ||
| 589 | - emitter.removeEventListener(name, eventHandlerValue); | ||
| 591 | + const oldValue = eventHandlerValueMap.get(this)?.get(name); | ||
| 592 | + if (oldValue) { | ||
| 593 | + this.removeEventListener(name, oldValue); | ||
| 590 | 594 | } | |
| 591 | 595 | if (typeof value === 'function') { | |
| 592 | - emitter.addEventListener(name, value); | ||
| 596 | + this.addEventListener(name, value); | ||
| 597 | + } | ||
| 598 | + if (!eventHandlerValueMap.has(this)) { | ||
| 599 | + eventHandlerValueMap.set(this, new Map()); | ||
| 593 | 600 | } | |
| 594 | - eventHandlerValue = value; | ||
| 601 | + eventHandlerValueMap.get(this).set(name, value); | ||
| 595 | 602 | }, | |
| 596 | 603 | configurable: true, | |
| 597 | 604 | enumerable: true | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -146,13 +146,14 @@ ObjectDefineProperty( | |||
| 146 | 146 | // This is called from inside the `MessagePort` constructor. | |
| 147 | 147 | function oninit() { | |
| 148 | 148 | initNodeEventTarget(this); | |
| 149 | - // TODO(addaleax): This should be on MessagePort.prototype, but | ||
| 150 | - // defineEventHandler() does not support that. | ||
| 151 | 149 | defineEventHandler(this, 'message'); | |
| 152 | 150 | defineEventHandler(this, 'messageerror'); | |
| 153 | 151 | setupPortReferencing(this, this, 'message'); | |
| 154 | 152 | } | |
| 155 | 153 | ||
| 154 | + defineEventHandler(MessagePort.prototype, 'message'); | ||
| 155 | + defineEventHandler(MessagePort.prototype, 'messageerror'); | ||
| 156 | + | ||
| 156 | 157 | ObjectDefineProperty(MessagePort.prototype, onInitSymbol, { | |
| 157 | 158 | enumerable: true, | |
| 158 | 159 | writable: false, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -165,9 +165,7 @@ const { MessageChannel, MessagePort } = require('worker_threads'); | |||
| 165 | 165 | assert.deepStrictEqual( | |
| 166 | 166 | Object.getOwnPropertyNames(MessagePort.prototype).sort(), | |
| 167 | 167 | [ | |
| 168 | - // TODO(addaleax): This should include onmessage (and eventually | ||
| 169 | - // onmessageerror). | ||
| 170 | - 'close', 'constructor', 'postMessage', 'ref', 'start', | ||
| 171 | - 'unref' | ||
| 168 | + 'close', 'constructor', 'onmessage', 'onmessageerror', 'postMessage', | ||
| 169 | + 'ref', 'start', 'unref' | ||
| 172 | 170 | ]); | |
| 173 | 171 | } | |
| Back | FazBrowse Home | New Git URL |
0 commit comments