aboutsummaryrefslogtreecommitdiff
path: root/src/js/out/modules_dev/thirdparty/ws.js.map
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/out/modules_dev/thirdparty/ws.js.map')
-rw-r--r--src/js/out/modules_dev/thirdparty/ws.js.map10
1 files changed, 0 insertions, 10 deletions
diff --git a/src/js/out/modules_dev/thirdparty/ws.js.map b/src/js/out/modules_dev/thirdparty/ws.js.map
deleted file mode 100644
index aa4643810..000000000
--- a/src/js/out/modules_dev/thirdparty/ws.js.map
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "version": 3,
- "sources": ["src/js/thirdparty/ws.js"],
- "sourcesContent": [
- "// Hardcoded module \"ws\"\n// Mocking https://github.com/websockets/ws\n// this just wraps WebSocket to look like an EventEmitter\n// without actually using an EventEmitter polyfill\n\nimport EventEmitter from \"events\";\nimport http from \"http\";\n\nconst kBunInternals = Symbol.for(\"::bunternal::\");\nconst readyStates = [\"CONNECTING\", \"OPEN\", \"CLOSING\", \"CLOSED\"];\nconst encoder = new TextEncoder();\n\nconst emittedWarnings = new Set();\nfunction emitWarning(type, message) {\n if (emittedWarnings.has(type)) return;\n emittedWarnings.add(type);\n // process.emitWarning(message); // our printing is bad\n console.warn(\"[bun] Warning:\", message);\n}\n\n/*\n * deviations: we do not implement these events\n * - \"unexpected-response\"\n * - \"upgrade\"\n * - \"ping\"\n * - \"pong\"\n * - \"redirect\"\n */\nclass BunWebSocket extends EventEmitter {\n static CONNECTING = 0;\n static OPEN = 1;\n static CLOSING = 2;\n static CLOSED = 3;\n\n #ws;\n #paused = false;\n #fragments = false;\n #binaryType = \"nodebuffer\";\n readyState = BunWebSocket.CONNECTING;\n\n constructor(url, protocols, options) {\n // deviation: we don't support anything in `options`\n super();\n let ws = (this.#ws = new WebSocket(url, protocols));\n ws.binaryType = \"nodebuffer\"; // bun's WebSocket supports \"nodebuffer\"\n ws.addEventListener(\"open\", () => {\n this.readyState = BunWebSocket.OPEN;\n this.emit(\"open\");\n });\n ws.addEventListener(\"error\", err => {\n this.readyState = BunWebSocket.CLOSED;\n this.emit(\"error\", err);\n });\n ws.addEventListener(\"close\", ev => {\n this.readyState = BunWebSocket.CLOSED;\n this.emit(\"close\", ev.code, ev.reason);\n });\n ws.addEventListener(\"message\", ev => {\n const isBinary = typeof ev.data !== \"string\";\n if (isBinary) {\n this.emit(\"message\", this.#fragments ? [ev.data] : ev.data, isBinary);\n } else {\n var encoded = encoder.encode(ev.data);\n if (this.#binaryType !== \"arraybuffer\") {\n encoded = Buffer.from(encoded.buffer, encoded.byteOffset, encoded.byteLength);\n }\n this.emit(\"message\", this.#fragments ? [encoded] : encoded, isBinary);\n }\n });\n }\n\n on(event, listener) {\n if (\n event === \"unexpected-response\" ||\n event === \"upgrade\" ||\n event === \"ping\" ||\n event === \"pong\" ||\n event === \"redirect\"\n ) {\n emitWarning(event, \"ws.WebSocket '\" + event + \"' event is not implemented in bun\");\n }\n return super.on(event, listener);\n }\n\n send(data, opts, cb) {\n this.#ws.send(data, opts?.compress);\n // deviation: this should be called once the data is written, not immediately\n typeof cb === \"function\" && cb();\n }\n\n close(code, reason) {\n this.#ws.close(code, reason);\n }\n\n get binaryType() {\n return this.#binaryType;\n }\n\n set binaryType(value) {\n if (value) this.#ws.binaryType = value;\n }\n\n set binaryType(value) {\n if (value === \"nodebuffer\" || value === \"arraybuffer\") {\n this.#ws.binaryType = this.#binaryType = value;\n this.#fragments = false;\n } else if (value === \"fragments\") {\n this.#ws.binaryType = \"nodebuffer\";\n this.#binaryType = \"fragments\";\n this.#fragments = true;\n }\n }\n\n get protocol() {\n return this.#ws.protocol;\n }\n\n get extensions() {\n return this.#ws.extensions;\n }\n\n // deviation: this does not support `message` with `binaryType = \"fragments\"`\n addEventListener(type, listener, options) {\n this.#ws.addEventListener(type, listener, options);\n }\n\n removeEventListener(type, listener) {\n this.#ws.removeEventListener(type, listener);\n }\n\n get onopen() {\n return this.#ws.onopen;\n }\n\n set onopen(value) {\n this.#ws.onopen = value;\n }\n\n get onerror() {\n return this.#ws.onerror;\n }\n\n set onerror(value) {\n this.#ws.onerror = value;\n }\n\n get onclose() {\n return this.#ws.onclose;\n }\n\n set onclose(value) {\n this.#ws.onclose = value;\n }\n\n get onmessage() {\n return this.#ws.onmessage;\n }\n\n // deviation: this does not support `binaryType = \"fragments\"`\n set onmessage(value) {\n this.#ws.onmessage = value;\n }\n\n get bufferedAmount() {\n return this.#ws.bufferedAmount;\n }\n\n get isPaused() {\n return this.#paused;\n }\n\n ping(data, mask, cb) {\n if (this.readyState === BunWebSocket.CONNECTING) {\n throw new Error(\"WebSocket is not open: readyState 0 (CONNECTING)\");\n }\n\n if (typeof data === \"function\") {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === \"function\") {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === \"number\") data = data.toString();\n\n // deviation: we don't support ping\n emitWarning(\"ping()\", \"ws.WebSocket.ping() is not implemented in bun\");\n typeof cb === \"function\" && cb();\n }\n\n pong(data, mask, cb) {\n if (this.readyState === BunWebSocket.CONNECTING) {\n throw new Error(\"WebSocket is not open: readyState 0 (CONNECTING)\");\n }\n\n if (typeof data === \"function\") {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === \"function\") {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === \"number\") data = data.toString();\n\n // deviation: we don't support pong\n emitWarning(\"pong()\", \"ws.WebSocket.pong() is not implemented in bun\");\n typeof cb === \"function\" && cb();\n }\n\n pause() {\n if (this.readyState === WebSocket.CONNECTING || this.readyState === WebSocket.CLOSED) {\n return;\n }\n\n this.#paused = true;\n\n // deviation: we dont support pause()\n emitWarning(\"pause()\", \"ws.WebSocket.pause() is not implemented in bun\");\n }\n\n resume() {\n if (this.readyState === WebSocket.CONNECTING || this.readyState === WebSocket.CLOSED) {\n return;\n }\n\n this.#paused = false;\n\n // deviation: we dont support resume()\n emitWarning(\"resume()\", \"ws.WebSocket.resume() is not implemented in bun\");\n }\n}\n\nBunWebSocket.WebSocket = BunWebSocket;\n\nconst wsKeyRegex = /^[+/0-9A-Za-z]{22}==$/;\nconst wsTokenChars = [\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0, // 0 - 15\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0, // 16 - 31\n 0,\n 1,\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 1,\n 1,\n 0,\n 1,\n 1,\n 0, // 32 - 47\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 0,\n 0,\n 0, // 48 - 63\n 0,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1, // 64 - 79\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 0,\n 0,\n 1,\n 1, // 80 - 95\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1, // 96 - 111\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 1,\n 0,\n 1,\n 0,\n 1,\n 0, // 112 - 127\n];\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction subprotocolParse(header) {\n const protocols = new Set();\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (i; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (end === -1 && wsTokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (i !== 0 && (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n\n const protocol = header.slice(start, end);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n\n if (start === -1 || end !== -1) {\n throw new SyntaxError(\"Unexpected end of input\");\n }\n\n const protocol = header.slice(start, i);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n return protocols;\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction wsEmitClose(server) {\n server._state = CLOSED;\n server.emit(\"close\");\n}\n\nfunction abortHandshake(response, code, message, headers) {\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: \"close\",\n \"Content-Type\": \"text/html\",\n \"Content-Length\": Buffer.byteLength(message),\n ...headers,\n };\n\n response.writeHead(code, headers);\n response.write(message);\n response.end();\n}\n\nfunction abortHandshakeOrEmitwsClientError(server, req, response, socket, code, message) {\n if (server.listenerCount(\"wsClientError\")) {\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n server.emit(\"wsClientError\", err, socket, req);\n } else {\n abortHandshake(response, code, message);\n }\n}\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\nclass BunWebSocketMocked extends EventEmitter {\n #ws;\n #state;\n #enquedMessages = [];\n #url;\n #protocol;\n #extensions;\n #bufferedAmount = 0;\n #binaryType = \"arraybuffer\";\n\n #onclose;\n #onerror;\n #onmessage;\n #onopen;\n\n constructor(url, protocol, extensions, binaryType) {\n super();\n this.#ws = null;\n this.#state = 0;\n this.#url = url;\n this.#bufferedAmount = 0;\n binaryType = binaryType || \"arraybuffer\";\n if (binaryType !== \"nodebuffer\" && binaryType !== \"blob\" && binaryType !== \"arraybuffer\") {\n throw new TypeError(\"binaryType must be either 'blob', 'arraybuffer' or 'nodebuffer'\");\n }\n this.#binaryType = binaryType;\n this.#protocol = protocol;\n this.#extensions = extensions;\n\n const message = this.#message.bind(this);\n const open = this.#open.bind(this);\n const close = this.#close.bind(this);\n const drain = this.#drain.bind(this);\n\n this[kBunInternals] = {\n message, // a message is received\n open, // a socket is opened\n close, // a socket is closed\n drain, // the socket is ready to receive more data\n };\n }\n\n #message(ws, message) {\n this.#ws = ws;\n\n if (typeof message === \"string\") {\n if (this.#binaryType === \"arraybuffer\") {\n message = encoder.encode(message).buffer;\n } else if (this.#binaryType === \"blob\") {\n message = new Blob([message], { type: \"text/plain\" });\n } else {\n // nodebuffer\n message = Buffer.from(message);\n }\n } else {\n //Buffer\n if (this.#binaryType !== \"nodebuffer\") {\n if (this.#binaryType === \"arraybuffer\") {\n message = new Uint8Array(message);\n } else if (this.#binaryType === \"blob\") {\n message = new Blob([message]);\n }\n }\n }\n\n this.emit(\"message\", message);\n }\n\n #open(ws) {\n this.#ws = ws;\n this.#state = 1;\n this.emit(\"open\", this);\n // first drain event\n this.#drain(ws);\n }\n\n #close(ws, code, reason) {\n this.#state = 3;\n this.#ws = null;\n\n this.emit(\"close\", code, reason);\n }\n\n #drain(ws) {\n const chunk = this.#enquedMessages[0];\n if (chunk) {\n const [data, compress, cb] = chunk;\n const written = ws.send(data, compress);\n if (written == -1) {\n // backpressure wait until next drain event\n return;\n }\n\n typeof cb === \"function\" && cb();\n\n this.#bufferedAmount -= chunk.length;\n this.#enquedMessages.shift();\n }\n }\n\n send(data, opts, cb) {\n if (this.#state === 1) {\n const compress = opts?.compress;\n const written = this.#ws.send(data, compress);\n if (written == -1) {\n // backpressure\n this.#enquedMessages.push([data, compress, cb]);\n this.#bufferedAmount += data.length;\n return;\n }\n\n typeof cb === \"function\" && cb();\n } else if (this.#state === 0) {\n // not connected yet\n this.#enquedMessages.push([data, opts?.compress, cb]);\n this.#bufferedAmount += data.length;\n }\n }\n\n close(code, reason) {\n if (this.#state === 1) {\n this.#state = 2;\n this.#ws.close(code, reason);\n }\n }\n get binaryType() {\n return this.#binaryType;\n }\n\n set binaryType(type) {\n if (type !== \"nodebuffer\" && type !== \"blob\" && type !== \"arraybuffer\") {\n throw new TypeError(\"binaryType must be either 'blob', 'arraybuffer' or 'nodebuffer'\");\n }\n this.#binaryType = type;\n }\n\n get readyState() {\n return readyStates[this.#state];\n }\n get url() {\n return this.#url;\n }\n\n get protocol() {\n return this.#protocol;\n }\n\n get extensions() {\n return this.#extensions;\n }\n\n get bufferedAmount() {\n return this.#bufferedAmount ?? 0;\n }\n /**\n * Set up the socket and the internal resources.\n *\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Object} options Options object\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.maxPayload=0] The maximum allowed message size\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\n setSocket(socket, head, options) {\n throw new Error(\"Not implemented\");\n }\n\n set onclose(cb) {\n if (this.#onclose) {\n this.removeListener(\"close\", this.#onclose);\n }\n this.on(\"close\", cb);\n this.#onclose = cb;\n }\n\n set onerror(cb) {\n if (this.#onerror) {\n this.removeListener(\"error\", this.#onerror);\n }\n this.on(\"error\", cb);\n this.#onerror = cb;\n }\n\n set onmessage(cb) {\n if (this.#onmessage) {\n this.removeListener(\"message\", this.#onmessage);\n }\n this.on(\"message\", cb);\n this.#onmessage = cb;\n }\n\n set onopen(cb) {\n if (this.#onopen) {\n this.removeListener(\"open\", this.#onopen);\n }\n this.on(\"open\", cb);\n this.#onopen = cb;\n }\n\n get onclose() {\n return this.#onclose;\n }\n\n get onerror() {\n return this.#onerror;\n }\n\n get onmessage() {\n return this.#onmessage;\n }\n\n get onopen() {\n return this.#onopen;\n }\n}\n\nclass Server extends EventEmitter {\n _server;\n options;\n clients;\n _shouldEmitClose;\n _state;\n _removeListeners;\n\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * @param {Function} [options.verifyClient] A hook to reject connections\n * class to use. It must be the `WebSocket` class or class that extends it\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n ...options,\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError('One and only one of the \"port\", \"server\", or \"noServer\" options must be specified');\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n \"Content-Length\": body.length,\n \"Content-Type\": \"text/plain\",\n });\n res.end(body);\n });\n\n this._server.listen(options.port, options.host, options.backlog, callback);\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, \"connection\");\n const emitListening = this.emit.bind(this, \"listening\");\n const emitError = this.emit.bind(this, \"error\");\n const doUpgrade = (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n };\n\n this._server.on(\"listening\", emitListening);\n this._server.on(\"error\", emitError);\n this._server.on(\"upgrade\", doUpgrade);\n\n this._removeListeners = () => {\n this._server.removeListener(\"upgrade\", doUpgrade);\n this._server.removeListener(\"listening\", emitListening);\n this._server.removeListener(\"error\", emitError);\n };\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) {\n this.clients = new Set();\n this._shouldEmitClose = false;\n }\n\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Stop the server from accepting new connections and emit the `'close'` event\n * when all existing connections are closed.\n *\n * @param {Function} [cb] A one-time listener for the `'close'` event\n * @public\n */\n close(cb) {\n if (this._state === CLOSED) {\n if (cb) {\n this.once(\"close\", () => {\n cb(new Error(\"The server is not running\"));\n });\n }\n\n process.nextTick(server => {\n server._state = CLOSED;\n server.emit(\"close\");\n }, this);\n return;\n }\n\n if (cb) this.once(\"close\", cb);\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n if (this.options.noServer || this.options.server) {\n if (this._server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n }\n\n if (this.clients) {\n if (!this.clients.size) {\n process.nextTick(server => {\n server._state = CLOSED;\n server.emit(\"close\");\n }, this);\n } else {\n this._shouldEmitClose = true;\n }\n } else {\n process.nextTick(server => {\n server._state = CLOSED;\n server.emit(\"close\");\n }, this);\n }\n } else {\n const server = this._server;\n\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // The HTTP/S server was created internally. Close it, and rely on its\n // `'close'` event.\n //\n server.close(() => {\n this._state = CLOSED;\n this.emit(\"close\");\n });\n }\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf(\"?\");\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {Object} extensions The accepted extensions\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Set} protocols The subprotocols\n * @param {http.IncomingMessage} request The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(extensions, key, protocols, request, socket, head, cb) {\n const [server, response, req] = socket[kBunInternals];\n if (this._state > RUNNING) return abortHandshake(response, 503);\n\n let protocol = \"\";\n if (protocols.size) {\n //\n // Optionally call external protocol selection handler.\n //\n protocol = this.options.handleProtocols\n ? this.options.handleProtocols(protocols, request)\n : protocols.values().next().value;\n }\n const ws = new BunWebSocketMocked(request.url, protocol, extensions, \"nodebuffer\");\n\n const headers = [\"HTTP/1.1 101 Switching Protocols\", \"Upgrade: websocket\", \"Connection: Upgrade\"];\n this.emit(\"headers\", headers, request);\n\n if (\n server.upgrade(req, {\n data: ws[kBunInternals],\n })\n ) {\n response._reply(undefined);\n if (this.clients) {\n this.clients.add(ws);\n ws.on(\"close\", () => {\n this.clients.delete(ws);\n\n if (this._shouldEmitClose && !this.clients.size) {\n process.nextTick(wsEmitClose, this);\n }\n });\n }\n cb(ws, request);\n } else {\n abortHandshake(response, 500);\n }\n }\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {(net.Socket|tls.Socket)} socket The network socket between the\n * server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n // socket is actually fake so we use internal http_res\n const [_, response] = socket[kBunInternals];\n\n // socket.on(\"error\", socketOnError);\n\n const key = req.headers[\"sec-websocket-key\"];\n const version = +req.headers[\"sec-websocket-version\"];\n\n if (req.method !== \"GET\") {\n const message = \"Invalid HTTP method\";\n abortHandshakeOrEmitwsClientError(this, req, response, socket, 405, message);\n return;\n }\n\n if (req.headers.upgrade.toLowerCase() !== \"websocket\") {\n const message = \"Invalid Upgrade header\";\n abortHandshakeOrEmitwsClientError(this, req, response, socket, 400, message);\n return;\n }\n\n if (!key || !wsKeyRegex.test(key)) {\n const message = \"Missing or invalid Sec-WebSocket-Key header\";\n abortHandshakeOrEmitwsClientError(this, req, response, socket, 400, message);\n return;\n }\n\n if (version !== 8 && version !== 13) {\n const message = \"Missing or invalid Sec-WebSocket-Version header\";\n abortHandshakeOrEmitwsClientError(this, req, response, socket, 400, message);\n return;\n }\n\n if (!this.shouldHandle(req)) {\n abortHandshake(response, 400);\n return;\n }\n\n const secWebSocketProtocol = req.headers[\"sec-websocket-protocol\"];\n let protocols = new Set();\n\n if (secWebSocketProtocol !== undefined) {\n try {\n protocols = subprotocolParse(secWebSocketProtocol);\n } catch (err) {\n const message = \"Invalid Sec-WebSocket-Protocol header\";\n abortHandshakeOrEmitwsClientError(this, req, response, socket, 400, message);\n return;\n }\n }\n\n // TODO: add perMessageDeflate options\n\n // const secWebSocketExtensions = req.headers[\"sec-websocket-extensions\"];\n const extensions = {};\n\n // if (secWebSocketExtensions !== undefined) {\n // console.log(secWebSocketExtensions);\n // const perMessageDeflate = new PerMessageDeflate(this.options.perMessageDeflate, true, this.options.maxPayload);\n\n // try {\n // const offers = extension.parse(secWebSocketExtensions);\n\n // if (offers[PerMessageDeflate.extensionName]) {\n // perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n // extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n // }\n // } catch (err) {\n // const message = \"Invalid or unacceptable Sec-WebSocket-Extensions header\";\n // abortHandshakeOrEmitwsClientError(this, req, response, socket, 400, message);\n // return;\n // }\n // }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin: req.headers[`${version === 8 ? \"sec-websocket-origin\" : \"origin\"}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req,\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(response, code || 401, message, headers);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(response, 401);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n }\n}\n\nBunWebSocket.WebSocketServer = Server;\nBunWebSocket.Server = Server;\n\nObject.defineProperty(BunWebSocket, \"CONNECTING\", {\n enumerable: true,\n value: readyStates.indexOf(\"CONNECTING\"),\n});\n\nObject.defineProperty(BunWebSocket.prototype, \"CONNECTING\", {\n enumerable: true,\n value: readyStates.indexOf(\"CONNECTING\"),\n});\n\nObject.defineProperty(BunWebSocket, \"OPEN\", {\n enumerable: true,\n value: readyStates.indexOf(\"OPEN\"),\n});\n\nObject.defineProperty(BunWebSocket.prototype, \"OPEN\", {\n enumerable: true,\n value: readyStates.indexOf(\"OPEN\"),\n});\n\nObject.defineProperty(BunWebSocket, \"CLOSING\", {\n enumerable: true,\n value: readyStates.indexOf(\"CLOSING\"),\n});\n\nObject.defineProperty(BunWebSocket.prototype, \"CLOSING\", {\n enumerable: true,\n value: readyStates.indexOf(\"CLOSING\"),\n});\n\nObject.defineProperty(BunWebSocket, \"CLOSED\", {\n enumerable: true,\n value: readyStates.indexOf(\"CLOSED\"),\n});\n\nObject.defineProperty(BunWebSocket.prototype, \"CLOSED\", {\n enumerable: true,\n value: readyStates.indexOf(\"CLOSED\"),\n});\n\nclass Sender {\n constructor() {\n throw new Error(\"Not supported yet in Bun\");\n }\n}\n\nBunWebSocket.Sender = Sender;\n\nclass Receiver {\n constructor() {\n throw new Error(\"Not supported yet in Bun\");\n }\n}\n\nBunWebSocket.Receiver = Receiver;\n\nvar createWebSocketStream = ws => {\n throw new Error(\"Not supported yet in Bun\");\n};\n\nBunWebSocket.createWebSocketStream = createWebSocketStream;\n\nBunWebSocket[Symbol.for(\"CommonJS\")] = 0;\n\nexport default BunWebSocket;\nexport { createWebSocketStream, Server, Receiver, Sender, BunWebSocket as WebSocket, Server as WebSocketServer };\n"
- ],
- "mappings": ";;A//////DAKA;AACA;AAOA,IAAS,sBAAW,CAAC,MAAM,SAAS;AAClC,MAAI,gBAAgB,IAAI,IAAI;AAAG;AAC/B,kBAAgB,IAAI,IAAI,GAExB,QAAQ,KAAK,kBAAkB,OAAO;AAAA,GAsW/B,2BAAgB,CAAC,QAAQ;AAChC,QAAM,YAAY,IAAI;AACtB,MAAI,SAAQ,GACR,OAAM,GACN,IAAI;AAER,OAAK,EAAG,IAAI,OAAO,QAAQ,KAAK;AAC9B,UAAM,OAAO,OAAO,WAAW,CAAC;AAEhC,QAAI,SAAQ,KAAM,aAAa,UAAU;AACvC,UAAI,WAAU;AAAI,gBAAQ;AAAA,eACjB,MAAM,MAAM,SAAS,MAAkB,SAAS;AACzD,UAAI,SAAQ,KAAM,WAAU;AAAI,cAAM;AAAA,eAC7B,SAAS,IAAgB;AAClC,UAAI,WAAU;AACZ,cAAM,IAAI,YAAY,iCAAiC,GAAG;AAG5D,UAAI,SAAQ;AAAI,cAAM;AAEtB,YAAM,YAAW,OAAO,MAAM,OAAO,GAAG;AAExC,UAAI,UAAU,IAAI,SAAQ;AACxB,cAAM,IAAI,YAAY,QAAQ,sCAAqC;AAGrE,gBAAU,IAAI,SAAQ,GACtB,QAAQ,OAAM;AAAA;AAEd,YAAM,IAAI,YAAY,iCAAiC,GAAG;AAAA;AAI9D,MAAI,WAAU,KAAM,SAAQ;AAC1B,UAAM,IAAI,YAAY,yBAAyB;AAGjD,QAAM,WAAW,OAAO,MAAM,OAAO,CAAC;AAEtC,MAAI,UAAU,IAAI,QAAQ;AACxB,UAAM,IAAI,YAAY,QAAQ,qCAAqC;AAIrE,SADA,UAAU,IAAI,QAAQ,GACf;AAAA,GASA,sBAAW,CAAC,QAAQ;AAC3B,SAAO,SAAS,QAChB,OAAO,KAAK,OAAO;AAAA,GAGZ,yBAAc,CAAC,UAAU,MAAM,SAAS,SAAS;AACxD,YAAU,WAAW,KAAK,aAAa,OACvC,UAAU;AAAA,IACR,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,kBAAkB,OAAO,WAAW,OAAO;AAAA,OACxC;AAAA,EACL,GAEA,SAAS,UAAU,MAAM,OAAO,GAChC,SAAS,MAAM,OAAO,GACtB,SAAS,IAAI;AAAA,GAGN,4CAAiC,CAAC,QAAQ,KAAK,UAAU,QAAQ,MAAM,SAAS;AACvF,MAAI,OAAO,cAAc,eAAe,GAAG;AACzC,UAAM,MAAM,IAAI,MAAM,OAAO;AAC7B,UAAM,kBAAkB,KAAK,iCAAiC,GAE9D,OAAO,KAAK,iBAAiB,KAAK,QAAQ,GAAG;AAAA;AAE7C,mBAAe,UAAU,MAAM,OAAO;AAAA,GA9bpC,gBAAgB,OAAO,IAAI,eAAe,GAC1C,cAAc,CAAC,cAAc,QAAQ,WAAW,QAAQ,GACxD,UAAU,IAAI,aAEd,kBAAkB,IAAI;AAgB5B;AAAA,MAAM,qBAAqB,aAAa;AAAA,SAC/B,aAAa;AAAA,SACb,OAAO;AAAA,SACP,UAAU;AAAA,SACV,SAAS;AAAA,EAEhB;AAAA,EACA,UAAU;AAAA,EACV,aAAa;AAAA,EACb,cAAc;AAAA,EACd,aAAa,aAAa;AAAA,EAE1B,WAAW,CAAC,KAAK,WAAW,SAAS;AAEnC,UAAM;AACN,QAAI,KAAM,KAAK,MAAM,IAAI,UAAU,KAAK,SAAS;AACjD,OAAG,aAAa,cAChB,GAAG,iBAAiB,QAAQ,MAAM;AAChC,WAAK,aAAa,aAAa,MAC/B,KAAK,KAAK,MAAM;AAAA,KACjB,GACD,GAAG,iBAAiB,SAAS,SAAO;AAClC,WAAK,aAAa,aAAa,QAC/B,KAAK,KAAK,SAAS,GAAG;AAAA,KACvB,GACD,GAAG,iBAAiB,SAAS,QAAM;AACjC,WAAK,aAAa,aAAa,QAC/B,KAAK,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM;AAAA,KACtC,GACD,GAAG,iBAAiB,WAAW,QAAM;AACnC,YAAM,kBAAkB,GAAG,SAAS;AACpC,UAAI;AACF,aAAK,KAAK,WAAW,KAAK,aAAa,CAAC,GAAG,IAAI,IAAI,GAAG,MAAM,QAAQ;AAAA,WAC/D;AACL,YAAI,UAAU,QAAQ,OAAO,GAAG,IAAI;AACpC,YAAI,KAAK,gBAAgB;AACvB,oBAAU,OAAO,KAAK,QAAQ,QAAQ,QAAQ,YAAY,QAAQ,UAAU;AAE9E,aAAK,KAAK,WAAW,KAAK,aAAa,CAAC,OAAO,IAAI,SAAS,QAAQ;AAAA;AAAA,KAEvE;AAAA;AAAA,EAGH,EAAE,CAAC,OAAO,UAAU;AAClB,QACE,UAAU,yBACV,UAAU,aACV,UAAU,UACV,UAAU,UACV,UAAU;AAEV,kBAAY,OAAO,mBAAmB,QAAQ,mCAAmC;AAEnF,WAAO,MAAM,GAAG,OAAO,QAAQ;AAAA;AAAA,EAGjC,IAAI,CAAC,MAAM,MAAM,IAAI;AACnB,SAAK,IAAI,KAAK,MAAM,MAAM,QAAQ,UAE3B,OAAO,cAAc,GAAG;AAAA;AAAA,EAGjC,KAAK,CAAC,MAAM,QAAQ;AAClB,SAAK,IAAI,MAAM,MAAM,MAAM;AAAA;AAAA,MAGzB,UAAU,GAAG;AACf,WAAO,KAAK;AAAA;AAAA,MAGV,UAAU,CAAC,OAAO;AACpB,QAAI;AAAO,WAAK,IAAI,aAAa;AAAA;AAAA,MAG/B,UAAU,CAAC,OAAO;AACpB,QAAI,UAAU,gBAAgB,UAAU;AACtC,WAAK,IAAI,aAAa,KAAK,cAAc,OACzC,KAAK,aAAa;AAAA,aACT,UAAU;AACnB,WAAK,IAAI,aAAa,cACtB,KAAK,cAAc,aACnB,KAAK,aAAa;AAAA;AAAA,MAIlB,QAAQ,GAAG;AACb,WAAO,KAAK,IAAI;AAAA;AAAA,MAGd,UAAU,GAAG;AACf,WAAO,KAAK,IAAI;AAAA;AAAA,EAIlB,gBAAgB,CAAC,MAAM,UAAU,SAAS;AACxC,SAAK,IAAI,iBAAiB,MAAM,UAAU,OAAO;AAAA;AAAA,EAGnD,mBAAmB,CAAC,MAAM,UAAU;AAClC,SAAK,IAAI,oBAAoB,MAAM,QAAQ;AAAA;AAAA,MAGzC,MAAM,GAAG;AACX,WAAO,KAAK,IAAI;AAAA;AAAA,MAGd,MAAM,CAAC,OAAO;AAChB,SAAK,IAAI,SAAS;AAAA;AAAA,MAGhB,OAAO,GAAG;AACZ,WAAO,KAAK,IAAI;AAAA;AAAA,MAGd,OAAO,CAAC,OAAO;AACjB,SAAK,IAAI,UAAU;AAAA;AAAA,MAGjB,OAAO,GAAG;AACZ,WAAO,KAAK,IAAI;AAAA;AAAA,MAGd,OAAO,CAAC,OAAO;AACjB,SAAK,IAAI,UAAU;AAAA;AAAA,MAGjB,SAAS,GAAG;AACd,WAAO,KAAK,IAAI;AAAA;AAAA,MAId,SAAS,CAAC,OAAO;AACnB,SAAK,IAAI,YAAY;AAAA;AAAA,MAGnB,cAAc,GAAG;AACnB,WAAO,KAAK,IAAI;AAAA;AAAA,MAGd,QAAQ,GAAG;AACb,WAAO,KAAK;AAAA;AAAA,EAGd,IAAI,CAAC,MAAM,MAAM,IAAI;AACnB,QAAI,KAAK,eAAe,aAAa;AACnC,YAAM,IAAI,MAAM,kDAAkD;AAGpE,eAAW,SAAS;AAClB,WAAK,MACL,OAAO,OAAO;AAAA,oBACE,SAAS;AACzB,WAAK,MACL,OAAO;AAGT,eAAW,SAAS;AAAU,aAAO,KAAK,SAAS;AAGnD,gBAAY,UAAU,+CAA+C,UAC9D,OAAO,cAAc,GAAG;AAAA;AAAA,EAGjC,IAAI,CAAC,MAAM,MAAM,IAAI;AACnB,QAAI,KAAK,eAAe,aAAa;AACnC,YAAM,IAAI,MAAM,kDAAkD;AAGpE,eAAW,SAAS;AAClB,WAAK,MACL,OAAO,OAAO;AAAA,oBACE,SAAS;AACzB,WAAK,MACL,OAAO;AAGT,eAAW,SAAS;AAAU,aAAO,KAAK,SAAS;AAGnD,gBAAY,UAAU,+CAA+C,UAC9D,OAAO,cAAc,GAAG;AAAA;AAAA,EAGjC,KAAK,GAAG;AACN,QAAI,KAAK,eAAe,UAAU,cAAc,KAAK,eAAe,UAAU;AAC5E;AAGF,SAAK,UAAU,IAGf,YAAY,WAAW,gDAAgD;AAAA;AAAA,EAGzE,MAAM,GAAG;AACP,QAAI,KAAK,eAAe,UAAU,cAAc,KAAK,eAAe,UAAU;AAC5E;AAGF,SAAK,UAAU,IAGf,YAAY,YAAY,iDAAiD;AAAA;AAE7E;AAEA,aAAa,YAAY;AAEzB,IAAM,aAAa,yBACb,eAAe;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GA4FM,UAAU,GACV,UAAU,GACV,SAAS;AAEf;AAAA,MAAM,2BAA2B,aAAa;AAAA,EAC5C;AAAA,EACA;AAAA,EACA,kBAAkB,CAAC;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,cAAc;AAAA,EAEd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,WAAW,CAAC,KAAK,UAAU,YAAY,YAAY;AACjD,UAAM;AAMN,QALA,KAAK,MAAM,MACX,KAAK,SAAS,GACd,KAAK,OAAO,KACZ,KAAK,kBAAkB,GACvB,aAAa,cAAc,eACvB,eAAe,gBAAgB,eAAe,UAAU,eAAe;AACzE,YAAM,IAAI,UAAU,iEAAiE;AAEvF,SAAK,cAAc,YACnB,KAAK,YAAY,UACjB,KAAK,cAAc;AAEnB,UAAM,UAAU,KAAK,SAAS,KAAK,IAAI,GACjC,OAAO,KAAK,MAAM,KAAK,IAAI,GAC3B,QAAQ,KAAK,OAAO,KAAK,IAAI,GAC7B,QAAQ,KAAK,OAAO,KAAK,IAAI;AAEnC,SAAK,iBAAiB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA;AAAA,EAGF,QAAQ,CAAC,IAAI,SAAS;AAGpB,QAFA,KAAK,MAAM,WAEA,YAAY;AACrB,UAAI,KAAK,gBAAgB;AACvB,kBAAU,QAAQ,OAAO,OAAO,EAAE;AAAA,eACzB,KAAK,gBAAgB;AAC9B,kBAAU,IAAI,KAAK,CAAC,OAAO,GAAG,EAAE,MAAM,aAAa,CAAC;AAAA;AAGpD,kBAAU,OAAO,KAAK,OAAO;AAAA,aAI3B,KAAK,gBAAgB;AACvB,UAAI,KAAK,gBAAgB;AACvB,kBAAU,IAAI,WAAW,OAAO;AAAA,eACvB,KAAK,gBAAgB;AAC9B,kBAAU,IAAI,KAAK,CAAC,OAAO,CAAC;AAAA;AAKlC,SAAK,KAAK,WAAW,OAAO;AAAA;AAAA,EAG9B,KAAK,CAAC,IAAI;AACR,SAAK,MAAM,IACX,KAAK,SAAS,GACd,KAAK,KAAK,QAAQ,IAAI,GAEtB,KAAK,OAAO,EAAE;AAAA;AAAA,EAGhB,MAAM,CAAC,IAAI,MAAM,QAAQ;AACvB,SAAK,SAAS,GACd,KAAK,MAAM,MAEX,KAAK,KAAK,SAAS,MAAM,MAAM;AAAA;AAAA,EAGjC,MAAM,CAAC,IAAI;AACT,UAAM,QAAQ,KAAK,gBAAgB;AACnC,QAAI,OAAO;AACT,aAAO,MAAM,UAAU,MAAM;AAE7B,UADgB,GAAG,KAAK,MAAM,QAAQ,MACvB;AAEb;AAGF,aAAO,OAAO,cAAc,GAAG,GAE/B,KAAK,mBAAmB,MAAM,QAC9B,KAAK,gBAAgB,MAAM;AAAA;AAAA;AAAA,EAI/B,IAAI,CAAC,MAAM,MAAM,IAAI;AACnB,QAAI,KAAK,WAAW,GAAG;AACrB,YAAM,WAAW,MAAM;AAEvB,UADgB,KAAK,IAAI,KAAK,MAAM,QAAQ,MAC7B,GAAI;AAEjB,aAAK,gBAAgB,KAAK,CAAC,MAAM,UAAU,EAAE,CAAC,GAC9C,KAAK,mBAAmB,KAAK;AAC7B;AAAA;AAGF,aAAO,OAAO,cAAc,GAAG;AAAA,eACtB,KAAK,WAAW;AAEzB,WAAK,gBAAgB,KAAK,CAAC,MAAM,MAAM,UAAU,EAAE,CAAC,GACpD,KAAK,mBAAmB,KAAK;AAAA;AAAA,EAIjC,KAAK,CAAC,MAAM,QAAQ;AAClB,QAAI,KAAK,WAAW;AAClB,WAAK,SAAS,GACd,KAAK,IAAI,MAAM,MAAM,MAAM;AAAA;AAAA,MAG3B,UAAU,GAAG;AACf,WAAO,KAAK;AAAA;AAAA,MAGV,UAAU,CAAC,MAAM;AACnB,QAAI,SAAS,gBAAgB,SAAS,UAAU,SAAS;AACvD,YAAM,IAAI,UAAU,iEAAiE;AAEvF,SAAK,cAAc;AAAA;AAAA,MAGjB,UAAU,GAAG;AACf,WAAO,YAAY,KAAK;AAAA;AAAA,MAEtB,GAAG,GAAG;AACR,WAAO,KAAK;AAAA;AAAA,MAGV,QAAQ,GAAG;AACb,WAAO,KAAK;AAAA;AAAA,MAGV,UAAU,GAAG;AACf,WAAO,KAAK;AAAA;AAAA,MAGV,cAAc,GAAG;AACnB,WAAO,KAAK,mBAAmB;AAAA;AAAA,EAgBjC,SAAS,CAAC,QAAQ,MAAM,SAAS;AAC/B,UAAM,IAAI,MAAM,iBAAiB;AAAA;AAAA,MAG/B,OAAO,CAAC,IAAI;AACd,QAAI,KAAK;AACP,WAAK,eAAe,SAAS,KAAK,QAAQ;AAE5C,SAAK,GAAG,SAAS,EAAE,GACnB,KAAK,WAAW;AAAA;AAAA,MAGd,OAAO,CAAC,IAAI;AACd,QAAI,KAAK;AACP,WAAK,eAAe,SAAS,KAAK,QAAQ;AAE5C,SAAK,GAAG,SAAS,EAAE,GACnB,KAAK,WAAW;AAAA;AAAA,MAGd,SAAS,CAAC,IAAI;AAChB,QAAI,KAAK;AACP,WAAK,eAAe,WAAW,KAAK,UAAU;AAEhD,SAAK,GAAG,WAAW,EAAE,GACrB,KAAK,aAAa;AAAA;AAAA,MAGhB,MAAM,CAAC,IAAI;AACb,QAAI,KAAK;AACP,WAAK,eAAe,QAAQ,KAAK,OAAO;AAE1C,SAAK,GAAG,QAAQ,EAAE,GAClB,KAAK,UAAU;AAAA;AAAA,MAGb,OAAO,GAAG;AACZ,WAAO,KAAK;AAAA;AAAA,MAGV,OAAO,GAAG;AACZ,WAAO,KAAK;AAAA;AAAA,MAGV,SAAS,GAAG;AACd,WAAO,KAAK;AAAA;AAAA,MAGV,MAAM,GAAG;AACX,WAAO,KAAK;AAAA;AAEhB;AAEA;AAAA,MAAM,eAAe,aAAa;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAuBA,WAAW,CAAC,SAAS,UAAU;AAC7B,UAAM;AAkBN,QAhBA,UAAU;AAAA,MACR,YAAY;AAAA,MACZ,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,MACnB,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,UAAU;AAAA,MACV,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,SACH;AAAA,IACL,GAGG,QAAQ,QAAQ,SAAS,QAAQ,WAAW,QAAQ,YACpD,QAAQ,QAAQ,SAAS,QAAQ,UAAU,QAAQ,aACnD,QAAQ,UAAU,QAAQ;AAE3B,YAAM,IAAI,UAAU,mFAAmF;AAGzG,QAAI,QAAQ,QAAQ;AAClB,WAAK,UAAU,KAAK,aAAa,CAAC,KAAK,QAAQ;AAC7C,cAAM,OAAO,KAAK,aAAa;AAE/B,YAAI,UAAU,KAAK;AAAA,UACjB,kBAAkB,KAAK;AAAA,UACvB,gBAAgB;AAAA,QAClB,CAAC,GACD,IAAI,IAAI,IAAI;AAAA,OACb,GAED,KAAK,QAAQ,OAAO,QAAQ,MAAM,QAAQ,MAAM,QAAQ,SAAS,QAAQ;AAAA,aAChE,QAAQ;AACjB,WAAK,UAAU,QAAQ;AAGzB,QAAI,KAAK,SAAS;AAChB,YAAM,iBAAiB,KAAK,KAAK,KAAK,MAAM,YAAY,GAClD,gBAAgB,KAAK,KAAK,KAAK,MAAM,WAAW,GAChD,YAAY,KAAK,KAAK,KAAK,MAAM,OAAO,GACxC,YAAY,CAAC,KAAK,QAAQ,SAAS;AACvC,aAAK,cAAc,KAAK,QAAQ,MAAM,cAAc;AAAA;AAGtD,WAAK,QAAQ,GAAG,aAAa,aAAa,GAC1C,KAAK,QAAQ,GAAG,SAAS,SAAS,GAClC,KAAK,QAAQ,GAAG,WAAW,SAAS,GAEpC,KAAK,mBAAmB,MAAM;AAC5B,aAAK,QAAQ,eAAe,WAAW,SAAS,GAChD,KAAK,QAAQ,eAAe,aAAa,aAAa,GACtD,KAAK,QAAQ,eAAe,SAAS,SAAS;AAAA;AAAA;AAIlD,QAAI,QAAQ,sBAAsB;AAAM,cAAQ,oBAAoB,CAAC;AACrE,QAAI,QAAQ;AACV,WAAK,UAAU,IAAI,KACnB,KAAK,mBAAmB;AAG1B,SAAK,UAAU,SACf,KAAK,SAAS;AAAA;AAAA,EAYhB,OAAO,GAAG;AACR,QAAI,KAAK,QAAQ;AACf,YAAM,IAAI,MAAM,4CAA4C;AAG9D,SAAK,KAAK;AAAS,aAAO;AAC1B,WAAO,KAAK,QAAQ,QAAQ;AAAA;AAAA,EAU9B,KAAK,CAAC,IAAI;AACR,QAAI,KAAK,WAAW,QAAQ;AAC1B,UAAI;AACF,aAAK,KAAK,SAAS,MAAM;AACvB,aAAG,IAAI,MAAM,2BAA2B,CAAC;AAAA,SAC1C;AAGH,cAAQ,SAAS,YAAU;AACzB,eAAO,SAAS,QAChB,OAAO,KAAK,OAAO;AAAA,SAClB,IAAI;AACP;AAAA;AAGF,QAAI;AAAI,WAAK,KAAK,SAAS,EAAE;AAE7B,QAAI,KAAK,WAAW;AAAS;AAG7B,QAFA,KAAK,SAAS,SAEV,KAAK,QAAQ,YAAY,KAAK,QAAQ,QAAQ;AAChD,UAAI,KAAK;AACP,aAAK,iBAAiB,GACtB,KAAK,mBAAmB,KAAK,UAAU;AAGzC,UAAI,KAAK;AACP,aAAK,KAAK,QAAQ;AAChB,kBAAQ,SAAS,YAAU;AACzB,mBAAO,SAAS,QAChB,OAAO,KAAK,OAAO;AAAA,aAClB,IAAI;AAAA;AAEP,eAAK,mBAAmB;AAAA;AAG1B,gBAAQ,SAAS,YAAU;AACzB,iBAAO,SAAS,QAChB,OAAO,KAAK,OAAO;AAAA,WAClB,IAAI;AAAA,WAEJ;AACL,YAAM,SAAS,KAAK;AAEpB,WAAK,iBAAiB,GACtB,KAAK,mBAAmB,KAAK,UAAU,MAMvC,OAAO,MAAM,MAAM;AACjB,aAAK,SAAS,QACd,KAAK,KAAK,OAAO;AAAA,OAClB;AAAA;AAAA;AAAA,EAWL,YAAY,CAAC,KAAK;AAChB,QAAI,KAAK,QAAQ,MAAM;AACrB,YAAM,QAAQ,IAAI,IAAI,QAAQ,GAAG;AAGjC,WAFiB,WAAU,IAAK,IAAI,IAAI,MAAM,GAAG,KAAK,IAAI,IAAI,SAE7C,KAAK,QAAQ;AAAM,eAAO;AAAA;AAG7C,WAAO;AAAA;AAAA,EAiBT,eAAe,CAAC,YAAY,KAAK,WAAW,SAAS,QAAQ,MAAM,IAAI;AACrE,WAAO,QAAQ,UAAU,OAAO,OAAO;AACvC,QAAI,KAAK,SAAS;AAAS,aAAO,eAAe,UAAU,GAAG;AAE9D,QAAI,WAAW;AACf,QAAI,UAAU;AAIZ,iBAAW,KAAK,QAAQ,kBACpB,KAAK,QAAQ,gBAAgB,WAAW,OAAO,IAC/C,UAAU,OAAO,EAAE,KAAK,EAAE;AAEhC,UAAM,KAAK,IAAI,mBAAmB,QAAQ,KAAK,UAAU,YAAY,YAAY,GAE3E,UAAU,CAAC,oCAAoC,sBAAsB,qBAAqB;AAGhG,QAFA,KAAK,KAAK,WAAW,SAAS,OAAO,GAGnC,OAAO,QAAQ,KAAK;AAAA,MAClB,MAAM,GAAG;AAAA,IACX,CAAC,GACD;AAEA,UADA,SAAS,OAAO,MAAS,GACrB,KAAK;AACP,aAAK,QAAQ,IAAI,EAAE,GACnB,GAAG,GAAG,SAAS,MAAM;AAGnB,cAFA,KAAK,QAAQ,OAAO,EAAE,GAElB,KAAK,qBAAqB,KAAK,QAAQ;AACzC,oBAAQ,SAAS,aAAa,IAAI;AAAA,SAErC;AAEH,SAAG,IAAI,OAAO;AAAA;AAEd,qBAAe,UAAU,GAAG;AAAA;AAAA,EAahC,aAAa,CAAC,KAAK,QAAQ,MAAM,IAAI;AAEnC,WAAO,GAAG,YAAY,OAAO,gBAIvB,MAAM,IAAI,QAAQ,sBAClB,WAAW,IAAI,QAAQ;AAE7B,QAAI,IAAI,WAAW,OAAO;AAExB,wCAAkC,MAAM,KAAK,UAAU,QAAQ,KAD/C,qBAC2D;AAC3E;AAAA;AAGF,QAAI,IAAI,QAAQ,QAAQ,YAAY,MAAM,aAAa;AAErD,wCAAkC,MAAM,KAAK,UAAU,QAAQ,KAD/C,wBAC2D;AAC3E;AAAA;AAGF,SAAK,QAAQ,WAAW,KAAK,GAAG,GAAG;AAEjC,wCAAkC,MAAM,KAAK,UAAU,QAAQ,KAD/C,6CAC2D;AAC3E;AAAA;AAGF,QAAI,YAAY,KAAK,YAAY,IAAI;AAEnC,wCAAkC,MAAM,KAAK,UAAU,QAAQ,KAD/C,iDAC2D;AAC3E;AAAA;AAGF,SAAK,KAAK,aAAa,GAAG,GAAG;AAC3B,qBAAe,UAAU,GAAG;AAC5B;AAAA;AAGF,UAAM,uBAAuB,IAAI,QAAQ;AACzC,QAAI,YAAY,IAAI;AAEpB,QAAI,yBAAyB;AAC3B,UAAI;AACF,oBAAY,iBAAiB,oBAAoB;AAAA,eAC1C,KAAP;AAEA,0CAAkC,MAAM,KAAK,UAAU,QAAQ,KAD/C,uCAC2D;AAC3E;AAAA;AAOJ,UAAM,aAAa,CAAC;AAuBpB,QAAI,KAAK,QAAQ,cAAc;AAC7B,YAAM,OAAO;AAAA,QACX,QAAQ,IAAI,QAAQ,GAAG,YAAY,IAAI,yBAAyB;AAAA,QAChE,WAAW,IAAI,OAAO,cAAc,IAAI,OAAO;AAAA,QAC/C;AAAA,MACF;AAEA,UAAI,KAAK,QAAQ,aAAa,WAAW,GAAG;AAC1C,aAAK,QAAQ,aAAa,MAAM,CAAC,UAAU,MAAM,SAAS,YAAY;AACpE,eAAK;AACH,mBAAO,eAAe,UAAU,QAAQ,KAAK,SAAS,OAAO;AAG/D,eAAK,gBAAgB,YAAY,KAAK,WAAW,KAAK,QAAQ,MAAM,EAAE;AAAA,SACvE;AACD;AAAA;AAGF,WAAK,KAAK,QAAQ,aAAa,IAAI;AAAG,eAAO,eAAe,UAAU,GAAG;AAAA;AAG3E,SAAK,gBAAgB,YAAY,KAAK,WAAW,KAAK,QAAQ,MAAM,EAAE;AAAA;AAE1E;AAEA,aAAa,kBAAkB;AAC/B,aAAa,SAAS;AAEtB,OAAO,eAAe,cAAc,cAAc;AAAA,EAChD,YAAY;AAAA,EACZ,OAAO,YAAY,QAAQ,YAAY;AACzC,CAAC;AAED,OAAO,eAAe,aAAa,WAAW,cAAc;AAAA,EAC1D,YAAY;AAAA,EACZ,OAAO,YAAY,QAAQ,YAAY;AACzC,CAAC;AAED,OAAO,eAAe,cAAc,QAAQ;AAAA,EAC1C,YAAY;AAAA,EACZ,OAAO,YAAY,QAAQ,MAAM;AACnC,CAAC;AAED,OAAO,eAAe,aAAa,WAAW,QAAQ;AAAA,EACpD,YAAY;AAAA,EACZ,OAAO,YAAY,QAAQ,MAAM;AACnC,CAAC;AAED,OAAO,eAAe,cAAc,WAAW;AAAA,EAC7C,YAAY;AAAA,EACZ,OAAO,YAAY,QAAQ,SAAS;AACtC,CAAC;AAED,OAAO,eAAe,aAAa,WAAW,WAAW;AAAA,EACvD,YAAY;AAAA,EACZ,OAAO,YAAY,QAAQ,SAAS;AACtC,CAAC;AAED,OAAO,eAAe,cAAc,UAAU;AAAA,EAC5C,YAAY;AAAA,EACZ,OAAO,YAAY,QAAQ,QAAQ;AACrC,CAAC;AAED,OAAO,eAAe,aAAa,WAAW,UAAU;AAAA,EACtD,YAAY;AAAA,EACZ,OAAO,YAAY,QAAQ,QAAQ;AACrC,CAAC;AAED;AAAA,MAAM,OAAO;AAAA,EACX,WAAW,GAAG;AACZ,UAAM,IAAI,MAAM,0BAA0B;AAAA;AAE9C;AAEA,aAAa,SAAS;AAEtB;AAAA,MAAM,SAAS;AAAA,EACb,WAAW,GAAG;AACZ,UAAM,IAAI,MAAM,0BAA0B;AAAA;AAE9C;AAEA,aAAa,WAAW;AAExB,IAAI,wBAAwB,QAAM;AAChC,QAAM,IAAI,MAAM,0BAA0B;AAAA;AAG5C,aAAa,wBAAwB;AAErC,aAAa,OAAO,IAAI,UAAU,KAAK;AAEvC,IAP0C;",
- "debugId": "05AF3B22BBEA2DE864756e2164756e21",
- "names": []
-} \ No newline at end of file