{"ast":null,"code":"// URI parser based on RFC 3986\n// We can't use the standard `URL` object, because we want to support relative `file:` URLs like\n// `file:relative/path/database.db`, which are not correct according to RFC 8089, which standardizes the\n// `file` scheme.\nimport { LibsqlError } from \"./api.js\";\nexport function parseUri(text) {\n const match = URI_RE.exec(text);\n if (match === null) {\n throw new LibsqlError(`The URL '${text}' is not in a valid format`, \"URL_INVALID\");\n }\n const groups = match.groups;\n const scheme = groups[\"scheme\"];\n const authority = groups[\"authority\"] !== undefined ? parseAuthority(groups[\"authority\"]) : undefined;\n const path = percentDecode(groups[\"path\"]);\n const query = groups[\"query\"] !== undefined ? parseQuery(groups[\"query\"]) : undefined;\n const fragment = groups[\"fragment\"] !== undefined ? percentDecode(groups[\"fragment\"]) : undefined;\n return {\n scheme,\n authority,\n path,\n query,\n fragment\n };\n}\nconst URI_RE = (() => {\n const SCHEME = \"(?[A-Za-z][A-Za-z.+-]*)\";\n const AUTHORITY = \"(?[^/?#]*)\";\n const PATH = \"(?[^?#]*)\";\n const QUERY = \"(?[^#]*)\";\n const FRAGMENT = \"(?.*)\";\n return new RegExp(`^${SCHEME}:(//${AUTHORITY})?${PATH}(\\\\?${QUERY})?(#${FRAGMENT})?$`, \"su\");\n})();\nfunction parseAuthority(text) {\n const match = AUTHORITY_RE.exec(text);\n if (match === null) {\n throw new LibsqlError(\"The authority part of the URL is not in a valid format\", \"URL_INVALID\");\n }\n const groups = match.groups;\n const host = percentDecode(groups[\"host_br\"] ?? groups[\"host\"]);\n const port = groups[\"port\"] ? parseInt(groups[\"port\"], 10) : undefined;\n const userinfo = groups[\"username\"] !== undefined ? {\n username: percentDecode(groups[\"username\"]),\n password: groups[\"password\"] !== undefined ? percentDecode(groups[\"password\"]) : undefined\n } : undefined;\n return {\n host,\n port,\n userinfo\n };\n}\nconst AUTHORITY_RE = (() => {\n return new RegExp(`^((?[^:]*)(:(?.*))?@)?((?[^:\\\\[\\\\]]*)|(\\\\[(?[^\\\\[\\\\]]*)\\\\]))(:(?[0-9]*))?$`, \"su\");\n})();\n// Query string is parsed as application/x-www-form-urlencoded according to the Web URL standard:\n// https://url.spec.whatwg.org/#urlencoded-parsing\nfunction parseQuery(text) {\n const sequences = text.split(\"&\");\n const pairs = [];\n for (const sequence of sequences) {\n if (sequence === \"\") {\n continue;\n }\n let key;\n let value;\n const splitIdx = sequence.indexOf(\"=\");\n if (splitIdx < 0) {\n key = sequence;\n value = \"\";\n } else {\n key = sequence.substring(0, splitIdx);\n value = sequence.substring(splitIdx + 1);\n }\n pairs.push({\n key: percentDecode(key.replaceAll(\"+\", \" \")),\n value: percentDecode(value.replaceAll(\"+\", \" \"))\n });\n }\n return {\n pairs\n };\n}\nfunction percentDecode(text) {\n try {\n return decodeURIComponent(text);\n } catch (e) {\n if (e instanceof URIError) {\n throw new LibsqlError(`URL component has invalid percent encoding: ${e}`, \"URL_INVALID\", undefined, e);\n }\n throw e;\n }\n}\nexport function encodeBaseUrl(scheme, authority, path) {\n if (authority === undefined) {\n throw new LibsqlError(`URL with scheme ${JSON.stringify(scheme + \":\")} requires authority (the \"//\" part)`, \"URL_INVALID\");\n }\n const schemeText = `${scheme}:`;\n const hostText = encodeHost(authority.host);\n const portText = encodePort(authority.port);\n const userinfoText = encodeUserinfo(authority.userinfo);\n const authorityText = `//${userinfoText}${hostText}${portText}`;\n let pathText = path.split(\"/\").map(encodeURIComponent).join(\"/\");\n if (pathText !== \"\" && !pathText.startsWith(\"/\")) {\n pathText = \"/\" + pathText;\n }\n return new URL(`${schemeText}${authorityText}${pathText}`);\n}\nfunction encodeHost(host) {\n return host.includes(\":\") ? `[${encodeURI(host)}]` : encodeURI(host);\n}\nfunction encodePort(port) {\n return port !== undefined ? `:${port}` : \"\";\n}\nfunction encodeUserinfo(userinfo) {\n if (userinfo === undefined) {\n return \"\";\n }\n const usernameText = encodeURIComponent(userinfo.username);\n const passwordText = userinfo.password !== undefined ? `:${encodeURIComponent(userinfo.password)}` : \"\";\n return `${usernameText}${passwordText}@`;\n}","map":{"version":3,"names":["LibsqlError","parseUri","text","match","URI_RE","exec","groups","scheme","authority","undefined","parseAuthority","path","percentDecode","query","parseQuery","fragment","SCHEME","AUTHORITY","PATH","QUERY","FRAGMENT","RegExp","AUTHORITY_RE","host","port","parseInt","userinfo","username","password","sequences","split","pairs","sequence","key","value","splitIdx","indexOf","substring","push","replaceAll","decodeURIComponent","e","URIError","encodeBaseUrl","JSON","stringify","schemeText","hostText","encodeHost","portText","encodePort","userinfoText","encodeUserinfo","authorityText","pathText","map","encodeURIComponent","join","startsWith","URL","includes","encodeURI","usernameText","passwordText"],"sources":["/Users/shoofle/Projects/the-forest/node_modules/@libsql/core/lib-esm/uri.js"],"sourcesContent":["// URI parser based on RFC 3986\n// We can't use the standard `URL` object, because we want to support relative `file:` URLs like\n// `file:relative/path/database.db`, which are not correct according to RFC 8089, which standardizes the\n// `file` scheme.\nimport { LibsqlError } from \"./api.js\";\nexport function parseUri(text) {\n const match = URI_RE.exec(text);\n if (match === null) {\n throw new LibsqlError(`The URL '${text}' is not in a valid format`, \"URL_INVALID\");\n }\n const groups = match.groups;\n const scheme = groups[\"scheme\"];\n const authority = groups[\"authority\"] !== undefined\n ? parseAuthority(groups[\"authority\"])\n : undefined;\n const path = percentDecode(groups[\"path\"]);\n const query = groups[\"query\"] !== undefined ? parseQuery(groups[\"query\"]) : undefined;\n const fragment = groups[\"fragment\"] !== undefined\n ? percentDecode(groups[\"fragment\"])\n : undefined;\n return { scheme, authority, path, query, fragment };\n}\nconst URI_RE = (() => {\n const SCHEME = \"(?[A-Za-z][A-Za-z.+-]*)\";\n const AUTHORITY = \"(?[^/?#]*)\";\n const PATH = \"(?[^?#]*)\";\n const QUERY = \"(?[^#]*)\";\n const FRAGMENT = \"(?.*)\";\n return new RegExp(`^${SCHEME}:(//${AUTHORITY})?${PATH}(\\\\?${QUERY})?(#${FRAGMENT})?$`, \"su\");\n})();\nfunction parseAuthority(text) {\n const match = AUTHORITY_RE.exec(text);\n if (match === null) {\n throw new LibsqlError(\"The authority part of the URL is not in a valid format\", \"URL_INVALID\");\n }\n const groups = match.groups;\n const host = percentDecode(groups[\"host_br\"] ?? groups[\"host\"]);\n const port = groups[\"port\"] ? parseInt(groups[\"port\"], 10) : undefined;\n const userinfo = groups[\"username\"] !== undefined\n ? {\n username: percentDecode(groups[\"username\"]),\n password: groups[\"password\"] !== undefined\n ? percentDecode(groups[\"password\"])\n : undefined,\n }\n : undefined;\n return { host, port, userinfo };\n}\nconst AUTHORITY_RE = (() => {\n return new RegExp(`^((?[^:]*)(:(?.*))?@)?((?[^:\\\\[\\\\]]*)|(\\\\[(?[^\\\\[\\\\]]*)\\\\]))(:(?[0-9]*))?$`, \"su\");\n})();\n// Query string is parsed as application/x-www-form-urlencoded according to the Web URL standard:\n// https://url.spec.whatwg.org/#urlencoded-parsing\nfunction parseQuery(text) {\n const sequences = text.split(\"&\");\n const pairs = [];\n for (const sequence of sequences) {\n if (sequence === \"\") {\n continue;\n }\n let key;\n let value;\n const splitIdx = sequence.indexOf(\"=\");\n if (splitIdx < 0) {\n key = sequence;\n value = \"\";\n }\n else {\n key = sequence.substring(0, splitIdx);\n value = sequence.substring(splitIdx + 1);\n }\n pairs.push({\n key: percentDecode(key.replaceAll(\"+\", \" \")),\n value: percentDecode(value.replaceAll(\"+\", \" \")),\n });\n }\n return { pairs };\n}\nfunction percentDecode(text) {\n try {\n return decodeURIComponent(text);\n }\n catch (e) {\n if (e instanceof URIError) {\n throw new LibsqlError(`URL component has invalid percent encoding: ${e}`, \"URL_INVALID\", undefined, e);\n }\n throw e;\n }\n}\nexport function encodeBaseUrl(scheme, authority, path) {\n if (authority === undefined) {\n throw new LibsqlError(`URL with scheme ${JSON.stringify(scheme + \":\")} requires authority (the \"//\" part)`, \"URL_INVALID\");\n }\n const schemeText = `${scheme}:`;\n const hostText = encodeHost(authority.host);\n const portText = encodePort(authority.port);\n const userinfoText = encodeUserinfo(authority.userinfo);\n const authorityText = `//${userinfoText}${hostText}${portText}`;\n let pathText = path.split(\"/\").map(encodeURIComponent).join(\"/\");\n if (pathText !== \"\" && !pathText.startsWith(\"/\")) {\n pathText = \"/\" + pathText;\n }\n return new URL(`${schemeText}${authorityText}${pathText}`);\n}\nfunction encodeHost(host) {\n return host.includes(\":\") ? `[${encodeURI(host)}]` : encodeURI(host);\n}\nfunction encodePort(port) {\n return port !== undefined ? `:${port}` : \"\";\n}\nfunction encodeUserinfo(userinfo) {\n if (userinfo === undefined) {\n return \"\";\n }\n const usernameText = encodeURIComponent(userinfo.username);\n const passwordText = userinfo.password !== undefined\n ? `:${encodeURIComponent(userinfo.password)}`\n : \"\";\n return `${usernameText}${passwordText}@`;\n}\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}