{"ast":null,"code":"'use strict';\n\nconst {\n tokenChars\n} = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[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 === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions).map(extension => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations.map(params => {\n return [extension].concat(Object.keys(params).map(k => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values.map(v => v === true ? k : `${k}=${v}`).join('; ');\n })).join('; ');\n }).join(', ');\n }).join(', ');\n}\nmodule.exports = {\n format,\n parse\n};","map":{"version":3,"names":["tokenChars","require","push","dest","name","elem","undefined","parse","header","offers","Object","create","params","mustUnescape","isEscaping","inQuotes","extensionName","paramName","start","code","end","i","length","charCodeAt","SyntaxError","slice","value","replace","token","format","extensions","keys","map","extension","configurations","Array","isArray","concat","k","values","v","join","module","exports"],"sources":["/Users/shoofle/Projects/the-forest/node_modules/@libsql/isomorphic-ws/node_modules/ws/lib/extension.js"],"sourcesContent":["'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"script","externalDependencies":[]}