@stacksjs/stx 0.2.344 → 0.2.346
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/dist/{chunk-krfx5562.js → chunk-1bws4afs.js} +183 -171
- package/dist/{chunk-7kcfbc0j.js → chunk-1caep9rn.js} +1 -1
- package/dist/{chunk-e4yskgtb.js → chunk-1djdz98r.js} +1 -1
- package/dist/{chunk-mvat8js5.js → chunk-1vyz6kr8.js} +2 -2
- package/dist/{chunk-efx05ah0.js → chunk-1xayahc6.js} +1 -1
- package/dist/{chunk-hsbbfp0c.js → chunk-1xts7768.js} +1 -1
- package/dist/{chunk-7t6h8crt.js → chunk-21mmq3aj.js} +1 -1
- package/dist/{chunk-7d2gfyk8.js → chunk-3pggfwbf.js} +1 -1
- package/dist/{chunk-tscr6bs8.js → chunk-5hhng72w.js} +1 -1
- package/dist/{chunk-bpb3xkg4.js → chunk-7hjjckat.js} +1 -1
- package/dist/{chunk-jzfk5ect.js → chunk-7w66sc17.js} +1 -1
- package/dist/{chunk-mz4breg8.js → chunk-864m3xp2.js} +1 -1
- package/dist/{chunk-3n8avn17.js → chunk-8tghv8cf.js} +1 -1
- package/dist/{chunk-tthrw91n.js → chunk-akb6mgrb.js} +1 -1
- package/dist/{chunk-94sxzp5x.js → chunk-b08taxsf.js} +1 -1
- package/dist/{chunk-1bct7pfj.js → chunk-bxwanj4g.js} +1 -1
- package/dist/{chunk-dx2s51rr.js → chunk-byn0ptqt.js} +1 -1
- package/dist/{chunk-nexpxxsa.js → chunk-ddsgfmhv.js} +1 -1
- package/dist/{chunk-a1ghxrb1.js → chunk-dyy74sdv.js} +1 -1
- package/dist/{chunk-39qy76ek.js → chunk-es275g3w.js} +1 -1
- package/dist/{chunk-8tjg4wbr.js → chunk-fvvdq3ev.js} +1 -1
- package/dist/{chunk-csv48xrx.js → chunk-fynb9e02.js} +1 -1
- package/dist/{chunk-zkwk82ss.js → chunk-hfvknn03.js} +1 -1
- package/dist/{chunk-cmccdayf.js → chunk-j8s9akdq.js} +1 -1
- package/dist/{chunk-cdq28mek.js → chunk-jwe0cwff.js} +1 -1
- package/dist/{chunk-020hpw7m.js → chunk-k5hv1qqy.js} +1 -1
- package/dist/{chunk-72x5v5an.js → chunk-k80kr2t2.js} +1 -1
- package/dist/{chunk-cappe4hd.js → chunk-km92eab7.js} +1 -1
- package/dist/{chunk-a29x23g7.js → chunk-maq5jag2.js} +1 -1
- package/dist/{chunk-5yhv1pe5.js → chunk-p04rck27.js} +1 -1
- package/dist/{chunk-gmm82dst.js → chunk-pc8np1bb.js} +1 -1
- package/dist/{chunk-6z9pm31g.js → chunk-q45fva8h.js} +1 -1
- package/dist/{chunk-9yqt0nf2.js → chunk-qp7sk0ex.js} +1 -1
- package/dist/{chunk-ewpbxy5m.js → chunk-rf2cejt3.js} +1 -1
- package/dist/{chunk-mpyjnwje.js → chunk-rwk5hwvk.js} +1 -1
- package/dist/{chunk-5apmxb4e.js → chunk-s11e8aq9.js} +1 -1
- package/dist/{chunk-wfwj4390.js → chunk-s3jyec9k.js} +1 -1
- package/dist/{chunk-fs2t4rs3.js → chunk-skd72bn4.js} +2 -2
- package/dist/{chunk-3xpk99z4.js → chunk-t2py7vc3.js} +1 -1
- package/dist/{chunk-j5qygdy9.js → chunk-t83m2pkm.js} +1 -1
- package/dist/{chunk-4kbaky4w.js → chunk-tnm0nez5.js} +1 -1
- package/dist/{chunk-g28fs4aa.js → chunk-vw83y4we.js} +2 -2
- package/dist/{chunk-zwhnkxgy.js → chunk-vzbcdxd5.js} +1 -1
- package/dist/{chunk-q5gzpn1n.js → chunk-washyj03.js} +1 -1
- package/dist/{chunk-1exk54qt.js → chunk-wbp4vbm0.js} +1 -1
- package/dist/{chunk-xh9paa2g.js → chunk-xytgvfbf.js} +2 -2
- package/dist/{chunk-5atmahe4.js → chunk-zdq7emrd.js} +322 -322
- package/dist/{chunk-9p5gbhwp.js → chunk-zz2yxsf9.js} +1 -1
- package/dist/cli.js +7 -7
- package/dist/component-library.d.ts +0 -31
- package/dist/component-library.js +279 -17
- package/dist/craft-entry.js +1 -1
- package/dist/craft.js +1 -1
- package/dist/process.js +25 -3
- package/dist/pwa.js +1 -1
- package/dist/ssg.js +2 -2
- package/dist/theme-tokens.js +15 -5
- package/dist/variable-extractor.d.ts +31 -0
- package/dist/variable-extractor.js +9 -5
- package/package.json +5 -5
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{Xe as
|
|
2
|
+
import{Xe as z$}from"./chunk-s3jyec9k.js";import{Yf as i7,ag as j$,bg as c6,cg as T6,eg as B1,fg as l6,gg as K5,hg as O$,ig as A$,jg as i6,kg as a6,og as z5}from"./chunk-xytgvfbf.js";import{aj as u5}from"./chunk-9jbssgem.js";import{qj as l1,rj as I1,sj as R1,tj as a$,uj as s$,vj as n5,xj as o5}from"./chunk-e4g8wz6t.js";import{Uj as _$,Vj as U$}from"./chunk-t2py7vc3.js";import{wk as l5,xk as i5}from"./chunk-v7aa7v85.js";import{Dk as Z3,Ek as Q3}from"./chunk-c0n802j1.js";import{Yk as U1}from"./chunk-tnm0nez5.js";import{rl as M5,sl as j8}from"./chunk-hfvknn03.js";import{Am as n0,Ho as M0,Jp as V0,Ro as o0,Sm as d6,Vl as V8,Wm as _5,Zm as T1,Zn as K$,_m as C1,dr as B$,fp as s7,hq as _6,io as H$,iq as x1,ko as u6,lo as E6,mm as l7,mp as m6,mq as t0,np as p6,qr as C$,sr as r0,tr as w0,xr as T0}from"./chunk-zdq7emrd.js";import{Es as J5,Ys as B,dt as L$,et as F$,it as J0}from"./chunk-skd72bn4.js";import{nt as u0}from"./chunk-y2f41kaq.js";import{$u as V6,Du as s1,Gu as M6,Ou as Z5,Qu as Q5,Tu as r1,Xu as Y5,_u as W$,lv as K6}from"./chunk-avwywzsj.js";import{Dw as w6,Yv as W5,Zv as D6,bw as x6,cw as S6,rw as P6,sw as b6,tw as y6,uw as v6,vw as g6,ww as f6,yw as h6}from"./chunk-yg5r7bnm.js";import{Nw as s}from"./chunk-ejqpq0wc.js";var t5={read:($)=>{try{return JSON.parse($)}catch{return $}},write:($)=>{return JSON.stringify($)}};function U3($,X,Z={}){let{storage:Q="local",serializer:Y=t5,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(M){console.error("[useStorage] Subscriber error:",M)}};if(K&&G){let L=(A)=>{if(A.key===$&&A.storageArea===_()){let M=z;try{z=A.newValue?Y.read(A.newValue):X}catch(V){console.warn(`[useStorage] Failed to read key "${$}" from a cross-tab update:`,V);return}j(z,M)}};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 e5($,X,Z,Q,Y={}){let{serializer:J=t5,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=n5((()=>{let j=_();if(!j)return Q;try{return U(j.getItem(Z))}catch(H){return console.warn(`[${X}] Cannot read "${Z}":`,H),Q}})());if(o5(()=>{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 B3($,X,Z){return e5("local","useLocalStorage",$,X,Z)}function L3($,X,Z){return e5("session","useSessionStorage",$,X,Z)}function F3($="local"){if(typeof window>"u")return;($==="session"?sessionStorage:localStorage).clear()}function z3($="local"){if(typeof window>"u")return[];let X=$==="session"?sessionStorage:localStorage;return Object.keys(X)}function j3($="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 UJ($){t=$}function BJ(){return t}function LJ(){return{isMounted:!1,isUnmounted:!1,hooks:{beforeMount:[],mounted:[],beforeUpdate:[],updated:[],beforeUnmount:[],unmounted:[]},effects:[],scope:H3()}}function H3(){return{refs:new Map,effects:new Set,cleanups:[]}}function FJ($){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(a$())s$(K);else K()}},subscribe(G){return X.add(G),()=>{X.delete(G)}}};if(t)t.scope.refs.set(Y,J);return J}var $6=new WeakMap;function O3($){let X=$6.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(a$())s$(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 O3(_)}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 $6.set($,J),J}function zJ($){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 A3($){if(typeof requestAnimationFrame==="function"){requestAnimationFrame(()=>{requestAnimationFrame($)});return}setTimeout($,0)}function jJ($,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 A3(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 HJ($,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 OJ($){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 AJ($){if(t)t.hooks.beforeMount.push($);else console.warn("[stx] onBeforeMount called outside of component setup")}function NJ($){if(t)t.hooks.mounted.push($);else console.warn("[stx] onMounted called outside of component setup")}function qJ($){if(t)t.hooks.beforeUpdate.push($);else console.warn("[stx] onBeforeUpdate called outside of component setup")}function MJ($){if(t)t.hooks.updated.push($);else console.warn("[stx] onUpdated called outside of component setup")}function VJ($){if(t)t.hooks.beforeUnmount.push($);else console.warn("[stx] onBeforeUnmount called outside of component setup")}function EJ($){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 IJ($){await Y1($,"beforeMount"),$.isMounted=!0,await Y1($,"mounted")}async function RJ($){if(!$.isMounted||$.isUnmounted)return;await Y1($,"beforeUpdate"),await Y1($,"updated")}async function DJ($){if($.isUnmounted)return;await Y1($,"beforeUnmount");for(let X of $.scope.cleanups)X();$.isUnmounted=!0,await Y1($,"unmounted")}function wJ(){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-wfwj4390.js";import{Yf as u7,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
|
|
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 X6($){let Z=J1("__STX_STORES__",{})[$];if(!Z)throw Error(`Store "${$}" not found. Make sure it's defined with defineStore().`);return Z}function CJ($){return X6($)}function kJ($,X=5000){return new Promise((Z,Q)=>{let Y=Date.now(),J=()=>{let G=X6($);if(G)Z(G);else if(Date.now()-Y>X)Q(Error(`Timeout waiting for store "${$}"`));else requestAnimationFrame(J)};J()})}function N3(){return J1("__STX_ROUTE_PARAMS__",{})}function q3($){return N3()[$]}function xJ($){let X=q3($);if(X===void 0)throw Error(`Route parameter "${$}" not found`);return X}function M3(){return J1("__STX_MIDDLEWARE_STATE__",{})}function SJ($){return M3()[$]}function PJ(){if(typeof window>"u")return;if(!J1("__STX_STORES__",null))i1("__STX_STORES__",{})}function bJ($,X){let Z=J1("__STX_STORES__",{});Z[$]=X,i1("__STX_STORES__",Z)}function yJ(){return J1("__STX_STORE_STATE__",null)}function vJ($){i1("__STX_ROUTE_PARAMS__",$)}function gJ($){i1("__STX_MIDDLEWARE_STATE__",$)}function V3(){return typeof window>"u"}function E3(){return typeof window<"u"}function fJ($){if(E3())$()}function hJ($){if(V3())$()}async function I3($){try{let X=await Bun.file($).text(),Z=R3(X),Q=D3(X,$),Y=w3(X,Z),J=T3(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 R3($){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(
|
|
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 D3($,X){let Z=[],Q=Z6($,"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=Z6($,"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 w3($,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 T3($,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 Z6($,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 uJ($=["**/*.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 I3(J);Z.push(G)}catch(G){console.warn(`Failed to analyze ${J}:`,G)}let Y=C3(Z);return{results:Z,summary:Y}}function C3($){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 Q6=/<script\b[^>]*\bserver\b/i,k3=/<script\b[^>]*\bclient\b/i;async function lJ($){let X=performance.now(),Z=await r0($),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 Y6(W);for(let _ of K){G++;let U=await Bun.file(_).text();if(Q6.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 iJ($){let X=await r0($),Z=$||X.root||process.cwd(),Q=a1.resolve(Z,X.componentsDir||"components"),Y=[],J=await Y6(Q);for(let G of J){let W=await Bun.file(G).text(),K=Q6.test(W),_=k3.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 Y6($){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 J6={treeShake:!0,deadCodeElimination:!0,constantFolding:!0,stringPooling:!1,minifyHtml:!0,removeDevCode:!0,constants:{},preserveDirectives:[],target:"production"},G6=["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 W6($){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(G6.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 x3($,X=[]){let Z=W6($),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 G6.filter((Y)=>!Q.has(Y))}function S3($){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${h3(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 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(`
|
|
198
|
+
`}function P3($,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 b3($,X={}){let Z=P3($,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 y3($,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 v3($){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 g3($){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 f3($,X={}){let Z={...J6,...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=b3(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=y3(Y,Z.constants);if(Y=z.content,K=z.folded,K.length>0)J.push("Constant folding")}if(Z.treeShake){if(W=x3(Y,Z.preserveDirectives),W.length>0)J.push("Tree shaking")}if(Z.stringPooling){let z=g3(Y);if(Y=z.content,_=z.count,_>0)J.push("String pooling")}if(Z.minifyHtml){let z=v3(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 sJ($,X={}){let Z={...J6,...X},Q=new Map,Y=[],J=0,G=0,W=new Set;for(let[F,z]of $){let j=f3(z,Z);Q.set(F,j),J+=j.originalSize,G+=j.optimizedSize,Y.push(...j.warnings.map((L)=>`${F}: ${L}`));let H=W6(z);for(let L of H)W.add(L.name)}let K;if(Z.treeShake)K=S3(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 h3($){return $.charAt(0).toUpperCase()+$.slice(1)}function U6($,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=U6(_,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 eJ($,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=d3(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 $G($,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 d3($){if(Array.isArray($))return"array";if($===null)return"null";return typeof $}var u3={name:"component",handler:async($,X,Z,Q)=>{if(X.length<1)return r1("Component","component directive requires at least the component name",s1.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=K6(U,Z),Object.keys(J).length===0)J=U6(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),r1("Component",`Error parsing component props: ${F}`,s1.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 _6(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 r1("Component",`Error rendering component: ${F}`,s1.COMPONENT_RENDER_ERROR)}},hasEndTag:!1};function XG(){return[u3]}import{mkdir as m3,readFile as p3,readdir as c3,stat as B6,writeFile as l3}from"fs/promises";import U0 from"path";function O6($){if($==="connectedCallback")return`method "${$}" is reserved; define "onConnect" instead, which the element calls once it is connected, rendered and bound`;if($==="disconnectedCallback")return`method "${$}" is reserved; define "onDisconnect" instead, which the element calls as it leaves the DOM, before it releases its own listeners`;return`method "${$}" is reserved`}var A6=new Set(["constructor","connectedCallback","disconnectedCallback","attributeChangedCallback","adoptedCallback"]);function i3($){return $.replace(/\.stx$/i,"").split(/[^a-z0-9]+/i).filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join("")}function t$($){return $.replace(/([a-z0-9])([A-Z])/g,"$1-$2").replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").toLowerCase()}function a3($){return/^[a-z][.0-9_a-z-]*-[.0-9_a-z-]*$/.test($)&&!$.startsWith("xml")&&!/[A-Z]/.test($)}function s3($){if($===!0)return"open";if($==="open"||$==="closed")return $;return!1}async function r3($){let X=[];async function Z(Q){let Y=await c3(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 n3($,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 o3($,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(A6.has(K))throw Error(`${X}: client ${O6(K)}`);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 t3($){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 L6($){return[...$.matchAll(/<style\b[^>]*>([\s\S]*?)<\/style>/gi)].map((X)=>X[1].trim()).filter(Boolean).join(`
|
|
199
199
|
|
|
200
|
-
`)}function
|
|
201
|
-
`)}function
|
|
200
|
+
`)}function e3($){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 $4($){if($===void 0)return"object";if($==="true"||$==="false")return"boolean";if(/^-?\d+(?:\.\d+)?$/.test($))return"number";if(/^['"`]/.test($))return"string";return"object"}function X4($){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 Z4($){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 n1($,X,Z,Q){if($[X]!==Z)return-1;let Y=0,J=null;for(let G=X;G<$.length;G++){let W=$[G];if(J){if(W==="\\"){G++;continue}if(W===J)J=null;continue}if(W==="'"||W==='"'||W==="`"){J=W;continue}if(W===Z)Y++;else if(W===Q){if(Q===">"&&$[G-1]==="=")continue;if(Y--,Y===0)return G+1}}return-1}function n$($,X,Z){let Q=Z?"([{<":"([{",Y=Z?")]}>":")]}",J=[],G=0,W=null,K="";for(let _=0;_<$.length;_++){let U=$[_];if(W){if(K+=U,U==="\\"){K+=$[++_]??"";continue}if(U===W)W=null;continue}if(U==="'"||U==='"'||U==="`"){W=U,K+=U;continue}if(Q.includes(U))G++;else if(Y.includes(U))G--;if(G===0&&X.includes(U)){J.push(K),K="";continue}K+=U}return J.push(K),J.map((_)=>_.trim()).filter(Boolean)}function Q4($){let X=0,Z=null;for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Z){if(Y==="\\"){Q++;continue}if(Y===Z)Z=null;continue}if(Y==="'"||Y==='"'||Y==="`"){Z=Y;continue}if("([{".includes(Y))X++;else if(")]}".includes(Y))X--;if(X!==0||Y!=="=")continue;let J=$[Q-1];if($[Q+1]==="="||J==="="||J==="!"||J==="<"||J===">")continue;return Q}return-1}function F6($){switch($.trim()){case"String":return"string";case"Number":return"number";case"Boolean":return"boolean";case"Array":return"unknown[]";case"Object":return"Record<string, unknown>";default:return}}function Y4($){let X=/\bdefineProps\b/.exec($);if(!X)return null;let Z=/(?:^|[\s;{}()])(const|let|var)\s+/g,Q=-1;for(let A=Z.exec($);A&&A.index<X.index;A=Z.exec($))Q=A.index+A[0].indexOf(A[1]);if(Q===-1)return null;let Y={},J={},G=[],W=Q+(/^(?:const|let|var)\s+/.exec($.slice(Q))?.[0].length??0),K=()=>{while(W<$.length&&/\s/.test($[W]))W++},_;if($[W]==="{"){let A=n1($,W,"{","}");if(A===-1)return null;_=$.slice(W,A),W=A}else{let A=/^[A-Za-z_$][\w$]*/.exec($.slice(W));if(!A)return null;_=A[0],W+=A[0].length}if(K(),$[W]!=="=")return null;W++,K();let U=/^withDefaults\s*\(\s*/.exec($.slice(W)),F=Boolean(U);if(U)W+=U[0].length;let z=/^defineProps\b/.exec($.slice(W));if(!z)return null;W+=z[0].length;let j="";if(K(),$[W]==="<"){let A=n1($,W,"<",">");if(A===-1)return null;j=$.slice(W+1,A-1).trim(),W=A}if(K(),$[W]!=="(")return null;let H=n1($,W,"(",")");if(H===-1)return null;let L=$.slice(W+1,H-1).trim();if(W=H,F){if(K(),$[W]===",")W++,K();if($[W]==="{"){let A=n1($,W,"{","}");if(A===-1)return null;for(let[M,V]of o$($.slice(W,A)))J[M]=V;W=A}if(K(),$[W]===",")W++,K();if($[W]===")")W++}if($[W]===";")W++;let O=/^[A-Za-z_$][\w$]*$/.test(j)?j:void 0;if(j.startsWith("{"))for(let A of n$(j.replace(/^\{/,"").replace(/\}$/,""),",;",!0)){let M=/^(?:readonly\s+)?([A-Za-z_$][\w$]*)\s*\??\s*:\s*([\s\S]+)$/.exec(A);if(M)Y[M[1]]=M[2].trim()}if(L.startsWith("{"))for(let[A,M]of o$(L)){if(G.push(A),!M.startsWith("{")){let V=F6(M);if(V)Y[A]=V;continue}for(let[V,N]of o$(M))if(V==="default")J[A]=N;else if(V==="type"){let q=F6(N);if(q)Y[A]=q}}else if(L.startsWith("["))for(let A of n$(L.slice(1,-1),",",!1))G.push(A.replace(/^['"`]/,"").replace(/['"`]$/,""));if(_.startsWith("{")){G.length=0;for(let A of n$(_.replace(/^\{/,"").replace(/\}$/,""),",",!1)){let M=Q4(A),N=(M===-1?A:A.slice(0,M)).split(":")[0].trim().replace(/^\.\.\./,"");if(!N)continue;if(G.push(N),M!==-1)J[N]=A.slice(M+1).trim()}}else if(G.length===0)G.push(...Object.keys(Y));return{text:$.slice(Q,W),propNames:G,defaults:J,declared:Y,typeName:O}}function o$($){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 J4($,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),M=U0.relative(Z,A);return`${H}${M.startsWith(".")?M:`./${M}`}${O}`})),""});let U=Y4(J);if(U)W.push(...U.propNames),Object.assign(K,U.defaults),Object.assign(_,U.declared),J=J.replace(U.text,"");let F={};for(let z of J.matchAll(/(?:export\s+)?interface\s+([A-Za-z_$][\w$]*)\s*\{([\s\S]*?)\n\}/g)){let j=[];for(let H of z[2].matchAll(/^\s*(?:\/\*\*[\s\S]*?\*\/\s*)?([A-Za-z_$][\w$]*)\??\s*:\s*([^\n;]+)/gm))_[H[1]]=H[2].trim(),j.push(H[1]);F[z[1]]=j}if(U&&U.propNames.length===0&&U.typeName){for(let z of F[U.typeName]??[])if(!W.includes(z))W.push(z)}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 G4($){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 W4($){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 K4($){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 _4($){return[...new Set([...$.matchAll(/(--[a-z0-9_-]+)\s*:/gi)].map((X)=>X[1]))].sort().map((X)=>({name:X}))}function z6($,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 U4($,X,Z){let Q=U0.isAbsolute(X.file)?X.file:U0.resolve($,X.file),Y=await p3(Q,"utf8"),J=n3(Y,Q),G=U0.basename(Q,".stx"),W=X.name||J.name||i3(G),K=`${t$(Z.prefix||"stx")}-${t$(G)}`,_=X.tag||J.tag||K;if(!W||!/^[A-Za-z_$][\w$]*$/.test(W))throw Error(`${Q}: invalid component class name "${W}"`);if(!a3(_))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(([V,N])=>[V,z6(V,N)])),z=G4(t3(Y)),j=W4(z.template),H=J4(Y,Q,U0.resolve(Z.outputDir)),L=Z4(j.template);for(let V of H.propNames){if(F[V])continue;let N=H.defaults[V];F[V]=z6(V,{type:e3(H.declared[V])??$4(N),...N===void 0?{}:{default:X4(N)}})}let O=J.methods||{},A=X.methods||{},M=o3(Y,Q);return{file:U0.relative($,Q),sourcePath:Q,name:W,tag:_,description:X.description||J.description||"",template:j.template,styles:L6(Y),shadowMode:s3(X.shadowDOM??J.shadowDOM??Z.shadowDOM),progressive:X.progressive??J.progressive??Z.progressive??!0,properties:F,events:X.events||J.events||{},methods:{...O,...A,...M},eventTypes:z.eventTypes,bindings:j.bindings,slots:K4(j.template),cssProperties:_4(L6(Y)),scope:H,render:L}}function B4(){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('>', '>')
|
|
@@ -290,12 +290,24 @@ export class StxElement extends HTMLElementBase {
|
|
|
290
290
|
this.setAttribute?.('hydrated', '');
|
|
291
291
|
this.dispatchEvent?.(new CustomEvent('stx:hydrated', { bubbles: true, composed: true }));
|
|
292
292
|
}
|
|
293
|
+
// Called last, so a component that acquires something sees its own rendered
|
|
294
|
+
// markup and its events already bound. Reported rather than rethrown: a
|
|
295
|
+
// component that fails to set up must not take the element down with it.
|
|
296
|
+
try { this.onConnect?.(); }
|
|
297
|
+
catch (error) { console.error('[stx] onConnect failed', error); }
|
|
293
298
|
}
|
|
294
299
|
|
|
295
300
|
disconnectedCallback() {
|
|
296
301
|
this._connected = false;
|
|
297
|
-
|
|
298
|
-
|
|
302
|
+
// Called before the framework releases anything, so the element is still
|
|
303
|
+
// intact for a component that needs to read it on the way out, and inside
|
|
304
|
+
// try/finally so a throwing hook cannot leak the framework's own listeners.
|
|
305
|
+
try { this.onDisconnect?.(); }
|
|
306
|
+
catch (error) { console.error('[stx] onDisconnect failed', error); }
|
|
307
|
+
finally {
|
|
308
|
+
for (const [event, listener] of this._listeners) this.renderRoot.removeEventListener(event, listener);
|
|
309
|
+
this._listeners.clear();
|
|
310
|
+
}
|
|
299
311
|
}
|
|
300
312
|
|
|
301
313
|
attributeChangedCallback(attribute, oldValue, newValue) {
|
|
@@ -484,7 +496,7 @@ export function defineComponent(Component, definition) {
|
|
|
484
496
|
}
|
|
485
497
|
return Component;
|
|
486
498
|
}
|
|
487
|
-
`}function
|
|
499
|
+
`}function L4($){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(A6.has(W))throw Error(`${$.sourcePath}: ${O6(W)}`);if(/^(?:async\s+)?[A-Za-z_$][\w$]*\s*\(/.test(K.trim()))return` ${K.trim()}`;return` ${W}($event) {
|
|
488
500
|
${K}
|
|
489
501
|
}`}).join(`
|
|
490
502
|
|
|
@@ -509,8 +521,8 @@ ${Z}${G}
|
|
|
509
521
|
|
|
510
522
|
defineComponent(${$.name}, ${X});
|
|
511
523
|
export default ${$.name};
|
|
512
|
-
`}function
|
|
513
|
-
`),Z=Object.entries($.properties).map(([J,G])=>` ${J}: ${
|
|
524
|
+
`}function o1($){switch($.type){case"boolean":return"boolean";case"number":return"number";case"array":return"unknown[]";case"object":return"Record<string, unknown>";default:return"string"}}function F4($){let X=Object.entries($.properties).map(([J,G])=>` ${J}${G.required?"":"?"}: ${o1(G)}`).join(`
|
|
525
|
+
`),Z=Object.entries($.properties).map(([J,G])=>` ${J}: ${o1(G)}`).join(`
|
|
514
526
|
`),Q=Object.entries($.events).map(([J,G])=>` ${JSON.stringify(J)}: CustomEvent<${G.detailType||"unknown"}>`).join(`
|
|
515
527
|
`),Y=Object.keys($.methods).map((J)=>` ${J}($event?: Event): unknown`).join(`
|
|
516
528
|
`);return`export interface ${$.name}Props {
|
|
@@ -536,10 +548,10 @@ declare global {
|
|
|
536
548
|
}
|
|
537
549
|
|
|
538
550
|
export default ${$.name}
|
|
539
|
-
`}function
|
|
551
|
+
`}function z4($){return`declare global {
|
|
540
552
|
namespace JSX {
|
|
541
553
|
interface IntrinsicElements {
|
|
542
|
-
${$.map((Z)=>{let Q=Object.entries(Z.properties).map(([J,G])=>` ${JSON.stringify(J)}?: ${
|
|
554
|
+
${$.map((Z)=>{let Q=Object.entries(Z.properties).map(([J,G])=>` ${JSON.stringify(J)}?: ${o1(G)}`).join(`
|
|
543
555
|
`),Y=Object.keys(Z.events).map((J)=>{return` ${`on${J.split(/[-:]/).map((W)=>W.charAt(0).toUpperCase()+W.slice(1)).join("")}`}?: (event: CustomEvent<${Z.events[J].detailType||"unknown"}>) => void`}).join(`
|
|
544
556
|
`);return` ${JSON.stringify(Z.tag)}: {
|
|
545
557
|
${Q}
|
|
@@ -555,9 +567,9 @@ ${Y}
|
|
|
555
567
|
}
|
|
556
568
|
|
|
557
569
|
export {}
|
|
558
|
-
`}function
|
|
570
|
+
`}function j4($){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:o1(Q)},default:Q.default===void 0?void 0:JSON.stringify(Q.default),attribute:Q.attribute===!1?void 0:Q.attribute||t$(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 j6($){if(!$.styles)return"";let X=$.styles.replace(/:host\b/g,":scope");if(/\@scope\s*\(/.test(X))return X;return`@scope (${$.tag}) {
|
|
559
571
|
${X}
|
|
560
|
-
}`}function
|
|
572
|
+
}`}function H6($){return $.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\s+/g," ").replace(/\s*([{}:;,])\s*/g,"$1").replace(/;}/g,"}").trim()}function H4($){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
573
|
`);return`const definitions = ${JSON.stringify(Y,null,2)};
|
|
562
574
|
const escapeHTML = (value) => String(value ?? '')
|
|
563
575
|
.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>')
|
|
@@ -591,21 +603,21 @@ export function renderComponent(tag, props = {}, slots = {}) {
|
|
|
591
603
|
}
|
|
592
604
|
|
|
593
605
|
${J}
|
|
594
|
-
`}async function
|
|
606
|
+
`}async function JG($){let X=U0.resolve($.inputDir),Z=U0.resolve($.outputDir);if(!(await B6(X).catch(()=>null))?.isDirectory())throw Error(`Component-library input directory does not exist: ${X}`);let Y=$.components?.length?$.components:(await r3(X)).map((L)=>({file:L}));if(!Y.length)throw Error(`No .stx components found in ${X}`);let J=await Promise.all(Y.map((L)=>U4(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 m3(Z,{recursive:!0});let K=[],_=async(L,O)=>{let A=U0.join(Z,L);return await l3(A,O.endsWith(`
|
|
595
607
|
`)?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",
|
|
608
|
+
`,"utf8"),K.push(A),A};await _("runtime.js",B4());for(let L of J){if(await _(`${L.tag}.js`,L4(L)),$.declarations!==!1)await _(`${L.tag}.d.ts`,F4(L));if($.css!==!1&&L.styles){let O=L.shadowMode?L.styles:j6(L);await _(`${L.tag}.css`,$.minify?H6(O):O)}}let U=J.map((L)=>`export { ${L.name}, default as ${L.name}Element } from './${L.tag}.js';`).join(`
|
|
609
|
+
`);if(await _("index.js",U),await _("ssr.js",H4(J)),$.declarations!==!1)await _("index.d.ts",J.map((L)=>`export * from './${L.tag}.js'`).join(`
|
|
610
|
+
`)),await _("custom-elements.d.ts",z4(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
611
|
`)}
|
|
600
612
|
export declare function renderComponent(tag: string, props?: Record<string, unknown>, slots?: Record<string, string>): string
|
|
601
613
|
${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(
|
|
614
|
+
`)}`);let F;if($.manifest!==!1)F=await _("custom-elements.json",JSON.stringify(j4(J),null,2));let z;if($.css!==!1){let L=J.filter((O)=>!O.shadowMode&&O.styles).map(j6).join(`
|
|
603
615
|
|
|
604
|
-
`);if(L)z=await _("bundle.css",$.minify?
|
|
605
|
-
`);throw AggregateError(A,`Failed to bundle component library${
|
|
606
|
-
${
|
|
616
|
+
`);if(L)z=await _("bundle.css",$.minify?H6(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],M=A.map((V)=>String(V).trim()).filter(Boolean).join(`
|
|
617
|
+
`);throw AggregateError(A,`Failed to bundle component library${M?`
|
|
618
|
+
${M}`:""}`)}if(!L.success){let O=L.logs.map((A)=>String(A).trim()).filter(Boolean).join(`
|
|
607
619
|
`);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
|
|
620
|
+
${O}`:""}`)}if(K.push(j),$.sourcemap==="external")K.push(`${j}.map`)}let H=await Promise.all(K.map(async(L)=>(await B6(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:R4}=globalThis.Bun;import $5 from"fs";import W1 from"path";function t1(){return`
|
|
609
621
|
/* Theme selector for code blocks */
|
|
610
622
|
.theme-selector {
|
|
611
623
|
margin: 1rem 0;
|
|
@@ -655,13 +667,13 @@ ${O}`:""}`)}if(K.push(j),$.sourcemap==="external")K.push(`${j}.map`)}let H=await
|
|
|
655
667
|
|
|
656
668
|
body.dark-mode a {
|
|
657
669
|
color: #58a6ff;
|
|
658
|
-
}`}function
|
|
670
|
+
}`}function e1($){return`
|
|
659
671
|
<div class="theme-selector">
|
|
660
672
|
Theme:
|
|
661
673
|
<select id="themeSelector" onchange="changeTheme()">
|
|
662
674
|
${$}
|
|
663
675
|
</select>
|
|
664
|
-
</div>`}function
|
|
676
|
+
</div>`}function $$(){return`
|
|
665
677
|
function changeTheme() {
|
|
666
678
|
const theme = document.getElementById('themeSelector').value;
|
|
667
679
|
|
|
@@ -677,7 +689,7 @@ else {
|
|
|
677
689
|
}
|
|
678
690
|
|
|
679
691
|
// Initialize theme on page load
|
|
680
|
-
document.addEventListener('DOMContentLoaded', changeTheme);`}function
|
|
692
|
+
document.addEventListener('DOMContentLoaded', changeTheme);`}function X$($){if(Object.keys($).length===0)return"";return`
|
|
681
693
|
<div class="frontmatter">
|
|
682
694
|
<h3>Frontmatter</h3>
|
|
683
695
|
${Object.entries($).map(([X,Z])=>`
|
|
@@ -685,19 +697,19 @@ else {
|
|
|
685
697
|
<span class="frontmatter-label">${X}:</span>
|
|
686
698
|
<span>${Array.isArray(Z)?Z.join(", "):String(Z)}</span>
|
|
687
699
|
</div>`).join("")}
|
|
688
|
-
</div>`}import
|
|
700
|
+
</div>`}import N6 from"net";async function O4($){return new Promise((X)=>{let Z=N6.createServer();Z.once("error",()=>X(!1)),Z.once("listening",()=>{Z.close(()=>X(!0))}),Z.listen($,"0.0.0.0")})}async function A4($){return new Promise((X)=>{let Z=N6.createServer();Z.once("error",()=>X(!1)),Z.once("listening",()=>{Z.close(()=>X(!0))}),Z.listen($,"::")})}async function N4($){if(!await O4($))return!1;return await A4($)}async function h0($,X=20){$=Number($);for(let Z=0;Z<X;Z++){let Q=$+Z;if(await N4(Q))return Q}throw Error(`Could not find an available port between ${$} and ${$+X-1}`)}var q4={title:"stx Development",width:1400,height:900,darkMode:!0,hotReload:!0,titlebarHidden:!1,nativeSidebar:!1,sidebarWidth:260,sidebarConfig:void 0};async function M4(){try{let $=await import("./chunk-jekrtm2j.js");if(typeof $.openDevWindow!=="function")return null;return $}catch{return null}}async function G1($,X={}){let Z={...q4,...X},Q=await M4();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 Z$($){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
701
|
${J}
|
|
690
702
|
return typeof sidebarConfig !== 'undefined' ? sidebarConfig : null;
|
|
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
|
|
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="",
|
|
703
|
+
`,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 e$(){console.log(`
|
|
704
|
+
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 V4($){console.log(`${B.green}Server running at ${B.cyan}${$}${B.reset}`),console.log(`Press ${B.cyan}Ctrl+C${B.reset} to stop the server`),e$()}function E4($){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(),e$();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(`
|
|
705
|
+
`)){let J=Q.trim().toLowerCase();Q="",I4(J,$,X,Z)}})}function I4($,X,Z,Q){switch($){case"o":if(Q?.onOpen)Q.onOpen();else E4(X);break;case"c":if(Q?.onClear)Q.onClear();else console.clear(),V4(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 e$();break;default:break}}async function X5($,X={}){let Z=X.port||3000,Q=X.watch!==!1,Y=W1.resolve($);if(!$5.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||[],M=[...new Set([...L,...O])].map((V)=>`<option value="${V}"${V===H?" selected":""}>${V}</option>`).join(`
|
|
694
706
|
`);return J=`
|
|
695
707
|
<!DOCTYPE html>
|
|
696
708
|
<html lang="en">
|
|
697
709
|
<head>
|
|
698
710
|
<meta charset="UTF-8">
|
|
699
711
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
700
|
-
<title>${
|
|
712
|
+
<title>${D4(z.title||W1.basename(Y))}</title>
|
|
701
713
|
<!-- Syntax highlighting styles -->
|
|
702
714
|
<style id="syntax-theme">
|
|
703
715
|
:root {
|
|
@@ -839,26 +851,26 @@ Keyboard shortcuts:`),console.log(` ${B.cyan}o${B.reset} + Enter - Open in brow
|
|
|
839
851
|
min-width: 100px;
|
|
840
852
|
color: #555;
|
|
841
853
|
}
|
|
842
|
-
${
|
|
854
|
+
${t1()}
|
|
843
855
|
</style>
|
|
844
856
|
</head>
|
|
845
857
|
<body>
|
|
846
|
-
${
|
|
847
|
-
${
|
|
858
|
+
${X$(z)}
|
|
859
|
+
${e1(M)}
|
|
848
860
|
|
|
849
861
|
${F}
|
|
850
862
|
|
|
851
863
|
<script>
|
|
852
|
-
${
|
|
864
|
+
${$$()}
|
|
853
865
|
</script>
|
|
854
866
|
</body>
|
|
855
867
|
</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 _=
|
|
868
|
+
`,!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 _=R4({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
869
|
${F.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});console.clear(),console.log(`
|
|
858
870
|
${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
871
|
${B.bright}\u2192 ${B.cyan}http://localhost:${K}/${B.reset}`),console.log(`
|
|
860
872
|
${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)
|
|
873
|
+
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(_.url.toString(),()=>{if(Q)$5.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=$5.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 D4($){return String($??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var{serve:T4}=globalThis.Bun;import E0 from"fs";import Q0 from"path";class q6{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 w4($,X={}){let{showOverlay:Z=!0,reconnectInterval:Q=1000,maxReconnectAttempts:Y=10}=X;return`
|
|
862
874
|
<script>
|
|
863
875
|
(function() {
|
|
864
876
|
// stx Hot Reload Client
|
|
@@ -1057,10 +1069,10 @@ else {
|
|
|
1057
1069
|
};
|
|
1058
1070
|
})();
|
|
1059
1071
|
</script>
|
|
1060
|
-
`}function P0($,X,Z={}){let Q=
|
|
1072
|
+
`}function P0($,X,Z={}){let Q=w4(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 Q$($){let X=$.toLowerCase();return X.endsWith(".css")||X.endsWith(".scss")||X.endsWith(".sass")||X.endsWith(".less")}function Y$($){let X=$.toLowerCase();return[".stx",".html",".htm",".md",".js",".ts",".jsx",".tsx",".json"].some((Q)=>X.endsWith(Q))}function J$($){return[/^\./,/node_modules/,/\.stx\/output/,/\.stx\/cache/,/~$/,/\.swp$/,/\.swo$/].some((Z)=>Z.test($))}var K1=null;function G$($){if(!K1)K1=new q6($);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 r0(),...$.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 B$(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 _$(G,Z);if(L){if(Z.debug)console.log(`Using cached version of ${G}`);return{contents:L,loader:"html"}}}let K=await Y5(()=>Bun.file(G).text(),"",(L)=>{throw new Q5(`Failed to read stx file: ${G}`,G,void 0,void 0,`File read error: ${L.message}`)});if(!K)throw new Q5(`stx file is empty: ${G}`,G);let{scriptContent:_,templateContent:U,allScripts:F}=J5.time("script-extraction",()=>{let L=K,O=K$(K);if(O)L=O.content.trim();let A=K.match(/<script\b[^>]*>[\s\S]*?<\/script>/gi)||[],M="",V=[];for(let q of A){let I=q.match(/<script\b[^>]*>([\s\S]*?)<\/script>/i)?.[1]||"",E=q.match(/<script\b([^>]*)>/i),w=E?E[1]:"";if(/\bserver\b/i.test(w))M=I;else V.push(q)}let N=L.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi,"");return{scriptContent:M,templateContent:N,allScripts:V}}),z={__filename:G,__dirname:w1.dirname(G),__stx:{webComponentsPath:Y,builtComponents:J}};await Y5(()=>M0(_,z,G),void 0,(L)=>{let O=new Z5(`Script execution failed in ${G}: ${L.message}`,G,void 0,void 0,_.substring(0,100));if(W$.log(O,{filePath:G,scriptContent:_}),Z.debug)throw O});let H=await J5.timeAsync("directive-processing",async()=>{return await V0(U,z,G,Z,W)});if(F.length>0){let{interpolateScriptsInTemplate:L}=await import("./chunk-1xts7768.js"),O=L(F.join(`
|
|
1061
1073
|
`),z),A=H.search(/<\/body>/i);if(A!==-1)H=H.slice(0,A)+O+`
|
|
1062
1074
|
`+H.slice(A);else H+=`
|
|
1063
|
-
${O}`}if(H=await
|
|
1075
|
+
${O}`}if(H=await E6(H),W.forEach((L)=>Q.add(L)),Z.cache&&Z.cachePath){if(await U$(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 Z5(`Plugin processing failed: ${String(W)}`,G);if(W$.log(K,{filePath:G,buildConfig:$.config}),V6.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||M6()?`<!DOCTYPE html>
|
|
1064
1076
|
<html lang="en">
|
|
1065
1077
|
<head>
|
|
1066
1078
|
<meta charset="UTF-8">
|
|
@@ -1120,12 +1132,12 @@ ${O}`}if(H=await A6(H),W.forEach((L)=>Q.add(L)),Z.cache&&Z.cachePath){if(await _
|
|
|
1120
1132
|
<h1>Something went wrong</h1>
|
|
1121
1133
|
<p>An internal error occurred. Please try again later.</p>
|
|
1122
1134
|
</body>
|
|
1123
|
-
</html>`,loader:"html"}}})}};async function
|
|
1135
|
+
</html>`,loader:"html"}}})}};async function C4($,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 X5(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}})}},E=await Bun.build({entrypoints:[W],outdir:K,plugins:[I,_1],publicPath:"/",define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!E.success)return console.error(`${B.red}Build failed:${B.reset}`,E.logs),!1;let w=E.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 L$(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=G$({wsPort:I,verbose:!1}),G=J.start(I)}let H={},L=null,O;try{let{loadStxConfig:I}=await import("./chunk-bxwanj4g.js"),E=await I();if(O=X.stxOptions?.serverApi??E.serverApi,E?.apiRouter)L=E?.apiRouter,console.log(`${B.blue}Using custom router for API handling${B.reset}`);if(E?.apiRoutes){H=E.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(E?.broadcasting?.enabled)try{let{startBroadcasting:w,loadChannels:D}=await import("./chunk-n5657hm3.js"),T=E.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:M}=await import("./chunk-akb6mgrb.js"),V=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 N=T4({port:j,async fetch(I){return z$(I,await(async()=>{let E=new URL(I.url);if([K,Q0.dirname(W),Q0.join(process.cwd(),"public")].some((v)=>M(Q0.join(v,E.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[E.pathname])try{return await H[E.pathname](I)}catch(v){return new Response(JSON.stringify({error:v.message}),{status:500,headers:{"Content-Type":"application/json"}})}let w=await V(I);if(w)return w;if(E.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,E.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(),s0=H0.transformSync(G0);return new Response(s0,{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,E.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(),s0=H0.transformSync(G0);return new Response(s0,{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",E.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(),s0=H0.transformSync(G0);return new Response(s0,{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
1136
|
${I.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});console.clear(),console.log(`
|
|
1125
1137
|
${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
1138
|
${B.bright}\u2192 ${B.cyan}http://localhost:${j}/${B.reset}`),console.log(`
|
|
1127
|
-
${B.yellow}Routes:${B.reset}`);let
|
|
1128
|
-
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(
|
|
1139
|
+
${B.yellow}Routes:${B.reset}`);let q=Q0.relative(process.cwd(),W);if(console.log(` ${B.green}\u2514\u2500 /${B.reset} \u2192 ${B.bright}${q}${B.reset}`),console.log(`
|
|
1140
|
+
Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(N.url.toString(),()=>{if(Q)E0.watch(Q0.dirname(W),{recursive:!0}).close();N.stop()}),X.native){let I=await Bun.file(W).text(),E=Z$(I);await G1(j,{title:Q0.basename(W,".stx"),titlebarHidden:X.titlebarHidden===!0,nativeSidebar:!!E,sidebarConfig:E})}if(Q){let I=Q0.dirname(W);console.log(`${B.blue}Watching ${B.bright}${I}${B.reset} for changes...`);let E=E0.watch(I,{recursive:!0},async(w,D)=>{if(!D||J$(D))return;if(Y$(D)){console.log(`${B.yellow}File ${B.bright}${D}${B.yellow} changed, rebuilding...${B.reset}`),o0.clear(),t0();let T=await U();if(await F$(z),Y&&J)if(T)J.reload(D);else J.error("Build failed - check console for details")}else if(Q$(D)){if(console.log(`${B.cyan}CSS ${B.bright}${D}${B.cyan} changed${B.reset}`),Y&&J)J.updateCss(D)}});process.on("SIGINT",()=>{if(E.close(),J)D1();N.stop(),process.exit(0)})}return!0}var{serve:k4}=globalThis.Bun;import m0 from"fs";import B0 from"path";var I6=`
|
|
1129
1141
|
<script data-stx-helpers>
|
|
1130
1142
|
(function() {
|
|
1131
1143
|
'use strict'
|
|
@@ -1436,14 +1448,14 @@ else {
|
|
|
1436
1448
|
|
|
1437
1449
|
})()
|
|
1438
1450
|
</script>
|
|
1439
|
-
`;
|
|
1451
|
+
`;w6();function C6($){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 x4($,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=C6($.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:M}=await T0(L,{markdown:{syntaxHighlighting:{serverSide:!0,enabled:!0,defaultTheme:w0.markdown?.syntaxHighlighting?.defaultTheme||"github-dark",highlightUnknownLanguages:!0}}}),V=X.markdown?.syntaxHighlighting||w0.markdown?.syntaxHighlighting,N=V?.defaultTheme||"github-dark",q=["github-dark"],I=V?.additionalThemes||[],w=[...new Set([...q,...I])].map((c)=>`<option value="${c}"${c===N?" selected":""}>${c}</option>`).join(`
|
|
1440
1452
|
`),D=`
|
|
1441
1453
|
<!DOCTYPE html>
|
|
1442
1454
|
<html lang="en">
|
|
1443
1455
|
<head>
|
|
1444
1456
|
<meta charset="UTF-8">
|
|
1445
1457
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
1446
|
-
<title>${
|
|
1458
|
+
<title>${R6(M.title||B0.basename(L))}</title>
|
|
1447
1459
|
<!-- Syntax highlighting styles -->
|
|
1448
1460
|
<style id="syntax-theme">
|
|
1449
1461
|
:root {
|
|
@@ -1585,34 +1597,34 @@ else {
|
|
|
1585
1597
|
min-width: 100px;
|
|
1586
1598
|
color: #555;
|
|
1587
1599
|
}
|
|
1588
|
-
${
|
|
1600
|
+
${t1()}
|
|
1589
1601
|
</style>
|
|
1590
1602
|
</head>
|
|
1591
1603
|
<body>
|
|
1592
|
-
${
|
|
1593
|
-
${
|
|
1604
|
+
${X$(M)}
|
|
1605
|
+
${e1(w)}
|
|
1594
1606
|
|
|
1595
1607
|
${A}
|
|
1596
1608
|
|
|
1597
1609
|
<script>
|
|
1598
|
-
${
|
|
1610
|
+
${$$()}
|
|
1599
1611
|
</script>
|
|
1600
1612
|
</body>
|
|
1601
1613
|
</html>
|
|
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(
|
|
1603
|
-
${U1(
|
|
1604
|
-
</head>`);else
|
|
1605
|
-
</head>`);return new Response(
|
|
1614
|
+
`,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(q){q.onResolve({filter:/^\/(images|fonts|assets|public)\//},(I)=>{return{path:I.path,external:!0}})}},M;try{let q=await Bun.build({entrypoints:[L],outdir:Y,plugins:[A,_1],define:{"process.env.NODE_ENV":'"development"'},...X.stxOptions});if(!q.success){console.error(`${B.red}Build failed for ${B.bright}${H}${B.reset}:`,U1(q.logs,L));continue}let I=q.outputs.find((E)=>E.path.endsWith(".html"));if(!I){console.error(`${B.red}No HTML output found for ${B.bright}${H}${B.reset}`);continue}M=await Bun.file(I.path).text()}catch(q){console.error(`${B.red}Build failed for ${B.bright}${H}${B.reset}:
|
|
1615
|
+
${U1(q,L)}`);continue}let N=`/${B0.relative(J,L).replace(/\.stx$/,"")}`;if(N.endsWith("/index"))N=N.slice(0,-6)||"/";if(N.includes("[")){let{regex:q,params:I}=D6(N);W.push({pattern:q,paramNames:I,filePath:L,routeTemplate:N,fileType:"stx"}),G[N]={filePath:L,content:M,fileType:"stx"}}else G[N||"/"]={filePath:L,content:M,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=k4({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 V=Bun.file(O),N=B0.extname(O).toLowerCase(),q="application/octet-stream";if(N===".ts"||N===".tsx"){let I=new Bun.Transpiler({loader:N===".tsx"?"tsx":"ts"}),E=await V.text(),w=I.transformSync(E);return new Response(w,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(N){case".html":q="text/html";break;case".css":q="text/css";break;case".js":q="text/javascript";break;case".json":q="application/json";break;case".png":q="image/png";break;case".jpg":case".jpeg":q="image/jpeg";break;case".gif":q="image/gif";break;case".svg":q="image/svg+xml";break;case".ico":q="image/x-icon";break;case".woff":q="font/woff";break;case".woff2":q="font/woff2";break;case".ttf":q="font/ttf";break;case".otf":q="font/otf";break;case".eot":q="application/vnd.ms-fontobject";break}return new Response(V,{headers:{"Content-Type":q}})}let A=G[L.pathname];if(!A&&!L.pathname.endsWith("/"))A=G[`${L.pathname}/`];if(!A)for(let V of W){let N=L.pathname.match(V.pattern);if(N){let q=G[V.routeTemplate];if(q){let I={};for(let D=0;D<V.paramNames.length;D++)I[V.paramNames[D]]=decodeURIComponent(N[D+1]);let E=q.content,w=`<script>window.__routeParams = ${JSON.stringify(I)};</script>`;if(E.includes("</head>"))E=E.replace("</head>",`${w}
|
|
1616
|
+
</head>`);else E=w+E;A={...q,content:E}}break}}if(A)return J0(A.content).then((V)=>{if(V.includes("</head>"))V=V.replace("</head>",`${I6}
|
|
1617
|
+
</head>`);return new Response(V,{headers:{"Content-Type":"text/html","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})});let M=B0.join(Y,L.pathname);if(m0.existsSync(M)&&m0.statSync(M).isFile()){let V=Bun.file(M),N=B0.extname(M).toLowerCase(),q="text/plain";if(N===".ts"||N===".tsx"){let I=new Bun.Transpiler({loader:N===".tsx"?"tsx":"ts"}),E=await V.text(),w=I.transformSync(E);return new Response(w,{headers:{"Content-Type":"application/javascript","Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache",Expires:"0"}})}switch(N){case".html":q="text/html";break;case".css":q="text/css";break;case".js":q="text/javascript";break;case".json":q="application/json";break;case".png":q="image/png";break;case".jpg":case".jpeg":q="image/jpeg";break;case".gif":q="image/gif";break;case".svg":q="image/svg+xml";break;case".ico":q="image/x-icon";break;case".woff":q="font/woff";break;case".woff2":q="font/woff2";break;case".ttf":q="font/ttf";break;case".otf":q="font/otf";break;case".eot":q="application/vnd.ms-fontobject";break}return new Response(V,{headers:{"Content-Type":q}})}if(L.pathname!=="/"&&G["/"]){let V=T6(H);return J0(G["/"].content).then((N)=>{if(V){let q=N.match(/<main[^>]*>([\s\S]*?)<\/main>/i);if(q){let I=N.match(/<title[^>]*>([\s\S]*?)<\/title>/i),E=I?I[1]:"",w=`<!DOCTYPE html><html><head><title>${R6(E)}</title></head><body><main>${q[1]}</main></body></html>`;return new Response(w,{headers:{"Content-Type":"text/html","X-STX-Partial":"true",...B1(),"Cache-Control":j$,Pragma:"no-cache",Expires:"0"}})}}return new Response(N,{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
1618
|
${H.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});console.clear(),console.log(`
|
|
1607
1619
|
${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
1620
|
${B.bright}\u2192 ${B.cyan}http://localhost:${U}/${B.reset}`),console.log(`
|
|
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 ",
|
|
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-1bct7pfj.js"),_=await K(W),{createServerApi:U,isServerApiSource:F}=await import("./chunk-tthrw91n.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-1bct7pfj.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-n5657hm3.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-1bct7pfj.js"),{checkCache:p,cacheTemplate:u,readFileCached:g,templateCache:h}=await import("./chunk-e4yskgtb.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-1bct7pfj.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-hsbbfp0c.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-39qy76ek.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-hke0k33t.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-39qy76ek.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}
|
|
1621
|
+
${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 ",M=H.fileType==="md"?`${B.magenta}(markdown)${B.reset}`:"";console.log(` ${B.green}${A}${H.route}${B.reset} \u2192 ${B.bright}${H.filePath}${B.reset} ${M}`)}),console.log(`
|
|
1622
|
+
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 R6($){return String($??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}var{serve:S4}=globalThis.Bun;import e from"fs";import m from"path";async function k6($){try{return _5(await Bun.file($).text())}catch{return}}function G5($){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 P4($=".",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-bxwanj4g.js"),_=await K(W),{createServerApi:U,isServerApiSource:F}=await import("./chunk-akb6mgrb.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=H$(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 M=_?._pluginPageDirs||[],V=[];for(let{dir:R,prefix:x}of M)if(e.existsSync(R)){let P=H$(m.dirname(R),{pagesDir:m.basename(R)});for(let y of P){let Z0=x==="/"?y.pattern:`${x}${y.pattern==="/"?"":y.pattern}`;V.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 N=new Map,q=null,I=null;if(X.stxOptions?.shell!==!1){if(I=await l6(W,X.stxOptions?.shell),I){if(q=await K5(I,X.stxOptions||{}),q)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}`)}}P6(),await y6(W);let E=b6();if(E.length>0)console.log(`${B.blue}Loaded ${B.bright}${E.length}${B.blue} middleware: ${B.dim}${E.join(", ")}${B.reset}`);let w={},D=null;try{let{loadStxConfig:R}=await import("./chunk-bxwanj4g.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-n5657hm3.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=x6(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-bxwanj4g.js"),{checkCache:p,cacheTemplate:u,readFileCached:g,templateCache:h}=await import("./chunk-1djdz98r.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 q0=!0;for(let _0 of i.dependencies){if(!e.existsSync(_0)){q0=!1;break}if((await e.promises.stat(_0)).mtime.getTime()>i.mtime){q0=!1;break}}if(q0){let _0=i.output;if(q)_0=A$(_0,{preserveHead:!0});let E1=S.get(R.filePath);return{route:R,content:_0,status:E1?.status??await k6(R.filePath),headers:E1?.headers}}}}catch{}let A0=await p(R.filePath,C);if(A0){let N0=A0;if(q)N0=A$(N0,{preserveHead:!0});let q0=S.get(R.filePath);return{route:R,content:N0,status:q0?.status??await k6(R.filePath),headers:q0?.headers}}}let o=a?await g(R.filePath):await Bun.file(R.filePath).text(),K0=_5(o),{classifyAllScripts:d}=await import("./chunk-bxwanj4g.js"),O0=d(o),D0=O0.server.map((i)=>i.content),r=o;for(let i of O0.server)r=r.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(r,n,R.filePath,C,S0);let A0=performance.now()-i,N0=m.relative(W,R.filePath)||R.filePath;console.log(`[stx:profile] ${N0} \u2192 ${A0.toFixed(2)}ms`)}else j0=await P(r,n,R.filePath,C,S0);if(!q)j0=await g0(j0,{router:C.router});{let{interpolateScriptExpressions:i}=await import("./chunk-1xts7768.js");j0=j0.replace(/<script\b([^>]*)>([\s\S]*?)<\/script>/g,(A0,N0,q0)=>{if(!/function\s+__stx_setup_/.test(q0))return A0;return`<script${N0}>${i(q0,n)}</script>`})}if(q)j0=A$(j0,{preserveHead:!0});if(a&&X0)await u(R.filePath,j0,S0,C);let{extractStreamBoundaries:_3}=await import("./chunk-es275g3w.js"),Q1=_3(n),V1=n.__streamTemplates;if(V1&&typeof V1==="object"&&Object.keys(V1).length>0){let i=n.streamBoundaries||{},A0={...C,autoShell:!1},N0=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)}})),q0=new Set(N0.map((_0)=>_0.id));Q1=[...(Q1||[]).filter((_0)=>!q0.has(_0.id)),...N0]}if(Q1&&Q1.length>0)c.add(R.pattern);else Q1=void 0;let s5=T1(n),r5=C1(n);if(X0)S.set(R.filePath,{status:s5,headers:r5});return{route:R,content:j0,status:s5??K0,headers:r5,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(),N.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<V.length;R+=H0){let x=V.slice(R,R+H0),P=await Promise.all(x.map(({route:y})=>k(y)));for(let y of P)if(y)N.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 L$(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=G$({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=S4({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 G5(y);if(p?.isFile()&&!F(Z0,W,z))return G5(Z0);if(u?.isFile()&&!F(R0,W,z))return G5(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-hke0k33t.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=W5(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?d6(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 r=D0;if(r=await J0(r,W),Y)r=P0(r,G);return new Response(r,{status:404,headers:{"Content-Type":"text/html"}})}return new Response("Not Found",{status:404})}}if(K0.middleware){let O0=v6(x.pathname,h.params,K0,x.search),D0=g6(O0,null,R,{isServer:!0}),r=await f6(K0.middleware,D0);if(r.redirect){let n=r.redirect.path,S0=r.redirect.options.redirectCode||302,j0=new Headers(r.responseHeaders);return j0.set("Location",n),new Response(null,{status:S0,headers:j0})}if(r.abort){let{statusCode:n,message:S0}=r.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(r.state).length>0){let n=`<script>(function(){var s=typeof stx!=='undefined'?stx:{};s._ms=${JSON.stringify(r.state)};if(s.setMiddlewareState)s.setMiddlewareState(s._ms);})()</script>`;C.content=C.content.replace("</head>",`${n}</head>`)}}let d=C.content;if(q&&i6(R)){let O0=h6(d),D0=u6(d),r=d.match(/<title[^>]*>([\s\S]*?)<\/title>/i),n=r?c6(r[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=a6(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)},[m6]:p6(),...B1(),"Cache-Control":j$}})}if(q)d=O$(q,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-es275g3w.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(V.length>0){let C=V.map((a)=>a.route),X0=W5(x.pathname,C);if(X0){let a=N.get(X0.route.pattern);if(a){let o=a.content;if(q)o=O$(q,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 M)if(a!=="/"&&x.pathname.startsWith(a)){let o=N.get(a)||N.get(a+"/");if(o){let K0=o.content;if(q)K0=O$(q,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
1623
|
${R.stack}</pre>`,{headers:{"Content-Type":"text/html"}})}});if(console.clear(),console.log(`
|
|
1612
1624
|
${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
1625
|
${B.bright}\u2192 ${B.cyan}http://localhost:${v0}/${B.reset}`),Y)console.log(`${B.dim} HMR: ws://localhost:${G}${B.reset}`);console.log(`
|
|
1614
|
-
${B.yellow}Routes:${B.reset}`);let W0=[...
|
|
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=
|
|
1626
|
+
${B.yellow}Routes:${B.reset}`);let W0=[...S6(A,W)];for(let{route:R}of V)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(`
|
|
1627
|
+
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=Z$(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||J$(g))return;if(Y$(g)){if(_._layerGraph){let h=await K(W);Object.assign(_,h),A.splice(0,A.length,...H$(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-1djdz98r.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 K5(I,X.stxOptions||{});if(Y0)q=Y0}}if(await G0(),await F$(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-1djdz98r.js");h(m.resolve(p,g)),Y0.delete(m.resolve(p,g))}catch{}if(await G0(),Y&&J)J.reload(g)}}else if(Q$(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 b4($={}){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)=>B5(X),selectStore:(X)=>v4(X),inspectElement:(X)=>g4(X),highlightComponent:(X)=>t6(X),clearHighlight:()=>e6(),logComponentTree:()=>f4(),logStoreState:(X)=>h4(X),timeTravel:(X,Z)=>d4(X,Z)},m4(),u4(),console.log("%c[STX DevTools] Enabled","color: #10b981; font-weight: bold;")}function y4(){b.enabled=!1,delete window.__STX_DEVTOOLS__;let $=document.getElementById("stx-devtools-panel");if($)$.remove();console.log("%c[STX DevTools] Disabled","color: #ef4444;")}function s6($){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($),U5({timestamp:Date.now(),type:"component:unmounted",componentId:$,payload:{name:X.name}})}}function n6($,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),U5({timestamp:Date.now(),type:"store:registered",payload:{id:$,state:X}})}function o6($,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};U5({timestamp:Date.now(),type:`store:${Y}`,payload:{storeId:$,name:X,oldValue:Z,newValue:Q}})}}function U5($){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 B5($){b.selectedComponent=$;let X=b.components.get($);if(X)t6($),console.log("%c[STX DevTools] Selected component:","color: #3b82f6;",X);return X}function v4($){b.selectedStore=$;let X=b.stores.get($);if(X)console.log("%c[STX DevTools] Selected store:","color: #8b5cf6;",X);return X}function g4($){let X=$;while(X){let Z=X.getAttribute("data-stx-component-id");if(Z)return B5(Z);X=X.parentElement}console.log("%c[STX DevTools] No component found for element","color: #f59e0b;");return}function t6($){e6();let X=b.components.get($);if(X?.element){let Z=document.createElement("div");Z.id="stx-devtools-highlight",Z.style.cssText=`
|
|
1616
1628
|
position: absolute;
|
|
1617
1629
|
background: rgba(59, 130, 246, 0.2);
|
|
1618
1630
|
border: 2px solid #3b82f6;
|
|
@@ -1630,7 +1642,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1630
1642
|
font-family: monospace;
|
|
1631
1643
|
border-radius: 4px;
|
|
1632
1644
|
white-space: nowrap;
|
|
1633
|
-
`,Y.textContent=`<${X.name}>`,Z.appendChild(Y),document.body.appendChild(Z)}}function
|
|
1645
|
+
`,Y.textContent=`<${X.name}>`,Z.appendChild(Y),document.body.appendChild(Z)}}function e6(){let $=document.getElementById("stx-devtools-highlight");if($)$.remove()}function f4(){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 h4($){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 d4($,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 u4(){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)s6(Y);Q.querySelectorAll("[data-stx-component-id]").forEach((J)=>{let G=J.getAttribute("data-stx-component-id");if(G)s6(G)})}})}).observe(document.body,{childList:!0,subtree:!0})}function m4(){if(typeof document>"u")return;if(document.getElementById("stx-devtools-panel"))return;let $=document.createElement("div");$.id="stx-devtools-panel",$.innerHTML=`
|
|
1634
1646
|
<style>
|
|
1635
1647
|
#stx-devtools-panel {
|
|
1636
1648
|
position: fixed;
|
|
@@ -1739,7 +1751,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1739
1751
|
<div id="stx-devtools-content">
|
|
1740
1752
|
<div id="stx-devtools-components-tab"></div>
|
|
1741
1753
|
</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"),
|
|
1754
|
+
`,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"),r6(Y.getAttribute("data-tab")||"components")})}),setInterval(()=>{let Y=$.querySelector(".stx-devtools-tab.active");if(Y&&$.classList.contains("open"))r6(Y.getAttribute("data-tab")||"components")},1000)}function r6($){let X=document.getElementById("stx-devtools-content");if(!X)return;switch($){case"components":X.innerHTML=p4();break;case"stores":X.innerHTML=c4();break;case"events":X.innerHTML=l4();break}X.querySelectorAll(".stx-devtools-component").forEach((Z)=>{Z.addEventListener("click",()=>{let Q=Z.getAttribute("data-id");if(Q)B5(Q)})})}function p4(){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
1755
|
<div class="stx-devtools-component ${b.selectedComponent===Q.id?"selected":""}"
|
|
1744
1756
|
data-id="${Q.id}"
|
|
1745
1757
|
style="padding-left: ${Y*16+8}px">
|
|
@@ -1747,25 +1759,25 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1747
1759
|
<span class="stx-devtools-component-id">${Q.id}</span>
|
|
1748
1760
|
</div>
|
|
1749
1761
|
${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
|
|
1762
|
+
`}if(X.length===0)return'<div style="color: #6b7280; padding: 8px;">No components registered</div>';return X.map((Q)=>Z(Q,0)).join("")}function c4(){let $=Array.from(b.stores.values());if($.length===0)return'<div style="color: #6b7280; padding: 8px;">No stores registered</div>';return $.map((X)=>`
|
|
1751
1763
|
<div class="stx-devtools-section">
|
|
1752
1764
|
<div class="stx-devtools-section-title">${X.id}</div>
|
|
1753
1765
|
<div class="stx-devtools-json">${JSON.stringify(X.state,null,2)}</div>
|
|
1754
1766
|
</div>
|
|
1755
|
-
`).join("")}function
|
|
1767
|
+
`).join("")}function l4(){let $=b.events.slice(-20).reverse();if($.length===0)return'<div style="color: #6b7280; padding: 8px;">No events recorded</div>';return $.map((X)=>`
|
|
1756
1768
|
<div style="padding: 4px 0; border-bottom: 1px solid #374151;">
|
|
1757
1769
|
<span style="color: #60a5fa;">${X.type}</span>
|
|
1758
1770
|
<span style="color: #6b7280; font-size: 10px; margin-left: 8px;">
|
|
1759
1771
|
${new Date(X.timestamp).toLocaleTimeString()}
|
|
1760
1772
|
</span>
|
|
1761
1773
|
</div>
|
|
1762
|
-
`).join("")}import
|
|
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
|
|
1774
|
+
`).join("")}import L5 from"fs";import k1 from"path";async function i4($){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(`
|
|
1775
|
+
`).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 a4($){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(`
|
|
1776
|
+
`).map((Q)=>Q.trim().replace(/^\*\s*/,"")).join(" ").trim();return""}catch{return""}}async function s4($,X=!1,Z){let Q=k1.basename($,".stx"),Y=await i4($),J=await a4($),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
1777
|
`);G=`<${Q}
|
|
1766
1778
|
${W}
|
|
1767
|
-
/>`}return{name:Q,path:$,description:J,props:Y,example:G,isWebComponent:X,tag:Z}}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
|
|
1779
|
+
/>`}return{name:Q,path:$,description:J,props:Y,example:G,isWebComponent:X,tag:Z}}async function $8($){try{if(!await x1($))return console.warn(`Components directory does not exist: ${$}`),[];let X=await L5.promises.readdir($,{withFileTypes:!0}),Z=[];for(let Q of X){let Y=k1.join($,Q.name);if(Q.isDirectory()){let J=await $8(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 r4($,X){try{if(!await x1($))return[];let Z=await $8($),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 s4(J,W,K);Q.push(_)}return Q}catch(Z){return console.error("Error generating component docs:",Z),[]}}async function n4($){try{if(!await x1($))return[];let X=await L5.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(`
|
|
1780
|
+
`).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 o4($=[]){try{let X=[{name:"if",description:"Conditionally render content based on a condition",hasEndTag:!0,example:`@if(user.isLoggedIn)
|
|
1769
1781
|
<p>Welcome, {{ user.name }}!</p>
|
|
1770
1782
|
@endif`},{name:"else",description:"Provides an alternative if a condition is not met",hasEndTag:!1,example:`@if(user.isLoggedIn)
|
|
1771
1783
|
<p>Welcome back!</p>
|
|
@@ -1785,7 +1797,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1785
1797
|
<p>Page {{ page }}</p>
|
|
1786
1798
|
@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
1799
|
{{ 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
|
|
1800
|
+
@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 t4($=[],X=[],Z=[],Q){let Y=`# stx Documentation
|
|
1789
1801
|
|
|
1790
1802
|
`;if(Q)Y+=`${Q}
|
|
1791
1803
|
|
|
@@ -1827,7 +1839,7 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1827
1839
|
|
|
1828
1840
|
`,Y+=`#### Example
|
|
1829
1841
|
|
|
1830
|
-
`,Y+="```html\n",Y+=J.example,Y+="\n```\n\n"}return Y}function
|
|
1842
|
+
`,Y+="```html\n",Y+=J.example,Y+="\n```\n\n"}return Y}function e4($=[],X=[],Z=[],Q){let Y=`<!DOCTYPE html>
|
|
1831
1843
|
<html lang="en">
|
|
1832
1844
|
<head>
|
|
1833
1845
|
<meta charset="UTF-8">
|
|
@@ -1898,15 +1910,15 @@ Press ${B.cyan}h${B.reset} + ${B.cyan}Enter${B.reset} to show shortcuts`),d0(Z1.
|
|
|
1898
1910
|
<td>@${J.name}</td>
|
|
1899
1911
|
<td>${J.description||"-"}</td>
|
|
1900
1912
|
<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 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=
|
|
1913
|
+
</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 $X($=[],X=[],Z=[],Q){return JSON.stringify({components:$,templates:X,directives:Z,extraContent:Q||""},null,2)}async function XX($){try{let{componentsDir:X,templatesDir:Z,webComponentsConfig:Q,customDirectives:Y,config:J}=$;if(!J.enabled)return!1;let G=J.outputDir||"docs";if(await L5.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 r4(X,Q),console.log(`Found ${W.length} components`);let K=[];if(J.templates!==!1&&Z)console.log("Generating template documentation..."),K=await n4(Z),console.log(`Found ${K.length} templates`);let _=[];if(J.directives!==!1)console.log("Generating directive documentation..."),_=await o4(Y),console.log(`Found ${_.length} directives`);let U=J.format||"markdown",F=J.extraContent,z="",j="";switch(U){case"markdown":z=t4(W,K,_,F),j="md";break;case"html":z=e4(W,K,_,F),j="html";break;case"json":z=$X(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 mW($){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 XX({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 iW(){let $=S1();return["cloudflare","deno","vercel","netlify","fastly"].includes($.platform)}function aW(){return S1().platform!=="unknown"}function ZX($){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 QX($){let X=S1();if(X.platform==="cloudflare"&&$)return $;if(X.platform==="deno"&&"Deno"in globalThis)return YX();if(X.platform==="node"||X.platform==="bun")return JX();return}function YX(){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 JX(){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 GX(){let $=S1();if($.platform==="cloudflare"&&"caches"in globalThis)return WX();if($.supportsStreaming)return KX();return}function WX(){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 KX(){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 _X(){return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,9)}`}function UX($,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 F5($,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 N$($){let X=S1();return async(Z,Q)=>{let Y=performance.now(),J=_X(),G={runtime:X,platform:Q||{},requestId:J,geo:UX(Z,X),timing:{start:Y,getElapsed:()=>performance.now()-Y},kv:QX(Q?.KV),cache:GX(),env:ZX(Q?.env)};try{if(Z.method==="OPTIONS"&&$.cors){let K=new Response(null,{status:204});return K=F5(K,$.cors,Z.headers.get("Origin")||void 0),K}if($.cache?.enabled&&Z.method==="GET"&&G.cache){if(X8(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?F5(U,$.cors,Z.headers.get("Origin")||void 0):U}}}let W;if($.middleware&&$.middleware.length>0)W=await BX(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(X8(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=F5(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 X8($,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 BX($,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 sW($,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 rW(){let $=new TextEncoder;return new TransformStream({transform(X,Z){Z.enqueue($.encode(X))}})}function nW($){let X=new TextEncoder;return new ReadableStream({async start(Z){for await(let Q of $)Z.enqueue(X.encode(Q));Z.close()}})}function oW($){let X=N$($);return{async fetch(Z,Q,Y){return X(Z,{env:Q,ctx:Y,KV:Q.KV})}}}function tW($){let X=N$($);return(Z)=>X(Z,{})}function eW($){let X=N$($);return(Z)=>X(Z,{})}function $2($){let X=N$($);return(Z,Q)=>{return X(Z,{netlifyContext:Q})}}function X2($){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 Z2($,X,Z){return z5($,X,Z)}function Q2($,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 Y2($,X=302){return new Response(null,{status:X,headers:{Location:$}})}function J2($="Not Found"){return new Response($,{status:404,headers:{"Content-Type":"text/plain"}})}var Q8={indentSize:2,useTabs:!1,maxLineLength:120,normalizeWhitespace:!0,sortAttributes:!1,trimTrailingWhitespace:!0};function LX($,X={}){let Z={...Q8,...X};if($.trim()==="")return`
|
|
1914
|
+
`;let Q=$;if(Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,"");if(Q=zX(Q,Z),Q=AX(Q,Z),Q=jX(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
1915
|
`).replace(/\r/g,`
|
|
1904
1916
|
`),!Q.endsWith(`
|
|
1905
1917
|
`))Q+=`
|
|
1906
|
-
`;return Q}function
|
|
1918
|
+
`;return Q}function W2($,X={}){let Z={...Q8,...X};if($.trim()==="")return`
|
|
1907
1919
|
`;let Q=$;if(Q=Q.replace(/^( *)```(html|stx)\n([\s\S]*?)^( *)```/gm,(Y,J,G,W,K)=>{let _=W.split(`
|
|
1908
1920
|
`),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=
|
|
1921
|
+
`),H=LX(z,Z).trimEnd().split(`
|
|
1910
1922
|
`).map((L)=>{if(L.trim().length===0)return"";return J+L}).join(`
|
|
1911
1923
|
`);return`${J}\`\`\`${G}
|
|
1912
1924
|
${H}
|
|
@@ -1914,7 +1926,7 @@ ${J}\`\`\``}),Z.trimTrailingWhitespace)Q=Q.replace(/[ \t]+$/gm,"");if(Q=Q.replac
|
|
|
1914
1926
|
`).replace(/\r/g,`
|
|
1915
1927
|
`),!Q.endsWith(`
|
|
1916
1928
|
`))Q+=`
|
|
1917
|
-
`;return Q}function
|
|
1929
|
+
`;return Q}function FX($){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
1930
|
$1
|
|
1919
1931
|
`),X=X.replace(/(@end\w+)/g,`
|
|
1920
1932
|
$1
|
|
@@ -1928,10 +1940,10 @@ ${G}`}),X=X.replace(/(<\/[^>]+>)(?=<|$)/g,(Y,J,G,W)=>{let K=W.substring(Math.max
|
|
|
1928
1940
|
`}),X=X.replace(new RegExp(`${Q}(\\d+)__`,"g"),(Y,J)=>{return Z[Number.parseInt(J,10)]}),X=X.replace(/\n{2,}/g,`
|
|
1929
1941
|
`),X=X.split(`
|
|
1930
1942
|
`).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(
|
|
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
|
|
1943
|
+
`),X=X.replace(/^\n+/,"").replace(/\n+$/,""),X}function zX($,X){let Q=FX($).split(`
|
|
1944
|
+
`),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(Z8(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("@")&&OX(U),A=U.startsWith("<!DOCTYPE")||U.startsWith("<!doctype"),M=U.startsWith("<!--"),V=U.startsWith("</"),N=U.startsWith("<")&&!V&&!M&&!A,q=U.includes("/>")||HX(U),I=Z8(U);if(V||H)J=Math.max(0,J-1);let E=L?Math.max(0,J-1):J;if(j)Y.push(_);else Y.push(W.repeat(E)+U);if(N&&!q&&!I&&!j||O)J++;if(F)G=!0;if(z)G=!1}return Y.join(`
|
|
1945
|
+
`)}function jX($,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 HX($){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 Z8($){return/<(\w+)(?:\s[^>]*)?>[\s\S]*?<\/\1>/.test($)}function OX($){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 AX($,X){if(!X.sortAttributes)return $;return $.replace(/<(\w+)([^>]*)>/g,(Z,Q,Y)=>{if(!Y.trim())return Z;if(Y.includes("<")||Y.includes(`
|
|
1946
|
+
`)||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 Y8 from"fs";import j5 from"path";var B2={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 L2($="index.stx",X={}){try{let Z=X.force||!1,Q=j5.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=j5.dirname(Q);if(!Y8.existsSync(Y))Y8.mkdirSync(Y,{recursive:!0});let J;if(X.template){let G=j5.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=J8(X.preset),console.warn(`Using '${X.preset}' preset template`);else J=J8("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 J8($){switch($){case"basic":return G8();case"component":return NX();case"layout":return qX();case"blog":return MX();case"api":return VX();case"app":return EX();default:return G8()}}function G8(){return`<script>
|
|
1935
1947
|
const title = "My stx Page"
|
|
1936
1948
|
const description = "A page built with stx"
|
|
1937
1949
|
const features = [
|
|
@@ -1956,7 +1968,7 @@ const features = [
|
|
|
1956
1968
|
</div>
|
|
1957
1969
|
@endforeach
|
|
1958
1970
|
</main>
|
|
1959
|
-
@endsection`}function
|
|
1971
|
+
@endsection`}function NX(){return`{{-- Component: Card --}}
|
|
1960
1972
|
{{-- Props: title, variant, collapsible --}}
|
|
1961
1973
|
{{-- Usage: @component('card', { title: "Hello", variant: "primary", collapsible: true }) Content @endcomponent --}}
|
|
1962
1974
|
<script>
|
|
@@ -2001,7 +2013,7 @@ const features = [
|
|
|
2001
2013
|
.card.collapsed .card__toggle { transform: rotate(-90deg); }
|
|
2002
2014
|
.card__body { padding: 1rem; }
|
|
2003
2015
|
.card.collapsed .card__body { display: none; }
|
|
2004
|
-
</style>`}function
|
|
2016
|
+
</style>`}function qX(){return`<!DOCTYPE html>
|
|
2005
2017
|
<html lang="en">
|
|
2006
2018
|
<head>
|
|
2007
2019
|
<meta charset="UTF-8">
|
|
@@ -2052,7 +2064,7 @@ const features = [
|
|
|
2052
2064
|
|
|
2053
2065
|
@yield('scripts')
|
|
2054
2066
|
</body>
|
|
2055
|
-
</html>`}function
|
|
2067
|
+
</html>`}function MX(){return`<script>
|
|
2056
2068
|
// Article metadata
|
|
2057
2069
|
const title = "My Blog Post"
|
|
2058
2070
|
const author = "Your Name"
|
|
@@ -2097,7 +2109,7 @@ const features = [
|
|
|
2097
2109
|
<p>Wrap up your thoughts here.</p>
|
|
2098
2110
|
</div>
|
|
2099
2111
|
</article>
|
|
2100
|
-
@endsection`}function
|
|
2112
|
+
@endsection`}function VX(){return`<script>
|
|
2101
2113
|
// API endpoint configuration
|
|
2102
2114
|
const endpoint = "/api/data"
|
|
2103
2115
|
const method = "GET"
|
|
@@ -2132,7 +2144,7 @@ const features = [
|
|
|
2132
2144
|
}
|
|
2133
2145
|
@else
|
|
2134
2146
|
{{ JSON.stringify(data, null, 2) }}
|
|
2135
|
-
@endif`}function
|
|
2147
|
+
@endif`}function EX(){return`<!DOCTYPE html>
|
|
2136
2148
|
<html lang="en">
|
|
2137
2149
|
<head>
|
|
2138
2150
|
<meta charset="UTF-8">
|
|
@@ -2357,8 +2369,8 @@ const features = [
|
|
|
2357
2369
|
})();
|
|
2358
2370
|
</script>
|
|
2359
2371
|
</body>
|
|
2360
|
-
</html>`}import{createHash as
|
|
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=
|
|
2372
|
+
</html>`}import{createHash as IX}from"crypto";import{existsSync as P1,mkdirSync as RX,readFileSync as H5,writeFileSync as DX,readdirSync as wX,statSync as TX}from"fs";import{basename as b1,dirname as b0,extname as y1,join as C0,relative as W8}from"path";import{gzipSync as CX}from"zlib";var K8={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 O5{config;startTime=0;outputs=[];chunks=[];assets=[];warnings=[];errors=[];moduleGraph=new Map;assetHashes=new Map;constructor($){this.config={...K8,...$}}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=H5(_,"utf-8");Q.push(`// Source: ${K[1]}
|
|
2373
|
+
${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=H5(_,"utf-8");Y.push(`/* Source: ${K[1]} */
|
|
2362
2374
|
${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
2375
|
|
|
2364
2376
|
`),G=this.generateHash(J).slice(0,8),W=`assets/app.${G}.js`,K=C0(this.config.outDir,W);this.ensureDir(b0(K)),await Bun.write(K,J),this.outputs.push({path:K,type:"js",size:Buffer.byteLength(J),hash:G,sources:[X]});let _=Z.lastIndexOf("</body>");if(_!==-1)Z=Z.slice(0,_)+`<script src="${this.config.publicPath}${W}"></script>
|
|
@@ -2366,7 +2378,7 @@ ${U}`)}else this.warnings.push(`External stylesheet not found: ${_}`)}return""})
|
|
|
2366
2378
|
|
|
2367
2379
|
`),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
2380
|
</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=
|
|
2381
|
+
`),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=H5(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(_)),DX(_,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:TX(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=W8(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=CX(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:W8(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
2382
|
\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
2383
|
<html>
|
|
2372
2384
|
<head>
|
|
@@ -2407,14 +2419,14 @@ ${U}`)}else this.warnings.push(`External stylesheet not found: ${_}`)}return""})
|
|
|
2407
2419
|
</table>
|
|
2408
2420
|
</body>
|
|
2409
2421
|
</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
|
|
2411
|
-
Installing dependencies with ${W}...`),
|
|
2422
|
+
`)}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 IX("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($))RX($,{recursive:!0})}walkDir($,X){if(!P1($))return;let Z=wX($,{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 N2($){return new O5($).build()}function q2($){return new O5($)}function M2($){return{...K8,...$}}function kX($){return $}var I2="f9c3713";import{existsSync as v1,mkdirSync as A5}from"fs";import{join as p0,dirname as xX}from"path";import{execSync as _8}from"child_process";var k2={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 x2($,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{A5(Y,{recursive:!0});let J=SX(Q);for(let W of J)A5(p0(Y,W),{recursive:!0});let G=PX(Q,$,X);for(let[W,K]of Object.entries(G)){let _=p0(Y,W);g1(xX(_)),await Bun.write(_,K),Z.files.push(W)}if(!X.skipGit)try{_8("git init",{cwd:Y,stdio:"ignore"}),await Bun.write(p0(Y,".gitignore"),mX()),Z.files.push(".gitignore")}catch{Z.errors.push("Failed to initialize git repository")}if(!X.skipInstall){let W=X.packageManager||_Z();try{console.log(`
|
|
2423
|
+
Installing dependencies with ${W}...`),_8(`${W} install`,{cwd:Y,stdio:"inherit"})}catch{Z.errors.push("Failed to install dependencies")}}Z.message=`Created project: ${$}`,console.log(`
|
|
2412
2424
|
\u2705 ${Z.message}
|
|
2413
2425
|
|
|
2414
2426
|
Next steps:
|
|
2415
2427
|
cd ${$}
|
|
2416
2428
|
${X.packageManager||"bun"} run dev
|
|
2417
|
-
`)}catch(J){Z.success=!1,Z.message=`Failed to create project: ${J}`}return Z}function
|
|
2429
|
+
`)}catch(J){Z.success=!1,Z.message=`Failed to create project: ${J}`}return Z}function SX($){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 PX($,X,Z){let Q={};if(Q["package.json"]=fX(X,$,Z),Q["stx.config.ts"]=hX($,Z),Q["README.md"]=uX(X,$),Z.typescript!==!1)Q["tsconfig.json"]=dX();switch($){case"minimal":Q["src/index.stx"]=pX();break;case"blog":Q["pages/index.stx"]=aX(),Q["pages/[slug].stx"]=sX(),Q["layouts/app.stx"]=rX(),Q["components/PostCard.stx"]=nX();break;case"dashboard":Q["pages/index.stx"]=oX(),Q["pages/settings.stx"]=tX(),Q["layouts/app.stx"]=eX(),Q["components/Sidebar.stx"]=$Z(),Q["components/StatsCard.stx"]=XZ(),Q["src/stores/dashboard.ts"]=ZZ();break;case"landing":Q["pages/index.stx"]=QZ(),Q["layouts/app.stx"]=YZ(),Q["src/sections/Hero.stx"]=JZ(),Q["src/sections/Features.stx"]=GZ(),Q["src/sections/Pricing.stx"]=WZ(),Q["components/Button.stx"]=KZ();break;case"full":Q["pages/index.stx"]=U8(),Q["pages/about.stx"]=cX(),Q["layouts/app.stx"]=B8(),Q["components/Header.stx"]=L8(),Q["components/Footer.stx"]=F8(),Q["src/stores/app.ts"]=z8(),Q["src/i18n/en.json"]=lX("en"),Q["test/example.test.ts"]=iX();break;default:Q["pages/index.stx"]=U8(),Q["layouts/app.stx"]=B8(),Q["components/Header.stx"]=L8(),Q["components/Footer.stx"]=F8(),Q["src/stores/app.ts"]=z8()}return Q}async function S2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"components",Y=N5($),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=bX(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 P2($,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=yX(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 b2($,X={}){let Z={success:!0,message:"",files:[],errors:[]},Q=X.dir||"src/stores",Y=UZ($),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=vX(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 y2($,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=gX(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 bX($,X){let Z=[];if(Z.push(`{{-- Component: ${$} --}}`),X.props!==!1)Z.push(`<script>
|
|
2418
2430
|
// Props
|
|
2419
2431
|
const title = props.title || '${$}'
|
|
2420
2432
|
const variant = props.variant || 'default'
|
|
@@ -2444,7 +2456,7 @@ const variant = props.variant || 'default'
|
|
|
2444
2456
|
margin-top: 0.5rem;
|
|
2445
2457
|
}
|
|
2446
2458
|
</style>`);return Z.join(`
|
|
2447
|
-
`)}function
|
|
2459
|
+
`)}function yX($,X){let Z=N5($.replace(/-/g," ")),Q=[];if(Q.push(`<script>
|
|
2448
2460
|
const title = '${Z}'
|
|
2449
2461
|
const description = 'Page description'
|
|
2450
2462
|
</script>
|
|
@@ -2457,7 +2469,7 @@ const description = 'Page description'
|
|
|
2457
2469
|
<p>{{ description }}</p>
|
|
2458
2470
|
</div>
|
|
2459
2471
|
@endsection`),Q.join(`
|
|
2460
|
-
`)}function
|
|
2472
|
+
`)}function vX($,X){let Z=`${$}Store`,Q=`${N5($)}State`,Y=`import { defineStore } from 'stx'
|
|
2461
2473
|
|
|
2462
2474
|
interface ${Q} {
|
|
2463
2475
|
// Add your state properties here
|
|
@@ -2505,7 +2517,7 @@ finally {
|
|
|
2505
2517
|
],
|
|
2506
2518
|
},
|
|
2507
2519
|
`;return Y+=`})
|
|
2508
|
-
`,Y}function
|
|
2520
|
+
`,Y}function gX($,X){let Z=`<!DOCTYPE html>
|
|
2509
2521
|
<html lang="en">
|
|
2510
2522
|
<head>
|
|
2511
2523
|
<meta charset="UTF-8">
|
|
@@ -2552,7 +2564,7 @@ finally {
|
|
|
2552
2564
|
|
|
2553
2565
|
`;return Z+=` @yield('scripts')
|
|
2554
2566
|
</body>
|
|
2555
|
-
</html>`,Z}function
|
|
2567
|
+
</html>`,Z}function fX($,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 hX($,X){return`import { defineConfig } from 'stx'
|
|
2556
2568
|
|
|
2557
2569
|
export default defineConfig({
|
|
2558
2570
|
// Template directories
|
|
@@ -2573,7 +2585,7 @@ ${X.pwa?` pwa: { enabled: true },
|
|
|
2573
2585
|
// Analytics (configure when ready)
|
|
2574
2586
|
// analytics: { enabled: true, driver: 'fathom', fathom: { siteId: 'YOUR_SITE_ID' } },
|
|
2575
2587
|
})
|
|
2576
|
-
`}function
|
|
2588
|
+
`}function dX(){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 uX($,X){return`# ${$}
|
|
2577
2589
|
|
|
2578
2590
|
A stx project created with the \`${X}\` template.
|
|
2579
2591
|
|
|
@@ -2605,7 +2617,7 @@ src/
|
|
|
2605
2617
|
|
|
2606
2618
|
- [stx Documentation](https://stx.dev/docs)
|
|
2607
2619
|
- [stx GitHub](https://github.com/stacksjs/stx)
|
|
2608
|
-
`}function
|
|
2620
|
+
`}function mX(){return`# Dependencies
|
|
2609
2621
|
node_modules/
|
|
2610
2622
|
.bun/
|
|
2611
2623
|
|
|
@@ -2630,7 +2642,7 @@ Thumbs.db
|
|
|
2630
2642
|
|
|
2631
2643
|
# Logs
|
|
2632
2644
|
*.log
|
|
2633
|
-
`}function
|
|
2645
|
+
`}function pX(){return`<!DOCTYPE html>
|
|
2634
2646
|
<html lang="en">
|
|
2635
2647
|
<head>
|
|
2636
2648
|
<meta charset="UTF-8">
|
|
@@ -2646,7 +2658,7 @@ Thumbs.db
|
|
|
2646
2658
|
<p>Edit <code>src/index.stx</code> to get started.</p>
|
|
2647
2659
|
</body>
|
|
2648
2660
|
</html>
|
|
2649
|
-
`}function
|
|
2661
|
+
`}function U8(){return`<script>
|
|
2650
2662
|
const title = 'Welcome to stx'
|
|
2651
2663
|
const features = [
|
|
2652
2664
|
{ icon: '\u26A1', name: 'Fast', desc: 'Built on Bun for blazing speed' },
|
|
@@ -2675,7 +2687,7 @@ const features = [
|
|
|
2675
2687
|
@endforeach
|
|
2676
2688
|
</div>
|
|
2677
2689
|
@endsection
|
|
2678
|
-
`}function
|
|
2690
|
+
`}function cX(){return`<script>
|
|
2679
2691
|
const title = 'About'
|
|
2680
2692
|
</script>
|
|
2681
2693
|
|
|
@@ -2687,7 +2699,7 @@ const title = 'About'
|
|
|
2687
2699
|
<h1>{{ title }}</h1>
|
|
2688
2700
|
<p>This is the about page.</p>
|
|
2689
2701
|
@endsection
|
|
2690
|
-
`}function
|
|
2702
|
+
`}function B8(){return`<!DOCTYPE html>
|
|
2691
2703
|
<html lang="en">
|
|
2692
2704
|
<head>
|
|
2693
2705
|
<meta charset="UTF-8">
|
|
@@ -2710,7 +2722,7 @@ const title = 'About'
|
|
|
2710
2722
|
@yield('scripts')
|
|
2711
2723
|
</body>
|
|
2712
2724
|
</html>
|
|
2713
|
-
`}function
|
|
2725
|
+
`}function L8(){return`<header class="header">
|
|
2714
2726
|
<nav class="nav container">
|
|
2715
2727
|
<a href="/" class="logo">stx</a>
|
|
2716
2728
|
<div class="nav-links">
|
|
@@ -2727,7 +2739,7 @@ const title = 'About'
|
|
|
2727
2739
|
.nav-links a { color: rgba(255,255,255,0.8); margin-left: 1.5rem; text-decoration: none; }
|
|
2728
2740
|
.nav-links a:hover { color: white; }
|
|
2729
2741
|
</style>
|
|
2730
|
-
`}function
|
|
2742
|
+
`}function F8(){return`<footer class="footer">
|
|
2731
2743
|
<div class="container">
|
|
2732
2744
|
<p>© {{ new Date().getFullYear() }} Built with stx</p>
|
|
2733
2745
|
</div>
|
|
@@ -2736,7 +2748,7 @@ const title = 'About'
|
|
|
2736
2748
|
<style scoped>
|
|
2737
2749
|
.footer { background: #f8f9fa; padding: 2rem 0; margin-top: 4rem; text-align: center; color: #666; }
|
|
2738
2750
|
</style>
|
|
2739
|
-
`}function
|
|
2751
|
+
`}function z8(){return`import { defineStore } from 'stx'
|
|
2740
2752
|
|
|
2741
2753
|
interface AppState {
|
|
2742
2754
|
theme: 'light' | 'dark'
|
|
@@ -2763,14 +2775,14 @@ export const appStore = defineStore('app', {
|
|
|
2763
2775
|
strategies: [{ key: 'app-preferences', storage: localStorage }],
|
|
2764
2776
|
},
|
|
2765
2777
|
})
|
|
2766
|
-
`}function
|
|
2778
|
+
`}function lX($){return JSON.stringify({common:{welcome:"Welcome",home:"Home",about:"About",contact:"Contact"},messages:{loading:"Loading...",error:"An error occurred"}},null,2)}function iX(){return`import { describe, expect, it } from 'bun:test'
|
|
2767
2779
|
|
|
2768
2780
|
describe('Example', () => {
|
|
2769
2781
|
it('should work', () => {
|
|
2770
2782
|
expect(1 + 1).toBe(2)
|
|
2771
2783
|
})
|
|
2772
2784
|
})
|
|
2773
|
-
`}function
|
|
2785
|
+
`}function aX(){return"<!-- Blog index -->"}function sX(){return"<!-- Blog post -->"}function rX(){return`<!DOCTYPE html>
|
|
2774
2786
|
<html lang="en">
|
|
2775
2787
|
<head>
|
|
2776
2788
|
<meta charset="UTF-8">
|
|
@@ -2810,7 +2822,7 @@ describe('Example', () => {
|
|
|
2810
2822
|
</footer>
|
|
2811
2823
|
@yield('scripts')
|
|
2812
2824
|
</body>
|
|
2813
|
-
</html>`}function
|
|
2825
|
+
</html>`}function nX(){return"<!-- Post card -->"}function oX(){return"<!-- Dashboard index -->"}function tX(){return"<!-- Settings -->"}function eX(){return`<!DOCTYPE html>
|
|
2814
2826
|
<html lang="en">
|
|
2815
2827
|
<head>
|
|
2816
2828
|
<meta charset="UTF-8">
|
|
@@ -2846,7 +2858,7 @@ describe('Example', () => {
|
|
|
2846
2858
|
</div>
|
|
2847
2859
|
@yield('scripts')
|
|
2848
2860
|
</body>
|
|
2849
|
-
</html>`}function
|
|
2861
|
+
</html>`}function $Z(){return"<!-- Sidebar -->"}function XZ(){return"<!-- Stats card -->"}function ZZ(){return"// Dashboard store"}function QZ(){return"<!-- Landing page -->"}function YZ(){return`<!DOCTYPE html>
|
|
2850
2862
|
<html lang="en">
|
|
2851
2863
|
<head>
|
|
2852
2864
|
<meta charset="UTF-8">
|
|
@@ -2881,17 +2893,17 @@ describe('Example', () => {
|
|
|
2881
2893
|
</footer>
|
|
2882
2894
|
@yield('scripts')
|
|
2883
2895
|
</body>
|
|
2884
|
-
</html>`}function
|
|
2896
|
+
</html>`}function JZ(){return"<!-- Hero section -->"}function GZ(){return"<!-- Features -->"}function WZ(){return"<!-- Pricing -->"}function KZ(){return"<!-- Button -->"}function g1($){if(!v1($))A5($,{recursive:!0})}function _Z(){if(v1("bun.lockb"))return"bun";if(v1("pnpm-lock.yaml"))return"pnpm";if(v1("yarn.lock"))return"yarn";return"bun"}function N5($){return $.replace(/[-_\s]+(.)?/g,(X,Z)=>Z?Z.toUpperCase():"").replace(/^./,(X)=>X.toUpperCase())}function UZ($){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:BZ}=globalThis.Bun;import f1 from"fs";import I0 from"path";function a2($,X=200,Z={}){return new Response($,{status:X,headers:{"Content-Type":"text/html; charset=utf-8",...Z}})}async function q5($){let{loadStxConfig:X}=await import("./chunk-3pggfwbf.js");return{...await X($.configDir??process.cwd()),...$.stxOptions??{}}}async function LZ($={}){let{port:X=3000,root:Z=".",watch:Q=!0,onRequest:Y,routes:J={},middleware:G=[],on404:W,onError:K}=$,_=I0.resolve(Z),U=await q5($),F=I0.resolve($.configDir??process.cwd()),z=await M5(F,U.serverApi),j=new Map;async function H(N){let q=f1.statSync(N),I=`${N}:${q.mtimeMs}`,E=j.get(I);if(E)return{content:E.content,status:E.status,headers:E.headers};for(let W0 of j.keys())if(W0.startsWith(`${N}:`)&&W0!==I)j.delete(W0);let w=await Bun.file(N).text(),D=w,T=K$(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:N,__dirname:I0.dirname(N),__stx_options:U};for(let W0 of v)await M0(W0,G0,N);let z0=await V0(H0,G0,N,U,new Set);if(k.length>0){let W0=k.join(`
|
|
2885
2897
|
`);if(z0.match(/(<\/head>)/i))z0=z0.replace(/(<\/head>)/i,`${W0}
|
|
2886
|
-
$1`)}if(c.length>0){let{interpolateScriptsInTemplate:W0}=await import("./chunk-
|
|
2898
|
+
$1`)}if(c.length>0){let{interpolateScriptsInTemplate:W0}=await import("./chunk-1xts7768.js"),R=W0(c.join(`
|
|
2887
2899
|
`),G0);if(z0.match(/(<\/body>)/i))z0=z0.replace(/(<\/body>)/i,`${R}
|
|
2888
2900
|
$1`);else z0+=`
|
|
2889
|
-
${R}`}let Z1=T1(G0),
|
|
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
|
|
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
|
|
2901
|
+
${R}`}let Z1=T1(G0),i$=C1(G0);return j.set(I,{content:z0,mtime:q.mtimeMs,status:Z1,headers:i$}),{content:z0,status:Z1,headers:i$}}async function L(N){let q=f1.statSync(N),I=`${N}:${q.mtimeMs}`,E=j.get(I);if(E)return E.content;let{content:w}=await T0(N,U);return j.set(I,{content:w,mtime:q.mtimeMs}),w}function O(N){let q=N.startsWith("/")?N.slice(1):N,I=[q,`${q}.stx`,`${q}.md`,`${q}.html`,I0.join(q,"index.stx"),I0.join(q,"index.md"),I0.join(q,"index.html")];for(let E of[_,...U._layerPageDirs??[]])for(let w of I){let D=I0.resolve(E,w);if(!D.startsWith(`${I0.resolve(E)}${I0.sep}`))continue;if(f1.existsSync(D)&&f1.statSync(D).isFile())return D}return null}async function A(N){if(U._layerGraph){let E=await q5($);if(E._layerGraph!==U._layerGraph)Object.assign(U,E),j.clear()}let q=new URL(N.url),I=async()=>{if(J[q.pathname])return await J[q.pathname](N);if(Y){let D=await Y(N);if(D)return D}if(U.apiRouter){let D=await U.apiRouter.handleRequest(N);if(D.status!==404)return D}if(U.apiRoutes?.[q.pathname])return U.apiRoutes[q.pathname](N);let E=await z(N);if(E)return E;let w=O(q.pathname);if(!w||j8(w,F,U.serverApi)){if(W)return await W(N);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,N);let T=D instanceof Error?D.message:String(D),c=U?.debug===!0?`<h1>Error</h1><pre>${T}
|
|
2902
|
+
${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 E=G.length-1;E>=0;E--){let w=G[E],D=I;I=async()=>await w(N,D)}return await I()}let M=BZ({port:X,fetch:async(N)=>z$(N,await A(N))}),V=null;if(Q)V=f1.watch(_,{recursive:!0},(N,q)=>{if(q&&(q.endsWith(".stx")||q.endsWith(".md")||q.endsWith(".html")))j.clear()});return{server:M,url:M.url.toString(),stop(){if(V)V.close();M.stop()}}}async function s2($,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 q5(X);return await LZ({...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(`
|
|
2903
|
+
`),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 FZ($){return $}function zZ($){return $}import{existsSync as jZ,readFileSync as HZ}from"fs";var OZ={strict:!1,allowAny:!0,checkPropertyAccess:!0,checkFunctionCalls:!0,includeBuiltins:!0},H8={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 O8{options;variables=new Map;errors=[];warnings=[];currentFile="";constructor($={}){if(this.options={...OZ,...$},this.options.includeBuiltins)Object.entries(H8).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=[],!jZ($))return this.errors.push({message:`File not found: ${$}`,file:$,line:0,column:0,expression:"",severity:"error"}),this.getResult();let X=HZ($,"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
2904
|
`),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(
|
|
2894
|
-
`)}var
|
|
2905
|
+
`);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(H8).forEach(([$,X])=>{this.variables.set($,X)})}}function A8($){return new O8($)}function o2($,X){return A8(X).checkFile($)}function t2($,X){return A8(X).checkTemplate($)}function e2($){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(`
|
|
2906
|
+
`)}var E5=typeof window<"u"&&typeof document<"u";async function V5($,X,Z){if(!E5)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 XK($){if(!E5)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")V5(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")V5(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")V5(Q,Y,$[Y])})},1000)}function ZK($){if(!E5)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",R5={color:"#6366f1",initialColor:"",height:"3px",duration:2000,throttle:200,autoFinish:!0,zIndex:999999},F0=null,k0=0,h1=!1,I5=null,F1=null,y0=null;function N8($){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
2907
|
position: fixed;
|
|
2896
2908
|
top: 0;
|
|
2897
2909
|
left: 0;
|
|
@@ -2922,7 +2934,7 @@ ${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An err
|
|
|
2922
2934
|
0% { transform: translateX(-100%); }
|
|
2923
2935
|
100% { transform: translateX(100%); }
|
|
2924
2936
|
}
|
|
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),
|
|
2937
|
+
`,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),I5)cancelAnimationFrame(I5);I5=requestAnimationFrame(()=>{if(!F0)return;F0.style.opacity=k0>0?"1":"0",F0.style.transform=`scaleX(${k0/100})`})}function AZ($){if(!z1)return;if(h1=!0,k0=0,!F0)F0=N8($);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 NZ($){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 qZ(){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 MZ($){let X={...R5,...$};return{start:()=>AZ(X),set:(Z)=>q$(Z,X),finish:()=>NZ(X),clear:()=>qZ(),get state(){return{isLoading:h1,progress:k0,error:!1}}}}var $1=null;function YK($){if(!z1)return;if($1)$1(),$1=null;let X={...R5,...$},Z=MZ(X);F0=N8(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 JK(){if($1)$1(),$1=null}function GK($){let X={...R5,...$},Z=X.initialColor?`linear-gradient(to right, ${X.initialColor}, ${X.color})`:X.color;return`
|
|
2926
2938
|
<div id="stx-loading-indicator" style="
|
|
2927
2939
|
position: fixed;
|
|
2928
2940
|
top: 0;
|
|
@@ -3016,11 +3028,11 @@ ${D instanceof Error?D.stack:""}</pre>`:"<h1>Internal Server Error</h1><p>An err
|
|
|
3016
3028
|
window.addEventListener('load', function() { window.stxLoading.finish(); });
|
|
3017
3029
|
})();
|
|
3018
3030
|
</script>
|
|
3019
|
-
`}function
|
|
3031
|
+
`}function KK($,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 q8{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 M8{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 q8(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
3032
|
return (async function() {
|
|
3021
3033
|
${$}
|
|
3022
3034
|
})()
|
|
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
|
|
3035
|
+
`;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 UK($){return`
|
|
3024
3036
|
<script data-stx-hmr-client>
|
|
3025
3037
|
(function() {
|
|
3026
3038
|
'use strict';
|
|
@@ -3247,7 +3259,7 @@ else {
|
|
|
3247
3259
|
};
|
|
3248
3260
|
})();
|
|
3249
3261
|
</script>
|
|
3250
|
-
`}function
|
|
3262
|
+
`}function BK($,X,Z,Q){return`
|
|
3251
3263
|
<div data-stx-component="${$}" data-stx-name="${X}">
|
|
3252
3264
|
${Z}
|
|
3253
3265
|
</div>
|
|
@@ -3287,8 +3299,8 @@ else {
|
|
|
3287
3299
|
observer.observe(document.body, { childList: true, subtree: true });
|
|
3288
3300
|
})();
|
|
3289
3301
|
</script>
|
|
3290
|
-
`}var j1=null;function
|
|
3291
|
-
${$?
|
|
3302
|
+
`}var j1=null;function LK($){if(!j1)j1=new M8($);return j1}function FK(){if(j1)j1.getRegistry().clear(),j1=null}function VZ($){let X={refs:$.refs||{},reactive:$.reactive||{},props:$.props||{},routeParams:$.routeParams||{},stores:$.stores||{},meta:$.meta||{},timestamp:Date.now()};return X.checksum=E8(X),JSON.stringify(X).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026").replace(/'/g,"\\u0027")}function E8($){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 EZ($){return`<script id="__STX_STATE__" type="application/json">${VZ($)}</script>`}function HK($){if($.length===0)return"";return`data-stx-events='${JSON.stringify($)}'`}function IZ(){if(typeof window>"u")return null;let $=document.getElementById("__STX_STATE__");if(!$)return null;try{let X=JSON.parse($.textContent||"{}");if(X.checksum){if(E8(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 I8{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=IZ(),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(V8(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 OK($){return`
|
|
3303
|
+
${$?EZ($):""}
|
|
3292
3304
|
<script data-stx-hydration-runtime>
|
|
3293
3305
|
(function() {
|
|
3294
3306
|
'use strict';
|
|
@@ -3385,7 +3397,7 @@ else {
|
|
|
3385
3397
|
}
|
|
3386
3398
|
})();
|
|
3387
3399
|
</script>
|
|
3388
|
-
`}var
|
|
3400
|
+
`}var D5=null;function RZ($){if(!D5)D5=new I8($);return D5}async function AK($){await RZ($).hydrate()}function NK(){return`
|
|
3389
3401
|
<style data-stx-hydration-styles>
|
|
3390
3402
|
/* Pre-hydration state */
|
|
3391
3403
|
[data-stx-component]:not(.stx-hydrated) {
|
|
@@ -3418,9 +3430,9 @@ else {
|
|
|
3418
3430
|
}
|
|
3419
3431
|
}
|
|
3420
3432
|
</style>
|
|
3421
|
-
`}import
|
|
3433
|
+
`}import R8 from"path";w6();class DZ{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 wZ($,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 TK($,X={},Z={}){let Q=Z.viewsDir||"./views",Y=Z.layoutsDir||"./layouts",J=!$.includes("<")&&!$.includes("@"),G,W;if(J){if(W=R8.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:R8.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)wZ(Z.ctx.responseHeaders,j);return new Response(z,{headers:j})}var d1={stores:new Map,subscriptions:new Map};function TZ($,X){d1.stores.set($,X)}function w8($){return d1.stores.get($)}function CZ($){return d1.stores.has($)}function kZ(){return Array.from(d1.stores.keys())}var H1=new Map;function D8($){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 xZ($,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 T8($,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=D8(Q.storage||"local"),A=Q.key||`stx-store:${Z||"unnamed"}`,M=Q.deserialize||JSON.parse;try{let V=O.getItem(A);if(V){let N=M(V);if(Q.paths&&typeof N==="object"&&N!==null)W={...$,...N};else W=N}}catch{}}let U=(O)=>{if(!Q)return;let A=D8(Q.storage||"local"),M=Q.key||`stx-store:${Z||"unnamed"}`,V=Q.serialize||JSON.stringify,N=Q.paths&&typeof O==="object"&&O!==null?xZ(O,Q.paths):O;if(Q.debounce){if(_)clearTimeout(_);_=setTimeout(()=>{A.setItem(M,V(N))},Q.debounce)}else A.setItem(M,V(N))},F=(O,A)=>{for(let M of K)try{M(O,A)}catch(V){console.error("[stx-store] Subscriber error:",V)}},z=Y?(O,A)=>{if(o6(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(TZ(Z,L),Y)n6(Z,W??{},{},[])}return L}function SZ($){let X=typeof $==="string"?w8($):$;if(!X)throw Error(`Store "${$}" not found`);return X.get()}function PZ($,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=T8(_,{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 V={...F.get()};A(V),F.set(V)}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 bZ.set($,z),z}var bZ=new Map;function yZ($){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 C8($){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 w5(...$){let X={};for(let Z of $)if(Z)Object.assign(X,Z);return X}function k8($,X,Z,Q){let Y={w:X};if(Z)Y.h=Z;if(Q)Y.fit=Q;return l($,Y)}function x8($,X,Z,Q="center"){return l($,{w:X,h:Z,fit:"crop",crop:Q})}function S8($,X,Z="center"){return l($,{w:X,h:X,fit:"crop",crop:Z})}function P8($,X,Z){return l($,{w:X,h:Z,fit:"max"})}function b8($,X,Z){return l($,{w:X,h:Z,fit:"crop"})}function y8($,X){return l($,{blur:Math.min(2000,Math.max(0,X))})}function v8($,X){return l($,{sharp:Math.min(100,Math.max(0,X))})}function g8($){return l($,{sat:-100})}function f8($,X=100){return l($,{sepia:Math.min(100,Math.max(0,X))})}function h8($){return l($,{invert:!0})}function d8($,X){return l($,{bri:Math.min(100,Math.max(-100,X))})}function u8($,X){return l($,{con:Math.min(100,Math.max(-100,X))})}function m8($,X){return l($,{sat:Math.min(100,Math.max(-100,X))})}function p8($,X){return l($,{rot:(X%360+360)%360})}function c8($){return l($,{flip:"h"})}function l8($){return l($,{flip:"v"})}function i8($,X,Z){let Q={fm:X};if(Z!==void 0)Q.q=Z;return l($,Q)}function a8($,X){return l($,{q:Math.min(100,Math.max(1,X))})}function s8($,X=["format","compress"]){return l($,{auto:X})}function r8($,X,Z={}){return l($,{mark:X,markx:Z.x,marky:Z.y,markalpha:Z.alpha,markscale:Z.scale,markalign:Z.align})}var T5={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 n8($,X,Z){return l($,w5(T5[X],Z))}function o8($,X,Z){return X.map((Q)=>l($,{...Z,w:Q}))}function t8($,X,Z=[1,2,3],Q){return Z.map((Y)=>l($,{...Q,w:Math.round(X*Y),dpr:Y}))}function e8($){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 $7($){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 Z7($){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,M=`
|
|
3422
3434
|
<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">${
|
|
3435
|
+
${j?`<label class="stx-upload-label">${X7(j)}</label>`:""}
|
|
3424
3436
|
<div class="stx-upload-area" data-stx-upload-area>
|
|
3425
3437
|
<input
|
|
3426
3438
|
type="file"
|
|
@@ -3435,14 +3447,14 @@ else {
|
|
|
3435
3447
|
<svg class="stx-upload-icon" viewBox="0 0 24 24" width="48" height="48">
|
|
3436
3448
|
<path fill="currentColor" d="M9 16h6v-6h4l-7-7-7 7h4v6zm-4 2h14v2H5v-2z"/>
|
|
3437
3449
|
</svg>
|
|
3438
|
-
<span class="stx-upload-text">${
|
|
3439
|
-
${Q?`<span class="stx-upload-hint">Max size: ${
|
|
3450
|
+
<span class="stx-upload-text">${X7(z)}</span>
|
|
3451
|
+
${Q?`<span class="stx-upload-hint">Max size: ${EQ(Q)}</span>`:""}
|
|
3440
3452
|
</div>
|
|
3441
3453
|
</div>
|
|
3442
3454
|
${G?'<div class="stx-upload-previews" data-stx-upload-previews></div>':""}
|
|
3443
3455
|
${U?'<div class="stx-upload-progress" data-stx-upload-progress style="display:none;"><div class="stx-upload-progress-bar"></div><span class="stx-upload-progress-text">0%</span></div>':""}
|
|
3444
3456
|
</div>
|
|
3445
|
-
`.trim(),
|
|
3457
|
+
`.trim(),V=`
|
|
3446
3458
|
(function() {
|
|
3447
3459
|
var container = document.getElementById('${O}');
|
|
3448
3460
|
if (!container) return;
|
|
@@ -3455,7 +3467,7 @@ else {
|
|
|
3455
3467
|
var progressText = progress ? progress.querySelector('.stx-upload-progress-text') : null;
|
|
3456
3468
|
|
|
3457
3469
|
var config = {
|
|
3458
|
-
endpoint: '${
|
|
3470
|
+
endpoint: '${VQ(X)}',
|
|
3459
3471
|
fieldName: '${J}',
|
|
3460
3472
|
maxSize: ${Q||"null"},
|
|
3461
3473
|
maxFiles: ${Y},
|
|
@@ -3577,7 +3589,7 @@ else {
|
|
|
3577
3589
|
return '\uD83D\uDCC1';
|
|
3578
3590
|
}
|
|
3579
3591
|
})();
|
|
3580
|
-
`.trim(),
|
|
3592
|
+
`.trim(),N=`
|
|
3581
3593
|
.stx-upload {
|
|
3582
3594
|
font-family: system-ui, -apple-system, sans-serif;
|
|
3583
3595
|
}
|
|
@@ -3707,7 +3719,7 @@ else {
|
|
|
3707
3719
|
opacity: 0.5;
|
|
3708
3720
|
pointer-events: none;
|
|
3709
3721
|
}
|
|
3710
|
-
`.trim();return{html:
|
|
3722
|
+
`.trim();return{html:M,script:V,css:N}}function X7($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function VQ($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'")}function EQ($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(1)} KB`;return`${($/1048576).toFixed(1)} MB`}async function C5($,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 k5($,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 Q7($,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)=>k5(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 x5($){return $.expires>Date.now()}function S5($){return Math.max(0,$.expires-Date.now())}function P5($,X=300000){return S5($)<X}async function m1($){if($.check)return await $.check();return!0}function M$($){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 Y7($,X){let Z=`${$}:${X.endpoint}`,Q=u1.get(Z);if(Q&&x5(Q)&&!P5(Q))return Q;let Y=await C5($,X);return u1.set(Z,Y),Y}function J7(){u1.clear()}function G7(){let $=0,X=Date.now();for(let[Z,Q]of u1)if(Q.expires<=X)u1.delete(Z),$++;return $}function V$(){return`
|
|
3711
3723
|
(function() {
|
|
3712
3724
|
'use strict';
|
|
3713
3725
|
|
|
@@ -3781,7 +3793,7 @@ catch (error) {
|
|
|
3781
3793
|
}
|
|
3782
3794
|
};
|
|
3783
3795
|
})();
|
|
3784
|
-
`.trim()}async function
|
|
3796
|
+
`.trim()}async function K7($){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?M$(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
3797
|
(function() {
|
|
3786
3798
|
var el = document.getElementById('${F}');
|
|
3787
3799
|
if (!el) return;
|
|
@@ -3792,7 +3804,7 @@ catch (error) {
|
|
|
3792
3804
|
expirationSeconds: ${Y.expirationSeconds||3600}
|
|
3793
3805
|
});
|
|
3794
3806
|
})();
|
|
3795
|
-
`.trim();return{html:`<img ${z.join(" ")} />`,script:j}}async function
|
|
3807
|
+
`.trim();return{html:`<img ${z.join(" ")} />`,script:j}}async function _7($){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
3808
|
(function() {
|
|
3797
3809
|
var el = document.getElementById('${L}');
|
|
3798
3810
|
if (!el) return;
|
|
@@ -3803,7 +3815,7 @@ catch (error) {
|
|
|
3803
3815
|
expirationSeconds: ${Q.expirationSeconds||3600}
|
|
3804
3816
|
});
|
|
3805
3817
|
})();
|
|
3806
|
-
`.trim();return{html:`<video ${O.join(" ")}></video>`,script:A}}async function
|
|
3818
|
+
`.trim();return{html:`<video ${O.join(" ")}></video>`,script:A}}async function U7($,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=V$()+`
|
|
3807
3819
|
|
|
3808
3820
|
`;return J+=`
|
|
3809
3821
|
(function() {
|
|
@@ -3835,12 +3847,12 @@ else if (el.dataset.fallback) {
|
|
|
3835
3847
|
});
|
|
3836
3848
|
});
|
|
3837
3849
|
})();
|
|
3838
|
-
`.trim(),{html:$,script:J}}function
|
|
3850
|
+
`.trim(),{html:$,script:J}}function B7($,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=IQ(Q);return{src:W7(Y[0],Z)||"",alt:W7(Y[1],Z)||"",...typeof Y[2]==="object"?Y[2]:{}}}function IQ($){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 W7($,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 RQ($){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
3851
|
`),j=`
|
|
3840
3852
|
(function() {
|
|
3841
3853
|
// Load media manager script
|
|
3842
3854
|
var script = document.createElement('script');
|
|
3843
|
-
script.src = '${
|
|
3855
|
+
script.src = '${L7(X)}';
|
|
3844
3856
|
script.async = true;
|
|
3845
3857
|
|
|
3846
3858
|
script.onload = function() {
|
|
@@ -3857,12 +3869,12 @@ else if (el.dataset.fallback) {
|
|
|
3857
3869
|
};
|
|
3858
3870
|
|
|
3859
3871
|
script.onerror = function() {
|
|
3860
|
-
console.error('[stx] Failed to load media manager from:', '${
|
|
3872
|
+
console.error('[stx] Failed to load media manager from:', '${L7(X)}');
|
|
3861
3873
|
};
|
|
3862
3874
|
|
|
3863
3875
|
document.head.appendChild(script);
|
|
3864
3876
|
})();
|
|
3865
|
-
`.trim();return{html:F,script:j}}function
|
|
3877
|
+
`.trim();return{html:F,script:j}}function DQ($){let{accept:X="image/*",multiple:Z=!1,onSelect:Q="handleMediaSelect"}=$,Y=`stx-picker-${Math.random().toString(36).slice(2,8)}`,J=`
|
|
3866
3878
|
<div id="${Y}" class="stx-media-picker" style="display:none;">
|
|
3867
3879
|
<div class="stx-media-picker-backdrop"></div>
|
|
3868
3880
|
<div class="stx-media-picker-modal">
|
|
@@ -4051,7 +4063,7 @@ else {
|
|
|
4051
4063
|
border: none;
|
|
4052
4064
|
color: white;
|
|
4053
4065
|
}
|
|
4054
|
-
`.trim();return{html:J,script:G,css:W}}function
|
|
4066
|
+
`.trim();return{html:J,script:G,css:W}}function L7($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}var j7={root:null,rootMargin:"50px 0px",threshold:0,useNative:!0,selector:"[data-stx-lazy]"};function b5(){return"loading"in HTMLImageElement.prototype}function y5(){return"IntersectionObserver"in window}function H7($={}){let X={...j7,...$},Z=document.querySelectorAll(X.selector);if(Z.length===0)return()=>{};if(X.useNative&&b5())return Z.forEach((Y)=>{if(Y.tagName==="IMG"||Y.tagName==="IFRAME")c0(Y,X)}),()=>{};if(!y5())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)F7($,Q,Y);else if(G)z7($,Q,Y);else if(W)wQ($,Q,Y);else{let K=$.querySelector("img[data-src], img[data-srcset]"),_=$.querySelector("video[data-src]");if(K)F7(K,()=>{if(Q)Q($)},(F)=>{if(Y)Y($,F)});else if(_)z7(_,()=>{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 F7($,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 z7($,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 wQ($,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 O7($){c0($,{})}function A7($="[data-stx-lazy]"){document.querySelectorAll($).forEach((Z)=>c0(Z,{}))}function N7($={}){let X={...j7,...$};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 q7($,X){$.observe(X)}function M7($){$.disconnect()}function E$(){return`
|
|
4055
4067
|
(function() {
|
|
4056
4068
|
'use strict';
|
|
4057
4069
|
|
|
@@ -4141,7 +4153,7 @@ else {
|
|
|
4141
4153
|
window.STX.lazyLoad = loadElement;
|
|
4142
4154
|
window.STX.initLazyLoading = init;
|
|
4143
4155
|
})();
|
|
4144
|
-
`.trim()}var
|
|
4156
|
+
`.trim()}var TQ={duration:300,easing:"ease-out",removePlaceholder:!1,loadedClass:"stx-img-loaded",loadingClass:"stx-img-loading"};function v5($,X={}){let Z={...TQ,...X},Q=$.closest(".stx-img-placeholder");if(!Q){CQ($,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)V7($,Q,Z);else $.addEventListener("load",()=>V7($,Q,Z),{once:!0}),$.addEventListener("error",()=>kQ($,Q,Z),{once:!0})}function CQ($,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 V7($,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 kQ($,X,Z){if(Z.loadingClass)X.classList.remove(Z.loadingClass);X.classList.add("stx-img-error"),$.classList.add("stx-img-error")}function E7($,X){let Z=I$($),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 I$($){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 M=(O*32+A)*4,V=A/31,N=O/31,q=Z+(V-0.5)*J*0.5+(N-0.5)*J*0.5,I=Q*(1-V*0.3),E=Y*(1-N*0.3),w=q-0.6666666666666666*I,D=(3*q-w+E)/2,T=D-E;L[M]=Math.max(0,Math.min(255,Math.round(D*255))),L[M+1]=Math.max(0,Math.min(255,Math.round(T*255))),L[M+2]=Math.max(0,Math.min(255,Math.round(w*255))),L[M+3]=255}return{w:32,h:32,rgba:L}}function I7($){let X=I$($),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 R7($){let X=atob($),Z=new Uint8Array(X.length);for(let Q=0;Q<X.length;Q++)Z[Q]=X.charCodeAt(Q);return Z}function D7($,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 w7($={}){document.querySelectorAll("[data-stx-blur-up], .stx-img-placeholder img").forEach((Z)=>{v5(Z,$)})}function R$(){return`
|
|
4145
4157
|
(function() {
|
|
4146
4158
|
'use strict';
|
|
4147
4159
|
|
|
@@ -4203,7 +4215,7 @@ else {
|
|
|
4203
4215
|
window.STX.initBlurUp = initBlurUp;
|
|
4204
4216
|
window.STX.initAllBlurUp = init;
|
|
4205
4217
|
})();
|
|
4206
|
-
`.trim()}function
|
|
4218
|
+
`.trim()}function D$(){return`
|
|
4207
4219
|
.stx-img-placeholder {
|
|
4208
4220
|
position: relative;
|
|
4209
4221
|
overflow: hidden;
|
|
@@ -4240,7 +4252,7 @@ else {
|
|
|
4240
4252
|
.stx-img-error {
|
|
4241
4253
|
opacity: 0.5;
|
|
4242
4254
|
}
|
|
4243
|
-
`.trim()}var
|
|
4255
|
+
`.trim()}var xQ={method:"POST",fieldName:"file",timeout:60000,withCredentials:!1};function g5($,X={}){if(X.maxSize&&$.size>X.maxSize)return{valid:!1,error:`File size (${T7($.size)}) exceeds maximum (${T7(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 T7($){if($<1024)return`${$} B`;if($<1048576)return`${($/1024).toFixed(1)} KB`;return`${($/1048576).toFixed(2)} MB`}async function f5($,X,Z){let Q={...xQ,...X},Y=g5($,Q);if(!Y.valid)return{success:!1,error:Y.error,name:$.name,size:$.size,type:$.type};if(Q.chunkSize&&$.size>Q.chunkSize)return PQ($,Q,Z);return SQ($,Q,Z)}async function SQ($,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 PQ($,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 C7($,X,Z,Q){let Y=[];for(let J of $){let G=await f5(J,X,(W)=>{if(Z)Z(J,W)});if(Y.push(G),Q)Q(J,G)}return Y}function k7($,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 x7($){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 w$(){return`
|
|
4244
4256
|
(function() {
|
|
4245
4257
|
'use strict';
|
|
4246
4258
|
|
|
@@ -4308,18 +4320,18 @@ else {
|
|
|
4308
4320
|
return { valid: true };
|
|
4309
4321
|
};
|
|
4310
4322
|
})();
|
|
4311
|
-
`.trim()}function
|
|
4323
|
+
`.trim()}function S7(){return{script:[E$(),R$(),w$()].join(`
|
|
4312
4324
|
|
|
4313
|
-
`),css:
|
|
4325
|
+
`),css:D$()}}function bQ(){let{script:$,css:X}=S7(),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 i_={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 T$ from"fs";import X1 from"path";async function P7($,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={...C$,...Z};return await V0(G,W,$,K,new Set)}async function yQ($){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}`);T$.mkdirSync(Y,{recursive:!0});let j={componentsDir:J,layoutsDir:G,partialsDir:W,debug:F},H;if(U&&U.length>0)H=U;else H=T$.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"),M=X1.join(Y,A);if(F)console.log(` Building ${L.input}...`);try{let V={...K,...L.props,..._},N=await P7(O,V,j);await Bun.write(M,N),Z.views.push(A)}catch(V){let N=V instanceof Error?V.message:String(V);if(Z.errors.push({file:L.input,error:N}),Z.success=!1,F)console.error(` Error: ${N}`)}}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
4326
|
\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
|
|
4327
|
+
\u26A0\uFE0F Built ${Z.views.length} views with ${Z.errors.length} errors`);return Z}function K9($,X){let Z=T$.watch($.viewsDir,{recursive:!0},async(Q,Y)=>{if(!Y)return;if(Y.endsWith(".stx")||Y.endsWith(".ts")||Y.endsWith(".js")){if($.debug)console.log(`
|
|
4328
|
+
File changed: ${Y}, rebuilding...`);let J=await yQ($);X?.(J)}});return{close:()=>Z.close()}}async function _9($,X={},Z={}){let Q={...Z,skipDefaultSeoTags:!0,skipSignalsRuntime:!0},Y=await P7($,X,Q);Y=await vQ(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
4329
|
|
|
4318
|
-
`).trim();let J=
|
|
4330
|
+
`).trim();let J=hQ(Y);return{html:Y,text:J}}async function vQ($){try{let{generateCss:X,extractClassNames:Z}=await import("./chunk-864m3xp2.js");if(Z($).size===0)return $;let Y=await X($);if(!Y)return $;let J=gQ(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 M=J.get(A);if(M)j.push(M)}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]}`,M=K.replace(/style\s*=\s*"[^"]*"/,`style="${A}"`),V=U.replace(/style\s*=\s*"[^"]*"/,`style="${A}"`);return`${W}${M}class="${_}"${V}${F}`}return`${W}${K}class="${_}" style="${H}"${U}${F}`})}catch{return $}}function gQ($){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 fQ($,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 hQ($){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)=>fQ(Z??Q??"",Y)).replace(/<br\s*\/?>/gi,`
|
|
4319
4331
|
`).replace(/<\/(p|div|h[1-6]|li|tr)>/gi,`
|
|
4320
4332
|
`).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
4333
|
|
|
4322
|
-
`).trim()}function
|
|
4334
|
+
`).trim()}function dQ($){return $.replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function uQ($){let X={};for(let Z of Object.keys($))if(!Z.startsWith("__"))X[Z]=$[Z];return X}function B9($){let{template:X,context:Z={},title:Q="stx App"}=$,Y=uQ(Z),J=dQ(JSON.stringify(Y));return`<!DOCTYPE html>
|
|
4323
4335
|
<html lang="en">
|
|
4324
4336
|
<head>
|
|
4325
4337
|
<meta charset="UTF-8">
|
|
@@ -4339,8 +4351,8 @@ File changed: ${Y}, rebuilding...`);let J=await CQ($);X?.(J)}});return{close:()=
|
|
|
4339
4351
|
}
|
|
4340
4352
|
</script>
|
|
4341
4353
|
</body>
|
|
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:
|
|
4354
|
+
</html>`}var A1=Symbol.for("stx.Fragment"),mQ=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),y7=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"]),v7={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 pQ($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function h5($){return $.replace(/&/g,"&").replace(/"/g,""")}function g7($){if($==null||typeof $==="boolean")return[];if(!Array.isArray($))return[b7($)];return $.flat(1/0).map(b7).filter((X)=>X!=="")}function b7($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return $;if(typeof $==="number")return String($);return $}function N1($,X,Z){let{children:Q,ref:Y,key:J,...G}=X||{};return{type:$,props:Object.keys(G).length>0?G:null,children:g7(Q),key:Z??J??void 0,ref:Y??void 0}}var cQ=N1,lQ=N1;function f7($){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 d5($){if(typeof $==="string")return $;if(Array.isArray($))return $.filter(Boolean).map(d5).join(" ");if(typeof $==="object"&&$!==null)return Object.entries($).filter(([,X])=>X).map(([X])=>X).join(" ");return""}function iQ($){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=v7[Z]||Z;if(Y==="class"||Y==="className"){let J=d5(Q);if(J)X.push(` class="${h5(J)}"`);continue}if(Y==="style"){let J=typeof Q==="string"?Q:f7(Q);if(J)X.push(` style="${h5(J)}"`);continue}if(y7.has(Y)){if(Q)X.push(` ${Y}`);continue}if(Q!=null&&Q!==!1)X.push(` ${Y}="${h5(String(Q))}"`)}return X.join("")}function O1($){if($==null||typeof $==="boolean")return"";if(typeof $==="string")return pQ($);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=iQ($.props),Q=$.props?.innerHTML??$.props?.dangerouslySetInnerHTML?.__html;if(Q!=null)return`<${X}${Z}>${Q}</${X}>`;if(mQ.has(X))return`<${X}${Z}>`;let Y=$.children.map(O1).join("");return`<${X}${Z}>${Y}</${X}>`}function aQ($){return new ReadableStream({start(X){X.enqueue(O1($)),X.close()}})}function sQ($,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=v7[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=d5(Q);if(J)$.setAttribute("class",J);continue}if(Y==="style"){let J=typeof Q==="string"?Q:f7(Q);if(J)$.setAttribute("style",J);continue}if(y7.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);sQ(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 rQ($){if($.when)return N1(A1,{children:$.children});return $.fallback??null}function nQ($){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 N1(A1,{children:Q})}function oQ($){return N1(A1,{children:$.children})}function tQ($,X,...Z){let{key:Q,ref:Y,...J}=X||{};return{type:$,props:Object.keys(J).length>0?J:{},children:g7(Z.length===1?Z[0]:Z),key:Q??void 0,ref:Y??void 0}}function h7($,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 u5(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 eQ($){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 $Y($,...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 q1 from"fs";import l0 from"path";function d7($){try{return q1.statSync($).mtimeMs}catch{return null}}function k$($,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 XY($,X){try{return globalThis.Bun?.resolveSync($,X)??null}catch{return null}}function u7($,X="stx"){let Z=l0.resolve($);for(let Q=0;Q<10;Q++){let Y=l0.join(Z,"pantry","@stacksjs",X);if(q1.existsSync(Y))return Y;let J=l0.dirname(Z);if(J===Z)break;Z=J}return null}async function ZY($={}){let X=$.cwd?l0.resolve($.cwd):process.cwd(),Z=$.resolve??XY,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=u7(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)=>q1.existsSync(H))||null,U=d7(K),F=_?d7(_):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 (${k$(F,Q)}) is OLDER than src/signals.ts (${k$(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 ${k$(U,Q)}, dist ${k$(F,Q)})`});let z=l0.join(X,"node_modules/@stacksjs/stx"),j=null;try{j=q1.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=q1.realpathSync(z)}catch{}let L=(()=>{try{return q1.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 QY($){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(`
|
|
4355
|
+
`)}var{Glob:MY}=globalThis.Bun;import{cpSync as t7,existsSync as p$,mkdirSync as e7,readFileSync as $3,readdirSync as VY,rmSync as EY,statSync as IY,unlinkSync as RY,writeFileSync as u$}from"fs";import{dirname as DY,join as x0,relative as wY}from"path";import X3 from"process";import i0 from"path";function p7($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function c7($,X,Z){let Q=p7(X),Y=Z?p7(Z):"";return`<!DOCTYPE html>
|
|
4344
4356
|
<html>
|
|
4345
4357
|
<head>
|
|
4346
4358
|
<title>stx Error</title>
|
|
@@ -4356,53 +4368,53 @@ File changed: ${Y}, rebuilding...`);let J=await CQ($);X?.(J)}});return{close:()=
|
|
|
4356
4368
|
${Y?`<div class="file-path">File: ${Y}</div>`:""}
|
|
4357
4369
|
<pre>${Q}</pre>
|
|
4358
4370
|
</body>
|
|
4359
|
-
</html>`}function
|
|
4371
|
+
</html>`}function m7($){return{name:"bun-plugin-stx",async setup(X){let Z={};try{Z=await r0(process.cwd())}catch{}let Q={...C$,...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 B$(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
4372
|
const content = ${JSON.stringify(_)};
|
|
4361
4373
|
const data = ${JSON.stringify(U)};
|
|
4362
4374
|
|
|
4363
4375
|
export { content, data };
|
|
4364
4376
|
export { content as default };
|
|
4365
|
-
`,loader:"js"}}catch(_){console.error("Markdown Processing Error:",_);let U=
|
|
4377
|
+
`,loader:"js"}}catch(_){console.error("Markdown Processing Error:",_);let U=c7("Markdown Processing Error",_.message||"Unknown error",K);return{contents:`// ${K}
|
|
4366
4378
|
const content = ${JSON.stringify(U)};
|
|
4367
4379
|
const data = {};
|
|
4368
4380
|
|
|
4369
4381
|
export { content, data };
|
|
4370
4382
|
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
|
|
4372
|
-
`);if(A.match(/(<\/body>)/i))A=A.replace(/(<\/body>)/i,`${
|
|
4383
|
+
`,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 M=await _$(W,Q);if(M){if(Q.debug)console.log(`Using cached version of ${W}`);return{contents:M,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=i7(_),j=z.client.map((M)=>M.fullTag),H=z.server.map((M)=>M.content),L=U;for(let M of H){let V=M.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");L=L.replace(new RegExp(`<script\\b[^>]*>${V}<\\/script>`,"gi"),"")}for(let M of j){let V=M.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");L=L.replace(V,"")}let O={__filename:W,__dirname:i0.dirname(W),__stx:{webComponentsPath:J,builtComponents:G},__stx_options:Q,__stx_sfc_mode:!0};for(let M of H)await M0(M,O,W);let A=L;if(A=await V0(A,O,W,Q,K),j.length>0){let M=O.__stx_event_bindings||[],N=(await Promise.all(j.map(async(I)=>{let E=I.match(/<script\b[^>]*>([\s\S]*?)<\/script>/);if(!E)return I;return l7(E[1],{eventBindings:M,templateContent:A})}))).join(`
|
|
4384
|
+
`);if(A.match(/(<\/body>)/i))A=A.replace(/(<\/body>)/i,`${N}
|
|
4373
4385
|
$1`);else A+=`
|
|
4374
|
-
${
|
|
4375
|
-
${
|
|
4386
|
+
${N}`;O.__stx_event_bindings=[]}if(K.forEach((M)=>Y.add(M)),Q.cache&&Q.cachePath){if(await U$(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:c7("stx Rendering Error",K.message||String(K),W),loader:"html"}}})}}}var a7=m7;function YY($,X){if(!$)return $;if(/^[a-z][a-z0-9+.-]*:/i.test($)||$.startsWith("//"))return $;return`${X}${$.startsWith("/")?"":"/"}${$}`}function x$($,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}`,_=YY(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>${JY(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,M=/<title[^>]*>([\s\S]*?)<\/title>/i.exec(O)?.[1]?.trim(),V=M===void 0||M===""||A.test(M),N=(T)=>{if(/^<title[\s>]/i.test(T))return/<title[\s>]/i.test(O)&&!V;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)},q=j.filter((T)=>!N(T));if(q.length===0)return $;let I=$,E=q.find((T)=>/^<title[\s>]/i.test(T));if(E&&V&&/<title[^>]*>[\s\S]*?<\/title>/i.test(I)){if(I=I.replace(/<title[^>]*>[\s\S]*?<\/title>/i,()=>E),q=q.filter((T)=>T!==E),q.length===0)return I}let w=`<!-- SEO -->
|
|
4387
|
+
${q.join(`
|
|
4376
4388
|
`)}
|
|
4377
4389
|
<!-- /SEO -->`,D=I.search(/<\/head>/i);if(D!==-1)return`${I.slice(0,D)}${w}
|
|
4378
4390
|
${I.slice(D)}`;if(/<head[^>]*>/i.test(I))return I.replace(/<head([^>]*)>/i,`<head$1>
|
|
4379
4391
|
${w}`);return`${w}
|
|
4380
|
-
${I}`}function L0($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function
|
|
4392
|
+
${I}`}function L0($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function JY($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function S$($,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>${GY(G)}</loc>`,` <lastmod>${Q}</lastmod>`,` <changefreq>${K}</changefreq>`,` <priority>${W.toFixed(1)}</priority>`," </url>"].join(`
|
|
4381
4393
|
`)}).join(`
|
|
4382
4394
|
`),"</urlset>",""].join(`
|
|
4383
|
-
`)}function
|
|
4395
|
+
`)}function GY($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function P$($){let X=$.robots??"allow";if(X===!1)return null;if(typeof X==="string"&&X!=="allow"&&X!=="disallow")return X.endsWith(`
|
|
4384
4396
|
`)?X:`${X}
|
|
4385
4397
|
`;let Z=$.sitemap!==!1?`Sitemap: ${$.url.replace(/\/$/,"")}/sitemap.xml
|
|
4386
4398
|
`:"";if(X==="disallow")return["User-agent: *","Disallow: /","",Z].filter(Boolean).join(`
|
|
4387
4399
|
`);return["User-agent: *","Allow: /","",Z].filter(Boolean).join(`
|
|
4388
|
-
`)}var M1=null;async function
|
|
4400
|
+
`)}var M1=null;async function WY(){if(M1!==null)return M1;try{let $=await import("./chunk-1yh6pq6b.js");if(typeof $.getRouterScript==="function")M1=$.getRouterScript();else M1=""}catch{M1=""}return M1}async function m5($,X){let Z=await WY();if(!Z)return $;let Q={interceptAllLinks:!0,container:"main",...X},J=`${`<script>window.__stxRouterConfig=${JSON.stringify(Q)};</script>
|
|
4389
4401
|
`}<script>${Z}</script>`;if(/<\/body>/i.test($))return $.replace(/<\/body>/i,`${J}
|
|
4390
4402
|
</body>`);return`${$}
|
|
4391
|
-
${J}`}var
|
|
4403
|
+
${J}`}var KY=`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){}};`,_Y=($,X,Z,Q)=>`(function(){${KY}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)})();`,UY=($,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 b$($,X){if(X.theme===!1)return $;let Z=$.includes(s7),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
4404
|
`);$=$.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]=
|
|
4397
|
-
`)}function
|
|
4405
|
+
${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"})};`}${_Y(Y,J,G,W)};window.__stxThemeGuard=1;</script>`;$=$.replace(/<head\b([^>]*)>/i,`<head$1>
|
|
4406
|
+
${_}`)}if(!Z&&!$.includes("__stxThemeToggle")&&/<\/body>/i.test($)){let K=`<script data-stx-theme-toggle="1">${UY(J,G,W)};window.__stxThemeToggle=1;</script>`;$=$.replace(/<\/body>/i,`${K}
|
|
4407
|
+
</body>`)}return $}async function r7($,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 BY,readFileSync as LY}from"fs";import{join as FY,resolve as zY}from"path";import jY from"process";function v$($,X=jY.cwd()){let Z=$.i18n;if(!Z||!Array.isArray(Z.locales)||Z.locales.length===0)return null;let Q=Z.defaultLocale??Z.locales[0],Y=HY(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 HY($,X){let Z=$.translations??{},Q={},Y=$.translationsDir,J=Y===!1?null:zY(X,typeof Y==="string"&&Y?Y:"translations"),G=$.format??"json";for(let W of $.locales){let K=J?OY(J,W,G):{};Q[W]={...K,...Z[W]??{}}}return Q}function OY($,X,Z){let Q=Z==="json"?[`${X}.json`]:[`${X}.${Z}`,`${X}.${Z==="yaml"?"yml":"yaml"}`];for(let Y of Q){let J=FY($,Y);if(!BY(J))continue;try{let G=LY(J,"utf8"),W=Z==="json"?JSON.parse(G):AY(G);return n7(W)}catch{continue}}return{}}function n7($,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))n7(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 AY($){let X={},Z=[{obj:X,indent:-1}];for(let Q of $.split(`
|
|
4408
|
+
`)){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]=NY(F)}return X}function NY($){if($.startsWith("'")&&$.endsWith("'")||$.startsWith('"')&&$.endsWith('"'))return $.slice(1,-1);return $}function p5($,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 g$($,X,Z){return $.replace(/\{t(!?):([a-zA-Z][\w.-]*)\}/g,(Q,Y,J)=>{let G=p5(X,Z,J);return Y==="!"?G:qY(G)})}function a0($,X,Z){if(X===Z)return $;if($==="/")return`/${X}/`;if($==="/404.html")return`/${X}/404.html`;return`/${X}${$}`}function o7($,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 f$($,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="${y$(G)}" href="${y$(W)}">`)}let J=`${Q}${a0(X,Z.defaultLocale,Z.defaultLocale)}`;return Y.push(`<link rel="alternate" hreflang="x-default" href="${y$(J)}">`),Y.join(`
|
|
4409
|
+
`)}function h$($,X){let Z=`<meta name="stx-layout-group" content="i18n:${y$(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
4410
|
</head>`);return`${Z}
|
|
4399
|
-
${$}`}function
|
|
4400
|
-
${
|
|
4401
|
-
</body>`);if($.spa!==!1)T=await
|
|
4402
|
-
${K}`);return $}function
|
|
4411
|
+
${$}`}function d$($,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 y$($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function qY($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}async function Y3($){let X=Date.now(),Z=$.pagesDir??"pages",Q=$.outDir??"dist",Y=$.publicDir??"public";if(!$.noClean)EY(Q,{recursive:!0,force:!0});e7(Q,{recursive:!0});let J=new MY(`${Z}/**/*.stx`),G=await Array.fromAsync(J.scan(".")),W=$.excludeDirs??["layouts","partials","components"],K=[],_=G.filter((N)=>{let q=N.slice(Z.length).replace(/^[\\/]+/,"");if(q.split(/[\\/]/).slice(0,-1).some((E)=>W.includes(E)))return K.push(N),!1;return!q.split(/[\\/]/).some((E)=>E.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 r7(_,(N)=>Bun.build({entrypoints:N,outdir:Q,plugins:[a7()],naming:{entry:"[name].[ext]"}}));if(U.failed.length>0){for(let{entrypoint:N,error:q}of U.failed)console.error(`[stx] failed to build ${N}:
|
|
4412
|
+
${q}`);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.`)}kY(Q);let F=a5(Q).filter((N)=>N.endsWith(".html")),z=v$($,X3.cwd()),j=new Set(F.map(m$));for(let N of F){let q=x0(Q,N),I=$3(q,"utf8"),E=m$(N),w=z?z.locales:[$.seo?.locale?.split(/[_-]/)[0]??"en"];for(let D of w){let T=I;if(T=xY(T),z)T=g$(T,z,D);if(T=await J0(T,X3.cwd()),T=x$(T,$,$.pages?.[E],E),z)T=SY(T,$,z,D,E),T=PY(T,D,z.defaultLocale,j),T=h$(T,D);if(T=b$(T,$),T=bY(T),z)T=T.replace(/<\/body>/i,`${d$(z,D)}
|
|
4413
|
+
</body>`);if($.spa!==!1)T=await m5(T,$.router);let f=z?CY(E,D,z.defaultLocale):N,c=x0(Q,f);if(e7(TY(c),{recursive:!0}),u$(c,T),z&&D!==z.defaultLocale&&f!==N);}}let H=l5(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=i5(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(p$(Y))t7(Y,Q,{recursive:!0});let O=Q3();if(O)t7(O,x0(Q,Z3),{recursive:!0});let A=x0(Q,"404.html");if(!p$(A)&&p$(x0(Q,"index.html"))){let N=$3(x0(Q,"index.html"),"utf8").replace(/<title>[^<]*<\/title>/i,`<title>404 \u2014 ${yY($.name)}</title>`);u$(A,N)}if($.sitemap!==!1){let N=[],q=F.filter((E)=>E!=="404.html").map(m$),I=z?z.locales:[null];for(let E of q){let w=$.pages?.[E];for(let D of I){let T=D&&z?a0(E,D,z.defaultLocale):E;N.push({path:T,page:w})}}u$(x0(Q,"sitemap.xml"),S$($,N))}let M=P$($);if(M!==null)u$(x0(Q,"robots.txt"),M);let V=F.map(m$);return{outDir:Q,pages:V,durationMs:Date.now()-X}}function TY($){return DY($)}function CY($,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 m$($){if($==="index.html")return"/";return`/${$.replace(/\.html$/,"").replace(/\/index$/,"")}`}function a5($,X=$){let Z=[];if(!p$($))return Z;for(let Q of VY($,{withFileTypes:!0})){let Y=x0($,Q.name);if(Q.isDirectory())Z.push(...a5(Y,X));else Z.push(wY(X,Y))}return Z}function kY($){for(let X of a5($)){if(!/^chunk-.*\.js(?:\.map)?$/.test(X))continue;let Z=x0($,X);try{if(IY(Z).size===0)RY(Z)}catch{}}}function xY($){return $.replace(/<script[^>]*src=["']\.\/chunk-[^"']*\.js["'][^>]*><\/script>\s*/g,"")}function SY($,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="${c5(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="${c5(G)}">`);if(/<meta property="og:url"/.test($))$=$.replace(/<meta property="og:url"[^>]*>/,`<meta property="og:url" content="${c5(J)}">`);let W=f$(X.url,Y,Z);if(!$.includes("hreflang="))$=$.replace(/<link rel="canonical"[^>]*>/,(K)=>`${W}
|
|
4414
|
+
${K}`);return $}function c5($){return $.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function PY($,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 bY($){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
4415
|
<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
|
|
4416
|
+
${Y.slice(W)}`;return`${$.slice(0,Q)}${F}${$.slice(Z)}`}function yY($){return $.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function J3($){return $}var vY=new Set(["if","else","elseif","else-if","for","foreach","show","model","html","text","bind","key","ref","once","memo","slot","teleport","cloak","pre","effect","init"]),gY=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]);function fY($){return $.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function hY($){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 dY($,X){for(let[Z,Q]of $)if(X>=Z&&X<Q)return!0;return!1}function l$($,X){let Z=1,Q=0;for(let Y=0;Y<X&&Y<$.length;Y++)if($[Y]===`
|
|
4417
|
+
`)Z++,Q=Y+1;return{line:Z,column:X-Q+1}}function uY($,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 mY($,X,Z){let Q=/@([a-z][\w:-]*)((?:\.[a-z][\w-]*)*)\s*=\s*"([^"]*)"/gi,Y;while((Y=Q.exec($))!==null){if(dY(X,Y.index))continue;let J=Y[1].toLowerCase().split(":")[0];if(vY.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:_}=l$($,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 G3($){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 pY($,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=!G3(`${G}/${U}`).startsWith(G3(J));else F=!0;if(F){let{line:z,column:j}=l$($,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 cY($){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 lY($,X){let Z=/(?::for|x-for|@for)\s*=\s*"([^"]*)"/gi,Q;while((Q=Z.exec($))!==null){let Y=cY(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]==="/"||gY.has(G[1].toLowerCase())?W+1:uY($,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$])${fY(j)}\\s*\\(`,"g"),L;while((L=H.exec(z))!==null){let O=J+L.index,{line:A,column:M}=l$($,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:M,severity:"error"})}}}}function iY($,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}=l$($,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 c$($,X){return $?.[X]!==!1}function aY($,X={}){let Z=[],Q=hY($),Y=(X.filePath??"").replace(/\\/g,"/"),J=X.fileKind??(/\/components?\//i.test(Y)?"component":/\/layouts?\//i.test(Y)?"layout":"view");if(c$(X.rules,"stx/no-bare-function-ref-in-event"))mY($,Q,Z);if(Y&&c$(X.rules,"stx/store-value-imports-must-be-local"))pY($,Y,Z);if(c$(X.rules,"stx/no-signal-call-in-for-iteration-var"))lY($,Z);if(c$(X.rules,"stx/no-backticks-in-html-comments"))iY($,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 sY($,X){return $.kind===X}function W3($){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 rY($,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 K3($,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?W3(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)=>rY(X,W))){let W=J.map((K)=>W3(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 nY($){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 oY($,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=K3(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
4418
|
`);throw Error(`Prop validation failed:
|
|
4407
|
-
${K}`)}return{props:G,validation:W}}function
|
|
4408
|
-
export{
|
|
4419
|
+
${K}`)}return{props:G,validation:W}}function tY($,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 eY($){return $}function $J($){return{type:$,required:!0}}function XJ($,X){return{type:X,default:$}}function ZJ($,X={}){return{...X,validator:$}}function QJ($,X={}){return{...X,validator:(Z)=>$.includes(Z)}}function YJ($,X={}){return{...X,type:Array,validator:(Z)=>{if(!Array.isArray(Z))return!1;return!0}}}function JJ($,X={}){return{...X,type:Object}}function GJ($,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=K3(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 bB={};
|
|
4420
|
+
export{KK as o,X5 as p,q6 as q,w4 as r,P0 as s,Q$ as t,Y$ as u,J$ as v,G$ as w,D1 as x,U3 as y,B3 as z,L3 as A,F3 as B,z3 as C,j3 as D,UJ as E,BJ as F,LJ as G,H3 as H,FJ as I,O3 as J,zJ as K,jJ as L,HJ as M,OJ as N,AJ as O,NJ as P,qJ as Q,MJ as R,VJ as S,EJ as T,Y1 as U,IJ as V,RJ as W,DJ as X,wJ as Y,CJ as Z,kJ as _,N3 as $,q3 as aa,xJ as ba,M3 as ca,SJ as da,PJ as ea,bJ as fa,yJ as ga,vJ as ha,gJ as ia,V3 as ja,E3 as ka,fJ as la,hJ as ma,I3 as na,uJ as oa,lJ as pa,iJ as qa,W6 as ra,x3 as sa,S3 as ta,P3 as ua,b3 as va,r$ as wa,y3 as xa,v3 as ya,g3 as za,f3 as Aa,sJ as Ba,eJ as Ca,$G as Da,u3 as Ea,XG as Fa,o$ as Ga,JG as Ha,b4 as Ia,y4 as Ja,i4 as Ka,a4 as La,s4 as Ma,$8 as Na,r4 as Oa,n4 as Pa,o4 as Qa,t4 as Ra,e4 as Sa,$X as Ta,XX as Ua,mW as Va,S1 as Wa,iW as Xa,aW as Ya,ZX as Za,QX as _a,GX as $a,N$ as ab,sW as bb,rW as cb,nW as db,oW as eb,tW as fb,eW as gb,$2 as hb,X2 as ib,Z2 as jb,Q2 as kb,Y2 as lb,J2 as mb,LX as nb,W2 as ob,B2 as pb,L2 as qb,O5 as rb,N2 as sb,q2 as tb,M2 as ub,kX as vb,I2 as wb,k2 as xb,x2 as yb,S2 as zb,P2 as Ab,b2 as Bb,y2 as Cb,a2 as Db,LZ as Eb,s2 as Fb,FZ as Gb,zZ as Hb,O8 as Ib,A8 as Jb,o2 as Kb,t2 as Lb,e2 as Mb,XK as Nb,ZK as Ob,MZ as Pb,YK as Qb,JK as Rb,GK as Sb,I6 as Tb,M8 as Ub,UK as Vb,BK as Wb,LK as Xb,FK as Yb,VZ as Zb,EZ as _b,HK as $b,IZ as ac,I8 as bc,OK as cc,RZ as dc,AK as ec,NK as fc,DZ as gc,TK as hc,w8 as ic,CZ as jc,kZ as kc,T8 as lc,SZ as mc,PZ as nc,yZ as oc,l as pc,C8 as qc,w5 as rc,k8 as sc,x8 as tc,S8 as uc,P8 as vc,b8 as wc,y8 as xc,v8 as yc,g8 as zc,f8 as Ac,h8 as Bc,d8 as Cc,u8 as Dc,m8 as Ec,p8 as Fc,c8 as Gc,l8 as Hc,i8 as Ic,a8 as Jc,s8 as Kc,r8 as Lc,T5 as Mc,n8 as Nc,o8 as Oc,t8 as Pc,e8 as Qc,$7 as Rc,Z7 as Sc,C5 as Tc,k5 as Uc,Q7 as Vc,x5 as Wc,S5 as Xc,P5 as Yc,m1 as Zc,M$ as _c,Y7 as $c,J7 as ad,G7 as bd,V$ as cd,K7 as dd,_7 as ed,U7 as fd,B7 as gd,RQ as hd,DQ as id,b5 as jd,y5 as kd,H7 as ld,c0 as md,O7 as nd,A7 as od,N7 as pd,q7 as qd,M7 as rd,E$ as sd,v5 as td,E7 as ud,I$ as vd,I7 as wd,R7 as xd,D7 as yd,w7 as zd,R$ as Ad,D$ as Bd,g5 as Cd,f5 as Dd,C7 as Ed,k7 as Fd,x7 as Gd,w$ as Hd,S7 as Id,bQ as Jd,i_ as Kd,P7 as Ld,yQ as Md,K9 as Nd,_9 as Od,B9 as Pd,A1 as Qd,N1 as Rd,cQ as Sd,lQ as Td,O1 as Ud,aQ as Vd,p1 as Wd,rQ as Xd,nQ as Yd,oQ as Zd,tQ as _d,h7 as $d,eQ as ae,$Y as be,u7 as ce,ZY as de,QY as ee,x$ as fe,S$ as ge,P$ as he,b$ as ie,v$ as je,p5 as ke,g$ as le,a0 as me,o7 as ne,f$ as oe,h$ as pe,d$ as qe,Y3 as re,J3 as se,aY as te,sY as ue,nY as ve,oY as we,tY as xe,eY as ye,$J as ze,XJ as Ae,ZJ as Be,QJ as Ce,YJ as De,JJ as Ee,GJ as Fe,bB as Ge,C4 as He,C6 as Ie,x4 as Je,P4 as Ke};
|