{"version":3,"file":"exports.js","sources":["../../../../node_modules/@sveltejs/kit/src/utils/url.js","../../../../node_modules/@sveltejs/kit/src/utils/exports.js"],"sourcesContent":["import { BROWSER, DEV } from 'esm-env';\n\n/**\n * Matches a URI scheme. See https://www.rfc-editor.org/rfc/rfc3986#section-3.1\n * @type {RegExp}\n */\nexport const SCHEME = /^[a-z][a-z\\d+\\-.]+:/i;\n\nconst internal = new URL('sveltekit-internal://');\n\n/**\n * @param {string} base\n * @param {string} path\n */\nexport function resolve(base, path) {\n\t// special case\n\tif (path[0] === '/' && path[1] === '/') return path;\n\n\tlet url = new URL(base, internal);\n\turl = new URL(path, url);\n\n\treturn url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href;\n}\n\n/** @param {string} path */\nexport function is_root_relative(path) {\n\treturn path[0] === '/' && path[1] !== '/';\n}\n\n/**\n * @param {string} path\n * @param {import('types').TrailingSlash} trailing_slash\n */\nexport function normalize_path(path, trailing_slash) {\n\tif (path === '/' || trailing_slash === 'ignore') return path;\n\n\tif (trailing_slash === 'never') {\n\t\treturn path.endsWith('/') ? path.slice(0, -1) : path;\n\t} else if (trailing_slash === 'always' && !path.endsWith('/')) {\n\t\treturn path + '/';\n\t}\n\n\treturn path;\n}\n\n/**\n * Decode pathname excluding %25 to prevent further double decoding of params\n * @param {string} pathname\n */\nexport function decode_pathname(pathname) {\n\treturn pathname.split('%25').map(decodeURI).join('%25');\n}\n\n/** @param {Record} params */\nexport function decode_params(params) {\n\tfor (const key in params) {\n\t\t// input has already been decoded by decodeURI\n\t\t// now handle the rest\n\t\tparams[key] = decodeURIComponent(params[key]);\n\t}\n\n\treturn params;\n}\n\n/**\n * The error when a URL is malformed is not very helpful, so we augment it with the URI\n * @param {string} uri\n */\nexport function decode_uri(uri) {\n\ttry {\n\t\treturn decodeURI(uri);\n\t} catch (e) {\n\t\tif (e instanceof Error) {\n\t\t\te.message = `Failed to decode URI: ${uri}\\n` + e.message;\n\t\t}\n\t\tthrow e;\n\t}\n}\n\n/**\n * Returns everything up to the first `#` in a URL\n * @param {{href: string}} url_like\n */\nexport function strip_hash({ href }) {\n\treturn href.split('#')[0];\n}\n\n/**\n * URL properties that could change during the lifetime of the page,\n * which excludes things like `origin`\n */\nconst tracked_url_properties = /** @type {const} */ ([\n\t'href',\n\t'pathname',\n\t'search',\n\t'toString',\n\t'toJSON'\n]);\n\n/**\n * @param {URL} url\n * @param {() => void} callback\n * @param {(search_param: string) => void} search_params_callback\n */\nexport function make_trackable(url, callback, search_params_callback) {\n\tconst tracked = new URL(url);\n\n\tObject.defineProperty(tracked, 'searchParams', {\n\t\tvalue: new Proxy(tracked.searchParams, {\n\t\t\tget(obj, key) {\n\t\t\t\tif (key === 'get' || key === 'getAll' || key === 'has') {\n\t\t\t\t\treturn (/**@type {string}*/ param) => {\n\t\t\t\t\t\tsearch_params_callback(param);\n\t\t\t\t\t\treturn obj[key](param);\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// if they try to access something different from what is in `tracked_search_params_properties`\n\t\t\t\t// we track the whole url (entries, values, keys etc)\n\t\t\t\tcallback();\n\n\t\t\t\tconst value = Reflect.get(obj, key);\n\t\t\t\treturn typeof value === 'function' ? value.bind(obj) : value;\n\t\t\t}\n\t\t}),\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n\n\tfor (const property of tracked_url_properties) {\n\t\tObject.defineProperty(tracked, property, {\n\t\t\tget() {\n\t\t\t\tcallback();\n\t\t\t\treturn url[property];\n\t\t\t},\n\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t}\n\n\tif (!BROWSER) {\n\t\t// @ts-ignore\n\t\ttracked[Symbol.for('nodejs.util.inspect.custom')] = (depth, opts, inspect) => {\n\t\t\treturn inspect(url, opts);\n\t\t};\n\t}\n\n\tif (DEV || !BROWSER) {\n\t\tdisable_hash(tracked);\n\t}\n\n\treturn tracked;\n}\n\n/**\n * Disallow access to `url.hash` on the server and in `load`\n * @param {URL} url\n */\nfunction disable_hash(url) {\n\tallow_nodejs_console_log(url);\n\n\tObject.defineProperty(url, 'hash', {\n\t\tget() {\n\t\t\tthrow new Error(\n\t\t\t\t'Cannot access event.url.hash. Consider using `$page.url.hash` inside a component instead'\n\t\t\t);\n\t\t}\n\t});\n}\n\n/**\n * Disallow access to `url.search` and `url.searchParams` during prerendering\n * @param {URL} url\n */\nexport function disable_search(url) {\n\tallow_nodejs_console_log(url);\n\n\tfor (const property of ['search', 'searchParams']) {\n\t\tObject.defineProperty(url, property, {\n\t\t\tget() {\n\t\t\t\tthrow new Error(`Cannot access url.${property} on a page with prerendering enabled`);\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Allow URL to be console logged, bypassing disabled properties.\n * @param {URL} url\n */\nfunction allow_nodejs_console_log(url) {\n\tif (!BROWSER) {\n\t\t// @ts-ignore\n\t\turl[Symbol.for('nodejs.util.inspect.custom')] = (depth, opts, inspect) => {\n\t\t\treturn inspect(new URL(url), opts);\n\t\t};\n\t}\n}\n\nconst DATA_SUFFIX = '/__data.json';\nconst HTML_DATA_SUFFIX = '.html__data.json';\n\n/** @param {string} pathname */\nexport function has_data_suffix(pathname) {\n\treturn pathname.endsWith(DATA_SUFFIX) || pathname.endsWith(HTML_DATA_SUFFIX);\n}\n\n/** @param {string} pathname */\nexport function add_data_suffix(pathname) {\n\tif (pathname.endsWith('.html')) return pathname.replace(/\\.html$/, HTML_DATA_SUFFIX);\n\treturn pathname.replace(/\\/$/, '') + DATA_SUFFIX;\n}\n\n/** @param {string} pathname */\nexport function strip_data_suffix(pathname) {\n\tif (pathname.endsWith(HTML_DATA_SUFFIX)) {\n\t\treturn pathname.slice(0, -HTML_DATA_SUFFIX.length) + '.html';\n\t}\n\n\treturn pathname.slice(0, -DATA_SUFFIX.length);\n}\n","/**\n * @param {Set} expected\n */\nfunction validator(expected) {\n\t/**\n\t * @param {any} module\n\t * @param {string} [file]\n\t */\n\tfunction validate(module, file) {\n\t\tif (!module) return;\n\n\t\tfor (const key in module) {\n\t\t\tif (key[0] === '_' || expected.has(key)) continue; // key is valid in this module\n\n\t\t\tconst values = [...expected.values()];\n\n\t\t\tconst hint =\n\t\t\t\thint_for_supported_files(key, file?.slice(file.lastIndexOf('.'))) ??\n\t\t\t\t`valid exports are ${values.join(', ')}, or anything with a '_' prefix`;\n\n\t\t\tthrow new Error(`Invalid export '${key}'${file ? ` in ${file}` : ''} (${hint})`);\n\t\t}\n\t}\n\n\treturn validate;\n}\n\n/**\n * @param {string} key\n * @param {string} ext\n * @returns {string | void}\n */\nfunction hint_for_supported_files(key, ext = '.js') {\n\tconst supported_files = [];\n\n\tif (valid_layout_exports.has(key)) {\n\t\tsupported_files.push(`+layout${ext}`);\n\t}\n\n\tif (valid_page_exports.has(key)) {\n\t\tsupported_files.push(`+page${ext}`);\n\t}\n\n\tif (valid_layout_server_exports.has(key)) {\n\t\tsupported_files.push(`+layout.server${ext}`);\n\t}\n\n\tif (valid_page_server_exports.has(key)) {\n\t\tsupported_files.push(`+page.server${ext}`);\n\t}\n\n\tif (valid_server_exports.has(key)) {\n\t\tsupported_files.push(`+server${ext}`);\n\t}\n\n\tif (supported_files.length > 0) {\n\t\treturn `'${key}' is a valid export in ${supported_files.slice(0, -1).join(', ')}${\n\t\t\tsupported_files.length > 1 ? ' or ' : ''\n\t\t}${supported_files.at(-1)}`;\n\t}\n}\n\nconst valid_layout_exports = new Set([\n\t'load',\n\t'prerender',\n\t'csr',\n\t'ssr',\n\t'trailingSlash',\n\t'config'\n]);\nconst valid_page_exports = new Set([...valid_layout_exports, 'entries']);\nconst valid_layout_server_exports = new Set([...valid_layout_exports]);\nconst valid_page_server_exports = new Set([...valid_layout_server_exports, 'actions', 'entries']);\nconst valid_server_exports = new Set([\n\t'GET',\n\t'POST',\n\t'PATCH',\n\t'PUT',\n\t'DELETE',\n\t'OPTIONS',\n\t'HEAD',\n\t'fallback',\n\t'prerender',\n\t'trailingSlash',\n\t'config',\n\t'entries'\n]);\n\nexport const validate_layout_exports = validator(valid_layout_exports);\nexport const validate_page_exports = validator(valid_page_exports);\nexport const validate_layout_server_exports = validator(valid_layout_server_exports);\nexport const validate_page_server_exports = validator(valid_page_server_exports);\nexport const validate_server_exports = validator(valid_server_exports);\n"],"names":[],"mappings":"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","x_google_ignoreList":[0,1]}