Spaces:
Runtime error
Runtime error
| const { webidl } = require('../fetch/webidl') | |
| const { kEnumerableProperty } = require('../core/util') | |
| const { MessagePort } = require('worker_threads') | |
| /** | |
| * @see https://html.spec.whatwg.org/multipage/comms.html#messageevent | |
| */ | |
| class MessageEvent extends Event { | |
| #eventInit | |
| constructor (type, eventInitDict = {}) { | |
| webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent constructor' }) | |
| type = webidl.converters.DOMString(type) | |
| eventInitDict = webidl.converters.MessageEventInit(eventInitDict) | |
| super(type, eventInitDict) | |
| this.#eventInit = eventInitDict | |
| } | |
| get data () { | |
| webidl.brandCheck(this, MessageEvent) | |
| return this.#eventInit.data | |
| } | |
| get origin () { | |
| webidl.brandCheck(this, MessageEvent) | |
| return this.#eventInit.origin | |
| } | |
| get lastEventId () { | |
| webidl.brandCheck(this, MessageEvent) | |
| return this.#eventInit.lastEventId | |
| } | |
| get source () { | |
| webidl.brandCheck(this, MessageEvent) | |
| return this.#eventInit.source | |
| } | |
| get ports () { | |
| webidl.brandCheck(this, MessageEvent) | |
| if (!Object.isFrozen(this.#eventInit.ports)) { | |
| Object.freeze(this.#eventInit.ports) | |
| } | |
| return this.#eventInit.ports | |
| } | |
| initMessageEvent ( | |
| type, | |
| bubbles = false, | |
| cancelable = false, | |
| data = null, | |
| origin = '', | |
| lastEventId = '', | |
| source = null, | |
| ports = [] | |
| ) { | |
| webidl.brandCheck(this, MessageEvent) | |
| webidl.argumentLengthCheck(arguments, 1, { header: 'MessageEvent.initMessageEvent' }) | |
| return new MessageEvent(type, { | |
| bubbles, cancelable, data, origin, lastEventId, source, ports | |
| }) | |
| } | |
| } | |
| /** | |
| * @see https://websockets.spec.whatwg.org/#the-closeevent-interface | |
| */ | |
| class CloseEvent extends Event { | |
| #eventInit | |
| constructor (type, eventInitDict = {}) { | |
| webidl.argumentLengthCheck(arguments, 1, { header: 'CloseEvent constructor' }) | |
| type = webidl.converters.DOMString(type) | |
| eventInitDict = webidl.converters.CloseEventInit(eventInitDict) | |
| super(type, eventInitDict) | |
| this.#eventInit = eventInitDict | |
| } | |
| get wasClean () { | |
| webidl.brandCheck(this, CloseEvent) | |
| return this.#eventInit.wasClean | |
| } | |
| get code () { | |
| webidl.brandCheck(this, CloseEvent) | |
| return this.#eventInit.code | |
| } | |
| get reason () { | |
| webidl.brandCheck(this, CloseEvent) | |
| return this.#eventInit.reason | |
| } | |
| } | |
| // https://html.spec.whatwg.org/multipage/webappapis.html#the-errorevent-interface | |
| class ErrorEvent extends Event { | |
| #eventInit | |
| constructor (type, eventInitDict) { | |
| webidl.argumentLengthCheck(arguments, 1, { header: 'ErrorEvent constructor' }) | |
| super(type, eventInitDict) | |
| type = webidl.converters.DOMString(type) | |
| eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {}) | |
| this.#eventInit = eventInitDict | |
| } | |
| get message () { | |
| webidl.brandCheck(this, ErrorEvent) | |
| return this.#eventInit.message | |
| } | |
| get filename () { | |
| webidl.brandCheck(this, ErrorEvent) | |
| return this.#eventInit.filename | |
| } | |
| get lineno () { | |
| webidl.brandCheck(this, ErrorEvent) | |
| return this.#eventInit.lineno | |
| } | |
| get colno () { | |
| webidl.brandCheck(this, ErrorEvent) | |
| return this.#eventInit.colno | |
| } | |
| get error () { | |
| webidl.brandCheck(this, ErrorEvent) | |
| return this.#eventInit.error | |
| } | |
| } | |
| Object.defineProperties(MessageEvent.prototype, { | |
| [Symbol.toStringTag]: { | |
| value: 'MessageEvent', | |
| configurable: true | |
| }, | |
| data: kEnumerableProperty, | |
| origin: kEnumerableProperty, | |
| lastEventId: kEnumerableProperty, | |
| source: kEnumerableProperty, | |
| ports: kEnumerableProperty, | |
| initMessageEvent: kEnumerableProperty | |
| }) | |
| Object.defineProperties(CloseEvent.prototype, { | |
| [Symbol.toStringTag]: { | |
| value: 'CloseEvent', | |
| configurable: true | |
| }, | |
| reason: kEnumerableProperty, | |
| code: kEnumerableProperty, | |
| wasClean: kEnumerableProperty | |
| }) | |
| Object.defineProperties(ErrorEvent.prototype, { | |
| [Symbol.toStringTag]: { | |
| value: 'ErrorEvent', | |
| configurable: true | |
| }, | |
| message: kEnumerableProperty, | |
| filename: kEnumerableProperty, | |
| lineno: kEnumerableProperty, | |
| colno: kEnumerableProperty, | |
| error: kEnumerableProperty | |
| }) | |
| webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort) | |
| webidl.converters['sequence<MessagePort>'] = webidl.sequenceConverter( | |
| webidl.converters.MessagePort | |
| ) | |
| const eventInit = [ | |
| { | |
| key: 'bubbles', | |
| converter: webidl.converters.boolean, | |
| defaultValue: false | |
| }, | |
| { | |
| key: 'cancelable', | |
| converter: webidl.converters.boolean, | |
| defaultValue: false | |
| }, | |
| { | |
| key: 'composed', | |
| converter: webidl.converters.boolean, | |
| defaultValue: false | |
| } | |
| ] | |
| webidl.converters.MessageEventInit = webidl.dictionaryConverter([ | |
| ...eventInit, | |
| { | |
| key: 'data', | |
| converter: webidl.converters.any, | |
| defaultValue: null | |
| }, | |
| { | |
| key: 'origin', | |
| converter: webidl.converters.USVString, | |
| defaultValue: '' | |
| }, | |
| { | |
| key: 'lastEventId', | |
| converter: webidl.converters.DOMString, | |
| defaultValue: '' | |
| }, | |
| { | |
| key: 'source', | |
| // Node doesn't implement WindowProxy or ServiceWorker, so the only | |
| // valid value for source is a MessagePort. | |
| converter: webidl.nullableConverter(webidl.converters.MessagePort), | |
| defaultValue: null | |
| }, | |
| { | |
| key: 'ports', | |
| converter: webidl.converters['sequence<MessagePort>'], | |
| get defaultValue () { | |
| return [] | |
| } | |
| } | |
| ]) | |
| webidl.converters.CloseEventInit = webidl.dictionaryConverter([ | |
| ...eventInit, | |
| { | |
| key: 'wasClean', | |
| converter: webidl.converters.boolean, | |
| defaultValue: false | |
| }, | |
| { | |
| key: 'code', | |
| converter: webidl.converters['unsigned short'], | |
| defaultValue: 0 | |
| }, | |
| { | |
| key: 'reason', | |
| converter: webidl.converters.USVString, | |
| defaultValue: '' | |
| } | |
| ]) | |
| webidl.converters.ErrorEventInit = webidl.dictionaryConverter([ | |
| ...eventInit, | |
| { | |
| key: 'message', | |
| converter: webidl.converters.DOMString, | |
| defaultValue: '' | |
| }, | |
| { | |
| key: 'filename', | |
| converter: webidl.converters.USVString, | |
| defaultValue: '' | |
| }, | |
| { | |
| key: 'lineno', | |
| converter: webidl.converters['unsigned long'], | |
| defaultValue: 0 | |
| }, | |
| { | |
| key: 'colno', | |
| converter: webidl.converters['unsigned long'], | |
| defaultValue: 0 | |
| }, | |
| { | |
| key: 'error', | |
| converter: webidl.converters.any | |
| } | |
| ]) | |
| module.exports = { | |
| MessageEvent, | |
| CloseEvent, | |
| ErrorEvent | |
| } | |