| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent af60fbb commit 6413769
5 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -67,7 +67,7 @@ rules: | |||
| 67 | 67 | - name: MessageChannel | |
| 68 | 68 | message: Use `const { MessageChannel } = require('internal/worker/io');` instead of the global. | |
| 69 | 69 | - name: MessageEvent | |
| 70 | - message: Use `const { MessageEvent } = require('internal/worker/io');` instead of the global. | ||
| 70 | + message: Use `const { MessageEvent } = require('internal/deps/undici/undici');` instead of the global. | ||
| 71 | 71 | - name: MessagePort | |
| 72 | 72 | message: Use `const { MessagePort } = require('internal/worker/io');` instead of the global. | |
| 73 | 73 | - name: Navigator | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -39,7 +39,7 @@ defineLazyProperties(globalThis, 'buffer', ['atob', 'btoa']); | |||
| 39 | 39 | // https://html.spec.whatwg.org/multipage/web-messaging.html#broadcasting-to-other-browsing-contexts | |
| 40 | 40 | exposeLazyInterfaces(globalThis, 'internal/worker/io', ['BroadcastChannel']); | |
| 41 | 41 | exposeLazyInterfaces(globalThis, 'internal/worker/io', [ | |
| 42 | - 'MessageChannel', 'MessagePort', 'MessageEvent', | ||
| 42 | + 'MessageChannel', 'MessagePort', | ||
| 43 | 43 | ]); | |
| 44 | 44 | // https://www.w3.org/TR/FileAPI/#dfn-Blob | |
| 45 | 45 | exposeLazyInterfaces(globalThis, 'internal/blob', ['Blob']); | |
@@ -78,7 +78,7 @@ ObjectDefineProperty(globalThis, 'fetch', { | |||
| 78 | 78 | // https://fetch.spec.whatwg.org/#request-class | |
| 79 | 79 | // https://fetch.spec.whatwg.org/#response-class | |
| 80 | 80 | exposeLazyInterfaces(globalThis, 'internal/deps/undici/undici', [ | |
| 81 | - 'FormData', 'Headers', 'Request', 'Response', | ||
| 81 | + 'FormData', 'Headers', 'Request', 'Response', 'MessageEvent', | ||
| 82 | 82 | ]); | |
| 83 | 83 | ||
| 84 | 84 | // https://websockets.spec.whatwg.org/ | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -20,7 +20,6 @@ const { | |||
| 20 | 20 | } = primordials; | |
| 21 | 21 | ||
| 22 | 22 | const { | |
| 23 | - kEmptyObject, | ||
| 24 | 23 | kEnumerableProperty, | |
| 25 | 24 | setOwnProperty, | |
| 26 | 25 | } = require('internal/util'); | |
@@ -38,7 +37,6 @@ const { | |||
| 38 | 37 | moveMessagePortToContext, | |
| 39 | 38 | receiveMessageOnPort: receiveMessageOnPort_, | |
| 40 | 39 | stopMessagePort, | |
| 41 | - checkMessagePort, | ||
| 42 | 40 | DOMException, | |
| 43 | 41 | } = internalBinding('messaging'); | |
| 44 | 42 | const { | |
@@ -59,25 +57,19 @@ const { | |||
| 59 | 57 | const { inspect } = require('internal/util/inspect'); | |
| 60 | 58 | const { | |
| 61 | 59 | codes: { | |
| 62 | - ERR_INVALID_ARG_TYPE, | ||
| 63 | 60 | ERR_INVALID_THIS, | |
| 64 | 61 | ERR_MISSING_ARGS, | |
| 65 | 62 | }, | |
| 66 | 63 | } = require('internal/errors'); | |
| 67 | 64 | ||
| 68 | - const kData = Symbol('kData'); | ||
| 69 | 65 | const kHandle = Symbol('kHandle'); | |
| 70 | 66 | const kIncrementsPortRef = Symbol('kIncrementsPortRef'); | |
| 71 | - const kLastEventId = Symbol('kLastEventId'); | ||
| 72 | 67 | const kName = Symbol('kName'); | |
| 73 | - const kOrigin = Symbol('kOrigin'); | ||
| 74 | 68 | const kOnMessage = Symbol('kOnMessage'); | |
| 75 | 69 | const kOnMessageError = Symbol('kOnMessageError'); | |
| 76 | 70 | const kPort = Symbol('kPort'); | |
| 77 | - const kPorts = Symbol('kPorts'); | ||
| 78 | 71 | const kWaitingStreams = Symbol('kWaitingStreams'); | |
| 79 | 72 | const kWritableCallbacks = Symbol('kWritableCallbacks'); | |
| 80 | - const kSource = Symbol('kSource'); | ||
| 81 | 73 | const kStartedReading = Symbol('kStartedReading'); | |
| 82 | 74 | const kStdioWantsMoreDataCallback = Symbol('kStdioWantsMoreDataCallback'); | |
| 83 | 75 | const kCurrentlyReceivingPorts = | |
@@ -93,6 +85,11 @@ const messageTypes = { | |||
| 93 | 85 | LOAD_SCRIPT: 'loadScript', | |
| 94 | 86 | }; | |
| 95 | 87 | ||
| 88 | + let messageEvent; | ||
| 89 | + function lazyMessageEvent() { | ||
| 90 | + return messageEvent ??= require('internal/deps/undici/undici').MessageEvent; | ||
| 91 | + } | ||
| 92 | + | ||
| 96 | 93 | // We have to mess with the MessagePort prototype a bit, so that a) we can make | |
| 97 | 94 | // it inherit from NodeEventTarget, even though it is a C++ class, and b) we do | |
| 98 | 95 | // not provide methods that are not present in the Browser and not documented | |
@@ -119,95 +116,6 @@ MessagePort.prototype.hasRef = function() { | |||
| 119 | 116 | return !!FunctionPrototypeCall(MessagePortPrototype.hasRef, this); | |
| 120 | 117 | }; | |
| 121 | 118 | ||
| 122 | - function validateMessagePort(port, name) { | ||
| 123 | - if (!checkMessagePort(port)) | ||
| 124 | - throw new ERR_INVALID_ARG_TYPE(name, 'MessagePort', port); | ||
| 125 | - } | ||
| 126 | - | ||
| 127 | - function isMessageEvent(value) { | ||
| 128 | - return value != null && kData in value; | ||
| 129 | - } | ||
| 130 | - | ||
| 131 | - class MessageEvent extends Event { | ||
| 132 | - constructor(type, { | ||
| 133 | - data = null, | ||
| 134 | - origin = '', | ||
| 135 | - lastEventId = '', | ||
| 136 | - source = null, | ||
| 137 | - ports = [], | ||
| 138 | - } = kEmptyObject) { | ||
| 139 | - super(type); | ||
| 140 | - this[kData] = data; | ||
| 141 | - this[kOrigin] = `${origin}`; | ||
| 142 | - this[kLastEventId] = `${lastEventId}`; | ||
| 143 | - this[kSource] = source; | ||
| 144 | - this[kPorts] = [...ports]; | ||
| 145 | - | ||
| 146 | - if (this[kSource] !== null) | ||
| 147 | - validateMessagePort(this[kSource], 'init.source'); | ||
| 148 | - for (let i = 0; i < this[kPorts].length; i++) | ||
| 149 | - validateMessagePort(this[kPorts][i], `init.ports[${i}]`); | ||
| 150 | - } | ||
| 151 | - } | ||
| 152 | - | ||
| 153 | - ObjectDefineProperties(MessageEvent.prototype, { | ||
| 154 | - data: { | ||
| 155 | - __proto__: null, | ||
| 156 | - get() { | ||
| 157 | - if (!isMessageEvent(this)) | ||
| 158 | - throw new ERR_INVALID_THIS('MessageEvent'); | ||
| 159 | - return this[kData]; | ||
| 160 | - }, | ||
| 161 | - enumerable: true, | ||
| 162 | - configurable: true, | ||
| 163 | - set: undefined, | ||
| 164 | - }, | ||
| 165 | - origin: { | ||
| 166 | - __proto__: null, | ||
| 167 | - get() { | ||
| 168 | - if (!isMessageEvent(this)) | ||
| 169 | - throw new ERR_INVALID_THIS('MessageEvent'); | ||
| 170 | - return this[kOrigin]; | ||
| 171 | - }, | ||
| 172 | - enumerable: true, | ||
| 173 | - configurable: true, | ||
| 174 | - set: undefined, | ||
| 175 | - }, | ||
| 176 | - lastEventId: { | ||
| 177 | - __proto__: null, | ||
| 178 | - get() { | ||
| 179 | - if (!isMessageEvent(this)) | ||
| 180 | - throw new ERR_INVALID_THIS('MessageEvent'); | ||
| 181 | - return this[kLastEventId]; | ||
| 182 | - }, | ||
| 183 | - enumerable: true, | ||
| 184 | - configurable: true, | ||
| 185 | - set: undefined, | ||
| 186 | - }, | ||
| 187 | - source: { | ||
| 188 | - __proto__: null, | ||
| 189 | - get() { | ||
| 190 | - if (!isMessageEvent(this)) | ||
| 191 | - throw new ERR_INVALID_THIS('MessageEvent'); | ||
| 192 | - return this[kSource]; | ||
| 193 | - }, | ||
| 194 | - enumerable: true, | ||
| 195 | - configurable: true, | ||
| 196 | - set: undefined, | ||
| 197 | - }, | ||
| 198 | - ports: { | ||
| 199 | - __proto__: null, | ||
| 200 | - get() { | ||
| 201 | - if (!isMessageEvent(this)) | ||
| 202 | - throw new ERR_INVALID_THIS('MessageEvent'); | ||
| 203 | - return this[kPorts]; | ||
| 204 | - }, | ||
| 205 | - enumerable: true, | ||
| 206 | - configurable: true, | ||
| 207 | - set: undefined, | ||
| 208 | - }, | ||
| 209 | - }); | ||
| 210 | - | ||
| 211 | 119 | const originalCreateEvent = EventTarget.prototype[kCreateEvent]; | |
| 212 | 120 | ObjectDefineProperty( | |
| 213 | 121 | MessagePort.prototype, | |
@@ -220,7 +128,7 @@ ObjectDefineProperty( | |||
| 220 | 128 | } | |
| 221 | 129 | const ports = this[kCurrentlyReceivingPorts]; | |
| 222 | 130 | this[kCurrentlyReceivingPorts] = undefined; | |
| 223 | - return new MessageEvent(type, { data, ports }); | ||
| 131 | + return new (lazyMessageEvent())(type, { data, ports }); | ||
| 224 | 132 | }, | |
| 225 | 133 | configurable: false, | |
| 226 | 134 | writable: false, | |
@@ -413,7 +321,7 @@ function receiveMessageOnPort(port) { | |||
| 413 | 321 | } | |
| 414 | 322 | ||
| 415 | 323 | function onMessageEvent(type, data) { | |
| 416 | - this.dispatchEvent(new MessageEvent(type, { data })); | ||
| 324 | + this.dispatchEvent(new (lazyMessageEvent())(type, { data })); | ||
| 417 | 325 | } | |
| 418 | 326 | ||
| 419 | 327 | function isBroadcastChannel(value) { | |
@@ -546,7 +454,6 @@ module.exports = { | |||
| 546 | 454 | moveMessagePortToContext, | |
| 547 | 455 | MessagePort, | |
| 548 | 456 | MessageChannel, | |
| 549 | - MessageEvent, | ||
| 550 | 457 | receiveMessageOnPort, | |
| 551 | 458 | setupPortReferencing, | |
| 552 | 459 | ReadableWorkerStdio, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,21 +1,14 @@ | |||
| 1 | - // Flags: --expose-internals | ||
| 2 | 1 | 'use strict'; | |
| 3 | 2 | ||
| 4 | 3 | require('../common'); | |
| 5 | 4 | const assert = require('assert'); | |
| 6 | 5 | ||
| 7 | - const { | ||
| 8 | - MessageEvent, | ||
| 9 | - } = require('internal/worker/io'); | ||
| 10 | - | ||
| 11 | 6 | [ | |
| 12 | 7 | 'data', | |
| 13 | 8 | 'origin', | |
| 14 | 9 | 'lastEventId', | |
| 15 | 10 | 'source', | |
| 16 | 11 | 'ports', | |
| 17 | 12 | ].forEach((i) => { | |
| 18 | - assert.throws(() => Reflect.get(MessageEvent.prototype, i, {}), { | ||
| 19 | - code: 'ERR_INVALID_THIS', | ||
| 20 | - }); | ||
| 13 | + assert.throws(() => Reflect.get(MessageEvent.prototype, i, {}), TypeError); | ||
| 21 | 14 | }); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -61,31 +61,31 @@ const dummyPort = new MessageChannel().port1; | |||
| 61 | 61 | assert.throws(() => { | |
| 62 | 62 | new MessageEvent('message', { source: 1 }); | |
| 63 | 63 | }, { | |
| 64 | - code: 'ERR_INVALID_ARG_TYPE', | ||
| 65 | - message: /The "init\.source" property must be an instance of MessagePort/, | ||
| 64 | + name: 'TypeError', | ||
| 65 | + message: /Expected 1 to be an instance of MessagePort/, | ||
| 66 | 66 | }); | |
| 67 | 67 | assert.throws(() => { | |
| 68 | 68 | new MessageEvent('message', { source: {} }); | |
| 69 | 69 | }, { | |
| 70 | - code: 'ERR_INVALID_ARG_TYPE', | ||
| 71 | - message: /The "init\.source" property must be an instance of MessagePort/, | ||
| 70 | + name: 'TypeError', | ||
| 71 | + message: /Expected {} to be an instance of MessagePort/, | ||
| 72 | 72 | }); | |
| 73 | 73 | assert.throws(() => { | |
| 74 | 74 | new MessageEvent('message', { ports: 0 }); | |
| 75 | 75 | }, { | |
| 76 | - message: /ports is not iterable/, | ||
| 76 | + message: /Sequence: Value of type Number is not an Object/, | ||
| 77 | 77 | }); | |
| 78 | 78 | assert.throws(() => { | |
| 79 | 79 | new MessageEvent('message', { ports: [ null ] }); | |
| 80 | 80 | }, { | |
| 81 | - code: 'ERR_INVALID_ARG_TYPE', | ||
| 82 | - message: /The "init\.ports\[0\]" property must be an instance of MessagePort/, | ||
| 81 | + name: 'TypeError', | ||
| 82 | + message: /Expected null to be an instance of MessagePort/, | ||
| 83 | 83 | }); | |
| 84 | 84 | assert.throws(() => { | |
| 85 | 85 | new MessageEvent('message', { ports: [ {} ] }); | |
| 86 | 86 | }, { | |
| 87 | - code: 'ERR_INVALID_ARG_TYPE', | ||
| 88 | - message: /The "init\.ports\[0\]" property must be an instance of MessagePort/, | ||
| 87 | + name: 'TypeError', | ||
| 88 | + message: /Expected {} to be an instance of MessagePort/, | ||
| 89 | 89 | }); | |
| 90 | 90 | } | |
| 91 | 91 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments