| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- 'use strict'
- const { webidl } = require('../../webidl')
- const { validateCloseCodeAndReason } = require('../util')
- const { kConstruct } = require('../../../core/symbols')
- const { kEnumerableProperty } = require('../../../core/util')
- function createInheritableDOMException () {
- // https://github.com/nodejs/node/issues/59677
- class Test extends DOMException {
- get reason () {
- return ''
- }
- }
- if (new Test().reason !== undefined) {
- return DOMException
- }
- return new Proxy(DOMException, {
- construct (target, args, newTarget) {
- const instance = Reflect.construct(target, args, target)
- Object.setPrototypeOf(instance, newTarget.prototype)
- return instance
- }
- })
- }
- class WebSocketError extends createInheritableDOMException() {
- #closeCode
- #reason
- constructor (message = '', init = undefined) {
- message = webidl.converters.DOMString(message, 'WebSocketError', 'message')
- // 1. Set this 's name to " WebSocketError ".
- // 2. Set this 's message to message .
- super(message, 'WebSocketError')
- if (init === kConstruct) {
- return
- } else if (init !== null) {
- init = webidl.converters.WebSocketCloseInfo(init)
- }
- // 3. Let code be init [" closeCode "] if it exists , or null otherwise.
- let code = init.closeCode ?? null
- // 4. Let reason be init [" reason "] if it exists , or the empty string otherwise.
- const reason = init.reason ?? ''
- // 5. Validate close code and reason with code and reason .
- validateCloseCodeAndReason(code, reason)
- // 6. If reason is non-empty, but code is not set, then set code to 1000 ("Normal Closure").
- if (reason.length !== 0 && code === null) {
- code = 1000
- }
- // 7. Set this 's closeCode to code .
- this.#closeCode = code
- // 8. Set this 's reason to reason .
- this.#reason = reason
- }
- get closeCode () {
- return this.#closeCode
- }
- get reason () {
- return this.#reason
- }
- /**
- * @param {string} message
- * @param {number|null} code
- * @param {string} reason
- */
- static createUnvalidatedWebSocketError (message, code, reason) {
- const error = new WebSocketError(message, kConstruct)
- error.#closeCode = code
- error.#reason = reason
- return error
- }
- }
- const { createUnvalidatedWebSocketError } = WebSocketError
- delete WebSocketError.createUnvalidatedWebSocketError
- Object.defineProperties(WebSocketError.prototype, {
- closeCode: kEnumerableProperty,
- reason: kEnumerableProperty,
- [Symbol.toStringTag]: {
- value: 'WebSocketError',
- writable: false,
- enumerable: false,
- configurable: true
- }
- })
- webidl.is.WebSocketError = webidl.util.MakeTypeAssertion(WebSocketError)
- module.exports = { WebSocketError, createUnvalidatedWebSocketError }
|