feat: Reinitialize frontend with SvelteKit and TypeScript

- Delete old Vite+Svelte frontend
- Initialize new SvelteKit project with TypeScript
- Configure Tailwind CSS v4 + DaisyUI
- Implement JWT authentication with auto-refresh
- Create login page with form validation (Zod)
- Add protected route guards
- Update Docker configuration for single-stage build
- Add E2E tests with Playwright (6/11 passing)
- Fix Svelte 5 reactivity with $state() runes

Known issues:
- 5 E2E tests failing (timing/async issues)
- Token refresh implementation needs debugging
- Validation error display timing
This commit is contained in:
2026-02-17 16:19:59 -05:00
parent 54df6018f5
commit de2d83092e
28274 changed files with 3816354 additions and 90 deletions

View File

@@ -0,0 +1,9 @@
const index = 0;
let component_cache;
const component = async () => component_cache ??= (await import('./_layout.svelte-By87pzbo.js')).default;
const imports = ["_app/immutable/nodes/0.qcGNqz4K.js","_app/immutable/chunks/pJd4F_Tq.js","_app/immutable/chunks/CCV2x70u.js","_app/immutable/chunks/BgHfHpED.js","_app/immutable/chunks/CrZRXG6z.js","_app/immutable/chunks/Bx__7-vK.js","_app/immutable/chunks/CC5oASRR.js","_app/immutable/chunks/BG30BmlR.js","_app/immutable/chunks/JkAhLmb1.js","_app/immutable/chunks/DBDqKY8A.js"];
const stylesheets = [];
const fonts = [];
export { component, fonts, imports, index, stylesheets };
//# sourceMappingURL=0-DFF_aKvy.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"0-DFF_aKvy.js","sources":["../../../.svelte-kit/adapter-node/nodes/0.js"],"sourcesContent":["\n\nexport const index = 0;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_layout.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/0.qcGNqz4K.js\",\"_app/immutable/chunks/pJd4F_Tq.js\",\"_app/immutable/chunks/CCV2x70u.js\",\"_app/immutable/chunks/BgHfHpED.js\",\"_app/immutable/chunks/CrZRXG6z.js\",\"_app/immutable/chunks/Bx__7-vK.js\",\"_app/immutable/chunks/CC5oASRR.js\",\"_app/immutable/chunks/BG30BmlR.js\",\"_app/immutable/chunks/JkAhLmb1.js\",\"_app/immutable/chunks/DBDqKY8A.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,8BAAoC,CAAC,EAAE;AAClG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACpX,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;;;"}

View File

@@ -0,0 +1,9 @@
const index = 1;
let component_cache;
const component = async () => component_cache ??= (await import('./error.svelte-C7N-8uX_.js')).default;
const imports = ["_app/immutable/nodes/1.Do3BgeC5.js","_app/immutable/chunks/pJd4F_Tq.js","_app/immutable/chunks/CCV2x70u.js","_app/immutable/chunks/BgHfHpED.js","_app/immutable/chunks/Bx__7-vK.js","_app/immutable/chunks/DBDqKY8A.js"];
const stylesheets = [];
const fonts = [];
export { component, fonts, imports, index, stylesheets };
//# sourceMappingURL=1-B-_nGNPu.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"1-B-_nGNPu.js","sources":["../../../.svelte-kit/adapter-node/nodes/1.js"],"sourcesContent":["\n\nexport const index = 1;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/1.Do3BgeC5.js\",\"_app/immutable/chunks/pJd4F_Tq.js\",\"_app/immutable/chunks/CCV2x70u.js\",\"_app/immutable/chunks/BgHfHpED.js\",\"_app/immutable/chunks/Bx__7-vK.js\",\"_app/immutable/chunks/DBDqKY8A.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAsC,CAAC,EAAE;AACpG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACpO,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;;;"}

View File

@@ -0,0 +1,23 @@
import './exports-yY1xCm4l.js';
import './state.svelte-CNGpKaVU.js';
import './auth-e49oatML.js';
const load = async () => {
return { authenticated: true };
};
var _layout_ts = /*#__PURE__*/Object.freeze({
__proto__: null,
load: load
});
const index = 2;
let component_cache;
const component = async () => component_cache ??= (await import('./layout.svelte-UxsTmhKc.js')).default;
const universal_id = "src/routes/dashboard/+layout.ts";
const imports = ["_app/immutable/nodes/2.xkr5w2RY.js","_app/immutable/chunks/DBDqKY8A.js","_app/immutable/chunks/CCV2x70u.js","_app/immutable/chunks/CrZRXG6z.js","_app/immutable/chunks/pJd4F_Tq.js","_app/immutable/chunks/BG30BmlR.js"];
const stylesheets = [];
const fonts = [];
export { component, fonts, imports, index, stylesheets, _layout_ts as universal, universal_id };
//# sourceMappingURL=2-f45-aRm9.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"2-f45-aRm9.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/dashboard/_layout.ts.js","../../../.svelte-kit/adapter-node/nodes/2.js"],"sourcesContent":["import \"clsx\";\nimport \"@sveltejs/kit/internal\";\nimport \"../../../chunks/exports.js\";\nimport \"../../../chunks/utils.js\";\nimport \"@sveltejs/kit/internal/server\";\nimport \"../../../chunks/root.js\";\nimport \"../../../chunks/state.svelte.js\";\nimport \"../../../chunks/auth.js\";\nconst load = async () => {\n return { authenticated: true };\n};\nexport {\n load\n};\n","import * as universal from '../entries/pages/dashboard/_layout.ts.js';\n\nexport const index = 2;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/fallbacks/layout.svelte.js')).default;\nexport { universal };\nexport const universal_id = \"src/routes/dashboard/+layout.ts\";\nexport const imports = [\"_app/immutable/nodes/2.xkr5w2RY.js\",\"_app/immutable/chunks/DBDqKY8A.js\",\"_app/immutable/chunks/CCV2x70u.js\",\"_app/immutable/chunks/CrZRXG6z.js\",\"_app/immutable/chunks/pJd4F_Tq.js\",\"_app/immutable/chunks/BG30BmlR.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":";;;;AAQA,MAAM,IAAI,GAAG,YAAY;AACzB,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE;AAChC,CAAC;;;;;;;ACRW,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,6BAAuC,CAAC,EAAE;AAErG,MAAC,YAAY,GAAG;AAChB,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACpO,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;;;"}

View File

@@ -0,0 +1,9 @@
const index = 3;
let component_cache;
const component = async () => component_cache ??= (await import('./_page.svelte-BCnK76Yb.js')).default;
const imports = ["_app/immutable/nodes/3.Ga_cDZpk.js","_app/immutable/chunks/pJd4F_Tq.js","_app/immutable/chunks/CCV2x70u.js","_app/immutable/chunks/BgHfHpED.js","_app/immutable/chunks/JkAhLmb1.js","_app/immutable/chunks/DBDqKY8A.js","_app/immutable/chunks/CrZRXG6z.js"];
const stylesheets = [];
const fonts = [];
export { component, fonts, imports, index, stylesheets };
//# sourceMappingURL=3-CVnMg7JK.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"3-CVnMg7JK.js","sources":["../../../.svelte-kit/adapter-node/nodes/3.js"],"sourcesContent":["\n\nexport const index = 3;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/3.Ga_cDZpk.js\",\"_app/immutable/chunks/pJd4F_Tq.js\",\"_app/immutable/chunks/CCV2x70u.js\",\"_app/immutable/chunks/BgHfHpED.js\",\"_app/immutable/chunks/JkAhLmb1.js\",\"_app/immutable/chunks/DBDqKY8A.js\",\"_app/immutable/chunks/CrZRXG6z.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAkC,CAAC,EAAE;AAChG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACxQ,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;;;"}

View File

@@ -0,0 +1,9 @@
const index = 4;
let component_cache;
const component = async () => component_cache ??= (await import('./_page.svelte-Cm6QudwP.js')).default;
const imports = ["_app/immutable/nodes/4.Dd_eVbye.js","_app/immutable/chunks/pJd4F_Tq.js","_app/immutable/chunks/CCV2x70u.js","_app/immutable/chunks/BgHfHpED.js","_app/immutable/chunks/Bx__7-vK.js","_app/immutable/chunks/CC5oASRR.js","_app/immutable/chunks/BG30BmlR.js","_app/immutable/chunks/DhYTxIvM.js","_app/immutable/chunks/JkAhLmb1.js","_app/immutable/chunks/CrZRXG6z.js","_app/immutable/chunks/DBDqKY8A.js"];
const stylesheets = [];
const fonts = [];
export { component, fonts, imports, index, stylesheets };
//# sourceMappingURL=4-BvUlkEVH.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"4-BvUlkEVH.js","sources":["../../../.svelte-kit/adapter-node/nodes/4.js"],"sourcesContent":["\n\nexport const index = 4;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/dashboard/_page.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/4.Dd_eVbye.js\",\"_app/immutable/chunks/pJd4F_Tq.js\",\"_app/immutable/chunks/CCV2x70u.js\",\"_app/immutable/chunks/BgHfHpED.js\",\"_app/immutable/chunks/Bx__7-vK.js\",\"_app/immutable/chunks/CC5oASRR.js\",\"_app/immutable/chunks/BG30BmlR.js\",\"_app/immutable/chunks/DhYTxIvM.js\",\"_app/immutable/chunks/JkAhLmb1.js\",\"_app/immutable/chunks/CrZRXG6z.js\",\"_app/immutable/chunks/DBDqKY8A.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAA4C,CAAC,EAAE;AAC1G,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AACxZ,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;;;"}

View File

@@ -0,0 +1,13 @@
const index = 5;
let component_cache;
const component = async () => component_cache ??= (await import('./_page.svelte-6xG6DlTH.js')).default;
const universal = {
"ssr": false
};
const universal_id = "src/routes/login/+page.ts";
const imports = ["_app/immutable/nodes/5.CW4-UM09.js","_app/immutable/chunks/pJd4F_Tq.js","_app/immutable/chunks/CCV2x70u.js","_app/immutable/chunks/BgHfHpED.js","_app/immutable/chunks/DhYTxIvM.js","_app/immutable/chunks/JkAhLmb1.js","_app/immutable/chunks/DBDqKY8A.js","_app/immutable/chunks/Bx__7-vK.js","_app/immutable/chunks/CC5oASRR.js","_app/immutable/chunks/BG30BmlR.js","_app/immutable/chunks/C62USj72.js","_app/immutable/chunks/CrZRXG6z.js"];
const stylesheets = [];
const fonts = [];
export { component, fonts, imports, index, stylesheets, universal, universal_id };
//# sourceMappingURL=5-BJGijHMO.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"5-BJGijHMO.js","sources":["../../../.svelte-kit/adapter-node/nodes/5.js"],"sourcesContent":["\n\nexport const index = 5;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/pages/login/_page.svelte.js')).default;\nexport const universal = {\n \"ssr\": false\n};\nexport const universal_id = \"src/routes/login/+page.ts\";\nexport const imports = [\"_app/immutable/nodes/5.CW4-UM09.js\",\"_app/immutable/chunks/pJd4F_Tq.js\",\"_app/immutable/chunks/CCV2x70u.js\",\"_app/immutable/chunks/BgHfHpED.js\",\"_app/immutable/chunks/DhYTxIvM.js\",\"_app/immutable/chunks/JkAhLmb1.js\",\"_app/immutable/chunks/DBDqKY8A.js\",\"_app/immutable/chunks/Bx__7-vK.js\",\"_app/immutable/chunks/CC5oASRR.js\",\"_app/immutable/chunks/BG30BmlR.js\",\"_app/immutable/chunks/C62USj72.js\",\"_app/immutable/chunks/CrZRXG6z.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAwC,CAAC,EAAE;AACtG,MAAC,SAAS,GAAG;AACzB,EAAE,KAAK,EAAE;AACT;AACY,MAAC,YAAY,GAAG;AAChB,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAC5b,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;;;"}

View File

@@ -0,0 +1,38 @@
import { B as slot, C as store_get, E as escape_html, F as unsubscribe_stores } from './exports-yY1xCm4l.js';
import { u as user } from './auth-e49oatML.js';
import './state.svelte-CNGpKaVU.js';
function Navigation($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
var $$store_subs;
$$renderer2.push(`<nav class="navbar bg-base-100 shadow-lg"><div class="flex-1"><a href="/" class="btn btn-ghost normal-case text-xl">Headroom</a></div> <div class="flex-none gap-2">`);
if (store_get($$store_subs ??= {}, "$user", user)) {
$$renderer2.push("<!--[-->");
$$renderer2.push(`<div class="dropdown dropdown-end"><label tabindex="0" class="btn btn-ghost btn-circle avatar"><div class="w-10 rounded-full bg-primary"><span class="text-xl">${escape_html(store_get($$store_subs ??= {}, "$user", user).email?.charAt(0).toUpperCase())}</span></div></label> <ul tabindex="0" class="mt-3 p-2 shadow menu menu-compact dropdown-content bg-base-100 rounded-box w-52"><li><a href="/dashboard" class="justify-between">Dashboard</a></li> `);
if (store_get($$store_subs ??= {}, "$user", user).role === "superuser" || store_get($$store_subs ??= {}, "$user", user).role === "manager") {
$$renderer2.push("<!--[-->");
$$renderer2.push(`<li><a href="/team-members">Team Members</a></li> <li><a href="/projects">Projects</a></li>`);
} else {
$$renderer2.push("<!--[!-->");
}
$$renderer2.push(`<!--]--> <li><a href="/reports">Reports</a></li> <div class="divider"></div> <li><button class="text-error">Logout</button></li></ul></div>`);
} else {
$$renderer2.push("<!--[!-->");
$$renderer2.push(`<a href="/login" class="btn btn-primary btn-sm">Login</a>`);
}
$$renderer2.push(`<!--]--></div></nav>`);
if ($$store_subs) unsubscribe_stores($$store_subs);
});
}
function _layout($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
$$renderer2.push(`<div class="min-h-screen bg-base-200">`);
Navigation($$renderer2);
$$renderer2.push(`<!----> <main class="container mx-auto px-4 py-6"><!--[-->`);
slot($$renderer2, $$props, "default", {});
$$renderer2.push(`<!--]--></main></div>`);
});
}
export { _layout as default };
//# sourceMappingURL=_layout.svelte-By87pzbo.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"_layout.svelte-By87pzbo.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/_layout.svelte.js"],"sourcesContent":["import { s as store_get, e as escape_html, u as unsubscribe_stores, a as slot } from \"../../chunks/root.js\";\nimport { u as user } from \"../../chunks/auth.js\";\nimport \"@sveltejs/kit/internal\";\nimport \"../../chunks/exports.js\";\nimport \"../../chunks/utils.js\";\nimport \"clsx\";\nimport \"@sveltejs/kit/internal/server\";\nimport \"../../chunks/state.svelte.js\";\nfunction Navigation($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n var $$store_subs;\n $$renderer2.push(`<nav class=\"navbar bg-base-100 shadow-lg\"><div class=\"flex-1\"><a href=\"/\" class=\"btn btn-ghost normal-case text-xl\">Headroom</a></div> <div class=\"flex-none gap-2\">`);\n if (store_get($$store_subs ??= {}, \"$user\", user)) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<div class=\"dropdown dropdown-end\"><label tabindex=\"0\" class=\"btn btn-ghost btn-circle avatar\"><div class=\"w-10 rounded-full bg-primary\"><span class=\"text-xl\">${escape_html(store_get($$store_subs ??= {}, \"$user\", user).email?.charAt(0).toUpperCase())}</span></div></label> <ul tabindex=\"0\" class=\"mt-3 p-2 shadow menu menu-compact dropdown-content bg-base-100 rounded-box w-52\"><li><a href=\"/dashboard\" class=\"justify-between\">Dashboard</a></li> `);\n if (store_get($$store_subs ??= {}, \"$user\", user).role === \"superuser\" || store_get($$store_subs ??= {}, \"$user\", user).role === \"manager\") {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<li><a href=\"/team-members\">Team Members</a></li> <li><a href=\"/projects\">Projects</a></li>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> <li><a href=\"/reports\">Reports</a></li> <div class=\"divider\"></div> <li><button class=\"text-error\">Logout</button></li></ul></div>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n $$renderer2.push(`<a href=\"/login\" class=\"btn btn-primary btn-sm\">Login</a>`);\n }\n $$renderer2.push(`<!--]--></div></nav>`);\n if ($$store_subs) unsubscribe_stores($$store_subs);\n });\n}\nfunction _layout($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n $$renderer2.push(`<div class=\"min-h-screen bg-base-200\">`);\n Navigation($$renderer2);\n $$renderer2.push(`<!----> <main class=\"container mx-auto px-4 py-6\"><!--[-->`);\n slot($$renderer2, $$props, \"default\", {});\n $$renderer2.push(`<!--]--></main></div>`);\n });\n}\nexport {\n _layout as default\n};\n"],"names":[],"mappings":";;;;AAQA,SAAS,UAAU,CAAC,UAAU,EAAE,OAAO,EAAE;AACzC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK;AACxC,IAAI,IAAI,YAAY;AACpB,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,oKAAoK,CAAC,CAAC;AAC5L,IAAI,IAAI,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;AACvD,MAAM,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAClC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,+JAA+J,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,mMAAmM,CAAC,CAAC;AACxd,MAAM,IAAI,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE;AAClJ,QAAQ,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AACpC,QAAQ,WAAW,CAAC,IAAI,CAAC,CAAC,2FAA2F,CAAC,CAAC;AACvH,MAAM,CAAC,MAAM;AACb,QAAQ,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACrC,MAAM;AACN,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,2IAA2I,CAAC,CAAC;AACrK,IAAI,CAAC,MAAM;AACX,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,yDAAyD,CAAC,CAAC;AACnF,IAAI;AACJ,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC;AAC5C,IAAI,IAAI,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;AACtD,EAAE,CAAC,CAAC;AACJ;AACA,SAAS,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE;AACtC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK;AACxC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,sCAAsC,CAAC,CAAC;AAC9D,IAAI,UAAU,CAAC,WAAW,CAAC;AAC3B,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,0DAA0D,CAAC,CAAC;AAClF,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC;AAC7C,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,qBAAqB,CAAC,CAAC;AAC7C,EAAE,CAAC,CAAC;AACJ;;;;"}

View File

@@ -0,0 +1,149 @@
import { H as head, C as store_get, F as unsubscribe_stores, I as fallback, E as escape_html, J as attr_class, K as attr, L as bind_props } from './exports-yY1xCm4l.js';
import './state.svelte-CNGpKaVU.js';
import { z } from 'zod';
import './utils-FiC4zhrQ.js';
import 'zod/v3';
import { a as auth } from './auth-e49oatML.js';
// deno-fmt-ignore-file
// ------------------------------------------------------------------
// ByteMarker
// ------------------------------------------------------------------
var ByteMarker;
(function (ByteMarker) {
ByteMarker[ByteMarker["Array"] = 0] = "Array";
ByteMarker[ByteMarker["BigInt"] = 1] = "BigInt";
ByteMarker[ByteMarker["Boolean"] = 2] = "Boolean";
ByteMarker[ByteMarker["Date"] = 3] = "Date";
ByteMarker[ByteMarker["Constructor"] = 4] = "Constructor";
ByteMarker[ByteMarker["Function"] = 5] = "Function";
ByteMarker[ByteMarker["Null"] = 6] = "Null";
ByteMarker[ByteMarker["Number"] = 7] = "Number";
ByteMarker[ByteMarker["Object"] = 8] = "Object";
ByteMarker[ByteMarker["RegExp"] = 9] = "RegExp";
ByteMarker[ByteMarker["String"] = 10] = "String";
ByteMarker[ByteMarker["Symbol"] = 11] = "Symbol";
ByteMarker[ByteMarker["TypeArray"] = 12] = "TypeArray";
ByteMarker[ByteMarker["Undefined"] = 13] = "Undefined";
})(ByteMarker || (ByteMarker = {}));
// ------------------------------------------------------------------
// State
// ------------------------------------------------------------------
BigInt('14695981039346656037');
[BigInt('1099511628211'), BigInt('18446744073709551616' /* 2 ^ 64 */)];
Array.from({ length: 256 }).map((_, i) => BigInt(i));
const F64 = new Float64Array(1);
new DataView(F64.buffer);
new Uint8Array(F64.buffer);
// ------------------------------------------------------------------
// String
// ------------------------------------------------------------------
new TextEncoder();
// deno-coverage-ignore-start - parsebox tested
// deno-fmt-ignore-file
// ------------------------------------------------------------------
// Range
// ------------------------------------------------------------------
function Range(start, end) {
return Array.from({ length: end - start + 1 }, (_, i) => String.fromCharCode(start + i));
}
[
...Range(97, 122), // Lowercase
...Range(65, 90) // Uppercase
];
const Zero = '0';
const NonZero = Range(49, 57); // 1 - 9
[Zero, ...NonZero];
// deno-coverage-ignore-stop
new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
var FetchStatus;
(function(FetchStatus2) {
FetchStatus2[FetchStatus2["Idle"] = 0] = "Idle";
FetchStatus2[FetchStatus2["Submitting"] = 1] = "Submitting";
FetchStatus2[FetchStatus2["Delayed"] = 2] = "Delayed";
FetchStatus2[FetchStatus2["Timeout"] = 3] = "Timeout";
})(FetchStatus || (FetchStatus = {}));
let LEGACY_MODE = false;
try {
if (SUPERFORMS_LEGACY)
LEGACY_MODE = true;
} catch {
}
let STORYBOOK_MODE = false;
try {
if (globalThis.STORIES)
STORYBOOK_MODE = true;
} catch {
}
let legacyMode = false;
try {
if (SUPERFORMS_LEGACY)
legacyMode = true;
} catch {
}
function LoginForm($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
let isLoading = fallback($$props["isLoading"], false);
let errorMessage = fallback($$props["errorMessage"], null);
z.object({
email: z.string().min(1, "Email is required").email("Invalid email format"),
password: z.string().min(1, "Password is required")
});
let formData = { email: "", password: "" };
let errors = {};
$$renderer2.push(`<form class="space-y-4">`);
if (errorMessage) {
$$renderer2.push("<!--[-->");
$$renderer2.push(`<div class="alert alert-error" role="alert"><svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 shrink-0 stroke-current" fill="none" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg> <span>${escape_html(errorMessage)}</span></div>`);
} else {
$$renderer2.push("<!--[!-->");
}
$$renderer2.push(`<!--]--> <div class="form-control"><label class="label" for="email"><span class="label-text">Email</span></label> <input type="email" id="email"${attr_class("input input-bordered w-full", void 0, { "input-error": errors.email })} placeholder="admin@example.com"${attr("value", formData.email)}${attr("disabled", isLoading, true)}${attr("aria-invalid", errors.email ? "true" : "false")}${attr("aria-describedby", errors.email ? "email-error" : void 0)}/> `);
if (errors.email) {
$$renderer2.push("<!--[-->");
$$renderer2.push(`<span id="email-error" class="label-text-alt text-error">${escape_html(errors.email)}</span>`);
} else {
$$renderer2.push("<!--[!-->");
}
$$renderer2.push(`<!--]--></div> <div class="form-control"><label class="label" for="password"><span class="label-text">Password</span></label> <input type="password" id="password"${attr_class("input input-bordered w-full", void 0, { "input-error": errors.password })} placeholder="••••••••"${attr("value", formData.password)}${attr("disabled", isLoading, true)}${attr("aria-invalid", errors.password ? "true" : "false")}${attr("aria-describedby", errors.password ? "password-error" : void 0)}/> `);
if (errors.password) {
$$renderer2.push("<!--[-->");
$$renderer2.push(`<span id="password-error" class="label-text-alt text-error">${escape_html(errors.password)}</span>`);
} else {
$$renderer2.push("<!--[!-->");
}
$$renderer2.push(`<!--]--></div> <button type="submit" class="btn btn-primary w-full"${attr("disabled", isLoading, true)}>`);
if (isLoading) {
$$renderer2.push("<!--[-->");
$$renderer2.push(`<span class="loading loading-spinner loading-sm"></span> Logging in...`);
} else {
$$renderer2.push("<!--[!-->");
$$renderer2.push(`Login`);
}
$$renderer2.push(`<!--]--></button></form>`);
bind_props($$props, { isLoading, errorMessage });
});
}
function _page($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
var $$store_subs;
head("1x05zx6", $$renderer2, ($$renderer3) => {
$$renderer3.title(($$renderer4) => {
$$renderer4.push(`<title>Login - Headroom</title>`);
});
});
$$renderer2.push(`<div class="min-h-screen flex items-center justify-center bg-base-200"><div class="card w-full max-w-md bg-base-100 shadow-xl"><div class="card-body"><h1 class="card-title text-2xl text-center justify-center mb-6">Welcome to Headroom</h1> <p class="text-center text-base-content/70 mb-6">Sign in to access your dashboard</p> `);
LoginForm($$renderer2, {
isLoading: store_get($$store_subs ??= {}, "$auth", auth).isLoading,
errorMessage: store_get($$store_subs ??= {}, "$auth", auth).error
});
$$renderer2.push(`<!----> <div class="divider"></div> <div class="text-center text-sm text-base-content/60"><p>Demo credentials:</p> <p class="font-mono mt-1">admin@example.com / password</p></div></div></div></div>`);
if ($$store_subs) unsubscribe_stores($$store_subs);
});
}
export { _page as default };
//# sourceMappingURL=_page.svelte-6xG6DlTH.js.map

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,12 @@
import './exports-yY1xCm4l.js';
import './state.svelte-CNGpKaVU.js';
import './auth-e49oatML.js';
function _page($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
$$renderer2.push(`<div class="flex items-center justify-center min-h-screen"><div class="loading loading-spinner loading-lg text-primary"></div></div>`);
});
}
export { _page as default };
//# sourceMappingURL=_page.svelte-BCnK76Yb.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"_page.svelte-BCnK76Yb.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/_page.svelte.js"],"sourcesContent":["import \"clsx\";\nimport \"@sveltejs/kit/internal\";\nimport \"../../chunks/exports.js\";\nimport \"../../chunks/utils.js\";\nimport \"@sveltejs/kit/internal/server\";\nimport \"../../chunks/root.js\";\nimport \"../../chunks/state.svelte.js\";\nimport \"../../chunks/auth.js\";\nfunction _page($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n $$renderer2.push(`<div class=\"flex items-center justify-center min-h-screen\"><div class=\"loading loading-spinner loading-lg text-primary\"></div></div>`);\n });\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":";;;;AAQA,SAAS,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE;AACpC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK;AACxC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,oIAAoI,CAAC,CAAC;AAC5J,EAAE,CAAC,CAAC;AACJ;;;;"}

View File

@@ -0,0 +1,27 @@
import { H as head, C as store_get, E as escape_html, F as unsubscribe_stores } from './exports-yY1xCm4l.js';
import { u as user } from './auth-e49oatML.js';
import './state.svelte-CNGpKaVU.js';
function _page($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
var $$store_subs;
head("x1i5gj", $$renderer2, ($$renderer3) => {
$$renderer3.title(($$renderer4) => {
$$renderer4.push(`<title>Dashboard - Headroom</title>`);
});
});
$$renderer2.push(`<div class="max-w-4xl mx-auto"><div class="card bg-base-100 shadow-xl"><div class="card-body"><h1 class="card-title text-3xl mb-4">Welcome to Headroom! 👋</h1> `);
if (store_get($$store_subs ??= {}, "$user", user)) {
$$renderer2.push("<!--[-->");
$$renderer2.push(`<div class="alert alert-info mb-4"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" class="stroke-current shrink-0 w-6 h-6"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg> <span>Logged in as ${escape_html(store_get($$store_subs ??= {}, "$user", user).email)} (${escape_html(store_get($$store_subs ??= {}, "$user", user).role)})</span></div>`);
} else {
$$renderer2.push("<!--[!-->");
}
$$renderer2.push(`<!--]--> <p class="text-lg mb-4">You have successfully authenticated. This is a protected dashboard page
that requires a valid JWT token to access.</p> <div class="divider"></div> <h2 class="text-xl font-bold mb-2">Authentication Features Implemented:</h2> <ul class="list-disc list-inside space-y-2 mb-6"><li>✅ JWT Token Authentication</li> <li>✅ Token Auto-refresh on 401</li> <li>✅ Protected Route Guards</li> <li>✅ Form Validation with Zod</li> <li>✅ Role-based Access Control</li> <li>✅ Redis Token Storage</li></ul> <div class="card-actions"><button class="btn btn-error">Logout</button></div></div></div></div>`);
if ($$store_subs) unsubscribe_stores($$store_subs);
});
}
export { _page as default };
//# sourceMappingURL=_page.svelte-Cm6QudwP.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"_page.svelte-Cm6QudwP.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/dashboard/_page.svelte.js"],"sourcesContent":["import { h as head, s as store_get, e as escape_html, u as unsubscribe_stores } from \"../../../chunks/root.js\";\nimport { u as user } from \"../../../chunks/auth.js\";\nimport \"@sveltejs/kit/internal\";\nimport \"../../../chunks/exports.js\";\nimport \"../../../chunks/utils.js\";\nimport \"clsx\";\nimport \"@sveltejs/kit/internal/server\";\nimport \"../../../chunks/state.svelte.js\";\nfunction _page($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n var $$store_subs;\n head(\"x1i5gj\", $$renderer2, ($$renderer3) => {\n $$renderer3.title(($$renderer4) => {\n $$renderer4.push(`<title>Dashboard - Headroom</title>`);\n });\n });\n $$renderer2.push(`<div class=\"max-w-4xl mx-auto\"><div class=\"card bg-base-100 shadow-xl\"><div class=\"card-body\"><h1 class=\"card-title text-3xl mb-4\">Welcome to Headroom! 👋</h1> `);\n if (store_get($$store_subs ??= {}, \"$user\", user)) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<div class=\"alert alert-info mb-4\"><svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" class=\"stroke-current shrink-0 w-6 h-6\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"></path></svg> <span>Logged in as ${escape_html(store_get($$store_subs ??= {}, \"$user\", user).email)} (${escape_html(store_get($$store_subs ??= {}, \"$user\", user).role)})</span></div>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> <p class=\"text-lg mb-4\">You have successfully authenticated. This is a protected dashboard page \n\t\t\t\tthat requires a valid JWT token to access.</p> <div class=\"divider\"></div> <h2 class=\"text-xl font-bold mb-2\">Authentication Features Implemented:</h2> <ul class=\"list-disc list-inside space-y-2 mb-6\"><li>✅ JWT Token Authentication</li> <li>✅ Token Auto-refresh on 401</li> <li>✅ Protected Route Guards</li> <li>✅ Form Validation with Zod</li> <li>✅ Role-based Access Control</li> <li>✅ Redis Token Storage</li></ul> <div class=\"card-actions\"><button class=\"btn btn-error\">Logout</button></div></div></div></div>`);\n if ($$store_subs) unsubscribe_stores($$store_subs);\n });\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":";;;;AAQA,SAAS,KAAK,CAAC,UAAU,EAAE,OAAO,EAAE;AACpC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK;AACxC,IAAI,IAAI,YAAY;AACpB,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,WAAW,KAAK;AACjD,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK;AACzC,QAAQ,WAAW,CAAC,IAAI,CAAC,CAAC,mCAAmC,CAAC,CAAC;AAC/D,MAAM,CAAC,CAAC;AACR,IAAI,CAAC,CAAC;AACN,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,gKAAgK,CAAC,CAAC;AACxL,IAAI,IAAI,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;AACvD,MAAM,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AAClC,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC,wTAAwT,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;AACve,IAAI,CAAC,MAAM;AACX,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,IAAI;AACJ,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;AACtB,ogBAAogB,CAAC,CAAC;AACtgB,IAAI,IAAI,YAAY,EAAE,kBAAkB,CAAC,YAAY,CAAC;AACtD,EAAE,CAAC,CAAC;AACJ;;;;"}

