@stacksjs/stx 0.2.340 → 0.2.342
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/browser-core-imports.js +0 -1
- package/dist/build-views.js +12 -1
- package/dist/caching.d.ts +4 -0
- package/dist/caching.js +34 -0
- package/dist/{chunk-hrdd26r4.js → chunk-01ggk8k8.js} +1 -1
- package/dist/chunk-025z2btp.js +2 -0
- package/dist/{chunk-x4vhn880.js → chunk-0sq5mdrh.js} +1 -1
- package/dist/chunk-19fp0z9s.js +2 -0
- package/dist/{chunk-d3kjaae0.js → chunk-1gwbw81h.js} +1 -1
- package/dist/{chunk-vaggjvsm.js → chunk-1spzqjve.js} +1 -1
- package/dist/{chunk-t00ga194.js → chunk-1t3j8a0q.js} +1 -1
- package/dist/{chunk-shtg7kah.js → chunk-1xwfws06.js} +2 -2
- package/dist/{chunk-x48crnwa.js → chunk-23sv24cm.js} +1 -1
- package/dist/{chunk-7r79j1hs.js → chunk-25b8z7xa.js} +1 -1
- package/dist/{chunk-hq9fa4pe.js → chunk-25f0s8t1.js} +2 -2
- package/dist/chunk-2p68bkza.js +2 -0
- package/dist/{chunk-r10fypcd.js → chunk-2swnc8kg.js} +1 -1
- package/dist/chunk-3b0mgxbk.js +2 -0
- package/dist/{chunk-nvp546bb.js → chunk-48x5bsqv.js} +1 -1
- package/dist/{chunk-fx07kyz7.js → chunk-4ecv1e3w.js} +1 -1
- package/dist/{chunk-ppp84wry.js → chunk-4vcyf1kh.js} +2 -2
- package/dist/{chunk-r5kr6jk4.js → chunk-4wpxbkbe.js} +2 -2
- package/dist/{chunk-p7ntrtaj.js → chunk-567g1ttv.js} +1 -1
- package/dist/{chunk-7a21q2q4.js → chunk-5g9vbhbt.js} +1 -1
- package/dist/chunk-5grrqaqs.js +2 -0
- package/dist/chunk-6jx4r94x.js +2 -0
- package/dist/{chunk-0xgc5t3y.js → chunk-6nvm939g.js} +1 -1
- package/dist/{chunk-tr1174hz.js → chunk-6nxq8rcw.js} +1 -1
- package/dist/{chunk-7r80apc5.js → chunk-6p6b01kp.js} +1 -1
- package/dist/{chunk-xe6zmdfq.js → chunk-74r1zw2h.js} +1 -1
- package/dist/{chunk-97ej3abh.js → chunk-8tsr51hj.js} +1 -1
- package/dist/chunk-a1rt1fms.js +2 -0
- package/dist/{chunk-aved735s.js → chunk-ahpmjg3f.js} +2 -2
- package/dist/chunk-akp89n3w.js +2 -0
- package/dist/{chunk-b4cabzk9.js → chunk-anf2y2h5.js} +1 -1
- package/dist/{chunk-d6yyzpsv.js → chunk-beextc84.js} +53 -20
- package/dist/chunk-bqhrryqs.js +2 -0
- package/dist/{chunk-799s9mwc.js → chunk-bt8w146r.js} +2 -2
- package/dist/{chunk-fa2mg49t.js → chunk-byjy9far.js} +2 -2
- package/dist/{chunk-axqfm9b4.js → chunk-c0n802j1.js} +1 -1
- package/dist/{chunk-vxt5c5aq.js → chunk-c33y19bn.js} +1 -1
- package/dist/{chunk-2gc4cevb.js → chunk-c73pyeak.js} +1 -1
- package/dist/{chunk-6av24ywm.js → chunk-cqw3c1xg.js} +1 -1
- package/dist/chunk-czvzaa42.js +3 -0
- package/dist/{chunk-yxpr7h26.js → chunk-d389vyyz.js} +2 -2
- package/dist/chunk-da0tfpa2.js +2 -0
- package/dist/chunk-de2cfcf5.js +2 -0
- package/dist/{chunk-756dqqn1.js → chunk-drs93sry.js} +1 -1
- package/dist/{chunk-t8ctvjqe.js → chunk-e0kzyf1g.js} +1 -1
- package/dist/{chunk-3b9sxnty.js → chunk-ebd3z4j9.js} +1 -1
- package/dist/{chunk-rkykwy3z.js → chunk-evtrctj9.js} +1 -1
- package/dist/chunk-exhbc57n.js +2 -0
- package/dist/{chunk-q9ckfwhh.js → chunk-f2qbjr3z.js} +1 -1
- package/dist/{chunk-xy4jt4ek.js → chunk-f5cw54q3.js} +1 -1
- package/dist/chunk-fhhp6pmx.js +2 -0
- package/dist/{chunk-yne23w3c.js → chunk-fm5211ec.js} +1 -1
- package/dist/chunk-fqsrft0a.js +2 -0
- package/dist/{chunk-mjf3xmxn.js → chunk-fvsefztj.js} +1 -1
- package/dist/{chunk-m46edxtt.js → chunk-fx29n4vc.js} +1 -1
- package/dist/{chunk-f476c9fb.js → chunk-gbkq5qnw.js} +3 -3
- package/dist/{chunk-6zsc0z5a.js → chunk-ghd80w8a.js} +3 -3
- package/dist/{chunk-7xjm1zqa.js → chunk-gkq323fg.js} +1 -1
- package/dist/chunk-gqzccw30.js +2 -0
- package/dist/{chunk-5ggt2ryn.js → chunk-gwc54hjc.js} +2 -2
- package/dist/chunk-h47e1c03.js +2 -0
- package/dist/{chunk-ay336sqb.js → chunk-hk8j3eps.js} +1 -1
- package/dist/{chunk-86v2rps7.js → chunk-hnffkdzc.js} +1 -1
- package/dist/{chunk-mb7rn0bf.js → chunk-hrmxxs0w.js} +1 -1
- package/dist/{chunk-d964bsxm.js → chunk-j82hfkcf.js} +280 -280
- package/dist/chunk-jcbj3xp4.js +2 -0
- package/dist/{chunk-h0y4mb2m.js → chunk-k3w3gwm3.js} +1 -1
- package/dist/{chunk-jx03a693.js → chunk-k5b9471y.js} +1 -1
- package/dist/{chunk-apa2v787.js → chunk-k9ep24bd.js} +1 -1
- package/dist/chunk-kbemcvp1.js +2 -0
- package/dist/chunk-ks4j8fjz.js +2 -0
- package/dist/{chunk-zj039s33.js → chunk-kznb3hdj.js} +1 -1
- package/dist/{chunk-m11pb9cx.js → chunk-m39hb2a2.js} +1 -1
- package/dist/chunk-mbstfjnj.js +2 -0
- package/dist/{chunk-95e1m9p8.js → chunk-mkgbrbr9.js} +1 -1
- package/dist/{chunk-dekxwgc2.js → chunk-mznr9nyp.js} +1 -1
- package/dist/{chunk-284ag6fs.js → chunk-ntm1761b.js} +130 -130
- package/dist/{chunk-5qsg9q46.js → chunk-p52cm7ch.js} +1 -1
- package/dist/{chunk-5g6rprcy.js → chunk-p5d8sb50.js} +1 -1
- package/dist/chunk-pbct6nxk.js +2 -0
- package/dist/chunk-peerbcwj.js +2 -0
- package/dist/chunk-pt1w6vq2.js +2 -0
- package/dist/{chunk-kdhrk7x5.js → chunk-q4cemvkw.js} +1 -1
- package/dist/{chunk-k3dtvay1.js → chunk-r1rfwm01.js} +1 -1
- package/dist/{chunk-q0srntf6.js → chunk-r46cg4qa.js} +1 -1
- package/dist/{chunk-22hch2me.js → chunk-reskzmsb.js} +1 -1
- package/dist/chunk-rgda0gwf.js +2 -0
- package/dist/{chunk-d7zxg9bp.js → chunk-rh7mwwb4.js} +2 -2
- package/dist/{chunk-pxw0cpxe.js → chunk-rr49zrz6.js} +1 -1
- package/dist/chunk-rwa10jm4.js +2 -0
- package/dist/{chunk-w72v0ab1.js → chunk-s4mmmwj4.js} +1 -1
- package/dist/{chunk-zg2hvb1j.js → chunk-saqbtgqr.js} +21 -2
- package/dist/chunk-snsh9ye4.js +2 -0
- package/dist/{chunk-a26hcag1.js → chunk-sytwy0mg.js} +1 -1
- package/dist/chunk-td39mtts.js +2 -0
- package/dist/{chunk-tr41gn5j.js → chunk-thrv2nbz.js} +1 -1
- package/dist/{chunk-066yt1hy.js → chunk-tmj45xq5.js} +1 -1
- package/dist/chunk-trncnwem.js +2 -0
- package/dist/{chunk-y8vj3rtt.js → chunk-ts3wfjh9.js} +1 -1
- package/dist/chunk-vk2j3vvs.js +2 -0
- package/dist/chunk-vph6zpeq.js +2 -0
- package/dist/chunk-wa3ks5zv.js +2 -0
- package/dist/chunk-wv8h3d68.js +3 -0
- package/dist/{chunk-28q3vycz.js → chunk-wvc7t11n.js} +1 -1
- package/dist/{chunk-2tjk867y.js → chunk-x7dv5rq7.js} +1 -1
- package/dist/{chunk-3agx4hyd.js → chunk-xe93ae3r.js} +3 -3
- package/dist/{chunk-mys0rat0.js → chunk-xec226zb.js} +1 -1
- package/dist/chunk-xer5kn26.js +2 -0
- package/dist/{chunk-tr9ynxdw.js → chunk-y956wapy.js} +1 -1
- package/dist/{chunk-stbns4bg.js → chunk-yhvrq2qd.js} +1 -1
- package/dist/{chunk-eq2j7w8p.js → chunk-yq7fc8sa.js} +1 -1
- package/dist/{chunk-wb90259a.js → chunk-yr7camcd.js} +1 -1
- package/dist/{chunk-8de19dmw.js → chunk-ys56ecvx.js} +1 -1
- package/dist/{chunk-5t8ersrw.js → chunk-ytx17bg2.js} +1 -1
- package/dist/{chunk-64qg8jes.js → chunk-yzv702kk.js} +2 -2
- package/dist/chunk-zv4gb3wb.js +2 -0
- package/dist/{chunk-6nde3nmc.js → chunk-zv4nf0x2.js} +1 -1
- package/dist/chunk-zx2krbqf.js +2 -0
- package/dist/cli.js +14 -14
- package/dist/client-script.js +2 -2
- package/dist/craft-entry.js +1 -1
- package/dist/craft.js +1 -1
- package/dist/database.js +1 -1
- package/dist/events.d.ts +14 -0
- package/dist/events.js +12 -1
- package/dist/hydration.d.ts +0 -39
- package/dist/hydration.js +7 -1
- package/dist/process.js +4 -0
- package/dist/pwa.js +2 -2
- package/dist/runtime-globals.js +1 -0
- package/dist/signals.js +20 -1
- package/dist/ssg.js +2 -2
- package/dist/stx.d.ts +4 -0
- package/dist/visual-testing.js +1 -1
- package/package.json +5 -5
- package/stx.d.ts +4 -0
- package/dist/chunk-0pje0pjq.js +0 -2
- package/dist/chunk-1w8bpytb.js +0 -2
- package/dist/chunk-58j32d7n.js +0 -2
- package/dist/chunk-605955nh.js +0 -2
- package/dist/chunk-6es5r4az.js +0 -3
- package/dist/chunk-6j6ek3j1.js +0 -2
- package/dist/chunk-82h5rp34.js +0 -2
- package/dist/chunk-9pv7gcey.js +0 -2
- package/dist/chunk-a2mj88c6.js +0 -2
- package/dist/chunk-b3pn6dh5.js +0 -2
- package/dist/chunk-cjcj2gsq.js +0 -2
- package/dist/chunk-deqnt1w5.js +0 -3
- package/dist/chunk-dy9xs2q0.js +0 -2
- package/dist/chunk-eb1v7f55.js +0 -2
- package/dist/chunk-fx5m9d3t.js +0 -2
- package/dist/chunk-g0059g3p.js +0 -2
- package/dist/chunk-gf6t4419.js +0 -2
- package/dist/chunk-h7hnzwd0.js +0 -2
- package/dist/chunk-hkgnpf6v.js +0 -2
- package/dist/chunk-hvw4mwee.js +0 -2
- package/dist/chunk-jwa2jhd8.js +0 -2
- package/dist/chunk-kwxcertb.js +0 -2
- package/dist/chunk-nwz43t6d.js +0 -2
- package/dist/chunk-p1cddybx.js +0 -2
- package/dist/chunk-rceawm7w.js +0 -2
- package/dist/chunk-t3mh10z3.js +0 -2
- package/dist/chunk-vhzc08aa.js +0 -2
- package/dist/chunk-vz0ebk4j.js +0 -2
- package/dist/chunk-wjcrcbd1.js +0 -2
- package/dist/chunk-x80ahcnw.js +0 -2
- package/dist/chunk-x81z8m6a.js +0 -2
- package/dist/chunk-y07fna67.js +0 -2
- package/dist/chunk-yz0d60px.js +0 -2
- package/dist/chunk-z19pk2pn.js +0 -2
- package/dist/chunk-z7vb3mgn.js +0 -2
- package/dist/chunk-zzfpwxpp.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Xe as F$}from"./chunk-
|
|
2
|
+
import{Xe as F$}from"./chunk-567g1ttv.js";import{Yf as u7,ag as z$,bg as h6,cg as E6,eg as B1,fg as d6,gg as J5,hg as H$,ig as O$,jg as u6,kg as m6,og as B5}from"./chunk-4vcyf1kh.js";import{aj as f5}from"./chunk-saqbtgqr.js";import{qj as l1,rj as I1,sj as R1,tj as i$,uj as a$,vj as a5,xj as r5}from"./chunk-e4g8wz6t.js";import{Uj as K$,Vj as _$}from"./chunk-czvzaa42.js";import{wk as m5,xk as p5}from"./chunk-byjy9far.js";import{Dk as o7,Ek as t7}from"./chunk-c0n802j1.js";import{Yk as U1}from"./chunk-4wpxbkbe.js";import{rl as A5,sl as U8}from"./chunk-gbkq5qnw.js";import{Am as n0,Ar as T0,Lo as M0,Np as V0,Sm as y6,Vl as O8,Vo as o0,Wm as G5,Zm as T1,_m as C1,bo as W$,gr as U$,jp as p7,kq as G6,lq as x1,mm as d7,mo as j$,oo as v6,po as A6,pq as t0,qp as g6,rp as f6,tr as T$,vr as s0,wr as w0}from"./chunk-j82hfkcf.js";import{$s as B,Hs as Z5,gt as B$,ht as L$,lt as J0}from"./chunk-xe93ae3r.js";import{qt as u0}from"./chunk-1spzqjve.js";import{Au as G$,Bu as O6,Mu as J6,du as r1,gu as H6,ou as e$,qu as $5,tu as s1,xu as X5}from"./chunk-bt8w146r.js";import{Iv as Y5,Jv as M6,Nv as D6,Ov as w6,bw as T6,cw as C6,dw as k6,ew as x6,fw as S6,gw as P6,iw as b6,nw as V6}from"./chunk-beextc84.js";import{xw as r}from"./chunk-p5d8sb50.js";var s5={read:($)=>{try{return JSON.parse($)}catch{return $}},write:($)=>{return JSON.stringify($)}};function J3($,X,Z={}){let{storage:Q="local",serializer:Y=s5,mergeDefaults:J=!1,listenToStorageChanges:G=!0}=Z,W=new Set,K=typeof window<"u",_=()=>{if(!K)return null;return Q==="session"?sessionStorage:localStorage},U=()=>{let L=_();if(!L)return X;try{let O=L.getItem($);if(O===null)return X;let A=Y.read(O);if(J&&typeof X==="object"&&X!==null)return{...X,...A};return A}catch{return X}},F=(L)=>{let O=_();if(!O)return;try{if(L===null||L===void 0)O.removeItem($);else O.setItem($,Y.write(L))}catch(A){console.warn(`[useStorage] Failed to write key "${$}":`,A)}},z=U(),j=(L,O)=>{for(let A of W)try{A(L,O)}catch(V){console.error("[useStorage] Subscriber error:",V)}};if(K&&G){let L=(A)=>{if(A.key===$&&A.storageArea===_()){let V=z;try{z=A.newValue?Y.read(A.newValue):X}catch(E){console.warn(`[useStorage] Failed to read key "${$}" from a cross-tab update:`,E);return}j(z,V)}};window.addEventListener("storage",L);let O=globalThis.onDestroy;if(typeof O==="function")O(()=>window.removeEventListener("storage",L))}let H={get value(){return z},set value(L){let O=z;z=L,F(L),j(L,O)},get:()=>z,set:(L)=>{H.value=L},remove:()=>{let L=_();if(L){L.removeItem($);let O=z;z=X,j(X,O)}},subscribe:(L)=>{return W.add(L),L(z,void 0),()=>W.delete(L)}};return H}function n5($,X,Z,Q,Y={}){let{serializer:J=s5,mergeDefaults:G=!1,listenToStorageChanges:W=!0}=Y,K=typeof window<"u",_=()=>{if(!K)return null;return $==="session"?sessionStorage:localStorage},U=(j)=>{if(j===null||j===void 0)return Q;try{let H=J.read(j);if(G&&typeof Q==="object"&&Q!==null)return{...Q,...H};return H}catch(H){return console.warn(`[${X}] Failed to read key "${Z}":`,H),Q}},z=a5((()=>{let j=_();if(!j)return Q;try{return U(j.getItem(Z))}catch(H){return console.warn(`[${X}] Cannot read "${Z}":`,H),Q}})());if(r5(()=>{let j=z(),H=_();if(!H)return;try{if(j===null||j===void 0)H.removeItem(Z);else H.setItem(Z,J.write(j))}catch(L){console.warn(`[${X}] Cannot persist "${Z}":`,L)}}),K&&W){let j=(L)=>{if(L.key!==Z)return;if(L.storageArea&&L.storageArea!==_())return;z.set(U(L.newValue))};window.addEventListener("storage",j);let H=globalThis.onDestroy;if(typeof H==="function")H(()=>window.removeEventListener("storage",j))}return z}function G3($,X,Z){return n5("local","useLocalStorage",$,X,Z)}function W3($,X,Z){return n5("session","useSessionStorage",$,X,Z)}function K3($="local"){if(typeof window>"u")return;($==="session"?sessionStorage:localStorage).clear()}function _3($="local"){if(typeof window>"u")return[];let X=$==="session"?sessionStorage:localStorage;return Object.keys(X)}function U3($="local"){if(typeof window>"u")return 0;let X=$==="session"?sessionStorage:localStorage,Z=0;for(let Q in X)if(Object.prototype.hasOwnProperty.call(X,Q))Z+=(Q.length+(X.getItem(Q)?.length||0))*2;return Z}var t=null;function c1($,X,Z=new WeakSet){if(Object.is($,X))return!0;if(typeof $!=="object"||typeof X!=="object"||$===null||X===null)return!1;if(Z.has($))return!0;if(Z.add($),$ instanceof Date&&X instanceof Date)return $.getTime()===X.getTime();if($ instanceof RegExp&&X instanceof RegExp)return $.source===X.source&&$.flags===X.flags;if(Array.isArray($)){if(!Array.isArray(X)||$.length!==X.length)return!1;for(let J=0;J<$.length;J++)if(!c1($[J],X[J],Z))return!1;return!0}if(Array.isArray(X))return!1;if($ instanceof Map){if(!(X instanceof Map)||$.size!==X.size)return!1;for(let[J,G]of $)if(!X.has(J)||!c1(G,X.get(J),Z))return!1;return!0}if(X instanceof Map)return!1;if($ instanceof Set){if(!(X instanceof Set)||$.size!==X.size)return!1;for(let J of $)if(!X.has(J))return!1;return!0}if(X instanceof Set)return!1;let Q=Object.keys($),Y=Object.keys(X);if(Q.length!==Y.length)return!1;for(let J of Q){if(!Object.prototype.hasOwnProperty.call(X,J))return!1;if(!c1($[J],X[J],Z))return!1}return!0}function YJ($){t=$}function JJ(){return t}function GJ(){return{isMounted:!1,isUnmounted:!1,hooks:{beforeMount:[],mounted:[],beforeUpdate:[],updated:[],beforeUnmount:[],unmounted:[]},effects:[],scope:B3()}}function B3(){return{refs:new Map,effects:new Set,cleanups:[]}}function WJ($){let X=new Set,Z=new Set,Q=$,Y=Symbol("ref"),J={get value(){let G=l1();if(G)Z.add(G);return Q},set value(G){if(!Object.is(G,Q)){let W=Q;Q=G;for(let K of X)K(G,W);for(let K of Z)if(i$())a$(K);else K()}},subscribe(G){return X.add(G),()=>{X.delete(G)}}};if(t)t.scope.refs.set(Y,J);return J}var o5=new WeakMap;function L3($){let X=o5.get($);if(X)return X;let Z=new Map,Q=(G)=>{let W=Z.get(G);if(!W)return;for(let K of[...W])if(i$())a$(K);else K()},Y=(G,W)=>{if(!Z.has(G))Z.set(G,new Set);return Z.get(G).add(W),()=>{Z.get(G)?.delete(W)}},J=new Proxy($,{get(G,W,K){let _=Reflect.get(G,W,K),U=l1();if(U)Y(W,U);if(_!==null&&typeof _==="object"&&!Array.isArray(_)){let F=Object.getPrototypeOf(_);if(F===Object.prototype||F===null)return L3(_)}return _},set(G,W,K,_){let U=Reflect.get(G,W,_),F=Reflect.set(G,W,K,_);if(!Object.is(K,U))Q(W);return F},deleteProperty(G,W){let K=Reflect.deleteProperty(G,W);return Q(W),K}});return o5.set($,J),J}function KJ($){let X,Z=!0,Q=new Set,Y=new Set,J=()=>{Z=!0,G()},G=()=>{if(Z){let K=X,_=I1(J);if(X=$(),R1(_),Z=!1,!Object.is(X,K)){for(let U of Q)U(X,K);for(let U of Y)U()}}},W=I1(J);return X=$(),Z=!1,R1(W),{get value(){let K=l1();if(K)Y.add(K);return G(),X},set value(K){console.warn("[stx] Computed properties are readonly")},subscribe(K){return Q.add(K),()=>{Q.delete(K)}}}}function F3($){if(typeof requestAnimationFrame==="function"){requestAnimationFrame(()=>{requestAnimationFrame($)});return}setTimeout($,0)}function _J($,X,Z={}){let{immediate:Q=!1,deep:Y=!1,flush:J="post"}=Z,G,W,K=!1,_=()=>{if(K)return;let H=j();if((Y?!c1(H,G):!Object.is(H,G))||Q)if(X(H,G),Y&&H!==null&&typeof H==="object")try{G=structuredClone(H)}catch{G=H}else G=H},U=(H)=>{if(J==="sync")H();else if(J==="pre")Promise.resolve().then(H);else F3(H)},F=!1,z=()=>{if(K||F)return;F=!0,U(()=>{F=!1,_()})},j=()=>{if(typeof $==="function"){let H=I1(z);try{return $()}finally{R1(H)}}return $.value};if(typeof $!=="function"){let H=$.subscribe(()=>{U(_)});W=()=>{K=!0,H()}}else W=()=>{K=!0};if(G=j(),Q)U(_);if(t)t.scope.cleanups.push(()=>W?.());return()=>W?.()}function UJ($,X,Z={}){let Q=[],Y=$.map((J)=>J.value);for(let J of $){let G=J.subscribe(()=>{let W=$.map((K)=>K.value);X(W,Y),Y=[...W]});Q.push(G)}if(Z.immediate){let J=$.map((G)=>G.value);X(J,Y)}return()=>{for(let J of Q)J()}}function BJ($){let X,Z=!1,Q=()=>{if(Z)return;if(X)X();let Y=I1(Q);X=$(),R1(Y)};if(Q(),t)t.scope.cleanups.push(()=>{if(Z=!0,X)X()});return()=>{if(Z=!0,X)X()}}function LJ($){if(t)t.hooks.beforeMount.push($);else console.warn("[stx] onBeforeMount called outside of component setup")}function FJ($){if(t)t.hooks.mounted.push($);else console.warn("[stx] onMounted called outside of component setup")}function zJ($){if(t)t.hooks.beforeUpdate.push($);else console.warn("[stx] onBeforeUpdate called outside of component setup")}function jJ($){if(t)t.hooks.updated.push($);else console.warn("[stx] onUpdated called outside of component setup")}function HJ($){if(t)t.hooks.beforeUnmount.push($);else console.warn("[stx] onBeforeUnmount called outside of component setup")}function OJ($){if(t)t.hooks.unmounted.push($);else console.warn("[stx] onUnmounted called outside of component setup")}async function Y1($,X){let Z=$.hooks[X];for(let Q of Z)await Q()}async function AJ($){await Y1($,"beforeMount"),$.isMounted=!0,await Y1($,"mounted")}async function qJ($){if(!$.isMounted||$.isUnmounted)return;await Y1($,"beforeUpdate"),await Y1($,"updated")}async function NJ($){if($.isUnmounted)return;await Y1($,"beforeUnmount");for(let X of $.scope.cleanups)X();$.isUnmounted=!0,await Y1($,"unmounted")}function MJ(){return`
|
|
3
3
|
<script data-stx-client-runtime>
|
|
4
4
|
(function() {
|
|
5
5
|
'use strict';
|
|
@@ -178,11 +178,11 @@ import{Xe as F$}from"./chunk-p7ntrtaj.js";import{Yf as d7,ag as z$,bg as h6,cg a
|
|
|
178
178
|
});
|
|
179
179
|
window.provide = provide;
|
|
180
180
|
})();
|
|
181
|
-
</script>`}function J1($,X){if(typeof window>"u")return X;return window[$]??X}function i1($,X){if(typeof window>"u")return;window[$]=X}function t5($){let Z=J1("__STX_STORES__",{})[$];if(!Z)throw Error(`Store "${$}" not found. Make sure it's defined with defineStore().`);return Z}function
|
|
181
|
+
</script>`}function J1($,X){if(typeof window>"u")return X;return window[$]??X}function i1($,X){if(typeof window>"u")return;window[$]=X}function t5($){let Z=J1("__STX_STORES__",{})[$];if(!Z)throw Error(`Store "${$}" not found. Make sure it's defined with defineStore().`);return Z}function EJ($){return t5($)}function IJ($,X=5000){return new Promise((Z,Q)=>{let Y=Date.now(),J=()=>{let G=t5($);if(G)Z(G);else if(Date.now()-Y>X)Q(Error(`Timeout waiting for store "${$}"`));else requestAnimationFrame(J)};J()})}function z3(){return J1("__STX_ROUTE_PARAMS__",{})}function j3($){return z3()[$]}function RJ($){let X=j3($);if(X===void 0)throw Error(`Route parameter "${$}" not found`);return X}function H3(){return J1("__STX_MIDDLEWARE_STATE__",{})}function DJ($){return H3()[$]}function wJ(){if(typeof window>"u")return;if(!J1("__STX_STORES__",null))i1("__STX_STORES__",{})}function TJ($,X){let Z=J1("__STX_STORES__",{});Z[$]=X,i1("__STX_STORES__",Z)}function CJ(){return J1("__STX_STORE_STATE__",null)}function kJ($){i1("__STX_ROUTE_PARAMS__",$)}function xJ($){i1("__STX_MIDDLEWARE_STATE__",$)}function O3(){return typeof window>"u"}function A3(){return typeof window<"u"}function SJ($){if(A3())$()}function PJ($){if(O3())$()}async function q3($){try{let X=await Bun.file($).text(),Z=N3(X),Q=M3(X,$),Y=V3(X,Z),J=E3(X,Z);return{file:$,metrics:Z,issues:Q,suggestions:Y,performance:J}}catch(X){throw Error(`Failed to analyze template ${$}: ${X instanceof Error?X.message:String(X)}`)}}function N3($){let X=$.split(`
|
|
182
182
|
`),Z=$.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i),Y=(Z?Z[1]:"").split(`
|
|
183
|
-
`).length,J={conditionals:($.match(/@(if|unless|elseif|else|endif|endunless)\b/g)||[]).length,loops:($.match(/@(foreach|for|endforeach|endfor|while|endwhile)\b/g)||[]).length,includes:($.match(/@(include|component|extends|section|yield)\b/g)||[]).length,custom:0,total:0};J.total=J.conditionals+J.loops+J.includes+J.custom;let G=($.match(/\{\{[\s\S]*?\}\}/g)||[]).length,W=($.match(/\{!![\s\S]*?!!\}/g)||[]).length,K=($.match(/@(?:if|unless|elseif|foreach|for|while)\s*\([^)]+\)/g)||[]).length,_=G+W+K,U=($.match(/<[A-Z][^>]*>/g)||[]).length,F=($.match(/@(?:layout|extends)\(/g)||[]).length,z=0,j=0;for(let O of X)if(/@(?:if|unless|foreach|for|while|section)\b/.test(O)&&!/@end/.test(O)&&!/@else/.test(O))j++,z=Math.max(z,j);else if(/@end(?:if|unless|foreach|for|while|section)\b/.test(O))j--;let H=z>=4?3:0,L=Math.min(10,Math.ceil(J.total*0.5+_*0.1+U*0.3+(Y>10?Y*0.05:0)+H));return{lines:X.length,characters:$.length,directives:J,expressions:_,components:U,layouts:F,scriptLines:Y,complexity:L}}function
|
|
184
|
-
`).filter((U)=>U.length>120);if(K.length>0)Z.push({type:"info",category:"maintainability",message:`Found ${K.length} line(s) longer than 120 characters`,suggestion:"Consider breaking long lines for better readability"});let _=($.match(/style\s*=\s*["'][^"']*["']/g)||[]).length;if(_>3)Z.push({type:"info",category:"maintainability",message:`Found ${_} inline style attributes`,suggestion:"Consider moving styles to CSS classes for better maintainability"});return Z}function
|
|
185
|
-
`,Q.index-1);if(Q6.includes(G)){let _=X.get(G);if(_)_.count++,_.locations.push({line:Y,column:K});else X.set(G,{name:G,count:1,locations:[{line:Y,column:K}]})}}return Array.from(X.values())}function
|
|
183
|
+
`).length,J={conditionals:($.match(/@(if|unless|elseif|else|endif|endunless)\b/g)||[]).length,loops:($.match(/@(foreach|for|endforeach|endfor|while|endwhile)\b/g)||[]).length,includes:($.match(/@(include|component|extends|section|yield)\b/g)||[]).length,custom:0,total:0};J.total=J.conditionals+J.loops+J.includes+J.custom;let G=($.match(/\{\{[\s\S]*?\}\}/g)||[]).length,W=($.match(/\{!![\s\S]*?!!\}/g)||[]).length,K=($.match(/@(?:if|unless|elseif|foreach|for|while)\s*\([^)]+\)/g)||[]).length,_=G+W+K,U=($.match(/<[A-Z][^>]*>/g)||[]).length,F=($.match(/@(?:layout|extends)\(/g)||[]).length,z=0,j=0;for(let O of X)if(/@(?:if|unless|foreach|for|while|section)\b/.test(O)&&!/@end/.test(O)&&!/@else/.test(O))j++,z=Math.max(z,j);else if(/@end(?:if|unless|foreach|for|while|section)\b/.test(O))j--;let H=z>=4?3:0,L=Math.min(10,Math.ceil(J.total*0.5+_*0.1+U*0.3+(Y>10?Y*0.05:0)+H));return{lines:X.length,characters:$.length,directives:J,expressions:_,components:U,layouts:F,scriptLines:Y,complexity:L}}function M3($,X){let Z=[],Q=e5($,"if","endif");if(Q>0)Z.push({type:"error",category:"syntax",message:`Found ${Q} unmatched @if directive(s)`,suggestion:"Ensure every @if has a corresponding @endif"});let Y=e5($,"foreach","endforeach");if(Y>0)Z.push({type:"error",category:"syntax",message:`Found ${Y} unmatched @foreach directive(s)`,suggestion:"Ensure every @foreach has a corresponding @endforeach"});let J=$.match(/@foreach[\s\S]*?@foreach[\s\S]*?@endforeach[\s\S]*?@endforeach/g);if(J&&J.length>0)Z.push({type:"warning",category:"performance",message:"Nested loops detected which may impact performance",suggestion:"Consider preprocessing data or using more efficient data structures"});let G=($.match(/\{!![\s\S]*?!!\}/g)||[]).length;if(G>0)Z.push({type:"warning",category:"security",message:`Found ${G} raw output expression(s) {!! !!}`,suggestion:"Ensure raw outputs are properly sanitized to prevent XSS"});let W=$.match(/<img[^>]*>/g);if(W){let U=W.filter((F)=>!F.includes("alt="));if(U.length>0)Z.push({type:"warning",category:"accessibility",message:`Found ${U.length} image(s) without alt attributes`,suggestion:"Add alt attributes to all images for screen reader accessibility"})}let K=$.split(`
|
|
184
|
+
`).filter((U)=>U.length>120);if(K.length>0)Z.push({type:"info",category:"maintainability",message:`Found ${K.length} line(s) longer than 120 characters`,suggestion:"Consider breaking long lines for better readability"});let _=($.match(/style\s*=\s*["'][^"']*["']/g)||[]).length;if(_>3)Z.push({type:"info",category:"maintainability",message:`Found ${_} inline style attributes`,suggestion:"Consider moving styles to CSS classes for better maintainability"});return Z}function V3($,X){let Z=[];if(X.complexity>7)Z.push({type:"refactor",message:"Template complexity is high. Consider breaking into smaller components.",impact:"high",effort:"medium"});else if(X.complexity>5&&X.directives.total>8)Z.push({type:"optimization",message:"Template has moderate complexity. Consider component extraction for reusability.",impact:"medium",effort:"low"});if(X.lines>100&&X.components===0)Z.push({type:"refactor",message:"Large template with no components. Consider extracting reusable parts into components.",impact:"medium",effort:"medium"});if(X.expressions>20)Z.push({type:"optimization",message:"Many template expressions detected. Consider preprocessing some data in the script section.",impact:"medium",effort:"low"});let Q=$.match(/@foreach[\s\S]*?@foreach[\s\S]*?@endforeach[\s\S]*?@endforeach/g);if(Q&&Q.length>0)Z.push({type:"optimization",message:"Nested loops detected. Consider preprocessing data or optimizing data structures.",impact:"high",effort:"medium"});if(X.directives.total===0&&X.expressions<5)Z.push({type:"optimization",message:"Template appears static. Consider enabling aggressive caching.",impact:"high",effort:"low"});if(X.scriptLines>50)Z.push({type:"refactor",message:"Large script section. Consider moving complex logic to external modules.",impact:"medium",effort:"medium"});return Z}function E3($,X){let Z=1;if(Z+=X.directives.conditionals*0.1,Z+=X.directives.loops*0.5,Z+=X.directives.includes*2,Z+=X.expressions*0.05,Z+=X.components*1,X.scriptLines>10)Z+=X.scriptLines*0.1;let Q;if(X.expressions===0&&X.directives.total===0)Q="high";else if(X.expressions<5&&X.directives.total<3)Q="medium";else Q="low";let Y=[];if(Z>10)Y.push("Consider optimizing template complexity");if(Q==="low"&&X.directives.total>5)Y.push("Reduce dynamic content for better caching");if(X.components===0&&X.lines>40)Y.push("Extract components to improve reusability and performance");return{estimatedRenderTime:Math.round(Z*100)/100,complexityScore:X.complexity,cacheability:Q,recommendations:Y}}function e5($,X,Z){let Q=$.replace(/<!--[\s\S]*?-->/g,""),Y=(Q.match(new RegExp(`@${X}\\b`,"g"))||[]).length,J=(Q.match(new RegExp(`@${Z}\\b`,"g"))||[]).length;return Math.abs(Y-J)}async function yJ($=["**/*.stx"],X){let Z=[],Q=[];for(let J of $){let G=await Array.fromAsync(new Bun.Glob(J).scan({cwd:X||process.cwd(),onlyFiles:!0,absolute:!0}));Q.push(...G.filter((W)=>W.endsWith(".stx")))}for(let J of Q)try{let G=await q3(J);Z.push(G)}catch(G){console.warn(`Failed to analyze ${J}:`,G)}let Y=I3(Z);return{results:Z,summary:Y}}function I3($){let X=$.length,Z=$.reduce((_,U)=>_+U.metrics.lines,0),Q=X>0?$.reduce((_,U)=>_+U.metrics.complexity,0)/X:0,Y=$.reduce((_,U)=>_+U.issues.length,0),J={};$.forEach((_)=>{_.issues.forEach((U)=>{J[U.category]=(J[U.category]||0)+1})});let G=X>0?$.reduce((_,U)=>_+U.performance.estimatedRenderTime,0)/X:0,W=Math.max(1,Math.min(10,Math.round(10-G/2-Q/2))),K=[];if(Q>6)K.push("Project has high average complexity. Consider refactoring complex templates.");if(Y>X*2)K.push("High number of issues detected. Run detailed analysis on individual files.");if(J.security>0)K.push("Security issues found. Review raw output usage and input sanitization.");return{totalFiles:X,totalLines:Z,avgComplexity:Math.round(Q*100)/100,totalIssues:Y,issuesByCategory:J,performanceScore:W,recommendations:K}}import a1 from"path";var $6=/<script\b[^>]*\bserver\b/i,R3=/<script\b[^>]*\bclient\b/i;async function hJ($){let X=performance.now(),Z=await s0($),Q=$||Z.root||process.cwd(),Y=[Z.build?.pagesDir||Z.pagesDir||"pages",Z.componentsDir||"components",Z.layoutsDir||"layouts",Z.partialsDir||"partials"].map((W)=>a1.resolve(Q,W)),J=[],G=0;for(let W of Y){let K=await X6(W);for(let _ of K){G++;let U=await Bun.file(_).text();if($6.test(U))J.push(a1.relative(Q,_))}}return{mode:J.length>0?"ssr":"ssg",serverScriptFiles:J,totalFilesScanned:G,scanDurationMs:Math.round(performance.now()-X)}}async function dJ($){let X=await s0($),Z=$||X.root||process.cwd(),Q=a1.resolve(Z,X.componentsDir||"components"),Y=[],J=await X6(Q);for(let G of J){let W=await Bun.file(G).text(),K=$6.test(W),_=R3.test(W)||/<script\b(?![^>]*\bserver\b)[^>]*>/i.test(W)&&!K;if(K&&_){let U=a1.relative(Z,G);Y.push({file:U,message:`Component "${U}" has both <script server> and <script client>. `+"Components should be server OR client \u2014 compose them via props/slots."})}}return Y}async function X6($){let X=[];try{let Z=new Bun.Glob("**/*.stx");for await(let Q of Z.scan({cwd:$,absolute:!0}))X.push(Q)}catch{}return X}var Z6={treeShake:!0,deadCodeElimination:!0,constantFolding:!0,stringPooling:!1,minifyHtml:!0,removeDevCode:!0,constants:{},preserveDirectives:[],target:"production"},Q6=["if","else","elseif","endif","unless","endunless","switch","case","default","endswitch","for","endfor","foreach","endforeach","forelse","endforelse","while","endwhile","break","continue","empty","extends","section","endsection","yield","parent","include","includeIf","includeWhen","includeFirst","once","endonce","push","endpush","prepend","endprepend","stack","component","endcomponent","slot","endslot","props","auth","endauth","guest","endguest","can","endcan","cannot","endcannot","role","endrole","hasRole","endhasRole","hasAnyRole","endhasAnyRole","csrf","method","error","enderror","old","input","textarea","select","checkbox","radio","file","translate","lang","choice","meta","title","seo","jsonld","canonical","robots","sitemap","ts","endts","js","endjs","css","endcss","markdown","endmarkdown","verbatim","endverbatim","env","production","debug","isset","endisset","empty","endempty"];function Y6($){let X=new Map,Z=/@(\w+)/g,Q,Y=1,J=0;while((Q=Z.exec($))!==null){let G=Q[1],W=$.slice(J,Q.index);Y+=(W.match(/\n/g)||[]).length,J=Q.index;let K=Q.index-$.lastIndexOf(`
|
|
185
|
+
`,Q.index-1);if(Q6.includes(G)){let _=X.get(G);if(_)_.count++,_.locations.push({line:Y,column:K});else X.set(G,{name:G,count:1,locations:[{line:Y,column:K}]})}}return Array.from(X.values())}function D3($,X=[]){let Z=Y6($),Q=new Set(Z.map((Y)=>Y.name));for(let Y of X)Q.add(Y);for(let Y of Array.from(Q))if(!Y.startsWith("end"))Q.add(`end${Y}`);return Q6.filter((Y)=>!Q.has(Y))}function w3($){let X=[],Z={conditionals:["if","else","elseif","endif","unless","endunless","switch","case","default","endswitch","isset","endisset"],loops:["for","endfor","foreach","endforeach","forelse","endforelse","while","endwhile","break","continue","empty"],includes:["include","includeIf","includeWhen","includeFirst","once","endonce","extends","section","endsection","yield","parent","push","endpush","prepend","endprepend","stack"],components:["component","endcomponent","slot","endslot","props"],auth:["auth","endauth","guest","endguest","can","endcan","cannot","endcannot","role","endrole","hasRole","endhasRole","hasAnyRole","endhasAnyRole"],forms:["csrf","method","error","enderror","old","input","textarea","select","checkbox","radio","file"],i18n:["translate","lang","choice"],seo:["meta","title","seo","jsonld","canonical","robots","sitemap"]},Q=new Set;for(let J of $)for(let[G,W]of Object.entries(Z))if(W.includes(J)){Q.add(G);break}for(let J of Q)X.push(`import { process${b3(J)} } from './${J}'`);let Y=$.filter((J)=>!J.startsWith("end")).map((J)=>` '${J}': true`).join(`,
|
|
186
186
|
`);return`// Tree-shaken directive bundle
|
|
187
187
|
// Only includes: ${$.join(", ")}
|
|
188
188
|
${X.join(`
|
|
@@ -195,10 +195,10 @@ ${Y}
|
|
|
195
195
|
export function isDirectiveActive(name: string): boolean {
|
|
196
196
|
return name in activeDirectives
|
|
197
197
|
}
|
|
198
|
-
`}function w3($,X={}){let Z=[],Q=/@if\(([^)]+)\)[\s\S]*?@endif/g,Y=$.matchAll(Q);for(let _ of Y){let U=_[1].trim();if(r$(U,X)===!1)Z.push({start:_.index,end:_.index+_[0].length,reason:`@if condition always false: ${U}`})}let J=/@unless\(([^)]+)\)[\s\S]*?@endunless/g,G=$.matchAll(J);for(let _ of G){let U=_[1].trim();if(r$(U,X)===!0)Z.push({start:_.index,end:_.index+_[0].length,reason:`@unless condition always true: ${U}`})}let W=/@env\(['"]development['"]\)[\s\S]*?@endenv/g;if(X.__ENV__==="production"){let _=$.matchAll(W);for(let U of _)Z.push({start:U.index,end:U.index+U[0].length,reason:"Development-only code in production build"})}let K=/@debug[\s\S]*?@enddebug/g;if(X.__ENV__==="production"){let _=$.matchAll(K);for(let U of _)Z.push({start:U.index,end:U.index+U[0].length,reason:"Debug code in production build"})}return Z}function T3($,X={}){let Z=w3($,X),Q=[];Z.sort((J,G)=>G.start-J.start);let Y=$;for(let J of Z)Y=Y.slice(0,J.start)+Y.slice(J.end),Q.push(J.reason);return{content:Y,removed:Q}}function r$($,X){if($==="true")return!0;if($==="false")return!1;if($==="null")return null;if(/^\d+$/.test($))return Number.parseInt($,10);if(/^\d+\.\d+$/.test($))return Number.parseFloat($);if(/^['"].*['"]$/.test($))return $.slice(1,-1);if($ in X)return X[$];let Z=$.match(/^(\w+)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/);if(Z){let[,Q,Y,J]=Z,G=Q in X?X[Q]:void 0,W=r$(J,X);if(G!==void 0&&W!==void 0)switch(Y){case"==":case"===":return G===W;case"!=":case"!==":return G!==W;case">":return G>W;case"<":return G<W;case">=":return G>=W;case"<=":return G<=W}}return}function C3($,X){let Z=[],Q=$;return Q=Q.replace(/\{\{\s*(\w+)\s*\}\}/g,(Y,J)=>{if(J in X)return Z.push(`{{ ${J} }} -> ${X[J]}`),String(X[J]);return Y}),Q=Q.replace(/\{\{\s*(\d+)\s*([+\-*])\s*(\d+)\s*\}\}/g,(Y,J,G,W)=>{let K=Number.parseInt(J,10),_=Number.parseInt(W,10),U;switch(G){case"+":U=K+_;break;case"-":U=K-_;break;case"*":U=K*_;break;default:return Y}return Z.push(`{{ ${J} ${G} ${W} }} -> ${U}`),String(U)}),{content:Q,folded:Z}}function k3($){let X=$,Z=[],Q=0;X=X.replace(/<(pre|code|script|style)([^>]*)>([\s\S]*?)<\/\1>/gi,(Y)=>{let J=`__PRESERVE_${Q++}__`;return Z.push({marker:J,content:Y}),J}),X=X.replace(/\{\{([\s\S]*?)\}\}/g,(Y)=>{let J=`__PRESERVE_${Q++}__`;return Z.push({marker:J,content:Y}),J}),X=X.replace(/\{\{--([\s\S]*?)--\}\}/g,""),X=X.replace(/<!--[\s\S]*?-->/g,""),X=X.replace(/>\s+</g,"><"),X=X.replace(/^\s+/gm,""),X=X.replace(/\s+$/gm,""),X=X.replace(/\s{2,}/g," ");for(let{marker:Y,content:J}of Z){let G=X.indexOf(Y);if(G!==-1)X=X.slice(0,G)+J+X.slice(G+Y.length)}return X.trim()}function x3($){let X=new Map,Z=new Map,Q=/(['"])([^'"]{10,})\1/g,Y;while((Y=Q.exec($))!==null){let W=Y[2];Z.set(W,(Z.get(W)||0)+1)}let J=0,G=$;for(let[W,K]of Z)if(K>1){let _=`__STR_${J++}__`;X.set(_,W);let U=W.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),F=new RegExp(`(['"])${U}\\1`,"g");G=G.replace(F,_)}return{content:G,pool:X,count:X.size}}function S3($,X={}){let Z={...Z6,...X},Q=new Blob([$]).size,Y=$,J=[],G=[],W=[],K=[],_=0;if(Z.target==="production")Z.constants={...Z.constants,__ENV__:"production"};if(Z.deadCodeElimination){let z=T3(Y,Z.constants);if(Y=z.content,z.removed.length>0)J.push("Dead code elimination"),G.push(...z.removed.map((j)=>`Removed: ${j}`))}if(Z.constantFolding&&Object.keys(Z.constants).length>0){let z=C3(Y,Z.constants);if(Y=z.content,K=z.folded,K.length>0)J.push("Constant folding")}if(Z.treeShake){if(W=R3(Y,Z.preserveDirectives),W.length>0)J.push("Tree shaking")}if(Z.stringPooling){let z=x3(Y);if(Y=z.content,_=z.count,_>0)J.push("String pooling")}if(Z.minifyHtml){let z=k3(Y);if(z.length<Y.length)Y=z,J.push("HTML minification")}let U=new Blob([Y]).size,F=Q>0?Math.round((1-U/Q)*100):0;return{content:Y,originalSize:Q,optimizedSize:U,reduction:F,appliedOptimizations:J,removedDirectives:W,foldedConstants:K,pooledStrings:_,warnings:G}}async function dJ($,X={}){let Z={...Z6,...X},Q=new Map,Y=[],J=0,G=0,W=new Set;for(let[F,z]of $){let j=S3(z,Z);Q.set(F,j),J+=j.originalSize,G+=j.optimizedSize,Y.push(...j.warnings.map((L)=>`${F}: ${L}`));let H=Y6(z);for(let L of H)W.add(L.name)}let K;if(Z.treeShake)K=D3(Array.from(W));let _;if(Z.stringPooling)_=new Map;let U=J>0?Math.round((1-G/J)*100):0;return{templates:Q,directiveBundle:K,stringPool:_,totalOriginalSize:J,totalOptimizedSize:G,overallReduction:U,warnings:Y}}function P3($){return $.charAt(0).toUpperCase()+$.slice(1)}function W6($,X){let Z={},Q=$.trim();if(Q.startsWith("{"))Q=Q.slice(1);if(Q.endsWith("}"))Q=Q.slice(0,-1);if(Q=Q.trim(),!Q)return Z;let Y=0;while(Y<Q.length){while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Y>=Q.length)break;let J="";if(Q[Y]==='"'||Q[Y]==="'"){let K=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==K)if(Q[Y]==="\\"&&Y+1<Q.length)J+=Q[Y+1],Y+=2;else J+=Q[Y],Y++;Y++}else while(Y<Q.length&&/[\w$]/.test(Q[Y]))J+=Q[Y],Y++;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Q[Y]===":")Y++;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;let G,W=Y;if(Q[Y]==='"'||Q[Y]==="'"){let K=Q[Y];Y++;let _="";while(Y<Q.length&&Q[Y]!==K)if(Q[Y]==="\\"&&Y+1<Q.length)_+=Q[Y+1],Y+=2;else _+=Q[Y],Y++;Y++,G=_}else if(Q[Y]==="{"){let K=1;Y++;while(Y<Q.length&&K>0){if(Q[Y]==="{")K++;else if(Q[Y]==="}")K--;else if(Q[Y]==='"'||Q[Y]==="'"){let U=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==U){if(Q[Y]==="\\")Y++;Y++}}Y++}let _=Q.slice(W,Y);G=W6(_,X)}else if(Q[Y]==="["){let K=1;Y++;while(Y<Q.length&&K>0){if(Q[Y]==="[")K++;else if(Q[Y]==="]")K--;else if(Q[Y]==='"'||Q[Y]==="'"){let U=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==U){if(Q[Y]==="\\")Y++;Y++}}Y++}let _=Q.slice(W,Y);try{G=JSON.parse(_.replace(/'/g,'"'))}catch{G=_}}else{let K="";while(Y<Q.length&&Q[Y]!==","&&!/\s/.test(Q[Y]))K+=Q[Y],Y++;if(K=K.trim(),K==="true")G=!0;else if(K==="false")G=!1;else if(K==="null")G=null;else if(K==="undefined")G=void 0;else if(/^-?\d+(\.\d+)?$/.test(K))G=Number(K);else if(K in X)G=X[K];else G=K}if(J)Z[J]=G;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Q[Y]===",")Y++}return Z}function lJ($,X,Z){let Q=[];for(let[Y,J]of Object.entries(X)){let G=$[Y];if(J.required&&(G===void 0||G===null)){Q.push(`Component "${Z}": Missing required prop "${Y}"`);continue}if(G===void 0||G===null)continue;let W=Array.isArray(J.type)?J.type:[J.type];if(!W.includes("any")){let K=b3(G);if(!W.includes(K))Q.push(`Component "${Z}": Prop "${Y}" expected ${W.join(" | ")}, got ${K}`)}if(J.validator&&!J.validator(G))Q.push(`Component "${Z}": Prop "${Y}" failed custom validation`)}return Q}function iJ($,X){let Z={...$};for(let[Q,Y]of Object.entries(X))if(Z[Q]===void 0&&Y.default!==void 0)Z[Q]=typeof Y.default==="function"?Y.default():Y.default;return Z}function b3($){if(Array.isArray($))return"array";if($===null)return"null";return typeof $}var y3={name:"component",handler:async($,X,Z,Q)=>{if(X.length<1)return s1("Component","component directive requires at least the component name",r1.INVALID_DIRECTIVE_SYNTAX);let Y=X[0].replace(/['"]/g,""),J={};if(X.length>1)try{let U=X.slice(1).join(",").trim();if(U.startsWith("{")){if(J=J6(U,Z),Object.keys(J).length===0)J=W6(U,Z)}else{let F=U.trim(),z=Z[F];if(z&&typeof z==="object"&&!Array.isArray(z))J=z}}catch(U){let F=U instanceof Error?U.message:String(U);return console.error("Component props parsing error:",F),s1("Component",`Error parsing component props: ${F}`,r1.EVALUATION_ERROR)}let G=Z.__stx_options||{},W=G.componentsDir||"components",K=new Set;if(!Z.__processedComponents)Z.__processedComponents=new Set;let _=Z.__processedComponents;try{return await G6(Y,J,"",W,Z,Q,G,_,K)}catch(U){console.error("Component rendering error:",U);let F=U instanceof Error?U.message:String(U);return s1("Component",`Error rendering component: ${F}`,r1.COMPONENT_RENDER_ERROR)}},hasEndTag:!1};function aJ(){return[y3]}import{mkdir as v3,readFile as g3,readdir as f3,stat as K6,writeFile as h3}from"fs/promises";import U0 from"path";var F6=new Set(["constructor","connectedCallback","disconnectedCallback","attributeChangedCallback","adoptedCallback"]);function d3($){return $.replace(/\.stx$/i,"").split(/[^a-z0-9]+/i).filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join("")}function s$($){return $.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").toLowerCase()}function u3($){return/^[a-z][.0-9_a-z-]*-[.0-9_a-z-]*$/.test($)&&!$.startsWith("xml")&&!/[A-Z]/.test($)}function m3($){if($===!0)return"open";if($==="open"||$==="closed")return $;return!1}async function p3($){let X=[];async function Z(Q){let Y=await f3(Q,{withFileTypes:!0});Y.sort((J,G)=>J.name.localeCompare(G.name));for(let J of Y){let G=U0.join(Q,J.name);if(J.isDirectory()){if(!J.name.startsWith(".")&&J.name!=="node_modules")await Z(G)}else if(J.isFile()&&J.name.endsWith(".stx")&&!/\.(?:test|spec)\.stx$/i.test(J.name))X.push(G)}}return await Z($),X}function c3($,X){let Z=$.match(/<script\b(?=[^>]*(?:\bcomponent\b|\bstx:component\b))[^>]*>([\s\S]*?)<\/script>/i);if(!Z)return{};let Q=Z[1].trim();if(!Q)return{};try{return JSON.parse(Q)}catch(Y){throw Error(`${X}: <script component> must contain JSON metadata (${Y.message})`)}}function l3($,X){let Z={},Q=[...$.matchAll(/<script\b([^>]*)>([\s\S]*?)<\/script>/gi)];for(let Y of Q){if(!/\bclient\b/i.test(Y[1])||/\bcomponent\b|\bstx:component\b/i.test(Y[1]))continue;let J;try{J=new Bun.Transpiler({loader:"ts"}).transformSync(Y[2])}catch(K){throw Error(`${X}: failed to transpile <script client> (${K.message})`)}let G=/(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(([^)]*)\)\s*\{/g,W;while(W=G.exec(J)){let K=W[1];if(F6.has(K))throw Error(`${X}: client method "${K}" is reserved`);let _=G.lastIndex,U=1,F="",z=!1,j=_;for(;j<J.length&&U>0;j++){let L=J[j];if(z){z=!1;continue}if(F){if(L==="\\")z=!0;else if(L===F)F="";continue}if(L==='"'||L==="'"||L==="`")F=L;else if(L==="{")U++;else if(L==="}")U--}if(U!==0)throw Error(`${X}: unterminated client function "${K}"`);let H=W[0].includes("async")?"async ":"";Z[K]=`${H}${K}(${W[2]}) {${J.slice(_,j-1)}}`,G.lastIndex=j}}return Z}function i3($){let X=$.match(/<template\b(?![^>]*\bshadowrootmode\b)[^>]*>([\s\S]*?)<\/template>/i);return(X?X[1]:$).replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,"").trim()}function _6($){return[...$.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi)].map((X)=>X[1].trim()).filter(Boolean).join(`
|
|
198
|
+
`}function T3($,X={}){let Z=[],Q=/@if\(([^)]+)\)[\s\S]*?@endif/g,Y=$.matchAll(Q);for(let _ of Y){let U=_[1].trim();if(r$(U,X)===!1)Z.push({start:_.index,end:_.index+_[0].length,reason:`@if condition always false: ${U}`})}let J=/@unless\(([^)]+)\)[\s\S]*?@endunless/g,G=$.matchAll(J);for(let _ of G){let U=_[1].trim();if(r$(U,X)===!0)Z.push({start:_.index,end:_.index+_[0].length,reason:`@unless condition always true: ${U}`})}let W=/@env\(['"]development['"]\)[\s\S]*?@endenv/g;if(X.__ENV__==="production"){let _=$.matchAll(W);for(let U of _)Z.push({start:U.index,end:U.index+U[0].length,reason:"Development-only code in production build"})}let K=/@debug[\s\S]*?@enddebug/g;if(X.__ENV__==="production"){let _=$.matchAll(K);for(let U of _)Z.push({start:U.index,end:U.index+U[0].length,reason:"Debug code in production build"})}return Z}function C3($,X={}){let Z=T3($,X),Q=[];Z.sort((J,G)=>G.start-J.start);let Y=$;for(let J of Z)Y=Y.slice(0,J.start)+Y.slice(J.end),Q.push(J.reason);return{content:Y,removed:Q}}function r$($,X){if($==="true")return!0;if($==="false")return!1;if($==="null")return null;if(/^\d+$/.test($))return Number.parseInt($,10);if(/^\d+\.\d+$/.test($))return Number.parseFloat($);if(/^['"].*['"]$/.test($))return $.slice(1,-1);if($ in X)return X[$];let Z=$.match(/^(\w+)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/);if(Z){let[,Q,Y,J]=Z,G=Q in X?X[Q]:void 0,W=r$(J,X);if(G!==void 0&&W!==void 0)switch(Y){case"==":case"===":return G===W;case"!=":case"!==":return G!==W;case">":return G>W;case"<":return G<W;case">=":return G>=W;case"<=":return G<=W}}return}function k3($,X){let Z=[],Q=$;return Q=Q.replace(/\{\{\s*(\w+)\s*\}\}/g,(Y,J)=>{if(J in X)return Z.push(`{{ ${J} }} -> ${X[J]}`),String(X[J]);return Y}),Q=Q.replace(/\{\{\s*(\d+)\s*([+\-*])\s*(\d+)\s*\}\}/g,(Y,J,G,W)=>{let K=Number.parseInt(J,10),_=Number.parseInt(W,10),U;switch(G){case"+":U=K+_;break;case"-":U=K-_;break;case"*":U=K*_;break;default:return Y}return Z.push(`{{ ${J} ${G} ${W} }} -> ${U}`),String(U)}),{content:Q,folded:Z}}function x3($){let X=$,Z=[],Q=0;X=X.replace(/<(pre|code|script|style)([^>]*)>([\s\S]*?)<\/\1>/gi,(Y)=>{let J=`__PRESERVE_${Q++}__`;return Z.push({marker:J,content:Y}),J}),X=X.replace(/\{\{([\s\S]*?)\}\}/g,(Y)=>{let J=`__PRESERVE_${Q++}__`;return Z.push({marker:J,content:Y}),J}),X=X.replace(/\{\{--([\s\S]*?)--\}\}/g,""),X=X.replace(/<!--[\s\S]*?-->/g,""),X=X.replace(/>\s+</g,"><"),X=X.replace(/^\s+/gm,""),X=X.replace(/\s+$/gm,""),X=X.replace(/\s{2,}/g," ");for(let{marker:Y,content:J}of Z){let G=X.indexOf(Y);if(G!==-1)X=X.slice(0,G)+J+X.slice(G+Y.length)}return X.trim()}function S3($){let X=new Map,Z=new Map,Q=/(['"])([^'"]{10,})\1/g,Y;while((Y=Q.exec($))!==null){let W=Y[2];Z.set(W,(Z.get(W)||0)+1)}let J=0,G=$;for(let[W,K]of Z)if(K>1){let _=`__STR_${J++}__`;X.set(_,W);let U=W.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),F=new RegExp(`(['"])${U}\\1`,"g");G=G.replace(F,_)}return{content:G,pool:X,count:X.size}}function P3($,X={}){let Z={...Z6,...X},Q=new Blob([$]).size,Y=$,J=[],G=[],W=[],K=[],_=0;if(Z.target==="production")Z.constants={...Z.constants,__ENV__:"production"};if(Z.deadCodeElimination){let z=C3(Y,Z.constants);if(Y=z.content,z.removed.length>0)J.push("Dead code elimination"),G.push(...z.removed.map((j)=>`Removed: ${j}`))}if(Z.constantFolding&&Object.keys(Z.constants).length>0){let z=k3(Y,Z.constants);if(Y=z.content,K=z.folded,K.length>0)J.push("Constant folding")}if(Z.treeShake){if(W=D3(Y,Z.preserveDirectives),W.length>0)J.push("Tree shaking")}if(Z.stringPooling){let z=S3(Y);if(Y=z.content,_=z.count,_>0)J.push("String pooling")}if(Z.minifyHtml){let z=x3(Y);if(z.length<Y.length)Y=z,J.push("HTML minification")}let U=new Blob([Y]).size,F=Q>0?Math.round((1-U/Q)*100):0;return{content:Y,originalSize:Q,optimizedSize:U,reduction:F,appliedOptimizations:J,removedDirectives:W,foldedConstants:K,pooledStrings:_,warnings:G}}async function mJ($,X={}){let Z={...Z6,...X},Q=new Map,Y=[],J=0,G=0,W=new Set;for(let[F,z]of $){let j=P3(z,Z);Q.set(F,j),J+=j.originalSize,G+=j.optimizedSize,Y.push(...j.warnings.map((L)=>`${F}: ${L}`));let H=Y6(z);for(let L of H)W.add(L.name)}let K;if(Z.treeShake)K=w3(Array.from(W));let _;if(Z.stringPooling)_=new Map;let U=J>0?Math.round((1-G/J)*100):0;return{templates:Q,directiveBundle:K,stringPool:_,totalOriginalSize:J,totalOptimizedSize:G,overallReduction:U,warnings:Y}}function b3($){return $.charAt(0).toUpperCase()+$.slice(1)}function W6($,X){let Z={},Q=$.trim();if(Q.startsWith("{"))Q=Q.slice(1);if(Q.endsWith("}"))Q=Q.slice(0,-1);if(Q=Q.trim(),!Q)return Z;let Y=0;while(Y<Q.length){while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Y>=Q.length)break;let J="";if(Q[Y]==='"'||Q[Y]==="'"){let K=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==K)if(Q[Y]==="\\"&&Y+1<Q.length)J+=Q[Y+1],Y+=2;else J+=Q[Y],Y++;Y++}else while(Y<Q.length&&/[\w$]/.test(Q[Y]))J+=Q[Y],Y++;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Q[Y]===":")Y++;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;let G,W=Y;if(Q[Y]==='"'||Q[Y]==="'"){let K=Q[Y];Y++;let _="";while(Y<Q.length&&Q[Y]!==K)if(Q[Y]==="\\"&&Y+1<Q.length)_+=Q[Y+1],Y+=2;else _+=Q[Y],Y++;Y++,G=_}else if(Q[Y]==="{"){let K=1;Y++;while(Y<Q.length&&K>0){if(Q[Y]==="{")K++;else if(Q[Y]==="}")K--;else if(Q[Y]==='"'||Q[Y]==="'"){let U=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==U){if(Q[Y]==="\\")Y++;Y++}}Y++}let _=Q.slice(W,Y);G=W6(_,X)}else if(Q[Y]==="["){let K=1;Y++;while(Y<Q.length&&K>0){if(Q[Y]==="[")K++;else if(Q[Y]==="]")K--;else if(Q[Y]==='"'||Q[Y]==="'"){let U=Q[Y];Y++;while(Y<Q.length&&Q[Y]!==U){if(Q[Y]==="\\")Y++;Y++}}Y++}let _=Q.slice(W,Y);try{G=JSON.parse(_.replace(/'/g,'"'))}catch{G=_}}else{let K="";while(Y<Q.length&&Q[Y]!==","&&!/\s/.test(Q[Y]))K+=Q[Y],Y++;if(K=K.trim(),K==="true")G=!0;else if(K==="false")G=!1;else if(K==="null")G=null;else if(K==="undefined")G=void 0;else if(/^-?\d+(\.\d+)?$/.test(K))G=Number(K);else if(K in X)G=X[K];else G=K}if(J)Z[J]=G;while(Y<Q.length&&/\s/.test(Q[Y]))Y++;if(Q[Y]===",")Y++}return Z}function aJ($,X,Z){let Q=[];for(let[Y,J]of Object.entries(X)){let G=$[Y];if(J.required&&(G===void 0||G===null)){Q.push(`Component "${Z}": Missing required prop "${Y}"`);continue}if(G===void 0||G===null)continue;let W=Array.isArray(J.type)?J.type:[J.type];if(!W.includes("any")){let K=y3(G);if(!W.includes(K))Q.push(`Component "${Z}": Prop "${Y}" expected ${W.join(" | ")}, got ${K}`)}if(J.validator&&!J.validator(G))Q.push(`Component "${Z}": Prop "${Y}" failed custom validation`)}return Q}function rJ($,X){let Z={...$};for(let[Q,Y]of Object.entries(X))if(Z[Q]===void 0&&Y.default!==void 0)Z[Q]=typeof Y.default==="function"?Y.default():Y.default;return Z}function y3($){if(Array.isArray($))return"array";if($===null)return"null";return typeof $}var v3={name:"component",handler:async($,X,Z,Q)=>{if(X.length<1)return s1("Component","component directive requires at least the component name",r1.INVALID_DIRECTIVE_SYNTAX);let Y=X[0].replace(/['"]/g,""),J={};if(X.length>1)try{let U=X.slice(1).join(",").trim();if(U.startsWith("{")){if(J=J6(U,Z),Object.keys(J).length===0)J=W6(U,Z)}else{let F=U.trim(),z=Z[F];if(z&&typeof z==="object"&&!Array.isArray(z))J=z}}catch(U){let F=U instanceof Error?U.message:String(U);return console.error("Component props parsing error:",F),s1("Component",`Error parsing component props: ${F}`,r1.EVALUATION_ERROR)}let G=Z.__stx_options||{},W=G.componentsDir||"components",K=new Set;if(!Z.__processedComponents)Z.__processedComponents=new Set;let _=Z.__processedComponents;try{return await G6(Y,J,"",W,Z,Q,G,_,K)}catch(U){console.error("Component rendering error:",U);let F=U instanceof Error?U.message:String(U);return s1("Component",`Error rendering component: ${F}`,r1.COMPONENT_RENDER_ERROR)}},hasEndTag:!1};function sJ(){return[v3]}import{mkdir as g3,readFile as f3,readdir as h3,stat as K6,writeFile as d3}from"fs/promises";import U0 from"path";var F6=new Set(["constructor","connectedCallback","disconnectedCallback","attributeChangedCallback","adoptedCallback"]);function u3($){return $.replace(/\.stx$/i,"").split(/[^a-z0-9]+/i).filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join("")}function s$($){return $.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").toLowerCase()}function m3($){return/^[a-z][.0-9_a-z-]*-[.0-9_a-z-]*$/.test($)&&!$.startsWith("xml")&&!/[A-Z]/.test($)}function p3($){if($===!0)return"open";if($==="open"||$==="closed")return $;return!1}async function c3($){let X=[];async function Z(Q){let Y=await h3(Q,{withFileTypes:!0});Y.sort((J,G)=>J.name.localeCompare(G.name));for(let J of Y){let G=U0.join(Q,J.name);if(J.isDirectory()){if(!J.name.startsWith(".")&&J.name!=="node_modules")await Z(G)}else if(J.isFile()&&J.name.endsWith(".stx")&&!/\.(?:test|spec)\.stx$/i.test(J.name))X.push(G)}}return await Z($),X}function l3($,X){let Z=$.match(/<script\b(?=[^>]*(?:\bcomponent\b|\bstx:component\b))[^>]*>([\s\S]*?)<\/script>/i);if(!Z)return{};let Q=Z[1].trim();if(!Q)return{};try{return JSON.parse(Q)}catch(Y){throw Error(`${X}: <script component> must contain JSON metadata (${Y.message})`)}}function i3($,X){let Z={},Q=[...$.matchAll(/<script\b([^>]*)>([\s\S]*?)<\/script>/gi)];for(let Y of Q){if(!/\bclient\b/i.test(Y[1])||/\bcomponent\b|\bstx:component\b/i.test(Y[1]))continue;let J;try{J=new Bun.Transpiler({loader:"ts"}).transformSync(Y[2])}catch(K){throw Error(`${X}: failed to transpile <script client> (${K.message})`)}let G=/(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(([^)]*)\)\s*\{/g,W;while(W=G.exec(J)){let K=W[1];if(F6.has(K))throw Error(`${X}: client method "${K}" is reserved`);let _=G.lastIndex,U=1,F="",z=!1,j=_;for(;j<J.length&&U>0;j++){let L=J[j];if(z){z=!1;continue}if(F){if(L==="\\")z=!0;else if(L===F)F="";continue}if(L==='"'||L==="'"||L==="`")F=L;else if(L==="{")U++;else if(L==="}")U--}if(U!==0)throw Error(`${X}: unterminated client function "${K}"`);let H=W[0].includes("async")?"async ":"";Z[K]=`${H}${K}(${W[2]}) {${J.slice(_,j-1)}}`,G.lastIndex=j}}return Z}function a3($){let X=$.match(/<template\b(?![^>]*\bshadowrootmode\b)[^>]*>([\s\S]*?)<\/template>/i);return(X?X[1]:$).replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,"").trim()}function _6($){return[...$.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi)].map((X)=>X[1].trim()).filter(Boolean).join(`
|
|
199
199
|
|
|
200
|
-
`)}function
|
|
201
|
-
`)}function
|
|
200
|
+
`)}function r3($){if(!$)return null;let X=$.replace(/\s*\|\s*(?:undefined|null)\b/g,"").trim();if(/^string$/.test(X))return"string";if(/^number$/.test(X))return"number";if(/^boolean$/.test(X))return"boolean";if(/^(?:'[^']*'|"[^"]*")(?:\s*\|\s*(?:'[^']*'|"[^"]*"))*$/.test(X))return"string";return"object"}function s3($){if($===void 0)return"object";if($==="true"||$==="false")return"boolean";if(/^-?\d+(?:\.\d+)?$/.test($))return"number";if(/^['"`]/.test($))return"string";return"object"}function n3($){if($==="true")return!0;if($==="false")return!1;if(/^-?\d+(?:\.\d+)?$/.test($))return Number($);if(/^['"`]/.test($))return $.slice(1,-1);try{return JSON.parse($)}catch{return}}function o3($){let X=[],Z=0,Q=$.replace(/\{\{--[\s\S]*?--\}\}/g,""),Y=/@(if|elseif|else|endif|foreach|endforeach)\s*/g,J,G=(K)=>{if(Q[K]!=="(")return null;let _=0,U="";for(let F=K;F<Q.length;F++){let z=Q[F];if(U!==""){if(z==="\\")F++;else if(z===U)U="";continue}if(z==="'"||z==='"'||z==="`"){U=z;continue}if(z==="(")_++;else if(z===")"){if(_--,_===0)return{expression:Q.slice(K+1,F),end:F+1}}}return null},W=(K)=>{if(K==="")return;let _=0,U=/\{!!\s*([\s\S]*?)\s*!!\}|\{\{\s*([\s\S]*?)\s*\}\}/g,F;while(F=U.exec(K)){if(F.index>_)X.push(`out += ${JSON.stringify(K.slice(_,F.index))};`);X.push(F[1]!==void 0?`out += __raw(${F[1]});`:`out += __escape(${F[2]});`),_=F.index+F[0].length}if(_<K.length)X.push(`out += ${JSON.stringify(K.slice(_))};`)};while(J=Y.exec(Q)){W(Q.slice(Z,J.index)),Z=J.index+J[0].length;let _=J[1]==="if"||J[1]==="elseif"||J[1]==="foreach"?G(Z):null;if(_)Z=_.end,Y.lastIndex=_.end;let U=_?.expression;switch(J[1]){case"if":X.push(`if (${U}) {`);break;case"elseif":X.push(`} else if (${U}) {`);break;case"else":X.push("} else {");break;case"endif":case"endforeach":X.push("}");break;case"foreach":{let F=/^([\s\S]+?)\s+as\s+(?:([A-Za-z_$][\w$]*)\s*=>\s*)?([A-Za-z_$][\w$]*)$/.exec((U||"").trim());if(!F){X.push(`out += ${JSON.stringify(J[0]+(_?`(${U})`:""))};`);break}let[,z,j,H]=F;X.push(j?`for (const [${j}, ${H}] of __entries(${z})) {`:`for (const ${H} of __values(${z})) {`);break}}}return W(Q.slice(Z)),X.join(`
|
|
201
|
+
`)}function t3($){let X=$.trim().replace(/^\{/,"").replace(/\}$/,""),Z=[],Q=0;while(Q<X.length){let Y=/\s*([A-Za-z_$][\w$]*)\s*:/y;Y.lastIndex=Q;let J=Y.exec(X);if(!J)break;Q=Y.lastIndex;let G=0,W="",K=Q;while(Q<X.length){let U=X[Q];if(W){if(U==="\\")Q++;else if(U===W)W=""}else if(U==="'"||U==='"'||U==="`")W=U;else if(U==="{"||U==="["||U==="(")G++;else if(U==="}"||U==="]"||U===")")G--;else if(U===","&&G===0)break;Q++}let _=X.slice(K,Q).trim();if(_)Z.push([J[1],_]);Q++}return Z}function e3($,X,Z){let Y=[...$.matchAll(/<script\b([^>]*)>([\s\S]*?)<\/script>/gi)].find((z)=>!/\bcomponent\b|\bstx:component\b|\bclient\b/i.test(z[1]));if(!Y)return{imports:[],body:"",propNames:[],defaults:{},declared:{}};let J=Y[2],G=[],W=[],K={},_={};J=J.replace(/^\s*import\s+[\s\S]*?from\s*['"][^'"]+['"];?\s*$/gm,(z)=>{if(/from\s*['"]stx['"]/.test(z))return"";return G.push(z.trim().replace(/(from\s*['"])(\.[^'"]*)(['"])/,(j,H,L,O)=>{let A=U0.resolve(U0.dirname(X),L),V=U0.relative(Z,A);return`${H}${V.startsWith(".")?V:`./${V}`}${O}`})),""});let F=/const\s*\{([^}]*)\}\s*=\s*(?:withDefaults\s*\(\s*)?defineProps\s*<[^>]*>\s*\(\s*\)\s*(?:,\s*(\{[\s\S]*?\})\s*,?\s*\))?/.exec(J);if(F){for(let z of F[1].split(",")){let j=z.split(":")[0].trim();if(j)W.push(j)}for(let[z,j]of t3(F[2]||""))K[z]=j;J=J.replace(F[0],"")}for(let z of J.matchAll(/(?:export\s+)?interface\s+[A-Za-z_$][\w$]*\s*\{([\s\S]*?)\n\}/g))for(let j of z[1].matchAll(/^\s*(?:\/\*\*[\s\S]*?\*\/\s*)?([A-Za-z_$][\w$]*)\??\s*:\s*([^\n;]+)/gm))_[j[1]]=j[2].trim();return J=J.replace(/(?:export\s+)?interface\s+[A-Za-z_$][\w$]*\s*\{[\s\S]*?\n\}/g,""),{imports:G,body:J.trim(),propNames:W,defaults:K,declared:_}}function $4($){let X=new Set;return{template:$.replace(/\s@([a-z][\w:-]*)(\.[\w.-]+)?\s*=\s*(["'])([A-Za-z_$][\w$]*)\3/gi,(Q,Y,J,G,W)=>{let K=Y.toLowerCase();X.add(K);let _=(J||"").split(".").filter(Boolean).join(" ");return` data-stx-on-${K}="${W}"${_?` data-stx-mod-${K}="${_}"`:""}`}),eventTypes:[...X].sort()}}function X4($){let X=[];return{template:$.replace(/\s:([a-z][\w:-]*)\s*=\s*(["'])([\w$.]+)\2/gi,(Q,Y,J,G)=>{let W=X.length;return X.push({id:W,name:Y,expression:G}),` data-stx-bind-${W}=""`}),bindings:X}}function Z4($){let X=new Set;for(let Z of $.matchAll(/<slot\b([^>]*)>/gi))X.add(Z[1].match(/\bname\s*=\s*["']([^"']+)["']/i)?.[1]||"");return[...X].map((Z)=>({name:Z}))}function Q4($){return[...new Set([...$.matchAll(/(--[a-z0-9_-]+)\s*:/gi)].map((X)=>X[1]))].sort().map((X)=>({name:X}))}function U6($,X){if(!X||!new Set(["string","number","boolean","object","array"]).has(X.type))throw Error(`Property "${$}" must declare one of: string, number, boolean, object, array`);return{...X,reflect:X.reflect??X.attribute!==!1}}async function Y4($,X,Z){let Q=U0.isAbsolute(X.file)?X.file:U0.resolve($,X.file),Y=await f3(Q,"utf8"),J=l3(Y,Q),G=U0.basename(Q,".stx"),W=X.name||J.name||u3(G),K=`${s$(Z.prefix||"stx")}-${s$(G)}`,_=X.tag||J.tag||K;if(!W||!/^[A-Za-z_$][\w$]*$/.test(W))throw Error(`${Q}: invalid component class name "${W}"`);if(!m3(_))throw Error(`${Q}: invalid custom-element tag "${_}"; tags must be lowercase and contain a hyphen`);let U=X.properties||J.properties||J.props||{},F=Object.fromEntries(Object.entries(U).map(([E,q])=>[E,U6(E,q)])),z=$4(a3(Y)),j=X4(z.template),H=e3(Y,Q,U0.resolve(Z.outputDir)),L=o3(j.template);for(let E of H.propNames){if(F[E])continue;let q=H.defaults[E];F[E]=U6(E,{type:r3(H.declared[E])??s3(q),...q===void 0?{}:{default:n3(q)}})}let O=J.methods||{},A=X.methods||{},V=i3(Y,Q);return{file:U0.relative($,Q),sourcePath:Q,name:W,tag:_,description:X.description||J.description||"",template:j.template,styles:_6(Y),shadowMode:p3(X.shadowDOM??J.shadowDOM??Z.shadowDOM),progressive:X.progressive??J.progressive??Z.progressive??!0,properties:F,events:X.events||J.events||{},methods:{...O,...A,...V},eventTypes:z.eventTypes,bindings:j.bindings,slots:Z4(j.template),cssProperties:Q4(_6(Y)),scope:H,render:L}}function J4(){let $=JSON.stringify("\\{!!\\s*([\\w$.]+)\\s*!!\\}"),X=JSON.stringify("\\{\\{\\s*([\\w$.]+)\\s*\\}\\}");return`const HTMLElementBase = globalThis.HTMLElement || class {};
|
|
202
202
|
|
|
203
203
|
const escapeHTML = (value) => String(value ?? '')
|
|
204
204
|
.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>')
|
|
@@ -484,7 +484,7 @@ export function defineComponent(Component, definition) {
|
|
|
484
484
|
}
|
|
485
485
|
return Component;
|
|
486
486
|
}
|
|
487
|
-
`}function
|
|
487
|
+
`}function G4($){let X=JSON.stringify({tag:$.tag,template:$.template,styles:$.styles,shadowMode:$.shadowMode,progressive:$.progressive,properties:$.properties,eventTypes:$.eventTypes,bindings:$.bindings},null,2),Z=Object.entries($.methods).map(([W,K])=>{if(F6.has(W))throw Error(`${$.sourcePath}: method "${W}" is reserved`);if(/^(?:async\s+)?[A-Za-z_$][\w$]*\s*\(/.test(K.trim()))return` ${K.trim()}`;return` ${W}($event) {
|
|
488
488
|
${K}
|
|
489
489
|
}`}).join(`
|
|
490
490
|
|
|
@@ -509,7 +509,7 @@ ${Z}${G}
|
|
|
509
509
|
|
|
510
510
|
defineComponent(${$.name}, ${X});
|
|
511
511
|
export default ${$.name};
|
|
512
|
-
`}function n1($){switch($.type){case"boolean":return"boolean";case"number":return"number";case"array":return"unknown[]";case"object":return"Record<string, unknown>";default:return"string"}}function
|
|
512
|
+
`}function n1($){switch($.type){case"boolean":return"boolean";case"number":return"number";case"array":return"unknown[]";case"object":return"Record<string, unknown>";default:return"string"}}function W4($){let X=Object.entries($.properties).map(([J,G])=>` ${J}${G.required?"":"?"}: ${n1(G)}`).join(`
|
|
513
513
|
`),Z=Object.entries($.properties).map(([J,G])=>` ${J}: ${n1(G)}`).join(`
|
|
514
514
|
`),Q=Object.entries($.events).map(([J,G])=>` ${JSON.stringify(J)}: CustomEvent<${G.detailType||"unknown"}>`).join(`
|
|
515
515
|
`),Y=Object.keys($.methods).map((J)=>` ${J}($event?: Event): unknown`).join(`
|
|
@@ -536,7 +536,7 @@ declare global {
|
|
|
536
536
|
}
|
|
537
537
|
|
|
538
538
|
export default ${$.name}
|
|
539
|
-
`}function
|
|
539
|
+
`}function K4($){return`declare global {
|
|
540
540
|
namespace JSX {
|
|
541
541
|
interface IntrinsicElements {
|
|
542
542
|
${$.map((Z)=>{let Q=Object.entries(Z.properties).map(([J,G])=>` ${JSON.stringify(J)}?: ${n1(G)}`).join(`
|
|
@@ -555,9 +555,9 @@ ${Y}
|
|
|
555
555
|
}
|
|
556
556
|
|
|
557
557
|
export {}
|
|
558
|
-
`}function
|
|
558
|
+
`}function _4($){return{schemaVersion:"1.0.0",modules:$.map((X)=>({kind:"javascript-module",path:`./${X.tag}.js`,declarations:[{kind:"class",name:X.name,description:X.description||void 0,customElement:!0,tagName:X.tag,members:Object.entries(X.properties).map(([Z,Q])=>({kind:"field",name:Z,description:Q.description,type:{text:n1(Q)},default:Q.default===void 0?void 0:JSON.stringify(Q.default),attribute:Q.attribute===!1?void 0:Q.attribute||s$(Z),reflects:Q.reflect})),events:Object.entries(X.events).map(([Z,Q])=>({name:Z,description:Q.description,type:{text:`CustomEvent<${Q.detailType||"unknown"}>`}})),slots:X.slots,cssProperties:X.cssProperties}],exports:[{kind:"js",name:X.name,declaration:{name:X.name,module:`./${X.tag}.js`}}]}))}}function B6($){if(!$.styles)return"";let X=$.styles.replace(/:host\b/g,":scope");if(/\@scope\s*\(/.test(X))return X;return`@scope (${$.tag}) {
|
|
559
559
|
${X}
|
|
560
|
-
}`}function L6($){return $.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{}:;,])\s*/g,"$1").replace(/;}/g,"}").trim()}function
|
|
560
|
+
}`}function L6($){return $.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{}:;,])\s*/g,"$1").replace(/;}/g,"}").trim()}function U4($){let X=JSON.stringify("\\{!!\\s*([\\w$.]+)\\s*!!\\}"),Z=JSON.stringify("\\{\\{\\s*([\\w$.]+)\\s*\\}\\}"),Q=JSON.stringify('<slot(?:\\s+name=["\\\']([^"\\\']+)["\\\'])?\\s*\\/?>(?:<\\/slot>)?'),Y=Object.fromEntries($.map((G)=>[G.tag,{template:G.template,styles:G.styles,shadowMode:G.shadowMode,properties:G.properties}])),J=$.map((G)=>`export const render${G.name} = (props = {}, slots = {}) => renderComponent('${G.tag}', props, slots);`).join(`
|
|
561
561
|
`);return`const definitions = ${JSON.stringify(Y,null,2)};
|
|
562
562
|
const escapeHTML = (value) => String(value ?? '')
|
|
563
563
|
.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>')
|
|
@@ -591,21 +591,21 @@ export function renderComponent(tag, props = {}, slots = {}) {
|
|
|
591
591
|
}
|
|
592
592
|
|
|
593
593
|
${J}
|
|
594
|
-
`}async function
|
|
594
|
+
`}async function eJ($){let X=U0.resolve($.inputDir),Z=U0.resolve($.outputDir);if(!(await K6(X).catch(()=>null))?.isDirectory())throw Error(`Component-library input directory does not exist: ${X}`);let Y=$.components?.length?$.components:(await c3(X)).map((L)=>({file:L}));if(!Y.length)throw Error(`No .stx components found in ${X}`);let J=await Promise.all(Y.map((L)=>Y4(X,L,$)));J.sort((L,O)=>L.tag.localeCompare(O.tag));let G=J.filter((L,O)=>J.findIndex((A)=>A.tag===L.tag)!==O);if(G.length)throw Error(`Duplicate custom-element tag: ${G[0].tag}`);let W=J.filter((L,O)=>J.findIndex((A)=>A.name===L.name)!==O);if(W.length)throw Error(`Duplicate component class name: ${W[0].name}`);await g3(Z,{recursive:!0});let K=[],_=async(L,O)=>{let A=U0.join(Z,L);return await d3(A,O.endsWith(`
|
|
595
595
|
`)?O:`${O}
|
|
596
|
-
`,"utf8"),K.push(A),A};await _("runtime.js",
|
|
597
|
-
`);if(await _("index.js",U),await _("ssr.js",
|
|
598
|
-
`)),await _("custom-elements.d.ts",
|
|
596
|
+
`,"utf8"),K.push(A),A};await _("runtime.js",J4());for(let L of J){if(await _(`${L.tag}.js`,G4(L)),$.declarations!==!1)await _(`${L.tag}.d.ts`,W4(L));if($.css!==!1&&L.styles){let O=L.shadowMode?L.styles:B6(L);await _(`${L.tag}.css`,$.minify?L6(O):O)}}let U=J.map((L)=>`export { ${L.name}, default as ${L.name}Element } from './${L.tag}.js';`).join(`
|
|
597
|
+
`);if(await _("index.js",U),await _("ssr.js",U4(J)),$.declarations!==!1)await _("index.d.ts",J.map((L)=>`export * from './${L.tag}.js'`).join(`
|
|
598
|
+
`)),await _("custom-elements.d.ts",K4(J)),await _("ssr.d.ts",`${J.map((L)=>`export declare const render${L.name}: (props?: ${L.name}Props, slots?: Record<string, string>) => string`).join(`
|
|
599
599
|
`)}
|
|
600
600
|
export declare function renderComponent(tag: string, props?: Record<string, unknown>, slots?: Record<string, string>): string
|
|
601
601
|
${J.map((L)=>`import type { ${L.name}Props } from './${L.tag}.js'`).join(`
|
|
602
|
-
`)}`);let F;if($.manifest!==!1)F=await _("custom-elements.json",JSON.stringify(
|
|
602
|
+
`)}`);let F;if($.manifest!==!1)F=await _("custom-elements.json",JSON.stringify(_4(J),null,2));let z;if($.css!==!1){let L=J.filter((O)=>!O.shadowMode&&O.styles).map(B6).join(`
|
|
603
603
|
|
|
604
604
|
`);if(L)z=await _("bundle.css",$.minify?L6(L):L)}let j;if($.bundle!==!1){j=U0.join(Z,"bundle.js");let L;try{L=await Bun.build({entrypoints:[U0.join(Z,"index.js")],outdir:Z,naming:"bundle.js",target:"browser",format:"esm",minify:$.minify??!0,sourcemap:$.sourcemap||"none"})}catch(O){let A=O instanceof AggregateError?O.errors:[O],V=A.map((E)=>String(E).trim()).filter(Boolean).join(`
|
|
605
605
|
`);throw AggregateError(A,`Failed to bundle component library${V?`
|
|
606
606
|
${V}`:""}`)}if(!L.success){let O=L.logs.map((A)=>String(A).trim()).filter(Boolean).join(`
|
|
607
607
|
`);throw AggregateError(L.logs,`Failed to bundle component library${O?`
|
|
608
|
-
${O}`:""}`)}if(K.push(j),$.sourcemap==="external")K.push(`${j}.map`)}let H=await Promise.all(K.map(async(L)=>(await K6(L)).size));return{components:J.map((L)=>({name:L.name,tag:L.tag,source:L.sourcePath,module:U0.join(Z,`${L.tag}.js`)})),files:K,manifest:F,bundle:j,cssBundle:z,totalBytes:H.reduce((L,O)=>L+O,0)}}var{serve:
|
|
608
|
+
${O}`:""}`)}if(K.push(j),$.sourcemap==="external")K.push(`${j}.map`)}let H=await Promise.all(K.map(async(L)=>(await K6(L)).size));return{components:J.map((L)=>({name:L.name,tag:L.tag,source:L.sourcePath,module:U0.join(Z,`${L.tag}.js`)})),files:K,manifest:F,bundle:j,cssBundle:z,totalBytes:H.reduce((L,O)=>L+O,0)}}var{serve:q4}=globalThis.Bun;import o$ from"fs";import W1 from"path";function o1(){return`
|
|
609
609
|
/* Theme selector for code blocks */
|
|
610
610
|
.theme-selector {
|
|
611
611
|
margin: 1rem 0;
|
|
@@ -685,19 +685,19 @@ else {
|
|
|
685
685
|
<span class="frontmatter-label">${X}:</span>
|
|
686
686
|
<span>${Array.isArray(Z)?Z.join(", "):String(Z)}</span>
|
|
687
687
|
</div>`).join("")}
|
|
688
|
-
</div>`}import z6 from"net";async function
|
|
688
|
+
</div>`}import z6 from"net";async function B4($){return new Promise((X)=>{let Z=z6.createServer();Z.once("error",()=>X(!1)),Z.once("listening",()=>{Z.close(()=>X(!0))}),Z.listen($,"0.0.0.0")})}async function L4($){return new Promise((X)=>{let Z=z6.createServer();Z.once("error",()=>X(!1)),Z.once("listening",()=>{Z.close(()=>X(!0))}),Z.listen($,"::")})}async function F4($){if(!await B4($))return!1;return await L4($)}async function h0($,X=20){$=Number($);for(let Z=0;Z<X;Z++){let Q=$+Z;if(await F4(Q))return Q}throw Error(`Could not find an available port between ${$} and ${$+X-1}`)}var z4={title:"stx Development",width:1400,height:900,darkMode:!0,hotReload:!0,titlebarHidden:!1,nativeSidebar:!1,sidebarWidth:260,sidebarConfig:void 0};async function j4(){try{let $=await import("./chunk-c73pyeak.js");if(typeof $.openDevWindow!=="function")return null;return $}catch{return null}}async function G1($,X={}){let Z={...z4,...X},Q=await j4();if(!Q)return console.log(`${B.yellow}\u26A0${B.reset} Native window requested, but @stacksjs/desktop is not available.`),console.log(" Install & build the desktop package to enable --native."),!1;try{let Y=await Q.openDevWindow($,{title:Z.title,width:Z.width,height:Z.height,darkMode:Z.darkMode,hotReload:Z.hotReload,titlebarHidden:Z.titlebarHidden,nativeSidebar:Z.nativeSidebar,sidebarWidth:Z.sidebarWidth,sidebarConfig:Z.sidebarConfig});if(Y&&Z.nativeSidebar)console.log(`${B.green}\u2713${B.reset} Native sidebar enabled (macOS Tahoe style)`);return Y}catch(Y){return console.log(`${B.red}\u2717${B.reset} Could not open native window:`,Y),!1}}function X$($){if($.match(/<Sidebar[\s\S]*?variant=["'](?:tahoe|vibrancy|desktop)["'][\s\S]*?\/>/i)){let Y=$.match(/<script\s+server[^>]*>([\s\S]*?)<\/script>/i);if(Y){let J=Y[1];try{let G=`
|
|
689
689
|
${J}
|
|
690
690
|
return typeof sidebarConfig !== 'undefined' ? sidebarConfig : null;
|
|
691
691
|
`,K=Function(G)();if(K)return K}catch(G){console.warn("Invalid sidebarConfig:",G)}}return{sections:[]}}let Z=$.match(/@nativeSidebar\s*\(\s*(\{[\s\S]*?\})\s*\)/m);if(Z)try{return JSON.parse(Z[1])}catch{console.warn("Invalid @nativeSidebar configuration")}let Q=$.match(/<script\s+native-sidebar[^>]*>([\s\S]*?)<\/script>/i);if(Q)try{let Y=Q[1].match(/(?:export\s+(?:default\s+)?|const\s+\w+\s*=\s*)(\{[\s\S]*\})/m);if(Y)return Function(`return ${Y[1]}`)()}catch(Y){console.warn("Invalid native-sidebar script configuration:",Y)}return}function n$(){console.log(`
|
|
692
|
-
Keyboard shortcuts:`),console.log(` ${B.cyan}o${B.reset} + Enter - Open in browser`),console.log(` ${B.cyan}c${B.reset} + Enter - Clear console`),console.log(` ${B.cyan}q${B.reset} + Enter (or ${B.cyan}Ctrl+C${B.reset}) - Quit server`),console.log(` ${B.cyan}h${B.reset} + Enter - Show this help`)}function
|
|
693
|
-
`)){let J=Q.trim().toLowerCase();Q="",
|
|
692
|
+
Keyboard shortcuts:`),console.log(` ${B.cyan}o${B.reset} + Enter - Open in browser`),console.log(` ${B.cyan}c${B.reset} + Enter - Clear console`),console.log(` ${B.cyan}q${B.reset} + Enter (or ${B.cyan}Ctrl+C${B.reset}) - Quit server`),console.log(` ${B.cyan}h${B.reset} + Enter - Show this help`)}function H4($){console.log(`${B.green}Server running at ${B.cyan}${$}${B.reset}`),console.log(`Press ${B.cyan}Ctrl+C${B.reset} to stop the server`),n$()}function O4($){console.log(`${B.dim}Opening ${B.cyan}${$}${B.dim} in your browser...${B.reset}`),Bun.spawn(["open",$],{stderr:"inherit"})}function d0($,X,Z){if(!process.stdin.isTTY)return;process.stdin.setRawMode(!0),process.stdin.setEncoding("utf8"),process.stdin.resume(),n$();let Q="";process.stdin.on("data",(Y)=>{if(Y==="\x03"){if(Z?.onQuit)Z.onQuit();X(),process.exit(0)}if(Q+=Y,Q.endsWith("\r")||Q.endsWith(`
|
|
693
|
+
`)){let J=Q.trim().toLowerCase();Q="",A4(J,$,X,Z)}})}function A4($,X,Z,Q){switch($){case"o":if(Q?.onOpen)Q.onOpen();else O4(X);break;case"c":if(Q?.onClear)Q.onClear();else console.clear(),H4(X);break;case"q":if(Q?.onQuit)Q.onQuit();console.log(`${B.yellow}Stopping server...${B.reset}`),Z(),process.exit(0);break;case"h":if(Q?.onHelp)Q.onHelp();else n$();break;default:break}}async function t$($,X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=W1.resolve($);if(!o$.existsSync(Y))return console.error(`${B.red}Error: File not found: ${B.bright}${Y}${B.reset}`),!1;if(!Y.endsWith(".md"))return console.error(`${B.red}Error: File must have .md extension: ${B.bright}${Y}${B.reset}`),!1;console.log(`${B.blue}Processing${B.reset} ${B.bright}${$}${B.reset}...`);let J=null,G=async()=>{try{let{content:F,data:z}=await T0(Y,{markdown:{syntaxHighlighting:{serverSide:!0,enabled:!0,defaultTheme:w0.markdown?.syntaxHighlighting?.defaultTheme||"github-dark",highlightUnknownLanguages:!0}}}),j=X.markdown?.syntaxHighlighting||w0.markdown?.syntaxHighlighting,H=j?.defaultTheme||"github-dark",L=["github-dark"],O=j?.additionalThemes||[],V=[...new Set([...L,...O])].map((E)=>`<option value="${E}"${E===H?" selected":""}>${E}</option>`).join(`
|
|
694
694
|
`);return J=`
|
|
695
695
|
<!DOCTYPE html>
|
|
696
696
|
<html lang="en">
|
|
697
697
|
<head>
|
|
698
698
|
<meta charset="UTF-8">
|
|
699
699
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
700
|
-
<title>${
|
|
700
|
+
<title>${N4(z.title||W1.basename(Y))}</title>
|
|
701
701
|
<!-- Syntax highlighting styles -->
|
|
702
702
|
<style id="syntax-theme">
|
|
703
703
|
:root {
|
|
@@ -853,12 +853,12 @@ Keyboard shortcuts:`),console.log(` ${B.cyan}o${B.reset} + Enter - Open in brow
|
|
|
853
853
|
</script>
|
|
854
854
|
</body>
|
|
855
855
|
</html>
|
|
856
|
-
`,!0}catch(F){return console.error(`${B.red}Error processing Markdown file:${B.reset}`,F),!1}};if(!await G())return!1;let K=Z;try{if(K=await h0(Z),K!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${K} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${K}/${B.reset}...`);let _=
|
|
856
|
+
`,!0}catch(F){return console.error(`${B.red}Error processing Markdown file:${B.reset}`,F),!1}};if(!await G())return!1;let K=Z;try{if(K=await h0(Z),K!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${K} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${K}/${B.reset}...`);let _=q4({port:K,fetch(F){if(new URL(F.url).pathname==="/")return new Response(J,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}});return new Response("Not Found",{status:404})},error(F){return new Response(`<pre>${F}
|
|
857
857
|
${F.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});console.clear(),console.log(`
|
|
858
858
|
${B.blue}stx${B.reset} ${B.green}${process.env.stx_VERSION||"v0.0.10"}${B.reset} ${B.dim}ready in ${Math.random()*10+5|0}.${Math.random()*90+10|0} ms${B.reset}`),console.log(`
|
|
859
859
|
${B.bright}\u2192 ${B.cyan}http://localhost:${K}/${B.reset}`),console.log(`
|
|
860
860
|
${B.yellow}Routes:${B.reset}`);let U=W1.relative(process.cwd(),Y);if(console.log(` ${B.green}\u2514\u2500 /${B.reset} \u2192 ${B.bright}${U}${B.reset}`),console.log(`
|
|
861
|
-
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(_.url.toString(),()=>{if(Q)o$.watch(W1.dirname(Y),{recursive:!0}).close();_.stop()}),X.native)await G1(K,{title:W1.basename(Y,".md")});if(Q){let F=W1.dirname(Y);console.log(`${B.blue}Watching ${B.bright}${F}${B.reset} for changes...`);let z=o$.watch(F,{recursive:!0},async(j,H)=>{if(H&&H.endsWith(".md"))console.log(`${B.yellow}File ${B.bright}${H}${B.yellow} changed, reprocessing...${B.reset}`),await G()});process.on("SIGINT",()=>{z.close(),_.stop(),process.exit(0)})}return!0}function
|
|
861
|
+
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(_.url.toString(),()=>{if(Q)o$.watch(W1.dirname(Y),{recursive:!0}).close();_.stop()}),X.native)await G1(K,{title:W1.basename(Y,".md")});if(Q){let F=W1.dirname(Y);console.log(`${B.blue}Watching ${B.bright}${F}${B.reset} for changes...`);let z=o$.watch(F,{recursive:!0},async(j,H)=>{if(H&&H.endsWith(".md"))console.log(`${B.yellow}File ${B.bright}${H}${B.yellow} changed, reprocessing...${B.reset}`),await G()});process.on("SIGINT",()=>{z.close(),_.stop(),process.exit(0)})}return!0}function N4($){return String($??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var{serve:V4}=globalThis.Bun;import E0 from"fs";import Q0 from"path";class j6{clients=new Set;server=null;options;constructor($={}){this.options={wsPort:$.wsPort??3001,showOverlay:$.showOverlay??!0,reconnectInterval:$.reconnectInterval??1000,maxReconnectAttempts:$.maxReconnectAttempts??10,verbose:$.verbose??!1}}start($){let X=$??this.options.wsPort,Z=20;for(let Q=0;Q<Z;Q++)try{if(this.server=Bun.serve({port:X,fetch(Y,J){if(J.upgrade(Y,{data:{}}))return;return new Response("stx Hot Reload Server",{headers:{"Content-Type":"text/plain"}})},websocket:{open:(Y)=>{if(this.clients.add(Y),this.options.verbose)console.log(`[HMR] Client connected (${this.clients.size} total)`);Y.send(JSON.stringify({type:"connected",timestamp:Date.now()}))},close:(Y)=>{if(this.clients.delete(Y),this.options.verbose)console.log(`[HMR] Client disconnected (${this.clients.size} total)`)},message:(Y,J)=>{let G=typeof J==="string"?J:J.toString();if(G==="ping")return;try{let W=JSON.parse(G);if(W.type==="console"&&Array.isArray(W.args)){let K=W.args.join(" "),U={log:"\x1B[36m",warn:"\x1B[33m",error:"\x1B[31m",info:"\x1B[34m"}[W.level]??"\x1B[36m";console.log(`${U}[browser]${W.level!=="log"?` ${W.level}`:""}\x1B[0m ${K}`)}}catch{}}}}),this.options.verbose)console.log(`[HMR] WebSocket server started on port ${X}`);return X}catch(Y){if(Y?.code==="EADDRINUSE"){X++;continue}throw Y}throw Error(`Could not find an available port after ${Z} attempts starting from ${$??this.options.wsPort}`)}stop(){for(let $ of this.clients)try{$.close()}catch{}if(this.clients.clear(),this.server)this.server.stop(),this.server=null;if(this.options.verbose)console.log("[HMR] Server stopped")}broadcast($){let X=JSON.stringify($),Z=0;for(let Q of this.clients)try{if(Q.readyState===1)Q.send(X),Z++}catch{this.clients.delete(Q)}if(this.options.verbose&&Z>0)console.log(`[HMR] Broadcast ${$.type} to ${Z} client(s)`)}reload($){if(this.options.verbose)console.log(`[HMR] Sending reload to ${this.clients.size} client(s) for: ${$||"all"}`);this.broadcast({type:"reload",path:$,timestamp:Date.now()})}updateCss($,X){this.broadcast({type:"css-update",path:$,content:X,timestamp:Date.now()})}error($){this.broadcast({type:"error",content:$,timestamp:Date.now()})}get clientCount(){return this.clients.size}get port(){return this.options.wsPort}}function M4($,X={}){let{showOverlay:Z=!0,reconnectInterval:Q=1000,maxReconnectAttempts:Y=10}=X;return`
|
|
862
862
|
<script>
|
|
863
863
|
(function() {
|
|
864
864
|
// stx Hot Reload Client
|
|
@@ -1057,7 +1057,7 @@ else {
|
|
|
1057
1057
|
};
|
|
1058
1058
|
})();
|
|
1059
1059
|
</script>
|
|
1060
|
-
`}function P0($,X,Z={}){let Q=
|
|
1060
|
+
`}function P0($,X,Z={}){let Q=M4(X,Z),Y=$.lastIndexOf("</body>");if(Y!==-1)return $.slice(0,Y)+Q+$.slice(Y);if($.includes("</html>"))return $.replace("</html>",`${Q}</html>`);return $+Q}function Z$($){let X=$.toLowerCase();return X.endsWith(".css")||X.endsWith(".scss")||X.endsWith(".sass")||X.endsWith(".less")}function Q$($){let X=$.toLowerCase();return[".stx",".html",".htm",".md",".js",".ts",".jsx",".tsx",".json"].some((Q)=>X.endsWith(Q))}function Y$($){return[/^\./,/node_modules/,/\.stx\/output/,/\.stx\/cache/,/~$/,/\.swp$/,/\.swo$/].some((Z)=>Z.test($))}var K1=null;function J$($){if(!K1)K1=new j6($);return K1}function D1(){if(K1)K1.stop(),K1=null}import w1 from"path";var _1={name:"bun-plugin-stx",async setup($){let Z={...await s0(),...$.config?.stx},Q=new Set,Y=Z.webComponents?.enabled?`./${w1.relative(w1.dirname($.config?.outdir||"dist"),Z.webComponents.outputDir||"dist/web-components")}`:"/web-components",J=[];if(Z.webComponents?.enabled)try{let G=await U$(Z,Q);if(J.push(...G),Z.debug&&G.length>0)console.log(`Successfully built ${G.length} web components`)}catch(G){console.error("Failed to build web components:",G)}$.onLoad({filter:/\.stx$/},async({path:G})=>{try{let W=new Set;if(Z.cache&&Z.cachePath){let L=await K$(G,Z);if(L){if(Z.debug)console.log(`Using cached version of ${G}`);return{contents:L,loader:"html"}}}let K=await X5(()=>Bun.file(G).text(),"",(L)=>{throw new $5(`Failed to read stx file: ${G}`,G,void 0,void 0,`File read error: ${L.message}`)});if(!K)throw new $5(`stx file is empty: ${G}`,G);let{scriptContent:_,templateContent:U,allScripts:F}=Z5.time("script-extraction",()=>{let L=K,O=W$(K);if(O)L=O.content.trim();let A=K.match(/<script\b[^>]*>[\s\S]*?<\/script>/gi)||[],V="",E=[];for(let N of A){let I=N.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i)?.[1]||"",M=N.match(/<script\b([^>]*)>/i),w=M?M[1]:"";if(/\bserver\b/i.test(w))V=I;else E.push(N)}let q=L.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"");return{scriptContent:V,templateContent:q,allScripts:E}}),z={__filename:G,__dirname:w1.dirname(G),__stx:{webComponentsPath:Y,builtComponents:J}};await X5(()=>M0(_,z,G),void 0,(L)=>{let O=new e$(`Script execution failed in ${G}: ${L.message}`,G,void 0,void 0,_.substring(0,100));if(G$.log(O,{filePath:G,scriptContent:_}),Z.debug)throw O});let H=await Z5.timeAsync("directive-processing",async()=>{return await V0(U,z,G,Z,W)});if(F.length>0){let{interpolateScriptsInTemplate:L}=await import("./chunk-da0tfpa2.js"),O=L(F.join(`
|
|
1061
1061
|
`),z),A=H.search(/<\/body>/i);if(A!==-1)H=H.slice(0,A)+O+`
|
|
1062
1062
|
`+H.slice(A);else H+=`
|
|
1063
1063
|
${O}`}if(H=await A6(H),W.forEach((L)=>Q.add(L)),Z.cache&&Z.cachePath){if(await _$(G,H,W,Z),Z.debug)console.log(`Cached template ${G} with ${W.size} dependencies`)}return{contents:H,loader:"html"}}catch(W){let K=W instanceof Error?W:new e$(`Plugin processing failed: ${String(W)}`,G);if(G$.log(K,{filePath:G,buildConfig:$.config}),O6.logDetailedError(K,{filePath:G,plugin:"bun-plugin-stx"}),Z.debug)console.error("stx Plugin Error:",K);let _=K,U=_.line||null,F=_.context||null;return{contents:Z.debug||H6()?`<!DOCTYPE html>
|
|
@@ -1120,12 +1120,12 @@ ${O}`}if(H=await A6(H),W.forEach((L)=>Q.add(L)),Z.cache&&Z.cachePath){if(await _
|
|
|
1120
1120
|
<h1>Something went wrong</h1>
|
|
1121
1121
|
<p>An internal error occurred. Please try again later.</p>
|
|
1122
1122
|
</body>
|
|
1123
|
-
</html>`,loader:"html"}}})}};async function
|
|
1123
|
+
</html>`,loader:"html"}}})}};async function E4($,X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=X.hotReload!==!1&&Q,J=null,G=X.hmrPort||Z+1,W=Q0.resolve($);if(!E0.existsSync(W))return console.error(`${B.red}Error: File not found: ${B.bright}${W}${B.reset}`),!1;if(W.endsWith(".md"))return t$(W,X);else if(!W.endsWith(".stx"))return console.error(`${B.red}Error: Unsupported file type: ${B.bright}${W}${B.reset}. Only .stx and .md files are supported.`),!1;let K=u0(process.cwd(),"output");E0.mkdirSync(K,{recursive:!0}),console.log(`${B.blue}Building ${B.bright}${$}${B.reset}...`);let _=null,U=async()=>{try{let I={name:"public-assets",setup(T){T.onResolve({filter:/^\/(images|fonts|assets|public)\//},(f)=>{return{path:f.path,external:!0}})}},M=await Bun.build({entrypoints:[W],outdir:K,plugins:[I,_1],publicPath:"/",define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!M.success)return console.error(`${B.red}Build failed:${B.reset}`,M.logs),!1;let w=M.outputs.find((T)=>T.path.endsWith(".html"));if(!w)return console.error(`${B.red}No HTML output found${B.reset}`),!1;return _=await Bun.file(w.path).text(),!0}catch(I){return console.error(`${B.red}Error building stx file:${B.reset}`,I),!1}};if(!await U())return!1;let z=Q0.dirname(W);await B$(z);let j=Z;try{if(j=await h0(Z),j!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${j} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}if(Y){let I=X.hmrPort||j+1;J=J$({wsPort:I,verbose:!1}),G=J.start(I)}let H={},L=null,O;try{let{loadStxConfig:I}=await import("./chunk-zv4gb3wb.js"),M=await I();if(O=X.stxOptions?.serverApi??M.serverApi,M?.apiRouter)L=M?.apiRouter,console.log(`${B.blue}Using custom router for API handling${B.reset}`);if(M?.apiRoutes){H=M.apiRoutes;let w=Object.keys(H).length;if(w>0)console.log(`${B.blue}Loaded ${B.bright}${w} API route${w>1?"s":""}${B.reset}`)}if(M?.broadcasting?.enabled)try{let{startBroadcasting:w,loadChannels:D}=await import("./chunk-reskzmsb.js"),T=M.broadcasting;await w(T);let f=T.port??6001;console.log(`${B.magenta}Broadcasting on ${B.cyan}ws://localhost:${f}/ws${B.reset}`);let c=Q0.join(process.cwd(),"channels.ts");if(E0.existsSync(c))try{let v=await D(c);console.log(`${B.blue}Loaded ${B.bright}${v} broadcast channel${v!==1?"s":""}${B.blue} from channels.ts${B.reset}`)}catch(v){console.warn(`${B.yellow}Failed to load channels.ts: ${v.message}${B.reset}`)}}catch(w){console.warn(`${B.yellow}Broadcasting failed to start: ${w.message}${B.reset}`)}}catch{}let{createServerApi:A,isServerApiSource:V}=await import("./chunk-jcbj3xp4.js"),E=await A(process.cwd(),O);if(console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${j}/${B.reset}...`),Y)console.log(`${B.magenta}Hot reload enabled on ws://localhost:${G}${B.reset}`);let q=V4({port:j,async fetch(I){return F$(I,await(async()=>{let M=new URL(I.url);if([K,Q0.dirname(W),Q0.join(process.cwd(),"public")].some((v)=>V(Q0.join(v,M.pathname),process.cwd(),O)))return new Response("Not Found",{status:404});if(L)try{let v=await L.handleRequest(I);if(v.status!==404)return v}catch{}if(H[M.pathname])try{return await H[M.pathname](I)}catch(v){return new Response(JSON.stringify({error:v.message}),{status:500,headers:{"Content-Type":"application/json"}})}let w=await E(I);if(w)return w;if(M.pathname==="/")return(async()=>{let S=await J0(_||"");if(Y)S=P0(S,G);if(X.native)if(S.includes("<head>"))S=S.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else if(S.includes("<html"))S=S.replace(/(<html[^>]*>)/,"$1<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>");else S="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+S;if(X.titlebarHidden)if(S.includes("<head>"))S=S.replace("<head>","<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script>");else if(S.includes("<html"))S=S.replace(/(<html[^>]*>)/,"$1<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>");else S=`<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>${S}`;return S})().then((S)=>new Response(S,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}}));let D=Q0.join(K,M.pathname);if(E0.existsSync(D)&&E0.statSync(D).isFile()){let v=Bun.file(D),S=Q0.extname(D).toLowerCase(),k="text/plain";if(S===".ts"||S===".tsx"){let H0=new Bun.Transpiler({loader:S===".tsx"?"tsx":"ts"}),G0=await v.text(),r0=H0.transformSync(G0);return new Response(r0,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(S){case".html":k="text/html";break;case".css":k="text/css";break;case".js":k="text/javascript";break;case".json":k="application/json";break;case".png":k="image/png";break;case".jpg":case".jpeg":k="image/jpeg";break;case".gif":k="image/gif";break;case".woff":k="font/woff";break;case".woff2":k="font/woff2";break;case".ttf":k="font/ttf";break;case".otf":k="font/otf";break;case".eot":k="application/vnd.ms-fontobject";break}return new Response(v,{headers:{"Content-Type":k}})}let T=Q0.dirname(W),f=Q0.join(T,M.pathname);if(E0.existsSync(f)&&E0.statSync(f).isFile()){let v=Bun.file(f),S=Q0.extname(f).toLowerCase(),k="text/plain";if(S===".ts"||S===".tsx"){let H0=new Bun.Transpiler({loader:S===".tsx"?"tsx":"ts"}),G0=await v.text(),r0=H0.transformSync(G0);return new Response(r0,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(S){case".html":k="text/html";break;case".css":k="text/css";break;case".js":k="text/javascript";break;case".json":k="application/json";break;case".png":k="image/png";break;case".jpg":case".jpeg":k="image/jpeg";break;case".gif":k="image/gif";break;case".svg":k="image/svg+xml";break;case".ico":k="image/x-icon";break;case".woff":k="font/woff";break;case".woff2":k="font/woff2";break;case".ttf":k="font/ttf";break;case".otf":k="font/otf";break;case".eot":k="application/vnd.ms-fontobject";break}return new Response(v,{headers:{"Content-Type":k}})}let c=Q0.join(process.cwd(),"public",M.pathname);if(E0.existsSync(c)&&E0.statSync(c).isFile()){let v=Bun.file(c),S=Q0.extname(c).toLowerCase(),k="application/octet-stream";if(S===".ts"||S===".tsx"){let H0=new Bun.Transpiler({loader:S===".tsx"?"tsx":"ts"}),G0=await v.text(),r0=H0.transformSync(G0);return new Response(r0,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(S){case".html":k="text/html";break;case".css":k="text/css";break;case".js":k="text/javascript";break;case".json":k="application/json";break;case".png":k="image/png";break;case".jpg":case".jpeg":k="image/jpeg";break;case".gif":k="image/gif";break;case".svg":k="image/svg+xml";break;case".ico":k="image/x-icon";break;case".woff":k="font/woff";break;case".woff2":k="font/woff2";break;case".ttf":k="font/ttf";break;case".otf":k="font/otf";break;case".eot":k="application/vnd.ms-fontobject";break}return new Response(v,{headers:{"Content-Type":k}})}return new Response("Not Found",{status:404})})())},error(I){return new Response(`<pre>${I}
|
|
1124
1124
|
${I.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});console.clear(),console.log(`
|
|
1125
1125
|
${B.blue}stx${B.reset} ${B.green}${process.env.stx_VERSION||"v0.0.10"}${B.reset} ${B.dim}ready in ${Math.random()*10+5|0}.${Math.random()*90+10|0} ms${B.reset}`),console.log(`
|
|
1126
1126
|
${B.bright}\u2192 ${B.cyan}http://localhost:${j}/${B.reset}`),console.log(`
|
|
1127
1127
|
${B.yellow}Routes:${B.reset}`);let N=Q0.relative(process.cwd(),W);if(console.log(` ${B.green}\u2514\u2500 /${B.reset} \u2192 ${B.bright}${N}${B.reset}`),console.log(`
|
|
1128
|
-
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(q.url.toString(),()=>{if(Q)E0.watch(Q0.dirname(W),{recursive:!0}).close();q.stop()}),X.native){let I=await Bun.file(W).text(),M=X$(I);await G1(j,{title:Q0.basename(W,".stx"),titlebarHidden:X.titlebarHidden===!0,nativeSidebar:!!M,sidebarConfig:M})}if(Q){let I=Q0.dirname(W);console.log(`${B.blue}Watching ${B.bright}${I}${B.reset} for changes...`);let M=E0.watch(I,{recursive:!0},async(w,D)=>{if(!D||Y$(D))return;if(Q$(D)){console.log(`${B.yellow}File ${B.bright}${D}${B.yellow} changed, rebuilding...${B.reset}`),o0.clear(),t0();let T=await U();if(await L$(z),Y&&J)if(T)J.reload(D);else J.error("Build failed - check console for details")}else if(Z$(D)){if(console.log(`${B.cyan}CSS ${B.bright}${D}${B.cyan} changed${B.reset}`),Y&&J)J.updateCss(D)}});process.on("SIGINT",()=>{if(M.close(),J)D1();q.stop(),process.exit(0)})}return!0}var{serve:
|
|
1128
|
+
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(q.url.toString(),()=>{if(Q)E0.watch(Q0.dirname(W),{recursive:!0}).close();q.stop()}),X.native){let I=await Bun.file(W).text(),M=X$(I);await G1(j,{title:Q0.basename(W,".stx"),titlebarHidden:X.titlebarHidden===!0,nativeSidebar:!!M,sidebarConfig:M})}if(Q){let I=Q0.dirname(W);console.log(`${B.blue}Watching ${B.bright}${I}${B.reset} for changes...`);let M=E0.watch(I,{recursive:!0},async(w,D)=>{if(!D||Y$(D))return;if(Q$(D)){console.log(`${B.yellow}File ${B.bright}${D}${B.yellow} changed, rebuilding...${B.reset}`),o0.clear(),t0();let T=await U();if(await L$(z),Y&&J)if(T)J.reload(D);else J.error("Build failed - check console for details")}else if(Z$(D)){if(console.log(`${B.cyan}CSS ${B.bright}${D}${B.cyan} changed${B.reset}`),Y&&J)J.updateCss(D)}});process.on("SIGINT",()=>{if(M.close(),J)D1();q.stop(),process.exit(0)})}return!0}var{serve:I4}=globalThis.Bun;import m0 from"fs";import B0 from"path";var q6=`
|
|
1129
1129
|
<script data-stx-helpers>
|
|
1130
1130
|
(function() {
|
|
1131
1131
|
'use strict'
|
|
@@ -1436,7 +1436,7 @@ else {
|
|
|
1436
1436
|
|
|
1437
1437
|
})()
|
|
1438
1438
|
</script>
|
|
1439
|
-
`;V6();function I6($){if($.length===0)return"";if($.length===1)return $[0];let X=$.map((Q)=>Q.split(B0.sep)),Z=[];for(let Q=0;Q<X[0].length;Q++){let Y=X[0][Q];if(X.every((J)=>J[Q]===Y))Z.push(Y);else break}return Z.join(B0.sep)}async function
|
|
1439
|
+
`;V6();function I6($){if($.length===0)return"";if($.length===1)return $[0];let X=$.map((Q)=>Q.split(B0.sep)),Z=[];for(let Q=0;Q<X[0].length;Q++){let Y=X[0][Q];if(X.every((J)=>J[Q]===Y))Z.push(Y);else break}return Z.join(B0.sep)}async function R4($,X={}){let Z=X.port||3000,Q=X.watch!==!1;for(let H of $){let L=B0.resolve(H);if(!m0.existsSync(L))return console.error(`${B.red}Error: File not found: ${B.bright}${L}${B.reset}`),!1;if(!L.endsWith(".stx")&&!L.endsWith(".md"))return console.error(`${B.red}Error: Unsupported file type: ${B.bright}${L}${B.reset}. Only .stx and .md files are supported.`),!1}let Y=u0(process.cwd(),"output");m0.mkdirSync(Y,{recursive:!0});let J=I6($.map((H)=>B0.dirname(B0.resolve(H))));console.log(`${B.blue}Processing ${B.bright}${$.length}${B.reset} files...`);let G={},W=[],K=async()=>{try{for(let H of $){let L=B0.resolve(H);if(L.endsWith(".md"))try{let{content:A,data:V}=await T0(L,{markdown:{syntaxHighlighting:{serverSide:!0,enabled:!0,defaultTheme:w0.markdown?.syntaxHighlighting?.defaultTheme||"github-dark",highlightUnknownLanguages:!0}}}),E=X.markdown?.syntaxHighlighting||w0.markdown?.syntaxHighlighting,q=E?.defaultTheme||"github-dark",N=["github-dark"],I=E?.additionalThemes||[],w=[...new Set([...N,...I])].map((c)=>`<option value="${c}"${c===q?" selected":""}>${c}</option>`).join(`
|
|
1440
1440
|
`),D=`
|
|
1441
1441
|
<!DOCTYPE html>
|
|
1442
1442
|
<html lang="en">
|
|
@@ -1600,19 +1600,19 @@ else {
|
|
|
1600
1600
|
</body>
|
|
1601
1601
|
</html>
|
|
1602
1602
|
`,f=`/${B0.relative(J,L).replace(/\.md$/,"")}`;if(f.endsWith("/index"))f=f.slice(0,-6)||"/";G[f||"/"]={filePath:L,content:D,fileType:"md"}}catch(A){console.error(`${B.red}Error processing Markdown file ${B.bright}${H}${B.reset}:`,A);continue}else{let A={name:"public-assets",setup(N){N.onResolve({filter:/^\/(images|fonts|assets|public)\//},(I)=>{return{path:I.path,external:!0}})}},V;try{let N=await Bun.build({entrypoints:[L],outdir:Y,plugins:[A,_1],define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!N.success){console.error(`${B.red}Build failed for ${B.bright}${H}${B.reset}:`,U1(N.logs,L));continue}let I=N.outputs.find((M)=>M.path.endsWith(".html"));if(!I){console.error(`${B.red}No HTML output found for ${B.bright}${H}${B.reset}`);continue}V=await Bun.file(I.path).text()}catch(N){console.error(`${B.red}Build failed for ${B.bright}${H}${B.reset}:
|
|
1603
|
-
${U1(N,L)}`);continue}let q=`/${B0.relative(J,L).replace(/\.stx$/,"")}`;if(q.endsWith("/index"))q=q.slice(0,-6)||"/";if(q.includes("[")){let{regex:N,params:I}=M6(q);W.push({pattern:N,paramNames:I,filePath:L,routeTemplate:q,fileType:"stx"}),G[q]={filePath:L,content:V,fileType:"stx"}}else G[q||"/"]={filePath:L,content:V,fileType:"stx"}}}if(Object.keys(G).length===0)return console.error(`${B.red}No files were successfully processed${B.reset}`),!1;return!0}catch(H){return console.error(`${B.red}Error processing files:${B.reset}`,U1(H)),!1}};if(!await K())return!1;let U=Z;try{if(U=await h0(Z),U!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${U} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${U}/${B.reset}...`);let F=
|
|
1603
|
+
${U1(N,L)}`);continue}let q=`/${B0.relative(J,L).replace(/\.stx$/,"")}`;if(q.endsWith("/index"))q=q.slice(0,-6)||"/";if(q.includes("[")){let{regex:N,params:I}=M6(q);W.push({pattern:N,paramNames:I,filePath:L,routeTemplate:q,fileType:"stx"}),G[q]={filePath:L,content:V,fileType:"stx"}}else G[q||"/"]={filePath:L,content:V,fileType:"stx"}}}if(Object.keys(G).length===0)return console.error(`${B.red}No files were successfully processed${B.reset}`),!1;return!0}catch(H){return console.error(`${B.red}Error processing files:${B.reset}`,U1(H)),!1}};if(!await K())return!1;let U=Z;try{if(U=await h0(Z),U!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${U} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}console.log(`${B.blue}Starting server on ${B.cyan}http://localhost:${U}/${B.reset}...`);let F=I4({port:U,async fetch(H){let L=new URL(H.url),O=B0.join(process.cwd(),"public",L.pathname);if(m0.existsSync(O)&&m0.statSync(O).isFile()){let E=Bun.file(O),q=B0.extname(O).toLowerCase(),N="application/octet-stream";if(q===".ts"||q===".tsx"){let I=new Bun.Transpiler({loader:q===".tsx"?"tsx":"ts"}),M=await E.text(),w=I.transformSync(M);return new Response(w,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(q){case".html":N="text/html";break;case".css":N="text/css";break;case".js":N="text/javascript";break;case".json":N="application/json";break;case".png":N="image/png";break;case".jpg":case".jpeg":N="image/jpeg";break;case".gif":N="image/gif";break;case".svg":N="image/svg+xml";break;case".ico":N="image/x-icon";break;case".woff":N="font/woff";break;case".woff2":N="font/woff2";break;case".ttf":N="font/ttf";break;case".otf":N="font/otf";break;case".eot":N="application/vnd.ms-fontobject";break}return new Response(E,{headers:{"Content-Type":N}})}let A=G[L.pathname];if(!A&&!L.pathname.endsWith("/"))A=G[`${L.pathname}/`];if(!A)for(let E of W){let q=L.pathname.match(E.pattern);if(q){let N=G[E.routeTemplate];if(N){let I={};for(let D=0;D<E.paramNames.length;D++)I[E.paramNames[D]]=decodeURIComponent(q[D+1]);let M=N.content,w=`<script>window.__routeParams = ${JSON.stringify(I)};</script>`;if(M.includes("</head>"))M=M.replace("</head>",`${w}
|
|
1604
1604
|
</head>`);else M=w+M;A={...N,content:M}}break}}if(A)return J0(A.content).then((E)=>{if(E.includes("</head>"))E=E.replace("</head>",`${q6}
|
|
1605
1605
|
</head>`);return new Response(E,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})});let V=B0.join(Y,L.pathname);if(m0.existsSync(V)&&m0.statSync(V).isFile()){let E=Bun.file(V),q=B0.extname(V).toLowerCase(),N="text/plain";if(q===".ts"||q===".tsx"){let I=new Bun.Transpiler({loader:q===".tsx"?"tsx":"ts"}),M=await E.text(),w=I.transformSync(M);return new Response(w,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(q){case".html":N="text/html";break;case".css":N="text/css";break;case".js":N="text/javascript";break;case".json":N="application/json";break;case".png":N="image/png";break;case".jpg":case".jpeg":N="image/jpeg";break;case".gif":N="image/gif";break;case".svg":N="image/svg+xml";break;case".ico":N="image/x-icon";break;case".woff":N="font/woff";break;case".woff2":N="font/woff2";break;case".ttf":N="font/ttf";break;case".otf":N="font/otf";break;case".eot":N="application/vnd.ms-fontobject";break}return new Response(E,{headers:{"Content-Type":N}})}if(L.pathname!=="/"&&G["/"]){let E=E6(H);return J0(G["/"].content).then((q)=>{if(E){let N=q.match(/<main[^>]*>([\s\S]*?)<\/main>/i);if(N){let I=q.match(/<title[^>]*>([\s\S]*?)<\/title>/i),M=I?I[1]:"",w=`<!DOCTYPE html><html><head><title>${N6(M)}</title></head><body><main>${N[1]}</main></body></html>`;return new Response(w,{headers:{"Content-Type":"text/html","X-STX-Partial":"true",...B1(),"Cache-Control":z$,Pragma:"no-cache",Expires:"0"}})}}return new Response(q,{headers:{"Content-Type":"text/html",...B1(),"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})})}return new Response("Not Found",{status:404})},error(H){return new Response(`<pre>${H}
|
|
1606
1606
|
${H.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});console.clear(),console.log(`
|
|
1607
1607
|
${B.blue}stx${B.reset} ${B.green}${process.env.stx_VERSION||"v0.0.10"}${B.reset} ${B.dim}ready in ${Math.random()*10+5|0}.${Math.random()*90+10|0} ms${B.reset}`),console.log(`
|
|
1608
1608
|
${B.bright}\u2192 ${B.cyan}http://localhost:${U}/${B.reset}`),console.log(`
|
|
1609
1609
|
${B.yellow}Routes:${B.reset}`);let z=new Set(W.map((H)=>H.routeTemplate)),j=Object.entries(G).filter(([H])=>!z.has(H)).sort(([H],[L])=>H.localeCompare(L)).map(([H,L])=>({route:H==="/"?"/":H,filePath:B0.relative(process.cwd(),L.filePath),fileType:L.fileType}));for(let H of W){let L=H.routeTemplate.replace(/\[([^\]]+)\]/g,":$1");j.push({route:L,filePath:B0.relative(process.cwd(),H.filePath),fileType:"stx"})}if(j.sort((H,L)=>H.route.localeCompare(L.route)),j.forEach((H,L)=>{let A=L===j.length-1?"\u2514\u2500 ":"\u251C\u2500 ",V=H.fileType==="md"?`${B.magenta}(markdown)${B.reset}`:"";console.log(` ${B.green}${A}${H.route}${B.reset} \u2192 ${B.bright}${H.filePath}${B.reset} ${V}`)}),console.log(`
|
|
1610
|
-
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(F.url.toString(),()=>{if(Q)m0.watch(J,{recursive:!0}).close();F.stop()}),Q){console.log(`${B.blue}Watching for changes...${B.reset}`);let H=m0.watch(J,{recursive:!0},async(L,O)=>{if(!O)return;if(O.endsWith(".stx")||O.endsWith(".js")||O.endsWith(".ts")||O.endsWith(".md"))console.log(`${B.yellow}File ${B.bright}${O}${B.yellow} changed, rebuilding...${B.reset}`),o0.clear(),t0(),await K()});process.on("SIGINT",()=>{H.close(),F.stop(),process.exit(0)})}return!0}function N6($){return String($??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var{serve:R4}=globalThis.Bun;import e from"fs";import m from"path";async function R6($){try{return G5(await Bun.file($).text())}catch{return}}function Q5($){let X=Bun.file($),Z=m.extname($).toLowerCase(),Q={".html":"text/html",".css":"text/css",".js":"text/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject"},J=[".js",".css",".json"].includes(Z)?{"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}:{};return new Response(X,{headers:{"Content-Type":Q[Z]||"application/octet-stream",...J}})}async function D4($=".",X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=X.hotReload!==!1&&Q,J=null,G=X.hmrPort||Z+1,W=m.resolve($),{loadStxConfig:K}=await import("./chunk-vz0ebk4j.js"),_=await K(W),{createServerApi:U,isServerApiSource:F}=await import("./chunk-hvw4mwee.js"),z=X.stxOptions?.serverApi??_.serverApi,j=await U(W,z),H=_.root&&_.root!=="."?m.join(W,_.root):W,L=X.pagesDir||_.pagesDir||"pages",O=m.join(H,L);if(!e.existsSync(O)&&!_._layerPageDirs?.some((R)=>e.existsSync(R)))return console.error(`${B.red}Error: No '${L}' directory found${B.reset}`),console.log(`${B.dim}Looked in: ${B.bright}${O}${B.reset}`),console.log(`${B.dim}Run stx dev from the app directory, pass it as an argument (stx dev <dir>),${B.reset}`),console.log(`${B.dim}point at another directory with --pages <dir>, or set pagesDir in stx.config.ts.${B.reset}`),console.log(`${B.dim}Starting fresh? Create ${L}/index.stx for the homepage.${B.reset}`),!1;let A=j$(H,{pagesDir:L,pagesDirs:_._layerPageDirs?[O,..._._layerPageDirs.slice(1)]:void 0});if(A.length===0)return console.error(`${B.red}Error: No page files found in ${B.bright}${O}${B.reset}`),!1;console.log(`${B.blue}Found ${B.bright}${A.length}${B.blue} routes${B.reset}`);let V=_?._pluginPageDirs||[],E=[];for(let{dir:R,prefix:x}of V)if(e.existsSync(R)){let P=j$(m.dirname(R),{pagesDir:m.basename(R)});for(let y of P){let Z0=x==="/"?y.pattern:`${x}${y.pattern==="/"?"":y.pattern}`;E.push({route:{...y,pattern:Z0},prefix:x})}if(P.length>0)console.log(`${B.blue}Plugin pages: ${B.bright}${P.length}${B.blue} routes at ${B.cyan}${x}${B.reset}`)}let q=new Map,N=null,I=null;if(X.stxOptions?.shell!==!1){if(I=await d6(W,X.stxOptions?.shell),I){if(N=await J5(I,X.stxOptions||{}),N)console.log(`${B.blue}Using app shell: ${B.bright}${m.relative(W,I)}${B.reset} ${B.dim}(deprecated: use layouts/default.stx instead)${B.reset}`)}}T6(),await k6(W);let M=C6();if(M.length>0)console.log(`${B.blue}Loaded ${B.bright}${M.length}${B.blue} middleware: ${B.dim}${M.join(", ")}${B.reset}`);let w={},D=null;try{let{loadStxConfig:R}=await import("./chunk-vz0ebk4j.js"),x=await R(W);if(x?.apiRouter)D=x?.apiRouter,console.log(`${B.blue}Using custom router for API handling${B.reset}`);if(x?.apiRoutes){w=x.apiRoutes;let P=Object.keys(w).length;if(P>0)console.log(`${B.blue}Loaded ${B.bright}${P} API route${P>1?"s":""}${B.reset}`)}if(x?.broadcasting?.enabled)try{let{startBroadcasting:P,loadChannels:y}=await import("./chunk-22hch2me.js"),Z0=x.broadcasting;await P(Z0);let R0=Z0.port??6001;console.log(`${B.magenta}Broadcasting on ${B.cyan}ws://localhost:${R0}/ws${B.reset}`);let g0=m.join(process.cwd(),"channels.ts");if(e.existsSync(g0))try{let p=await y(g0);console.log(`${B.blue}Loaded ${B.bright}${p} broadcast channel${p!==1?"s":""}${B.blue} from channels.ts${B.reset}`)}catch(p){console.warn(`${B.yellow}Failed to load channels.ts: ${p.message}${B.reset}`)}}catch(P){console.warn(`${B.yellow}Broadcasting failed to start: ${P.message}${B.reset}`)}}catch{}let T=u0(W,"output");e.mkdirSync(T,{recursive:!0});let f=new Map,c=new Set,v=async(R)=>{let x=D6(O,R);if(!x)return null;try{let P=await Bun.build({entrypoints:[x],outdir:T,plugins:[_1],publicPath:"/",define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!P.success)return null;let y=P.outputs.find((Z0)=>Z0.path.endsWith(".html"));if(!y)return null;return await Bun.file(y.path).text()}catch{return null}},S=new Map,k=async(R,x)=>{try{let{processDirectives:P,extractVariables:y,defaultConfig:Z0,loadStxConfig:R0,injectRouterScript:g0}=await import("./chunk-vz0ebk4j.js"),{checkCache:p,cacheTemplate:u,readFileCached:g,templateCache:h}=await import("./chunk-hkgnpf6v.js"),Y0=await R0(W),f0=(i)=>{if(!i)return i;if(m.isAbsolute(i))return i;return m.resolve(W,i)},C={...Z0,...Y0,...X.stxOptions,autoShell:!0};if(X.debugDirectives)C.debug=!0;C.partialsDir=f0(C.partialsDir),C.componentsDir=f0(C.componentsDir),C.layoutsDir=f0(C.layoutsDir),C.storesDir=f0(C.storesDir||"stores"),C.cachePath=f0(C.cachePath)??u0(W,"cache");let X0=!x&&!X.profile,a=C.cache!==!1;if(a&&X0){let i=h.get(R.filePath);if(i)try{if((await e.promises.stat(R.filePath)).mtime.getTime()<=i.mtime){let N0=!0;for(let _0 of i.dependencies){if(!e.existsSync(_0)){N0=!1;break}if((await e.promises.stat(_0)).mtime.getTime()>i.mtime){N0=!1;break}}if(N0){let _0=i.output;if(N)_0=O$(_0,{preserveHead:!0});let E1=S.get(R.filePath);return{route:R,content:_0,status:E1?.status??await R6(R.filePath),headers:E1?.headers}}}}catch{}let A0=await p(R.filePath,C);if(A0){let q0=A0;if(N)q0=O$(q0,{preserveHead:!0});let N0=S.get(R.filePath);return{route:R,content:q0,status:N0?.status??await R6(R.filePath),headers:N0?.headers}}}let o=a?await g(R.filePath):await Bun.file(R.filePath).text(),K0=G5(o),{classifyAllScripts:d}=await import("./chunk-vz0ebk4j.js"),O0=d(o),D0=O0.server.map((i)=>i.content),s=o;for(let i of O0.server)s=s.replace(i.fullTag,"");let n={__filename:R.filePath,__dirname:m.dirname(R.filePath),__stx_options:C,params:x??{},__stx_runtime_head:{}};for(let i of D0)try{await y(i,n,R.filePath)}catch(A0){if(X.stxOptions?.debug)console.error("[stx] variable extraction error",R.filePath,A0?.message||A0)}let S0=new Set,j0;if(X.profile){let i=performance.now();j0=await P(s,n,R.filePath,C,S0);let A0=performance.now()-i,q0=m.relative(W,R.filePath)||R.filePath;console.log(`[stx:profile] ${q0} \u2192 ${A0.toFixed(2)}ms`)}else j0=await P(s,n,R.filePath,C,S0);if(!N)j0=await g0(j0,{router:C.router});{let{interpolateScriptExpressions:i}=await import("./chunk-y07fna67.js");j0=j0.replace(/<script\b([^>]*)>([\s\S]*?)<\/script>/g,(A0,q0,N0)=>{if(!/function\s+__stx_setup_/.test(N0))return A0;return`<script${q0}>${i(N0,n)}</script>`})}if(N)j0=O$(j0,{preserveHead:!0});if(a&&X0)await u(R.filePath,j0,S0,C);let{extractStreamBoundaries:Q3}=await import("./chunk-wjcrcbd1.js"),Q1=Q3(n),V1=n.__streamTemplates;if(V1&&typeof V1==="object"&&Object.keys(V1).length>0){let i=n.streamBoundaries||{},A0={...C,autoShell:!1},q0=Object.keys(V1).map((_0)=>({id:_0,render:async()=>{let E1=typeof i[_0]==="function"?await i[_0]():void 0;return P(V1[_0],{...n,$boundary:E1},R.filePath,A0,new Set)}})),N0=new Set(q0.map((_0)=>_0.id));Q1=[...(Q1||[]).filter((_0)=>!N0.has(_0.id)),...q0]}if(Q1&&Q1.length>0)c.add(R.pattern);else Q1=void 0;let l5=T1(n),i5=C1(n);if(X0)S.set(R.filePath,{status:l5,headers:i5});return{route:R,content:j0,status:l5??K0,headers:i5,boundaries:Q1}}catch(P){return console.error(`${B.red}Error building ${B.bright}${R.pattern}${B.reset}:`,P),null}},H0=8,G0=async()=>{f.clear(),q.clear();for(let R=0;R<A.length;R+=H0){let x=A.slice(R,R+H0),P=await Promise.all(x.map((y)=>k(y)));for(let y of P)if(y)f.set(y.route.pattern,y)}for(let R=0;R<E.length;R+=H0){let x=E.slice(R,R+H0),P=await Promise.all(x.map(({route:y})=>k(y)));for(let y of P)if(y)q.set(y.route.pattern,y)}return f.size>0};if(console.log(`${B.blue}Building pages...${B.reset}`),!await G0())return console.error(`${B.red}No pages were successfully built${B.reset}`),!1;await B$(W);let v0=Z;try{if(v0=await h0(Z),v0!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${v0} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}if(Y){let R=X.hmrPort||v0+1;J=J$({wsPort:R,verbose:!1}),G=J.start(R)}let z0=(R,x)=>{let y=`<script data-stx-route-params>(function(){var p=${JSON.stringify(x).replace(/</g,"\\u003C").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")};window.__stx_rp=p;if(window.stx){window.stx._rp=p;if(window.stx.setRouteParams)window.stx.setRouteParams(p)}})()</script>`;if(R.includes("</head>"))return R.replace("</head>",`${y}</head>`);if(R.includes("<body"))return R.replace(/<body([^>]*)>/,`<body$1>${y}`);return y+R};console.log(`${B.blue}Starting server...${B.reset}`);let Z1=R4({port:v0,async fetch(R){let x=new URL(R.url),P=_?.publicDir||"public",y=m.join(W,P,x.pathname),Z0=m.join(W,x.pathname),R0=m.join(T,x.pathname);if([y,Z0,R0].some((C)=>F(C,W,z)))return new Response("Not Found",{status:404});let[g0,p,u]=await Promise.all([e.promises.stat(y).catch(()=>null),e.promises.stat(Z0).catch(()=>null),e.promises.stat(R0).catch(()=>null)]);if(g0?.isFile()&&!F(y,W,z))return Q5(y);if(p?.isFile()&&!F(Z0,W,z))return Q5(Z0);if(u?.isFile()&&!F(R0,W,z))return Q5(R0);if(x.pathname.startsWith("/_stx/component/")){let C=decodeURIComponent(x.pathname.slice(16));if(C)try{let X0=`<${C} />`,a={...buildConfig,autoShell:!1},o=await processDirectives(X0,{},m.join(W,"components",`${C}.stx`),a,new Set);return new Response(o,{headers:{"Content-Type":"text/html"}})}catch(X0){return new Response(`<div class="stx-async-error">${X0.message}</div>`,{status:500,headers:{"Content-Type":"text/html"}})}}if(x.pathname==="/_stx/img"){let{handleImageRequest:C}=await import("./chunk-58j32d7n.js"),X0=await C(R,{publicDir:m.join(W,P),cacheDir:u0(W,"cache","img")});if(X0)return X0}if(D)try{let C=await D.handleRequest(R);if(C.status!==404)return C}catch{}if(w[x.pathname])try{return await w[x.pathname](R)}catch(C){return new Response(JSON.stringify({error:C.message}),{status:500,headers:{"Content-Type":"application/json"}})}let g=await j(R);if(g)return g;let h=Y5(x.pathname,A);if(h){let C=f.get(h.route.pattern),X0=c.has(h.route.pattern);if(h.route.isDynamic&&Object.keys(h.params).length>0||X0){let a=await k(h.route,h.params);if(a)C=a}if(C){let a=C.status??200,o=C.headers??{},K0=(h.route.filePath?y6(await Bun.file(h.route.filePath).text().catch(()=>"")):null)??{};if(K0.validate){if(!await K0.validate({params:h.params})){let D0=await v(404);if(D0){let s=D0;if(s=await J0(s,W),Y)s=P0(s,G);return new Response(s,{status:404,headers:{"Content-Type":"text/html"}})}return new Response("Not Found",{status:404})}}if(K0.middleware){let O0=x6(x.pathname,h.params,K0,x.search),D0=S6(O0,null,R,{isServer:!0}),s=await P6(K0.middleware,D0);if(s.redirect){let n=s.redirect.path,S0=s.redirect.options.redirectCode||302,j0=new Headers(s.responseHeaders);return j0.set("Location",n),new Response(null,{status:S0,headers:j0})}if(s.abort){let{statusCode:n,message:S0}=s.abort.error;return new Response(`<!DOCTYPE html><html><head><title>Error ${n}</title></head><body><h1>Error ${n}</h1><p>${S0}</p></body></html>`,{status:n,headers:{"Content-Type":"text/html"}})}if(Object.keys(s.state).length>0){let n=`<script>(function(){var s=typeof stx!=='undefined'?stx:{};s._ms=${JSON.stringify(s.state)};if(s.setMiddlewareState)s.setMiddlewareState(s._ms);})()</script>`;C.content=C.content.replace("</head>",`${n}</head>`)}}let d=C.content;if(N&&u6(R)){let O0=b6(d),D0=v6(d),s=d.match(/<title[^>]*>([\s\S]*?)<\/title>/i),n=s?h6(s[1].trim()):"";if(Object.keys(h.params).length>0)d=z0(d,h.params);d=await J0(d,W);let S0=_?.router?.container||"main";return d=m6(d,S0),new Response(d,{status:a,headers:{"Content-Type":"text/html","X-STX-Fragment":"true","X-STX-Layout":O0.layout,"X-STX-Layout-Group":O0.group,"X-STX-Runtime":D0?"true":"false",...n&&{"X-STX-Title":encodeURIComponent(n)},[g6]:f6(),...B1(),"Cache-Control":z$}})}if(N)d=H$(N,d);if(Object.keys(h.params).length>0)d=z0(d,h.params);if(d=await J0(d,W),Y)d=P0(d,G);if(X.native)if(d.includes("<head>"))d=d.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else d="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+d;if(X.titlebarHidden)if(d.includes("<head>"))d=d.replace("<head>","<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script>");else d=`<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>${d}`;if(C.boundaries&&C.boundaries.length>0){let{renderStreamingPage:O0,streamToResponse:D0}=await import("./chunk-wjcrcbd1.js");return D0(O0(d,C.boundaries,{timeoutMs:30000}),{status:a,headers:{"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}return new Response(d,{status:a,headers:{"Content-Type":"text/html",...B1(),"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0",...o}})}}if(E.length>0){let C=E.map((a)=>a.route),X0=Y5(x.pathname,C);if(X0){let a=q.get(X0.route.pattern);if(a){let o=a.content;if(N)o=H$(N,o);if(Object.keys(X0.params).length>0)o=z0(o,X0.params);if(o=await J0(o,W),Y)o=P0(o,G);return new Response(o,{status:a.status??200,headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}}for(let{prefix:a}of V)if(a!=="/"&&x.pathname.startsWith(a)){let o=q.get(a)||q.get(a+"/");if(o){let K0=o.content;if(N)K0=H$(N,K0);if(K0=await J0(K0,W),Y)K0=P0(K0,G);return new Response(K0,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}}}let Y0=f.get("/");if(Y0){let C=Y0.content;if(C=await J0(C,W),Y)C=P0(C,G);if(X.native)if(C.includes("<head>"))C=C.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else C="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+C;return new Response(C,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}let f0=await v(404);if(f0){let C=f0;if(C=await J0(C,W),Y)C=P0(C,G);return new Response(C,{status:404,headers:{"Content-Type":"text/html"}})}return new Response("Not Found",{status:404})},async error(R){let x=await v(500);if(x)return new Response(x,{status:500,headers:{"Content-Type":"text/html"}});return new Response(`<pre>${R}
|
|
1610
|
+
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(F.url.toString(),()=>{if(Q)m0.watch(J,{recursive:!0}).close();F.stop()}),Q){console.log(`${B.blue}Watching for changes...${B.reset}`);let H=m0.watch(J,{recursive:!0},async(L,O)=>{if(!O)return;if(O.endsWith(".stx")||O.endsWith(".js")||O.endsWith(".ts")||O.endsWith(".md"))console.log(`${B.yellow}File ${B.bright}${O}${B.yellow} changed, rebuilding...${B.reset}`),o0.clear(),t0(),await K()});process.on("SIGINT",()=>{H.close(),F.stop(),process.exit(0)})}return!0}function N6($){return String($??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var{serve:D4}=globalThis.Bun;import e from"fs";import m from"path";async function R6($){try{return G5(await Bun.file($).text())}catch{return}}function Q5($){let X=Bun.file($),Z=m.extname($).toLowerCase(),Q={".html":"text/html",".css":"text/css",".js":"text/javascript",".json":"application/json",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".ico":"image/x-icon",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".otf":"font/otf",".eot":"application/vnd.ms-fontobject"},J=[".js",".css",".json"].includes(Z)?{"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}:{};return new Response(X,{headers:{"Content-Type":Q[Z]||"application/octet-stream",...J}})}async function w4($=".",X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=X.hotReload!==!1&&Q,J=null,G=X.hmrPort||Z+1,W=m.resolve($),{loadStxConfig:K}=await import("./chunk-zv4gb3wb.js"),_=await K(W),{createServerApi:U,isServerApiSource:F}=await import("./chunk-jcbj3xp4.js"),z=X.stxOptions?.serverApi??_.serverApi,j=await U(W,z),H=_.root&&_.root!=="."?m.join(W,_.root):W,L=X.pagesDir||_.pagesDir||"pages",O=m.join(H,L);if(!e.existsSync(O)&&!_._layerPageDirs?.some((R)=>e.existsSync(R)))return console.error(`${B.red}Error: No '${L}' directory found${B.reset}`),console.log(`${B.dim}Looked in: ${B.bright}${O}${B.reset}`),console.log(`${B.dim}Run stx dev from the app directory, pass it as an argument (stx dev <dir>),${B.reset}`),console.log(`${B.dim}point at another directory with --pages <dir>, or set pagesDir in stx.config.ts.${B.reset}`),console.log(`${B.dim}Starting fresh? Create ${L}/index.stx for the homepage.${B.reset}`),!1;let A=j$(H,{pagesDir:L,pagesDirs:_._layerPageDirs?[O,..._._layerPageDirs.slice(1)]:void 0});if(A.length===0)return console.error(`${B.red}Error: No page files found in ${B.bright}${O}${B.reset}`),!1;console.log(`${B.blue}Found ${B.bright}${A.length}${B.blue} routes${B.reset}`);let V=_?._pluginPageDirs||[],E=[];for(let{dir:R,prefix:x}of V)if(e.existsSync(R)){let P=j$(m.dirname(R),{pagesDir:m.basename(R)});for(let y of P){let Z0=x==="/"?y.pattern:`${x}${y.pattern==="/"?"":y.pattern}`;E.push({route:{...y,pattern:Z0},prefix:x})}if(P.length>0)console.log(`${B.blue}Plugin pages: ${B.bright}${P.length}${B.blue} routes at ${B.cyan}${x}${B.reset}`)}let q=new Map,N=null,I=null;if(X.stxOptions?.shell!==!1){if(I=await d6(W,X.stxOptions?.shell),I){if(N=await J5(I,X.stxOptions||{}),N)console.log(`${B.blue}Using app shell: ${B.bright}${m.relative(W,I)}${B.reset} ${B.dim}(deprecated: use layouts/default.stx instead)${B.reset}`)}}T6(),await k6(W);let M=C6();if(M.length>0)console.log(`${B.blue}Loaded ${B.bright}${M.length}${B.blue} middleware: ${B.dim}${M.join(", ")}${B.reset}`);let w={},D=null;try{let{loadStxConfig:R}=await import("./chunk-zv4gb3wb.js"),x=await R(W);if(x?.apiRouter)D=x?.apiRouter,console.log(`${B.blue}Using custom router for API handling${B.reset}`);if(x?.apiRoutes){w=x.apiRoutes;let P=Object.keys(w).length;if(P>0)console.log(`${B.blue}Loaded ${B.bright}${P} API route${P>1?"s":""}${B.reset}`)}if(x?.broadcasting?.enabled)try{let{startBroadcasting:P,loadChannels:y}=await import("./chunk-reskzmsb.js"),Z0=x.broadcasting;await P(Z0);let R0=Z0.port??6001;console.log(`${B.magenta}Broadcasting on ${B.cyan}ws://localhost:${R0}/ws${B.reset}`);let g0=m.join(process.cwd(),"channels.ts");if(e.existsSync(g0))try{let p=await y(g0);console.log(`${B.blue}Loaded ${B.bright}${p} broadcast channel${p!==1?"s":""}${B.blue} from channels.ts${B.reset}`)}catch(p){console.warn(`${B.yellow}Failed to load channels.ts: ${p.message}${B.reset}`)}}catch(P){console.warn(`${B.yellow}Broadcasting failed to start: ${P.message}${B.reset}`)}}catch{}let T=u0(W,"output");e.mkdirSync(T,{recursive:!0});let f=new Map,c=new Set,v=async(R)=>{let x=D6(O,R);if(!x)return null;try{let P=await Bun.build({entrypoints:[x],outdir:T,plugins:[_1],publicPath:"/",define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!P.success)return null;let y=P.outputs.find((Z0)=>Z0.path.endsWith(".html"));if(!y)return null;return await Bun.file(y.path).text()}catch{return null}},S=new Map,k=async(R,x)=>{try{let{processDirectives:P,extractVariables:y,defaultConfig:Z0,loadStxConfig:R0,injectRouterScript:g0}=await import("./chunk-zv4gb3wb.js"),{checkCache:p,cacheTemplate:u,readFileCached:g,templateCache:h}=await import("./chunk-a1rt1fms.js"),Y0=await R0(W),f0=(i)=>{if(!i)return i;if(m.isAbsolute(i))return i;return m.resolve(W,i)},C={...Z0,...Y0,...X.stxOptions,autoShell:!0};if(X.debugDirectives)C.debug=!0;C.partialsDir=f0(C.partialsDir),C.componentsDir=f0(C.componentsDir),C.layoutsDir=f0(C.layoutsDir),C.storesDir=f0(C.storesDir||"stores"),C.cachePath=f0(C.cachePath)??u0(W,"cache");let X0=!x&&!X.profile,a=C.cache!==!1;if(a&&X0){let i=h.get(R.filePath);if(i)try{if((await e.promises.stat(R.filePath)).mtime.getTime()<=i.mtime){let N0=!0;for(let _0 of i.dependencies){if(!e.existsSync(_0)){N0=!1;break}if((await e.promises.stat(_0)).mtime.getTime()>i.mtime){N0=!1;break}}if(N0){let _0=i.output;if(N)_0=O$(_0,{preserveHead:!0});let E1=S.get(R.filePath);return{route:R,content:_0,status:E1?.status??await R6(R.filePath),headers:E1?.headers}}}}catch{}let A0=await p(R.filePath,C);if(A0){let q0=A0;if(N)q0=O$(q0,{preserveHead:!0});let N0=S.get(R.filePath);return{route:R,content:q0,status:N0?.status??await R6(R.filePath),headers:N0?.headers}}}let o=a?await g(R.filePath):await Bun.file(R.filePath).text(),K0=G5(o),{classifyAllScripts:d}=await import("./chunk-zv4gb3wb.js"),O0=d(o),D0=O0.server.map((i)=>i.content),s=o;for(let i of O0.server)s=s.replace(i.fullTag,"");let n={__filename:R.filePath,__dirname:m.dirname(R.filePath),__stx_options:C,params:x??{},__stx_runtime_head:{}};for(let i of D0)try{await y(i,n,R.filePath)}catch(A0){if(X.stxOptions?.debug)console.error("[stx] variable extraction error",R.filePath,A0?.message||A0)}let S0=new Set,j0;if(X.profile){let i=performance.now();j0=await P(s,n,R.filePath,C,S0);let A0=performance.now()-i,q0=m.relative(W,R.filePath)||R.filePath;console.log(`[stx:profile] ${q0} \u2192 ${A0.toFixed(2)}ms`)}else j0=await P(s,n,R.filePath,C,S0);if(!N)j0=await g0(j0,{router:C.router});{let{interpolateScriptExpressions:i}=await import("./chunk-da0tfpa2.js");j0=j0.replace(/<script\b([^>]*)>([\s\S]*?)<\/script>/g,(A0,q0,N0)=>{if(!/function\s+__stx_setup_/.test(N0))return A0;return`<script${q0}>${i(N0,n)}</script>`})}if(N)j0=O$(j0,{preserveHead:!0});if(a&&X0)await u(R.filePath,j0,S0,C);let{extractStreamBoundaries:Y3}=await import("./chunk-wa3ks5zv.js"),Q1=Y3(n),V1=n.__streamTemplates;if(V1&&typeof V1==="object"&&Object.keys(V1).length>0){let i=n.streamBoundaries||{},A0={...C,autoShell:!1},q0=Object.keys(V1).map((_0)=>({id:_0,render:async()=>{let E1=typeof i[_0]==="function"?await i[_0]():void 0;return P(V1[_0],{...n,$boundary:E1},R.filePath,A0,new Set)}})),N0=new Set(q0.map((_0)=>_0.id));Q1=[...(Q1||[]).filter((_0)=>!N0.has(_0.id)),...q0]}if(Q1&&Q1.length>0)c.add(R.pattern);else Q1=void 0;let l5=T1(n),i5=C1(n);if(X0)S.set(R.filePath,{status:l5,headers:i5});return{route:R,content:j0,status:l5??K0,headers:i5,boundaries:Q1}}catch(P){return console.error(`${B.red}Error building ${B.bright}${R.pattern}${B.reset}:`,P),null}},H0=8,G0=async()=>{f.clear(),q.clear();for(let R=0;R<A.length;R+=H0){let x=A.slice(R,R+H0),P=await Promise.all(x.map((y)=>k(y)));for(let y of P)if(y)f.set(y.route.pattern,y)}for(let R=0;R<E.length;R+=H0){let x=E.slice(R,R+H0),P=await Promise.all(x.map(({route:y})=>k(y)));for(let y of P)if(y)q.set(y.route.pattern,y)}return f.size>0};if(console.log(`${B.blue}Building pages...${B.reset}`),!await G0())return console.error(`${B.red}No pages were successfully built${B.reset}`),!1;await B$(W);let v0=Z;try{if(v0=await h0(Z),v0!==Z)console.log(`${B.yellow}Port ${Z} is busy, using port ${v0} instead${B.reset}`)}catch{return console.error(`${B.red}Could not find an available port${B.reset}`),!1}if(Y){let R=X.hmrPort||v0+1;J=J$({wsPort:R,verbose:!1}),G=J.start(R)}let z0=(R,x)=>{let y=`<script data-stx-route-params>(function(){var p=${JSON.stringify(x).replace(/</g,"\\u003C").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")};window.__stx_rp=p;if(window.stx){window.stx._rp=p;if(window.stx.setRouteParams)window.stx.setRouteParams(p)}})()</script>`;if(R.includes("</head>"))return R.replace("</head>",`${y}</head>`);if(R.includes("<body"))return R.replace(/<body([^>]*)>/,`<body$1>${y}`);return y+R};console.log(`${B.blue}Starting server...${B.reset}`);let Z1=D4({port:v0,async fetch(R){let x=new URL(R.url),P=_?.publicDir||"public",y=m.join(W,P,x.pathname),Z0=m.join(W,x.pathname),R0=m.join(T,x.pathname);if([y,Z0,R0].some((C)=>F(C,W,z)))return new Response("Not Found",{status:404});let[g0,p,u]=await Promise.all([e.promises.stat(y).catch(()=>null),e.promises.stat(Z0).catch(()=>null),e.promises.stat(R0).catch(()=>null)]);if(g0?.isFile()&&!F(y,W,z))return Q5(y);if(p?.isFile()&&!F(Z0,W,z))return Q5(Z0);if(u?.isFile()&&!F(R0,W,z))return Q5(R0);if(x.pathname.startsWith("/_stx/component/")){let C=decodeURIComponent(x.pathname.slice(16));if(C)try{let X0=`<${C} />`,a={...buildConfig,autoShell:!1},o=await processDirectives(X0,{},m.join(W,"components",`${C}.stx`),a,new Set);return new Response(o,{headers:{"Content-Type":"text/html"}})}catch(X0){return new Response(`<div class="stx-async-error">${X0.message}</div>`,{status:500,headers:{"Content-Type":"text/html"}})}}if(x.pathname==="/_stx/img"){let{handleImageRequest:C}=await import("./chunk-pbct6nxk.js"),X0=await C(R,{publicDir:m.join(W,P),cacheDir:u0(W,"cache","img")});if(X0)return X0}if(D)try{let C=await D.handleRequest(R);if(C.status!==404)return C}catch{}if(w[x.pathname])try{return await w[x.pathname](R)}catch(C){return new Response(JSON.stringify({error:C.message}),{status:500,headers:{"Content-Type":"application/json"}})}let g=await j(R);if(g)return g;let h=Y5(x.pathname,A);if(h){let C=f.get(h.route.pattern),X0=c.has(h.route.pattern);if(h.route.isDynamic&&Object.keys(h.params).length>0||X0){let a=await k(h.route,h.params);if(a)C=a}if(C){let a=C.status??200,o=C.headers??{},K0=(h.route.filePath?y6(await Bun.file(h.route.filePath).text().catch(()=>"")):null)??{};if(K0.validate){if(!await K0.validate({params:h.params})){let D0=await v(404);if(D0){let s=D0;if(s=await J0(s,W),Y)s=P0(s,G);return new Response(s,{status:404,headers:{"Content-Type":"text/html"}})}return new Response("Not Found",{status:404})}}if(K0.middleware){let O0=x6(x.pathname,h.params,K0,x.search),D0=S6(O0,null,R,{isServer:!0}),s=await P6(K0.middleware,D0);if(s.redirect){let n=s.redirect.path,S0=s.redirect.options.redirectCode||302,j0=new Headers(s.responseHeaders);return j0.set("Location",n),new Response(null,{status:S0,headers:j0})}if(s.abort){let{statusCode:n,message:S0}=s.abort.error;return new Response(`<!DOCTYPE html><html><head><title>Error ${n}</title></head><body><h1>Error ${n}</h1><p>${S0}</p></body></html>`,{status:n,headers:{"Content-Type":"text/html"}})}if(Object.keys(s.state).length>0){let n=`<script>(function(){var s=typeof stx!=='undefined'?stx:{};s._ms=${JSON.stringify(s.state)};if(s.setMiddlewareState)s.setMiddlewareState(s._ms);})()</script>`;C.content=C.content.replace("</head>",`${n}</head>`)}}let d=C.content;if(N&&u6(R)){let O0=b6(d),D0=v6(d),s=d.match(/<title[^>]*>([\s\S]*?)<\/title>/i),n=s?h6(s[1].trim()):"";if(Object.keys(h.params).length>0)d=z0(d,h.params);d=await J0(d,W);let S0=_?.router?.container||"main";return d=m6(d,S0),new Response(d,{status:a,headers:{"Content-Type":"text/html","X-STX-Fragment":"true","X-STX-Layout":O0.layout,"X-STX-Layout-Group":O0.group,"X-STX-Runtime":D0?"true":"false",...n&&{"X-STX-Title":encodeURIComponent(n)},[g6]:f6(),...B1(),"Cache-Control":z$}})}if(N)d=H$(N,d);if(Object.keys(h.params).length>0)d=z0(d,h.params);if(d=await J0(d,W),Y)d=P0(d,G);if(X.native)if(d.includes("<head>"))d=d.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else d="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+d;if(X.titlebarHidden)if(d.includes("<head>"))d=d.replace("<head>","<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script>");else d=`<head><style>html.stx-titlebar-hidden .stx-traffic-lights-dot{visibility:hidden}</style><script>document.documentElement.classList.add('stx-titlebar-hidden')</script></head>${d}`;if(C.boundaries&&C.boundaries.length>0){let{renderStreamingPage:O0,streamToResponse:D0}=await import("./chunk-wa3ks5zv.js");return D0(O0(d,C.boundaries,{timeoutMs:30000}),{status:a,headers:{"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}return new Response(d,{status:a,headers:{"Content-Type":"text/html",...B1(),"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0",...o}})}}if(E.length>0){let C=E.map((a)=>a.route),X0=Y5(x.pathname,C);if(X0){let a=q.get(X0.route.pattern);if(a){let o=a.content;if(N)o=H$(N,o);if(Object.keys(X0.params).length>0)o=z0(o,X0.params);if(o=await J0(o,W),Y)o=P0(o,G);return new Response(o,{status:a.status??200,headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}}for(let{prefix:a}of V)if(a!=="/"&&x.pathname.startsWith(a)){let o=q.get(a)||q.get(a+"/");if(o){let K0=o.content;if(N)K0=H$(N,K0);if(K0=await J0(K0,W),Y)K0=P0(K0,G);return new Response(K0,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}}}let Y0=f.get("/");if(Y0){let C=Y0.content;if(C=await J0(C,W),Y)C=P0(C,G);if(X.native)if(C.includes("<head>"))C=C.replace("<head>","<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script>");else C="<head><style>[data-stx-sidebar],.stx-sidebar{display:none!important}</style><script>window.__craftNativeSidebar=true;document.documentElement.classList.add('has-native-sidebar')</script></head>"+C;return new Response(C,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}let f0=await v(404);if(f0){let C=f0;if(C=await J0(C,W),Y)C=P0(C,G);return new Response(C,{status:404,headers:{"Content-Type":"text/html"}})}return new Response("Not Found",{status:404})},async error(R){let x=await v(500);if(x)return new Response(x,{status:500,headers:{"Content-Type":"text/html"}});return new Response(`<pre>${R}
|
|
1611
1611
|
${R.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});if(console.clear(),console.log(`
|
|
1612
1612
|
${B.blue}stx${B.reset} ${B.green}${process.env.stx_VERSION||"v0.0.10"}${B.reset} ${B.dim}ready in ${Math.random()*10+5|0}.${Math.random()*90+10|0} ms${B.reset}`),console.log(`
|
|
1613
1613
|
${B.bright}\u2192 ${B.cyan}http://localhost:${v0}/${B.reset}`),Y)console.log(`${B.dim} HMR: ws://localhost:${G}${B.reset}`);console.log(`
|
|
1614
1614
|
${B.yellow}Routes:${B.reset}`);let W0=[...w6(A,W)];for(let{route:R}of E)W0.push(`${R.pattern}`);if(W0.forEach((R,x)=>{let y=x===W0.length-1?"\u2514\u2500 ":"\u251C\u2500 ";console.log(` ${B.green}${y}${B.reset}${R}`)}),console.log(`
|
|
1615
|
-
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.url.toString(),()=>{if(J)D1();Z1.stop()}),X.native){let R,x=m.join(O,"index.stx");if(e.existsSync(x)){let y=await Bun.file(x).text();R=X$(y)}let P=_?.app?.window??{};await G1(v0,{title:_?.app?.head?.title||m.basename(W)||"stx App",width:P.width,height:P.height,darkMode:P.darkMode,hotReload:P.hotReload,titlebarHidden:P.titlebarHidden??X.titlebarHidden===!0,nativeSidebar:!!R,sidebarConfig:R})}if(Q){console.log(`${B.blue}Watching for changes...${B.reset}`);let R=(p)=>{return p.startsWith("public/")||p.startsWith("public\\")},x=(p)=>{let u=p.toLowerCase();return u.endsWith(".stx")||u.endsWith(".html")||u.endsWith(".md")},P=new Map,y=()=>{let p=new Set([W,..._._layerGraph?.layers.map((u)=>u.root)??[],..._._layerGraph?.configDependencies.map((u)=>m.dirname(u))??[]].filter((u)=>e.existsSync(u)).map((u)=>e.realpathSync(u)));for(let u of _._layerGraph?.layers??[])for(let g of Object.values(u.resources)){if(!e.existsSync(g))continue;let h=e.realpathSync(g);if(![...p].some((Y0)=>h===Y0||h.startsWith(`${Y0}${m.sep}`)))p.add(h)}for(let[u,g]of P)if(!p.has(u))g.close(),P.delete(u);for(let u of p)if(!P.has(u)&&e.existsSync(u))P.set(u,e.watch(u,{recursive:!0},(g,h)=>{R0(u,g,h).catch((Y0)=>console.error("[stx] Layer rebuild failed:",Y0))}))},Z0=Promise.resolve(),R0=(p,u,g)=>{return Z0=Z0.catch(()=>{}).then(()=>g0(p,u,g)),Z0},g0=async(p,u,g)=>{if(!g||Y$(g))return;if(Q$(g)){if(_._layerGraph){let h=await K(W);Object.assign(_,h),A.splice(0,A.length,...j$(H,{pagesDir:L,pagesDirs:h._layerPageDirs?[O,...h._layerPageDirs.slice(1)]:void 0})),y()}if(R(g)){if(console.log(`${B.cyan}${g} changed${B.reset}`),Y&&J)J.reload(g)}else if(x(g)){console.log(`${B.yellow}${g} changed, rebuilding...${B.reset}`),o0.clear(),t0();try{let{invalidateFileCache:h,templateCache:Y0}=await import("./chunk-
|
|
1615
|
+
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.url.toString(),()=>{if(J)D1();Z1.stop()}),X.native){let R,x=m.join(O,"index.stx");if(e.existsSync(x)){let y=await Bun.file(x).text();R=X$(y)}let P=_?.app?.window??{};await G1(v0,{title:_?.app?.head?.title||m.basename(W)||"stx App",width:P.width,height:P.height,darkMode:P.darkMode,hotReload:P.hotReload,titlebarHidden:P.titlebarHidden??X.titlebarHidden===!0,nativeSidebar:!!R,sidebarConfig:R})}if(Q){console.log(`${B.blue}Watching for changes...${B.reset}`);let R=(p)=>{return p.startsWith("public/")||p.startsWith("public\\")},x=(p)=>{let u=p.toLowerCase();return u.endsWith(".stx")||u.endsWith(".html")||u.endsWith(".md")},P=new Map,y=()=>{let p=new Set([W,..._._layerGraph?.layers.map((u)=>u.root)??[],..._._layerGraph?.configDependencies.map((u)=>m.dirname(u))??[]].filter((u)=>e.existsSync(u)).map((u)=>e.realpathSync(u)));for(let u of _._layerGraph?.layers??[])for(let g of Object.values(u.resources)){if(!e.existsSync(g))continue;let h=e.realpathSync(g);if(![...p].some((Y0)=>h===Y0||h.startsWith(`${Y0}${m.sep}`)))p.add(h)}for(let[u,g]of P)if(!p.has(u))g.close(),P.delete(u);for(let u of p)if(!P.has(u)&&e.existsSync(u))P.set(u,e.watch(u,{recursive:!0},(g,h)=>{R0(u,g,h).catch((Y0)=>console.error("[stx] Layer rebuild failed:",Y0))}))},Z0=Promise.resolve(),R0=(p,u,g)=>{return Z0=Z0.catch(()=>{}).then(()=>g0(p,u,g)),Z0},g0=async(p,u,g)=>{if(!g||Y$(g))return;if(Q$(g)){if(_._layerGraph){let h=await K(W);Object.assign(_,h),A.splice(0,A.length,...j$(H,{pagesDir:L,pagesDirs:h._layerPageDirs?[O,...h._layerPageDirs.slice(1)]:void 0})),y()}if(R(g)){if(console.log(`${B.cyan}${g} changed${B.reset}`),Y&&J)J.reload(g)}else if(x(g)){console.log(`${B.yellow}${g} changed, rebuilding...${B.reset}`),o0.clear(),t0();try{let{invalidateFileCache:h,templateCache:Y0}=await import("./chunk-a1rt1fms.js");h(m.resolve(p,g)),Y0.delete(m.resolve(p,g))}catch{}if(I&&g){if(m.resolve(p,g)===I||m.basename(I)===g){let Y0=await J5(I,X.stxOptions||{});if(Y0)N=Y0}}if(await G0(),await L$(W),Y&&J)J.reload(g)}else{console.log(`${B.yellow}${g} changed, rebuilding...${B.reset}`),o0.clear(),t0();try{let{invalidateFileCache:h,templateCache:Y0}=await import("./chunk-a1rt1fms.js");h(m.resolve(p,g)),Y0.delete(m.resolve(p,g))}catch{}if(await G0(),Y&&J)J.reload(g)}}else if(Z$(g)){if(console.log(`${B.cyan}CSS ${g} changed${B.reset}`),Y&&J)J.updateCss(g)}};y(),process.on("SIGINT",()=>{for(let p of P.values())p.close();if(J)D1();Z1.stop(),process.exit(0)})}return!0}var b={enabled:!1,components:new Map,stores:new Map,events:[],performance:[],selectedComponent:null,selectedStore:null,maxEvents:1000,maxPerformance:500};function T4($={}){if(typeof window>"u")return;b.enabled=!0,b.maxEvents=$.maxEvents||1000,b.maxPerformance=$.maxPerformance||500,window.__STX_DEVTOOLS__={getState:()=>b,getComponents:()=>Array.from(b.components.values()),getComponent:(X)=>b.components.get(X),getStores:()=>Array.from(b.stores.values()),getStore:(X)=>b.stores.get(X),getEvents:()=>b.events,getPerformance:()=>b.performance,selectComponent:(X)=>K5(X),selectStore:(X)=>k4(X),inspectElement:(X)=>x4(X),highlightComponent:(X)=>a6(X),clearHighlight:()=>r6(),logComponentTree:()=>S4(),logStoreState:(X)=>P4(X),timeTravel:(X,Z)=>b4(X,Z)},v4(),y4(),console.log("%c[STX DevTools] Enabled","color: #10b981; font-weight: bold;")}function C4(){b.enabled=!1,delete window.__STX_DEVTOOLS__;let $=document.getElementById("stx-devtools-panel");if($)$.remove();console.log("%c[STX DevTools] Disabled","color: #ef4444;")}function p6($){if(!b.enabled)return;let X=b.components.get($);if(X){if(X.parentId){let Z=b.components.get(X.parentId);if(Z)Z.children=Z.children.filter((Q)=>Q!==$)}b.components.delete($),W5({timestamp:Date.now(),type:"component:unmounted",componentId:$,payload:{name:X.name}})}}function l6($,X,Z={},Q=[]){if(!b.enabled)return;let Y={id:$,state:X,getters:Z,actions:Q,history:[{timestamp:Date.now(),type:"state",name:"__init__",newValue:X}]};b.stores.set($,Y),W5({timestamp:Date.now(),type:"store:registered",payload:{id:$,state:X}})}function i6($,X,Z,Q,Y="state"){if(!b.enabled)return;let J=b.stores.get($);if(J){let G={timestamp:Date.now(),type:Y,name:X,oldValue:Z,newValue:Q,stack:Error().stack};if(J.history.push(G),J.history.length>100)J.history=J.history.slice(-100);if(Y==="state")J.state={...J.state,[X]:Q};W5({timestamp:Date.now(),type:`store:${Y}`,payload:{storeId:$,name:X,oldValue:Z,newValue:Q}})}}function W5($){if(!b.enabled)return;if(b.events.push($),b.events.length>b.maxEvents)b.events=b.events.slice(-b.maxEvents);if(typeof window<"u")window.dispatchEvent(new CustomEvent("stx:devtools:event",{detail:$}))}function K5($){b.selectedComponent=$;let X=b.components.get($);if(X)a6($),console.log("%c[STX DevTools] Selected component:","color: #3b82f6;",X);return X}function k4($){b.selectedStore=$;let X=b.stores.get($);if(X)console.log("%c[STX DevTools] Selected store:","color: #8b5cf6;",X);return X}function x4($){let X=$;while(X){let Z=X.getAttribute("data-stx-component-id");if(Z)return K5(Z);X=X.parentElement}console.log("%c[STX DevTools] No component found for element","color: #f59e0b;");return}function a6($){r6();let X=b.components.get($);if(X?.element){let Z=document.createElement("div");Z.id="stx-devtools-highlight",Z.style.cssText=`
|
|
1616
1616
|
position: absolute;
|
|
1617
1617
|
background: rgba(59, 130, 246, 0.2);
|
|
1618
1618
|
border: 2px solid #3b82f6;
|
|
@@ -1630,7 +1630,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1630
1630
|
font-family: monospace;
|
|
1631
1631
|
border-radius: 4px;
|
|
1632
1632
|
white-space: nowrap;
|
|
1633
|
-
`,Y.textContent=`<${X.name}>`,Z.appendChild(Y),document.body.appendChild(Z)}}function r6(){let $=document.getElementById("stx-devtools-highlight");if($)$.remove()}function
|
|
1633
|
+
`,Y.textContent=`<${X.name}>`,Z.appendChild(Y),document.body.appendChild(Z)}}function r6(){let $=document.getElementById("stx-devtools-highlight");if($)$.remove()}function S4(){console.group("%c[STX DevTools] Component Tree","color: #10b981; font-weight: bold;");let $=Array.from(b.components.values()).filter((Z)=>!Z.parentId);function X(Z,Q){let Y=" ".repeat(Q);if(console.log(`${Y}%c<${Z.name}>%c id=${Z.id} renders=${Z.renderCount}`,"color: #3b82f6;","color: #6b7280;"),Object.keys(Z.props).length>0)console.log(`${Y} props:`,Z.props);if(Object.keys(Z.state).length>0)console.log(`${Y} state:`,Z.state);for(let J of Z.children){let G=b.components.get(J);if(G)X(G,Q+1)}}for(let Z of $)X(Z,0);console.groupEnd()}function P4($){console.group("%c[STX DevTools] Store State","color: #8b5cf6; font-weight: bold;");let X=$?[b.stores.get($)].filter(Boolean):Array.from(b.stores.values());for(let Z of X)if(Z)console.group(`Store: ${Z.id}`),console.log("State:",Z.state),console.log("Getters:",Z.getters),console.log("Actions:",Z.actions),console.log("History:",Z.history),console.groupEnd();console.groupEnd()}function b4($,X){let Z=b.stores.get(X);if(!Z)return;if($<0||$>=Z.history.length){console.warn("[STX DevTools] Invalid history index");return}let Q={};for(let Y=0;Y<=$;Y++){let J=Z.history[Y];if(J.type==="state"&&J.name!=="__init__")Q[J.name]=J.newValue;else if(J.name==="__init__")Object.assign(Q,J.newValue)}if(console.log(`%c[STX DevTools] Time traveled to index ${$}`,"color: #f59e0b;",Q),typeof window<"u"&&window.__STX_STORES__){let J=window.__STX_STORES__[X];if(J&&typeof J.$patch==="function")J.$patch(Q)}}function y4(){if(typeof MutationObserver>"u")return;new MutationObserver((X)=>{for(let Z of X)Z.removedNodes.forEach((Q)=>{if(Q instanceof HTMLElement){let Y=Q.getAttribute("data-stx-component-id");if(Y)p6(Y);Q.querySelectorAll("[data-stx-component-id]").forEach((J)=>{let G=J.getAttribute("data-stx-component-id");if(G)p6(G)})}})}).observe(document.body,{childList:!0,subtree:!0})}function v4(){if(typeof document>"u")return;if(document.getElementById("stx-devtools-panel"))return;let $=document.createElement("div");$.id="stx-devtools-panel",$.innerHTML=`
|
|
1634
1634
|
<style>
|
|
1635
1635
|
#stx-devtools-panel {
|
|
1636
1636
|
position: fixed;
|
|
@@ -1739,7 +1739,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1739
1739
|
<div id="stx-devtools-content">
|
|
1740
1740
|
<div id="stx-devtools-components-tab"></div>
|
|
1741
1741
|
</div>
|
|
1742
|
-
`,document.body.appendChild($);let X=$.querySelector("#stx-devtools-header"),Z=$.querySelector("#stx-devtools-toggle");X?.addEventListener("click",()=>{if($.classList.toggle("open"),Z)Z.textContent=$.classList.contains("open")?"\u25BC":"\u25B2"});let Q=$.querySelectorAll(".stx-devtools-tab");Q.forEach((Y)=>{Y.addEventListener("click",()=>{Q.forEach((J)=>J.classList.remove("active")),Y.classList.add("active"),c6(Y.getAttribute("data-tab")||"components")})}),setInterval(()=>{let Y=$.querySelector(".stx-devtools-tab.active");if(Y&&$.classList.contains("open"))c6(Y.getAttribute("data-tab")||"components")},1000)}function c6($){let X=document.getElementById("stx-devtools-content");if(!X)return;switch($){case"components":X.innerHTML=
|
|
1742
|
+
`,document.body.appendChild($);let X=$.querySelector("#stx-devtools-header"),Z=$.querySelector("#stx-devtools-toggle");X?.addEventListener("click",()=>{if($.classList.toggle("open"),Z)Z.textContent=$.classList.contains("open")?"\u25BC":"\u25B2"});let Q=$.querySelectorAll(".stx-devtools-tab");Q.forEach((Y)=>{Y.addEventListener("click",()=>{Q.forEach((J)=>J.classList.remove("active")),Y.classList.add("active"),c6(Y.getAttribute("data-tab")||"components")})}),setInterval(()=>{let Y=$.querySelector(".stx-devtools-tab.active");if(Y&&$.classList.contains("open"))c6(Y.getAttribute("data-tab")||"components")},1000)}function c6($){let X=document.getElementById("stx-devtools-content");if(!X)return;switch($){case"components":X.innerHTML=g4();break;case"stores":X.innerHTML=f4();break;case"events":X.innerHTML=h4();break}X.querySelectorAll(".stx-devtools-component").forEach((Z)=>{Z.addEventListener("click",()=>{let Q=Z.getAttribute("data-id");if(Q)K5(Q)})})}function g4(){let X=Array.from(b.components.values()).filter((Q)=>!Q.parentId);function Z(Q,Y){let J=Q.children.map((G)=>b.components.get(G)).filter(Boolean).map((G)=>Z(G,Y+1)).join("");return`
|
|
1743
1743
|
<div class="stx-devtools-component ${b.selectedComponent===Q.id?"selected":""}"
|
|
1744
1744
|
data-id="${Q.id}"
|
|
1745
1745
|
style="padding-left: ${Y*16+8}px">
|
|
@@ -1747,25 +1747,25 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1747
1747
|
<span class="stx-devtools-component-id">${Q.id}</span>
|
|
1748
1748
|
</div>
|
|
1749
1749
|
${J}
|
|
1750
|
-
`}if(X.length===0)return'<div style="color: #6b7280; padding: 8px;">No components registered</div>';return X.map((Q)=>Z(Q,0)).join("")}function
|
|
1750
|
+
`}if(X.length===0)return'<div style="color: #6b7280; padding: 8px;">No components registered</div>';return X.map((Q)=>Z(Q,0)).join("")}function f4(){let $=Array.from(b.stores.values());if($.length===0)return'<div style="color: #6b7280; padding: 8px;">No stores registered</div>';return $.map((X)=>`
|
|
1751
1751
|
<div class="stx-devtools-section">
|
|
1752
1752
|
<div class="stx-devtools-section-title">${X.id}</div>
|
|
1753
1753
|
<div class="stx-devtools-json">${JSON.stringify(X.state,null,2)}</div>
|
|
1754
1754
|
</div>
|
|
1755
|
-
`).join("")}function
|
|
1755
|
+
`).join("")}function h4(){let $=b.events.slice(-20).reverse();if($.length===0)return'<div style="color: #6b7280; padding: 8px;">No events recorded</div>';return $.map((X)=>`
|
|
1756
1756
|
<div style="padding: 4px 0; border-bottom: 1px solid #374151;">
|
|
1757
1757
|
<span style="color: #60a5fa;">${X.type}</span>
|
|
1758
1758
|
<span style="color: #6b7280; font-size: 10px; margin-left: 8px;">
|
|
1759
1759
|
${new Date(X.timestamp).toLocaleTimeString()}
|
|
1760
1760
|
</span>
|
|
1761
1761
|
</div>
|
|
1762
|
-
`).join("")}import _5 from"fs";import k1 from"path";async function
|
|
1763
|
-
`).map((H)=>H.trim().replace(/^\*\s*/,"")).filter((H)=>!H.startsWith("@")&&H.length>0);_.description=j.join(" ").trim(),Y.push(_)}if(Y.length===0){let W=Q.match(/module\.exports\s*=\s*\{([^}]+)\}/i);if(W){let _=W[1].split(",").map((U)=>U.trim()).filter(Boolean);for(let U of _){let[F]=U.split(":").map((z)=>z.trim());if(F)Y.push({name:F})}}}return Y}catch(X){return console.error(`Error extracting props from ${$}:`,X),[]}}async function
|
|
1764
|
-
`).map((Q)=>Q.trim().replace(/^\*\s*/,"")).join(" ").trim();return""}catch{return""}}async function
|
|
1762
|
+
`).join("")}import _5 from"fs";import k1 from"path";async function d4($){try{let Z=(await Bun.file($).text()).match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(!Z)return[];let Q=Z[1],Y=[],J=/\/\*\*\s*([\s\S]*?)\s*\*\/\s*(?:(?:const|let|var)\s*)?(?:([\w$]+)\s*=|module\.exports\.([\w$]+)\s*=|\s*([\w$]+)\s*:)/g,G;while((G=J.exec(Q))!==null){let W=G[1],K=G[2]||G[3]||G[4];if(!K)continue;let _={name:K},U=W.match(/@type\s+\{([^}]+)\}/i);if(U)_.type=U[1].trim();if(W.match(/@required/i))_.required=!0;let z=W.match(/@default\s+(.+?)(?:\s+|$)/i);if(z)_.default=z[1].trim();let j=W.split(`
|
|
1763
|
+
`).map((H)=>H.trim().replace(/^\*\s*/,"")).filter((H)=>!H.startsWith("@")&&H.length>0);_.description=j.join(" ").trim(),Y.push(_)}if(Y.length===0){let W=Q.match(/module\.exports\s*=\s*\{([^}]+)\}/i);if(W){let _=W[1].split(",").map((U)=>U.trim()).filter(Boolean);for(let U of _){let[F]=U.split(":").map((z)=>z.trim());if(F)Y.push({name:F})}}}return Y}catch(X){return console.error(`Error extracting props from ${$}:`,X),[]}}async function u4($){try{let X=await Bun.file($).text(),Z=X.match(/^\s*<!--\s*([\s\S]*?)\s*-->/)||X.match(/^\s*\/\*\*\s*([\s\S]*?)\s*\*\//);if(Z)return Z[1].split(`
|
|
1764
|
+
`).map((Q)=>Q.trim().replace(/^\*\s*/,"")).join(" ").trim();return""}catch{return""}}async function m4($,X=!1,Z){let Q=k1.basename($,".stx"),Y=await d4($),J=await u4($),G="";if(X&&Z)G=`<${Z}></${Z}>`;else{let W=Y.map((K)=>{if(K.type==="boolean")return`:${K.name}="true"`;return`${K.name}="value"`}).join(`
|
|
1765
1765
|
`);G=`<${Q}
|
|
1766
1766
|
${W}
|
|
1767
|
-
/>`}return{name:Q,path:$,description:J,props:Y,example:G,isWebComponent:X,tag:Z}}async function s6($){try{if(!await x1($))return console.warn(`Components directory does not exist: ${$}`),[];let X=await _5.promises.readdir($,{withFileTypes:!0}),Z=[];for(let Q of X){let Y=k1.join($,Q.name);if(Q.isDirectory()){let J=await s6(Y);Z.push(...J)}else if(Q.isFile()&&Q.name.endsWith(".stx"))Z.push(Y)}return Z}catch(X){return console.error(`Error finding component files in ${$}:`,X),[]}}async function
|
|
1768
|
-
`).map((L)=>L.trim().replace(/^\*\s*/,"")).join(" ").trim():"",_=/@component\(\s*['"]([^'"]+)['"]/g,U=/<([A-Z][a-zA-Z0-9]*|[a-z]+-[a-z0-9-]+)(?:\s[^>]*)?\/?>|\{\{\s*slot\s*\}\}/g,F=new Set,z;while((z=_.exec(J))!==null)F.add(z[1]);while((z=U.exec(J))!==null)if(z[1]&&z[1]!=="slot")F.add(z[1]);let j=/@([a-z]+)(?:\s*\(|\s+|$)/g,H=new Set;while((z=j.exec(J))!==null)H.add(z[1]);Z.push({name:G,path:Y,description:K,components:[...F],directives:[...H]})}return Z}catch(X){return console.error("Error generating template docs:",X),[]}}async function
|
|
1767
|
+
/>`}return{name:Q,path:$,description:J,props:Y,example:G,isWebComponent:X,tag:Z}}async function s6($){try{if(!await x1($))return console.warn(`Components directory does not exist: ${$}`),[];let X=await _5.promises.readdir($,{withFileTypes:!0}),Z=[];for(let Q of X){let Y=k1.join($,Q.name);if(Q.isDirectory()){let J=await s6(Y);Z.push(...J)}else if(Q.isFile()&&Q.name.endsWith(".stx"))Z.push(Y)}return Z}catch(X){return console.error(`Error finding component files in ${$}:`,X),[]}}async function p4($,X){try{if(!await x1($))return[];let Z=await s6($),Q=[],Y=new Map;if(X?.components?.length)for(let J of X.components)Y.set(J.file,J);for(let J of Z){let G=Y.get(J),W=!!G,K=G?.tag,_=await m4(J,W,K);Q.push(_)}return Q}catch(Z){return console.error("Error generating component docs:",Z),[]}}async function c4($){try{if(!await x1($))return[];let X=await _5.promises.readdir($,{withFileTypes:!0}),Z=[];for(let Q of X){if(!Q.isFile()||!Q.name.endsWith(".stx"))continue;let Y=k1.join($,Q.name),J=await Bun.file(Y).text(),G=k1.basename(Y,".stx"),W=J.match(/^\s*<!--\s*([\s\S]*?)\s*-->/)||J.match(/^\s*\/\*\*\s*([\s\S]*?)\s*\*\//),K=W?W[1].split(`
|
|
1768
|
+
`).map((L)=>L.trim().replace(/^\*\s*/,"")).join(" ").trim():"",_=/@component\(\s*['"]([^'"]+)['"]/g,U=/<([A-Z][a-zA-Z0-9]*|[a-z]+-[a-z0-9-]+)(?:\s[^>]*)?\/?>|\{\{\s*slot\s*\}\}/g,F=new Set,z;while((z=_.exec(J))!==null)F.add(z[1]);while((z=U.exec(J))!==null)if(z[1]&&z[1]!=="slot")F.add(z[1]);let j=/@([a-z]+)(?:\s*\(|\s+|$)/g,H=new Set;while((z=j.exec(J))!==null)H.add(z[1]);Z.push({name:G,path:Y,description:K,components:[...F],directives:[...H]})}return Z}catch(X){return console.error("Error generating template docs:",X),[]}}async function l4($=[]){try{let X=[{name:"if",description:"Conditionally render content based on a condition",hasEndTag:!0,example:`@if(user.isLoggedIn)
|
|
1769
1769
|
<p>Welcome, {{ user.name }}!</p>
|
|
1770
1770
|
@endif`},{name:"else",description:"Provides an alternative if a condition is not met",hasEndTag:!1,example:`@if(user.isLoggedIn)
|
|
1771
1771
|
<p>Welcome back!</p>
|
|
@@ -1785,7 +1785,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1785
1785
|
<p>Page {{ page }}</p>
|
|
1786
1786
|
@endwhile`},{name:"component",description:"Include a component in the template",hasEndTag:!1,example:'@component("alert", { type: "warning", title: "Warning", message: "This is a warning" })'},{name:"include",description:"Include a partial template",hasEndTag:!1,example:'@include("partials/header")'},{name:"raw",description:"Display content without processing expressions",hasEndTag:!0,example:`@raw
|
|
1787
1787
|
{{ This will be displayed as-is }}
|
|
1788
|
-
@endraw`},{name:"translate",description:"Translate a string using the i18n system",hasEndTag:!1,example:'@translate("welcome.message", { name: user.name })'},{name:"t",description:"Short alias for translate directive",hasEndTag:!1,example:'@t("welcome.message", { name: user.name })'}];for(let Z of $)X.push({name:Z.name,description:Z.description||"",hasEndTag:Z.hasEndTag||!1,example:""});return X}catch(X){return console.error("Error generating directive docs:",X),[]}}function
|
|
1788
|
+
@endraw`},{name:"translate",description:"Translate a string using the i18n system",hasEndTag:!1,example:'@translate("welcome.message", { name: user.name })'},{name:"t",description:"Short alias for translate directive",hasEndTag:!1,example:'@t("welcome.message", { name: user.name })'}];for(let Z of $)X.push({name:Z.name,description:Z.description||"",hasEndTag:Z.hasEndTag||!1,example:""});return X}catch(X){return console.error("Error generating directive docs:",X),[]}}function i4($=[],X=[],Z=[],Q){let Y=`# stx Documentation
|
|
1789
1789
|
|
|
1790
1790
|
`;if(Q)Y+=`${Q}
|
|
1791
1791
|
|
|
@@ -1827,7 +1827,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1827
1827
|
|
|
1828
1828
|
`,Y+=`#### Example
|
|
1829
1829
|
|
|
1830
|
-
`,Y+="```html\n",Y+=J.example,Y+="\n```\n\n"}return Y}function
|
|
1830
|
+
`,Y+="```html\n",Y+=J.example,Y+="\n```\n\n"}return Y}function a4($=[],X=[],Z=[],Q){let Y=`<!DOCTYPE html>
|
|
1831
1831
|
<html lang="en">
|
|
1832
1832
|
<head>
|
|
1833
1833
|
<meta charset="UTF-8">
|
|
@@ -1898,15 +1898,15 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1898
1898
|
<td>@${J.name}</td>
|
|
1899
1899
|
<td>${J.description||"-"}</td>
|
|
1900
1900
|
<td>${J.hasEndTag?"Yes":"No"}</td>
|
|
1901
|
-
</tr>`;Y+="</tbody></table>";for(let J of Z)if(J.example)Y+=`<h3>@${J.name}</h3>`,Y+=`<p>${J.description||""}</p>`,Y+="<h4>Example</h4>",Y+=`<pre><code>${J.example.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}</code></pre>`}return Y+="</body></html>",Y}function a4($=[],X=[],Z=[],Q){return JSON.stringify({components:$,templates:X,directives:Z,extraContent:Q||""},null,2)}async function r4($){try{let{componentsDir:X,templatesDir:Z,webComponentsConfig:Q,customDirectives:Y,config:J}=$;if(!J.enabled)return!1;let G=J.outputDir||"docs";if(await _5.promises.mkdir(G,{recursive:!0}),console.log("Generating documentation..."),X)console.log(`Components directory: ${X}`);if(Z)console.log(`Templates directory: ${Z}`);console.log(`Output directory: ${G}`);let W=[];if(J.components!==!1&&X)console.log("Generating component documentation..."),W=await m4(X,Q),console.log(`Found ${W.length} components`);let K=[];if(J.templates!==!1&&Z)console.log("Generating template documentation..."),K=await p4(Z),console.log(`Found ${K.length} templates`);let _=[];if(J.directives!==!1)console.log("Generating directive documentation..."),_=await c4(Y),console.log(`Found ${_.length} directives`);let U=J.format||"markdown",F=J.extraContent,z="",j="";switch(U){case"markdown":z=l4(W,K,_,F),j="md";break;case"html":z=i4(W,K,_,F),j="html";break;case"json":z=a4(W,K,_,F),j="json";break;default:throw Error(`Unsupported documentation format: ${U}`)}let H=k1.join(G,`stx-docs.${j}`);return await Bun.write(H,z),console.log(`Documentation generated: ${H}`),!0}catch(X){return console.error("Error generating documentation:",X),!1}}async function bW($){let X={enabled:!0,outputDir:$.output||"docs",format:$.format||"markdown",components:$.components!==!1,templates:$.templates!==!1,directives:$.directives!==!1,extraContent:$.extraContent},Z=$.componentsDir||w0.componentsDir,Q=$.templatesDir||".";return r4({componentsDir:Z,templatesDir:Q,webComponentsConfig:w0.webComponents,customDirectives:w0.customDirectives,config:X})}import L1 from"process";function S1(){if(typeof globalThis<"u"&&"caches"in globalThis&&"CF"in globalThis)return{platform:"cloudflare",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["kv","r2","d1","durable-objects","queues"]};if(typeof globalThis<"u"&&"Deno"in globalThis)return{platform:"deno",version:globalThis.Deno.version?.deno,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["kv","deploy","ffi"]};if(typeof globalThis<"u"&&"Bun"in globalThis)return{platform:"bun",version:globalThis.Bun.version,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!1,supportsCache:!1,capabilities:["sqlite","ffi","native-modules"]};if(typeof globalThis<"u"&&"EdgeRuntime"in globalThis)return{platform:"vercel",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["edge-config","blob"]};if(typeof globalThis<"u"&&"Netlify"in globalThis)return{platform:"netlify",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!1,capabilities:["blobs","edge-functions"]};if(typeof globalThis<"u"&&"fastly"in globalThis)return{platform:"fastly",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["dictionary","backend","geolocation"]};if(L1.versions?.node)return{platform:"node",version:L1.versions.node,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!1,supportsCache:!1,capabilities:["fs","child-process","native-modules"]};return{platform:"unknown",supportsStreaming:!1,supportsCrypto:!1,supportsKV:!1,supportsCache:!1,capabilities:[]}}function fW(){let $=S1();return["cloudflare","deno","vercel","netlify","fastly"].includes($.platform)}function hW(){return S1().platform!=="unknown"}function s4($){return{get(X){if($&&X in $){let Z=$[X];return typeof Z==="string"?Z:void 0}if(typeof globalThis<"u"&&"Deno"in globalThis)return globalThis.Deno.env.get(X);if(L1.env)return L1.env[X];return},getOrThrow(X){let Z=this.get(X);if(Z===void 0)throw Error(`Environment variable "${X}" is not set`);return Z},has(X){return this.get(X)!==void 0},all(){let X={};if($){for(let[Z,Q]of Object.entries($))if(typeof Q==="string")X[Z]=Q}if(typeof globalThis<"u"&&"Deno"in globalThis){let Z=globalThis.Deno.env.toObject();Object.assign(X,Z)}if(L1.env){for(let[Z,Q]of Object.entries(L1.env))if(Q!==void 0)X[Z]=Q}return X}}}function n4($){let X=S1();if(X.platform==="cloudflare"&&$)return $;if(X.platform==="deno"&&"Deno"in globalThis)return o4();if(X.platform==="node"||X.platform==="bun")return t4();return}function o4(){let $=null,X=async()=>{if(!$)$=await globalThis.Deno.openKv();return $};return{async get(Z){return(await(await X()).get(["stx",Z])).value},async getWithMetadata(Z){let Q=await X(),Y=await Q.get(["stx",Z]),J=await Q.get(["stx-meta",Z]);return{value:Y.value,metadata:J.value}},async put(Z,Q,Y){let J=await X(),G=Y?.expirationTtl?Y.expirationTtl*1000:void 0;if(await J.set(["stx",Z],Q,G?{expireIn:G}:void 0),Y?.metadata)await J.set(["stx-meta",Z],Y.metadata,G?{expireIn:G}:void 0)},async delete(Z){let Q=await X();await Q.delete(["stx",Z]),await Q.delete(["stx-meta",Z])},async list(Z){let Q=await X(),Y=Z?.prefix?["stx",Z.prefix]:["stx"],J=Q.list({prefix:Y,limit:Z?.limit||100}),G=[];for await(let W of J){let _=W.key.slice(1).join("/");if(!_.startsWith("stx-meta/"))G.push({name:_})}return{keys:G,list_complete:!0}}}}function t4(){let $=new Map,X=()=>{let Z=Date.now();for(let[Q,Y]of $.entries())if(Y.expiration&&Y.expiration<Z)$.delete(Q)};return{async get(Z){X();let Q=$.get(Z);if(!Q)return null;if(Q.expiration&&Q.expiration<Date.now())return $.delete(Z),null;return Q.value},async getWithMetadata(Z){X();let Q=$.get(Z);if(!Q)return{value:null,metadata:null};if(Q.expiration&&Q.expiration<Date.now())return $.delete(Z),{value:null,metadata:null};return{value:Q.value,metadata:Q.metadata||null}},async put(Z,Q,Y){let J=Y?.expiration?Y.expiration*1000:Y?.expirationTtl?Date.now()+Y.expirationTtl*1000:void 0;$.set(Z,{value:Q,metadata:Y?.metadata,expiration:J})},async delete(Z){$.delete(Z)},async list(Z){X();let Q=[];for(let[Y,J]of $.entries()){if(Z?.prefix&&!Y.startsWith(Z.prefix))continue;if(Q.push({name:Y,expiration:J.expiration,metadata:J.metadata}),Z?.limit&&Q.length>=Z.limit)break}return{keys:Q,list_complete:!0}}}}function e4(){let $=S1();if($.platform==="cloudflare"&&"caches"in globalThis)return $X();if($.supportsStreaming)return XX();return}function $X(){return{async match($){return(await caches.default).match($)},async put($,X){await(await caches.default).put($,X.clone())},async delete($){return(await caches.default).delete($)}}}function XX(){let $=new Map,X=60000;return{async match(Z){let Q=Z.url,Y=$.get(Q);if(!Y)return;if(Date.now()>Y.expiration){$.delete(Q);return}return Y.response.clone()},async put(Z,Q){let Y=Z.url,J=Q.headers.get("Cache-Control"),G=60000;if(J){let W=J.match(/max-age=(\d+)/);if(W)G=Number.parseInt(W[1],10)*1000}$.set(Y,{response:Q.clone(),expiration:Date.now()+G})},async delete(Z){return $.delete(Z.url)}}}function ZX(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`}function QX($,X){if(X.platform==="cloudflare"){let Z=$.cf;if(Z)return{city:Z.city,country:Z.country,countryCode:Z.country,region:Z.region,latitude:Z.latitude?Number.parseFloat(Z.latitude):void 0,longitude:Z.longitude?Number.parseFloat(Z.longitude):void 0,timezone:Z.timezone}}if(X.platform==="vercel"){let Z={},Q=$.headers.get("x-vercel-ip-city"),Y=$.headers.get("x-vercel-ip-country"),J=$.headers.get("x-vercel-ip-country-region"),G=$.headers.get("x-vercel-ip-latitude"),W=$.headers.get("x-vercel-ip-longitude");if(Q)Z.city=decodeURIComponent(Q);if(Y)Z.countryCode=Y;if(J)Z.region=J;if(G)Z.latitude=Number.parseFloat(G);if(W)Z.longitude=Number.parseFloat(W);return Object.keys(Z).length>0?Z:void 0}if(X.platform==="netlify"){let Z={},Q=$.headers.get("x-nf-geo-city"),Y=$.headers.get("x-nf-geo-country");if(Q)Z.city=Q;if(Y)Z.countryCode=Y;return Object.keys(Z).length>0?Z:void 0}return}function U5($,X,Z){let Q=new Headers($.headers);if(X.origins==="*")Q.set("Access-Control-Allow-Origin","*");else if(X.origins&&Z&&X.origins.includes(Z))Q.set("Access-Control-Allow-Origin",Z),Q.set("Vary","Origin");if(X.methods)Q.set("Access-Control-Allow-Methods",X.methods.join(", "));if(X.headers)Q.set("Access-Control-Allow-Headers",X.headers.join(", "));if(X.exposeHeaders)Q.set("Access-Control-Expose-Headers",X.exposeHeaders.join(", "));if(X.credentials)Q.set("Access-Control-Allow-Credentials","true");if(X.maxAge)Q.set("Access-Control-Max-Age",String(X.maxAge));return new Response($.body,{status:$.status,statusText:$.statusText,headers:Q})}function A$($){let X=S1();return async(Z,Q)=>{let Y=performance.now(),J=ZX(),G={runtime:X,platform:Q||{},requestId:J,geo:QX(Z,X),timing:{start:Y,getElapsed:()=>performance.now()-Y},kv:n4(Q?.KV),cache:e4(),env:s4(Q?.env)};try{if(Z.method==="OPTIONS"&&$.cors){let K=new Response(null,{status:204});return K=U5(K,$.cors,Z.headers.get("Origin")||void 0),K}if($.cache?.enabled&&Z.method==="GET"&&G.cache){if(n6(Z,$.cache)){let _=await G.cache.match(Z);if(_){let U=new Response(_.body,_);return U.headers.set("X-Cache","HIT"),U.headers.set("X-Request-Id",J),$.cors?U5(U,$.cors,Z.headers.get("Origin")||void 0):U}}}let W;if($.middleware&&$.middleware.length>0)W=await YX(Z,G,$.middleware,async()=>{let K=await $.render(Z,G);return typeof K==="string"?new Response(K,{headers:{"Content-Type":"text/html; charset=utf-8"}}):K});else{let K=await $.render(Z,G);W=typeof K==="string"?new Response(K,{headers:{"Content-Type":"text/html; charset=utf-8"}}):K}if(W.headers.set("X-Request-Id",J),W.headers.set("X-Response-Time",`${G.timing.getElapsed().toFixed(2)}ms`),$.cache?.enabled&&Z.method==="GET"&&G.cache){if(n6(Z,$.cache)&&W.status===200){let _=$.cache.ttl||60,U=W.clone();U.headers.set("Cache-Control",`public, max-age=${_}`),await G.cache.put(Z,U),W.headers.set("X-Cache","MISS")}}if($.cors)W=U5(W,$.cors,Z.headers.get("Origin")||void 0);return W}catch(W){let K=W instanceof Error?W:Error(String(W));if($.onError)return $.onError(K,Z);return new Response(`Internal Server Error: ${K.message}`,{status:500,headers:{"Content-Type":"text/plain","X-Request-Id":J}})}}}function n6($,X){let Q=new URL($.url).pathname;if(X.excludePaths){for(let Y of X.excludePaths)if(Y.test(Q))return!1}if(X.includePaths){for(let Y of X.includePaths)if(Y.test(Q))return!0;return!1}return!0}async function YX($,X,Z,Q){let Y=0,J=async()=>{if(Y>=Z.length)return Q();let G=Z[Y];return Y++,G($,X,J)};return J()}function dW($,X){let Z=new Headers(X?.headers);return Z.set("Content-Type","text/html; charset=utf-8"),Z.set("Transfer-Encoding","chunked"),new Response($,{...X,headers:Z})}function uW(){let $=new TextEncoder;return new TransformStream({transform(X,Z){Z.enqueue($.encode(X))}})}function mW($){let X=new TextEncoder;return new ReadableStream({async start(Z){for await(let Q of $)Z.enqueue(X.encode(Q));Z.close()}})}function pW($){let X=A$($);return{async fetch(Z,Q,Y){return X(Z,{env:Q,ctx:Y,KV:Q.KV})}}}function cW($){let X=A$($);return(Z)=>X(Z,{})}function lW($){let X=A$($);return(Z)=>X(Z,{})}function iW($){let X=A$($);return(Z,Q)=>{return X(Z,{netlifyContext:Q})}}function aW($){let X=$.headers.get("Cookie");if(!X)return{};let Z={};for(let Q of X.split(";")){let[Y,J]=Q.split("=").map((G)=>G.trim());if(Y&&J)Z[Y]=decodeURIComponent(J)}return Z}function rW($,X,Z){return B5($,X,Z)}function sW($,X){let Z=new Headers(X?.headers);return Z.set("Content-Type","application/json; charset=utf-8"),new Response(JSON.stringify($),{...X,headers:Z})}function nW($,X=302){return new Response(null,{status:X,headers:{Location:$}})}function oW($="Not Found"){return new Response($,{status:404,headers:{"Content-Type":"text/plain"}})}var t6={indentSize:2,useTabs:!1,maxLineLength:120,normalizeWhitespace:!0,sortAttributes:!1,trimTrailingWhitespace:!0};function JX($,X={}){let Z={...t6,...X};if($.trim()==="")return`
|
|
1902
|
-
`;let Q=$;if(Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,"");if(Q=
|
|
1901
|
+
</tr>`;Y+="</tbody></table>";for(let J of Z)if(J.example)Y+=`<h3>@${J.name}</h3>`,Y+=`<p>${J.description||""}</p>`,Y+="<h4>Example</h4>",Y+=`<pre><code>${J.example.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}</code></pre>`}return Y+="</body></html>",Y}function r4($=[],X=[],Z=[],Q){return JSON.stringify({components:$,templates:X,directives:Z,extraContent:Q||""},null,2)}async function s4($){try{let{componentsDir:X,templatesDir:Z,webComponentsConfig:Q,customDirectives:Y,config:J}=$;if(!J.enabled)return!1;let G=J.outputDir||"docs";if(await _5.promises.mkdir(G,{recursive:!0}),console.log("Generating documentation..."),X)console.log(`Components directory: ${X}`);if(Z)console.log(`Templates directory: ${Z}`);console.log(`Output directory: ${G}`);let W=[];if(J.components!==!1&&X)console.log("Generating component documentation..."),W=await p4(X,Q),console.log(`Found ${W.length} components`);let K=[];if(J.templates!==!1&&Z)console.log("Generating template documentation..."),K=await c4(Z),console.log(`Found ${K.length} templates`);let _=[];if(J.directives!==!1)console.log("Generating directive documentation..."),_=await l4(Y),console.log(`Found ${_.length} directives`);let U=J.format||"markdown",F=J.extraContent,z="",j="";switch(U){case"markdown":z=i4(W,K,_,F),j="md";break;case"html":z=a4(W,K,_,F),j="html";break;case"json":z=r4(W,K,_,F),j="json";break;default:throw Error(`Unsupported documentation format: ${U}`)}let H=k1.join(G,`stx-docs.${j}`);return await Bun.write(H,z),console.log(`Documentation generated: ${H}`),!0}catch(X){return console.error("Error generating documentation:",X),!1}}async function vW($){let X={enabled:!0,outputDir:$.output||"docs",format:$.format||"markdown",components:$.components!==!1,templates:$.templates!==!1,directives:$.directives!==!1,extraContent:$.extraContent},Z=$.componentsDir||w0.componentsDir,Q=$.templatesDir||".";return s4({componentsDir:Z,templatesDir:Q,webComponentsConfig:w0.webComponents,customDirectives:w0.customDirectives,config:X})}import L1 from"process";function S1(){if(typeof globalThis<"u"&&"caches"in globalThis&&"CF"in globalThis)return{platform:"cloudflare",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["kv","r2","d1","durable-objects","queues"]};if(typeof globalThis<"u"&&"Deno"in globalThis)return{platform:"deno",version:globalThis.Deno.version?.deno,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["kv","deploy","ffi"]};if(typeof globalThis<"u"&&"Bun"in globalThis)return{platform:"bun",version:globalThis.Bun.version,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!1,supportsCache:!1,capabilities:["sqlite","ffi","native-modules"]};if(typeof globalThis<"u"&&"EdgeRuntime"in globalThis)return{platform:"vercel",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["edge-config","blob"]};if(typeof globalThis<"u"&&"Netlify"in globalThis)return{platform:"netlify",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!1,capabilities:["blobs","edge-functions"]};if(typeof globalThis<"u"&&"fastly"in globalThis)return{platform:"fastly",supportsStreaming:!0,supportsCrypto:!0,supportsKV:!0,supportsCache:!0,capabilities:["dictionary","backend","geolocation"]};if(L1.versions?.node)return{platform:"node",version:L1.versions.node,supportsStreaming:!0,supportsCrypto:!0,supportsKV:!1,supportsCache:!1,capabilities:["fs","child-process","native-modules"]};return{platform:"unknown",supportsStreaming:!1,supportsCrypto:!1,supportsKV:!1,supportsCache:!1,capabilities:[]}}function dW(){let $=S1();return["cloudflare","deno","vercel","netlify","fastly"].includes($.platform)}function uW(){return S1().platform!=="unknown"}function n4($){return{get(X){if($&&X in $){let Z=$[X];return typeof Z==="string"?Z:void 0}if(typeof globalThis<"u"&&"Deno"in globalThis)return globalThis.Deno.env.get(X);if(L1.env)return L1.env[X];return},getOrThrow(X){let Z=this.get(X);if(Z===void 0)throw Error(`Environment variable "${X}" is not set`);return Z},has(X){return this.get(X)!==void 0},all(){let X={};if($){for(let[Z,Q]of Object.entries($))if(typeof Q==="string")X[Z]=Q}if(typeof globalThis<"u"&&"Deno"in globalThis){let Z=globalThis.Deno.env.toObject();Object.assign(X,Z)}if(L1.env){for(let[Z,Q]of Object.entries(L1.env))if(Q!==void 0)X[Z]=Q}return X}}}function o4($){let X=S1();if(X.platform==="cloudflare"&&$)return $;if(X.platform==="deno"&&"Deno"in globalThis)return t4();if(X.platform==="node"||X.platform==="bun")return e4();return}function t4(){let $=null,X=async()=>{if(!$)$=await globalThis.Deno.openKv();return $};return{async get(Z){return(await(await X()).get(["stx",Z])).value},async getWithMetadata(Z){let Q=await X(),Y=await Q.get(["stx",Z]),J=await Q.get(["stx-meta",Z]);return{value:Y.value,metadata:J.value}},async put(Z,Q,Y){let J=await X(),G=Y?.expirationTtl?Y.expirationTtl*1000:void 0;if(await J.set(["stx",Z],Q,G?{expireIn:G}:void 0),Y?.metadata)await J.set(["stx-meta",Z],Y.metadata,G?{expireIn:G}:void 0)},async delete(Z){let Q=await X();await Q.delete(["stx",Z]),await Q.delete(["stx-meta",Z])},async list(Z){let Q=await X(),Y=Z?.prefix?["stx",Z.prefix]:["stx"],J=Q.list({prefix:Y,limit:Z?.limit||100}),G=[];for await(let W of J){let _=W.key.slice(1).join("/");if(!_.startsWith("stx-meta/"))G.push({name:_})}return{keys:G,list_complete:!0}}}}function e4(){let $=new Map,X=()=>{let Z=Date.now();for(let[Q,Y]of $.entries())if(Y.expiration&&Y.expiration<Z)$.delete(Q)};return{async get(Z){X();let Q=$.get(Z);if(!Q)return null;if(Q.expiration&&Q.expiration<Date.now())return $.delete(Z),null;return Q.value},async getWithMetadata(Z){X();let Q=$.get(Z);if(!Q)return{value:null,metadata:null};if(Q.expiration&&Q.expiration<Date.now())return $.delete(Z),{value:null,metadata:null};return{value:Q.value,metadata:Q.metadata||null}},async put(Z,Q,Y){let J=Y?.expiration?Y.expiration*1000:Y?.expirationTtl?Date.now()+Y.expirationTtl*1000:void 0;$.set(Z,{value:Q,metadata:Y?.metadata,expiration:J})},async delete(Z){$.delete(Z)},async list(Z){X();let Q=[];for(let[Y,J]of $.entries()){if(Z?.prefix&&!Y.startsWith(Z.prefix))continue;if(Q.push({name:Y,expiration:J.expiration,metadata:J.metadata}),Z?.limit&&Q.length>=Z.limit)break}return{keys:Q,list_complete:!0}}}}function $X(){let $=S1();if($.platform==="cloudflare"&&"caches"in globalThis)return XX();if($.supportsStreaming)return ZX();return}function XX(){return{async match($){return(await caches.default).match($)},async put($,X){await(await caches.default).put($,X.clone())},async delete($){return(await caches.default).delete($)}}}function ZX(){let $=new Map,X=60000;return{async match(Z){let Q=Z.url,Y=$.get(Q);if(!Y)return;if(Date.now()>Y.expiration){$.delete(Q);return}return Y.response.clone()},async put(Z,Q){let Y=Z.url,J=Q.headers.get("Cache-Control"),G=60000;if(J){let W=J.match(/max-age=(\d+)/);if(W)G=Number.parseInt(W[1],10)*1000}$.set(Y,{response:Q.clone(),expiration:Date.now()+G})},async delete(Z){return $.delete(Z.url)}}}function QX(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`}function YX($,X){if(X.platform==="cloudflare"){let Z=$.cf;if(Z)return{city:Z.city,country:Z.country,countryCode:Z.country,region:Z.region,latitude:Z.latitude?Number.parseFloat(Z.latitude):void 0,longitude:Z.longitude?Number.parseFloat(Z.longitude):void 0,timezone:Z.timezone}}if(X.platform==="vercel"){let Z={},Q=$.headers.get("x-vercel-ip-city"),Y=$.headers.get("x-vercel-ip-country"),J=$.headers.get("x-vercel-ip-country-region"),G=$.headers.get("x-vercel-ip-latitude"),W=$.headers.get("x-vercel-ip-longitude");if(Q)Z.city=decodeURIComponent(Q);if(Y)Z.countryCode=Y;if(J)Z.region=J;if(G)Z.latitude=Number.parseFloat(G);if(W)Z.longitude=Number.parseFloat(W);return Object.keys(Z).length>0?Z:void 0}if(X.platform==="netlify"){let Z={},Q=$.headers.get("x-nf-geo-city"),Y=$.headers.get("x-nf-geo-country");if(Q)Z.city=Q;if(Y)Z.countryCode=Y;return Object.keys(Z).length>0?Z:void 0}return}function U5($,X,Z){let Q=new Headers($.headers);if(X.origins==="*")Q.set("Access-Control-Allow-Origin","*");else if(X.origins&&Z&&X.origins.includes(Z))Q.set("Access-Control-Allow-Origin",Z),Q.set("Vary","Origin");if(X.methods)Q.set("Access-Control-Allow-Methods",X.methods.join(", "));if(X.headers)Q.set("Access-Control-Allow-Headers",X.headers.join(", "));if(X.exposeHeaders)Q.set("Access-Control-Expose-Headers",X.exposeHeaders.join(", "));if(X.credentials)Q.set("Access-Control-Allow-Credentials","true");if(X.maxAge)Q.set("Access-Control-Max-Age",String(X.maxAge));return new Response($.body,{status:$.status,statusText:$.statusText,headers:Q})}function A$($){let X=S1();return async(Z,Q)=>{let Y=performance.now(),J=QX(),G={runtime:X,platform:Q||{},requestId:J,geo:YX(Z,X),timing:{start:Y,getElapsed:()=>performance.now()-Y},kv:o4(Q?.KV),cache:$X(),env:n4(Q?.env)};try{if(Z.method==="OPTIONS"&&$.cors){let K=new Response(null,{status:204});return K=U5(K,$.cors,Z.headers.get("Origin")||void 0),K}if($.cache?.enabled&&Z.method==="GET"&&G.cache){if(n6(Z,$.cache)){let _=await G.cache.match(Z);if(_){let U=new Response(_.body,_);return U.headers.set("X-Cache","HIT"),U.headers.set("X-Request-Id",J),$.cors?U5(U,$.cors,Z.headers.get("Origin")||void 0):U}}}let W;if($.middleware&&$.middleware.length>0)W=await JX(Z,G,$.middleware,async()=>{let K=await $.render(Z,G);return typeof K==="string"?new Response(K,{headers:{"Content-Type":"text/html; charset=utf-8"}}):K});else{let K=await $.render(Z,G);W=typeof K==="string"?new Response(K,{headers:{"Content-Type":"text/html; charset=utf-8"}}):K}if(W.headers.set("X-Request-Id",J),W.headers.set("X-Response-Time",`${G.timing.getElapsed().toFixed(2)}ms`),$.cache?.enabled&&Z.method==="GET"&&G.cache){if(n6(Z,$.cache)&&W.status===200){let _=$.cache.ttl||60,U=W.clone();U.headers.set("Cache-Control",`public, max-age=${_}`),await G.cache.put(Z,U),W.headers.set("X-Cache","MISS")}}if($.cors)W=U5(W,$.cors,Z.headers.get("Origin")||void 0);return W}catch(W){let K=W instanceof Error?W:Error(String(W));if($.onError)return $.onError(K,Z);return new Response(`Internal Server Error: ${K.message}`,{status:500,headers:{"Content-Type":"text/plain","X-Request-Id":J}})}}}function n6($,X){let Q=new URL($.url).pathname;if(X.excludePaths){for(let Y of X.excludePaths)if(Y.test(Q))return!1}if(X.includePaths){for(let Y of X.includePaths)if(Y.test(Q))return!0;return!1}return!0}async function JX($,X,Z,Q){let Y=0,J=async()=>{if(Y>=Z.length)return Q();let G=Z[Y];return Y++,G($,X,J)};return J()}function mW($,X){let Z=new Headers(X?.headers);return Z.set("Content-Type","text/html; charset=utf-8"),Z.set("Transfer-Encoding","chunked"),new Response($,{...X,headers:Z})}function pW(){let $=new TextEncoder;return new TransformStream({transform(X,Z){Z.enqueue($.encode(X))}})}function cW($){let X=new TextEncoder;return new ReadableStream({async start(Z){for await(let Q of $)Z.enqueue(X.encode(Q));Z.close()}})}function lW($){let X=A$($);return{async fetch(Z,Q,Y){return X(Z,{env:Q,ctx:Y,KV:Q.KV})}}}function iW($){let X=A$($);return(Z)=>X(Z,{})}function aW($){let X=A$($);return(Z)=>X(Z,{})}function rW($){let X=A$($);return(Z,Q)=>{return X(Z,{netlifyContext:Q})}}function sW($){let X=$.headers.get("Cookie");if(!X)return{};let Z={};for(let Q of X.split(";")){let[Y,J]=Q.split("=").map((G)=>G.trim());if(Y&&J)Z[Y]=decodeURIComponent(J)}return Z}function nW($,X,Z){return B5($,X,Z)}function oW($,X){let Z=new Headers(X?.headers);return Z.set("Content-Type","application/json; charset=utf-8"),new Response(JSON.stringify($),{...X,headers:Z})}function tW($,X=302){return new Response(null,{status:X,headers:{Location:$}})}function eW($="Not Found"){return new Response($,{status:404,headers:{"Content-Type":"text/plain"}})}var t6={indentSize:2,useTabs:!1,maxLineLength:120,normalizeWhitespace:!0,sortAttributes:!1,trimTrailingWhitespace:!0};function GX($,X={}){let Z={...t6,...X};if($.trim()==="")return`
|
|
1902
|
+
`;let Q=$;if(Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,"");if(Q=KX(Q,Z),Q=LX(Q,Z),Q=_X(Q,Z),Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,""),Q=Q.replace(/(\S)[ \t]+(<\/[^>]+>)/g,"$1$2");if(Q=Q.replace(/\r\n/g,`
|
|
1903
1903
|
`).replace(/\r/g,`
|
|
1904
1904
|
`),!Q.endsWith(`
|
|
1905
1905
|
`))Q+=`
|
|
1906
|
-
`;return Q}function
|
|
1906
|
+
`;return Q}function X2($,X={}){let Z={...t6,...X};if($.trim()==="")return`
|
|
1907
1907
|
`;let Q=$;if(Q=Q.replace(/^( *)```(html|stx)\n([\s\S]*?)^( *)```/gm,(Y,J,G,W,K)=>{let _=W.split(`
|
|
1908
1908
|
`),U=_.filter((L)=>L.trim().length>0);if(U.length===0)return Y;let F=Math.min(...U.map((L)=>{let O=L.match(/^( *)/);return O?O[1].length:0})),z=_.map((L)=>{if(L.trim().length===0)return"";return L.substring(F)}).join(`
|
|
1909
|
-
`),H=
|
|
1909
|
+
`),H=GX(z,Z).trimEnd().split(`
|
|
1910
1910
|
`).map((L)=>{if(L.trim().length===0)return"";return J+L}).join(`
|
|
1911
1911
|
`);return`${J}\`\`\`${G}
|
|
1912
1912
|
${H}
|
|
@@ -1914,7 +1914,7 @@ ${J}\`\`\``}),Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,"");if(Q=Q.replac
|
|
|
1914
1914
|
`).replace(/\r/g,`
|
|
1915
1915
|
`),!Q.endsWith(`
|
|
1916
1916
|
`))Q+=`
|
|
1917
|
-
`;return Q}function
|
|
1917
|
+
`;return Q}function WX($){let X=$,Z=[],Q="__PROTECTED_BLOCK_";return X=X.replace(/(<(?:pre|code|textarea)[^>]*>)([\s\S]*?)(<\/(?:pre|code|textarea)>)/gi,(Y)=>{let J=Z.length;return Z.push(Y),`${Q}${J}__`}),X=X.replace(/(@(?:if|foreach|for|while|unless|section|component|slot|push|prepend|error|auth|guest|can)(?:\((?:[^()'"]|'[^']*'|"[^"]*"|\((?:[^()'"]|'[^']*'|"[^"]*")*\))*\))?)/g,`
|
|
1918
1918
|
$1
|
|
1919
1919
|
`),X=X.replace(/(@end\w+)/g,`
|
|
1920
1920
|
$1
|
|
@@ -1928,10 +1928,10 @@ ${G}`}),X=X.replace(/(<\/[^>]+>)(?=<|$)/g,(Y,J,G,W)=>{let K=W.substring(Math.max
|
|
|
1928
1928
|
`}),X=X.replace(new RegExp(`${Q}(\\d+)__`,"g"),(Y,J)=>{return Z[Number.parseInt(J,10)]}),X=X.replace(/\n{2,}/g,`
|
|
1929
1929
|
`),X=X.split(`
|
|
1930
1930
|
`).map((Y)=>Y.trim()).join(`
|
|
1931
|
-
`),X=X.replace(/^\n+/,"").replace(/\n+$/,""),X}function
|
|
1932
|
-
`),Y=[],J=0,G=!1,W=X.useTabs?"\t":" ".repeat(X.indentSize);for(let K=0;K<Q.length;K++){let _=Q[K],U=_.trim();if(U===""){Y.push("");continue}let F=U.match(/<script\b/i),z=U.match(/<\/script>/i);if(G&&!z){Y.push(_);continue}let j=U===">";if(o6(U)&&!U.startsWith("<")&&!U.startsWith("@")){Y.push(W.repeat(J)+U);continue}let H=U.startsWith("@end"),L=U.startsWith("@else")||U.startsWith("@elseif"),O=U.startsWith("@")&&
|
|
1933
|
-
`)}function
|
|
1934
|
-
`)||Y.includes("@"))return Z;let J=/(\w+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,G=[],W;while((W=J.exec(Y))!==null)G.push({name:W[1],value:W[2]});G.sort((_,U)=>{if(_.name==="id")return-1;if(U.name==="id")return 1;if(_.name==="class")return-1;if(U.name==="class")return 1;return _.name.localeCompare(U.name)});let K=G.map((_)=>_.value?`${_.name}=${_.value}`:_.name).join(" ");return`<${Q}${K?` ${K}`:""}>`})}import e6 from"fs";import L5 from"path";var
|
|
1931
|
+
`),X=X.replace(/^\n+/,"").replace(/\n+$/,""),X}function KX($,X){let Q=WX($).split(`
|
|
1932
|
+
`),Y=[],J=0,G=!1,W=X.useTabs?"\t":" ".repeat(X.indentSize);for(let K=0;K<Q.length;K++){let _=Q[K],U=_.trim();if(U===""){Y.push("");continue}let F=U.match(/<script\b/i),z=U.match(/<\/script>/i);if(G&&!z){Y.push(_);continue}let j=U===">";if(o6(U)&&!U.startsWith("<")&&!U.startsWith("@")){Y.push(W.repeat(J)+U);continue}let H=U.startsWith("@end"),L=U.startsWith("@else")||U.startsWith("@elseif"),O=U.startsWith("@")&&BX(U),A=U.startsWith("<!DOCTYPE")||U.startsWith("<!doctype"),V=U.startsWith("<!--"),E=U.startsWith("</"),q=U.startsWith("<")&&!E&&!V&&!A,N=U.includes("/>")||UX(U),I=o6(U);if(E||H)J=Math.max(0,J-1);let M=L?Math.max(0,J-1):J;if(j)Y.push(_);else Y.push(W.repeat(M)+U);if(q&&!N&&!I&&!j||O)J++;if(F)G=!0;if(z)G=!1}return Y.join(`
|
|
1933
|
+
`)}function _X($,X){if($=$.replace(/@(if|elseif|foreach|for|while)\s*\(\s*([^)]+)\s*\)/g,(Z,Q,Y)=>{let J=Y.trim().replace(/\s+/g," ");return`@${Q}(${J})`}),$=$.replace(/@(csrf|method)\s*\(\s*([^)]*)\s*\)/g,(Z,Q,Y)=>{if(Y.trim()==="")return`@${Q}`;return`@${Q}(${Y.trim()})`}),X.normalizeWhitespace)$=$.replace(/\{\{\s*([^}]+)\s*\}\}/g,(Z,Q)=>{return`{{ ${Q.trim()} }}`}),$=$.replace(/\{!!\s*([^!]+)\s*!!\}/g,(Z,Q)=>{return`{!! ${Q.trim()} !!}`});return $}function UX($){let X=["br","hr","img","input","meta","link","area","base","col","embed","source","track","wbr"];if($.includes("/>"))return!0;let Z=$.match(/<(\w+)/);if(Z){let Q=Z[1];return X.includes(Q.toLowerCase())}return!1}function o6($){return/<(\w+)(?:\s[^>]*)?>[\s\S]*?<\/\1>/.test($)}function BX($){let X=["if","unless","foreach","for","while","section","push","component","slot","markdown","wrap","error"];for(let Z of X)if($.startsWith(`@${Z}`))return!$.includes(`@end${Z}`);return!1}function LX($,X){if(!X.sortAttributes)return $;return $.replace(/<(\w+)([^>]*)>/g,(Z,Q,Y)=>{if(!Y.trim())return Z;if(Y.includes("<")||Y.includes(`
|
|
1934
|
+
`)||Y.includes("@"))return Z;let J=/(\w+)(?:=("[^"]*"|'[^']*'|[^\s>]+))?/g,G=[],W;while((W=J.exec(Y))!==null)G.push({name:W[1],value:W[2]});G.sort((_,U)=>{if(_.name==="id")return-1;if(U.name==="id")return 1;if(_.name==="class")return-1;if(U.name==="class")return 1;return _.name.localeCompare(U.name)});let K=G.map((_)=>_.value?`${_.name}=${_.value}`:_.name).join(" ");return`<${Q}${K?` ${K}`:""}>`})}import e6 from"fs";import L5 from"path";var J2={basic:{description:"Simple page with script, style, and template sections"},component:{description:"Reusable component with props and slots"},layout:{description:"Layout template with sections and yields"},blog:{description:"Blog post with frontmatter-style variables"},api:{description:"API endpoint template with JSON response"},app:{description:"Full app with stores and components"}};async function G2($="index.stx",X={}){try{let Z=X.force||!1,Q=L5.resolve(process.cwd(),$);if(await Bun.file(Q).exists()){if(!Z)throw Error(`File ${$} already exists. Use --force to overwrite.`);console.warn(`File ${$} already exists. Overwriting...`)}let Y=L5.dirname(Q);if(!e6.existsSync(Y))e6.mkdirSync(Y,{recursive:!0});let J;if(X.template){let G=L5.resolve(process.cwd(),X.template);if(!await Bun.file(G).exists())throw Error(`Template file ${X.template} does not exist.`);if(!G.endsWith(".stx"))console.warn(`Warning: Template file ${X.template} does not have a .stx extension. Using it anyway.`);J=await Bun.file(G).text(),console.warn(`Using template from ${X.template}`)}else if(X.preset)J=$8(X.preset),console.warn(`Using '${X.preset}' preset template`);else J=$8("basic");return await Bun.write(Q,J),console.warn(`Created new stx file: ${$}`),!0}catch(Z){return console.error(`Error creating file: ${Z instanceof Error?Z.message:String(Z)}`),!1}}function $8($){switch($){case"basic":return X8();case"component":return FX();case"layout":return zX();case"blog":return jX();case"api":return HX();case"app":return OX();default:return X8()}}function X8(){return`<script>
|
|
1935
1935
|
const title = "My stx Page"
|
|
1936
1936
|
const description = "A page built with stx"
|
|
1937
1937
|
const features = [
|
|
@@ -1956,7 +1956,7 @@ const features = [
|
|
|
1956
1956
|
</div>
|
|
1957
1957
|
@endforeach
|
|
1958
1958
|
</main>
|
|
1959
|
-
@endsection`}function
|
|
1959
|
+
@endsection`}function FX(){return`{{-- Component: Card --}}
|
|
1960
1960
|
{{-- Props: title, variant, collapsible --}}
|
|
1961
1961
|
{{-- Usage: @component('card', { title: "Hello", variant: "primary", collapsible: true }) Content @endcomponent --}}
|
|
1962
1962
|
<script>
|
|
@@ -2001,7 +2001,7 @@ const features = [
|
|
|
2001
2001
|
.card.collapsed .card__toggle { transform: rotate(-90deg); }
|
|
2002
2002
|
.card__body { padding: 1rem; }
|
|
2003
2003
|
.card.collapsed .card__body { display: none; }
|
|
2004
|
-
</style>`}function
|
|
2004
|
+
</style>`}function zX(){return`<!DOCTYPE html>
|
|
2005
2005
|
<html lang="en">
|
|
2006
2006
|
<head>
|
|
2007
2007
|
<meta charset="UTF-8">
|
|
@@ -2052,7 +2052,7 @@ const features = [
|
|
|
2052
2052
|
|
|
2053
2053
|
@yield('scripts')
|
|
2054
2054
|
</body>
|
|
2055
|
-
</html>`}function
|
|
2055
|
+
</html>`}function jX(){return`<script>
|
|
2056
2056
|
// Article metadata
|
|
2057
2057
|
const title = "My Blog Post"
|
|
2058
2058
|
const author = "Your Name"
|
|
@@ -2097,7 +2097,7 @@ const features = [
|
|
|
2097
2097
|
<p>Wrap up your thoughts here.</p>
|
|
2098
2098
|
</div>
|
|
2099
2099
|
</article>
|
|
2100
|
-
@endsection`}function
|
|
2100
|
+
@endsection`}function HX(){return`<script>
|
|
2101
2101
|
// API endpoint configuration
|
|
2102
2102
|
const endpoint = "/api/data"
|
|
2103
2103
|
const method = "GET"
|
|
@@ -2132,7 +2132,7 @@ const features = [
|
|
|
2132
2132
|
}
|
|
2133
2133
|
@else
|
|
2134
2134
|
{{ JSON.stringify(data, null, 2) }}
|
|
2135
|
-
@endif`}function
|
|
2135
|
+
@endif`}function OX(){return`<!DOCTYPE html>
|
|
2136
2136
|
<html lang="en">
|
|
2137
2137
|
<head>
|
|
2138
2138
|
<meta charset="UTF-8">
|
|
@@ -2357,7 +2357,7 @@ const features = [
|
|
|
2357
2357
|
})();
|
|
2358
2358
|
</script>
|
|
2359
2359
|
</body>
|
|
2360
|
-
</html>`}import{createHash as
|
|
2360
|
+
</html>`}import{createHash as AX}from"crypto";import{existsSync as P1,mkdirSync as qX,readFileSync as F5,writeFileSync as NX,readdirSync as MX,statSync as VX}from"fs";import{basename as b1,dirname as b0,extname as y1,join as C0,relative as Z8}from"path";import{gzipSync as EX}from"zlib";var Q8={outDir:"dist",publicPath:"/",sourcemaps:!0,minify:{js:!0,css:!0,html:!0,dropConsole:!0,dropDebugger:!0,mangle:!0},splitting:{vendor:!0,minSize:20000,maxSize:250000,chunkNames:"deterministic"},css:{extract:!0,minify:!0,filename:"assets/[name].[hash].css"},assets:{inlineLimit:4096,filename:"assets/[name].[hash][ext]",hash:!0,hashLength:8,include:["png","jpg","jpeg","gif","svg","webp","woff","woff2","ttf","eot"]},compression:{gzip:!0,brotli:!0,threshold:1024,deleteOriginal:!1}};class z5{config;startTime=0;outputs=[];chunks=[];assets=[];warnings=[];errors=[];moduleGraph=new Map;assetHashes=new Map;constructor($){this.config={...Q8,...$}}async build(){this.startTime=Date.now(),this.outputs=[],this.chunks=[],this.assets=[],this.warnings=[],this.errors=[];try{this.ensureDir(this.config.outDir),await this.runPluginHook("setup"),await this.runPluginHook("buildStart");let $=this.collectEntries();for(let[Z,Q]of $)await this.buildEntry(Z,Q);if(this.config.css?.extract)await this.extractCss();if(await this.processAssets(),this.config.splitting)await this.performCodeSplitting();if(this.config.minify)await this.minifyOutputs();if(this.config.sourcemaps)await this.generateSourceMaps();if(await this.fingerprintAssets(),this.config.compression)await this.compressOutputs();if(this.config.analyze)await this.analyzeBundle();let X=this.getResult();return await this.runPluginHook("buildEnd",X),X}catch($){return this.errors.push(String($)),this.getResult()}}collectEntries(){let $=new Map,{entry:X}=this.config;if(typeof X==="string")$.set("main",X);else if(Array.isArray(X))X.forEach((Z,Q)=>{let Y=b1(Z,y1(Z));$.set(Y,Z)});else if(typeof X==="object")Object.entries(X).forEach(([Z,Q])=>{$.set(Z,Q)});return $}async buildEntry($,X){if(!await Bun.file(X).exists()){this.errors.push(`Entry point not found: ${X}`);return}let Z=await Bun.file(X).text(),Q=y1(X),Y=Z,J="js";if(Q===".stx"||Q===".html")J="html",Y=await this.processTemplate(Z,X);else if(Q===".css")J="css",Y=await this.processCss(Z,X);else if(Q===".js"||Q===".ts")J="js",Y=await this.processScript(Z,X);Y=await this.runPluginTransform(Y,X);let G=this.generateHash(Y),W=this.getOutputName($,J,G),K=C0(this.config.outDir,W);this.ensureDir(b0(K)),await Bun.write(K,Y),this.outputs.push({path:K,type:J,size:Buffer.byteLength(Y),hash:G,sources:[X],isEntry:!0})}resolveRelativePath($,X){if(X.startsWith("/"))return C0(b0($),"..",X);return C0(b0($),X)}async processTemplate($,X){let Z=$,Q=[],Y=[];if(Z=Z.replace(/<script\b([^>]*)\bstx-inline\b([^>]*)(?:><\/script>|><\/script>|\/>)/gi,(J,G,W)=>{let K=(G+W).match(/src=["']([^"']+)["']/);if(K){let _=this.resolveRelativePath(X,K[1]);if(P1(_)){let U=F5(_,"utf-8");Q.push(`// Source: ${K[1]}
|
|
2361
2361
|
${U}`)}else this.warnings.push(`External script not found: ${_}`)}return""}),Z=Z.replace(/<link\b([^>]*)\bstx-inline\b([^>]*)(?:\/>|>)/gi,(J,G,W)=>{let K=(G+W).match(/href=["']([^"']+)["']/);if(K){let _=this.resolveRelativePath(X,K[1]);if(P1(_)){let U=F5(_,"utf-8");Y.push(`/* Source: ${K[1]} */
|
|
2362
2362
|
${U}`)}else this.warnings.push(`External stylesheet not found: ${_}`)}return""}),Z=Z.replace(/<script\b(?![^>]*\bstx-inline\b)([^>]*)>([\s\S]*?)<\/script>/gi,(J,G,W)=>{if(/\bsrc=/.test(G))return J;if(W.trim())Q.push(W);return""}),Z=Z.replace(/<style\b[^>]*>([\s\S]*?)<\/style>/gi,(J,G)=>{if(G.trim())Y.push(G);return""}),Q.length>0){let J=Q.join(`
|
|
2363
2363
|
|
|
@@ -2366,7 +2366,7 @@ ${U}`)}else this.warnings.push(`External stylesheet not found: ${_}`)}return""})
|
|
|
2366
2366
|
|
|
2367
2367
|
`),G=this.generateHash(J).slice(0,8),W=`assets/app.${G}.css`,K=C0(this.config.outDir,W);this.ensureDir(b0(K)),await Bun.write(K,J),this.outputs.push({path:K,type:"css",size:Buffer.byteLength(J),hash:G,sources:[X]}),Z=Z.replace("</head>",`<link rel="stylesheet" href="${this.config.publicPath}${W}">
|
|
2368
2368
|
</head>`)}return Z}async processCss($,X){let Z=$;if(typeof this.config.minify==="object"&&this.config.minify.css)Z=this.minifyCss(Z);return Z}async processScript($,X){let Z=$;if(this.config.define)for(let[Q,Y]of Object.entries(this.config.define))Z=Z.replace(new RegExp(Q.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),Y);return Z}async extractCss(){let $=[];for(let J of this.outputs)if(J.type==="css"){let G=await Bun.file(J.path).text();$.push(G)}if($.length===0)return;let X=$.join(`
|
|
2369
|
-
`),Z=this.generateHash(X).slice(0,8),Q=(this.config.css?.filename||"assets/[name].[hash].css").replace("[name]","styles").replace("[hash]",Z),Y=C0(this.config.outDir,Q);this.ensureDir(b0(Y)),await Bun.write(Y,X),this.outputs.push({path:Y,type:"css",size:Buffer.byteLength(X),hash:Z})}async processAssets(){let $=C0(b0(this.config.outDir),"public");if(!P1($))return;let X=this.config.assets||{},Z=X.include||[];this.walkDir($,(Q)=>{let Y=y1(Q).slice(1).toLowerCase();if(!Z.includes(Y))return;let J=F5(Q),G=J.length;if(X.inlineLimit&&G<X.inlineLimit)return;let W=X.hash?this.generateHash(J).slice(0,X.hashLength||8):"",K=(X.filename||"assets/[name].[hash][ext]").replace("[name]",b1(Q,y1(Q))).replace("[hash]",W).replace("[ext]",y1(Q)),_=C0(this.config.outDir,K);this.ensureDir(b0(_)),
|
|
2369
|
+
`),Z=this.generateHash(X).slice(0,8),Q=(this.config.css?.filename||"assets/[name].[hash].css").replace("[name]","styles").replace("[hash]",Z),Y=C0(this.config.outDir,Q);this.ensureDir(b0(Y)),await Bun.write(Y,X),this.outputs.push({path:Y,type:"css",size:Buffer.byteLength(X),hash:Z})}async processAssets(){let $=C0(b0(this.config.outDir),"public");if(!P1($))return;let X=this.config.assets||{},Z=X.include||[];this.walkDir($,(Q)=>{let Y=y1(Q).slice(1).toLowerCase();if(!Z.includes(Y))return;let J=F5(Q),G=J.length;if(X.inlineLimit&&G<X.inlineLimit)return;let W=X.hash?this.generateHash(J).slice(0,X.hashLength||8):"",K=(X.filename||"assets/[name].[hash][ext]").replace("[name]",b1(Q,y1(Q))).replace("[hash]",W).replace("[ext]",y1(Q)),_=C0(this.config.outDir,K);this.ensureDir(b0(_)),NX(_,J),this.assetHashes.set(Q,K),this.assets.push({name:b1(Q),file:K,size:G,source:Q}),this.outputs.push({path:_,type:"asset",size:G,hash:W,sources:[Q]})})}async performCodeSplitting(){if((typeof this.config.splitting==="object"?this.config.splitting:{}).vendor){let X=[];this.chunks.push({name:"vendor",file:"assets/vendor.js",size:0,modules:X,isVendor:!0,imports:[],dynamicImports:[]})}}async minifyOutputs(){let $=typeof this.config.minify==="object"?this.config.minify:{};for(let X of this.outputs){let Z=await Bun.file(X.path).text(),Q=Z;if(X.type==="js"&&$.js)Q=this.minifyJs(Z);else if(X.type==="css"&&$.css)Q=this.minifyCss(Z);else if(X.type==="html"&&$.html)Q=this.minifyHtml(Z);if(Q!==Z)await Bun.write(X.path,Q),X.size=Buffer.byteLength(Q)}}minifyJs($){let X=typeof this.config.minify==="object"?this.config.minify:{},Z=$;if(Z=Z.replace(/\/\*[\s\S]*?\*\//g,""),Z=Z.replace(/\/\/.*$/gm,""),X.dropConsole)Z=Z.replace(/console\.(log|debug|info|warn)\([^)]*\);?/g,"");if(X.dropDebugger)Z=Z.replace(/debugger;?/g,"");return Z=Z.replace(/\s+/g," "),Z=Z.replace(/\s*([{};,:])\s*/g,"$1"),Z=Z.replace(/;\}/g,"}"),Z.trim()}minifyCss($){let X=$;return X=X.replace(/\/\*[\s\S]*?\*\//g,""),X=X.replace(/\s+/g," "),X=X.replace(/\s*([{};:,>+~])\s*/g,"$1"),X=X.replace(/;}/g,"}"),X=X.replace(/[^{}]+\{\s*\}/g,""),X.trim()}minifyHtml($){let X=$;return X=X.replace(/<!--(?!\[if)[\s\S]*?-->/g,""),X=X.replace(/>\s+</g,"><"),X=X.replace(/\s+>/g,">"),X=X.replace(/<\s+/g,"<"),X=X.replace(/\s{2,}/g," "),X.trim()}async generateSourceMaps(){if(!this.config.sourcemaps)return;for(let $ of this.outputs)if($.type==="js"||$.type==="css"){let X=await Bun.file($.path).text(),Z=[];for(let W of $.sources||[])if(await Bun.file(W).exists())Z.push(await Bun.file(W).text());else Z.push(null);let Q={version:3,file:b1($.path),sources:$.sources||[],sourcesContent:Z,mappings:"",names:[]},Y=`${$.path}.map`;await Bun.write(Y,JSON.stringify(Q));let J=new Uint8Array([10,47,47,35,32,115,111,117,114,99,101,77,97,112,112,105,110,103,85,82,76,61]),G=this.config.sourcemaps==="inline"?`data:application/json;base64,${Buffer.from(JSON.stringify(Q)).toString("base64")}`:b1(Y);if(this.config.sourcemaps!=="hidden")await Bun.write($.path,Buffer.concat([Buffer.from(X),Buffer.from(J),Buffer.from(G)]));this.outputs.push({path:Y,type:"map",size:VX(Y).size})}}async fingerprintAssets(){for(let $ of this.outputs)if($.type==="html"){let X=await Bun.file($.path).text();for(let[Z,Q]of this.assetHashes){let Y=Z8(b0($.path),Z);X=X.replace(new RegExp(Y.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),`${this.config.publicPath}${Q}`)}await Bun.write($.path,X)}}async compressOutputs(){let $=this.config.compression||{},X=$.threshold||1024;for(let Z of this.outputs){if(Z.type==="map")continue;if(Z.size<X)continue;let Q=Buffer.from(await Bun.file(Z.path).arrayBuffer());if($.gzip){let Y=EX(Q,{level:9}),J=`${Z.path}.gz`;await Bun.write(J,Y),Z.gzipSize=Y.length}if($.brotli)try{let{brotliCompressSync:Y}=await import("zlib"),J=Y(Q);await Bun.write(`${Z.path}.br`,J)}catch{}}}async analyzeBundle(){let $=typeof this.config.analyze==="object"?this.config.analyze:{},X=$.format||"text",Z={outputs:this.outputs.map((G)=>({path:Z8(this.config.outDir,G.path),type:G.type,size:G.size,gzipSize:G.gzipSize,sizeFormatted:this.formatSize(G.size),gzipSizeFormatted:G.gzipSize?this.formatSize(G.gzipSize):void 0})),chunks:this.chunks,assets:this.assets,totalSize:this.outputs.reduce((G,W)=>G+W.size,0),totalGzipSize:this.outputs.reduce((G,W)=>G+(W.gzipSize||0),0)},Q;if(X==="json")Q=JSON.stringify(Z,null,2);else if(X==="html")Q=this.generateAnalysisHtml(Z);else Q=this.generateAnalysisText(Z);let Y=$.filename||`bundle-analysis.${X==="html"?"html":X==="json"?"json":"txt"}`,J=C0(this.config.outDir,Y);await Bun.write(J,Q),console.log(`
|
|
2370
2370
|
\uD83D\uDCCA Bundle Analysis`),console.log("\u2500".repeat(50));for(let G of Z.outputs){let W=G.gzipSizeFormatted?` (gzip: ${G.gzipSizeFormatted})`:"";console.log(` ${G.path}: ${G.sizeFormatted}${W}`)}console.log("\u2500".repeat(50)),console.log(` Total: ${this.formatSize(Z.totalSize)} (gzip: ${this.formatSize(Z.totalGzipSize)})`),console.log("")}generateAnalysisHtml($){return`<!DOCTYPE html>
|
|
2371
2371
|
<html>
|
|
2372
2372
|
<head>
|
|
@@ -2407,14 +2407,14 @@ ${U}`)}else this.warnings.push(`External stylesheet not found: ${_}`)}return""})
|
|
|
2407
2407
|
</table>
|
|
2408
2408
|
</body>
|
|
2409
2409
|
</html>`}generateAnalysisText($){let X=["Bundle Analysis","=".repeat(50),""];for(let Z of $.outputs)X.push(`${Z.path}`),X.push(` Size: ${Z.sizeFormatted}${Z.gzipSizeFormatted?` (gzip: ${Z.gzipSizeFormatted})`:""}`),X.push("");return X.push("=".repeat(50)),X.push(`Total: ${this.formatSize($.totalSize)} (gzip: ${this.formatSize($.totalGzipSize)})`),X.join(`
|
|
2410
|
-
`)}async runPluginHook($,X){if(!this.config.plugins)return;for(let Z of this.config.plugins){let Q=Z[$];if(typeof Q==="function")await Q.call(Z,X||this)}}async runPluginTransform($,X){if(!this.config.plugins)return $;let Z=$;for(let Q of this.config.plugins)if(Q.transform){let Y=await Q.transform(Z,X);if(Y!=null)Z=Y}return Z}generateHash($){return
|
|
2410
|
+
`)}async runPluginHook($,X){if(!this.config.plugins)return;for(let Z of this.config.plugins){let Q=Z[$];if(typeof Q==="function")await Q.call(Z,X||this)}}async runPluginTransform($,X){if(!this.config.plugins)return $;let Z=$;for(let Q of this.config.plugins)if(Q.transform){let Y=await Q.transform(Z,X);if(Y!=null)Z=Y}return Z}generateHash($){return AX("sha256").update($).digest("hex")}getOutputName($,X,Z){let Q=X==="html"?".html":X==="css"?".css":X==="js"?".js":"";return`${$}.${Z.slice(0,8)}${Q}`}formatSize($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(2)} KB`;return`${($/1048576).toFixed(2)} MB`}ensureDir($){if(!P1($))qX($,{recursive:!0})}walkDir($,X){if(!P1($))return;let Z=MX($,{withFileTypes:!0});for(let Q of Z){let Y=C0($,Q.name);if(Q.isDirectory())this.walkDir(Y,X);else X(Y)}}getResult(){let $=Date.now()-this.startTime,X=this.outputs.reduce((Q,Y)=>Q+Y.size,0),Z=this.outputs.reduce((Q,Y)=>Q+(Y.gzipSize||0),0);return{outputs:this.outputs,duration:$,totalSize:X,gzipSize:Z,chunks:this.chunks,assets:this.assets,warnings:this.warnings,errors:this.errors}}}async function F2($){return new z5($).build()}function z2($){return new z5($)}function j2($){return{...Q8,...$}}function IX($){return $}var A2="f9c3713";import{existsSync as v1,mkdirSync as j5}from"fs";import{join as p0,dirname as RX}from"path";import{execSync as Y8}from"child_process";var I2={default:{description:"Standard stx project with pages, components, and stores",features:["Pages","Components","Layouts","Stores","Dev server"]},minimal:{description:"Minimal setup with just the essentials",features:["Single page","Basic styles"]},full:{description:"Full-featured project with all stx capabilities",features:["Pages","Components","Layouts","Stores","API routes","PWA","i18n","Testing"]},blog:{description:"Blog template with markdown support",features:["Blog layout","Post pages","Tags","RSS feed","Markdown"]},dashboard:{description:"Admin dashboard template",features:["Sidebar","Charts","Tables","Forms","Auth pages"]},landing:{description:"Marketing landing page template",features:["Hero section","Features","Pricing","CTA","Contact form"]}};async function R2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.template||"default",Y=p0(process.cwd(),$);if(v1(Y))return Z.success=!1,Z.message=`Directory ${$} already exists`,Z;try{j5(Y,{recursive:!0});let J=DX(Q);for(let W of J)j5(p0(Y,W),{recursive:!0});let G=wX(Q,$,X);for(let[W,K]of Object.entries(G)){let _=p0(Y,W);g1(RX(_)),await Bun.write(_,K),Z.files.push(W)}if(!X.skipGit)try{Y8("git init",{cwd:Y,stdio:"ignore"}),await Bun.write(p0(Y,".gitignore"),vX()),Z.files.push(".gitignore")}catch{Z.errors.push("Failed to initialize git repository")}if(!X.skipInstall){let W=X.packageManager||QZ();try{console.log(`
|
|
2411
2411
|
Installing dependencies with ${W}...`),Y8(`${W} install`,{cwd:Y,stdio:"inherit"})}catch{Z.errors.push("Failed to install dependencies")}}Z.message=`Created project: ${$}`,console.log(`
|
|
2412
2412
|
\u2705 ${Z.message}
|
|
2413
2413
|
|
|
2414
2414
|
Next steps:
|
|
2415
2415
|
cd ${$}
|
|
2416
2416
|
${X.packageManager||"bun"} run dev
|
|
2417
|
-
`)}catch(J){Z.success=!1,Z.message=`Failed to create project: ${J}`}return Z}function
|
|
2417
|
+
`)}catch(J){Z.success=!1,Z.message=`Failed to create project: ${J}`}return Z}function DX($){let X=["pages","components","layouts","partials","public"];switch($){case"minimal":return["src","public"];case"full":return[...X,"src/stores","src/api","src/i18n","src/utils","test"];case"blog":return[...X,"src/posts","src/utils"];case"dashboard":return[...X,"src/stores","src/api","src/utils"];case"landing":return[...X,"src/sections"];default:return[...X,"src/stores"]}}function wX($,X,Z){let Q={};if(Q["package.json"]=SX(X,$,Z),Q["stx.config.ts"]=PX($,Z),Q["README.md"]=yX(X,$),Z.typescript!==!1)Q["tsconfig.json"]=bX();switch($){case"minimal":Q["src/index.stx"]=gX();break;case"blog":Q["pages/index.stx"]=uX(),Q["pages/[slug].stx"]=mX(),Q["layouts/app.stx"]=pX(),Q["components/PostCard.stx"]=cX();break;case"dashboard":Q["pages/index.stx"]=lX(),Q["pages/settings.stx"]=iX(),Q["layouts/app.stx"]=aX(),Q["components/Sidebar.stx"]=rX(),Q["components/StatsCard.stx"]=sX(),Q["src/stores/dashboard.ts"]=nX();break;case"landing":Q["pages/index.stx"]=oX(),Q["layouts/app.stx"]=tX(),Q["src/sections/Hero.stx"]=eX(),Q["src/sections/Features.stx"]=$Z(),Q["src/sections/Pricing.stx"]=XZ(),Q["components/Button.stx"]=ZZ();break;case"full":Q["pages/index.stx"]=J8(),Q["pages/about.stx"]=fX(),Q["layouts/app.stx"]=G8(),Q["components/Header.stx"]=W8(),Q["components/Footer.stx"]=K8(),Q["src/stores/app.ts"]=_8(),Q["src/i18n/en.json"]=hX("en"),Q["test/example.test.ts"]=dX();break;default:Q["pages/index.stx"]=J8(),Q["layouts/app.stx"]=G8(),Q["components/Header.stx"]=W8(),Q["components/Footer.stx"]=K8(),Q["src/stores/app.ts"]=_8()}return Q}async function D2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"components",Y=H5($),J=p0(Q,`${Y}.stx`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Component ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=TX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created component: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create component: ${G}`}return Z}async function w2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"pages",Y=$.toLowerCase().replace(/\s+/g,"-"),J=p0(Q,`${Y}.stx`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Page ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=CX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created page: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create page: ${G}`}return Z}async function T2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"src/stores",Y=YZ($),J=p0(Q,`${Y}.ts`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Store ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=kX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created store: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create store: ${G}`}return Z}async function C2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"layouts",Y=$.toLowerCase().replace(/\s+/g,"-"),J=p0(Q,`${Y}.stx`);if(await Bun.file(J).exists()&&!X.force)return Z.success=!1,Z.message=`Layout ${Y} already exists. Use --force to overwrite.`,Z;try{g1(Q);let G=xX(Y,X);await Bun.write(J,G),Z.files.push(J),Z.message=`Created layout: ${J}`,console.log(`\u2705 ${Z.message}`)}catch(G){Z.success=!1,Z.message=`Failed to create layout: ${G}`}return Z}function TX($,X){let Z=[];if(Z.push(`{{-- Component: ${$} --}}`),X.props!==!1)Z.push(`<script>
|
|
2418
2418
|
// Props
|
|
2419
2419
|
const title = props.title || '${$}'
|
|
2420
2420
|
const variant = props.variant || 'default'
|
|
@@ -2444,7 +2444,7 @@ const variant = props.variant || 'default'
|
|
|
2444
2444
|
margin-top: 0.5rem;
|
|
2445
2445
|
}
|
|
2446
2446
|
</style>`);return Z.join(`
|
|
2447
|
-
`)}function
|
|
2447
|
+
`)}function CX($,X){let Z=H5($.replace(/-/g," ")),Q=[];if(Q.push(`<script>
|
|
2448
2448
|
const title = '${Z}'
|
|
2449
2449
|
const description = 'Page description'
|
|
2450
2450
|
</script>
|
|
@@ -2457,7 +2457,7 @@ const description = 'Page description'
|
|
|
2457
2457
|
<p>{{ description }}</p>
|
|
2458
2458
|
</div>
|
|
2459
2459
|
@endsection`),Q.join(`
|
|
2460
|
-
`)}function
|
|
2460
|
+
`)}function kX($,X){let Z=`${$}Store`,Q=`${H5($)}State`,Y=`import { defineStore } from 'stx'
|
|
2461
2461
|
|
|
2462
2462
|
interface ${Q} {
|
|
2463
2463
|
// Add your state properties here
|
|
@@ -2505,7 +2505,7 @@ finally {
|
|
|
2505
2505
|
],
|
|
2506
2506
|
},
|
|
2507
2507
|
`;return Y+=`})
|
|
2508
|
-
`,Y}function
|
|
2508
|
+
`,Y}function xX($,X){let Z=`<!DOCTYPE html>
|
|
2509
2509
|
<html lang="en">
|
|
2510
2510
|
<head>
|
|
2511
2511
|
<meta charset="UTF-8">
|
|
@@ -2552,7 +2552,7 @@ finally {
|
|
|
2552
2552
|
|
|
2553
2553
|
`;return Z+=` @yield('scripts')
|
|
2554
2554
|
</body>
|
|
2555
|
-
</html>`,Z}function
|
|
2555
|
+
</html>`,Z}function SX($,X,Z){let Q={name:$,version:"0.0.1",type:"module",scripts:{dev:"stx dev pages/index.stx",build:"stx build",preview:"stx serve dist"},dependencies:{stx:"latest"},devDependencies:{}};if(Z.typescript!==!1)Q.devDependencies.typescript="^5.0.0";if(Z.tailwind)Q.devDependencies.tailwindcss="^3.0.0";if(X==="full")Q.scripts.test="bun test",Q.scripts.lint="bun run lint";return JSON.stringify(Q,null,2)}function PX($,X){return`import { defineConfig } from 'stx'
|
|
2556
2556
|
|
|
2557
2557
|
export default defineConfig({
|
|
2558
2558
|
// Template directories
|
|
@@ -2573,7 +2573,7 @@ ${X.pwa?` pwa: { enabled: true },
|
|
|
2573
2573
|
// Analytics (configure when ready)
|
|
2574
2574
|
// analytics: { enabled: true, driver: 'fathom', fathom: { siteId: 'YOUR_SITE_ID' } },
|
|
2575
2575
|
})
|
|
2576
|
-
`}function
|
|
2576
|
+
`}function bX(){return JSON.stringify({compilerOptions:{target:"ESNext",module:"ESNext",moduleResolution:"bundler",strict:!0,skipLibCheck:!0,esModuleInterop:!0,types:["bun-types"]},include:["src/**/*","test/**/*"]},null,2)}function yX($,X){return`# ${$}
|
|
2577
2577
|
|
|
2578
2578
|
A stx project created with the \`${X}\` template.
|
|
2579
2579
|
|
|
@@ -2605,7 +2605,7 @@ src/
|
|
|
2605
2605
|
|
|
2606
2606
|
- [stx Documentation](https://stx.dev/docs)
|
|
2607
2607
|
- [stx GitHub](https://github.com/stacksjs/stx)
|
|
2608
|
-
`}function
|
|
2608
|
+
`}function vX(){return`# Dependencies
|
|
2609
2609
|
node_modules/
|
|
2610
2610
|
.bun/
|
|
2611
2611
|
|
|
@@ -2630,7 +2630,7 @@ Thumbs.db
|
|
|
2630
2630
|
|
|
2631
2631
|
# Logs
|
|
2632
2632
|
*.log
|
|
2633
|
-
`}function
|
|
2633
|
+
`}function gX(){return`<!DOCTYPE html>
|
|
2634
2634
|
<html lang="en">
|
|
2635
2635
|
<head>
|
|
2636
2636
|
<meta charset="UTF-8">
|
|
@@ -2675,7 +2675,7 @@ const features = [
|
|
|
2675
2675
|
@endforeach
|
|
2676
2676
|
</div>
|
|
2677
2677
|
@endsection
|
|
2678
|
-
`}function
|
|
2678
|
+
`}function fX(){return`<script>
|
|
2679
2679
|
const title = 'About'
|
|
2680
2680
|
</script>
|
|
2681
2681
|
|
|
@@ -2763,14 +2763,14 @@ export const appStore = defineStore('app', {
|
|
|
2763
2763
|
strategies: [{ key: 'app-preferences', storage: localStorage }],
|
|
2764
2764
|
},
|
|
2765
2765
|
})
|
|
2766
|
-
`}function
|
|
2766
|
+
`}function hX($){return JSON.stringify({common:{welcome:"Welcome",home:"Home",about:"About",contact:"Contact"},messages:{loading:"Loading...",error:"An error occurred"}},null,2)}function dX(){return`import { describe, expect, it } from 'bun:test'
|
|
2767
2767
|
|
|
2768
2768
|
describe('Example', () => {
|
|
2769
2769
|
it('should work', () => {
|
|
2770
2770
|
expect(1 + 1).toBe(2)
|
|
2771
2771
|
})
|
|
2772
2772
|
})
|
|
2773
|
-
`}function
|
|
2773
|
+
`}function uX(){return"<!-- Blog index -->"}function mX(){return"<!-- Blog post -->"}function pX(){return`<!DOCTYPE html>
|
|
2774
2774
|
<html lang="en">
|
|
2775
2775
|
<head>
|
|
2776
2776
|
<meta charset="UTF-8">
|
|
@@ -2810,7 +2810,7 @@ describe('Example', () => {
|
|
|
2810
2810
|
</footer>
|
|
2811
2811
|
@yield('scripts')
|
|
2812
2812
|
</body>
|
|
2813
|
-
</html>`}function
|
|
2813
|
+
</html>`}function cX(){return"<!-- Post card -->"}function lX(){return"<!-- Dashboard index -->"}function iX(){return"<!-- Settings -->"}function aX(){return`<!DOCTYPE html>
|
|
2814
2814
|
<html lang="en">
|
|
2815
2815
|
<head>
|
|
2816
2816
|
<meta charset="UTF-8">
|
|
@@ -2846,7 +2846,7 @@ describe('Example', () => {
|
|
|
2846
2846
|
</div>
|
|
2847
2847
|
@yield('scripts')
|
|
2848
2848
|
</body>
|
|
2849
|
-
</html>`}function
|
|
2849
|
+
</html>`}function rX(){return"<!-- Sidebar -->"}function sX(){return"<!-- Stats card -->"}function nX(){return"// Dashboard store"}function oX(){return"<!-- Landing page -->"}function tX(){return`<!DOCTYPE html>
|
|
2850
2850
|
<html lang="en">
|
|
2851
2851
|
<head>
|
|
2852
2852
|
<meta charset="UTF-8">
|
|
@@ -2881,17 +2881,17 @@ describe('Example', () => {
|
|
|
2881
2881
|
</footer>
|
|
2882
2882
|
@yield('scripts')
|
|
2883
2883
|
</body>
|
|
2884
|
-
</html>`}function
|
|
2884
|
+
</html>`}function eX(){return"<!-- Hero section -->"}function $Z(){return"<!-- Features -->"}function XZ(){return"<!-- Pricing -->"}function ZZ(){return"<!-- Button -->"}function g1($){if(!v1($))j5($,{recursive:!0})}function QZ(){if(v1("bun.lockb"))return"bun";if(v1("pnpm-lock.yaml"))return"pnpm";if(v1("yarn.lock"))return"yarn";return"bun"}function H5($){return $.replace(/[-_\s]+(.)?/g,(X,Z)=>Z?Z.toUpperCase():"").replace(/^./,(X)=>X.toUpperCase())}function YZ($){return $.replace(/[-_\s]+(.)?/g,(X,Z)=>Z?Z.toUpperCase():"").replace(/^./,(X)=>X.toLowerCase())}function e0($){return $.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[\s_]+/g,"-").toLowerCase()}var{serve:JZ}=globalThis.Bun;import f1 from"fs";import I0 from"path";function u2($,X=200,Z={}){return new Response($,{status:X,headers:{"Content-Type":"text/html; charset=utf-8",...Z}})}async function O5($){let{loadStxConfig:X}=await import("./chunk-2p68bkza.js");return{...await X($.configDir??process.cwd()),...$.stxOptions??{}}}async function GZ($={}){let{port:X=3000,root:Z=".",watch:Q=!0,onRequest:Y,routes:J={},middleware:G=[],on404:W,onError:K}=$,_=I0.resolve(Z),U=await O5($),F=I0.resolve($.configDir??process.cwd()),z=await A5(F,U.serverApi),j=new Map;async function H(q){let N=f1.statSync(q),I=`${q}:${N.mtimeMs}`,M=j.get(I);if(M)return{content:M.content,status:M.status,headers:M.headers};for(let W0 of j.keys())if(W0.startsWith(`${q}:`)&&W0!==I)j.delete(W0);let w=await Bun.file(q).text(),D=w,T=W$(w);if(T)D=T.content.trim();let f=/<script\b([^>]*)>([\s\S]*?)<\/script>/gi,c=[],v=[],S;while((S=f.exec(w))!==null){let W0=S[1],R=S[2],x=S[0];if(W0.includes("server"))v.push(R);else c.push(x)}let k=w.match(/<style\b[^>]*>[\s\S]*?<\/style>/gi)||[],H0=D.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi,""),G0={__filename:q,__dirname:I0.dirname(q),__stx_options:U};for(let W0 of v)await M0(W0,G0,q);let z0=await V0(H0,G0,q,U,new Set);if(k.length>0){let W0=k.join(`
|
|
2885
2885
|
`);if(z0.match(/(<\/head>)/i))z0=z0.replace(/(<\/head>)/i,`${W0}
|
|
2886
|
-
$1`)}if(c.length>0){let{interpolateScriptsInTemplate:W0}=await import("./chunk-
|
|
2886
|
+
$1`)}if(c.length>0){let{interpolateScriptsInTemplate:W0}=await import("./chunk-da0tfpa2.js"),R=W0(c.join(`
|
|
2887
2887
|
`),G0);if(z0.match(/(<\/body>)/i))z0=z0.replace(/(<\/body>)/i,`${R}
|
|
2888
2888
|
$1`);else z0+=`
|
|
2889
2889
|
${R}`}let Z1=T1(G0),l$=C1(G0);return j.set(I,{content:z0,mtime:N.mtimeMs,status:Z1,headers:l$}),{content:z0,status:Z1,headers:l$}}async function L(q){let N=f1.statSync(q),I=`${q}:${N.mtimeMs}`,M=j.get(I);if(M)return M.content;let{content:w}=await T0(q,U);return j.set(I,{content:w,mtime:N.mtimeMs}),w}function O(q){let N=q.startsWith("/")?q.slice(1):q,I=[N,`${N}.stx`,`${N}.md`,`${N}.html`,I0.join(N,"index.stx"),I0.join(N,"index.md"),I0.join(N,"index.html")];for(let M of[_,...U._layerPageDirs??[]])for(let w of I){let D=I0.resolve(M,w);if(!D.startsWith(`${I0.resolve(M)}${I0.sep}`))continue;if(f1.existsSync(D)&&f1.statSync(D).isFile())return D}return null}async function A(q){if(U._layerGraph){let M=await O5($);if(M._layerGraph!==U._layerGraph)Object.assign(U,M),j.clear()}let N=new URL(q.url),I=async()=>{if(J[N.pathname])return await J[N.pathname](q);if(Y){let D=await Y(q);if(D)return D}if(U.apiRouter){let D=await U.apiRouter.handleRequest(q);if(D.status!==404)return D}if(U.apiRoutes?.[N.pathname])return U.apiRoutes[N.pathname](q);let M=await z(q);if(M)return M;let w=O(N.pathname);if(!w||U8(w,F,U.serverApi)){if(W)return await W(q);return new Response("Not Found",{status:404})}try{let D,T="text/html",f,c;if(w.endsWith(".stx")){let v=await H(w);D=v.content,f=v.status,c=v.headers}else if(w.endsWith(".md"))D=await L(w);else if(w.endsWith(".html"))D=await Bun.file(w).text();else if(w.endsWith(".css"))D=await Bun.file(w).text(),T="text/css";else if(w.endsWith(".js"))D=await Bun.file(w).text(),T="text/javascript";else if(w.endsWith(".json"))D=await Bun.file(w).text(),T="application/json";else return new Response(Bun.file(w));return new Response(D,{status:f??200,headers:{"Content-Type":T,...c}})}catch(D){if(K)return await K(D,q);let T=D instanceof Error?D.message:String(D),c=U?.debug===!0?`<h1>Error</h1><pre>${T}
|
|
2890
|
-
${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An error occurred while processing your request.</p>";return new Response(c,{status:500,headers:{"Content-Type":"text/html"}})}};for(let M=G.length-1;M>=0;M--){let w=G[M],D=I;I=async()=>await w(q,D)}return await I()}let V=
|
|
2891
|
-
`),H=_.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,""),L={__stx_options:J};if(j.trim())await M0(j,L,Z);G=await V0(H,L,Z,J,new Set),W=T1(L)??200,K=C1(L)}return new Response(G,{status:W,headers:{"Content-Type":"text/html",...K}})},...X.routes}})}function
|
|
2890
|
+
${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An error occurred while processing your request.</p>";return new Response(c,{status:500,headers:{"Content-Type":"text/html"}})}};for(let M=G.length-1;M>=0;M--){let w=G[M],D=I;I=async()=>await w(q,D)}return await I()}let V=JZ({port:X,fetch:async(q)=>F$(q,await A(q))}),E=null;if(Q)E=f1.watch(_,{recursive:!0},(q,N)=>{if(N&&(N.endsWith(".stx")||N.endsWith(".md")||N.endsWith(".html")))j.clear()});return{server:V,url:V.url.toString(),stop(){if(E)E.close();V.stop()}}}async function m2($,X={}){let Z=I0.resolve($);if(!await Bun.file(Z).exists())throw Error(`File not found: ${Z}`);let Q=Z.endsWith(".md"),Y=Z.endsWith(".stx");if(!Q&&!Y)throw Error(`Unsupported file type: ${Z}. Only .stx and .md files are supported.`);let J=await O5(X);return await GZ({...X,root:I0.dirname(Z),routes:{"/":async()=>{let G,W=200,K;if(Q){let{content:_}=await T0(Z,J);G=_}else{let _=await Bun.file(Z).text(),U=[],F=/<script\b([^>]*)>([\s\S]*?)<\/script>/gi,z;while((z=F.exec(_))!==null)if(z[1].includes("server"))U.push(z[2]);let j=U.join(`
|
|
2891
|
+
`),H=_.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,""),L={__stx_options:J};if(j.trim())await M0(j,L,Z);G=await V0(H,L,Z,J,new Set),W=T1(L)??200,K=C1(L)}return new Response(G,{status:W,headers:{"Content-Type":"text/html",...K}})},...X.routes}})}function WZ($){return $}function KZ($){return $}import{existsSync as _Z,readFileSync as UZ}from"fs";var BZ={strict:!1,allowAny:!0,checkPropertyAccess:!0,checkFunctionCalls:!0,includeBuiltins:!0},B8={console:{kind:"object",properties:{log:{kind:"function",params:[{name:"message",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"void"}},error:{kind:"function",params:[{name:"message",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"void"}},warn:{kind:"function",params:[{name:"message",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"void"}}}},Math:{kind:"object",properties:{abs:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},floor:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},ceil:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},round:{kind:"function",params:[{name:"x",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},max:{kind:"function",params:[{name:"values",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},min:{kind:"function",params:[{name:"values",type:{kind:"primitive",value:"number"}}],returnType:{kind:"primitive",value:"number"}},random:{kind:"function",params:[],returnType:{kind:"primitive",value:"number"}},PI:{kind:"primitive",value:"number"},E:{kind:"primitive",value:"number"}}},JSON:{kind:"object",properties:{stringify:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"string"}},parse:{kind:"function",params:[{name:"text",type:{kind:"primitive",value:"string"}}],returnType:{kind:"primitive",value:"any"}}}},Date:{kind:"function",returnType:{kind:"object",properties:{getTime:{kind:"function",params:[],returnType:{kind:"primitive",value:"number"}},toISOString:{kind:"function",params:[],returnType:{kind:"primitive",value:"string"}},toLocaleDateString:{kind:"function",params:[],returnType:{kind:"primitive",value:"string"}}}}},Array:{kind:"object",properties:{isArray:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"boolean"}},from:{kind:"function",params:[{name:"arrayLike",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"any"}}}}},Object:{kind:"object",properties:{keys:{kind:"function",params:[{name:"obj",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"string"}}},values:{kind:"function",params:[{name:"obj",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"any"}}},entries:{kind:"function",params:[{name:"obj",type:{kind:"primitive",value:"any"}}],returnType:{kind:"array",elementType:{kind:"primitive",value:"any"}}}}},String:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"string"}},Number:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"number"}},Boolean:{kind:"function",params:[{name:"value",type:{kind:"primitive",value:"any"}}],returnType:{kind:"primitive",value:"boolean"}},props:{kind:"object",properties:{}},slot:{kind:"primitive",value:"string"},loop:{kind:"object",properties:{index:{kind:"primitive",value:"number"},iteration:{kind:"primitive",value:"number"},first:{kind:"primitive",value:"boolean"},last:{kind:"primitive",value:"boolean"},even:{kind:"primitive",value:"boolean"},odd:{kind:"primitive",value:"boolean"},count:{kind:"primitive",value:"number"},remaining:{kind:"primitive",value:"number"},depth:{kind:"primitive",value:"number"},parent:{kind:"object",properties:{}}}}};class L8{options;variables=new Map;errors=[];warnings=[];currentFile="";constructor($={}){if(this.options={...BZ,...$},this.options.includeBuiltins)Object.entries(B8).forEach(([X,Z])=>{this.variables.set(X,Z)});if(this.options.customTypes)Object.entries(this.options.customTypes).forEach(([X,Z])=>{this.variables.set(X,Z)})}checkFile($){if(this.currentFile=$,this.errors=[],this.warnings=[],!_Z($))return this.errors.push({message:`File not found: ${$}`,file:$,line:0,column:0,expression:"",severity:"error"}),this.getResult();let X=UZ($,"utf-8");return this.checkTemplate(X,$)}checkTemplate($,X="<inline>"){this.currentFile=X,this.errors=[],this.warnings=[];let Z=$.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(Z)this.analyzeScript(Z[1],$.indexOf(Z[0]));return this.checkDirectives($),this.checkExpressions($),this.getResult()}analyzeScript($,X){let Z=$.split(`
|
|
2892
2892
|
`),Q=this.getLineNumber(X);for(let Y=0;Y<Z.length;Y++){let J=Z[Y],G=Q+Y;this.extractTypedVariables(J,G),this.extractInterfaces(J,Z,Y,G),this.extractTypeAliases(J,G)}}extractTypedVariables($,X){let Z=$.match(/(?:export\s+)?(?:const|let|var)\s+(\w+)\s*:\s*([^=]+?)\s*=/);if(Z){let[,J,G]=Z,W=this.parseTypeAnnotation(G.trim());this.variables.set(J,W);return}let Q=$.match(/(?:export\s+)?(?:const|let|var)\s+(\w+)\s*=\s*(.+)/);if(Q){let[,J,G]=Q,W=this.inferType(G.trim());this.variables.set(J,W);return}let Y=$.match(/(?:export\s+)?function\s+(\w+)\s*\(([^)]*)\)(?:\s*:\s*(\w+))?/);if(Y){let[,J,G,W]=Y,K=this.parseParams(G),_=W?this.parseTypeAnnotation(W):{kind:"primitive",value:"any"};this.variables.set(J,{kind:"function",params:K,returnType:_})}}extractInterfaces($,X,Z,Q){let Y=$.match(/(?:export\s+)?interface\s+(\w+)\s*\{/);if(Y){let[,J]=Y,G={},W=1,K=Z+1;while(K<X.length&&W>0){let _=X[K].trim();if(_.includes("{"))W++;if(_.includes("}"))W--;let U=_.match(/(\w+)\??\s*:\s*([^;]+)/);if(U&&W>0){let[,F,z]=U;G[F]=this.parseTypeAnnotation(z.trim())}K++}this.variables.set(J,{kind:"object",name:J,properties:G})}}extractTypeAliases($,X){let Z=$.match(/(?:export\s+)?type\s+(\w+)\s*=\s*(.+)/);if(Z){let[,Q,Y]=Z,J=this.parseTypeAnnotation(Y.trim());J.name=Q,this.variables.set(Q,J)}}parseTypeAnnotation($){let X=$.trim();if(X.includes("|"))return{kind:"union",types:X.split("|").map((J)=>this.parseTypeAnnotation(J.trim()))};if(X.includes("&"))return{kind:"intersection",types:X.split("&").map((J)=>this.parseTypeAnnotation(J.trim()))};if(X.endsWith("[]"))return{kind:"array",elementType:this.parseTypeAnnotation(X.slice(0,-2))};let Z=X.match(/^Array<(.+)>$/);if(Z)return{kind:"array",elementType:this.parseTypeAnnotation(Z[1])};if(X.startsWith("{")&&X.endsWith("}")){let Y={},J=X.slice(1,-1).trim();if(J){let G=this.splitByComma(J);for(let W of G){let K=W.match(/(\w+)\??\s*:\s*(.+)/);if(K){let[,_,U]=K;Y[_]=this.parseTypeAnnotation(U.trim())}}}return{kind:"object",properties:Y}}if(X.startsWith('"')||X.startsWith("'"))return{kind:"literal",value:X.slice(1,-1)};if(/^\d+$/.test(X))return{kind:"literal",value:X};if(X==="true"||X==="false")return{kind:"literal",value:X};if(["string","number","boolean","null","undefined","any","unknown","void","never"].includes(X))return{kind:"primitive",value:X};if(this.variables.has(X))return this.variables.get(X);return{kind:"primitive",value:"any"}}inferType($){let X=$.trim().replace(/;$/,"");if(X.startsWith('"')&&X.endsWith('"')||X.startsWith("'")&&X.endsWith("'")||X.startsWith("`")&&X.endsWith("`"))return{kind:"primitive",value:"string"};if(/^-?\d+(\.\d+)?$/.test(X))return{kind:"primitive",value:"number"};if(X==="true"||X==="false")return{kind:"primitive",value:"boolean"};if(X==="null")return{kind:"primitive",value:"null"};if(X==="undefined")return{kind:"primitive",value:"undefined"};if(X.startsWith("[")){let Z=X.slice(1,-1).trim();if(Z){let Q=this.splitByComma(Z)[0];if(Q)return{kind:"array",elementType:this.inferType(Q.trim())}}return{kind:"array",elementType:{kind:"primitive",value:"any"}}}if(X.startsWith("{")){let Z={},Q=this.extractObjectLiteral(X);for(let[Y,J]of Object.entries(Q))Z[Y]=this.inferType(J);return{kind:"object",properties:Z}}if(X.includes("=>")){let Z=X.match(/^\(([^)]*)\)\s*(?::\s*(\w+))?\s*=>/);if(Z){let Q=this.parseParams(Z[1]),Y=Z[2]?this.parseTypeAnnotation(Z[2]):{kind:"primitive",value:"any"};return{kind:"function",params:Q,returnType:Y}}}if(/^\w+$/.test(X)&&this.variables.has(X))return this.variables.get(X);if(X.includes("."))return this.resolvePropertyAccess(X);if(X.includes("(")){let Z=X.split("(")[0],Q=this.variables.get(Z);if(Q?.kind==="function"&&Q.returnType)return Q.returnType}return{kind:"primitive",value:"any"}}parseParams($){if(!$.trim())return[];let X=[],Z=this.splitByComma($);for(let Q of Z){let Y=Q.trim(),J=Y.includes("?"),G=Y.match(/(\w+)\??\s*(?::\s*([^=]+))?(?:\s*=)?/);if(G){let[,W,K]=G,_=K?this.parseTypeAnnotation(K.trim()):{kind:"primitive",value:"any"};X.push({name:W,type:_,optional:J})}}return X}checkExpressions($){let X=/\{\{([\s\S]*?)\}\}/g,Z;while((Z=X.exec($))!==null){let Y=Z[1].trim(),J=Z.index,G=this.getLineNumber(J,$),W=this.getColumn(J,$);if(!Y)continue;if(Y.startsWith("!")||Y.endsWith("!"))continue;this.checkExpression(Y,G,W)}let Q=/\{!!([\s\S]*?)!!\}/g;while((Z=Q.exec($))!==null){let Y=Z[1].trim(),J=Z.index,G=this.getLineNumber(J,$),W=this.getColumn(J,$);if(!Y)continue;this.checkExpression(Y,G,W)}}checkExpression($,X,Z){if($.includes("?")&&$.includes(":")){let J=$.split("?");this.checkExpression(J[0].trim(),X,Z);let G=J.slice(1).join("?").split(":");if(G.length>=2)this.checkExpression(G[0].trim(),X,Z),this.checkExpression(G.slice(1).join(":").trim(),X,Z);return}for(let J of["&&","||","??"])if($.includes(J)){$.split(J).forEach((W)=>this.checkExpression(W.trim(),X,Z));return}for(let J of["===","!==","==","!=",">=","<=",">","<"])if($.includes(J)){$.split(J).forEach((W)=>this.checkExpression(W.trim(),X,Z));return}if($.startsWith("!")){this.checkExpression($.slice(1).trim(),X,Z);return}if(this.isLiteral($))return;let Q=$.match(/^(\w+(?:\.\w+)*)\s*\(/);if(Q){let J=Q[1],G=this.resolvePropertyAccess(J);if(G.kind!=="function"&&G.value!=="any")this.addWarning(`'${J}' is not a function`,X,Z,$);return}if($.includes(".")){if(this.resolvePropertyAccess($).value==="undefined"&&this.options.checkPropertyAccess)this.addWarning(`Property access '${$}' may be undefined`,X,Z,$);return}let Y=$.match(/^\w+/)?.[0];if(Y&&!this.variables.has(Y))this.addError(`Variable '${Y}' is not defined`,X,Z,$)}checkDirectives($){let X=/@if\s*\(([^)]+)\)/g,Z;while((Z=X.exec($))!==null){let G=Z[1].trim(),W=Z.index,K=this.getLineNumber(W,$),_=this.getColumn(W,$);this.checkExpression(G,K,_)}let Q=/@foreach\s*\((\w+)\s+(?:as|in)\s+(\w+)(?:\s*,\s*(\w+))?\)/g;while((Z=Q.exec($))!==null){let[,G,W,K]=Z,_=Z.index,U=this.getLineNumber(_,$),F=this.getColumn(_,$);if(!this.variables.has(G))this.addError(`Collection '${G}' is not defined`,U,F,Z[0]);else{let z=this.variables.get(G);if(z.kind==="array"&&z.elementType)this.variables.set(W,z.elementType);else this.variables.set(W,{kind:"primitive",value:"any"});if(K)this.variables.set(K,{kind:"primitive",value:"number"})}}let Y=/@unless\s*\(([^)]+)\)/g;while((Z=Y.exec($))!==null){let G=Z[1].trim(),W=Z.index,K=this.getLineNumber(W,$),_=this.getColumn(W,$);this.checkExpression(G,K,_)}let J=/@switch\s*\(([^)]+)\)/g;while((Z=J.exec($))!==null){let G=Z[1].trim(),W=Z.index,K=this.getLineNumber(W,$),_=this.getColumn(W,$);this.checkExpression(G,K,_)}}resolvePropertyAccess($){let X=$.split("."),Z=this.variables.get(X[0])||{kind:"primitive",value:"any"};for(let Q=1;Q<X.length;Q++){let Y=X[Q].replace(/\(\)$/,"");if(Z.kind==="object"&&Z.properties)if(Z.properties[Y])Z=Z.properties[Y];else if(!this.options.allowAny)return{kind:"primitive",value:"undefined"};else Z={kind:"primitive",value:"any"};else if(Z.kind==="array"&&Z.elementType)if(["length"].includes(Y))Z={kind:"primitive",value:"number"};else if(["map","filter","find","forEach","some","every","reduce"].includes(Y))Z={kind:"function",returnType:{kind:"primitive",value:"any"}};else if(["join"].includes(Y))Z={kind:"function",returnType:{kind:"primitive",value:"string"}};else Z={kind:"primitive",value:"any"};else if(Z.kind==="primitive"&&Z.value==="string")if(["length"].includes(Y))Z={kind:"primitive",value:"number"};else if(["toUpperCase","toLowerCase","trim","slice","substring"].includes(Y))Z={kind:"function",returnType:{kind:"primitive",value:"string"}};else if(["split"].includes(Y))Z={kind:"function",returnType:{kind:"array",elementType:{kind:"primitive",value:"string"}}};else Z={kind:"primitive",value:"any"};else Z={kind:"primitive",value:"any"}}return Z}isLiteral($){let X=$.trim();if(X.startsWith('"')&&X.endsWith('"')||X.startsWith("'")&&X.endsWith("'")||X.startsWith("`")&&X.endsWith("`"))return!0;if(/^-?\d+(\.\d+)?$/.test(X))return!0;if(X==="true"||X==="false")return!0;if(X==="null"||X==="undefined")return!0;return!1}extractObjectLiteral($){let X={},Z=$.slice(1,-1).trim();if(!Z)return X;let Q=this.splitByComma(Z);for(let Y of Q){let J=Y.indexOf(":");if(J>0){let G=Y.slice(0,J).trim(),W=Y.slice(J+1).trim();X[G]=W}}return X}splitByComma($){let X=[],Z="",Q=0,Y=null;for(let J=0;J<$.length;J++){let G=$[J],W=J>0?$[J-1]:"";if((G==='"'||G==="'"||G==="`")&&W!=="\\"){if(Y===G)Y=null;else if(!Y)Y=G}if(!Y){if(G==="{"||G==="["||G==="(")Q++;if(G==="}"||G==="]"||G===")")Q--;if(G===","&&Q===0){X.push(Z.trim()),Z="";continue}}Z+=G}if(Z.trim())X.push(Z.trim());return X}getLineNumber($,X){return((X||"").slice(0,$).match(/\n/g)||[]).length+1}getColumn($,X){let Q=X.slice(0,$).lastIndexOf(`
|
|
2893
|
-
`);return $-Q}addError($,X,Z,Q,Y,J){this.errors.push({message:$,file:this.currentFile,line:X,column:Z,expression:Q,expected:Y,received:J,severity:"error"})}addWarning($,X,Z,Q,Y,J){let G={message:$,file:this.currentFile,line:X,column:Z,expression:Q,expected:Y,received:J,severity:"warning"};if(this.options.strict)this.errors.push(G);else this.warnings.push(G)}getResult(){return{valid:this.errors.length===0,errors:this.errors,warnings:this.warnings,variables:new Map(this.variables)}}addVariable($,X){this.variables.set($,X)}reset(){if(this.errors=[],this.warnings=[],this.variables.clear(),this.options.includeBuiltins)Object.entries(B8).forEach(([$,X])=>{this.variables.set($,X)})}}function F8($){return new L8($)}function
|
|
2894
|
-
`)}var N5=typeof window<"u"&&typeof document<"u";async function q5($,X,Z){if(!N5)return;try{let Q=$.getAttribute("data-island-id"),Y=document.querySelector(`script[data-island-props="${Q}"]`),J=Y?JSON.parse(Y.textContent||"{}"):{},G=await Z(),W=G.default||G.hydrate;if(typeof W!=="function"){console.error(`Island handler for "${X}" does not export a valid hydration function`);return}await W($,J),$.setAttribute("data-hydrated","true")}catch(Q){console.error(`Failed to hydrate island "${X}":`,Q)}}function
|
|
2893
|
+
`);return $-Q}addError($,X,Z,Q,Y,J){this.errors.push({message:$,file:this.currentFile,line:X,column:Z,expression:Q,expected:Y,received:J,severity:"error"})}addWarning($,X,Z,Q,Y,J){let G={message:$,file:this.currentFile,line:X,column:Z,expression:Q,expected:Y,received:J,severity:"warning"};if(this.options.strict)this.errors.push(G);else this.warnings.push(G)}getResult(){return{valid:this.errors.length===0,errors:this.errors,warnings:this.warnings,variables:new Map(this.variables)}}addVariable($,X){this.variables.set($,X)}reset(){if(this.errors=[],this.warnings=[],this.variables.clear(),this.options.includeBuiltins)Object.entries(B8).forEach(([$,X])=>{this.variables.set($,X)})}}function F8($){return new L8($)}function l2($,X){return F8(X).checkFile($)}function i2($,X){return F8(X).checkTemplate($)}function a2($){let X=[];for(let Z of $.errors){if(X.push(`\x1B[31merror\x1B[0m: ${Z.message}`),X.push(` --> ${Z.file}:${Z.line}:${Z.column}`),Z.expression)X.push(" |"),X.push(` | ${Z.expression}`),X.push(" |");if(Z.expected&&Z.received)X.push(` expected: ${Z.expected}`),X.push(` received: ${Z.received}`);X.push("")}for(let Z of $.warnings){if(X.push(`\x1B[33mwarning\x1B[0m: ${Z.message}`),X.push(` --> ${Z.file}:${Z.line}:${Z.column}`),Z.expression)X.push(" |"),X.push(` | ${Z.expression}`),X.push(" |");X.push("")}if($.valid)X.push("\x1B[32m\u2713 No type errors found\x1B[0m");else X.push(`\x1B[31m\u2717 Found ${$.errors.length} error(s) and ${$.warnings.length} warning(s)\x1B[0m`);return X.join(`
|
|
2894
|
+
`)}var N5=typeof window<"u"&&typeof document<"u";async function q5($,X,Z){if(!N5)return;try{let Q=$.getAttribute("data-island-id"),Y=document.querySelector(`script[data-island-props="${Q}"]`),J=Y?JSON.parse(Y.textContent||"{}"):{},G=await Z(),W=G.default||G.hydrate;if(typeof W!=="function"){console.error(`Island handler for "${X}" does not export a valid hydration function`);return}await W($,J),$.setAttribute("data-hydrated","true")}catch(Q){console.error(`Failed to hydrate island "${X}":`,Q)}}function s2($){if(!N5)return;let X=document.querySelectorAll("[data-island]"),Z=[];if(X.forEach((Q)=>{let Y=Q.getAttribute("data-island"),J=Q.getAttribute("data-priority")||"lazy";if(!Y||!$[Y]||Q.getAttribute("data-hydrated")==="true")return;if(J==="eager")q5(Q,Y,$[Y]);else Z.push([Q,Y])}),Z.length>0&&"IntersectionObserver"in window){let Q=new IntersectionObserver((Y)=>{Y.forEach((J)=>{if(J.isIntersecting){let G=J.target,W=G.getAttribute("data-island");if(W&&$[W]&&G.getAttribute("data-hydrated")!=="true")q5(G,W,$[W]),Q.unobserve(G)}})},{rootMargin:"200px",threshold:0});Z.forEach(([Y])=>{Q.observe(Y)})}else setTimeout(()=>{Z.forEach(([Q,Y])=>{if(Q.getAttribute("data-hydrated")!=="true")q5(Q,Y,$[Y])})},1000)}function n2($){if(!N5)return;Object.entries($).forEach(([X,Z])=>{try{let Y=Z.toString().match(/import\(['"](.+)['"]\)/);if(Y&&Y[1]){let J=document.createElement("link");J.rel="modulepreload",J.href=Y[1],J.setAttribute("data-island-module",X),document.head.appendChild(J)}}catch(Q){console.warn(`Failed to preload island handler for "${X}":`,Q)}})}var z1=typeof window<"u"&&typeof document<"u",V5={color:"#6366f1",initialColor:"",height:"3px",duration:2000,throttle:200,autoFinish:!0,zIndex:999999},F0=null,k0=0,h1=!1,M5=null,F1=null,y0=null;function z8($){if(!z1)return null;let X=document.getElementById("stx-loading-indicator");if(X)X.remove();let Z=document.createElement("div");Z.id="stx-loading-indicator";let Q=$.initialColor?`linear-gradient(to right, ${$.initialColor}, ${$.color})`:$.color;Z.style.cssText=`
|
|
2895
2895
|
position: fixed;
|
|
2896
2896
|
top: 0;
|
|
2897
2897
|
left: 0;
|
|
@@ -2922,7 +2922,7 @@ ${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An err
|
|
|
2922
2922
|
0% { transform: translateX(-100%); }
|
|
2923
2923
|
100% { transform: translateX(100%); }
|
|
2924
2924
|
}
|
|
2925
|
-
`,document.head.appendChild(J)}return document.body.appendChild(Z),Z}function q$($,X){if(!z1||!F0)return;if(k0=Math.min(Math.max($,0),100),M5)cancelAnimationFrame(M5);M5=requestAnimationFrame(()=>{if(!F0)return;F0.style.opacity=k0>0?"1":"0",F0.style.transform=`scaleX(${k0/100})`})}function
|
|
2925
|
+
`,document.head.appendChild(J)}return document.body.appendChild(Z),Z}function q$($,X){if(!z1||!F0)return;if(k0=Math.min(Math.max($,0),100),M5)cancelAnimationFrame(M5);M5=requestAnimationFrame(()=>{if(!F0)return;F0.style.opacity=k0>0?"1":"0",F0.style.transform=`scaleX(${k0/100})`})}function LZ($){if(!z1)return;if(h1=!0,k0=0,!F0)F0=z8($);if(F1)clearTimeout(F1);if(y0)clearInterval(y0);q$(10,$),y0=setInterval(()=>{if(!h1)return;let X=90-k0,Z=Math.max(0.5,X*0.1);if(k0<90)q$(k0+Z,$)},$.throttle)}function FZ($){if(!z1)return;if(h1=!1,y0)clearInterval(y0),y0=null;q$(100,$),F1=setTimeout(()=>{if(F0)F0.style.opacity="0";setTimeout(()=>{if(k0=0,F0)F0.style.transform="scaleX(0)"},300)},200)}function zZ(){if(!z1)return;if(h1=!1,k0=0,y0)clearInterval(y0),y0=null;if(F1)clearTimeout(F1),F1=null;if(F0)F0.style.opacity="0",F0.style.transform="scaleX(0)"}function jZ($){let X={...V5,...$};return{start:()=>LZ(X),set:(Z)=>q$(Z,X),finish:()=>FZ(X),clear:()=>zZ(),get state(){return{isLoading:h1,progress:k0,error:!1}}}}var $1=null;function t2($){if(!z1)return;if($1)$1(),$1=null;let X={...V5,...$},Z=jZ(X);F0=z8(X);let Q=!1,Y=(U)=>{let z=U.target.closest("a");if(!z)return;let j=z.getAttribute("href");if(!j)return;if(j.startsWith("http")||j.startsWith("#")||j.startsWith("mailto:")||j.startsWith("tel:")||z.target==="_blank"||z.hasAttribute("download"))return;Q=!0,Z.start()},J=()=>{if(!Q)Z.start(),Q=!0},G=()=>{if(Q||X.autoFinish)Z.finish(),Q=!1};document.addEventListener("click",Y),window.addEventListener("popstate",J),window.addEventListener("load",G);let W=window.fetch,K=0,_=async function(...U){let F=typeof U[0]==="string"?U[0]:U[0].url,z=F.includes("/api/")||F.startsWith("/api");if(z){if(K++,K===1&&!Q)Z.start()}try{return await W.apply(this,U)}finally{if(z){if(K--,K===0&&!Q)Z.finish()}}};window.fetch=_,$1=()=>{if(document.removeEventListener("click",Y),window.removeEventListener("popstate",J),window.removeEventListener("load",G),window.fetch===_)window.fetch=W}}function e2(){if($1)$1(),$1=null}function $K($){let X={...V5,...$},Z=X.initialColor?`linear-gradient(to right, ${X.initialColor}, ${X.color})`:X.color;return`
|
|
2926
2926
|
<div id="stx-loading-indicator" style="
|
|
2927
2927
|
position: fixed;
|
|
2928
2928
|
top: 0;
|
|
@@ -3016,11 +3016,11 @@ ${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An err
|
|
|
3016
3016
|
window.addEventListener('load', function() { window.stxLoading.finish(); });
|
|
3017
3017
|
})();
|
|
3018
3018
|
</script>
|
|
3019
|
-
`}function
|
|
3019
|
+
`}function ZK($,X){let Z=[],Q=`${X}=`;for(let Y=0;Y<$.length;Y++){let J=$[Y];if(J.startsWith(Q)){let G=J.slice(Q.length);if(G)Z.push(G);continue}if(J===X){let G=$[Y+1];if(G!==void 0&&!G.startsWith("-"))Z.push(G),Y++}}return Z}class j8{instances=new Map;componentsByFile=new Map;stateSnapshots=new Map;config;constructor($={}){this.config={preserveState:$.preserveState??!0,maxStateAge:$.maxStateAge??30000,errorRecovery:$.errorRecovery??!0,verbose:$.verbose??!1,serializeState:$.serializeState??this.defaultSerializeState.bind(this),deserializeState:$.deserializeState??this.defaultDeserializeState.bind(this)}}register($){if(this.instances.set($.id,$),!this.componentsByFile.has($.name))this.componentsByFile.set($.name,new Set);if(this.componentsByFile.get($.name).add($.id),this.config.verbose)console.log(`[HMR] Registered component: ${$.name} (${$.id})`)}unregister($){let X=this.instances.get($);if(!X)return;if(this.componentsByFile.get(X.name)?.delete($),this.componentsByFile.get(X.name)?.size===0)this.componentsByFile.delete(X.name);if(this.stateSnapshots.delete($),X.cleanup?.(),this.instances.delete($),this.config.verbose)console.log(`[HMR] Unregistered component: ${X.name} (${$})`)}getInstancesByFile($){let X=this.componentsByFile.get($)||new Set;return Array.from(X).map((Z)=>this.instances.get(Z)).filter(Boolean)}getInstance($){return this.instances.get($)}captureState($){let X=this.instances.get($);if(!X||!this.config.preserveState)return;let Z=this.config.serializeState(X);if(this.stateSnapshots.set($,Z),this.config.verbose)console.log(`[HMR] Captured state for: ${X.name}`)}restoreState($){let X=this.instances.get($),Z=this.stateSnapshots.get($);if(!X||!Z||!this.config.preserveState)return!1;if(Date.now()-Z.timestamp>this.config.maxStateAge){if(this.stateSnapshots.delete($),this.config.verbose)console.log(`[HMR] State expired for: ${X.name}`);return!1}try{if(this.config.deserializeState(Z,X),this.config.verbose)console.log(`[HMR] Restored state for: ${X.name}`);return!0}catch(Q){return console.error(`[HMR] Failed to restore state for ${X.name}:`,Q),!1}}defaultSerializeState($){let X={},Z={};if($.element)$.element.querySelectorAll("[data-stx-ref]").forEach((Y)=>{let J=Y.getAttribute("data-stx-ref"),G=Y.getAttribute("data-stx-value");if(J&&G)try{X[J]=JSON.parse(G)}catch{X[J]=G}});return{refs:X,reactiveObjects:Z,custom:$.state?.custom||{},timestamp:Date.now()}}defaultDeserializeState($,X){if(X.element)Object.entries($.refs).forEach(([Z,Q])=>{let Y=X.element.querySelector(`[data-stx-ref="${Z}"]`);if(Y)Y.setAttribute("data-stx-value",JSON.stringify(Q)),Y.dispatchEvent(new CustomEvent("stx:state-restored",{detail:{name:Z,value:Q},bubbles:!0}))});X.state={...$,timestamp:Date.now()}}getAllInstances(){return Array.from(this.instances.values())}clear(){for(let $ of this.instances.values())$.cleanup?.();this.instances.clear(),this.componentsByFile.clear(),this.stateSnapshots.clear()}}class H8{registry;config;pendingUpdates=new Map;updateQueue=Promise.resolve();constructor($={}){this.config={preserveState:$.preserveState??!0,maxStateAge:$.maxStateAge??30000,errorRecovery:$.errorRecovery??!0,verbose:$.verbose??!1,serializeState:$.serializeState??(()=>({refs:{},reactiveObjects:{},custom:{},timestamp:Date.now()})),deserializeState:$.deserializeState??(()=>{})},this.registry=new j8(this.config)}register($){this.registry.register($)}unregister($){this.registry.unregister($)}async handleUpdate($){return this.updateQueue=this.updateQueue.then(()=>this.processUpdate($)),this.updateQueue}async processUpdate($){let X=this.registry.getInstancesByFile($.file);if(X.length===0){if(this.config.verbose)console.log(`[HMR] No instances found for: ${$.file}`);return}if(this.config.verbose)console.log(`[HMR] Updating ${X.length} instance(s) of: ${$.file}`);for(let Z of X)await this.updateInstance(Z,$);if(typeof window<"u"&&typeof window.dispatchEvent==="function")window.dispatchEvent(new CustomEvent("stx:hmr-update",{detail:{file:$.file,count:X.length}}))}async updateInstance($,X){this.registry.captureState($.id);let Z=!1,Q=$.element?.innerHTML||"";try{if($.element?.dispatchEvent(new CustomEvent("stx:before-hmr-update",{bubbles:!0})),$.cleanup?.(),X.type==="style")await this.updateStyles($,X);else await this.updateComponent($,X);let Y=this.registry.restoreState($.id);if(!Y&&$.setup)await $.setup();$.element?.dispatchEvent(new CustomEvent("stx:after-hmr-update",{detail:{stateRestored:Y},bubbles:!0}))}catch(Y){if(Z=!0,console.error(`[HMR] Error updating component ${$.name}:`,Y),this.config.errorRecovery){if($.element&&Q)$.element.innerHTML=Q,console.log(`[HMR] Recovered previous state for: ${$.name}`);$.element?.dispatchEvent(new CustomEvent("stx:hmr-error",{detail:{error:Y},bubbles:!0}))}}if(!Z&&this.config.verbose)console.log(`[HMR] Successfully updated: ${$.name}`)}async updateComponent($,X){if(!$.element)return;let{html:Z,script:Q}=this.parseComponentCode(X.code);if(Z)$.element.innerHTML=Z;if(Q)await this.executeScript(Q,$);if($.render)$.element.innerHTML=$.render();this.reinitializeInteractivity($)}async updateStyles($,X){if(!$.element)return;let Z=X.code.match(/<style\b[^>]*>([\s\S]*?)<\/style>/i);if(!Z)return;let Q=Z[1],Y=$.id,J=document.querySelector(`style[data-stx-component="${Y}"]`);if(!J)J=document.createElement("style"),J.setAttribute("data-stx-component",Y),document.head.appendChild(J);if(J.textContent=Q,this.config.verbose)console.log(`[HMR] Updated styles for: ${$.name}`)}parseComponentCode($){let X=$,Z="",Q="",Y=$.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i);if(Y)Z=Y[1],X=X.replace(Y[0],"");let J=$.match(/<style\b[^>]*>([\s\S]*?)<\/style>/i);if(J)Q=J[1],X=X.replace(J[0],"");return{html:X.trim(),script:Z.trim(),style:Q.trim()}}async executeScript($,X){try{let Z={element:X.element,props:X.props,...typeof window<"u"?window.stx:{}},Q=`
|
|
3020
3020
|
return (async function() {
|
|
3021
3021
|
${$}
|
|
3022
3022
|
})()
|
|
3023
|
-
`;await Function(...Object.keys(Z),Q)(...Object.values(Z))}catch(Z){throw console.error("[HMR] Script execution error:",Z),Z}}reinitializeInteractivity($){if(!$.element)return;$.element.querySelectorAll("[data-stx-events]").forEach((Z)=>{let Q=Z.getAttribute("data-stx-events");if(!Q)return;try{let Y=JSON.parse(Q);for(let[J,G]of Object.entries(Y))if(typeof window<"u"&&window.stx?.[G])Z.addEventListener(J,window.stx[G])}catch{}}),$.element.dispatchEvent(new CustomEvent("stx:reinitialize",{bubbles:!0}))}getRegistry(){return this.registry}async refresh($){let X=this.registry.getInstancesByFile($);for(let Z of X)if(Z.render&&Z.element)this.registry.captureState(Z.id),Z.element.innerHTML=Z.render(),this.registry.restoreState(Z.id),this.reinitializeInteractivity(Z)}}function
|
|
3023
|
+
`;await Function(...Object.keys(Z),Q)(...Object.values(Z))}catch(Z){throw console.error("[HMR] Script execution error:",Z),Z}}reinitializeInteractivity($){if(!$.element)return;$.element.querySelectorAll("[data-stx-events]").forEach((Z)=>{let Q=Z.getAttribute("data-stx-events");if(!Q)return;try{let Y=JSON.parse(Q);for(let[J,G]of Object.entries(Y))if(typeof window<"u"&&window.stx?.[G])Z.addEventListener(J,window.stx[G])}catch{}}),$.element.dispatchEvent(new CustomEvent("stx:reinitialize",{bubbles:!0}))}getRegistry(){return this.registry}async refresh($){let X=this.registry.getInstancesByFile($);for(let Z of X)if(Z.render&&Z.element)this.registry.captureState(Z.id),Z.element.innerHTML=Z.render(),this.registry.restoreState(Z.id),this.reinitializeInteractivity(Z)}}function YK($){return`
|
|
3024
3024
|
<script data-stx-hmr-client>
|
|
3025
3025
|
(function() {
|
|
3026
3026
|
'use strict';
|
|
@@ -3247,7 +3247,7 @@ else {
|
|
|
3247
3247
|
};
|
|
3248
3248
|
})();
|
|
3249
3249
|
</script>
|
|
3250
|
-
`}function
|
|
3250
|
+
`}function JK($,X,Z,Q){return`
|
|
3251
3251
|
<div data-stx-component="${$}" data-stx-name="${X}">
|
|
3252
3252
|
${Z}
|
|
3253
3253
|
</div>
|
|
@@ -3287,8 +3287,8 @@ else {
|
|
|
3287
3287
|
observer.observe(document.body, { childList: true, subtree: true });
|
|
3288
3288
|
})();
|
|
3289
3289
|
</script>
|
|
3290
|
-
`}var j1=null;function
|
|
3291
|
-
${$?
|
|
3290
|
+
`}var j1=null;function GK($){if(!j1)j1=new H8($);return j1}function WK(){if(j1)j1.getRegistry().clear(),j1=null}function HZ($){let X={refs:$.refs||{},reactive:$.reactive||{},props:$.props||{},routeParams:$.routeParams||{},stores:$.stores||{},meta:$.meta||{},timestamp:Date.now()};return X.checksum=A8(X),JSON.stringify(X).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026").replace(/'/g,"\\u0027")}function A8($){let X=JSON.stringify({refs:Object.keys($.refs||{}),reactive:Object.keys($.reactive||{}),props:Object.keys($.props||{})}),Z=0;for(let Q=0;Q<X.length;Q++){let Y=X.charCodeAt(Q);Z=(Z<<5)-Z+Y,Z=Z&Z}return Math.abs(Z).toString(36)}function OZ($){return`<script id="__STX_STATE__" type="application/json">${HZ($)}</script>`}function UK($){if($.length===0)return"";return`data-stx-events='${JSON.stringify($)}'`}function AZ(){if(typeof window>"u")return null;let $=document.getElementById("__STX_STATE__");if(!$)return null;try{let X=JSON.parse($.textContent||"{}");if(X.checksum){if(A8(X)!==X.checksum)console.warn("[Hydration] State checksum mismatch - state may be corrupted")}return X}catch(X){return console.error("[Hydration] Failed to parse state:",X),null}}class q8{state=null;options;root=null;isHydrated=!1;pendingComponents=new Map;hydratedComponents=new Set;constructor($={}){this.options={root:$.root||"#app",strict:$.strict??!1,onHydrating:$.onHydrating||(()=>{}),onHydrated:$.onHydrated||(()=>{}),onError:$.onError||console.error,performance:$.performance??!1,timeout:$.timeout??1e4}}async hydrate(){if(typeof window>"u")return;if(this.isHydrated)return;let $=this.options.performance?performance.now():0;try{this.root=typeof this.options.root==="string"?document.querySelector(this.options.root)||document.body:this.options.root,this.state=AZ(),this.options.onHydrating(),this.root.classList.add("stx-hydrating");let X=new Promise((Z,Q)=>{setTimeout(()=>Q(Error("Hydration timeout")),this.options.timeout)});if(await Promise.race([this.runHydration(),X]),this.isHydrated=!0,this.root.classList.remove("stx-hydrating"),this.root.classList.add("stx-hydrated"),this.options.performance){let Z=performance.now()-$;console.log(`[Hydration] Completed in ${Z.toFixed(2)}ms`)}this.options.onHydrated(),window.dispatchEvent(new CustomEvent("stx:hydrated"))}catch(X){this.root?.classList.remove("stx-hydrating"),this.root?.classList.add("stx-hydration-error"),this.options.onError(X),window.dispatchEvent(new CustomEvent("stx:hydration-error",{detail:{error:X}}))}}async runHydration(){if(!this.root)return;this.restoreGlobalState(),await this.hydrateComponents(),this.bindEventHandlers(),this.initializeReactiveBindings(),this.setupRouterIntegration()}restoreGlobalState(){if(!this.state)return;let $=window.stx;if(!$)return;if(this.state.routeParams&&$.setRouteParams)$.setRouteParams(this.state.routeParams);if(this.state.stores&&$.registerStore)Object.entries(this.state.stores).forEach(([X,Z])=>{$.registerStore(X,Z)});window.dispatchEvent(new CustomEvent("stx:state-restored",{detail:this.state}))}async hydrateComponents(){if(!this.root)return;let $=this.root.querySelectorAll("[data-stx-component]");for(let X of Array.from($)){let Z=X.getAttribute("data-stx-component"),Q=X.getAttribute("data-stx-name")||Z,Y=X.getAttribute("data-stx-hydrate")||"eager",J=X.getAttribute("data-stx-props");if(!Z)continue;let G={id:Z,name:Q||Z,strategy:Y,props:J?JSON.parse(J):{},events:[]};switch(this.pendingComponents.set(Z,G),G.strategy){case"eager":await this.hydrateComponent(X,G);break;case"lazy":case"visible":this.setupVisibleHydration(X,G);break;case"idle":this.setupIdleHydration(X,G);break;case"interaction":this.setupInteractionHydration(X,G);break}}}async hydrateComponent($,X){if(this.hydratedComponents.has(X.id))return;try{let Z=this.state?.refs[X.id]||this.state?.reactive[X.id]||{};this.restoreComponentState($,Z),this.bindComponentEvents($),this.initializeComponentReactivity($,X),this.hydratedComponents.add(X.id),$.classList.add("stx-hydrated"),$.setAttribute("data-hydrated","true"),$.dispatchEvent(new CustomEvent("stx:component-hydrated",{detail:{id:X.id,name:X.name},bubbles:!0}))}catch(Z){if(console.error(`[Hydration] Failed to hydrate component ${X.id}:`,Z),$.classList.add("stx-hydration-error"),this.options.strict)throw Z}}restoreComponentState($,X){if(!X||typeof X!=="object")return;$.querySelectorAll("[data-stx-bind]").forEach((Q)=>{let Y=Q.getAttribute("data-stx-bind");if(!Y||!X[Y])return;let J=X[Y];if(Q instanceof HTMLInputElement)if(Q.type==="checkbox"||Q.type==="radio")Q.checked=Boolean(J);else Q.value=String(J);else if(Q instanceof HTMLSelectElement)Q.value=String(J);else if(Q instanceof HTMLTextAreaElement)Q.value=String(J);else Q.textContent=String(J)})}setupVisibleHydration($,X){if(!("IntersectionObserver"in window)){this.hydrateComponent($,X);return}let Z=new IntersectionObserver((Q)=>{Q.forEach((Y)=>{if(Y.isIntersecting)Z.disconnect(),this.hydrateComponent($,X)})},{rootMargin:"100px",threshold:0});Z.observe($)}setupIdleHydration($,X){let Z=()=>this.hydrateComponent($,X);if("requestIdleCallback"in window)window.requestIdleCallback(Z,{timeout:2000});else setTimeout(Z,200)}setupInteractionHydration($,X){let Z=["mouseenter","touchstart","focusin"],Q=()=>{Z.forEach((Y)=>$.removeEventListener(Y,Q)),this.hydrateComponent($,X)};Z.forEach((Y)=>{$.addEventListener(Y,Q,{once:!0,passive:!0})})}bindEventHandlers(){if(!this.root)return;this.root.querySelectorAll("[data-stx-events]").forEach((X)=>this.bindElementEvents(X)),this.bindDirectiveEvents()}bindElementEvents($){let X=$.getAttribute("data-stx-events");if(!X)return;try{JSON.parse(X).forEach((Q)=>{this.bindSingleEvent($,Q)})}catch(Z){console.error("[Hydration] Failed to parse events:",Z)}}bindDirectiveEvents(){if(!this.root)return;["click","submit","input","change","focus","blur","keydown","keyup","keypress","mouseenter","mouseleave","touchstart","touchend","scroll","resize"].forEach((X)=>{let Z=`data-stx-on-${X}`;this.root.querySelectorAll(`[${Z}]`).forEach((Y)=>{let J=Y.getAttribute(Z);if(!J)return;this.bindSingleEvent(Y,{type:X,handler:J,modifiers:this.parseModifiers(Y,X)})})})}parseModifiers($,X){let Z=[],Q=$.getAttribute(`data-stx-${X}-modifiers`);if(Q)Z.push(...Q.split(",").map((Y)=>Y.trim()));return Z}bindSingleEvent($,X){let Z=this.resolveHandler(X.handler);if(!Z){console.warn(`[Hydration] Handler not found: ${X.handler}`);return}let Q=(G)=>{if(X.modifiers?.includes("prevent")||X.preventDefault)G.preventDefault();if(X.modifiers?.includes("stop")||X.stopPropagation)G.stopPropagation();try{Z.call($,G)}catch(W){console.error("[Hydration] Event handler error:",W)}},Y={};if(X.modifiers?.includes("once"))Y.once=!0;let J=X.modifiers??[];if(O8(X.type,{passive:J.includes("passive"),prevent:J.includes("prevent")||X.preventDefault,nonpassive:J.includes("nonpassive")}))Y.passive=!0;if(X.modifiers?.includes("capture"))Y.capture=!0;$.addEventListener(X.type,Q,Y)}resolveHandler($){let X=window.stx;if(X&&X[$])return X[$];if(window[$])return window[$];try{if($.match(/^\w+\+\+$/)||$.match(/^\w+--$/)){let Y=$.replace(/[+-]+$/,"");return()=>{if(X&&X[Y]){if(typeof X[Y].value<"u")if($.includes("++"))X[Y].value++;else X[Y].value--}}}let Z=$.match(/^(\w+)\s*=\s*(.+)$/);if(Z){let[,Y,J]=Z;return()=>{if(X&&X[Y]){let G=Function(`return ${J}`)();if(typeof X[Y].value<"u")X[Y].value=G}}}let Q=$.match(/^(\w+)\((.*)\)$/);if(Q){let[,Y,J]=Q;return(G)=>{let W=X?.[Y]||window[Y];if(W){let K=J?Function("$event",`return [${J}]`)(G):[];W(...K)}}}return(Y)=>{Function("$event","stx",$)(Y,X)}}catch{return null}}bindComponentEvents($){$.querySelectorAll("[data-stx-events]").forEach((Z)=>{this.bindElementEvents(Z)})}initializeComponentReactivity($,X){if(!window.stx)return;$.querySelectorAll("[data-stx-reactive]").forEach((Y)=>{let J=Y.getAttribute("data-stx-reactive");if(!J)return;this.setupReactiveBinding(Y,J)})}initializeReactiveBindings(){if(!this.root)return;this.getTextNodesWithExpressions(this.root).forEach(({node:Z,expressions:Q})=>{Q.forEach((Y)=>{this.setupTextNodeBinding(Z,Y)})}),this.root.querySelectorAll("[data-stx-bind-attrs]").forEach((Z)=>{let Q=Z.getAttribute("data-stx-bind-attrs");if(!Q)return;try{let Y=JSON.parse(Q);Object.entries(Y).forEach(([J,G])=>{this.setupAttributeBinding(Z,J,G)})}catch{}})}getTextNodesWithExpressions($){let X=[],Z=document.createTreeWalker($,NodeFilter.SHOW_TEXT),Q;while(Q=Z.nextNode()){let J=(Q.textContent||"").match(/\{\{\s*([^}]+)\s*\}\}/g);if(J)X.push({node:Q,expressions:J.map((G)=>G.replace(/\{\{\s*|\s*\}\}/g,""))})}return X}setupTextNodeBinding($,X){let Z=window.stx;if(!Z)return;let Q=$.textContent||"",Y=()=>{try{let G=Function("stx",`with(stx) { return ${X} }`)(Z);$.textContent=Q.replace(new RegExp(`\\{\\{\\s*${X.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}\\s*\\}\\}`),String(G))}catch{}};Y();let J=X.match(/^(\w+)(\.value)?$/);if(J&&Z[J[1]]?.subscribe)Z[J[1]].subscribe(Y)}setupAttributeBinding($,X,Z){let Q=window.stx;if(!Q)return;let Y=()=>{try{let G=Function("stx",`with(stx) { return ${Z} }`)(Q);if(typeof G==="boolean")if(G)$.setAttribute(X,"");else $.removeAttribute(X);else $.setAttribute(X,String(G))}catch{}};Y();let J=Z.match(/^(\w+)(\.value)?$/);if(J&&Q[J[1]]?.subscribe)Q[J[1]].subscribe(Y)}setupReactiveBinding($,X){let Z=window.stx;if(!Z)return;let Q=()=>{try{let J=Function("stx",`with(stx) { return ${X} }`)(Z);$.textContent=String(J)}catch{}};Q();let Y=X.match(/^(\w+)(\.value)?$/);if(Y&&Z[Y[1]]?.subscribe)Z[Y[1]].subscribe(Q)}setupRouterIntegration(){window.addEventListener("stx:navigate",($)=>{let{url:X}=$.detail||{};if(X){if(window.stx?.setRouteParams){let Q=new URL(X,window.location.origin)}}}),window.addEventListener("stx:load",()=>{this.hydrateComponents(),this.bindEventHandlers()})}get hydrated(){return this.isHydrated}getState(){return this.state}async hydrateById($){let X=this.pendingComponents.get($),Z=document.querySelector(`[data-stx-component="${$}"]`);if(X&&Z)await this.hydrateComponent(Z,X)}}function BK($){return`
|
|
3291
|
+
${$?OZ($):""}
|
|
3292
3292
|
<script data-stx-hydration-runtime>
|
|
3293
3293
|
(function() {
|
|
3294
3294
|
'use strict';
|
|
@@ -3385,7 +3385,7 @@ else {
|
|
|
3385
3385
|
}
|
|
3386
3386
|
})();
|
|
3387
3387
|
</script>
|
|
3388
|
-
`}var E5=null;function
|
|
3388
|
+
`}var E5=null;function qZ($){if(!E5)E5=new q8($);return E5}async function LK($){await qZ($).hydrate()}function FK(){return`
|
|
3389
3389
|
<style data-stx-hydration-styles>
|
|
3390
3390
|
/* Pre-hydration state */
|
|
3391
3391
|
[data-stx-component]:not(.stx-hydrated) {
|
|
@@ -3418,9 +3418,9 @@ else {
|
|
|
3418
3418
|
}
|
|
3419
3419
|
}
|
|
3420
3420
|
</style>
|
|
3421
|
-
`}import
|
|
3421
|
+
`}import N8 from"path";V6();class NZ{store=new Map;async get($){let X=this.store.get($);if(!X||X.expires<=Date.now()){if(X)this.store.delete($);return null}return{...X.data}}async set($,X,Z){this.store.set($,{data:{...X},expires:Date.now()+Z*1000})}async delete($){this.store.delete($)}}function MZ($,X){for(let Z of $.getSetCookie())X.append("Set-Cookie",Z);$.forEach((Z,Q)=>{if(Q.toLowerCase()!=="set-cookie")X.set(Q,Z)})}async function VK($,X={},Z={}){let Q=Z.viewsDir||"./views",Y=Z.layoutsDir||"./layouts",J=!$.includes("<")&&!$.includes("@"),G,W;if(J){if(W=N8.resolve(Q,$),!W.endsWith(".stx"))W+=".stx";if(!await Bun.file(W).exists())return new Response(`Template not found: ${$}`,{status:500});G=await Bun.file(W).text()}else G=$,W="inline-template.stx";let K={...X,props:X,__filename:W,__dirname:N8.dirname(W)};if(Z.ctx)K.csrf_token=Z.ctx.csrfToken,K.csrf_field=`<input type="hidden" name="_token" value="${Z.ctx.csrfToken}">`,K.old=Z.ctx.old,K.errors=Z.ctx.errors,K.session=Z.ctx.session,K.user=Z.ctx.user(),K.isAuthenticated=Z.ctx.isAuthenticated();let _=G.match(/<script\s+server\b[^>]*>([\s\S]*?)<\/script>/i);if(_){let H=_[1];G=G.replace(/<script\s+server\b[^>]*>[\s\S]*?<\/script>/gi,""),await M0(H,K,W)}let U={layoutsDir:Y,...Z.stxOptions},z=await V0(G,K,W,U,new Set),j=new Headers({"Content-Type":"text/html; charset=utf-8"});if(Z.ctx)MZ(Z.ctx.responseHeaders,j);return new Response(z,{headers:j})}var d1={stores:new Map,subscriptions:new Map};function VZ($,X){d1.stores.set($,X)}function V8($){return d1.stores.get($)}function EZ($){return d1.stores.has($)}function IZ(){return Array.from(d1.stores.keys())}var H1=new Map;function M8($){if($==="memory")return{getItem:(X)=>H1.get(X)??null,setItem:(X,Z)=>H1.set(X,Z),removeItem:(X)=>H1.delete(X)};if(typeof window>"u")return{getItem:(X)=>H1.get(X)??null,setItem:(X,Z)=>H1.set(X,Z),removeItem:(X)=>H1.delete(X)};return $==="local"?window.localStorage:window.sessionStorage}function RZ($,X){let Z={};for(let Q of X){let Y=Q.split("."),J=$,G=Z,W=!0;for(let K=0;K<Y.length-1;K++){let _=Y[K];if(J&&typeof J==="object"&&_ in J){if(J=J[_],!(_ in G))G[_]={};G=G[_]}else{W=!1;break}}if(W&&J&&typeof J==="object"){let K=Y[Y.length-1];if(K in J)G[K]=J[K]}}return Z}function E8($,X={}){let{name:Z,persist:Q,devtools:Y=!1,middleware:J=[],equals:G=(O,A)=>O===A}=X,W=$,K=new Set,_=null;if(Q){let O=M8(Q.storage||"local"),A=Q.key||`stx-store:${Z||"unnamed"}`,V=Q.deserialize||JSON.parse;try{let E=O.getItem(A);if(E){let q=V(E);if(Q.paths&&typeof q==="object"&&q!==null)W={...$,...q};else W=q}}catch{}}let U=(O)=>{if(!Q)return;let A=M8(Q.storage||"local"),V=Q.key||`stx-store:${Z||"unnamed"}`,E=Q.serialize||JSON.stringify,q=Q.paths&&typeof O==="object"&&O!==null?RZ(O,Q.paths):O;if(Q.debounce){if(_)clearTimeout(_);_=setTimeout(()=>{A.setItem(V,E(q))},Q.debounce)}else A.setItem(V,E(q))},F=(O,A)=>{for(let V of K)try{V(O,A)}catch(E){console.error("[stx-store] Subscriber error:",E)}},z=Y?(O,A)=>{if(i6(Z||"unnamed",O,W,A),typeof window<"u")window.__STX_DEVTOOLS__?.onStoreChange?.(Z||"unnamed",O,A)}:()=>{},j=(O)=>{let A=W;if(!G(O,A))W=O,U(O),F(O,A),z("set",O)},H=j,L={get:()=>W,set:(O)=>{if(typeof O==="function")H(O(W));else H(O)},subscribe:(O)=>{return K.add(O),()=>{K.delete(O)}},update:(O)=>{if(typeof W!=="object"||W===null)throw Error("update() can only be used with object stores");let A=typeof O==="function"?O(W):O;L.set({...W,...A})},reset:()=>{L.set($),z("reset",$)},name:Z,destroy:()=>{if(K.clear(),_)clearTimeout(_);if(Z)d1.stores.delete(Z)}};for(let O of J.reverse())H=O(j,()=>W,L)(H);if(Z){if(VZ(Z,L),Y)l6(Z,W??{},{},[])}return L}function DZ($){let X=typeof $==="string"?V8($):$;if(!X)throw Error(`Store "${$}" not found`);return X.get()}function wZ($,X,Z){if(typeof X==="function"){if(typeof window<"u"&&window.stx?.defineStore)return window.stx.defineStore($,X,Z);return X()}let Q=X,{state:Y,getters:J={},actions:G={},persist:W,devtools:K=!0}=Q,_=typeof Y==="function"?Y():Y,U=W===!0?{storage:"local",key:`stx-store:${$}`}:W||void 0,F=E8(_,{name:$,persist:U,devtools:K}),z=new Proxy({},{get(j,H){let L=String(H);if(L==="$state")return F.get();if(L==="$subscribe")return F.subscribe;if(L==="$reset")return F.reset;if(L==="$patch")return(A)=>{if(typeof A==="function"){let E={...F.get()};A(E),F.set(E)}else F.update(A)};if(L==="_store")return F;if(L==="$id")return $;if(L in J)return J[L](F.get());if(L in G)return(...A)=>{return G[L].apply(z,A)};let O=F.get();if(O&&typeof O==="object"&&L in O)return O[L];return},set(j,H,L){let O=String(H);if(O.startsWith("$")||O==="_store")return!1;let A=F.get();if(A&&typeof A==="object")return F.set({...A,[O]:L}),!0;return!1},has(j,H){let L=String(H),O=F.get();return L.startsWith("$")||L==="_store"||L in J||L in G||O&&typeof O==="object"&&L in O},ownKeys(){let j=F.get();return[...j&&typeof j==="object"?Object.keys(j):[],...Object.keys(J),...Object.keys(G),"$state","$subscribe","$reset","$patch","$id"]},getOwnPropertyDescriptor(j,H){return{enumerable:!0,configurable:!0,get:()=>this.get(j,H,z)}}});return TZ.set($,z),z}var TZ=new Map;function CZ($){if(typeof window>"u")return;let X=window;X.__STX_STORES__=X.__STX_STORES__||{};for(let[Z,Q]of Object.entries($))X.__STX_STORES__[Z]=Q;window.dispatchEvent(new CustomEvent("stx:stores-ready",{detail:Object.keys($)}))}function l($,X={}){let Z=[];for(let[Y,J]of Object.entries(X)){if(J===void 0||J===null)continue;if(Array.isArray(J))Z.push(`${Y}=${encodeURIComponent(J.join(","))}`);else if(typeof J==="boolean"){if(J)Z.push(`${Y}=true`)}else Z.push(`${Y}=${encodeURIComponent(String(J))}`)}if(Z.length===0)return $;let Q=$.includes("?")?"&":"?";return`${$}${Q}${Z.join("&")}`}function I8($){let X=$.indexOf("?");if(X===-1)return{src:$,params:{}};let Z=$.slice(0,X),Q=$.slice(X+1),Y={};for(let J of Q.split("&")){let[G,W]=J.split("="),K=W?decodeURIComponent(W):"";if(K==="true")Y[G]=!0;else if(K==="false")Y[G]=!1;else if(/^-?\d+$/.test(K))Y[G]=Number.parseInt(K,10);else if(/^-?\d+\.\d+$/.test(K))Y[G]=Number.parseFloat(K);else if(K.includes(","))Y[G]=K.split(",");else Y[G]=K}return{src:Z,params:Y}}function I5(...$){let X={};for(let Z of $)if(Z)Object.assign(X,Z);return X}function R8($,X,Z,Q){let Y={w:X};if(Z)Y.h=Z;if(Q)Y.fit=Q;return l($,Y)}function D8($,X,Z,Q="center"){return l($,{w:X,h:Z,fit:"crop",crop:Q})}function w8($,X,Z="center"){return l($,{w:X,h:X,fit:"crop",crop:Z})}function T8($,X,Z){return l($,{w:X,h:Z,fit:"max"})}function C8($,X,Z){return l($,{w:X,h:Z,fit:"crop"})}function k8($,X){return l($,{blur:Math.min(2000,Math.max(0,X))})}function x8($,X){return l($,{sharp:Math.min(100,Math.max(0,X))})}function S8($){return l($,{sat:-100})}function P8($,X=100){return l($,{sepia:Math.min(100,Math.max(0,X))})}function b8($){return l($,{invert:!0})}function y8($,X){return l($,{bri:Math.min(100,Math.max(-100,X))})}function v8($,X){return l($,{con:Math.min(100,Math.max(-100,X))})}function g8($,X){return l($,{sat:Math.min(100,Math.max(-100,X))})}function f8($,X){return l($,{rot:(X%360+360)%360})}function h8($){return l($,{flip:"h"})}function d8($){return l($,{flip:"v"})}function u8($,X,Z){let Q={fm:X};if(Z!==void 0)Q.q=Z;return l($,Q)}function m8($,X){return l($,{q:Math.min(100,Math.max(1,X))})}function p8($,X=["format","compress"]){return l($,{auto:X})}function c8($,X,Z={}){return l($,{mark:X,markx:Z.x,marky:Z.y,markalpha:Z.alpha,markscale:Z.scale,markalign:Z.align})}var R5={web:{fm:"webp",q:80,auto:["format","compress"]},highQuality:{q:95},thumb:{w:150,h:150,fit:"crop",crop:"center"},avatar:{w:200,h:200,fit:"crop",crop:"faces"},social:{w:1200,h:630,fit:"crop"},preview:{w:400,q:70},placeholder:{w:20,blur:200,q:20}};function l8($,X,Z){return l($,I5(R5[X],Z))}function i8($,X,Z){return X.map((Q)=>l($,{...Z,w:Q}))}function a8($,X,Z=[1,2,3],Q){return Z.map((Y)=>l($,{...Q,w:Math.round(X*Y),dpr:Y}))}function r8($){let X=[];if($.w!==void 0&&($.w<1||$.w>16383))X.push("Width must be between 1 and 16383");if($.h!==void 0&&($.h<1||$.h>16383))X.push("Height must be between 1 and 16383");if($.q!==void 0&&($.q<1||$.q>100))X.push("Quality must be between 1 and 100");if($.blur!==void 0&&($.blur<0||$.blur>2000))X.push("Blur must be between 0 and 2000");if($.rot!==void 0&&($.rot<0||$.rot>359))X.push("Rotation must be between 0 and 359");if($.dpr!==void 0&&($.dpr<1||$.dpr>5))X.push("DPR must be between 1 and 5");return{valid:X.length===0,errors:X}}function s8($){let X={...$};if(X.w!==void 0)X.w=Math.min(16383,Math.max(1,X.w));if(X.h!==void 0)X.h=Math.min(16383,Math.max(1,X.h));if(X.q!==void 0)X.q=Math.min(100,Math.max(1,X.q));if(X.blur!==void 0)X.blur=Math.min(2000,Math.max(0,X.blur));if(X.rot!==void 0)X.rot=(X.rot%360+360)%360;if(X.dpr!==void 0)X.dpr=Math.min(5,Math.max(1,X.dpr));return X}function o8($){let{endpoint:X,accept:Z,maxSize:Q,maxFiles:Y=1,fieldName:J="file",preview:G=!1,dropzone:W=!0,multiple:K=!1,autoUpload:_=!0,showProgress:U=!0,disabled:F=!1,placeholder:z="Drop files here or click to select",label:j}=$,H=$.class||"",L=$.style||"",O=$.id||`stx-upload-${Math.random().toString(36).slice(2,8)}`,A=Array.isArray(Z)?Z.join(","):Z,V=`
|
|
3422
3422
|
<div id="${O}" class="stx-upload${W?" stx-upload-dropzone":""}${F?" stx-upload-disabled":""}${H?" "+H:""}"${L?` style="${L}"`:""}>
|
|
3423
|
-
${j?`<label class="stx-upload-label">${
|
|
3423
|
+
${j?`<label class="stx-upload-label">${n8(j)}</label>`:""}
|
|
3424
3424
|
<div class="stx-upload-area" data-stx-upload-area>
|
|
3425
3425
|
<input
|
|
3426
3426
|
type="file"
|
|
@@ -3435,8 +3435,8 @@ else {
|
|
|
3435
3435
|
<svg class="stx-upload-icon" viewBox="0 0 24 24" width="48" height="48">
|
|
3436
3436
|
<path fill="currentColor" d="M9 16h6v-6h4l-7-7-7 7h4v6zm-4 2h14v2H5v-2z"/>
|
|
3437
3437
|
</svg>
|
|
3438
|
-
<span class="stx-upload-text">${
|
|
3439
|
-
${Q?`<span class="stx-upload-hint">Max size: ${
|
|
3438
|
+
<span class="stx-upload-text">${n8(z)}</span>
|
|
3439
|
+
${Q?`<span class="stx-upload-hint">Max size: ${OQ(Q)}</span>`:""}
|
|
3440
3440
|
</div>
|
|
3441
3441
|
</div>
|
|
3442
3442
|
${G?'<div class="stx-upload-previews" data-stx-upload-previews></div>':""}
|
|
@@ -3455,7 +3455,7 @@ else {
|
|
|
3455
3455
|
var progressText = progress ? progress.querySelector('.stx-upload-progress-text') : null;
|
|
3456
3456
|
|
|
3457
3457
|
var config = {
|
|
3458
|
-
endpoint: '${
|
|
3458
|
+
endpoint: '${HQ(X)}',
|
|
3459
3459
|
fieldName: '${J}',
|
|
3460
3460
|
maxSize: ${Q||"null"},
|
|
3461
3461
|
maxFiles: ${Y},
|
|
@@ -3707,7 +3707,7 @@ else {
|
|
|
3707
3707
|
opacity: 0.5;
|
|
3708
3708
|
pointer-events: none;
|
|
3709
3709
|
}
|
|
3710
|
-
`.trim();return{html:V,script:E,css:q}}function
|
|
3710
|
+
`.trim();return{html:V,script:E,css:q}}function n8($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function HQ($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'")}function OQ($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(1)} KB`;return`${($/1048576).toFixed(1)} MB`}async function D5($,X){let{endpoint:Z,method:Q="POST",headers:Y={},expirationSeconds:J=3600,oneTimeUse:G=!1,params:W={}}=X,K=JSON.stringify({url:$,expirationSeconds:J,oneTimeUse:G,...W}),_=await fetch(Z,{method:Q,headers:{"Content-Type":"application/json",...Y},body:Q!=="GET"?K:void 0});if(!_.ok)throw Error(`Failed to sign URL: ${_.status} ${_.statusText}`);let U=await _.json();return{url:U.url||U.signedUrl,signature:U.signature,expires:U.expires||Date.now()+J*1000,oneTimeUse:U.oneTimeUse||G}}async function w5($,X){let{endpoint:Z,method:Q="POST",headers:Y={},expirationSeconds:J=3600,oneTimeUse:G=!1,params:W={}}=X,K=JSON.stringify({urls:$,expirationSeconds:J,oneTimeUse:G,...W}),_=await fetch(Z,{method:Q,headers:{"Content-Type":"application/json",...Y},body:Q!=="GET"?K:void 0});if(!_.ok)throw Error(`Failed to batch sign URLs: ${_.status} ${_.statusText}`);let U=await _.json(),F=new Map,z=new Map;if(Array.isArray(U.results))for(let j of U.results)if(j.error)z.set(j.url,j.error);else F.set(j.url||j.originalUrl,{url:j.signedUrl||j.url,signature:j.signature,expires:j.expires||Date.now()+J*1000,oneTimeUse:j.oneTimeUse||G});else if(typeof U.signatures==="object"){for(let[j,H]of Object.entries(U.signatures)){let L=H;F.set(j,{url:L.signedUrl||L.url||j,signature:L.signature,expires:L.expires||Date.now()+J*1000,oneTimeUse:G})}if(U.errors)for(let[j,H]of Object.entries(U.errors))z.set(j,H)}return{signatures:F,errors:z}}async function t8($,X,Z=10){let Q=new Map,Y=new Map,J=[];for(let W=0;W<$.length;W+=Z)J.push($.slice(W,W+Z));let G=await Promise.all(J.map((W)=>w5(W,X)));for(let W of G){for(let[K,_]of W.signatures)Q.set(K,_);for(let[K,_]of W.errors)Y.set(K,_)}return{signatures:Q,errors:Y}}function T5($){return $.expires>Date.now()}function C5($){return Math.max(0,$.expires-Date.now())}function k5($,X=300000){return C5($)<X}async function m1($){if($.check)return await $.check();return!0}function N$($){let X={};if($.role)X.role=$.role;if($.permission)X.permission=$.permission;if($.userId)X.userId=$.userId;return X}var u1=new Map;async function e8($,X){let Z=`${$}:${X.endpoint}`,Q=u1.get(Z);if(Q&&T5(Q)&&!k5(Q))return Q;let Y=await D5($,X);return u1.set(Z,Y),Y}function $7(){u1.clear()}function X7(){let $=0,X=Date.now();for(let[Z,Q]of u1)if(Q.expires<=X)u1.delete(Z),$++;return $}function M$(){return`
|
|
3711
3711
|
(function() {
|
|
3712
3712
|
'use strict';
|
|
3713
3713
|
|
|
@@ -3781,7 +3781,7 @@ catch (error) {
|
|
|
3781
3781
|
}
|
|
3782
3782
|
};
|
|
3783
3783
|
})();
|
|
3784
|
-
`.trim()}async function
|
|
3784
|
+
`.trim()}async function Q7($){let{src:X,alt:Z="",signatureEndpoint:Q="/api/sign",signatureConfig:Y={},auth:J,fallback:G,oneTimeUse:W=!0}=$,K=$.class,_=$.style;if(J){if(!await m1(J)){if(G)return{html:`<img src="${$0(G)}" alt="${$0(Z)}"${K?` class="${$0(K)}"`:""}${_?` style="${$0(_)}"`:""} />`};return{html:"<!-- Protected content: access denied -->"}}}let U={endpoint:Q,oneTimeUse:W,...Y,params:J?N$(J):Y.params},F=`stx-protected-${Math.random().toString(36).slice(2,8)}`,z=[`id="${F}"`,`data-protected-src="${$0(X)}"`,`data-signature-endpoint="${$0(Q)}"`,`alt="${$0(Z)}"`];if(G)z.push(`data-fallback="${$0(G)}"`),z.push(`src="${$0(G)}"`);else z.push('src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"');if(K)z.push(`class="${$0(K)}"`);if(_)z.push(`style="${$0(_)}"`);let j=`
|
|
3785
3785
|
(function() {
|
|
3786
3786
|
var el = document.getElementById('${F}');
|
|
3787
3787
|
if (!el) return;
|
|
@@ -3792,7 +3792,7 @@ catch (error) {
|
|
|
3792
3792
|
expirationSeconds: ${Y.expirationSeconds||3600}
|
|
3793
3793
|
});
|
|
3794
3794
|
})();
|
|
3795
|
-
`.trim();return{html:`<img ${z.join(" ")} />`,script:j}}async function
|
|
3795
|
+
`.trim();return{html:`<img ${z.join(" ")} />`,script:j}}async function Y7($){let{src:X,signatureEndpoint:Z="/api/sign",signatureConfig:Q={},auth:Y,fallback:J,oneTimeUse:G=!0,poster:W,controls:K=!0,autoplay:_=!1,muted:U=!1,loop:F=!1}=$,z=$.class,j=$.style,H=$.alt;if(Y){if(!await m1(Y))return{html:"<!-- Protected video: access denied -->"}}let L=`stx-protected-video-${Math.random().toString(36).slice(2,8)}`,O=[`id="${L}"`,`data-protected-src="${$0(X)}"`,`data-signature-endpoint="${$0(Z)}"`];if(W)O.push(`poster="${$0(W)}"`);if(K)O.push("controls");if(_)O.push("autoplay");if(U)O.push("muted");if(F)O.push("loop");if(z)O.push(`class="${$0(z)}"`);if(j)O.push(`style="${$0(j)}"`);if(J)O.push(`data-fallback="${$0(J)}"`);let A=`
|
|
3796
3796
|
(function() {
|
|
3797
3797
|
var el = document.getElementById('${L}');
|
|
3798
3798
|
if (!el) return;
|
|
@@ -3803,7 +3803,7 @@ catch (error) {
|
|
|
3803
3803
|
expirationSeconds: ${Q.expirationSeconds||3600}
|
|
3804
3804
|
});
|
|
3805
3805
|
})();
|
|
3806
|
-
`.trim();return{html:`<video ${O.join(" ")}></video>`,script:A}}async function
|
|
3806
|
+
`.trim();return{html:`<video ${O.join(" ")}></video>`,script:A}}async function J7($,X){let Z=/data-protected-src="([^"]+)"/g,Q=[],Y;while((Y=Z.exec($))!==null)Q.push(Y[1]);if(Q.length===0)return{html:$,script:""};let J=M$()+`
|
|
3807
3807
|
|
|
3808
3808
|
`;return J+=`
|
|
3809
3809
|
(function() {
|
|
@@ -3835,12 +3835,12 @@ else if (el.dataset.fallback) {
|
|
|
3835
3835
|
});
|
|
3836
3836
|
});
|
|
3837
3837
|
})();
|
|
3838
|
-
`.trim(),{html:$,script:J}}function
|
|
3838
|
+
`.trim(),{html:$,script:J}}function G7($,X,Z){if(X.src)return{src:String(X.src),alt:String(X.alt||""),signatureEndpoint:String(X.signatureEndpoint||"/api/sign"),auth:X.auth,fallback:X.fallback?String(X.fallback):void 0,oneTimeUse:X.oneTimeUse!==!1};let Q=$.trim();if(Q.startsWith("@protected(")||Q.startsWith("("))Q=Q.replace(/^@protected\(/,"").replace(/^\(/,"").replace(/\)$/,"");let Y=AQ(Q);return{src:Z7(Y[0],Z)||"",alt:Z7(Y[1],Z)||"",...typeof Y[2]==="object"?Y[2]:{}}}function AQ($){let X=[],Z="",Q=!1,Y="",J=0;for(let G=0;G<$.length;G++){let W=$[G],K=G>0?$[G-1]:"";if((W==='"'||W==="'")&&K!=="\\"){if(!Q)Q=!0,Y=W;else if(W===Y)Q=!1;else Z+=W;continue}if(!Q){if(W==="{")J++;if(W==="}")J--;if(W===","&&J===0){X.push(Z.trim()),Z="";continue}}Z+=W}if(Z.trim())X.push(Z.trim());return X}function Z7($,X){if(typeof $!=="string")return $;let Z=$.trim();if(Z.startsWith('"')&&Z.endsWith('"')||Z.startsWith("'")&&Z.endsWith("'"))return Z.slice(1,-1);if(X[Z]!==void 0)return X[Z];if(Z.startsWith("{"))try{return JSON.parse(Z)}catch{}return Z}function $0($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function qQ($){let{src:X,apiKey:Z,bucket:Q,allowedTypes:Y,maxFileSize:J,multiple:G=!1,customStyles:W={},callbacks:K={}}=$,_=`stx-media-manager-${Math.random().toString(36).slice(2,8)}`,U={container:`#${_}`};if(Z)U.apiKey=Z;if(Q)U.bucket=Q;if(Y)U.allowedTypes=Y;if(J)U.maxFileSize=J;if(G)U.multiple=G;if(Object.keys(W).length>0)U.styles=W;let F=`<div id="${_}" class="stx-media-manager"></div>`,z=Object.entries(K).filter(([,H])=>H).map(([H,L])=>{return`manager.on('${H.replace(/^on/,"").toLowerCase()}', ${L});`}).join(`
|
|
3839
3839
|
`),j=`
|
|
3840
3840
|
(function() {
|
|
3841
3841
|
// Load media manager script
|
|
3842
3842
|
var script = document.createElement('script');
|
|
3843
|
-
script.src = '${
|
|
3843
|
+
script.src = '${W7(X)}';
|
|
3844
3844
|
script.async = true;
|
|
3845
3845
|
|
|
3846
3846
|
script.onload = function() {
|
|
@@ -3857,12 +3857,12 @@ else if (el.dataset.fallback) {
|
|
|
3857
3857
|
};
|
|
3858
3858
|
|
|
3859
3859
|
script.onerror = function() {
|
|
3860
|
-
console.error('[stx] Failed to load media manager from:', '${
|
|
3860
|
+
console.error('[stx] Failed to load media manager from:', '${W7(X)}');
|
|
3861
3861
|
};
|
|
3862
3862
|
|
|
3863
3863
|
document.head.appendChild(script);
|
|
3864
3864
|
})();
|
|
3865
|
-
`.trim();return{html:F,script:j}}function
|
|
3865
|
+
`.trim();return{html:F,script:j}}function NQ($){let{accept:X="image/*",multiple:Z=!1,onSelect:Q="handleMediaSelect"}=$,Y=`stx-picker-${Math.random().toString(36).slice(2,8)}`,J=`
|
|
3866
3866
|
<div id="${Y}" class="stx-media-picker" style="display:none;">
|
|
3867
3867
|
<div class="stx-media-picker-backdrop"></div>
|
|
3868
3868
|
<div class="stx-media-picker-modal">
|
|
@@ -4051,7 +4051,7 @@ else {
|
|
|
4051
4051
|
border: none;
|
|
4052
4052
|
color: white;
|
|
4053
4053
|
}
|
|
4054
|
-
`.trim();return{html:J,script:G,css:W}}function
|
|
4054
|
+
`.trim();return{html:J,script:G,css:W}}function W7($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}var U7={root:null,rootMargin:"50px 0px",threshold:0,useNative:!0,selector:"[data-stx-lazy]"};function x5(){return"loading"in HTMLImageElement.prototype}function S5(){return"IntersectionObserver"in window}function B7($={}){let X={...U7,...$},Z=document.querySelectorAll(X.selector);if(Z.length===0)return()=>{};if(X.useNative&&x5())return Z.forEach((Y)=>{if(Y.tagName==="IMG"||Y.tagName==="IFRAME")c0(Y,X)}),()=>{};if(!S5())return Z.forEach((Y)=>c0(Y,X)),()=>{};let Q=new IntersectionObserver((Y)=>{Y.forEach((J)=>{if(J.isIntersecting){let G=J.target;c0(G,X),Q.unobserve(G)}})},{root:X.root,rootMargin:X.rootMargin,threshold:X.threshold});return Z.forEach((Y)=>Q.observe(Y)),()=>{Q.disconnect()}}function c0($,X={}){let{onLoad:Z,onLoaded:Q,onError:Y}=X;if(Z)Z($);let J=$.tagName==="IMG",G=$.tagName==="VIDEO",W=$.tagName==="IFRAME";if(J)K7($,Q,Y);else if(G)_7($,Q,Y);else if(W)MQ($,Q,Y);else{let K=$.querySelector("img[data-src], img[data-srcset]"),_=$.querySelector("video[data-src]");if(K)K7(K,()=>{if(Q)Q($)},(F)=>{if(Y)Y($,F)});else if(_)_7(_,()=>{if(Q)Q($)},(F)=>{if(Y)Y($,F)});$.querySelectorAll("source[data-srcset]").forEach((F)=>{let z=F;if(z.dataset.srcset)z.srcset=z.dataset.srcset,delete z.dataset.srcset;if(z.dataset.sizes)z.sizes=z.dataset.sizes,delete z.dataset.sizes})}}function K7($,X,Z){let Q=()=>{$.classList.add("stx-img-loaded"),$.style.opacity="1";let J=$.closest(".stx-img-placeholder");if(J)J.classList.add("stx-img-loaded");if(X)X($)},Y=()=>{if($.classList.add("stx-img-error"),Z)Z($,Error(`Failed to load image: ${$.src}`))};if($.addEventListener("load",Q,{once:!0}),$.addEventListener("error",Y,{once:!0}),$.dataset.srcset)$.srcset=$.dataset.srcset,delete $.dataset.srcset;if($.dataset.src)$.src=$.dataset.src,delete $.dataset.src;if($.dataset.sizes)$.sizes=$.dataset.sizes,delete $.dataset.sizes}function _7($,X,Z){let Q=()=>{if($.classList.add("stx-video-loaded"),X)X($)},Y=()=>{if($.classList.add("stx-video-error"),Z)Z($,Error(`Failed to load video: ${$.src}`))};if($.addEventListener("loadeddata",Q,{once:!0}),$.addEventListener("error",Y,{once:!0}),$.querySelectorAll("source[data-src]").forEach((G)=>{let W=G;if(W.dataset.src)W.src=W.dataset.src,delete W.dataset.src}),$.dataset.src)$.src=$.dataset.src,delete $.dataset.src;if($.dataset.poster)$.poster=$.dataset.poster,delete $.dataset.poster;$.load()}function MQ($,X,Z){let Q=()=>{if($.classList.add("stx-iframe-loaded"),X)X($)},Y=()=>{if($.classList.add("stx-iframe-error"),Z)Z($,Error(`Failed to load iframe: ${$.src}`))};if($.addEventListener("load",Q,{once:!0}),$.addEventListener("error",Y,{once:!0}),$.dataset.src)$.src=$.dataset.src,delete $.dataset.src}function L7($){c0($,{})}function F7($="[data-stx-lazy]"){document.querySelectorAll($).forEach((Z)=>c0(Z,{}))}function z7($={}){let X={...U7,...$};return new IntersectionObserver((Z,Q)=>{Z.forEach((Y)=>{if(Y.isIntersecting)c0(Y.target,X),Q.unobserve(Y.target)})},{root:X.root,rootMargin:X.rootMargin,threshold:X.threshold})}function j7($,X){$.observe(X)}function H7($){$.disconnect()}function V$(){return`
|
|
4055
4055
|
(function() {
|
|
4056
4056
|
'use strict';
|
|
4057
4057
|
|
|
@@ -4141,7 +4141,7 @@ else {
|
|
|
4141
4141
|
window.STX.lazyLoad = loadElement;
|
|
4142
4142
|
window.STX.initLazyLoading = init;
|
|
4143
4143
|
})();
|
|
4144
|
-
`.trim()}var
|
|
4144
|
+
`.trim()}var VQ={duration:300,easing:"ease-out",removePlaceholder:!1,loadedClass:"stx-img-loaded",loadingClass:"stx-img-loading"};function P5($,X={}){let Z={...VQ,...X},Q=$.closest(".stx-img-placeholder");if(!Q){EQ($,Z);return}if(Q.style.setProperty("--stx-img-transition-duration",`${Z.duration}ms`),Q.style.setProperty("--stx-img-transition-easing",Z.easing),Z.loadingClass)Q.classList.add(Z.loadingClass);if($.complete&&$.naturalWidth>0)O7($,Q,Z);else $.addEventListener("load",()=>O7($,Q,Z),{once:!0}),$.addEventListener("error",()=>IQ($,Q,Z),{once:!0})}function EQ($,X){let Z=()=>{$.style.transition=`opacity ${X.duration}ms ${X.easing}`,$.style.opacity="1",$.classList.remove(X.loadingClass),$.classList.add(X.loadedClass)};if($.complete&&$.naturalWidth>0)Z();else $.style.opacity="0",$.classList.add(X.loadingClass),$.addEventListener("load",Z,{once:!0})}function O7($,X,Z){if(Z.loadingClass)X.classList.remove(Z.loadingClass);if(Z.loadedClass)X.classList.add(Z.loadedClass);if($.style.opacity="1",Z.removePlaceholder)setTimeout(()=>{X.style.backgroundImage="none"},Z.duration)}function IQ($,X,Z){if(Z.loadingClass)X.classList.remove(Z.loadingClass);X.classList.add("stx-img-error"),$.classList.add("stx-img-error")}function A7($,X){let Z=E$($),Q=X.getContext("2d");if(!Q)return;X.width=Z.w,X.height=Z.h;let Y=Q.createImageData(Z.w,Z.h);Y.data.set(Z.rgba),Q.putImageData(Y,0,0)}function E$($){let X=$[0]|$[1]<<8|$[2]<<16,Z=(X&63)/63,Q=(X>>6&63)/31.5-1,Y=(X>>12&63)/31.5-1,J=(X>>18&31)/31,G=X>>23!==0,W=$[3]|$[4]<<8,K=(W>>3&63)/63,_=(W>>9&63)/63,U=W>>15!==0,F=Math.max(3,U?G?5:7:G?5:5),z=Math.max(3,U?G?5:5:G?5:7),j=32,H=32,L=new Uint8ClampedArray(4096);for(let O=0;O<32;O++)for(let A=0;A<32;A++){let V=(O*32+A)*4,E=A/31,q=O/31,N=Z+(E-0.5)*J*0.5+(q-0.5)*J*0.5,I=Q*(1-E*0.3),M=Y*(1-q*0.3),w=N-0.6666666666666666*I,D=(3*N-w+M)/2,T=D-M;L[V]=Math.max(0,Math.min(255,Math.round(D*255))),L[V+1]=Math.max(0,Math.min(255,Math.round(T*255))),L[V+2]=Math.max(0,Math.min(255,Math.round(w*255))),L[V+3]=255}return{w:32,h:32,rgba:L}}function q7($){let X=E$($),Z=document.createElement("canvas");Z.width=X.w,Z.height=X.h;let Q=Z.getContext("2d");if(!Q)return"";let Y=Q.createImageData(X.w,X.h);return Y.data.set(X.rgba),Q.putImageData(Y,0,0),Z.toDataURL("image/png")}function N7($){let X=atob($),Z=new Uint8Array(X.length);for(let Q=0;Q<X.length;Q++)Z[Q]=X.charCodeAt(Q);return Z}function M7($,X,Z=300){return new Promise((Q)=>{$.style.transition=`opacity ${Z}ms ease-out`,X.style.transition=`opacity ${Z}ms ease-out`,X.style.opacity="0",X.offsetWidth,$.style.opacity="0",X.style.opacity="1",setTimeout(Q,Z)})}function V7($={}){document.querySelectorAll("[data-stx-blur-up], .stx-img-placeholder img").forEach((Z)=>{P5(Z,$)})}function I$(){return`
|
|
4145
4145
|
(function() {
|
|
4146
4146
|
'use strict';
|
|
4147
4147
|
|
|
@@ -4240,7 +4240,7 @@ else {
|
|
|
4240
4240
|
.stx-img-error {
|
|
4241
4241
|
opacity: 0.5;
|
|
4242
4242
|
}
|
|
4243
|
-
`.trim()}var
|
|
4243
|
+
`.trim()}var RQ={method:"POST",fieldName:"file",timeout:60000,withCredentials:!1};function b5($,X={}){if(X.maxSize&&$.size>X.maxSize)return{valid:!1,error:`File size (${E7($.size)}) exceeds maximum (${E7(X.maxSize)})`,code:"FILE_TOO_LARGE"};if(X.accept&&X.accept.length>0){if(!X.accept.some((Q)=>{if(Q.endsWith("/*")){let Y=Q.slice(0,-1);return $.type.startsWith(Y)}return $.type===Q}))return{valid:!1,error:`File type "${$.type}" is not allowed`,code:"INVALID_TYPE"}}return{valid:!0}}function E7($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(1)} KB`;return`${($/1048576).toFixed(2)} MB`}async function y5($,X,Z){let Q={...RQ,...X},Y=b5($,Q);if(!Y.valid)return{success:!1,error:Y.error,name:$.name,size:$.size,type:$.type};if(Q.chunkSize&&$.size>Q.chunkSize)return wQ($,Q,Z);return DQ($,Q,Z)}async function DQ($,X,Z){return new Promise((Q)=>{let Y=new XMLHttpRequest,J=Date.now(),G=0,W=J;Y.upload.addEventListener("progress",(_)=>{if(_.lengthComputable&&Z){let U=Date.now(),F=(U-W)/1000,z=_.loaded-G,j=F>0?z/F:0,H=_.total-_.loaded,L=j>0?H/j*1000:void 0;G=_.loaded,W=U,Z({file:$,loaded:_.loaded,total:_.total,percent:Math.round(_.loaded/_.total*100),speed:j,timeRemaining:L})}}),Y.addEventListener("load",()=>{if(Y.status>=200&&Y.status<300)try{let _=JSON.parse(Y.responseText);Q({success:!0,url:_.url,id:_.id,name:$.name,size:$.size,type:$.type,data:_})}catch{Q({success:!0,name:$.name,size:$.size,type:$.type})}else Q({success:!1,error:`Upload failed with status ${Y.status}`,name:$.name,size:$.size,type:$.type})}),Y.addEventListener("error",()=>{Q({success:!1,error:"Network error during upload",name:$.name,size:$.size,type:$.type})}),Y.addEventListener("timeout",()=>{Q({success:!1,error:"Upload timed out",name:$.name,size:$.size,type:$.type})});let K=new FormData;if(K.append(X.fieldName||"file",$),X.formData)for(let[_,U]of Object.entries(X.formData))K.append(_,U);if(Y.open(X.method||"POST",X.endpoint),Y.timeout=X.timeout||60000,Y.withCredentials=X.withCredentials||!1,X.headers)for(let[_,U]of Object.entries(X.headers))Y.setRequestHeader(_,U);Y.send(K)})}async function wQ($,X,Z){let Q=X.chunkSize,Y=Math.ceil($.size/Q),J=0,G;for(let W=0;W<Y;W++){let K=W*Q,_=Math.min(K+Q,$.size),U=$.slice(K,_),F=new FormData;if(F.append(X.fieldName||"file",U,$.name),F.append("chunk",String(W)),F.append("totalChunks",String(Y)),F.append("fileName",$.name),F.append("fileSize",String($.size)),F.append("fileType",$.type),G)F.append("uploadId",G);if(X.formData)for(let[z,j]of Object.entries(X.formData))F.append(z,j);try{let z=await fetch(X.endpoint,{method:X.method||"POST",headers:X.headers,credentials:X.withCredentials?"include":"same-origin",body:F});if(!z.ok)return{success:!1,error:`Chunk ${W+1}/${Y} failed with status ${z.status}`,name:$.name,size:$.size,type:$.type};let j=await z.json();if(!G&&j.uploadId)G=j.uploadId;if(J=_,Z)Z({file:$,loaded:J,total:$.size,percent:Math.round(J/$.size*100),chunk:W+1,totalChunks:Y});if(W===Y-1)return{success:!0,url:j.url,id:j.id||G,name:$.name,size:$.size,type:$.type,data:j}}catch(z){return{success:!1,error:`Chunk upload failed: ${z}`,name:$.name,size:$.size,type:$.type}}}return{success:!1,error:"Unknown error during chunked upload",name:$.name,size:$.size,type:$.type}}async function I7($,X,Z,Q){let Y=[];for(let J of $){let G=await y5(J,X,(W)=>{if(Z)Z(J,W)});if(Y.push(G),Q)Q(J,G)}return Y}function R7($,X=200){return new Promise((Z,Q)=>{if(!$.type.startsWith("image/")){Q(Error("File is not an image"));return}let Y=new FileReader;Y.onload=(J)=>{let G=new Image;G.onload=()=>{let W=document.createElement("canvas"),K=G.width,_=G.height;if(K>X||_>X)if(K>_)_=Math.round(_*X/K),K=X;else K=Math.round(K*X/_),_=X;W.width=K,W.height=_;let U=W.getContext("2d");if(U)U.drawImage(G,0,0,K,_),Z(W.toDataURL("image/jpeg",0.7));else Q(Error("Could not get canvas context"))},G.onerror=()=>Q(Error("Could not load image")),G.src=J.target?.result},Y.onerror=()=>Q(Error("Could not read file")),Y.readAsDataURL($)})}function D7($){return new Promise((X,Z)=>{if(!$.type.startsWith("video/")){Z(Error("File is not a video"));return}let Q=document.createElement("video"),Y=document.createElement("canvas");Q.preload="metadata",Q.muted=!0,Q.playsInline=!0,Q.onloadeddata=()=>{Q.currentTime=0.1},Q.onseeked=()=>{Y.width=Q.videoWidth,Y.height=Q.videoHeight;let J=Y.getContext("2d");if(J)J.drawImage(Q,0,0),X(Y.toDataURL("image/jpeg",0.7));else Z(Error("Could not get canvas context"));URL.revokeObjectURL(Q.src)},Q.onerror=()=>{URL.revokeObjectURL(Q.src),Z(Error("Could not load video"))},Q.src=URL.createObjectURL($)})}function D$(){return`
|
|
4244
4244
|
(function() {
|
|
4245
4245
|
'use strict';
|
|
4246
4246
|
|
|
@@ -4308,18 +4308,18 @@ else {
|
|
|
4308
4308
|
return { valid: true };
|
|
4309
4309
|
};
|
|
4310
4310
|
})();
|
|
4311
|
-
`.trim()}function
|
|
4311
|
+
`.trim()}function w7(){return{script:[V$(),I$(),D$()].join(`
|
|
4312
4312
|
|
|
4313
|
-
`),css:R$()}}function
|
|
4313
|
+
`),css:R$()}}function TQ(){let{script:$,css:X}=w7(),Z=$.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"").replace(/\s+/g," ").replace(/\s*([{};,:])\s*/g,"$1").trim(),Q=X.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{};,:])\s*/g,"$1").trim();return{script:Z,css:Q}}var d_={enabled:!0,image:{enabled:!0,defaultWidths:[320,480,640,768,1024,1280,1536,1920],defaultFormats:["avif","webp","jpeg"],defaultQuality:80,placeholderStrategy:"thumbhash",lazyByDefault:!0,enableDpr:!0,defaultDpr:[1,2,3]},video:{enabled:!0,lazyByDefault:!0,defaultControls:!0},upload:{enabled:!0,maxSize:10485760,allowedTypes:["image/*","video/*","audio/*","application/pdf"],maxConcurrent:3},protected:{enabled:!0,expirationSeconds:3600,batchSize:10},cache:{enabled:!0,directory:".stx/media-cache",maxAge:30,maxSize:500}};import w$ from"fs";import X1 from"path";async function T7($,X={},Z={}){let Q=await Bun.file($).text(),Y=Q.match(/<script\s+server\s*>([\s\S]*?)<\/script>/i),J=Y?Y[1]:"",G=Y?Q.replace(/<script\s+server\s*>[\s\S]*?<\/script>/i,""):Q;G=G.replace(/<script\s+client\s*>/gi,"<script>");let W={__filename:$,__dirname:X1.dirname($),props:X,...X};if(J)await M0(J,W,$);let K={...T$,...Z};return await V0(G,W,$,K,new Set)}async function CQ($){let X=performance.now(),Z={success:!0,views:[],errors:[],duration:0},{viewsDir:Q,outputDir:Y,componentsDir:J=X1.join(Q,"components"),layoutsDir:G=X1.join(Q,"layouts"),partialsDir:W=X1.join(Q,"partials"),globalProps:K={},placeholders:_={},views:U,debug:F=!1,generateManifest:z=!0}=$;if(F)console.log("Building STX views..."),console.log(` Source: ${Q}`),console.log(` Output: ${Y}`);w$.mkdirSync(Y,{recursive:!0});let j={componentsDir:J,layoutsDir:G,partialsDir:W,debug:F},H;if(U&&U.length>0)H=U;else H=w$.readdirSync(Q).filter((O)=>O.endsWith(".stx")).map((O)=>({input:O}));for(let L of H){let O=X1.join(Q,L.input),A=L.output||L.input.replace(/\.stx$/,".html"),V=X1.join(Y,A);if(F)console.log(` Building ${L.input}...`);try{let E={...K,...L.props,..._},q=await T7(O,E,j);await Bun.write(V,q),Z.views.push(A)}catch(E){let q=E instanceof Error?E.message:String(E);if(Z.errors.push({file:L.input,error:q}),Z.success=!1,F)console.error(` Error: ${q}`)}}if(z){let L={buildTime:new Date().toISOString(),views:Z.views,placeholders:_,errors:Z.errors.length>0?Z.errors:void 0};await Bun.write(X1.join(Y,"manifest.json"),JSON.stringify(L,null,2))}if(Z.duration=performance.now()-X,F)if(Z.success)console.log(`
|
|
4314
4314
|
\u2705 Built ${Z.views.length} views in ${Z.duration.toFixed(0)}ms`);else console.log(`
|
|
4315
|
-
\u26A0\uFE0F Built ${Z.views.length} views with ${Z.errors.length} errors`);return Z}function
|
|
4316
|
-
File changed: ${Y}, rebuilding...`);let J=await
|
|
4315
|
+
\u26A0\uFE0F Built ${Z.views.length} views with ${Z.errors.length} errors`);return Z}function Z9($,X){let Z=w$.watch($.viewsDir,{recursive:!0},async(Q,Y)=>{if(!Y)return;if(Y.endsWith(".stx")||Y.endsWith(".ts")||Y.endsWith(".js")){if($.debug)console.log(`
|
|
4316
|
+
File changed: ${Y}, rebuilding...`);let J=await CQ($);X?.(J)}});return{close:()=>Z.close()}}async function Q9($,X={},Z={}){let Q={...Z,skipDefaultSeoTags:!0,skipSignalsRuntime:!0},Y=await T7($,X,Q);Y=await kQ(Y),Y=Y.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,""),Y=Y.replace(/<style\b([^>]*)>[\s\S]*?<\/style>/gi,(G,W)=>/\bdata-(?:css=["']generated["']|stx-)/i.test(W)?"":G),Y=Y.replace(/<!--\s*stx SEO Tags\s*-->/gi,""),Y=Y.replace(/\n\s*\n\s*\n/g,`
|
|
4317
4317
|
|
|
4318
|
-
`).trim();let J=
|
|
4318
|
+
`).trim();let J=PQ(Y);return{html:Y,text:J}}async function kQ($){try{let{generateCss:X,extractClassNames:Z}=await import("./chunk-gkq323fg.js");if(Z($).size===0)return $;let Y=await X($);if(!Y)return $;let J=xQ(Y);if(J.size===0)return $;return $.replace(/(<[a-z][a-z0-9]*)((?:\s+[a-z][a-z0-9-]*(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*))?)*\s+)class\s*=\s*"([^"]*)"((?:\s+[a-z][a-z0-9-]*(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]*))?)*\s*)(\/?>)/gi,(G,W,K,_,U,F)=>{let z=_.split(/\s+/).filter(Boolean),j=[];for(let A of z){let V=J.get(A);if(V)j.push(V)}if(j.length===0)return`${W}${K}class="${_}"${U}${F}`;let H=j.join("; "),O=`${K}${U}`.match(/style\s*=\s*"([^"]*)"/);if(O){let A=`${H}; ${O[1]}`,V=K.replace(/style\s*=\s*"[^"]*"/,`style="${A}"`),E=U.replace(/style\s*=\s*"[^"]*"/,`style="${A}"`);return`${W}${V}class="${_}"${E}${F}`}return`${W}${K}class="${_}" style="${H}"${U}${F}`})}catch{return $}}function xQ($){let X=new Map,Z=/\.([a-zA-Z0-9_-]+(?:\\:[a-zA-Z0-9_-]+)*)\s*\{([^}]+)\}/g,Q=Z.exec($);while(Q!==null){let Y=Q[1].replace(/\\/g,""),J=Q[2].split(";").map((G)=>G.trim()).filter(Boolean).join("; ");if(J)X.set(Y,J);Q=Z.exec($)}return X}function SQ($,X){let Z=X.replace(/<[^>]*>/g,"").replace(/\s+/g," ").trim(),Q=$.replace(/&/g,"&").trim();if(!Q||Q.startsWith("#")||/^javascript:/i.test(Q))return Z;let Y=Q.replace(/^mailto:/i,"").replace(/^https?:\/\//i,"").replace(/\/$/,"");if(!Z)return Q.replace(/^mailto:/i,"");if(Z.replace(/^https?:\/\//i,"").replace(/\/$/,"")===Y)return Z;return`${Z} (${Q.replace(/^mailto:/i,"")})`}function PQ($){return $.replace(/<head\b[\s\S]*?<\/head>/gi,"").replace(/<(style|script)\b[\s\S]*?<\/\1>/gi,"").replace(/<(div|span|p)\b[^>]*\bstyle="[^"]*display:\s*none[^"]*"[^>]*>[\s\S]*?<\/\1>/gi,"").replace(/<a\b[^>]*?\bhref\s*=\s*(?:"([^"]*)"|'([^']*)')[^>]*>([\s\S]*?)<\/a>/gi,(X,Z,Q,Y)=>SQ(Z??Q??"",Y)).replace(/<br\s*\/?>/gi,`
|
|
4319
4319
|
`).replace(/<\/(p|div|h[1-6]|li|tr)>/gi,`
|
|
4320
4320
|
`).replace(/<\/td>/gi,"\t").replace(/<[^>]*>/g,"").replace(/ /g," ").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/©/g,"(c)").replace(/·/g,"-").replace(/\n\s*\n\s*\n/g,`
|
|
4321
4321
|
|
|
4322
|
-
`).trim()}function
|
|
4322
|
+
`).trim()}function bQ($){return $.replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function yQ($){let X={};for(let Z of Object.keys($))if(!Z.startsWith("__"))X[Z]=$[Z];return X}function J9($){let{template:X,context:Z={},title:Q="stx App"}=$,Y=yQ(Z),J=bQ(JSON.stringify(Y));return`<!DOCTYPE html>
|
|
4323
4323
|
<html lang="en">
|
|
4324
4324
|
<head>
|
|
4325
4325
|
<meta charset="UTF-8">
|
|
@@ -4339,8 +4339,8 @@ File changed: ${Y}, rebuilding...`);let J=await TQ($);X?.(J)}});return{close:()=
|
|
|
4339
4339
|
}
|
|
4340
4340
|
</script>
|
|
4341
4341
|
</body>
|
|
4342
|
-
</html>`}var A1=Symbol.for("stx.Fragment"),bQ=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),C7=new Set(["allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"]),k7={className:"class",htmlFor:"for",tabIndex:"tabindex",autoFocus:"autofocus",autoPlay:"autoplay",crossOrigin:"crossorigin",dateTime:"datetime",encType:"enctype",formAction:"formaction",formEncType:"formenctype",formMethod:"formmethod",formNoValidate:"formnovalidate",formTarget:"formtarget",frameBorder:"frameborder",hrefLang:"hreflang",httpEquiv:"http-equiv",inputMode:"inputmode",maxLength:"maxlength",mediaGroup:"mediagroup",minLength:"minlength",noModule:"nomodule",noValidate:"novalidate",playsInline:"playsinline",readOnly:"readonly",rowSpan:"rowspan",colSpan:"colspan",srcDoc:"srcdoc",srcLang:"srclang",srcSet:"srcset",useMap:"usemap"};function yQ($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function v5($){return $.replace(/&/g,"&").replace(/"/g,""")}function x7($){if($==null||typeof $==="boolean")return[];if(!Array.isArray($))return[T7($)];return $.flat(1/0).map(T7).filter((X)=>X!=="")}function T7($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return $;if(typeof $==="number")return String($);return $}function q1($,X,Z){let{children:Q,ref:Y,key:J,...G}=X||{};return{type:$,props:Object.keys(G).length>0?G:null,children:x7(Q),key:Z??J??void 0,ref:Y??void 0}}var vQ=q1,gQ=q1;function S7($){return Object.entries($).filter(([,X])=>X!=null&&X!==!1).map(([X,Z])=>{let Q=X.replace(/[A-Z]/g,(J)=>`-${J.toLowerCase()}`),Y=typeof Z==="number"&&!Q.startsWith("--")&&Q!=="opacity"&&Q!=="z-index"&&Q!=="flex-grow"&&Q!=="flex-shrink"&&Q!=="order"&&Q!=="font-weight"&&Q!=="line-height"?`${Z}px`:String(Z);return`${Q}: ${Y}`}).join("; ")}function g5($){if(typeof $==="string")return $;if(Array.isArray($))return $.filter(Boolean).map(g5).join(" ");if(typeof $==="object"&&$!==null)return Object.entries($).filter(([,X])=>X).map(([X])=>X).join(" ");return""}function fQ($){if(!$)return"";let X=[];for(let[Z,Q]of Object.entries($)){if(Z==="key"||Z==="ref"||Z==="children"||Z==="innerHTML"||Z==="dangerouslySetInnerHTML")continue;if(Z.startsWith("on")&&typeof Q==="function")continue;let Y=k7[Z]||Z;if(Y==="class"||Y==="className"){let J=g5(Q);if(J)X.push(` class="${v5(J)}"`);continue}if(Y==="style"){let J=typeof Q==="string"?Q:S7(Q);if(J)X.push(` style="${v5(J)}"`);continue}if(C7.has(Y)){if(Q)X.push(` ${Y}`);continue}if(Q!=null&&Q!==!1)X.push(` ${Y}="${v5(String(Q))}"`)}return X.join("")}function O1($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return yQ($);if(typeof $==="number")return String($);if(Array.isArray($))return $.map(O1).join("");if($.type===A1)return $.children.map(O1).join("");if(typeof $.type==="function"){let J=$.type({...$.props,children:$.children.length===1?$.children[0]:$.children.length>0?$.children:void 0});return O1(J)}let X=$.type,Z=fQ($.props),Q=$.props?.innerHTML??$.props?.dangerouslySetInnerHTML?.__html;if(Q!=null)return`<${X}${Z}>${Q}</${X}>`;if(bQ.has(X))return`<${X}${Z}>`;let Y=$.children.map(O1).join("");return`<${X}${Z}>${Y}</${X}>`}function hQ($){return new ReadableStream({start(X){X.enqueue(O1($)),X.close()}})}function dQ($,X){if(!X)return;for(let[Z,Q]of Object.entries(X)){if(Z==="key"||Z==="ref"||Z==="children"||Z==="innerHTML"||Z==="dangerouslySetInnerHTML")continue;let Y=k7[Z]||Z;if(Z.startsWith("on")&&typeof Q==="function"){let J=Z.slice(2).toLowerCase();$.addEventListener(J,Q);continue}if(Y==="class"||Y==="className"){let J=g5(Q);if(J)$.setAttribute("class",J);continue}if(Y==="style"){let J=typeof Q==="string"?Q:S7(Q);if(J)$.setAttribute("style",J);continue}if(C7.has(Y)){if(Q)$.setAttribute(Y,"");continue}if(Q!=null&&Q!==!1)$.setAttribute(Y,String(Q))}}function p1($,X){if($==null||typeof $==="boolean")return;if(typeof $==="string"){X.appendChild(document.createTextNode($));return}if(typeof $==="number"){X.appendChild(document.createTextNode(String($)));return}if(Array.isArray($)){for(let Y of $)p1(Y,X);return}if($.type===A1){for(let Y of $.children)p1(Y,X);return}if(typeof $.type==="function"){let Y=$.type({...$.props,children:$.children.length===1?$.children[0]:$.children.length>0?$.children:void 0});p1(Y,X);return}let Z=document.createElement($.type);dQ(Z,$.props);let Q=$.props?.innerHTML??$.props?.dangerouslySetInnerHTML?.__html;if(Q!=null)Z.innerHTML=Q;else for(let Y of $.children)p1(Y,Z);if($.ref){if(typeof $.ref==="function")$.ref(Z)}X.appendChild(Z)}function uQ($){if($.when)return q1(A1,{children:$.children});return $.fallback??null}function mQ($){let X=$.each;if(!X||X.length===0)return $.fallback??null;let Z=Array.isArray($.children)?$.children[0]:$.children,Q=X.map((Y,J)=>Z(Y,J));return q1(A1,{children:Q})}function pQ($){return q1(A1,{children:$.children})}function cQ($,X,...Z){let{key:Q,ref:Y,...J}=X||{};return{type:$,props:Object.keys(J).length>0?J:{},children:x7(Z.length===1?Z[0]:Z),key:Q??void 0,ref:Y??void 0}}function P7($,X){let Z=new Set,Q=new Map,Y=new Map,J={globalProperties:{},performance:!1,compilerOptions:{}},G={config:J,_components:Q,_directives:Y,_installedPlugins:Z,use(W,...K){if(Z.has(W))return G;if(Z.add(W),typeof W==="function")W(G,...K);else if(typeof W.install==="function")W.install(G,...K);return G},provide(W,K){return f5(W,K),G},component(W,K){if(!K)return Q.get(W);return Q.set(W,K),G},directive(W,K){if(!K)return Y.get(W);return Y.set(W,K),G},mount(W){if(typeof document<"u"){let K=globalThis.__stx_globals||(globalThis.__stx_globals={});Object.assign(K,J.globalProperties),document.querySelectorAll("[v-cloak]").forEach((_)=>{_.removeAttribute("v-cloak")})}return G},unmount(){Q.clear(),Y.clear(),Z.clear()}};return G}function lQ($){return class extends HTMLElement{_component;_shadow;constructor(){super();this._shadow=this.attachShadow({mode:"open"}),this._component=$}connectedCallback(){if(this._component?.render){let X=this._component.render();if(typeof X==="string")this._shadow.innerHTML=X}else if(this._component?.template)this._shadow.innerHTML=this._component.template;else if(typeof this._component==="string")this._shadow.innerHTML=this._component}disconnectedCallback(){this._shadow.innerHTML=""}}}function iQ($,...X){let Z=X[0]??{},Q=new Set,Y=String($).replace(/(\/)?:([^/?*]+)([?*])?/g,(W,K,_,U)=>{let F=Z[_];if(Q.add(_),F===void 0||F===null||F===""){if(U==="?")return"";return W}let z=Array.isArray(F)?F.map((j)=>encodeURIComponent(String(j))).join("/"):U==="*"?String(F).split("/").map((j)=>encodeURIComponent(j)).join("/"):encodeURIComponent(String(F));return`${K??""}${z}`}),J=Object.keys(Z).filter((W)=>!Q.has(W));if(J.length===0)return Y;let G=new URLSearchParams;for(let W of J){let K=Z[W];if(Array.isArray(K))K.forEach((_)=>G.append(W,String(_)));else if(K!==void 0&&K!==null)G.set(W,String(K))}return`${Y}?${G.toString()}`}import N1 from"fs";import l0 from"path";function b7($){try{return N1.statSync($).mtimeMs}catch{return null}}function C$($,X){let Z=Math.max(0,Math.round((X-$)/1000));if(Z<60)return`${Z}s ago`;if(Z<3600)return`${Math.round(Z/60)}m ago`;return`${Math.round(Z/3600)}h ago`}function aQ($,X){try{return globalThis.Bun?.resolveSync($,X)??null}catch{return null}}function y7($,X="stx"){let Z=l0.resolve($);for(let Q=0;Q<10;Q++){let Y=l0.join(Z,"pantry","@stacksjs",X);if(N1.existsSync(Y))return Y;let J=l0.dirname(Z);if(J===Z)break;Z=J}return null}async function rQ($={}){let X=$.cwd?l0.resolve($.cwd):process.cwd(),Z=$.resolve??aQ,Q=Date.now(),Y=[],J=Z("@stacksjs/stx",X);Y.push(J?{name:"@stacksjs/stx resolves to",status:"ok",detail:J}:{name:"@stacksjs/stx resolves to",status:"info",detail:"not resolvable from here (running inside the stx repo, or not installed)"});let G=Z("bun-plugin-stx",X);if(G)Y.push({name:"bun-plugin-stx resolves to",status:"ok",detail:G});let W=y7(X,"stx");if(!W)Y.push({name:"pantry",status:"info",detail:"no pantry/@stacksjs/stx found \u2014 standard install (nothing to rebuild)"});else{let K=l0.join(W,"src/signals.ts"),_=[l0.join(W,"dist/index.js"),l0.join(W,"dist/signals.js")].find((H)=>N1.existsSync(H))||null,U=b7(K),F=_?b7(_):null;if(U==null)Y.push({name:"pantry dist freshness",status:"info",detail:`found pantry at ${W} but no src/signals.ts to compare`});else if(F==null)Y.push({name:"pantry dist freshness",status:"error",detail:"pantry has src but no built dist \u2014 the dev server will resolve nothing (or a stale copy elsewhere)",fix:`cd ${W} && bun build.ts`});else if(F<U){let H=Math.round((U-F)/1000);Y.push({name:"pantry dist freshness",status:"error",detail:`dist (${C$(F,Q)}) is OLDER than src/signals.ts (${C$(U,Q)}) by ${H}s \u2014 your edit isn't built`,fix:`cd ${W} && bun build.ts`})}else Y.push({name:"pantry dist freshness",status:"ok",detail:`dist rebuilt after src (src ${C$(U,Q)}, dist ${C$(F,Q)})`});let z=l0.join(X,"node_modules/@stacksjs/stx"),j=null;try{j=N1.lstatSync(z)}catch{j=null}if(!j)Y.push({name:"node_modules \u2192 pantry",status:"info",detail:"node_modules/@stacksjs/stx not present (not installed here)"});else if(j.isSymbolicLink()){let H=null;try{H=N1.realpathSync(z)}catch{}let L=(()=>{try{return N1.realpathSync(W)}catch{return W}})();Y.push(H===L?{name:"node_modules \u2192 pantry",status:"ok",detail:"symlinked to pantry"}:{name:"node_modules \u2192 pantry",status:"warn",detail:`symlinked to ${H||"(dangling)"}, not pantry`})}else Y.push({name:"node_modules \u2192 pantry",status:"warn",detail:"is a real directory, NOT symlinked to pantry \u2014 edits to pantry src/dist won't be resolved",fix:"rm -rf node_modules/@stacksjs/stx && ln -s ../../pantry/@stacksjs/stx node_modules/@stacksjs/stx"})}if(Y.push({name:"dev runtime cache",status:"info",detail:"cleared automatically on source edits by the dev watcher (clearDevCaches, #1745 item C)"}),$.generateRuntime)try{let _=$.generateRuntime().length;Y.push(_>1000?{name:"signals runtime",status:"ok",detail:`generated ${_.toLocaleString()} chars`}:{name:"signals runtime",status:"warn",detail:`generated only ${_} chars \u2014 suspiciously short`})}catch(K){Y.push({name:"signals runtime",status:"error",detail:`failed to generate: ${K.message}`})}return{checks:Y,ok:!Y.some((K)=>K.status==="error")}}function sQ($){let X={ok:"\u2713",warn:"\u26A0",error:"\u2717",info:"\xB7"},Z=["stx runtime resolution:"];for(let Q of $.checks)if(Z.push(` ${X[Q.status]} ${Q.name}: ${Q.detail}`),Q.fix)Z.push(` \u2192 ${Q.fix}`);return Z.push(""),Z.push($.ok?"\u2713 All framework-runtime layers are aligned.":"\u2717 A runtime layer is stale \u2014 see the fixes above."),Z.join(`
|
|
4343
|
-
`)}var{Glob:
|
|
4342
|
+
</html>`}var A1=Symbol.for("stx.Fragment"),vQ=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),k7=new Set(["allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"]),x7={className:"class",htmlFor:"for",tabIndex:"tabindex",autoFocus:"autofocus",autoPlay:"autoplay",crossOrigin:"crossorigin",dateTime:"datetime",encType:"enctype",formAction:"formaction",formEncType:"formenctype",formMethod:"formmethod",formNoValidate:"formnovalidate",formTarget:"formtarget",frameBorder:"frameborder",hrefLang:"hreflang",httpEquiv:"http-equiv",inputMode:"inputmode",maxLength:"maxlength",mediaGroup:"mediagroup",minLength:"minlength",noModule:"nomodule",noValidate:"novalidate",playsInline:"playsinline",readOnly:"readonly",rowSpan:"rowspan",colSpan:"colspan",srcDoc:"srcdoc",srcLang:"srclang",srcSet:"srcset",useMap:"usemap"};function gQ($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function v5($){return $.replace(/&/g,"&").replace(/"/g,""")}function S7($){if($==null||typeof $==="boolean")return[];if(!Array.isArray($))return[C7($)];return $.flat(1/0).map(C7).filter((X)=>X!=="")}function C7($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return $;if(typeof $==="number")return String($);return $}function q1($,X,Z){let{children:Q,ref:Y,key:J,...G}=X||{};return{type:$,props:Object.keys(G).length>0?G:null,children:S7(Q),key:Z??J??void 0,ref:Y??void 0}}var fQ=q1,hQ=q1;function P7($){return Object.entries($).filter(([,X])=>X!=null&&X!==!1).map(([X,Z])=>{let Q=X.replace(/[A-Z]/g,(J)=>`-${J.toLowerCase()}`),Y=typeof Z==="number"&&!Q.startsWith("--")&&Q!=="opacity"&&Q!=="z-index"&&Q!=="flex-grow"&&Q!=="flex-shrink"&&Q!=="order"&&Q!=="font-weight"&&Q!=="line-height"?`${Z}px`:String(Z);return`${Q}: ${Y}`}).join("; ")}function g5($){if(typeof $==="string")return $;if(Array.isArray($))return $.filter(Boolean).map(g5).join(" ");if(typeof $==="object"&&$!==null)return Object.entries($).filter(([,X])=>X).map(([X])=>X).join(" ");return""}function dQ($){if(!$)return"";let X=[];for(let[Z,Q]of Object.entries($)){if(Z==="key"||Z==="ref"||Z==="children"||Z==="innerHTML"||Z==="dangerouslySetInnerHTML")continue;if(Z.startsWith("on")&&typeof Q==="function")continue;let Y=x7[Z]||Z;if(Y==="class"||Y==="className"){let J=g5(Q);if(J)X.push(` class="${v5(J)}"`);continue}if(Y==="style"){let J=typeof Q==="string"?Q:P7(Q);if(J)X.push(` style="${v5(J)}"`);continue}if(k7.has(Y)){if(Q)X.push(` ${Y}`);continue}if(Q!=null&&Q!==!1)X.push(` ${Y}="${v5(String(Q))}"`)}return X.join("")}function O1($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return gQ($);if(typeof $==="number")return String($);if(Array.isArray($))return $.map(O1).join("");if($.type===A1)return $.children.map(O1).join("");if(typeof $.type==="function"){let J=$.type({...$.props,children:$.children.length===1?$.children[0]:$.children.length>0?$.children:void 0});return O1(J)}let X=$.type,Z=dQ($.props),Q=$.props?.innerHTML??$.props?.dangerouslySetInnerHTML?.__html;if(Q!=null)return`<${X}${Z}>${Q}</${X}>`;if(vQ.has(X))return`<${X}${Z}>`;let Y=$.children.map(O1).join("");return`<${X}${Z}>${Y}</${X}>`}function uQ($){return new ReadableStream({start(X){X.enqueue(O1($)),X.close()}})}function mQ($,X){if(!X)return;for(let[Z,Q]of Object.entries(X)){if(Z==="key"||Z==="ref"||Z==="children"||Z==="innerHTML"||Z==="dangerouslySetInnerHTML")continue;let Y=x7[Z]||Z;if(Z.startsWith("on")&&typeof Q==="function"){let J=Z.slice(2).toLowerCase();$.addEventListener(J,Q);continue}if(Y==="class"||Y==="className"){let J=g5(Q);if(J)$.setAttribute("class",J);continue}if(Y==="style"){let J=typeof Q==="string"?Q:P7(Q);if(J)$.setAttribute("style",J);continue}if(k7.has(Y)){if(Q)$.setAttribute(Y,"");continue}if(Q!=null&&Q!==!1)$.setAttribute(Y,String(Q))}}function p1($,X){if($==null||typeof $==="boolean")return;if(typeof $==="string"){X.appendChild(document.createTextNode($));return}if(typeof $==="number"){X.appendChild(document.createTextNode(String($)));return}if(Array.isArray($)){for(let Y of $)p1(Y,X);return}if($.type===A1){for(let Y of $.children)p1(Y,X);return}if(typeof $.type==="function"){let Y=$.type({...$.props,children:$.children.length===1?$.children[0]:$.children.length>0?$.children:void 0});p1(Y,X);return}let Z=document.createElement($.type);mQ(Z,$.props);let Q=$.props?.innerHTML??$.props?.dangerouslySetInnerHTML?.__html;if(Q!=null)Z.innerHTML=Q;else for(let Y of $.children)p1(Y,Z);if($.ref){if(typeof $.ref==="function")$.ref(Z)}X.appendChild(Z)}function pQ($){if($.when)return q1(A1,{children:$.children});return $.fallback??null}function cQ($){let X=$.each;if(!X||X.length===0)return $.fallback??null;let Z=Array.isArray($.children)?$.children[0]:$.children,Q=X.map((Y,J)=>Z(Y,J));return q1(A1,{children:Q})}function lQ($){return q1(A1,{children:$.children})}function iQ($,X,...Z){let{key:Q,ref:Y,...J}=X||{};return{type:$,props:Object.keys(J).length>0?J:{},children:S7(Z.length===1?Z[0]:Z),key:Q??void 0,ref:Y??void 0}}function b7($,X){let Z=new Set,Q=new Map,Y=new Map,J={globalProperties:{},performance:!1,compilerOptions:{}},G={config:J,_components:Q,_directives:Y,_installedPlugins:Z,use(W,...K){if(Z.has(W))return G;if(Z.add(W),typeof W==="function")W(G,...K);else if(typeof W.install==="function")W.install(G,...K);return G},provide(W,K){return f5(W,K),G},component(W,K){if(!K)return Q.get(W);return Q.set(W,K),G},directive(W,K){if(!K)return Y.get(W);return Y.set(W,K),G},mount(W){if(typeof document<"u"){let K=globalThis.__stx_globals||(globalThis.__stx_globals={});Object.assign(K,J.globalProperties),document.querySelectorAll("[v-cloak]").forEach((_)=>{_.removeAttribute("v-cloak")})}return G},unmount(){Q.clear(),Y.clear(),Z.clear()}};return G}function aQ($){return class extends HTMLElement{_component;_shadow;constructor(){super();this._shadow=this.attachShadow({mode:"open"}),this._component=$}connectedCallback(){if(this._component?.render){let X=this._component.render();if(typeof X==="string")this._shadow.innerHTML=X}else if(this._component?.template)this._shadow.innerHTML=this._component.template;else if(typeof this._component==="string")this._shadow.innerHTML=this._component}disconnectedCallback(){this._shadow.innerHTML=""}}}function rQ($,...X){let Z=X[0]??{},Q=new Set,Y=String($).replace(/(\/)?:([^/?*]+)([?*])?/g,(W,K,_,U)=>{let F=Z[_];if(Q.add(_),F===void 0||F===null||F===""){if(U==="?")return"";return W}let z=Array.isArray(F)?F.map((j)=>encodeURIComponent(String(j))).join("/"):U==="*"?String(F).split("/").map((j)=>encodeURIComponent(j)).join("/"):encodeURIComponent(String(F));return`${K??""}${z}`}),J=Object.keys(Z).filter((W)=>!Q.has(W));if(J.length===0)return Y;let G=new URLSearchParams;for(let W of J){let K=Z[W];if(Array.isArray(K))K.forEach((_)=>G.append(W,String(_)));else if(K!==void 0&&K!==null)G.set(W,String(K))}return`${Y}?${G.toString()}`}import N1 from"fs";import l0 from"path";function y7($){try{return N1.statSync($).mtimeMs}catch{return null}}function C$($,X){let Z=Math.max(0,Math.round((X-$)/1000));if(Z<60)return`${Z}s ago`;if(Z<3600)return`${Math.round(Z/60)}m ago`;return`${Math.round(Z/3600)}h ago`}function sQ($,X){try{return globalThis.Bun?.resolveSync($,X)??null}catch{return null}}function v7($,X="stx"){let Z=l0.resolve($);for(let Q=0;Q<10;Q++){let Y=l0.join(Z,"pantry","@stacksjs",X);if(N1.existsSync(Y))return Y;let J=l0.dirname(Z);if(J===Z)break;Z=J}return null}async function nQ($={}){let X=$.cwd?l0.resolve($.cwd):process.cwd(),Z=$.resolve??sQ,Q=Date.now(),Y=[],J=Z("@stacksjs/stx",X);Y.push(J?{name:"@stacksjs/stx resolves to",status:"ok",detail:J}:{name:"@stacksjs/stx resolves to",status:"info",detail:"not resolvable from here (running inside the stx repo, or not installed)"});let G=Z("bun-plugin-stx",X);if(G)Y.push({name:"bun-plugin-stx resolves to",status:"ok",detail:G});let W=v7(X,"stx");if(!W)Y.push({name:"pantry",status:"info",detail:"no pantry/@stacksjs/stx found \u2014 standard install (nothing to rebuild)"});else{let K=l0.join(W,"src/signals.ts"),_=[l0.join(W,"dist/index.js"),l0.join(W,"dist/signals.js")].find((H)=>N1.existsSync(H))||null,U=y7(K),F=_?y7(_):null;if(U==null)Y.push({name:"pantry dist freshness",status:"info",detail:`found pantry at ${W} but no src/signals.ts to compare`});else if(F==null)Y.push({name:"pantry dist freshness",status:"error",detail:"pantry has src but no built dist \u2014 the dev server will resolve nothing (or a stale copy elsewhere)",fix:`cd ${W} && bun build.ts`});else if(F<U){let H=Math.round((U-F)/1000);Y.push({name:"pantry dist freshness",status:"error",detail:`dist (${C$(F,Q)}) is OLDER than src/signals.ts (${C$(U,Q)}) by ${H}s \u2014 your edit isn't built`,fix:`cd ${W} && bun build.ts`})}else Y.push({name:"pantry dist freshness",status:"ok",detail:`dist rebuilt after src (src ${C$(U,Q)}, dist ${C$(F,Q)})`});let z=l0.join(X,"node_modules/@stacksjs/stx"),j=null;try{j=N1.lstatSync(z)}catch{j=null}if(!j)Y.push({name:"node_modules \u2192 pantry",status:"info",detail:"node_modules/@stacksjs/stx not present (not installed here)"});else if(j.isSymbolicLink()){let H=null;try{H=N1.realpathSync(z)}catch{}let L=(()=>{try{return N1.realpathSync(W)}catch{return W}})();Y.push(H===L?{name:"node_modules \u2192 pantry",status:"ok",detail:"symlinked to pantry"}:{name:"node_modules \u2192 pantry",status:"warn",detail:`symlinked to ${H||"(dangling)"}, not pantry`})}else Y.push({name:"node_modules \u2192 pantry",status:"warn",detail:"is a real directory, NOT symlinked to pantry \u2014 edits to pantry src/dist won't be resolved",fix:"rm -rf node_modules/@stacksjs/stx && ln -s ../../pantry/@stacksjs/stx node_modules/@stacksjs/stx"})}if(Y.push({name:"dev runtime cache",status:"info",detail:"cleared automatically on source edits by the dev watcher (clearDevCaches, #1745 item C)"}),$.generateRuntime)try{let _=$.generateRuntime().length;Y.push(_>1000?{name:"signals runtime",status:"ok",detail:`generated ${_.toLocaleString()} chars`}:{name:"signals runtime",status:"warn",detail:`generated only ${_} chars \u2014 suspiciously short`})}catch(K){Y.push({name:"signals runtime",status:"error",detail:`failed to generate: ${K.message}`})}return{checks:Y,ok:!Y.some((K)=>K.status==="error")}}function oQ($){let X={ok:"\u2713",warn:"\u26A0",error:"\u2717",info:"\xB7"},Z=["stx runtime resolution:"];for(let Q of $.checks)if(Z.push(` ${X[Q.status]} ${Q.name}: ${Q.detail}`),Q.fix)Z.push(` \u2192 ${Q.fix}`);return Z.push(""),Z.push($.ok?"\u2713 All framework-runtime layers are aligned.":"\u2717 A runtime layer is stale \u2014 see the fixes above."),Z.join(`
|
|
4343
|
+
`)}var{Glob:jY}=globalThis.Bun;import{cpSync as a7,existsSync as m$,mkdirSync as r7,readFileSync as s7,readdirSync as HY,rmSync as OY,statSync as AY,unlinkSync as qY,writeFileSync as d$}from"fs";import{dirname as NY,join as x0,relative as MY}from"path";import n7 from"process";import i0 from"path";function f7($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function h7($,X,Z){let Q=f7(X),Y=Z?f7(Z):"";return`<!DOCTYPE html>
|
|
4344
4344
|
<html>
|
|
4345
4345
|
<head>
|
|
4346
4346
|
<title>stx Error</title>
|
|
@@ -4356,53 +4356,53 @@ File changed: ${Y}, rebuilding...`);let J=await TQ($);X?.(J)}});return{close:()=
|
|
|
4356
4356
|
${Y?`<div class="file-path">File: ${Y}</div>`:""}
|
|
4357
4357
|
<pre>${Q}</pre>
|
|
4358
4358
|
</body>
|
|
4359
|
-
</html>`}function
|
|
4359
|
+
</html>`}function g7($){return{name:"bun-plugin-stx",async setup(X){let Z={};try{Z=await s0(process.cwd())}catch{}let Q={...T$,...Z,...$},Y=new Set;if(!X.config.root&&X.config.entrypoints?.length){let K=X.config.entrypoints.map((_)=>i0.dirname(i0.resolve(_))).reduce((_,U)=>{let F=_.split(i0.sep),z=U.split(i0.sep),j=0;while(j<F.length&&j<z.length&&F[j]===z[j])j++;return F.slice(0,j).join(i0.sep)});X.config.root=K}let J=Q.webComponents?.enabled?`./${i0.relative(i0.dirname(X.config?.outdir||"dist"),Q.webComponents.outputDir||"dist/web-components")}`:"/web-components",G=[];if(Q.webComponents?.enabled)try{let W=await U$(Q,Y);if(G.push(...W),Q.debug&&W.length>0)console.log(`Successfully built ${W.length} web components`)}catch(W){console.error("Failed to build web components:",W)}X.onResolve({filter:/^\//},(W)=>{if(W.path.startsWith("//"))return null;if(!W.importer)return null;return{external:!0,path:W.path}}),X.onLoad({filter:/\.md$/},async(W)=>{let K=W.path;try{let{content:_,data:U}=await T0(K,Q);return{contents:`// ${K}
|
|
4360
4360
|
const content = ${JSON.stringify(_)};
|
|
4361
4361
|
const data = ${JSON.stringify(U)};
|
|
4362
4362
|
|
|
4363
4363
|
export { content, data };
|
|
4364
4364
|
export { content as default };
|
|
4365
|
-
`,loader:"js"}}catch(_){console.error("Markdown Processing Error:",_);let U=
|
|
4365
|
+
`,loader:"js"}}catch(_){console.error("Markdown Processing Error:",_);let U=h7("Markdown Processing Error",_.message||"Unknown error",K);return{contents:`// ${K}
|
|
4366
4366
|
const content = ${JSON.stringify(U)};
|
|
4367
4367
|
const data = {};
|
|
4368
4368
|
|
|
4369
4369
|
export { content, data };
|
|
4370
4370
|
export { content as default };
|
|
4371
|
-
`,loader:"js"}}}),X.onLoad({filter:/\.(jsx|tsx)$/},async(W)=>{let K=W.path;try{let _=await Bun.file(K).text(),U=K.endsWith(".tsx")?"tsx":"jsx";return{contents:new Bun.Transpiler({loader:U,jsxOptimizationInline:!0}).transformSync(_),loader:"js"}}catch(_){return console.error("JSX Processing Error:",_),{contents:"export default function() { return null; }",loader:"js"}}}),X.onLoad({filter:/\.stx$/},async({path:W})=>{try{let K=new Set;if(Q.cache&&Q.cachePath){let V=await K$(W,Q);if(V){if(Q.debug)console.log(`Using cached version of ${W}`);return{contents:V,loader:"html"}}}let _=await Bun.file(W).text(),U=_,F=_.match(/<template\b[^>]*>([\s\S]*?)<\/template>/i);if(F)U=F[1].trim();let z=
|
|
4371
|
+
`,loader:"js"}}}),X.onLoad({filter:/\.(jsx|tsx)$/},async(W)=>{let K=W.path;try{let _=await Bun.file(K).text(),U=K.endsWith(".tsx")?"tsx":"jsx";return{contents:new Bun.Transpiler({loader:U,jsxOptimizationInline:!0}).transformSync(_),loader:"js"}}catch(_){return console.error("JSX Processing Error:",_),{contents:"export default function() { return null; }",loader:"js"}}}),X.onLoad({filter:/\.stx$/},async({path:W})=>{try{let K=new Set;if(Q.cache&&Q.cachePath){let V=await K$(W,Q);if(V){if(Q.debug)console.log(`Using cached version of ${W}`);return{contents:V,loader:"html"}}}let _=await Bun.file(W).text(),U=_,F=_.match(/<template\b[^>]*>([\s\S]*?)<\/template>/i);if(F)U=F[1].trim();let z=u7(_),j=z.client.map((V)=>V.fullTag),H=z.server.map((V)=>V.content),L=U;for(let V of H){let E=V.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");L=L.replace(new RegExp(`<script\\b[^>]*>${E}<\\/script>`,"gi"),"")}for(let V of j){let E=V.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");L=L.replace(E,"")}let O={__filename:W,__dirname:i0.dirname(W),__stx:{webComponentsPath:J,builtComponents:G},__stx_options:Q,__stx_sfc_mode:!0};for(let V of H)await M0(V,O,W);let A=L;if(A=await V0(A,O,W,Q,K),j.length>0){let V=O.__stx_event_bindings||[],q=(await Promise.all(j.map(async(I)=>{let M=I.match(/<script\b[^>]*>([\s\S]*?)<\/script>/);if(!M)return I;return d7(M[1],{eventBindings:V,templateContent:A})}))).join(`
|
|
4372
4372
|
`);if(A.match(/(<\/body>)/i))A=A.replace(/(<\/body>)/i,`${q}
|
|
4373
4373
|
$1`);else A+=`
|
|
4374
|
-
${q}`;O.__stx_event_bindings=[]}if(K.forEach((V)=>Y.add(V)),Q.cache&&Q.cachePath){if(await _$(W,A,K,Q),Q.debug)console.log(`Cached template ${W} with ${K.size} dependencies`)}return{contents:A,loader:"html"}}catch(K){return console.error("stx Plugin Error:",K),{contents:
|
|
4374
|
+
${q}`;O.__stx_event_bindings=[]}if(K.forEach((V)=>Y.add(V)),Q.cache&&Q.cachePath){if(await _$(W,A,K,Q),Q.debug)console.log(`Cached template ${W} with ${K.size} dependencies`)}return{contents:A,loader:"html"}}catch(K){return console.error("stx Plugin Error:",K),{contents:h7("stx Rendering Error",K.message||String(K),W),loader:"html"}}})}}}var m7=g7;function tQ($,X){if(!$)return $;if(/^[a-z][a-z0-9+.-]*:/i.test($)||$.startsWith("//"))return $;return`${X}${$.startsWith("/")?"":"/"}${$}`}function k$($,X,Z={},Q="/"){let Y=X.seo??{},J=Z.title??Y.title??X.name,G=Z.description??Y.description??X.description??"",W=X.url.replace(/\/$/,""),K=`${W}${Q}`,_=tQ(Z.image??Y.image,W),U=Y.siteName??X.name,F=Y.type??"website",z=Y.locale??"en_US",j=[];if(Y.favicon){let T=Y.favicon.toLowerCase().split(".").pop(),f=T==="svg"?"image/svg+xml":T==="ico"?"image/x-icon":T==="png"?"image/png":T==="jpg"||T==="jpeg"?"image/jpeg":"";j.push(`<link rel="icon"${f?` type="${f}"`:""} href="${L0(Y.favicon)}">`)}if(j.push(`<title>${eQ(J)}</title>`,`<link rel="canonical" href="${L0(K)}">`,`<meta name="description" content="${L0(G)}">`,`<meta property="og:title" content="${L0(J)}">`,`<meta property="og:description" content="${L0(G)}">`,`<meta property="og:type" content="${L0(F)}">`,`<meta property="og:url" content="${L0(K)}">`,`<meta property="og:site_name" content="${L0(U)}">`,`<meta property="og:locale" content="${L0(z)}">`,`<meta name="twitter:card" content="${_?"summary_large_image":"summary"}">`,`<meta name="twitter:title" content="${L0(J)}">`,`<meta name="twitter:description" content="${L0(G)}">`),_)j.push(`<meta property="og:image" content="${L0(_)}">`),j.push(`<meta name="twitter:image" content="${L0(_)}">`);if(Y.twitter)j.push(`<meta name="twitter:site" content="@${L0(Y.twitter.replace(/^@/,""))}">`),j.push(`<meta name="twitter:creator" content="@${L0(Y.twitter.replace(/^@/,""))}">`);let H=/<!--\s*stx SEO Tags\s*-->[\s\S]*?<meta\s+name="twitter:description"[^>]*>\s*/i;if(H.test($))$=$.replace(H,"");$=$.replace(/<!--\s*SEO\s*-->[\s\S]*?<!--\s*\/SEO\s*-->\s*/g,""),$=$.replace(/<meta\s+name="title"\s+content="stx Project"[^>]*>\s*/g,"").replace(/<meta\s+name="description"\s+content="A website built with stx[^"]*"[^>]*>\s*/g,"").replace(/<meta\s+property="og:title"\s+content="stx Project"[^>]*>\s*/g,"").replace(/<meta\s+property="og:description"\s+content="A website built with stx[^"]*"[^>]*>\s*/g,"").replace(/<meta\s+name="twitter:title"\s+content="stx Project"[^>]*>\s*/g,"").replace(/<meta\s+name="twitter:description"\s+content="A website built with stx[^"]*"[^>]*>\s*/g,"");let L=$.search(/<\/head>/i),O=L===-1?$:$.slice(0,L),A=/^(?:stx App|stx Project|Document|Untitled)$/i,V=/<title[^>]*>([\s\S]*?)<\/title>/i.exec(O)?.[1]?.trim(),E=V===void 0||V===""||A.test(V),q=(T)=>{if(/^<title[\s>]/i.test(T))return/<title[\s>]/i.test(O)&&!E;if(/rel="canonical"/i.test(T))return/<link[^>]+rel=["']canonical["']/i.test(O);let v=/(?:property|name)="([^"]+)"/i.exec(T)?.[1];if(!v)return!1;return new RegExp(`<meta[^>]+(?:property|name)=["']${v.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}["']`,"i").test(O)},N=j.filter((T)=>!q(T));if(N.length===0)return $;let I=$,M=N.find((T)=>/^<title[\s>]/i.test(T));if(M&&E&&/<title[^>]*>[\s\S]*?<\/title>/i.test(I)){if(I=I.replace(/<title[^>]*>[\s\S]*?<\/title>/i,()=>M),N=N.filter((T)=>T!==M),N.length===0)return I}let w=`<!-- SEO -->
|
|
4375
4375
|
${N.join(`
|
|
4376
4376
|
`)}
|
|
4377
4377
|
<!-- /SEO -->`,D=I.search(/<\/head>/i);if(D!==-1)return`${I.slice(0,D)}${w}
|
|
4378
4378
|
${I.slice(D)}`;if(/<head[^>]*>/i.test(I))return I.replace(/<head([^>]*)>/i,`<head$1>
|
|
4379
4379
|
${w}`);return`${w}
|
|
4380
|
-
${I}`}function L0($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function
|
|
4380
|
+
${I}`}function L0($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function eQ($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function x$($,X){let Z=$.url.replace(/\/$/,""),Q=new Date().toISOString().slice(0,10);return['<?xml version="1.0" encoding="UTF-8"?>','<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',X.filter((J)=>J.page?.sitemap!==!1).map((J)=>{let G=`${Z}${J.path}`,W=J.page?.priority??(J.path==="/"?1:0.8),K=J.page?.changefreq??"monthly";return[" <url>",` <loc>${$Y(G)}</loc>`,` <lastmod>${Q}</lastmod>`,` <changefreq>${K}</changefreq>`,` <priority>${W.toFixed(1)}</priority>`," </url>"].join(`
|
|
4381
4381
|
`)}).join(`
|
|
4382
4382
|
`),"</urlset>",""].join(`
|
|
4383
|
-
`)}function
|
|
4383
|
+
`)}function $Y($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function S$($){let X=$.robots??"allow";if(X===!1)return null;if(typeof X==="string"&&X!=="allow"&&X!=="disallow")return X.endsWith(`
|
|
4384
4384
|
`)?X:`${X}
|
|
4385
4385
|
`;let Z=$.sitemap!==!1?`Sitemap: ${$.url.replace(/\/$/,"")}/sitemap.xml
|
|
4386
4386
|
`:"";if(X==="disallow")return["User-agent: *","Disallow: /","",Z].filter(Boolean).join(`
|
|
4387
4387
|
`);return["User-agent: *","Allow: /","",Z].filter(Boolean).join(`
|
|
4388
|
-
`)}var M1=null;async function
|
|
4388
|
+
`)}var M1=null;async function XY(){if(M1!==null)return M1;try{let $=await import("./chunk-cqw3c1xg.js");if(typeof $.getRouterScript==="function")M1=$.getRouterScript();else M1=""}catch{M1=""}return M1}async function h5($,X){let Z=await XY();if(!Z)return $;let Q={interceptAllLinks:!0,container:"main",...X},J=`${`<script>window.__stxRouterConfig=${JSON.stringify(Q)};</script>
|
|
4389
4389
|
`}<script>${Z}</script>`;if(/<\/body>/i.test($))return $.replace(/<\/body>/i,`${J}
|
|
4390
4390
|
</body>`);return`${$}
|
|
4391
|
-
${J}`}var
|
|
4391
|
+
${J}`}var ZY=`window.__stxThemeIcon=function(isDark){try{var want=isDark?'dark':'light';var pick=document.querySelector('link[rel~="icon"][media*="prefers-color-scheme: '+want+'"]');if(!pick)return;var live=document.querySelector('link[rel~="icon"]:not([media])');if(!live){live=document.createElement('link');live.setAttribute('rel','icon');document.head.appendChild(live)}if(pick.type)live.setAttribute('type',pick.type);var href=pick.getAttribute('href');if(live.getAttribute('href')!==href)live.setAttribute('href',href)}catch(e){}};`,QY=($,X,Z,Q)=>`(function(){${ZY}function read(){try{var k=${JSON.stringify(X)};var t=localStorage.getItem(k);return t===null?(${JSON.stringify($)}==='dark'||(${JSON.stringify($)}==='auto'&&window.matchMedia('(prefers-color-scheme: dark)').matches)):t==='dark'}catch(e){return ${JSON.stringify($)}==='dark'}}function apply(){var isDark=read();var html=document.documentElement;html.classList[isDark?'add':'remove']('dark');var color=isDark?${JSON.stringify(Q)}:${JSON.stringify(Z)};if(!document.head)return;var tc=document.querySelector('meta[name="theme-color"]:not([media])');if(!tc){tc=document.createElement('meta');tc.setAttribute('name','theme-color');tc.setAttribute('data-stx-theme-meta','1')}tc.setAttribute('content',color);if(tc!==document.head.firstChild){document.head.insertBefore(tc,document.head.firstChild)}if(window.__stxThemeIcon)window.__stxThemeIcon(isDark)}apply();window.addEventListener('stx:navigate',apply);window.addEventListener('popstate',apply)})();`,YY=($,X,Z)=>`document.addEventListener('click',function(e){var t=e.target&&e.target.closest&&e.target.closest('#theme-toggle');if(!t)return;var html=document.documentElement;var isDark=html.classList.toggle('dark');try{localStorage.setItem(${JSON.stringify($)},isDark?'dark':'light')}catch(e){}var tc=document.querySelector('meta[name="theme-color"]:not([media])');if(tc)tc.setAttribute('content',isDark?${JSON.stringify(Z)}:${JSON.stringify(X)});if(window.__stxThemeIcon)window.__stxThemeIcon(isDark)});`;function P$($,X){if(X.theme===!1)return $;let Z=$.includes(p7),Q=typeof X.theme==="object"&&X.theme!==null?X.theme:{},Y=Q.default??"dark",J=Q.storageKey??"theme",G=Q.colors?.light??"#ffffff",W=Q.colors?.dark??"#000000";if(Y==="dark"&&!Z){if(!/<html\b[^>]*\bclass=/.test($))$=$.replace(/<html\b([^>]*)>/i,'<html$1 class="dark">');else if(!/<html\b[^>]*\bclass="[^"]*\bdark\b/.test($))$=$.replace(/<html\b([^>]*\bclass=")([^"]*)(")/i,"<html$1$2 dark$3")}if(!$.includes("data-stx-theme-meta")&&/<head\b[^>]*>/i.test($)){let K=['<meta name="color-scheme" content="dark light" data-stx-theme-meta="1">',`<meta name="theme-color" media="(prefers-color-scheme: light)" content="${G}" data-stx-theme-meta="1">`,`<meta name="theme-color" media="(prefers-color-scheme: dark)" content="${W}" data-stx-theme-meta="1">`].join(`
|
|
4392
4392
|
`);$=$.replace(/<head\b([^>]*)>/i,`<head$1>
|
|
4393
|
-
${K}`)}if(!Z&&!$.includes("__stxThemeGuard")&&/<head\b[^>]*>/i.test($)){let _=`<script data-stx-theme-guard="1">${`window.__STX_COLOR_MODE__=window.__STX_COLOR_MODE__||${JSON.stringify({storageKey:J,initialMode:Y,darkClass:"dark"})};`}${
|
|
4394
|
-
${_}`)}if(!Z&&!$.includes("__stxThemeToggle")&&/<\/body>/i.test($)){let K=`<script data-stx-theme-toggle="1">${
|
|
4395
|
-
</body>`)}return $}async function
|
|
4396
|
-
`)){let Y=Q.replace(/#.*$/,"").trimEnd();if(!Y.trim())continue;let J=Y.search(/\S/);if(J===-1)continue;while(Z.length>1&&Z[Z.length-1].indent>=J)Z.pop();let G=Z[Z.length-1].obj,W=Y.match(/^(\s*)(\S[^:]*):\s*(.*)$/);if(!W)continue;let[,,K,_]=W,U=K.trim(),F=_.trim();if(F==="")G[U]={},Z.push({obj:G[U],indent:J});else G[U]=
|
|
4393
|
+
${K}`)}if(!Z&&!$.includes("__stxThemeGuard")&&/<head\b[^>]*>/i.test($)){let _=`<script data-stx-theme-guard="1">${`window.__STX_COLOR_MODE__=window.__STX_COLOR_MODE__||${JSON.stringify({storageKey:J,initialMode:Y,darkClass:"dark"})};`}${QY(Y,J,G,W)};window.__stxThemeGuard=1;</script>`;$=$.replace(/<head\b([^>]*)>/i,`<head$1>
|
|
4394
|
+
${_}`)}if(!Z&&!$.includes("__stxThemeToggle")&&/<\/body>/i.test($)){let K=`<script data-stx-theme-toggle="1">${YY(J,G,W)};window.__stxThemeToggle=1;</script>`;$=$.replace(/<\/body>/i,`${K}
|
|
4395
|
+
</body>`)}return $}async function c7($,X){if($.length===0)return{succeeded:[],failed:[]};try{return await X($),{succeeded:[...$],failed:[]}}catch{}let Z=[],Q=[];for(let Y of $)try{await X([Y]),Z.push(Y)}catch(J){Q.push({entrypoint:Y,error:U1(J,Y)})}return{succeeded:Z,failed:Q}}import{existsSync as JY,readFileSync as GY}from"fs";import{join as WY,resolve as KY}from"path";import _Y from"process";function y$($,X=_Y.cwd()){let Z=$.i18n;if(!Z||!Array.isArray(Z.locales)||Z.locales.length===0)return null;let Q=Z.defaultLocale??Z.locales[0],Y=UY(Z,X);return{locales:Z.locales,defaultLocale:Q,labels:Z.labels??Object.fromEntries(Z.locales.map((J)=>[J,J.toUpperCase()])),translations:Y,pickerSelector:Z.pickerSelector??"#lang-picker"}}function UY($,X){let Z=$.translations??{},Q={},Y=$.translationsDir,J=Y===!1?null:KY(X,typeof Y==="string"&&Y?Y:"translations"),G=$.format??"json";for(let W of $.locales){let K=J?BY(J,W,G):{};Q[W]={...K,...Z[W]??{}}}return Q}function BY($,X,Z){let Q=Z==="json"?[`${X}.json`]:[`${X}.${Z}`,`${X}.${Z==="yaml"?"yml":"yaml"}`];for(let Y of Q){let J=WY($,Y);if(!JY(J))continue;try{let G=GY(J,"utf8"),W=Z==="json"?JSON.parse(G):LY(G);return l7(W)}catch{continue}}return{}}function l7($,X="",Z={}){if(!$||typeof $!=="object")return Z;for(let[Q,Y]of Object.entries($)){let J=X?`${X}.${Q}`:Q;if(Y&&typeof Y==="object"&&!Array.isArray(Y))l7(Y,J,Z);else if(typeof Y==="string")Z[J]=Y;else if(typeof Y==="number"||typeof Y==="boolean")Z[J]=String(Y)}return Z}function LY($){let X={},Z=[{obj:X,indent:-1}];for(let Q of $.split(`
|
|
4396
|
+
`)){let Y=Q.replace(/#.*$/,"").trimEnd();if(!Y.trim())continue;let J=Y.search(/\S/);if(J===-1)continue;while(Z.length>1&&Z[Z.length-1].indent>=J)Z.pop();let G=Z[Z.length-1].obj,W=Y.match(/^(\s*)(\S[^:]*):\s*(.*)$/);if(!W)continue;let[,,K,_]=W,U=K.trim(),F=_.trim();if(F==="")G[U]={},Z.push({obj:G[U],indent:J});else G[U]=FY(F)}return X}function FY($){if($.startsWith("'")&&$.endsWith("'")||$.startsWith('"')&&$.endsWith('"'))return $.slice(1,-1);return $}function d5($,X,Z){let Q=$.translations[X]?.[Z];if(typeof Q==="string")return Q;let Y=$.translations[$.defaultLocale]?.[Z];if(typeof Y==="string")return Y;return Z}function v$($,X,Z){return $.replace(/\{t(!?):([a-zA-Z][\w.-]*)\}/g,(Q,Y,J)=>{let G=d5(X,Z,J);return Y==="!"?G:zY(G)})}function a0($,X,Z){if(X===Z)return $;if($==="/")return`/${X}/`;if($==="/404.html")return`/${X}/404.html`;return`/${X}${$}`}function i7($,X){for(let Z of X){if($===`/${Z}`||$===`/${Z}/`)return{locale:Z,path:"/"};if($.startsWith(`/${Z}/`))return{locale:Z,path:$.slice(Z.length+1)}}return{locale:null,path:$}}function g$($,X,Z){let Q=$.replace(/\/$/,""),Y=[];for(let G of Z.locales){let W=`${Q}${a0(X,G,Z.defaultLocale)}`;Y.push(`<link rel="alternate" hreflang="${b$(G)}" href="${b$(W)}">`)}let J=`${Q}${a0(X,Z.defaultLocale,Z.defaultLocale)}`;return Y.push(`<link rel="alternate" hreflang="x-default" href="${b$(J)}">`),Y.join(`
|
|
4397
4397
|
`)}function f$($,X){let Z=`<meta name="stx-layout-group" content="i18n:${b$(X)}">`;if(/<meta name="stx-layout-group"[^>]*>/i.test($))return $.replace(/<meta name="stx-layout-group"[^>]*>/i,Z);if(/<\/head>/i.test($))return $.replace(/<\/head>/i,`${Z}
|
|
4398
4398
|
</head>`);return`${Z}
|
|
4399
|
-
${$}`}function h$($,X){return`<script data-stx-lang-picker="1">window.__stxI18n=${JSON.stringify({locales:$.locales,defaultLocale:$.defaultLocale,current:X,pickerSelector:$.pickerSelector})};(function(){function cfg(){return window.__stxI18n}function localeFromPath(p){var d=cfg();for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/')return c;if(p.indexOf('/'+c+'/')===0)return c}return d.defaultLocale}function localePathFor(loc,p){var d=cfg();var stripped=p;for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/'){stripped='/';break}if(p.indexOf('/'+c+'/')===0){stripped=p.slice(c.length+1);break}}if(loc===d.defaultLocale)return stripped;if(stripped==='/')return '/'+loc+'/';return '/'+loc+stripped}cfg().localizeHref=function(href){try{var u=new URL(href,location.origin);if(u.origin!==location.origin)return href;return localePathFor(localeFromPath(location.pathname),u.pathname)+(u.search||'')+(u.hash||'')}catch(_){return href}};function syncFromUrl(){var d=cfg();var loc=localeFromPath(location.pathname);d.current=loc;var picker=document.querySelector(d.pickerSelector);if(picker){var btns=picker.querySelectorAll('[data-lang]');for(var i=0;i<btns.length;i++){var b=btns[i];if(b.getAttribute('data-lang')===loc)b.setAttribute('aria-current','true');else b.removeAttribute('aria-current')}}if(document.documentElement.lang!==loc)document.documentElement.lang=loc}function onLangClick(e){var d=cfg();var btn=e.target&&e.target.closest&&e.target.closest('[data-lang]');if(!btn)return;var picker=document.querySelector(d.pickerSelector);if(!picker||!picker.contains(btn))return;e.preventDefault();e.stopPropagation();var loc=btn.getAttribute('data-lang');if(!loc||loc===localeFromPath(location.pathname))return;var dest=localePathFor(loc,location.pathname);var r=window.__stxRouter;if(r&&r.navigate)r.navigate(dest,true,true);else location.assign(dest)}syncFromUrl();if(window.__stxLangPickerBound){document.removeEventListener('click',window.__stxLangPickerClick,true);window.removeEventListener('stx:navigate',window.__stxLangPickerSync);window.removeEventListener('popstate',window.__stxLangPickerSync)}window.__stxLangPickerClick=onLangClick;window.__stxLangPickerSync=syncFromUrl;window.__stxLangPickerBound=1;document.addEventListener('click',onLangClick,true);window.addEventListener('stx:navigate',syncFromUrl);window.addEventListener('popstate',syncFromUrl)})();</script>`}function b$($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function
|
|
4400
|
-
${N}`);if(U.succeeded.length===0)throw Error(`Build failed: none of the ${_.length} page(s) could be built`);console.error(`[stx] ${U.failed.length} of ${_.length} page(s) skipped; the rest were built.`)}
|
|
4401
|
-
</body>`);if($.spa!==!1)T=await h5(T,$.router);let f=z?
|
|
4402
|
-
${K}`);return $}function u5($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function
|
|
4399
|
+
${$}`}function h$($,X){return`<script data-stx-lang-picker="1">window.__stxI18n=${JSON.stringify({locales:$.locales,defaultLocale:$.defaultLocale,current:X,pickerSelector:$.pickerSelector})};(function(){function cfg(){return window.__stxI18n}function localeFromPath(p){var d=cfg();for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/')return c;if(p.indexOf('/'+c+'/')===0)return c}return d.defaultLocale}function localePathFor(loc,p){var d=cfg();var stripped=p;for(var i=0;i<d.locales.length;i++){var c=d.locales[i];if(p==='/'+c||p==='/'+c+'/'){stripped='/';break}if(p.indexOf('/'+c+'/')===0){stripped=p.slice(c.length+1);break}}if(loc===d.defaultLocale)return stripped;if(stripped==='/')return '/'+loc+'/';return '/'+loc+stripped}cfg().localizeHref=function(href){try{var u=new URL(href,location.origin);if(u.origin!==location.origin)return href;return localePathFor(localeFromPath(location.pathname),u.pathname)+(u.search||'')+(u.hash||'')}catch(_){return href}};function syncFromUrl(){var d=cfg();var loc=localeFromPath(location.pathname);d.current=loc;var picker=document.querySelector(d.pickerSelector);if(picker){var btns=picker.querySelectorAll('[data-lang]');for(var i=0;i<btns.length;i++){var b=btns[i];if(b.getAttribute('data-lang')===loc)b.setAttribute('aria-current','true');else b.removeAttribute('aria-current')}}if(document.documentElement.lang!==loc)document.documentElement.lang=loc}function onLangClick(e){var d=cfg();var btn=e.target&&e.target.closest&&e.target.closest('[data-lang]');if(!btn)return;var picker=document.querySelector(d.pickerSelector);if(!picker||!picker.contains(btn))return;e.preventDefault();e.stopPropagation();var loc=btn.getAttribute('data-lang');if(!loc||loc===localeFromPath(location.pathname))return;var dest=localePathFor(loc,location.pathname);var r=window.__stxRouter;if(r&&r.navigate)r.navigate(dest,true,true);else location.assign(dest)}syncFromUrl();if(window.__stxLangPickerBound){document.removeEventListener('click',window.__stxLangPickerClick,true);window.removeEventListener('stx:navigate',window.__stxLangPickerSync);window.removeEventListener('popstate',window.__stxLangPickerSync)}window.__stxLangPickerClick=onLangClick;window.__stxLangPickerSync=syncFromUrl;window.__stxLangPickerBound=1;document.addEventListener('click',onLangClick,true);window.addEventListener('stx:navigate',syncFromUrl);window.addEventListener('popstate',syncFromUrl)})();</script>`}function b$($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function zY($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}async function e7($){let X=Date.now(),Z=$.pagesDir??"pages",Q=$.outDir??"dist",Y=$.publicDir??"public";if(!$.noClean)OY(Q,{recursive:!0,force:!0});r7(Q,{recursive:!0});let J=new jY(`${Z}/**/*.stx`),G=await Array.fromAsync(J.scan(".")),W=$.excludeDirs??["layouts","partials","components"],K=[],_=G.filter((q)=>{let N=q.slice(Z.length).replace(/^[\\/]+/,"");if(N.split(/[\\/]/).slice(0,-1).some((M)=>W.includes(M)))return K.push(q),!1;return!N.split(/[\\/]/).some((M)=>M.startsWith("_"))});if(K.length>0)console.warn(`[stx] ${K.length} file(s) under ${Z}/ skipped as non-pages: ${W.join(", ")}`);if(_.length===0)throw Error(`No .stx files found in ${Z}/`);let U=await c7(_,(q)=>Bun.build({entrypoints:q,outdir:Q,plugins:[m7()],naming:{entry:"[name].[ext]"}}));if(U.failed.length>0){for(let{entrypoint:q,error:N}of U.failed)console.error(`[stx] failed to build ${q}:
|
|
4400
|
+
${N}`);if(U.succeeded.length===0)throw Error(`Build failed: none of the ${_.length} page(s) could be built`);console.error(`[stx] ${U.failed.length} of ${_.length} page(s) skipped; the rest were built.`)}IY(Q);let F=c5(Q).filter((q)=>q.endsWith(".html")),z=y$($,n7.cwd()),j=new Set(F.map(u$));for(let q of F){let N=x0(Q,q),I=s7(N,"utf8"),M=u$(q),w=z?z.locales:[$.seo?.locale?.split(/[_-]/)[0]??"en"];for(let D of w){let T=I;if(T=RY(T),z)T=v$(T,z,D);if(T=await J0(T,n7.cwd()),T=k$(T,$,$.pages?.[M],M),z)T=DY(T,$,z,D,M),T=wY(T,D,z.defaultLocale,j),T=f$(T,D);if(T=P$(T,$),T=TY(T),z)T=T.replace(/<\/body>/i,`${h$(z,D)}
|
|
4401
|
+
</body>`);if($.spa!==!1)T=await h5(T,$.router);let f=z?EY(M,D,z.defaultLocale):q,c=x0(Q,f);if(r7(VY(c),{recursive:!0}),d$(c,T),z&&D!==z.defaultLocale&&f!==q);}}let H=m5(Q);if(H.assets>0)console.log(`[stx] externalized ${H.assets} asset(s) from ${H.pages} page(s) (${(H.bytesInlined/1024).toFixed(1)}KB removed from HTML)`);let L=p5(Q);if(L.assets>0)console.log(`[stx] externalized ${L.assets} repeated asset(s) from ${L.pages} page(s) (${(L.bytesInlined/1024).toFixed(1)}KB removed from HTML)`);if(m$(Y))a7(Y,Q,{recursive:!0});let O=t7();if(O)a7(O,x0(Q,o7),{recursive:!0});let A=x0(Q,"404.html");if(!m$(A)&&m$(x0(Q,"index.html"))){let q=s7(x0(Q,"index.html"),"utf8").replace(/<title>[^<]*<\/title>/i,`<title>404 \u2014 ${CY($.name)}</title>`);d$(A,q)}if($.sitemap!==!1){let q=[],N=F.filter((M)=>M!=="404.html").map(u$),I=z?z.locales:[null];for(let M of N){let w=$.pages?.[M];for(let D of I){let T=D&&z?a0(M,D,z.defaultLocale):M;q.push({path:T,page:w})}}d$(x0(Q,"sitemap.xml"),x$($,q))}let V=S$($);if(V!==null)d$(x0(Q,"robots.txt"),V);let E=F.map(u$);return{outDir:Q,pages:E,durationMs:Date.now()-X}}function VY($){return NY($)}function EY($,X,Z){let Q=a0($,X,Z);if(Q==="/")return"index.html";let Y=Q.replace(/^\//,"").replace(/\/$/,"");if(!Y.includes("/")){if(X!==Z&&Y===X)return`${X}/index.html`;return`${Y}.html`}return`${Y}.html`.replace(/\.html\.html$/,".html")}function u$($){if($==="index.html")return"/";return`/${$.replace(/\.html$/,"").replace(/\/index$/,"")}`}function c5($,X=$){let Z=[];if(!m$($))return Z;for(let Q of HY($,{withFileTypes:!0})){let Y=x0($,Q.name);if(Q.isDirectory())Z.push(...c5(Y,X));else Z.push(MY(X,Y))}return Z}function IY($){for(let X of c5($)){if(!/^chunk-.*\.js(?:\.map)?$/.test(X))continue;let Z=x0($,X);try{if(AY(Z).size===0)qY(Z)}catch{}}}function RY($){return $.replace(/<script[^>]*src=["']\.\/chunk-[^"']*\.js["'][^>]*><\/script>\s*/g,"")}function DY($,X,Z,Q,Y){if(!Z)return $;if(/<html\b[^>]*\blang=/i.test($))$=$.replace(/<html\b([^>]*)\blang="[^"]*"/i,`<html$1lang="${Q}"`);else $=$.replace(/<html\b([^>]*)>/i,`<html$1 lang="${Q}">`);let J=`${X.url.replace(/\/$/,"")}${a0(Y,Q,Z.defaultLocale)}`;if(/<link rel="canonical"/.test($))$=$.replace(/<link rel="canonical"[^>]*>/,`<link rel="canonical" href="${u5(J)}">`);let G=Q.includes("_")||Q.includes("-")?Q:Q.toLowerCase();if(/<meta property="og:locale"/.test($))$=$.replace(/<meta property="og:locale"[^>]*>/,`<meta property="og:locale" content="${u5(G)}">`);if(/<meta property="og:url"/.test($))$=$.replace(/<meta property="og:url"[^>]*>/,`<meta property="og:url" content="${u5(J)}">`);let W=g$(X.url,Y,Z);if(!$.includes("hreflang="))$=$.replace(/<link rel="canonical"[^>]*>/,(K)=>`${W}
|
|
4402
|
+
${K}`);return $}function u5($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function wY($,X,Z,Q){if(X===Z)return $;return $.replace(/<a\b([^>]*?)\bhref="(\/[^"]*)"([^>]*)>/gi,(Y,J,G,W)=>{if(G.startsWith("//"))return Y;if(G===`/${X}`||G===`/${X}/`||G.startsWith(`/${X}/`))return Y;let K=G.match(/^(\/[^?#]*)(.*)$/);if(!K)return Y;let[,_,U]=K,F=_==="/"?"/":_.replace(/\/$/,"");if(!Q.has(F))return Y;let z=F==="/"?`/${X}/`:`/${X}${F}`;return`<a${J}href="${z}${U}"${W}>`})}function TY($){if(/<main\b/i.test($)||/\bdata-stx-content\b/i.test($))return $;let X=$.match(/<body\b[^>]*>/i),Z=$.search(/<\/body\s*>/i);if(!X||Z<0)return $;let Q=X.index+X[0].length,Y=$.slice(Q,Z),J=0,G=[...Y.matchAll(/<\/nav>/gi)];if(G.length>0){let z=G[G.length-1];J=z.index+z[0].length}let W=Y.length,K=Y.search(/<footer\b/i);if(K!==-1)W=Math.min(W,K);let _=Y.search(/<script\b[^>]*data-stx-(?:theme-toggle|reparent-progress)\b/i);if(_!==-1)W=Math.min(W,_);if(W<=J)return $;let U=Y.slice(J,W);if(!U.trim())return $;let F=`${Y.slice(0,J)}
|
|
4403
4403
|
<main>${U}</main>
|
|
4404
|
-
${Y.slice(W)}`;return`${$.slice(0,Q)}${F}${$.slice(Z)}`}function
|
|
4405
|
-
`)Z++,Q=Y+1;return{line:Z,column:X-Q+1}}function
|
|
4404
|
+
${Y.slice(W)}`;return`${$.slice(0,Q)}${F}${$.slice(Z)}`}function CY($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function $3($){return $}var kY=new Set(["if","else","elseif","else-if","for","foreach","show","model","html","text","bind","key","ref","once","memo","slot","teleport","cloak","pre","effect","init"]),xY=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function SY($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function PY($){let X=[],Z=/<(script|style)\b[^>]*>[\s\S]*?<\/\1\s*>/gi,Q;while((Q=Z.exec($))!==null)X.push([Q.index,Q.index+Q[0].length]);return X}function bY($,X){for(let[Z,Q]of $)if(X>=Z&&X<Q)return!0;return!1}function c$($,X){let Z=1,Q=0;for(let Y=0;Y<X&&Y<$.length;Y++)if($[Y]===`
|
|
4405
|
+
`)Z++,Q=Y+1;return{line:Z,column:X-Q+1}}function yY($,X,Z){let Q=X.toLowerCase(),Y=$.length,J=1,G=Z;while(G<Y){let W=$.indexOf("<",G);if(W===-1)return-1;if(G=W,$.startsWith("<!--",G)){let U=$.indexOf("-->",G+4);if(U===-1)return-1;G=U+3;continue}if($[G+1]==="/"){let U=/^<\/([a-z][\w-]*)\s*>/i.exec($.slice(G,G+64));if(!U){G++;continue}if(U[1].toLowerCase()===Q){if(J--,G+=U[0].length,J===0)return G;continue}G+=U[0].length;continue}let K=/^<([a-z][\w-]*)\b/i.exec($.slice(G,G+64));if(!K){G++;continue}let _=$.indexOf(">",G);if(_===-1)return-1;if(K[1].toLowerCase()===Q&&$[_-1]!=="/")J++;G=_+1}return-1}function vY($,X,Z){let Q=/@([a-z][\w:-]*)((?:\.[a-z][\w-]*)*)\s*=\s*"([^"]*)"/gi,Y;while((Y=Q.exec($))!==null){if(bY(X,Y.index))continue;let J=Y[1].toLowerCase().split(":")[0];if(kY.has(J))continue;let G=Y[3].trim();if(/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*)+$/.test(G)){let W=$.indexOf(Y[3],Y.index),{line:K,column:_}=c$($,W<0?Y.index:W);Z.push({ruleId:"stx/no-bare-function-ref-in-event",message:`Event handler @${Y[1]}="${G}" is a member path, which the runtime does not invoke \u2014 it only auto-calls a plain identifier. Call it: @${Y[1]}="${G}($event)".`,line:K,column:_,severity:"error"})}}}function X3($){let X=$.split("/"),Z=[];for(let Q of X){if(Q===""||Q===".")continue;if(Q==="..")Z.pop();else Z.push(Q)}return Z.join("/")}function gY($,X,Z){let Q=X.replace(/\\/g,"/"),Y=Q.indexOf("resources/stores/");if(Y===-1)return;let J=Q.slice(0,Y+16),G=Q.slice(0,Q.lastIndexOf("/")),W=/\b(import|export)\s+(type\s+)?([^'"]*?)\s*from\s*['"]([^'"]+)['"]/g,K;while((K=W.exec($))!==null){if(K[2])continue;let _=K[1],U=K[4],F;if(U.startsWith("."))F=!X3(`${G}/${U}`).startsWith(X3(J));else F=!0;if(F){let{line:z,column:j}=c$($,K.index),H=_==="export"?"Value re-export":"Value import";Z.push({ruleId:"stx/store-value-imports-must-be-local",message:`${H} from "${U}" is outside resources/stores/ and will be stripped from the store bundle. Use \`${_} type\`, or move the value into the stores dir.`,line:z,column:j,severity:"error"})}}}function fY($){let X=$.trim(),Z=(G)=>{let W=G.match(/[A-Za-z_$][\w$]*/g);return W?W:[]},Q=/\bas\s+(.+)$/.exec(X);if(Q){let G=Q[1].trim(),W=/^([A-Za-z_$][\w$]*)\s*=>\s*([A-Za-z_$][\w$]*)/.exec(G);if(W)return[W[1],W[2]];let K=/^\(([^)]*)\)/.exec(G);if(K)return Z(K[1]);let _=/^([A-Za-z_$][\w$]*)/.exec(G);return _?[_[1]]:[]}let Y=/^\(([^)]*)\)\s+(?:in|of)\s+/.exec(X);if(Y)return Z(Y[1]);let J=/^([A-Za-z_$][\w$]*)\s+(?:in|of)\s+/.exec(X);return J?[J[1]]:[]}function hY($,X){let Z=/(?::for|x-for|@for)\s*=\s*"([^"]*)"/gi,Q;while((Q=Z.exec($))!==null){let Y=fY(Q[1]);if(Y.length===0)continue;let J=$.lastIndexOf("<",Q.index);if(J===-1)continue;let G=/^<([a-z][\w-]*)/i.exec($.slice(J,J+64));if(!G)continue;let W=$.indexOf(">",Q.index);if(W===-1)continue;let _=$[W-1]==="/"||xY.has(G[1].toLowerCase())?W+1:yY($,G[1],W+1),U=_===-1?W+1:_,F=$.indexOf(Q[1],Q.index),z=$.slice(J,U);if(F>=0&&F+Q[1].length<=U){let j=F-J;z=z.slice(0,j)+" ".repeat(Q[1].length)+z.slice(j+Q[1].length)}for(let j of Y){let H=new RegExp(`(?<![.\\w$])${SY(j)}\\s*\\(`,"g"),L;while((L=H.exec(z))!==null){let O=J+L.index,{line:A,column:V}=c$($,O);X.push({ruleId:"stx/no-signal-call-in-for-iteration-var",message:`"${j}" is a :for iteration variable, not a signal \u2014 calling it as "${j}()" leaves it as a function and silently breaks comparisons. Use "${j}" directly.`,line:A,column:V,severity:"error"})}}}}function dY($,X){let Z=/<!--([\s\S]*?)-->/g,Q;while((Q=Z.exec($))!==null){let J=Q[1].indexOf("`");if(J!==-1){let G=Q.index+4+J,{line:W,column:K}=c$($,G);X.push({ruleId:"stx/no-backticks-in-html-comments",message:"Backtick inside an HTML comment leaks into the merged setup function and flips the JS parser into template-literal mode. Remove it or rephrase the comment.",line:W,column:K,severity:"error"})}}}function p$($,X){return $?.[X]!==!1}function uY($,X={}){let Z=[],Q=PY($),Y=(X.filePath??"").replace(/\\/g,"/"),J=X.fileKind??(/\/components?\//i.test(Y)?"component":/\/layouts?\//i.test(Y)?"layout":"view");if(p$(X.rules,"stx/no-bare-function-ref-in-event"))vY($,Q,Z);if(Y&&p$(X.rules,"stx/store-value-imports-must-be-local"))gY($,Y,Z);if(p$(X.rules,"stx/no-signal-call-in-for-iteration-var"))hY($,Z);if(p$(X.rules,"stx/no-backticks-in-html-comments"))dY($,Z);Z.sort((W,K)=>W.line-K.line||W.column-K.column);let G=new Set;return Z.filter((W)=>{let K=`${W.ruleId}:${W.line}:${W.column}`;if(G.has(K))return!1;return G.add(K),!0})}function mY($,X){return $.kind===X}function Z3($){if($===String)return"string";if($===Number)return"number";if($===Boolean)return"boolean";if($===Array)return"array";if($===Object)return"object";if($===Function)return"function";if($===Date)return"date";if($===Symbol)return"symbol";if(typeof $==="function"&&$.name)return $.name;return"unknown"}function pY($,X){if($===null||$===void 0)return!0;if(X===String)return typeof $==="string";if(X===Number)return typeof $==="number"&&!Number.isNaN($);if(X===Boolean)return typeof $==="boolean";if(X===Array)return Array.isArray($);if(X===Object)return typeof $==="object"&&!Array.isArray($);if(X===Function)return typeof $==="function";if(X===Date)return $ instanceof Date;if(X===Symbol)return typeof $==="symbol";if(typeof X==="function")return $ instanceof X;return!0}function Q3($,X,Z,Q){let Y=Q?`[${Q}]`:"";if(Z.required&&(X===void 0||X===null))return{prop:$,message:`${Y} Missing required prop: "${$}"`,value:X,expected:Z.type?Z3(Z.type):void 0};if(X===void 0||X===null)return null;if(Z.type){let J=Array.isArray(Z.type)?Z.type:[Z.type];if(!J.some((W)=>pY(X,W))){let W=J.map((K)=>Z3(K)).join(" | ");return{prop:$,message:`${Y} Invalid prop type for "${$}": expected ${W}, got ${typeof X}`,value:X,expected:W}}}if(Z.validator){if(!Z.validator(X))return{prop:$,message:`${Y} Custom validation failed for prop "${$}"`,value:X}}return null}function cY($){let X=globalThis.__STX_CURRENT_PROPS__||{};if(!$)return X;let Z={...X};for(let[Q,Y]of Object.entries($)){let J=typeof Y==="function"||Array.isArray(Y)?{type:Y}:Y||{};if(Z[Q]===void 0&&J.default!==void 0)Z[Q]=typeof J.default==="function"?J.default():J.default}return Z}function lY($,X={}){let{componentName:Z,throwOnError:Q=!1,logWarnings:Y=!0}=X,J=globalThis.__STX_CURRENT_PROPS__||{},G={...J},W={valid:!0,errors:[],warnings:[]};for(let[K,_]of Object.entries($)){let U=typeof _==="function"||Array.isArray(_)?{type:_}:_||{};if(G[K]===void 0&&U.default!==void 0)G[K]=typeof U.default==="function"?U.default():U.default;let F=Q3(K,G[K],U,Z);if(F){if(W.valid=!1,W.errors.push(F),Y)console.warn(F.message)}}for(let K of Object.keys(J))if(!(K in $)){let _=`${Z?`[${Z}]`:""} Unknown prop: "${K}"`;if(W.warnings.push(_),Y)console.warn(_)}if(Q&&!W.valid){let K=W.errors.map((_)=>_.message).join(`
|
|
4406
4406
|
`);throw Error(`Prop validation failed:
|
|
4407
|
-
${K}`)}return{props:G,validation:W}}function
|
|
4408
|
-
export{
|
|
4407
|
+
${K}`)}return{props:G,validation:W}}function iY($,X){let Z={...$};for(let[Q,Y]of Object.entries(X))if(Z[Q]===void 0)Z[Q]=typeof Y==="function"?Y():Y;return Z}function aY($){return $}function rY($){return{type:$,required:!0}}function sY($,X){return{type:X,default:$}}function nY($,X={}){return{...X,validator:$}}function oY($,X={}){return{...X,validator:(Z)=>$.includes(Z)}}function tY($,X={}){return{...X,type:Array,validator:(Z)=>{if(!Array.isArray(Z))return!1;return!0}}}function eY($,X={}){return{...X,type:Object}}function $J($,X,Z){if(!X)return $;let Q={};for(let[Y,J]of Object.entries(X)){let G=typeof J==="function"||Array.isArray(J)?{type:J}:J||{},W=$[Y];if(W===void 0&&G.default!==void 0)W=typeof G.default==="function"?G.default():G.default;{let K=Q3(Y,W,G,Z);if(K)console.warn(K.message)}Q[Y]=W}for(let[Y,J]of Object.entries($))if(!(Y in Q))Q[Y]=J;return Q}var TB={};
|
|
4408
|
+
export{ZK as o,t$ as p,j6 as q,M4 as r,P0 as s,Z$ as t,Q$ as u,Y$ as v,J$ as w,D1 as x,J3 as y,G3 as z,W3 as A,K3 as B,_3 as C,U3 as D,YJ as E,JJ as F,GJ as G,B3 as H,WJ as I,L3 as J,KJ as K,_J as L,UJ as M,BJ as N,LJ as O,FJ as P,zJ as Q,jJ as R,HJ as S,OJ as T,Y1 as U,AJ as V,qJ as W,NJ as X,MJ as Y,EJ as Z,IJ as _,z3 as $,j3 as aa,RJ as ba,H3 as ca,DJ as da,wJ as ea,TJ as fa,CJ as ga,kJ as ha,xJ as ia,O3 as ja,A3 as ka,SJ as la,PJ as ma,q3 as na,yJ as oa,hJ as pa,dJ as qa,Y6 as ra,D3 as sa,w3 as ta,T3 as ua,C3 as va,r$ as wa,k3 as xa,x3 as ya,S3 as za,P3 as Aa,mJ as Ba,aJ as Ca,rJ as Da,v3 as Ea,sJ as Fa,t3 as Ga,eJ as Ha,T4 as Ia,C4 as Ja,d4 as Ka,u4 as La,m4 as Ma,s6 as Na,p4 as Oa,c4 as Pa,l4 as Qa,i4 as Ra,a4 as Sa,r4 as Ta,s4 as Ua,vW as Va,S1 as Wa,dW as Xa,uW as Ya,n4 as Za,o4 as _a,$X as $a,A$ as ab,mW as bb,pW as cb,cW as db,lW as eb,iW as fb,aW as gb,rW as hb,sW as ib,nW as jb,oW as kb,tW as lb,eW as mb,GX as nb,X2 as ob,J2 as pb,G2 as qb,z5 as rb,F2 as sb,z2 as tb,j2 as ub,IX as vb,A2 as wb,I2 as xb,R2 as yb,D2 as zb,w2 as Ab,T2 as Bb,C2 as Cb,u2 as Db,GZ as Eb,m2 as Fb,WZ as Gb,KZ as Hb,L8 as Ib,F8 as Jb,l2 as Kb,i2 as Lb,a2 as Mb,s2 as Nb,n2 as Ob,jZ as Pb,t2 as Qb,e2 as Rb,$K as Sb,q6 as Tb,H8 as Ub,YK as Vb,JK as Wb,GK as Xb,WK as Yb,HZ as Zb,OZ as _b,UK as $b,AZ as ac,q8 as bc,BK as cc,qZ as dc,LK as ec,FK as fc,NZ as gc,VK as hc,V8 as ic,EZ as jc,IZ as kc,E8 as lc,DZ as mc,wZ as nc,CZ as oc,l as pc,I8 as qc,I5 as rc,R8 as sc,D8 as tc,w8 as uc,T8 as vc,C8 as wc,k8 as xc,x8 as yc,S8 as zc,P8 as Ac,b8 as Bc,y8 as Cc,v8 as Dc,g8 as Ec,f8 as Fc,h8 as Gc,d8 as Hc,u8 as Ic,m8 as Jc,p8 as Kc,c8 as Lc,R5 as Mc,l8 as Nc,i8 as Oc,a8 as Pc,r8 as Qc,s8 as Rc,o8 as Sc,D5 as Tc,w5 as Uc,t8 as Vc,T5 as Wc,C5 as Xc,k5 as Yc,m1 as Zc,N$ as _c,e8 as $c,$7 as ad,X7 as bd,M$ as cd,Q7 as dd,Y7 as ed,J7 as fd,G7 as gd,qQ as hd,NQ as id,x5 as jd,S5 as kd,B7 as ld,c0 as md,L7 as nd,F7 as od,z7 as pd,j7 as qd,H7 as rd,V$ as sd,P5 as td,A7 as ud,E$ as vd,q7 as wd,N7 as xd,M7 as yd,V7 as zd,I$ as Ad,R$ as Bd,b5 as Cd,y5 as Dd,I7 as Ed,R7 as Fd,D7 as Gd,D$ as Hd,w7 as Id,TQ as Jd,d_ as Kd,T7 as Ld,CQ as Md,Z9 as Nd,Q9 as Od,J9 as Pd,A1 as Qd,q1 as Rd,fQ as Sd,hQ as Td,O1 as Ud,uQ as Vd,p1 as Wd,pQ as Xd,cQ as Yd,lQ as Zd,iQ as _d,b7 as $d,aQ as ae,rQ as be,v7 as ce,nQ as de,oQ as ee,k$ as fe,x$ as ge,S$ as he,P$ as ie,y$ as je,d5 as ke,v$ as le,a0 as me,i7 as ne,g$ as oe,f$ as pe,h$ as qe,e7 as re,$3 as se,uY as te,mY as ue,cY as ve,lY as we,iY as xe,aY as ye,rY as ze,sY as Ae,nY as Be,oY as Ce,tY as De,eY as Ee,$J as Fe,TB as Ge,E4 as He,I6 as Ie,R4 as Je,w4 as Ke};
|