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 | |
} | |