View File

@@ -0,0 +1,37 @@
import { M as derived, z as writable } from './exports-yY1xCm4l.js';
function createUserStore() {
const { subscribe, set, update } = writable(null);
return {
subscribe,
set,
update,
clear: () => set(null)
};
}
const user = createUserStore();
function createAuthStore() {
const { subscribe, set, update } = writable({
isAuthenticated: false,
isLoading: false,
error: null
});
return {
subscribe,
set,
update,
setLoading: (loading) => update((state) => ({ ...state, isLoading: loading })),
setError: (error) => update((state) => ({ ...state, error })),
clearError: () => update((state) => ({ ...state, error: null })),
setAuthenticated: (authenticated) => update((state) => ({ ...state, isAuthenticated: authenticated }))
};
}
const auth = createAuthStore();
derived(
[user, auth],
([$user, $auth]) => $user !== null && $auth.isAuthenticated
);
derived(user, ($user) => $user?.role || null);
export { auth as a, user as u };
//# sourceMappingURL=auth-e49oatML.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"auth-e49oatML.js","sources":["../../../.svelte-kit/adapter-node/chunks/auth.js"],"sourcesContent":["import { i as derived, w as writable } from \"./exports.js\";\nfunction createUserStore() {\n const { subscribe, set, update } = writable(null);\n return {\n subscribe,\n set,\n update,\n clear: () => set(null)\n };\n}\nconst user = createUserStore();\nfunction createAuthStore() {\n const { subscribe, set, update } = writable({\n isAuthenticated: false,\n isLoading: false,\n error: null\n });\n return {\n subscribe,\n set,\n update,\n setLoading: (loading) => update((state) => ({ ...state, isLoading: loading })),\n setError: (error) => update((state) => ({ ...state, error })),\n clearError: () => update((state) => ({ ...state, error: null })),\n setAuthenticated: (authenticated) => update((state) => ({ ...state, isAuthenticated: authenticated }))\n };\n}\nconst auth = createAuthStore();\nderived(\n [user, auth],\n ([$user, $auth]) => $user !== null && $auth.isAuthenticated\n);\nderived(user, ($user) => $user?.role || null);\nexport {\n auth as a,\n user as u\n};\n"],"names":[],"mappings":";;AACA,SAAS,eAAe,GAAG;AAC3B,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC;AACnD,EAAE,OAAO;AACT,IAAI,SAAS;AACb,IAAI,GAAG;AACP,IAAI,MAAM;AACV,IAAI,KAAK,EAAE,MAAM,GAAG,CAAC,IAAI;AACzB,GAAG;AACH;AACK,MAAC,IAAI,GAAG,eAAe;AAC5B,SAAS,eAAe,GAAG;AAC3B,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;AAC9C,IAAI,eAAe,EAAE,KAAK;AAC1B,IAAI,SAAS,EAAE,KAAK;AACpB,IAAI,KAAK,EAAE;AACX,GAAG,CAAC;AACJ,EAAE,OAAO;AACT,IAAI,SAAS;AACb,IAAI,GAAG;AACP,IAAI,MAAM;AACV,IAAI,UAAU,EAAE,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;AAClF,IAAI,QAAQ,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACjE,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACpE,IAAI,gBAAgB,EAAE,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,EAAE,GAAG,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC;AACzG,GAAG;AACH;AACK,MAAC,IAAI,GAAG,eAAe;AAC5B,OAAO;AACP,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACd,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC;AAC9C,CAAC;AACD,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC;;;;"}

