Ruben Gres
first commit
ec3efd7
raw
history blame
74.9 kB
import { c as create_ssr_component, s as setContext, v as validate_component, m as missing_component } from "./chunks/index-445fd704.js";
import { s as set_paths, b as base, a as assets } from "./chunks/paths-396f020f.js";
function afterUpdate() {
}
const Root = create_ssr_component(($$result, $$props, $$bindings, slots) => {
let { stores } = $$props;
let { page } = $$props;
let { components } = $$props;
let { props_0 = null } = $$props;
let { props_1 = null } = $$props;
let { props_2 = null } = $$props;
setContext("__svelte__", stores);
afterUpdate(stores.page.notify);
if ($$props.stores === void 0 && $$bindings.stores && stores !== void 0)
$$bindings.stores(stores);
if ($$props.page === void 0 && $$bindings.page && page !== void 0)
$$bindings.page(page);
if ($$props.components === void 0 && $$bindings.components && components !== void 0)
$$bindings.components(components);
if ($$props.props_0 === void 0 && $$bindings.props_0 && props_0 !== void 0)
$$bindings.props_0(props_0);
if ($$props.props_1 === void 0 && $$bindings.props_1 && props_1 !== void 0)
$$bindings.props_1(props_1);
if ($$props.props_2 === void 0 && $$bindings.props_2 && props_2 !== void 0)
$$bindings.props_2(props_2);
{
stores.page.set(page);
}
return `
${components[1] ? `${validate_component(components[0] || missing_component, "svelte:component").$$render($$result, Object.assign(props_0 || {}), {}, {
default: () => {
return `${components[2] ? `${validate_component(components[1] || missing_component, "svelte:component").$$render($$result, Object.assign(props_1 || {}), {}, {
default: () => {
return `${validate_component(components[2] || missing_component, "svelte:component").$$render($$result, Object.assign(props_2 || {}), {}, {})}`;
}
})}` : `${validate_component(components[1] || missing_component, "svelte:component").$$render($$result, Object.assign(props_1 || {}), {}, {})}`}`;
}
})}` : `${validate_component(components[0] || missing_component, "svelte:component").$$render($$result, Object.assign(props_0 || {}), {}, {})}`}
${``}`;
});
function to_headers(object) {
const headers = new Headers();
if (object) {
for (const key2 in object) {
const value = object[key2];
if (!value)
continue;
if (Array.isArray(value)) {
value.forEach((value2) => {
headers.append(key2, value2);
});
} else {
headers.set(key2, value);
}
}
}
return headers;
}
function hash(value) {
let hash2 = 5381;
let i = value.length;
if (typeof value === "string") {
while (i)
hash2 = hash2 * 33 ^ value.charCodeAt(--i);
} else {
while (i)
hash2 = hash2 * 33 ^ value[--i];
}
return (hash2 >>> 0).toString(36);
}
function lowercase_keys(obj) {
const clone = {};
for (const key2 in obj) {
clone[key2.toLowerCase()] = obj[key2];
}
return clone;
}
function decode_params(params) {
for (const key2 in params) {
params[key2] = params[key2].replace(/%23/g, "#").replace(/%3[Bb]/g, ";").replace(/%2[Cc]/g, ",").replace(/%2[Ff]/g, "/").replace(/%3[Ff]/g, "?").replace(/%3[Aa]/g, ":").replace(/%40/g, "@").replace(/%26/g, "&").replace(/%3[Dd]/g, "=").replace(/%2[Bb]/g, "+").replace(/%24/g, "$");
}
return params;
}
function is_pojo(body) {
if (typeof body !== "object")
return false;
if (body) {
if (body instanceof Uint8Array)
return false;
if (body instanceof ReadableStream)
return false;
if (body._readableState && typeof body.pipe === "function") {
throw new Error("Node streams are no longer supported \u2014 use a ReadableStream instead");
}
}
return true;
}
function normalize_request_method(event) {
const method = event.request.method.toLowerCase();
return method === "delete" ? "del" : method;
}
function error(body) {
return new Response(body, {
status: 500
});
}
function is_string(s2) {
return typeof s2 === "string" || s2 instanceof String;
}
const text_types = /* @__PURE__ */ new Set([
"application/xml",
"application/json",
"application/x-www-form-urlencoded",
"multipart/form-data"
]);
const bodyless_status_codes = /* @__PURE__ */ new Set([101, 204, 205, 304]);
function is_text(content_type) {
if (!content_type)
return true;
const type = content_type.split(";")[0].toLowerCase();
return type.startsWith("text/") || type.endsWith("+xml") || text_types.has(type);
}
async function render_endpoint(event, mod) {
const method = normalize_request_method(event);
let handler = mod[method];
if (!handler && method === "head") {
handler = mod.get;
}
if (!handler) {
const allowed = [];
for (const method2 in ["get", "post", "put", "patch"]) {
if (mod[method2])
allowed.push(method2.toUpperCase());
}
if (mod.del)
allowed.push("DELETE");
if (mod.get || mod.head)
allowed.push("HEAD");
return event.request.headers.get("x-sveltekit-load") ? new Response(void 0, {
status: 204
}) : new Response(`${event.request.method} method not allowed`, {
status: 405,
headers: {
allow: allowed.join(", ")
}
});
}
const response = await handler(event);
const preface = `Invalid response from route ${event.url.pathname}`;
if (typeof response !== "object") {
return error(`${preface}: expected an object, got ${typeof response}`);
}
if (response.fallthrough) {
throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");
}
const { status = 200, body = {} } = response;
const headers = response.headers instanceof Headers ? new Headers(response.headers) : to_headers(response.headers);
const type = headers.get("content-type");
if (!is_text(type) && !(body instanceof Uint8Array || is_string(body))) {
return error(`${preface}: body must be an instance of string or Uint8Array if content-type is not a supported textual content-type`);
}
let normalized_body;
if (is_pojo(body) && (!type || type.startsWith("application/json"))) {
headers.set("content-type", "application/json; charset=utf-8");
normalized_body = JSON.stringify(body);
} else {
normalized_body = body;
}
if ((typeof normalized_body === "string" || normalized_body instanceof Uint8Array) && !headers.has("etag")) {
const cache_control = headers.get("cache-control");
if (!cache_control || !/(no-store|immutable)/.test(cache_control)) {
headers.set("etag", `"${hash(normalized_body)}"`);
}
}
return new Response(method !== "head" && !bodyless_status_codes.has(status) ? normalized_body : void 0, {
status,
headers
});
}
var chars$1 = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$";
var unsafeChars = /[<>\b\f\n\r\t\0\u2028\u2029]/g;
var reserved = /^(?:do|if|in|for|int|let|new|try|var|byte|case|char|else|enum|goto|long|this|void|with|await|break|catch|class|const|final|float|short|super|throw|while|yield|delete|double|export|import|native|return|switch|throws|typeof|boolean|default|extends|finally|package|private|abstract|continue|debugger|function|volatile|interface|protected|transient|implements|instanceof|synchronized)$/;
var escaped = {
"<": "\\u003C",
">": "\\u003E",
"/": "\\u002F",
"\\": "\\\\",
"\b": "\\b",
"\f": "\\f",
"\n": "\\n",
"\r": "\\r",
" ": "\\t",
"\0": "\\0",
"\u2028": "\\u2028",
"\u2029": "\\u2029"
};
var objectProtoOwnPropertyNames = Object.getOwnPropertyNames(Object.prototype).sort().join("\0");
function devalue(value) {
var counts = /* @__PURE__ */ new Map();
function walk(thing) {
if (typeof thing === "function") {
throw new Error("Cannot stringify a function");
}
if (counts.has(thing)) {
counts.set(thing, counts.get(thing) + 1);
return;
}
counts.set(thing, 1);
if (!isPrimitive(thing)) {
var type = getType(thing);
switch (type) {
case "Number":
case "String":
case "Boolean":
case "Date":
case "RegExp":
return;
case "Array":
thing.forEach(walk);
break;
case "Set":
case "Map":
Array.from(thing).forEach(walk);
break;
default:
var proto = Object.getPrototypeOf(thing);
if (proto !== Object.prototype && proto !== null && Object.getOwnPropertyNames(proto).sort().join("\0") !== objectProtoOwnPropertyNames) {
throw new Error("Cannot stringify arbitrary non-POJOs");
}
if (Object.getOwnPropertySymbols(thing).length > 0) {
throw new Error("Cannot stringify POJOs with symbolic keys");
}
Object.keys(thing).forEach(function(key2) {
return walk(thing[key2]);
});
}
}
}
walk(value);
var names = /* @__PURE__ */ new Map();
Array.from(counts).filter(function(entry) {
return entry[1] > 1;
}).sort(function(a, b) {
return b[1] - a[1];
}).forEach(function(entry, i) {
names.set(entry[0], getName(i));
});
function stringify(thing) {
if (names.has(thing)) {
return names.get(thing);
}
if (isPrimitive(thing)) {
return stringifyPrimitive(thing);
}
var type = getType(thing);
switch (type) {
case "Number":
case "String":
case "Boolean":
return "Object(" + stringify(thing.valueOf()) + ")";
case "RegExp":
return "new RegExp(" + stringifyString(thing.source) + ', "' + thing.flags + '")';
case "Date":
return "new Date(" + thing.getTime() + ")";
case "Array":
var members = thing.map(function(v, i) {
return i in thing ? stringify(v) : "";
});
var tail = thing.length === 0 || thing.length - 1 in thing ? "" : ",";
return "[" + members.join(",") + tail + "]";
case "Set":
case "Map":
return "new " + type + "([" + Array.from(thing).map(stringify).join(",") + "])";
default:
var obj = "{" + Object.keys(thing).map(function(key2) {
return safeKey(key2) + ":" + stringify(thing[key2]);
}).join(",") + "}";
var proto = Object.getPrototypeOf(thing);
if (proto === null) {
return Object.keys(thing).length > 0 ? "Object.assign(Object.create(null)," + obj + ")" : "Object.create(null)";
}
return obj;
}
}
var str = stringify(value);
if (names.size) {
var params_1 = [];
var statements_1 = [];
var values_1 = [];
names.forEach(function(name, thing) {
params_1.push(name);
if (isPrimitive(thing)) {
values_1.push(stringifyPrimitive(thing));
return;
}
var type = getType(thing);
switch (type) {
case "Number":
case "String":
case "Boolean":
values_1.push("Object(" + stringify(thing.valueOf()) + ")");
break;
case "RegExp":
values_1.push(thing.toString());
break;
case "Date":
values_1.push("new Date(" + thing.getTime() + ")");
break;
case "Array":
values_1.push("Array(" + thing.length + ")");
thing.forEach(function(v, i) {
statements_1.push(name + "[" + i + "]=" + stringify(v));
});
break;
case "Set":
values_1.push("new Set");
statements_1.push(name + "." + Array.from(thing).map(function(v) {
return "add(" + stringify(v) + ")";
}).join("."));
break;
case "Map":
values_1.push("new Map");
statements_1.push(name + "." + Array.from(thing).map(function(_a) {
var k = _a[0], v = _a[1];
return "set(" + stringify(k) + ", " + stringify(v) + ")";
}).join("."));
break;
default:
values_1.push(Object.getPrototypeOf(thing) === null ? "Object.create(null)" : "{}");
Object.keys(thing).forEach(function(key2) {
statements_1.push("" + name + safeProp(key2) + "=" + stringify(thing[key2]));
});
}
});
statements_1.push("return " + str);
return "(function(" + params_1.join(",") + "){" + statements_1.join(";") + "}(" + values_1.join(",") + "))";
} else {
return str;
}
}
function getName(num) {
var name = "";
do {
name = chars$1[num % chars$1.length] + name;
num = ~~(num / chars$1.length) - 1;
} while (num >= 0);
return reserved.test(name) ? name + "_" : name;
}
function isPrimitive(thing) {
return Object(thing) !== thing;
}
function stringifyPrimitive(thing) {
if (typeof thing === "string")
return stringifyString(thing);
if (thing === void 0)
return "void 0";
if (thing === 0 && 1 / thing < 0)
return "-0";
var str = String(thing);
if (typeof thing === "number")
return str.replace(/^(-)?0\./, "$1.");
return str;
}
function getType(thing) {
return Object.prototype.toString.call(thing).slice(8, -1);
}
function escapeUnsafeChar(c) {
return escaped[c] || c;
}
function escapeUnsafeChars(str) {
return str.replace(unsafeChars, escapeUnsafeChar);
}
function safeKey(key2) {
return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key2) ? key2 : escapeUnsafeChars(JSON.stringify(key2));
}
function safeProp(key2) {
return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key2) ? "." + key2 : "[" + escapeUnsafeChars(JSON.stringify(key2)) + "]";
}
function stringifyString(str) {
var result = '"';
for (var i = 0; i < str.length; i += 1) {
var char = str.charAt(i);
var code = char.charCodeAt(0);
if (char === '"') {
result += '\\"';
} else if (char in escaped) {
result += escaped[char];
} else if (code >= 55296 && code <= 57343) {
var next = str.charCodeAt(i + 1);
if (code <= 56319 && (next >= 56320 && next <= 57343)) {
result += char + str[++i];
} else {
result += "\\u" + code.toString(16).toUpperCase();
}
} else {
result += char;
}
}
result += '"';
return result;
}
function noop() {
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || (a && typeof a === "object" || typeof a === "function");
}
Promise.resolve();
const subscriber_queue = [];
function readable(value, start) {
return {
subscribe: writable(value, start).subscribe
};
}
function writable(value, start = noop) {
let stop;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(value));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set) || noop;
}
run(value);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function coalesce_to_error(err) {
return err instanceof Error || err && err.name && err.message ? err : new Error(JSON.stringify(err));
}
const render_json_payload_script_dict = {
"<": "\\u003C",
"\u2028": "\\u2028",
"\u2029": "\\u2029"
};
const render_json_payload_script_regex = new RegExp(`[${Object.keys(render_json_payload_script_dict).join("")}]`, "g");
function render_json_payload_script(attrs, payload) {
const safe_payload = JSON.stringify(payload).replace(render_json_payload_script_regex, (match) => render_json_payload_script_dict[match]);
let safe_attrs = "";
for (const [key2, value] of Object.entries(attrs)) {
if (value === void 0)
continue;
safe_attrs += ` sveltekit:data-${key2}=${escape_html_attr(value)}`;
}
return `<script type="application/json"${safe_attrs}>${safe_payload}<\/script>`;
}
const escape_html_attr_dict = {
"&": "&amp;",
'"': "&quot;"
};
const escape_html_attr_regex = new RegExp(`[${Object.keys(escape_html_attr_dict).join("")}]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\udc00-\\udfff]`, "g");
function escape_html_attr(str) {
const escaped_str = str.replace(escape_html_attr_regex, (match) => {
if (match.length === 2) {
return match;
}
return escape_html_attr_dict[match] ?? `&#${match.charCodeAt(0)};`;
});
return `"${escaped_str}"`;
}
const s = JSON.stringify;
const encoder = new TextEncoder();
function sha256(data) {
if (!key[0])
precompute();
const out = init.slice(0);
const array2 = encode$1(data);
for (let i = 0; i < array2.length; i += 16) {
const w = array2.subarray(i, i + 16);
let tmp;
let a;
let b;
let out0 = out[0];
let out1 = out[1];
let out2 = out[2];
let out3 = out[3];
let out4 = out[4];
let out5 = out[5];
let out6 = out[6];
let out7 = out[7];
for (let i2 = 0; i2 < 64; i2++) {
if (i2 < 16) {
tmp = w[i2];
} else {
a = w[i2 + 1 & 15];
b = w[i2 + 14 & 15];
tmp = w[i2 & 15] = (a >>> 7 ^ a >>> 18 ^ a >>> 3 ^ a << 25 ^ a << 14) + (b >>> 17 ^ b >>> 19 ^ b >>> 10 ^ b << 15 ^ b << 13) + w[i2 & 15] + w[i2 + 9 & 15] | 0;
}
tmp = tmp + out7 + (out4 >>> 6 ^ out4 >>> 11 ^ out4 >>> 25 ^ out4 << 26 ^ out4 << 21 ^ out4 << 7) + (out6 ^ out4 & (out5 ^ out6)) + key[i2];
out7 = out6;
out6 = out5;
out5 = out4;
out4 = out3 + tmp | 0;
out3 = out2;
out2 = out1;
out1 = out0;
out0 = tmp + (out1 & out2 ^ out3 & (out1 ^ out2)) + (out1 >>> 2 ^ out1 >>> 13 ^ out1 >>> 22 ^ out1 << 30 ^ out1 << 19 ^ out1 << 10) | 0;
}
out[0] = out[0] + out0 | 0;
out[1] = out[1] + out1 | 0;
out[2] = out[2] + out2 | 0;
out[3] = out[3] + out3 | 0;
out[4] = out[4] + out4 | 0;
out[5] = out[5] + out5 | 0;
out[6] = out[6] + out6 | 0;
out[7] = out[7] + out7 | 0;
}
const bytes = new Uint8Array(out.buffer);
reverse_endianness(bytes);
return base64(bytes);
}
const init = new Uint32Array(8);
const key = new Uint32Array(64);
function precompute() {
function frac(x) {
return (x - Math.floor(x)) * 4294967296;
}
let prime = 2;
for (let i = 0; i < 64; prime++) {
let is_prime = true;
for (let factor = 2; factor * factor <= prime; factor++) {
if (prime % factor === 0) {
is_prime = false;
break;
}
}
if (is_prime) {
if (i < 8) {
init[i] = frac(prime ** (1 / 2));
}
key[i] = frac(prime ** (1 / 3));
i++;
}
}
}
function reverse_endianness(bytes) {
for (let i = 0; i < bytes.length; i += 4) {
const a = bytes[i + 0];
const b = bytes[i + 1];
const c = bytes[i + 2];
const d = bytes[i + 3];
bytes[i + 0] = d;
bytes[i + 1] = c;
bytes[i + 2] = b;
bytes[i + 3] = a;
}
}
function encode$1(str) {
const encoded = encoder.encode(str);
const length = encoded.length * 8;
const size = 512 * Math.ceil((length + 65) / 512);
const bytes = new Uint8Array(size / 8);
bytes.set(encoded);
bytes[encoded.length] = 128;
reverse_endianness(bytes);
const words = new Uint32Array(bytes.buffer);
words[words.length - 2] = Math.floor(length / 4294967296);
words[words.length - 1] = length;
return words;
}
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");
function base64(bytes) {
const l = bytes.length;
let result = "";
let i;
for (i = 2; i < l; i += 3) {
result += chars[bytes[i - 2] >> 2];
result += chars[(bytes[i - 2] & 3) << 4 | bytes[i - 1] >> 4];
result += chars[(bytes[i - 1] & 15) << 2 | bytes[i] >> 6];
result += chars[bytes[i] & 63];
}
if (i === l + 1) {
result += chars[bytes[i - 2] >> 2];
result += chars[(bytes[i - 2] & 3) << 4];
result += "==";
}
if (i === l) {
result += chars[bytes[i - 2] >> 2];
result += chars[(bytes[i - 2] & 3) << 4 | bytes[i - 1] >> 4];
result += chars[(bytes[i - 1] & 15) << 2];
result += "=";
}
return result;
}
let csp_ready;
const array = new Uint8Array(16);
function generate_nonce() {
crypto.getRandomValues(array);
return base64(array);
}
const quoted = /* @__PURE__ */ new Set([
"self",
"unsafe-eval",
"unsafe-hashes",
"unsafe-inline",
"none",
"strict-dynamic",
"report-sample"
]);
const crypto_pattern = /^(nonce|sha\d\d\d)-/;
class Csp {
#use_hashes;
#dev;
#script_needs_csp;
#style_needs_csp;
#directives;
#script_src;
#style_src;
constructor({ mode, directives }, { dev, prerender, needs_nonce }) {
this.#use_hashes = mode === "hash" || mode === "auto" && prerender;
this.#directives = dev ? { ...directives } : directives;
this.#dev = dev;
const d = this.#directives;
if (dev) {
const effective_style_src2 = d["style-src"] || d["default-src"];
if (effective_style_src2 && !effective_style_src2.includes("unsafe-inline")) {
d["style-src"] = [...effective_style_src2, "unsafe-inline"];
}
}
this.#script_src = [];
this.#style_src = [];
const effective_script_src = d["script-src"] || d["default-src"];
const effective_style_src = d["style-src"] || d["default-src"];
this.#script_needs_csp = !!effective_script_src && effective_script_src.filter((value) => value !== "unsafe-inline").length > 0;
this.#style_needs_csp = !dev && !!effective_style_src && effective_style_src.filter((value) => value !== "unsafe-inline").length > 0;
this.script_needs_nonce = this.#script_needs_csp && !this.#use_hashes;
this.style_needs_nonce = this.#style_needs_csp && !this.#use_hashes;
if (this.script_needs_nonce || this.style_needs_nonce || needs_nonce) {
this.nonce = generate_nonce();
}
}
add_script(content) {
if (this.#script_needs_csp) {
if (this.#use_hashes) {
this.#script_src.push(`sha256-${sha256(content)}`);
} else if (this.#script_src.length === 0) {
this.#script_src.push(`nonce-${this.nonce}`);
}
}
}
add_style(content) {
if (this.#style_needs_csp) {
if (this.#use_hashes) {
this.#style_src.push(`sha256-${sha256(content)}`);
} else if (this.#style_src.length === 0) {
this.#style_src.push(`nonce-${this.nonce}`);
}
}
}
get_header(is_meta = false) {
const header = [];
const directives = { ...this.#directives };
if (this.#style_src.length > 0) {
directives["style-src"] = [
...directives["style-src"] || directives["default-src"] || [],
...this.#style_src
];
}
if (this.#script_src.length > 0) {
directives["script-src"] = [
...directives["script-src"] || directives["default-src"] || [],
...this.#script_src
];
}
for (const key2 in directives) {
if (is_meta && (key2 === "frame-ancestors" || key2 === "report-uri" || key2 === "sandbox")) {
continue;
}
const value = directives[key2];
if (!value)
continue;
const directive = [key2];
if (Array.isArray(value)) {
value.forEach((value2) => {
if (quoted.has(value2) || crypto_pattern.test(value2)) {
directive.push(`'${value2}'`);
} else {
directive.push(value2);
}
});
}
header.push(directive.join(" "));
}
return header.join("; ");
}
get_meta() {
const content = escape_html_attr(this.get_header(true));
return `<meta http-equiv="content-security-policy" content=${content}>`;
}
}
const absolute = /^([a-z]+:)?\/?\//;
const scheme = /^[a-z]+:/;
function resolve(base2, path) {
if (scheme.test(path))
return path;
const base_match = absolute.exec(base2);
const path_match = absolute.exec(path);
if (!base_match) {
throw new Error(`bad base path: "${base2}"`);
}
const baseparts = path_match ? [] : base2.slice(base_match[0].length).split("/");
const pathparts = path_match ? path.slice(path_match[0].length).split("/") : path.split("/");
baseparts.pop();
for (let i = 0; i < pathparts.length; i += 1) {
const part = pathparts[i];
if (part === ".")
continue;
else if (part === "..")
baseparts.pop();
else
baseparts.push(part);
}
const prefix = path_match && path_match[0] || base_match && base_match[0] || "";
return `${prefix}${baseparts.join("/")}`;
}
function is_root_relative(path) {
return path[0] === "/" && path[1] !== "/";
}
function normalize_path(path, trailing_slash) {
if (path === "/" || trailing_slash === "ignore")
return path;
if (trailing_slash === "never") {
return path.endsWith("/") ? path.slice(0, -1) : path;
} else if (trailing_slash === "always" && !path.endsWith("/")) {
return path + "/";
}
return path;
}
class LoadURL extends URL {
get hash() {
throw new Error("url.hash is inaccessible from load. Consider accessing hash from the page store within the script tag of your component.");
}
}
class PrerenderingURL extends URL {
get search() {
throw new Error("Cannot access url.search on a page with prerendering enabled");
}
get searchParams() {
throw new Error("Cannot access url.searchParams on a page with prerendering enabled");
}
}
const updated = {
...readable(false),
check: () => false
};
async function render_response({
branch,
options,
state,
$session,
page_config,
status,
error: error2 = null,
event,
resolve_opts,
stuff
}) {
if (state.prerendering) {
if (options.csp.mode === "nonce") {
throw new Error('Cannot use prerendering if config.kit.csp.mode === "nonce"');
}
if (options.template_contains_nonce) {
throw new Error("Cannot use prerendering if page template contains %sveltekit.nonce%");
}
}
const stylesheets = new Set(options.manifest._.entry.css);
const modulepreloads = new Set(options.manifest._.entry.js);
const styles = /* @__PURE__ */ new Map();
const serialized_data = [];
let shadow_props;
let rendered;
let is_private = false;
let cache;
if (error2) {
error2.stack = options.get_stack(error2);
}
if (resolve_opts.ssr) {
branch.forEach(({ node, props: props2, loaded, fetched, uses_credentials }) => {
if (node.css)
node.css.forEach((url) => stylesheets.add(url));
if (node.js)
node.js.forEach((url) => modulepreloads.add(url));
if (node.styles)
Object.entries(node.styles).forEach(([k, v]) => styles.set(k, v));
if (fetched && page_config.hydrate)
serialized_data.push(...fetched);
if (props2)
shadow_props = props2;
cache = loaded == null ? void 0 : loaded.cache;
is_private = (cache == null ? void 0 : cache.private) ?? uses_credentials;
});
const session = writable($session);
const props = {
stores: {
page: writable(null),
navigating: writable(null),
session: {
...session,
subscribe: (fn) => {
is_private = (cache == null ? void 0 : cache.private) ?? true;
return session.subscribe(fn);
}
},
updated
},
page: {
error: error2,
params: event.params,
routeId: event.routeId,
status,
stuff,
url: state.prerendering ? new PrerenderingURL(event.url) : event.url
},
components: branch.map(({ node }) => node.module.default)
};
const print_error = (property, replacement) => {
Object.defineProperty(props.page, property, {
get: () => {
throw new Error(`$page.${property} has been replaced by $page.url.${replacement}`);
}
});
};
print_error("origin", "origin");
print_error("path", "pathname");
print_error("query", "searchParams");
for (let i = 0; i < branch.length; i += 1) {
props[`props_${i}`] = await branch[i].loaded.props;
}
rendered = options.root.render(props);
} else {
rendered = { head: "", html: "", css: { code: "", map: null } };
}
let { head, html: body } = rendered;
const inlined_style = Array.from(styles.values()).join("\n");
await csp_ready;
const csp = new Csp(options.csp, {
dev: options.dev,
prerender: !!state.prerendering,
needs_nonce: options.template_contains_nonce
});
const target = hash(body);
const init_app = `
import { start } from ${s(options.prefix + options.manifest._.entry.file)};
start({
target: document.querySelector('[data-sveltekit-hydrate="${target}"]').parentNode,
paths: ${s(options.paths)},
session: ${try_serialize($session, (error3) => {
throw new Error(`Failed to serialize session data: ${error3.message}`);
})},
route: ${!!page_config.router},
spa: ${!resolve_opts.ssr},
trailing_slash: ${s(options.trailing_slash)},
hydrate: ${resolve_opts.ssr && page_config.hydrate ? `{
status: ${status},
error: ${serialize_error(error2)},
nodes: [${branch.map(({ node }) => node.index).join(", ")}],
params: ${devalue(event.params)},
routeId: ${s(event.routeId)}
}` : "null"}
});
`;
const init_service_worker = `
if ('serviceWorker' in navigator) {
addEventListener('load', () => {
navigator.serviceWorker.register('${options.service_worker}');
});
}
`;
if (inlined_style) {
const attributes = [];
if (options.dev)
attributes.push(" data-sveltekit");
if (csp.style_needs_nonce)
attributes.push(` nonce="${csp.nonce}"`);
csp.add_style(inlined_style);
head += `
<style${attributes.join("")}>${inlined_style}</style>`;
}
head += Array.from(stylesheets).map((dep) => {
const attributes = [
'rel="stylesheet"',
`href="${options.prefix + dep}"`
];
if (csp.style_needs_nonce) {
attributes.push(`nonce="${csp.nonce}"`);
}
if (styles.has(dep)) {
attributes.push("disabled", 'media="(max-width: 0)"');
}
return `
<link ${attributes.join(" ")}>`;
}).join("");
if (page_config.router || page_config.hydrate) {
head += Array.from(modulepreloads).map((dep) => `
<link rel="modulepreload" href="${options.prefix + dep}">`).join("");
const attributes = ['type="module"', `data-sveltekit-hydrate="${target}"`];
csp.add_script(init_app);
if (csp.script_needs_nonce) {
attributes.push(`nonce="${csp.nonce}"`);
}
body += `
<script ${attributes.join(" ")}>${init_app}<\/script>`;
body += serialized_data.map(({ url, body: body2, response }) => render_json_payload_script({ type: "data", url, body: typeof body2 === "string" ? hash(body2) : void 0 }, response)).join("\n ");
if (shadow_props) {
body += render_json_payload_script({ type: "props" }, shadow_props);
}
}
if (options.service_worker) {
csp.add_script(init_service_worker);
head += `
<script${csp.script_needs_nonce ? ` nonce="${csp.nonce}"` : ""}>${init_service_worker}<\/script>`;
}
if (state.prerendering) {
const http_equiv = [];
const csp_headers = csp.get_meta();
if (csp_headers) {
http_equiv.push(csp_headers);
}
if (cache) {
http_equiv.push(`<meta http-equiv="cache-control" content="max-age=${cache.maxage}">`);
}
if (http_equiv.length > 0) {
head = http_equiv.join("\n") + head;
}
}
const segments = event.url.pathname.slice(options.paths.base.length).split("/").slice(2);
const assets2 = options.paths.assets || (segments.length > 0 ? segments.map(() => "..").join("/") : ".");
const html = await resolve_opts.transformPage({
html: options.template({ head, body, assets: assets2, nonce: csp.nonce })
});
const headers = new Headers({
"content-type": "text/html",
etag: `"${hash(html)}"`
});
if (cache) {
headers.set("cache-control", `${is_private ? "private" : "public"}, max-age=${cache.maxage}`);
}
if (!options.floc) {
headers.set("permissions-policy", "interest-cohort=()");
}
if (!state.prerendering) {
const csp_header = csp.get_header();
if (csp_header) {
headers.set("content-security-policy", csp_header);
}
}
return new Response(html, {
status,
headers
});
}
function try_serialize(data, fail) {
try {
return devalue(data);
} catch (err) {
if (fail)
fail(coalesce_to_error(err));
return null;
}
}
function serialize_error(error2) {
if (!error2)
return null;
let serialized = try_serialize(error2);
if (!serialized) {
const { name, message, stack } = error2;
serialized = try_serialize({ ...error2, name, message, stack });
}
if (!serialized) {
serialized = "{}";
}
return serialized;
}
/*!
* cookie
* Copyright(c) 2012-2014 Roman Shtylman
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*/
var parse_1 = parse$1;
var serialize_1 = serialize;
var __toString = Object.prototype.toString;
var fieldContentRegExp = /^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;
function parse$1(str, options) {
if (typeof str !== "string") {
throw new TypeError("argument str must be a string");
}
var obj = {};
var opt = options || {};
var dec = opt.decode || decode;
var index = 0;
while (index < str.length) {
var eqIdx = str.indexOf("=", index);
if (eqIdx === -1) {
break;
}
var endIdx = str.indexOf(";", index);
if (endIdx === -1) {
endIdx = str.length;
} else if (endIdx < eqIdx) {
index = str.lastIndexOf(";", eqIdx - 1) + 1;
continue;
}
var key2 = str.slice(index, eqIdx).trim();
if (obj[key2] === void 0) {
var val = str.slice(eqIdx + 1, endIdx).trim();
if (val.charCodeAt(0) === 34) {
val = val.slice(1, -1);
}
obj[key2] = tryDecode(val, dec);
}
index = endIdx + 1;
}
return obj;
}
function serialize(name, val, options) {
var opt = options || {};
var enc = opt.encode || encode;
if (typeof enc !== "function") {
throw new TypeError("option encode is invalid");
}
if (!fieldContentRegExp.test(name)) {
throw new TypeError("argument name is invalid");
}
var value = enc(val);
if (value && !fieldContentRegExp.test(value)) {
throw new TypeError("argument val is invalid");
}
var str = name + "=" + value;
if (opt.maxAge != null) {
var maxAge = opt.maxAge - 0;
if (isNaN(maxAge) || !isFinite(maxAge)) {
throw new TypeError("option maxAge is invalid");
}
str += "; Max-Age=" + Math.floor(maxAge);
}
if (opt.domain) {
if (!fieldContentRegExp.test(opt.domain)) {
throw new TypeError("option domain is invalid");
}
str += "; Domain=" + opt.domain;
}
if (opt.path) {
if (!fieldContentRegExp.test(opt.path)) {
throw new TypeError("option path is invalid");
}
str += "; Path=" + opt.path;
}
if (opt.expires) {
var expires = opt.expires;
if (!isDate(expires) || isNaN(expires.valueOf())) {
throw new TypeError("option expires is invalid");
}
str += "; Expires=" + expires.toUTCString();
}
if (opt.httpOnly) {
str += "; HttpOnly";
}
if (opt.secure) {
str += "; Secure";
}
if (opt.priority) {
var priority = typeof opt.priority === "string" ? opt.priority.toLowerCase() : opt.priority;
switch (priority) {
case "low":
str += "; Priority=Low";
break;
case "medium":
str += "; Priority=Medium";
break;
case "high":
str += "; Priority=High";
break;
default:
throw new TypeError("option priority is invalid");
}
}
if (opt.sameSite) {
var sameSite = typeof opt.sameSite === "string" ? opt.sameSite.toLowerCase() : opt.sameSite;
switch (sameSite) {
case true:
str += "; SameSite=Strict";
break;
case "lax":
str += "; SameSite=Lax";
break;
case "strict":
str += "; SameSite=Strict";
break;
case "none":
str += "; SameSite=None";
break;
default:
throw new TypeError("option sameSite is invalid");
}
}
return str;
}
function decode(str) {
return str.indexOf("%") !== -1 ? decodeURIComponent(str) : str;
}
function encode(val) {
return encodeURIComponent(val);
}
function isDate(val) {
return __toString.call(val) === "[object Date]" || val instanceof Date;
}
function tryDecode(str, decode2) {
try {
return decode2(str);
} catch (e) {
return str;
}
}
var setCookie = { exports: {} };
var defaultParseOptions = {
decodeValues: true,
map: false,
silent: false
};
function isNonEmptyString(str) {
return typeof str === "string" && !!str.trim();
}
function parseString(setCookieValue, options) {
var parts = setCookieValue.split(";").filter(isNonEmptyString);
var nameValue = parts.shift().split("=");
var name = nameValue.shift();
var value = nameValue.join("=");
options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
try {
value = options.decodeValues ? decodeURIComponent(value) : value;
} catch (e) {
console.error("set-cookie-parser encountered an error while decoding a cookie with value '" + value + "'. Set options.decodeValues to false to disable this feature.", e);
}
var cookie = {
name,
value
};
parts.forEach(function(part) {
var sides = part.split("=");
var key2 = sides.shift().trimLeft().toLowerCase();
var value2 = sides.join("=");
if (key2 === "expires") {
cookie.expires = new Date(value2);
} else if (key2 === "max-age") {
cookie.maxAge = parseInt(value2, 10);
} else if (key2 === "secure") {
cookie.secure = true;
} else if (key2 === "httponly") {
cookie.httpOnly = true;
} else if (key2 === "samesite") {
cookie.sameSite = value2;
} else {
cookie[key2] = value2;
}
});
return cookie;
}
function parse(input, options) {
options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
if (!input) {
if (!options.map) {
return [];
} else {
return {};
}
}
if (input.headers && input.headers["set-cookie"]) {
input = input.headers["set-cookie"];
} else if (input.headers) {
var sch = input.headers[Object.keys(input.headers).find(function(key2) {
return key2.toLowerCase() === "set-cookie";
})];
if (!sch && input.headers.cookie && !options.silent) {
console.warn("Warning: set-cookie-parser appears to have been called on a request object. It is designed to parse Set-Cookie headers from responses, not Cookie headers from requests. Set the option {silent: true} to suppress this warning.");
}
input = sch;
}
if (!Array.isArray(input)) {
input = [input];
}
options = options ? Object.assign({}, defaultParseOptions, options) : defaultParseOptions;
if (!options.map) {
return input.filter(isNonEmptyString).map(function(str) {
return parseString(str, options);
});
} else {
var cookies = {};
return input.filter(isNonEmptyString).reduce(function(cookies2, str) {
var cookie = parseString(str, options);
cookies2[cookie.name] = cookie;
return cookies2;
}, cookies);
}
}
function splitCookiesString(cookiesString) {
if (Array.isArray(cookiesString)) {
return cookiesString;
}
if (typeof cookiesString !== "string") {
return [];
}
var cookiesStrings = [];
var pos = 0;
var start;
var ch;
var lastComma;
var nextStart;
var cookiesSeparatorFound;
function skipWhitespace() {
while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) {
pos += 1;
}
return pos < cookiesString.length;
}
function notSpecialChar() {
ch = cookiesString.charAt(pos);
return ch !== "=" && ch !== ";" && ch !== ",";
}
while (pos < cookiesString.length) {
start = pos;
cookiesSeparatorFound = false;
while (skipWhitespace()) {
ch = cookiesString.charAt(pos);
if (ch === ",") {
lastComma = pos;
pos += 1;
skipWhitespace();
nextStart = pos;
while (pos < cookiesString.length && notSpecialChar()) {
pos += 1;
}
if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") {
cookiesSeparatorFound = true;
pos = nextStart;
cookiesStrings.push(cookiesString.substring(start, lastComma));
start = pos;
} else {
pos = lastComma + 1;
}
} else {
pos += 1;
}
}
if (!cookiesSeparatorFound || pos >= cookiesString.length) {
cookiesStrings.push(cookiesString.substring(start, cookiesString.length));
}
}
return cookiesStrings;
}
setCookie.exports = parse;
setCookie.exports.parse = parse;
var parseString_1 = setCookie.exports.parseString = parseString;
var splitCookiesString_1 = setCookie.exports.splitCookiesString = splitCookiesString;
function normalize(loaded) {
if (loaded.fallthrough) {
throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");
}
if ("maxage" in loaded) {
throw new Error("maxage should be replaced with cache: { maxage }");
}
const has_error_status = loaded.status && loaded.status >= 400 && loaded.status <= 599 && !loaded.redirect;
if (loaded.error || has_error_status) {
const status = loaded.status;
if (!loaded.error && has_error_status) {
return { status: status || 500, error: new Error() };
}
const error2 = typeof loaded.error === "string" ? new Error(loaded.error) : loaded.error;
if (!(error2 instanceof Error)) {
return {
status: 500,
error: new Error(`"error" property returned from load() must be a string or instance of Error, received type "${typeof error2}"`)
};
}
if (!status || status < 400 || status > 599) {
console.warn('"error" returned from load() without a valid status code \u2014 defaulting to 500');
return { status: 500, error: error2 };
}
return { status, error: error2 };
}
if (loaded.redirect) {
if (!loaded.status || Math.floor(loaded.status / 100) !== 3) {
throw new Error('"redirect" property returned from load() must be accompanied by a 3xx status code');
}
if (typeof loaded.redirect !== "string") {
throw new Error('"redirect" property returned from load() must be a string');
}
}
if (loaded.dependencies) {
if (!Array.isArray(loaded.dependencies) || loaded.dependencies.some((dep) => typeof dep !== "string")) {
throw new Error('"dependencies" property returned from load() must be of type string[]');
}
}
if (loaded.context) {
throw new Error('You are returning "context" from a load function. "context" was renamed to "stuff", please adjust your code accordingly.');
}
return loaded;
}
function domain_matches(hostname, constraint) {
if (!constraint)
return true;
const normalized = constraint[0] === "." ? constraint.slice(1) : constraint;
if (hostname === normalized)
return true;
return hostname.endsWith("." + normalized);
}
function path_matches(path, constraint) {
if (!constraint)
return true;
const normalized = constraint.endsWith("/") ? constraint.slice(0, -1) : constraint;
if (path === normalized)
return true;
return path.startsWith(normalized + "/");
}
async function load_node({
event,
options,
state,
route,
node,
$session,
stuff,
is_error,
is_leaf,
status,
error: error2
}) {
const { module } = node;
let uses_credentials = false;
const fetched = [];
const cookies = parse_1(event.request.headers.get("cookie") || "");
const new_cookies = [];
let loaded;
const should_prerender = node.module.prerender ?? options.prerender.default;
const shadow = is_leaf ? await load_shadow_data(route, event, options, should_prerender) : {};
if (shadow.cookies) {
shadow.cookies.forEach((header) => {
new_cookies.push(parseString_1(header));
});
}
if (shadow.error) {
loaded = {
status: shadow.status,
error: shadow.error
};
} else if (shadow.redirect) {
loaded = {
status: shadow.status,
redirect: shadow.redirect
};
} else if (module.load) {
const load_input = {
url: state.prerendering ? new PrerenderingURL(event.url) : new LoadURL(event.url),
params: event.params,
props: shadow.body || {},
routeId: event.routeId,
get session() {
if (node.module.prerender ?? options.prerender.default) {
throw Error("Attempted to access session from a prerendered page. Session would never be populated.");
}
uses_credentials = true;
return $session;
},
fetch: async (resource, opts = {}) => {
let requested;
if (typeof resource === "string") {
requested = resource;
} else {
requested = resource.url;
opts = {
method: resource.method,
headers: resource.headers,
body: resource.body,
mode: resource.mode,
credentials: resource.credentials,
cache: resource.cache,
redirect: resource.redirect,
referrer: resource.referrer,
integrity: resource.integrity,
...opts
};
}
opts.headers = new Headers(opts.headers);
for (const [key2, value] of event.request.headers) {
if (key2 !== "authorization" && key2 !== "cookie" && key2 !== "host" && key2 !== "if-none-match" && !opts.headers.has(key2)) {
opts.headers.set(key2, value);
}
}
const resolved = resolve(event.url.pathname, requested.split("?")[0]);
let response;
let dependency;
const prefix = options.paths.assets || options.paths.base;
const filename = decodeURIComponent(resolved.startsWith(prefix) ? resolved.slice(prefix.length) : resolved).slice(1);
const filename_html = `${filename}/index.html`;
const is_asset = options.manifest.assets.has(filename);
const is_asset_html = options.manifest.assets.has(filename_html);
if (is_asset || is_asset_html) {
const file = is_asset ? filename : filename_html;
if (options.read) {
const type = is_asset ? options.manifest.mimeTypes[filename.slice(filename.lastIndexOf("."))] : "text/html";
response = new Response(options.read(file), {
headers: type ? { "content-type": type } : {}
});
} else {
response = await fetch(`${event.url.origin}/${file}`, opts);
}
} else if (is_root_relative(resolved)) {
if (opts.credentials !== "omit") {
uses_credentials = true;
const authorization = event.request.headers.get("authorization");
const combined_cookies = { ...cookies };
for (const cookie2 of new_cookies) {
if (!domain_matches(event.url.hostname, cookie2.domain))
continue;
if (!path_matches(resolved, cookie2.path))
continue;
combined_cookies[cookie2.name] = cookie2.value;
}
const cookie = Object.entries(combined_cookies).map(([name, value]) => `${name}=${value}`).join("; ");
if (cookie) {
opts.headers.set("cookie", cookie);
}
if (authorization && !opts.headers.has("authorization")) {
opts.headers.set("authorization", authorization);
}
}
if (opts.body && typeof opts.body !== "string") {
throw new Error("Request body must be a string");
}
response = await respond(new Request(new URL(requested, event.url).href, { ...opts }), options, {
...state,
initiator: route
});
if (state.prerendering) {
dependency = { response, body: null };
state.prerendering.dependencies.set(resolved, dependency);
}
} else {
if (resolved.startsWith("//")) {
requested = event.url.protocol + requested;
}
if (`.${new URL(requested).hostname}`.endsWith(`.${event.url.hostname}`) && opts.credentials !== "omit") {
uses_credentials = true;
const cookie = event.request.headers.get("cookie");
if (cookie)
opts.headers.set("cookie", cookie);
}
opts.headers.delete("connection");
const external_request = new Request(requested, opts);
response = await options.hooks.externalFetch.call(null, external_request);
}
const set_cookie = response.headers.get("set-cookie");
if (set_cookie) {
new_cookies.push(...splitCookiesString_1(set_cookie).map((str) => parseString_1(str)));
}
const proxy = new Proxy(response, {
get(response2, key2, _receiver) {
async function text() {
const body = await response2.text();
const headers = {};
for (const [key3, value] of response2.headers) {
if (key3 !== "set-cookie" && key3 !== "etag") {
headers[key3] = value;
}
}
if (!opts.body || typeof opts.body === "string") {
const status_number = Number(response2.status);
if (isNaN(status_number)) {
throw new Error(`response.status is not a number. value: "${response2.status}" type: ${typeof response2.status}`);
}
fetched.push({
url: requested,
body: opts.body,
response: {
status: status_number,
statusText: response2.statusText,
headers,
body
}
});
}
if (dependency) {
dependency.body = body;
}
return body;
}
if (key2 === "arrayBuffer") {
return async () => {
const buffer = await response2.arrayBuffer();
if (dependency) {
dependency.body = new Uint8Array(buffer);
}
return buffer;
};
}
if (key2 === "text") {
return text;
}
if (key2 === "json") {
return async () => {
return JSON.parse(await text());
};
}
return Reflect.get(response2, key2, response2);
}
});
return proxy;
},
stuff: { ...stuff },
status: is_error ? status ?? null : null,
error: is_error ? error2 ?? null : null
};
if (options.dev) {
Object.defineProperty(load_input, "page", {
get: () => {
throw new Error("`page` in `load` functions has been replaced by `url` and `params`");
}
});
}
loaded = await module.load.call(null, load_input);
if (!loaded) {
throw new Error(`load function must return a value${options.dev ? ` (${node.entry})` : ""}`);
}
} else if (shadow.body) {
loaded = {
props: shadow.body
};
} else {
loaded = {};
}
if (shadow.body && state.prerendering) {
const pathname = `${event.url.pathname.replace(/\/$/, "")}/__data.json`;
const dependency = {
response: new Response(void 0),
body: JSON.stringify(shadow.body)
};
state.prerendering.dependencies.set(pathname, dependency);
}
return {
node,
props: shadow.body,
loaded: normalize(loaded),
stuff: loaded.stuff || stuff,
fetched,
set_cookie_headers: new_cookies.map((new_cookie) => {
const { name, value, ...options2 } = new_cookie;
return serialize_1(name, value, options2);
}),
uses_credentials
};
}
async function load_shadow_data(route, event, options, prerender) {
if (!route.shadow)
return {};
try {
const mod = await route.shadow();
if (prerender && (mod.post || mod.put || mod.del || mod.patch)) {
throw new Error("Cannot prerender pages that have endpoints with mutative methods");
}
const method = normalize_request_method(event);
const is_get = method === "head" || method === "get";
const handler = method === "head" ? mod.head || mod.get : mod[method];
if (!handler && !is_get) {
return {
status: 405,
error: new Error(`${method} method not allowed`)
};
}
const data = {
status: 200,
cookies: [],
body: {}
};
if (!is_get) {
const result = await handler(event);
if (result.fallthrough) {
throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");
}
const { status, headers, body } = validate_shadow_output(result);
data.status = status;
add_cookies(data.cookies, headers);
if (status >= 300 && status < 400) {
data.redirect = headers instanceof Headers ? headers.get("location") : headers.location;
return data;
}
data.body = body;
}
const get = method === "head" && mod.head || mod.get;
if (get) {
const result = await get(event);
if (result.fallthrough) {
throw new Error("fallthrough is no longer supported. Use matchers instead: https://kit.svelte.dev/docs/routing#advanced-routing-matching");
}
const { status, headers, body } = validate_shadow_output(result);
add_cookies(data.cookies, headers);
data.status = status;
if (status >= 400) {
data.error = new Error("Failed to load data");
return data;
}
if (status >= 300) {
data.redirect = headers instanceof Headers ? headers.get("location") : headers.location;
return data;
}
data.body = { ...body, ...data.body };
}
return data;
} catch (e) {
const error2 = coalesce_to_error(e);
options.handle_error(error2, event);
return {
status: 500,
error: error2
};
}
}
function add_cookies(target, headers) {
const cookies = headers["set-cookie"];
if (cookies) {
if (Array.isArray(cookies)) {
target.push(...cookies);
} else {
target.push(cookies);
}
}
}
function validate_shadow_output(result) {
const { status = 200, body = {} } = result;
let headers = result.headers || {};
if (headers instanceof Headers) {
if (headers.has("set-cookie")) {
throw new Error("Endpoint request handler cannot use Headers interface with Set-Cookie headers");
}
} else {
headers = lowercase_keys(headers);
}
if (!is_pojo(body)) {
throw new Error("Body returned from endpoint request handler must be a plain object");
}
return { status, headers, body };
}
async function respond_with_error({
event,
options,
state,
$session,
status,
error: error2,
resolve_opts
}) {
try {
const branch = [];
let stuff = {};
if (resolve_opts.ssr) {
const default_layout = await options.manifest._.nodes[0]();
const default_error = await options.manifest._.nodes[1]();
const layout_loaded = await load_node({
event,
options,
state,
route: null,
node: default_layout,
$session,
stuff: {},
is_error: false,
is_leaf: false
});
const error_loaded = await load_node({
event,
options,
state,
route: null,
node: default_error,
$session,
stuff: layout_loaded ? layout_loaded.stuff : {},
is_error: true,
is_leaf: false,
status,
error: error2
});
branch.push(layout_loaded, error_loaded);
stuff = error_loaded.stuff;
}
return await render_response({
options,
state,
$session,
page_config: {
hydrate: options.hydrate,
router: options.router
},
stuff,
status,
error: error2,
branch,
event,
resolve_opts
});
} catch (err) {
const error3 = coalesce_to_error(err);
options.handle_error(error3, event);
return new Response(error3.stack, {
status: 500
});
}
}
async function respond$1(opts) {
const { event, options, state, $session, route, resolve_opts } = opts;
let nodes;
if (!resolve_opts.ssr) {
return await render_response({
...opts,
branch: [],
page_config: {
hydrate: true,
router: true
},
status: 200,
error: null,
event,
stuff: {}
});
}
try {
nodes = await Promise.all(route.a.map((n) => n == void 0 ? n : options.manifest._.nodes[n]()));
} catch (err) {
const error3 = coalesce_to_error(err);
options.handle_error(error3, event);
return await respond_with_error({
event,
options,
state,
$session,
status: 500,
error: error3,
resolve_opts
});
}
const leaf = nodes[nodes.length - 1].module;
let page_config = get_page_config(leaf, options);
if (state.prerendering) {
const should_prerender = leaf.prerender ?? options.prerender.default;
if (!should_prerender) {
return new Response(void 0, {
status: 204
});
}
}
let branch = [];
let status = 200;
let error2 = null;
let set_cookie_headers = [];
let stuff = {};
ssr: {
for (let i = 0; i < nodes.length; i += 1) {
const node = nodes[i];
let loaded;
if (node) {
try {
loaded = await load_node({
...opts,
node,
stuff,
is_error: false,
is_leaf: i === nodes.length - 1
});
set_cookie_headers = set_cookie_headers.concat(loaded.set_cookie_headers);
if (loaded.loaded.redirect) {
return with_cookies(new Response(void 0, {
status: loaded.loaded.status,
headers: {
location: loaded.loaded.redirect
}
}), set_cookie_headers);
}
if (loaded.loaded.error) {
({ status, error: error2 } = loaded.loaded);
}
} catch (err) {
const e = coalesce_to_error(err);
options.handle_error(e, event);
status = 500;
error2 = e;
}
if (loaded && !error2) {
branch.push(loaded);
}
if (error2) {
while (i--) {
if (route.b[i]) {
const index = route.b[i];
const error_node = await options.manifest._.nodes[index]();
let node_loaded;
let j = i;
while (!(node_loaded = branch[j])) {
j -= 1;
}
try {
const error_loaded = await load_node({
...opts,
node: error_node,
stuff: node_loaded.stuff,
is_error: true,
is_leaf: false,
status,
error: error2
});
if (error_loaded.loaded.error) {
continue;
}
page_config = get_page_config(error_node.module, options);
branch = branch.slice(0, j + 1).concat(error_loaded);
stuff = { ...node_loaded.stuff, ...error_loaded.stuff };
break ssr;
} catch (err) {
const e = coalesce_to_error(err);
options.handle_error(e, event);
continue;
}
}
}
return with_cookies(await respond_with_error({
event,
options,
state,
$session,
status,
error: error2,
resolve_opts
}), set_cookie_headers);
}
}
if (loaded && loaded.loaded.stuff) {
stuff = {
...stuff,
...loaded.loaded.stuff
};
}
}
}
try {
return with_cookies(await render_response({
...opts,
stuff,
event,
page_config,
status,
error: error2,
branch: branch.filter(Boolean)
}), set_cookie_headers);
} catch (err) {
const error3 = coalesce_to_error(err);
options.handle_error(error3, event);
return with_cookies(await respond_with_error({
...opts,
status: 500,
error: error3
}), set_cookie_headers);
}
}
function get_page_config(leaf, options) {
if ("ssr" in leaf) {
throw new Error("`export const ssr` has been removed \u2014 use the handle hook instead: https://kit.svelte.dev/docs/hooks#handle");
}
return {
router: "router" in leaf ? !!leaf.router : options.router,
hydrate: "hydrate" in leaf ? !!leaf.hydrate : options.hydrate
};
}
function with_cookies(response, set_cookie_headers) {
if (set_cookie_headers.length) {
set_cookie_headers.forEach((value) => {
response.headers.append("set-cookie", value);
});
}
return response;
}
async function render_page(event, route, options, state, resolve_opts) {
if (state.initiator === route) {
return new Response(`Not found: ${event.url.pathname}`, {
status: 404
});
}
if (route.shadow) {
const type = negotiate(event.request.headers.get("accept") || "text/html", [
"text/html",
"application/json"
]);
if (type === "application/json") {
return render_endpoint(event, await route.shadow());
}
}
const $session = await options.hooks.getSession(event);
return respond$1({
event,
options,
state,
$session,
resolve_opts,
route
});
}
function negotiate(accept, types) {
const parts = accept.split(",").map((str, i) => {
const match = /([^/]+)\/([^;]+)(?:;q=([0-9.]+))?/.exec(str);
if (match) {
const [, type, subtype, q = "1"] = match;
return { type, subtype, q: +q, i };
}
throw new Error(`Invalid Accept header: ${accept}`);
}).sort((a, b) => {
if (a.q !== b.q) {
return b.q - a.q;
}
if (a.subtype === "*" !== (b.subtype === "*")) {
return a.subtype === "*" ? 1 : -1;
}
if (a.type === "*" !== (b.type === "*")) {
return a.type === "*" ? 1 : -1;
}
return a.i - b.i;
});
let accepted;
let min_priority = Infinity;
for (const mimetype of types) {
const [type, subtype] = mimetype.split("/");
const priority = parts.findIndex((part) => (part.type === type || part.type === "*") && (part.subtype === subtype || part.subtype === "*"));
if (priority !== -1 && priority < min_priority) {
accepted = mimetype;
min_priority = priority;
}
}
return accepted;
}
function exec(match, names, types, matchers) {
const params = {};
for (let i = 0; i < names.length; i += 1) {
const name = names[i];
const type = types[i];
const value = match[i + 1] || "";
if (type) {
const matcher = matchers[type];
if (!matcher)
throw new Error(`Missing "${type}" param matcher`);
if (!matcher(value))
return;
}
params[name] = value;
}
return params;
}
const DATA_SUFFIX = "/__data.json";
const default_transform = ({ html }) => html;
async function respond(request, options, state) {
var _a, _b, _c, _d;
let url = new URL(request.url);
const { parameter, allowed } = options.method_override;
const method_override = (_a = url.searchParams.get(parameter)) == null ? void 0 : _a.toUpperCase();
if (method_override) {
if (request.method === "POST") {
if (allowed.includes(method_override)) {
request = new Proxy(request, {
get: (target, property, _receiver) => {
if (property === "method")
return method_override;
return Reflect.get(target, property, target);
}
});
} else {
const verb = allowed.length === 0 ? "enabled" : "allowed";
const body = `${parameter}=${method_override} is not ${verb}. See https://kit.svelte.dev/docs/configuration#methodoverride`;
return new Response(body, {
status: 400
});
}
} else {
throw new Error(`${parameter}=${method_override} is only allowed with POST requests`);
}
}
let decoded;
try {
decoded = decodeURI(url.pathname);
} catch {
return new Response("Malformed URI", { status: 400 });
}
let route = null;
let params = {};
if (options.paths.base && !((_b = state.prerendering) == null ? void 0 : _b.fallback)) {
if (!decoded.startsWith(options.paths.base)) {
return new Response("Not found", { status: 404 });
}
decoded = decoded.slice(options.paths.base.length) || "/";
}
const is_data_request = decoded.endsWith(DATA_SUFFIX);
if (is_data_request) {
const data_suffix_length = DATA_SUFFIX.length - (options.trailing_slash === "always" ? 1 : 0);
decoded = decoded.slice(0, -data_suffix_length) || "/";
url = new URL(url.origin + url.pathname.slice(0, -data_suffix_length) + url.search);
}
if (!((_c = state.prerendering) == null ? void 0 : _c.fallback)) {
const matchers = await options.manifest._.matchers();
for (const candidate of options.manifest._.routes) {
const match = candidate.pattern.exec(decoded);
if (!match)
continue;
const matched = exec(match, candidate.names, candidate.types, matchers);
if (matched) {
route = candidate;
params = decode_params(matched);
break;
}
}
}
if (route) {
if (route.type === "page") {
const normalized = normalize_path(url.pathname, options.trailing_slash);
if (normalized !== url.pathname && !((_d = state.prerendering) == null ? void 0 : _d.fallback)) {
return new Response(void 0, {
status: 301,
headers: {
"x-sveltekit-normalize": "1",
location: (normalized.startsWith("//") ? url.origin + normalized : normalized) + (url.search === "?" ? "" : url.search)
}
});
}
} else if (is_data_request) {
return new Response(void 0, {
status: 404
});
}
}
const event = {
get clientAddress() {
if (!state.getClientAddress) {
throw new Error(`${"@sveltejs/adapter-static"} does not specify getClientAddress. Please raise an issue`);
}
Object.defineProperty(event, "clientAddress", {
value: state.getClientAddress()
});
return event.clientAddress;
},
locals: {},
params,
platform: state.platform,
request,
routeId: route && route.id,
url
};
const removed = (property, replacement, suffix = "") => ({
get: () => {
throw new Error(`event.${property} has been replaced by event.${replacement}` + suffix);
}
});
const details = ". See https://github.com/sveltejs/kit/pull/3384 for details";
const body_getter = {
get: () => {
throw new Error("To access the request body use the text/json/arrayBuffer/formData methods, e.g. `body = await request.json()`" + details);
}
};
Object.defineProperties(event, {
method: removed("method", "request.method", details),
headers: removed("headers", "request.headers", details),
origin: removed("origin", "url.origin"),
path: removed("path", "url.pathname"),
query: removed("query", "url.searchParams"),
body: body_getter,
rawBody: body_getter
});
let resolve_opts = {
ssr: true,
transformPage: default_transform
};
try {
const response = await options.hooks.handle({
event,
resolve: async (event2, opts) => {
var _a2;
if (opts) {
resolve_opts = {
ssr: opts.ssr !== false,
transformPage: opts.transformPage || default_transform
};
}
if ((_a2 = state.prerendering) == null ? void 0 : _a2.fallback) {
return await render_response({
event: event2,
options,
state,
$session: await options.hooks.getSession(event2),
page_config: { router: true, hydrate: true },
stuff: {},
status: 200,
error: null,
branch: [],
resolve_opts: {
...resolve_opts,
ssr: false
}
});
}
if (route) {
let response2;
if (is_data_request && route.type === "page" && route.shadow) {
response2 = await render_endpoint(event2, await route.shadow());
if (request.headers.has("x-sveltekit-load")) {
if (response2.status >= 300 && response2.status < 400) {
const location = response2.headers.get("location");
if (location) {
const headers = new Headers(response2.headers);
headers.set("x-sveltekit-location", location);
response2 = new Response(void 0, {
status: 204,
headers
});
}
}
}
} else {
response2 = route.type === "endpoint" ? await render_endpoint(event2, await route.load()) : await render_page(event2, route, options, state, resolve_opts);
}
if (response2) {
if (response2.status === 200 && response2.headers.has("etag")) {
let if_none_match_value = request.headers.get("if-none-match");
if (if_none_match_value == null ? void 0 : if_none_match_value.startsWith('W/"')) {
if_none_match_value = if_none_match_value.substring(2);
}
const etag = response2.headers.get("etag");
if (if_none_match_value === etag) {
const headers = new Headers({ etag });
for (const key2 of [
"cache-control",
"content-location",
"date",
"expires",
"vary"
]) {
const value = response2.headers.get(key2);
if (value)
headers.set(key2, value);
}
return new Response(void 0, {
status: 304,
headers
});
}
}
return response2;
}
}
if (!state.initiator) {
const $session = await options.hooks.getSession(event2);
return await respond_with_error({
event: event2,
options,
state,
$session,
status: 404,
error: new Error(`Not found: ${event2.url.pathname}`),
resolve_opts
});
}
if (state.prerendering) {
return new Response("not found", { status: 404 });
}
return await fetch(request);
},
get request() {
throw new Error("request in handle has been replaced with event" + details);
}
});
if (response && !(response instanceof Response)) {
throw new Error("handle must return a Response object" + details);
}
return response;
} catch (e) {
const error2 = coalesce_to_error(e);
options.handle_error(error2, event);
try {
const $session = await options.hooks.getSession(event);
return await respond_with_error({
event,
options,
state,
$session,
status: 500,
error: error2,
resolve_opts
});
} catch (e2) {
const error3 = coalesce_to_error(e2);
return new Response(options.dev ? error3.stack : error3.message, {
status: 500
});
}
}
}
function set_prerendering(value) {
}
const template = ({ head, body, assets: assets2, nonce }) => '<!DOCTYPE html>\n<html lang="en">\n <head>\n <meta charset="utf-8" />\n <link rel="icon" href="' + assets2 + '/favicon.png" />\n <meta name="viewport" content="width=device-width, initial-scale=1" />\n <script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.1/iframeResizer.contentWindow.min.js"><\/script>\n ' + head + '\n </head>\n <body class="light:bg-white bg-[rgb(11,15,25)] light:text-black text-white">\n ' + body + "\n </body> \n</html>\n";
let read = null;
set_paths({ "base": "/static", "assets": "" });
let default_protocol = "https";
function override(settings) {
default_protocol = settings.protocol || default_protocol;
set_paths(settings.paths);
set_prerendering(settings.prerendering);
read = settings.read;
}
class Server {
constructor(manifest) {
this.options = {
csp: { "mode": "auto", "directives": { "upgrade-insecure-requests": false, "block-all-mixed-content": false } },
dev: false,
floc: false,
get_stack: (error2) => String(error2),
handle_error: (error2, event) => {
this.options.hooks.handleError({
error: error2,
event,
get request() {
throw new Error("request in handleError has been replaced with event. See https://github.com/sveltejs/kit/pull/3384 for details");
}
});
error2.stack = this.options.get_stack(error2);
},
hooks: null,
hydrate: true,
manifest,
method_override: { "parameter": "_method", "allowed": [] },
paths: { base, assets },
prefix: assets + "/_app/immutable/",
prerender: {
default: true,
enabled: true
},
read,
root: Root,
service_worker: null,
router: true,
template,
template_contains_nonce: false,
trailing_slash: "never"
};
}
async respond(request, options = {}) {
if (!(request instanceof Request)) {
throw new Error("The first argument to server.respond must be a Request object. See https://github.com/sveltejs/kit/pull/3384 for details");
}
if (!this.options.hooks) {
const module = await import("./chunks/hooks-1c45ba0b.js");
this.options.hooks = {
getSession: module.getSession || (() => ({})),
handle: module.handle || (({ event, resolve: resolve2 }) => resolve2(event)),
handleError: module.handleError || (({ error: error2 }) => console.error(error2.stack)),
externalFetch: module.externalFetch || fetch
};
}
return respond(request, this.options, options);
}
}
export { Server, override };