Add ModeTemplate with Svelte 5 frontend and components
- Create reusable components: auth, api-client, shared-types - ModeTemplate with Hono backend and SvelteKit frontend - Auth store refactored to class-based Svelte 5 pattern - SSR-safe hydrate() pattern for localStorage access - Frontend builds successfully with Svelte 5 runes
This commit is contained in:
@@ -0,0 +1 @@
|
||||
/* Empty file - SvelteKit requires this */
|
||||
@@ -0,0 +1 @@
|
||||
export const env={}
|
||||
@@ -0,0 +1 @@
|
||||
.app.svelte-12qhfyh{display:flex;flex-direction:column;min-height:100vh}header.svelte-12qhfyh{padding:1rem;background:#f5f5f5;border-bottom:1px solid #ddd}nav.svelte-12qhfyh{display:flex;gap:1rem;align-items:center}nav.svelte-12qhfyh a:where(.svelte-12qhfyh){text-decoration:none;color:#333}main.svelte-12qhfyh{flex:1;padding:1rem}button.svelte-12qhfyh{padding:.5rem 1rem;cursor:pointer}
|
||||
@@ -0,0 +1 @@
|
||||
import{i as g,j as d,k as c,l as m,o as i,q as b,g as p,v,w as k,x as h}from"./CqqhLxdp.js";function y(n=!1){const s=g,e=s.l.u;if(!e)return;let f=()=>v(s.s);if(n){let o=0,t={};const _=k(()=>{let l=!1;const r=s.s;for(const a in r)r[a]!==t[a]&&(t[a]=r[a],l=!0);return l&&o++,o});f=()=>p(_)}e.b.length&&d(()=>{u(s,f),i(e.b)}),c(()=>{const o=m(()=>e.m.map(b));return()=>{for(const t of o)typeof t=="function"&&t()}}),e.a.length&&c(()=>{u(s,f),i(e.a)})}function u(n,s){if(n.l.s)for(const e of n.l.s)p(e);s()}h();export{y as i};
|
||||
@@ -0,0 +1 @@
|
||||
var S=t=>{throw TypeError(t)};var c=(t,e,i)=>e.has(t)||S("Cannot "+i);var s=(t,e,i)=>(c(t,e,"read from private field"),i?i.call(t):e.get(t)),n=(t,e,i)=>e.has(t)?S("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,i);import{h as d,g,e as h,u as _}from"./CqqhLxdp.js";const o={PB_TOKEN:"pb_token",SESSION:"auth_session"};var a,r,l,u;class f{constructor(){n(this,a,d(null));n(this,r,d(!0));n(this,l,_(()=>this._session!==null));n(this,u,_(()=>this._session?{email:this._session.email,displayName:this._session.displayName}:null))}get _session(){return g(s(this,a))}set _session(e){h(s(this,a),e,!0)}get _loading(){return g(s(this,r))}set _loading(e){h(s(this,r),e,!0)}get isAuthenticated(){return g(s(this,l))}set isAuthenticated(e){h(s(this,l),e)}get session(){return this._session}get loading(){return this._loading}get user(){return g(s(this,u))}set user(e){h(s(this,u),e)}hydrate(){if(typeof localStorage>"u")return;const e=localStorage.getItem(o.SESSION);if(e)try{this._session=JSON.parse(e)}catch{localStorage.removeItem(o.SESSION),localStorage.removeItem(o.PB_TOKEN)}this._loading=!1}login(e){typeof localStorage<"u"&&(localStorage.setItem(o.SESSION,JSON.stringify(e)),localStorage.setItem(o.PB_TOKEN,e.pbToken)),this._session=e,this._loading=!1}logout(){typeof localStorage<"u"&&(localStorage.removeItem(o.SESSION),localStorage.removeItem(o.PB_TOKEN)),this._session=null}redirectToLogin(){typeof window<"u"&&(window.location.href="/auth/login")}}a=new WeakMap,r=new WeakMap,l=new WeakMap,u=new WeakMap;const I=new f;export{I as a};
|
||||
@@ -0,0 +1 @@
|
||||
import{n as o,l as a,z as d}from"./CqqhLxdp.js";function p(s,u,e){if(s==null)return u(void 0),o;const t=a(()=>s.subscribe(u,e));return t.unsubscribe?()=>t.unsubscribe():t}const i=[];function _(s,u=o){let e=null;const t=new Set;function c(r){if(d(s,r)&&(s=r,e)){const b=!i.length;for(const n of t)n[1](),i.push(n,s);if(b){for(let n=0;n<i.length;n+=2)i[n][0](i[n+1]);i.length=0}}}function f(r){c(r(s))}function l(r,b=o){const n=[r,b];return t.add(n),t.size===1&&(e=u(c,f)||o),r(s),()=>{t.delete(n),t.size===0&&e&&(e(),e=null)}}return{set:c,update:f,subscribe:l}}function h(s){let u;return p(s,e=>u=e)(),u}export{h as g,p as s,_ as w};
|
||||
@@ -0,0 +1 @@
|
||||
import{k as o,i as t,A as c,l}from"./CqqhLxdp.js";function u(n){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function r(n){t===null&&u(),c&&t.l!==null?a(t).m.push(n):o(()=>{const e=l(n);if(typeof e=="function")return e})}function a(n){var e=n.l;return e.u??(e.u={a:[],b:[],m:[]})}export{r as o};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
var S=Object.defineProperty;var y=a=>{throw TypeError(a)};var D=(a,e,t)=>e in a?S(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var A=(a,e,t)=>D(a,typeof e!="symbol"?e+"":e,t),E=(a,e,t)=>e.has(a)||y("Cannot "+t);var s=(a,e,t)=>(E(a,e,"read from private field"),t?t.call(a):e.get(a)),u=(a,e,t)=>e.has(a)?y("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(a):e.set(a,t),T=(a,e,t,i)=>(E(a,e,"write to private field"),i?i.call(a,t):e.set(a,t),t);import{B as w,C as N,D as k,E as x,F,G as M,H as g,I as B,J as C,K as H,L as I,M as L,N as O,O as P,P as G,Q as J,R as K,S as R}from"./CqqhLxdp.js";var d,l,c,_,v,m,b;class Q{constructor(e,t=!0){A(this,"anchor");u(this,d,new Map);u(this,l,new Map);u(this,c,new Map);u(this,_,new Set);u(this,v,!0);u(this,m,()=>{var e=w;if(s(this,d).has(e)){var t=s(this,d).get(e),i=s(this,l).get(t);if(i)N(i),s(this,_).delete(t);else{var n=s(this,c).get(t);n&&(s(this,l).set(t,n.effect),s(this,c).delete(t),n.fragment.lastChild.remove(),this.anchor.before(n.fragment),i=n.effect)}for(const[f,r]of s(this,d)){if(s(this,d).delete(f),f===e)break;const h=s(this,c).get(r);h&&(k(h.effect),s(this,c).delete(r))}for(const[f,r]of s(this,l)){if(f===t||s(this,_).has(f))continue;const h=()=>{if(Array.from(s(this,d).values()).includes(f)){var p=document.createDocumentFragment();C(r,p),p.append(F()),s(this,c).set(f,{effect:r,fragment:p})}else k(r);s(this,_).delete(f),s(this,l).delete(f)};s(this,v)||!i?(s(this,_).add(f),x(r,h,!1)):h()}}});u(this,b,e=>{s(this,d).delete(e);const t=Array.from(s(this,d).values());for(const[i,n]of s(this,c))t.includes(i)||(k(n.effect),s(this,c).delete(i))});this.anchor=e,T(this,v,t)}ensure(e,t){var i=w,n=H();if(t&&!s(this,l).has(e)&&!s(this,c).has(e))if(n){var f=document.createDocumentFragment(),r=F();f.append(r),s(this,c).set(e,{effect:M(()=>t(r)),fragment:f})}else s(this,l).set(e,M(()=>t(this.anchor)));if(s(this,d).set(i,e),n){for(const[h,o]of s(this,l))h===e?i.skipped_effects.delete(o):i.skipped_effects.add(o);for(const[h,o]of s(this,c))h===e?i.skipped_effects.delete(o.effect):i.skipped_effects.add(o.effect);i.oncommit(s(this,m)),i.ondiscard(s(this,b))}else g&&(this.anchor=B),s(this,m).call(this)}}d=new WeakMap,l=new WeakMap,c=new WeakMap,_=new WeakMap,v=new WeakMap,m=new WeakMap,b=new WeakMap;function q(a,e,t=!1){g&&L();var i=new Q(a),n=t?O:0;function f(r,h){if(g){const p=P(a)===G;if(r===p){var o=J();K(o),i.anchor=o,R(!1),i.ensure(r,h),R(!0);return}}i.ensure(r,h)}I(()=>{var r=!1;e((h,o=!0)=>{r=!0,f(o,h)}),r||f(!1,null)},n)}export{Q as B,q as i};
|
||||
@@ -0,0 +1 @@
|
||||
import{s as c,g as l}from"./Bgo_ZO3W.js";import{b as o,d as b,n as a,m as d,g as p,e as g}from"./CqqhLxdp.js";let s=!1,i=Symbol();function m(e,u,r){const n=r[u]??(r[u]={store:null,source:d(void 0),unsubscribe:a});if(n.store!==e&&!(i in r))if(n.unsubscribe(),n.store=e??null,e==null)n.source.v=void 0,n.unsubscribe=a;else{var t=!0;n.unsubscribe=c(e,f=>{t?n.source.v=f:g(n.source,f)}),t=!1}return e&&i in r?l(e):p(n.source)}function y(){const e={};function u(){o(()=>{for(var r in e)e[r].unsubscribe();b(e,i,{enumerable:!1,value:!0})})}return[e,u]}function N(e){var u=s;try{return s=!1,[e(),s]}finally{s=u}}export{m as a,N as c,y as s};
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
import{l as o,a as r}from"../chunks/CuIyQV9Z.js";export{o as load_css,r as start};
|
||||
@@ -0,0 +1 @@
|
||||
import{d as F,f as c,a as d,s as M}from"../chunks/DZNd3jEa.js";import{o as A}from"../chunks/BtkHyJOA.js";import{L as q,N as C,F as L,T as w,H as p,U as H,V as R,W as g,S as b,R as T,I as B,p as D,a as O,c as l,s as u,r as v,f as S,t as W}from"../chunks/CqqhLxdp.js";import{B as I,i as P}from"../chunks/fsu08h6h.js";import{a as f}from"../chunks/BRRLaaPq.js";function U(i,o,...t){var r=new I(i);q(()=>{const e=o()??null;r.ensure(e,e&&(a=>e(a,...t)))},C)}function V(i,o){let t=null,r=p;var e;if(p){t=B;for(var a=H(document.head);a!==null&&(a.nodeType!==R||a.data!==i);)a=g(a);if(a===null)b(!1);else{var h=g(a);a.remove(),T(h)}}p||(e=document.head.appendChild(L()));try{q(()=>o(e),w)}finally{r&&(b(!0),T(t))}}var j=c('<meta name="description" content="Mode Template"/>'),z=c('<span> </span> <button class="svelte-12qhfyh">Logout</button>',1),G=c('<button class="svelte-12qhfyh">Login</button>'),J=c('<div class="app svelte-12qhfyh"><header class="svelte-12qhfyh"><nav class="svelte-12qhfyh"><a href="/" class="svelte-12qhfyh">Home</a> <!></nav></header> <main class="svelte-12qhfyh"><!></main></div>');function $(i,o){D(o,!0),A(()=>{f.hydrate()});var t=J();V("12qhfyh",s=>{var n=j();d(s,n)});var r=l(t),e=l(r),a=u(l(e),2);{var h=s=>{var n=z(),m=S(n),k=l(m);v(m);var x=u(m,2);x.__click=()=>f.logout(),W(()=>{var y;return M(k,`Welcome, ${((y=f.user)==null?void 0:y.displayName)??""}`)}),d(s,n)},E=s=>{var n=G();n.__click=()=>f.redirectToLogin(),d(s,n)};P(a,s=>{f.isAuthenticated?s(h):s(E,!1)})}v(e),v(r);var _=u(r,2),N=l(_);U(N,()=>o.children),v(_),v(t),d(i,t),O()}F(["click"]);export{$ as component};
|
||||
@@ -0,0 +1 @@
|
||||
import{f as h,a as g,s as e}from"../chunks/DZNd3jEa.js";import{i as l}from"../chunks/974AMC2H.js";import{p as v,f as d,t as _,a as x,c as o,r as p,s as $}from"../chunks/CqqhLxdp.js";import{s as k,p as m}from"../chunks/CuIyQV9Z.js";const b={get error(){return m.error},get status(){return m.status}};k.updated.check;const f=b;var E=h("<h1> </h1> <p> </p>",1);function z(i,c){v(c,!1),l();var t=E(),r=d(t),n=o(r,!0);p(r);var s=$(r,2),u=o(s,!0);p(s),_(()=>{var a;e(n,f.status),e(u,(a=f.error)==null?void 0:a.message)}),g(i,t),x()}export{z as component};
|
||||
@@ -0,0 +1 @@
|
||||
import{d as E,f as m,a as o,c as N,s as _}from"../chunks/DZNd3jEa.js";import{i as P}from"../chunks/974AMC2H.js";import{p as S,s as n,f as p,a as W,c as g,r as d,t as j}from"../chunks/CqqhLxdp.js";import{i as u}from"../chunks/fsu08h6h.js";import{a as i}from"../chunks/BRRLaaPq.js";var q=m("<p>Loading...</p>"),z=m("<p> </p> <p> </p>",1),B=m("<p>Please log in to continue.</p> <button>Sign in with Microsoft</button>",1),C=m("<h1>Mode Template</h1> <!>",1);function J(h,b){S(b,!1),P();var f=C(),x=n(p(f),2);{var k=a=>{var s=q();o(a,s)},L=a=>{var s=N(),M=p(s);{var T=t=>{var r=z(),e=p(r),y=g(e);d(e);var l=n(e,2),A=g(l);d(l),j(()=>{var v,c;_(y,`Welcome, ${((v=i.user)==null?void 0:v.displayName)??""}!`),_(A,`Email: ${((c=i.user)==null?void 0:c.email)??""}`)}),o(t,r)},w=t=>{var r=B(),e=n(p(r),2);e.__click=()=>i.redirectToLogin(),o(t,r)};u(M,t=>{i.isAuthenticated?t(T):t(w,!1)},!0)}o(a,s)};u(x,a=>{i.loading?a(k):a(L,!1)})}o(h,f),W()}E(["click"]);export{J as component};
|
||||
@@ -0,0 +1 @@
|
||||
import{f as p,a as n,s as y}from"../chunks/DZNd3jEa.js";import{o as $}from"../chunks/BtkHyJOA.js";import{p as k,s as x,f as g,a as M,e as l,h as N,g as u,c as P,r as w,y as A,t as I}from"../chunks/CqqhLxdp.js";import{i as R}from"../chunks/fsu08h6h.js";import{s as S,a as T}from"../chunks/hV77cT_P.js";import{s as j,g as q}from"../chunks/CuIyQV9Z.js";import{a as z}from"../chunks/BRRLaaPq.js";const B=()=>{const e=j;return{page:{subscribe:e.page.subscribe},navigating:{subscribe:e.navigating.subscribe},updated:e.updated}},C={subscribe(e){return B().page.subscribe(e)}};var D=p('<p style="color: red;"> </p> <a href="/">Return home</a>',1),E=p("<p>Please wait...</p>"),F=p("<h1>Authenticating...</h1> <!>",1);function U(e,i){k(i,!0);const f=()=>T(C,"$page",b),[b,v]=S();let r=N(null);$(async()=>{const s=f().url.searchParams,a=s.get("email"),t=s.get("displayName"),o=s.get("token"),m=s.get("error");if(m){l(r,m,!0);return}a&&t&&o?(z.login({email:a,displayName:t,pbToken:o}),q("/")):l(r,"Invalid callback parameters")});var c=F(),h=x(g(c),2);{var _=s=>{var a=D(),t=g(a),o=P(t,!0);w(t),A(2),I(()=>y(o,u(r))),n(s,a)},d=s=>{var a=E();n(s,a)};R(h,s=>{u(r)?s(_):s(d,!1)})}n(e,c),M(),v()}export{U as component};
|
||||
@@ -0,0 +1 @@
|
||||
{"version":"1768972126462"}
|
||||
@@ -0,0 +1,38 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Mode Template</title>
|
||||
|
||||
<link rel="modulepreload" href="/_app/immutable/entry/start.JQZ0kVpy.js">
|
||||
<link rel="modulepreload" href="/_app/immutable/chunks/CuIyQV9Z.js">
|
||||
<link rel="modulepreload" href="/_app/immutable/chunks/CqqhLxdp.js">
|
||||
<link rel="modulepreload" href="/_app/immutable/chunks/Bgo_ZO3W.js">
|
||||
<link rel="modulepreload" href="/_app/immutable/chunks/BtkHyJOA.js">
|
||||
<link rel="modulepreload" href="/_app/immutable/entry/app.B9iOASPK.js">
|
||||
<link rel="modulepreload" href="/_app/immutable/chunks/DZNd3jEa.js">
|
||||
<link rel="modulepreload" href="/_app/immutable/chunks/fsu08h6h.js">
|
||||
<link rel="modulepreload" href="/_app/immutable/chunks/hV77cT_P.js">
|
||||
</head>
|
||||
<body data-sveltekit-preload-data="hover">
|
||||
<div style="display: contents">
|
||||
<script>
|
||||
{
|
||||
__sveltekit_1u12ak4 = {
|
||||
base: ""
|
||||
};
|
||||
|
||||
const element = document.currentScript.parentElement;
|
||||
|
||||
Promise.all([
|
||||
import("/_app/immutable/entry/start.JQZ0kVpy.js"),
|
||||
import("/_app/immutable/entry/app.B9iOASPK.js")
|
||||
]).then(([kit, app]) => {
|
||||
kit.start(app, element);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user