View File

@@ -0,0 +1,39 @@
import { E as escape_html, G as getContext, z as writable } from './exports-yY1xCm4l.js';
import './state.svelte-CNGpKaVU.js';
function create_updated_store() {
const { set, subscribe } = writable(false);
{
return {
subscribe,
// eslint-disable-next-line @typescript-eslint/require-await
check: async () => false
};
}
}
const stores = {
updated: /* @__PURE__ */ create_updated_store()
};
({
check: stores.updated.check
});
function context() {
return getContext("__request__");
}
const page$1 = {
get error() {
return context().page.error;
},
get status() {
return context().page.status;
}
};
const page = page$1;
function Error$1($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
$$renderer2.push(`<h1>${escape_html(page.status)}</h1> <p>${escape_html(page.error?.message)}</p>`);
});
}
export { Error$1 as default };
//# sourceMappingURL=error.svelte-C7N-8uX_.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"error.svelte-C7N-8uX_.js","sources":["../../../.svelte-kit/adapter-node/entries/fallbacks/error.svelte.js"],"sourcesContent":["import { g as getContext, e as escape_html } from \"../../chunks/root.js\";\nimport \"clsx\";\nimport \"../../chunks/state.svelte.js\";\nimport \"@sveltejs/kit/internal\";\nimport { w as writable } from \"../../chunks/exports.js\";\nimport \"../../chunks/utils.js\";\nimport \"@sveltejs/kit/internal/server\";\nfunction create_updated_store() {\n const { set, subscribe } = writable(false);\n {\n return {\n subscribe,\n // eslint-disable-next-line @typescript-eslint/require-await\n check: async () => false\n };\n }\n}\nconst stores = {\n updated: /* @__PURE__ */ create_updated_store()\n};\n({\n check: stores.updated.check\n});\nfunction context() {\n return getContext(\"__request__\");\n}\nconst page$1 = {\n get error() {\n return context().page.error;\n },\n get status() {\n return context().page.status;\n }\n};\nconst page = page$1;\nfunction Error$1($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n $$renderer2.push(`<h1>${escape_html(page.status)}</h1> <p>${escape_html(page.error?.message)}</p>`);\n });\n}\nexport {\n Error$1 as default\n};\n"],"names":[],"mappings":";;;AAOA,SAAS,oBAAoB,GAAG;AAChC,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC5C,EAAE;AACF,IAAI,OAAO;AACX,MAAM,SAAS;AACf;AACA,MAAM,KAAK,EAAE,YAAY;AACzB,KAAK;AACL,EAAE;AACF;AACA,MAAM,MAAM,GAAG;AACf,EAAE,OAAO,kBAAkB,oBAAoB;AAC/C,CAAC;AACD,CAAC;AACD,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AACD,SAAS,OAAO,GAAG;AACnB,EAAE,OAAO,UAAU,CAAC,aAAa,CAAC;AAClC;AACA,MAAM,MAAM,GAAG;AACf,EAAE,IAAI,KAAK,GAAG;AACd,IAAI,OAAO,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK;AAC/B,EAAE,CAAC;AACH,EAAE,IAAI,MAAM,GAAG;AACf,IAAI,OAAO,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM;AAChC,EAAE;AACF,CAAC;AACD,MAAM,IAAI,GAAG,MAAM;AACnB,SAAS,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE;AACtC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,WAAW,KAAK;AACxC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AACvG,EAAE,CAAC,CAAC;AACJ;;;;"}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
function Layout($$renderer, $$props) {
let { children } = $$props;
children($$renderer);
$$renderer.push(`<!---->`);
}
export { Layout as default };
//# sourceMappingURL=layout.svelte-UxsTmhKc.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"layout.svelte-UxsTmhKc.js","sources":["../../../.svelte-kit/adapter-node/entries/fallbacks/layout.svelte.js"],"sourcesContent":["import \"clsx\";\nfunction Layout($$renderer, $$props) {\n let { children } = $$props;\n children($$renderer);\n $$renderer.push(`<!---->`);\n}\nexport {\n Layout as default\n};\n"],"names":[],"mappings":"AACA,SAAS,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE;AACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,OAAO;AAC5B,EAAE,QAAQ,CAAC,UAAU,CAAC;AACtB,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AAC5B;;;;"}

View File

@@ -0,0 +1,9 @@
import { N as noop } from './exports-yY1xCm4l.js';
const is_legacy = noop.toString().includes("$$") || /function \w+\(\) \{\}/.test(noop.toString());
if (is_legacy) {
({
url: new URL("https://example.com")
});
}
//# sourceMappingURL=state.svelte-CNGpKaVU.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"state.svelte-CNGpKaVU.js","sources":["../../../.svelte-kit/adapter-node/chunks/state.svelte.js"],"sourcesContent":["import \"clsx\";\nimport { n as noop } from \"./root.js\";\nimport \"./exports.js\";\nimport \"@sveltejs/kit/internal/server\";\nconst is_legacy = noop.toString().includes(\"$$\") || /function \\w+\\(\\) \\{\\}/.test(noop.toString());\nif (is_legacy) {\n ({\n data: {},\n form: null,\n error: null,\n params: {},\n route: { id: null },\n state: {},\n status: -1,\n url: new URL(\"https://example.com\")\n });\n}\n"],"names":[],"mappings":";;AAIA,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjG,IAAI,SAAS,EAAE;AACf,EAAE,CAAC;AACH,IAOI,GAAG,EAAE,IAAI,GAAG,CAAC,qBAAqB;AACtC,GAAG;AACH"}

View File

@@ -0,0 +1,5 @@
const text_encoder = new TextEncoder();
new TextDecoder();
export { text_encoder as t };
//# sourceMappingURL=utils-FiC4zhrQ.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"utils-FiC4zhrQ.js","sources":["../../../node_modules/@sveltejs/kit/src/runtime/utils.js"],"sourcesContent":["import { BROWSER } from 'esm-env';\n\nexport const text_encoder = new TextEncoder();\nexport const text_decoder = new TextDecoder();\n\n/**\n * Like node's path.relative, but without using node\n * @param {string} from\n * @param {string} to\n */\nexport function get_relative_path(from, to) {\n\tconst from_parts = from.split(/[/\\\\]/);\n\tconst to_parts = to.split(/[/\\\\]/);\n\tfrom_parts.pop(); // get dirname\n\n\twhile (from_parts[0] === to_parts[0]) {\n\t\tfrom_parts.shift();\n\t\tto_parts.shift();\n\t}\n\n\tlet i = from_parts.length;\n\twhile (i--) from_parts[i] = '..';\n\n\treturn from_parts.concat(to_parts).join('/');\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {string}\n */\nexport function base64_encode(bytes) {\n\t// Using `Buffer` is faster than iterating\n\tif (!BROWSER && globalThis.Buffer) {\n\t\treturn globalThis.Buffer.from(bytes).toString('base64');\n\t}\n\n\tlet binary = '';\n\n\tfor (let i = 0; i < bytes.length; i++) {\n\t\tbinary += String.fromCharCode(bytes[i]);\n\t}\n\n\treturn btoa(binary);\n}\n\n/**\n * @param {string} encoded\n * @returns {Uint8Array}\n */\nexport function base64_decode(encoded) {\n\t// Using `Buffer` is faster than iterating\n\tif (!BROWSER && globalThis.Buffer) {\n\t\tconst buffer = globalThis.Buffer.from(encoded, 'base64');\n\t\treturn new Uint8Array(buffer);\n\t}\n\n\tconst binary = atob(encoded);\n\tconst bytes = new Uint8Array(binary.length);\n\n\tfor (let i = 0; i < binary.length; i++) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\n\treturn bytes;\n}\n"],"names":[],"mappings":"AAEY,MAAC,YAAY,GAAG,IAAI,WAAW;AACf,IAAI,WAAW;;;;","x_google_ignoreList":[0]}