@stacksjs/stx 0.2.365 → 0.2.367

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.
Files changed (57) hide show
  1. package/dist/{chunk-r5dta1qf.js → chunk-0vgexs1k.js} +16 -16
  2. package/dist/{chunk-se8fh272.js → chunk-17s5aghd.js} +1 -1
  3. package/dist/{chunk-77g77ygz.js → chunk-22rr5608.js} +1 -1
  4. package/dist/{chunk-v8ccphfs.js → chunk-243n8zxy.js} +1 -1
  5. package/dist/{chunk-dk40tcv1.js → chunk-2sngz0mn.js} +1 -1
  6. package/dist/{chunk-bh1m0x85.js → chunk-3ab5knmx.js} +1 -1
  7. package/dist/{chunk-d5r4zwyd.js → chunk-3bcmvdzz.js} +8 -8
  8. package/dist/{chunk-n5791wn3.js → chunk-4nty9rg5.js} +1 -1
  9. package/dist/{chunk-wkeymrkg.js → chunk-51x9g5xc.js} +1 -1
  10. package/dist/{chunk-mks2cgty.js → chunk-59vxqjdn.js} +1 -1
  11. package/dist/{chunk-6tk817fg.js → chunk-8gm2ctc2.js} +1 -1
  12. package/dist/{chunk-4dzsp35z.js → chunk-8wr21vxv.js} +1 -1
  13. package/dist/{chunk-eczq4cxz.js → chunk-azg8n1ez.js} +1 -1
  14. package/dist/{chunk-k10f0c00.js → chunk-bjvksac7.js} +1 -1
  15. package/dist/{chunk-k3ktx8w2.js → chunk-ccre21me.js} +1 -1
  16. package/dist/{chunk-bszp4vx1.js → chunk-cf4191be.js} +1 -1
  17. package/dist/{chunk-hyrm54da.js → chunk-cjevg8se.js} +1 -1
  18. package/dist/{chunk-y3ns6824.js → chunk-dqgtzhfj.js} +1 -1
  19. package/dist/{chunk-atf4tj9y.js → chunk-dtxx5xze.js} +1 -1
  20. package/dist/{chunk-8zdq8kk5.js → chunk-dxp0rdvp.js} +1 -1
  21. package/dist/{chunk-xr8ergcp.js → chunk-fpsvcam8.js} +1 -1
  22. package/dist/{chunk-zjqw2fde.js → chunk-fy5k7xh8.js} +1 -1
  23. package/dist/{chunk-ttw7qrz0.js → chunk-g3ksdqyc.js} +1 -1
  24. package/dist/{chunk-kmd694ky.js → chunk-gyv6ge1q.js} +2 -2
  25. package/dist/{chunk-p33qyhtc.js → chunk-h8de9t8c.js} +1 -1
  26. package/dist/{chunk-jerrq5k1.js → chunk-hvkzj71k.js} +1 -1
  27. package/dist/{chunk-0t0b5yex.js → chunk-j68egpw9.js} +1 -1
  28. package/dist/{chunk-2aqq5j7c.js → chunk-k4my696m.js} +1 -1
  29. package/dist/{chunk-bxnx8sga.js → chunk-k8gb8b8h.js} +1 -1
  30. package/dist/{chunk-346jyc33.js → chunk-mcc96y04.js} +1 -1
  31. package/dist/{chunk-0thch80p.js → chunk-nhhdqk62.js} +1 -1
  32. package/dist/{chunk-7yyfbhna.js → chunk-p9jgsbrd.js} +1 -1
  33. package/dist/{chunk-g63sh9bx.js → chunk-pfn13pck.js} +1 -1
  34. package/dist/{chunk-5qs1t2cd.js → chunk-pkma79bf.js} +1 -1
  35. package/dist/{chunk-ry56srm9.js → chunk-q2jvq038.js} +1 -1
  36. package/dist/{chunk-r8hr3jhh.js → chunk-qz8bkt99.js} +1 -1
  37. package/dist/{chunk-1nv116m3.js → chunk-rg7d10cb.js} +1 -1
  38. package/dist/{chunk-czzy14fj.js → chunk-rnzwf3z2.js} +98 -53
  39. package/dist/{chunk-7ptewn2w.js → chunk-rvmgbjbh.js} +2 -2
  40. package/dist/{chunk-p8nasx5y.js → chunk-ttb07mnn.js} +1 -1
  41. package/dist/{chunk-5t826ypq.js → chunk-v7zx438v.js} +1 -1
  42. package/dist/{chunk-a47e67th.js → chunk-v8hhk3cd.js} +1 -1
  43. package/dist/{chunk-q28ekhhb.js → chunk-vs5zebkb.js} +2 -2
  44. package/dist/{chunk-6njr31wk.js → chunk-w54m70rf.js} +1 -1
  45. package/dist/{chunk-tfnq0cj6.js → chunk-wda7kq69.js} +1 -1
  46. package/dist/{chunk-pbt7f5h9.js → chunk-whpk0ekx.js} +1 -1
  47. package/dist/{chunk-z274qgsn.js → chunk-xcxa0grg.js} +1 -1
  48. package/dist/{chunk-11v2ysbe.js → chunk-yf8bdka7.js} +1 -1
  49. package/dist/{chunk-syy0njsk.js → chunk-yt532p7h.js} +1 -1
  50. package/dist/{chunk-1q2b0r3v.js → chunk-z81k9w7b.js} +1 -1
  51. package/dist/cli.js +8 -8
  52. package/dist/craft-entry.js +1 -1
  53. package/dist/craft.js +1 -1
  54. package/dist/pwa.js +1 -1
  55. package/dist/signals.js +98 -53
  56. package/dist/ssg.js +2 -2
  57. package/package.json +5 -5
package/dist/signals.js CHANGED
@@ -173,6 +173,46 @@ console.log('[stx] entering IIFE');
173
173
  return fn;
174
174
  }
175
175
 
176
+ // The names an expression mentions, by its text.
177
+ const __stxIdentifiers = new Map();
178
+ function __stxNamesIn(body) {
179
+ let names = __stxIdentifiers.get(body);
180
+ if (!names) {
181
+ names = Array.from(new Set(body.match(/[A-Za-z_$][\\w$]*/g) || []));
182
+ if (__stxIdentifiers.size >= 5000) __stxIdentifiers.clear();
183
+ __stxIdentifiers.set(body, names);
184
+ }
185
+ return names;
186
+ }
187
+
188
+ // Compile an expression over just the names in scope it mentions.
189
+ //
190
+ // It was compiled over every name in scope and called with every value,
191
+ // read through the auto-unwrap proxy. Reading a signal subscribes the
192
+ // running effect, so every binding depended on every signal on the page:
193
+ // changing one unrelated value re-ran every binding of every row. The proxy
194
+ // also tested each signal against the expression with fresh regexes. Now an
195
+ // expression sees, reads and subscribes to what it names; a mention inside
196
+ // a string only widens that, never narrows it.
197
+ function __stxCompileScoped(scope, extraParams, body) {
198
+ const keys = [];
199
+ const names = __stxNamesIn(body);
200
+ for (let i = 0; i < names.length; i++) {
201
+ if (Object.prototype.propertyIsEnumerable.call(scope, names[i])) keys.push(names[i]);
202
+ }
203
+ const fn = __stxCompile(extraParams.length ? keys.concat(extraParams) : keys, body);
204
+ // The cache keys on the parameter list, so a function always has these keys.
205
+ fn.__stxKeys = keys;
206
+ return fn;
207
+ }
208
+
209
+ function __stxArgs(fn, scope) {
210
+ const keys = fn.__stxKeys;
211
+ const args = new Array(keys.length);
212
+ for (let i = 0; i < keys.length; i++) args[i] = scope[keys[i]];
213
+ return args;
214
+ }
215
+
176
216
  let activeEffect = null;
177
217
  const effectStack = [];
178
218
  const pendingEffects = new Set();
@@ -762,8 +802,8 @@ else {
762
802
  // First evaluate the base expression
763
803
  let value;
764
804
  try {
765
- const fn = __stxCompile(Object.keys(scope), 'return ' + valueExpr);
766
- value = fn(...Object.values(scope));
805
+ const fn = __stxCompileScoped(scope, [], 'return ' + valueExpr);
806
+ value = fn(...__stxArgs(fn, scope));
767
807
  }
768
808
  catch (e) {
769
809
  if (!(e instanceof ReferenceError) && !(e instanceof TypeError)) console.warn('[STX] Pipe base expression error:', valueExpr, e);
@@ -783,8 +823,8 @@ catch (e) {
783
823
  if (/^['"].*['"]$/.test(arg)) return arg.slice(1, -1);
784
824
  // Try to evaluate as expression in scope
785
825
  try {
786
- const fn = __stxCompile(Object.keys(scope), 'return ' + arg);
787
- return fn(...Object.values(scope));
826
+ const fn = __stxCompileScoped(scope, [], 'return ' + arg);
827
+ return fn(...__stxArgs(fn, scope));
788
828
  }
789
829
  catch (e) {
790
830
  return arg;
@@ -2075,8 +2115,8 @@ finally {
2075
2115
  || expressionUsesSignalApi(expr, prop);
2076
2116
  })
2077
2117
  : baseScope;
2078
- const fn = __stxCompile(Object.keys(baseScope), 'return ' + expr);
2079
- const result = fn(...Object.values(scope));
2118
+ const fn = __stxCompileScoped(baseScope, [], 'return ' + expr);
2119
+ const result = fn(...__stxArgs(fn, scope));
2080
2120
  // Post-eval unwrap \u2014 see evalAttrExpr note for the reason.
2081
2121
  return (result && typeof result === 'function' && (result._isSignal || result._isDerived)) ? result() : result;
2082
2122
  }
@@ -2243,8 +2283,8 @@ catch (e) {
2243
2283
  const v = scope[k];
2244
2284
  handlerScope[k] = (v && typeof v === 'function' && v._isStxLoopItem) ? v() : v;
2245
2285
  });
2246
- const fn = __stxCompile(Object.keys(handlerScope).concat(['$event']), expr);
2247
- fn(...Object.values(handlerScope), event);
2286
+ const fn = __stxCompileScoped(handlerScope, ['$event'], expr);
2287
+ fn(...__stxArgs(fn, handlerScope), event);
2248
2288
  }
2249
2289
  catch (e) {
2250
2290
  // Event handlers fire on user interaction, not reactive re-runs \u2014 there's no
@@ -2553,8 +2593,8 @@ catch (e) {
2553
2593
  return expressionCallsSignal(expression, prop)
2554
2594
  || expressionUsesSignalApi(expression, prop);
2555
2595
  });
2556
- var fn = __stxCompile(['__scope__'], 'with(__scope__) { return (' + expression + ') }');
2557
- value = fn(unwrapScope);
2596
+ var fn = __stxCompileScoped(unwrapScope, [], 'return (' + expression + ')');
2597
+ value = fn(...__stxArgs(fn, unwrapScope));
2558
2598
  if (value && typeof value === 'function' && (value._isSignal || value._isDerived)) value = value();
2559
2599
  }
2560
2600
  catch (e) {
@@ -2761,8 +2801,8 @@ catch (e) {
2761
2801
  var memoExpr = el.getAttribute('data-stx-memo');
2762
2802
  try {
2763
2803
  var memoScope = { ...globalHelpers, ...scope, ...(findElementScope(el) || {}) };
2764
- var memoFn = __stxCompile(Object.keys(memoScope), 'return ' + memoExpr);
2765
- var memoVals = JSON.stringify(memoFn(...Object.values(memoScope)));
2804
+ var memoFn = __stxCompileScoped(memoScope, [], 'return ' + memoExpr);
2805
+ var memoVals = JSON.stringify(memoFn(...__stxArgs(memoFn, memoScope)));
2766
2806
  if (el.__stx_memo_prev === memoVals) {
2767
2807
  return; // Dependencies unchanged \u2014 skip re-processing
2768
2808
  }
@@ -2814,8 +2854,8 @@ catch (e) {
2814
2854
  else {
2815
2855
  // Use auto-unwrap proxy (Feature #1)
2816
2856
  const unwrapScope = createExpressionAutoUnwrapProxy(capturedScope, expr);
2817
- const fn = __stxCompile(Object.keys(capturedScope), 'return ' + expr);
2818
- bindingNode.textContent = fn(...Object.values(unwrapScope));
2857
+ const fn = __stxCompileScoped(capturedScope, [], 'return ' + expr);
2858
+ bindingNode.textContent = fn(...__stxArgs(fn, unwrapScope));
2819
2859
  }
2820
2860
  }
2821
2861
  catch (e) {
@@ -2823,8 +2863,8 @@ catch (e) {
2823
2863
  // because it converts the signal to its value before the expression runs.
2824
2864
  // Retry without auto-unwrap so signal functions remain callable.
2825
2865
  try {
2826
- const fn = __stxCompile(Object.keys(capturedScope), 'return ' + expr);
2827
- bindingNode.textContent = fn(...Object.values(capturedScope));
2866
+ const fn = __stxCompileScoped(capturedScope, [], 'return ' + expr);
2867
+ bindingNode.textContent = fn(...__stxArgs(fn, capturedScope));
2828
2868
  }
2829
2869
  catch (e2) {
2830
2870
  if (!(e2 instanceof ReferenceError) && !(e2 instanceof TypeError)) console.warn('[STX] Expression error:', expr, e2);
@@ -2940,8 +2980,8 @@ else if (part) {
2940
2980
 
2941
2981
  // Use auto-unwrap proxy (Feature #1)
2942
2982
  const unwrapScope = createExpressionAutoUnwrapProxy(activeScope, expr);
2943
- const fn = __stxCompile(['__scope__'], 'with(__scope__) { return (' + expr + ') }');
2944
- var value = maybeUnwrapSignal(fn(unwrapScope));
2983
+ const fn = __stxCompileScoped(unwrapScope, [], 'return (' + expr + ')');
2984
+ var value = maybeUnwrapSignal(fn(...__stxArgs(fn, unwrapScope)));
2945
2985
  noteExprSuccess(expr);
2946
2986
  return value;
2947
2987
  }
@@ -2949,8 +2989,8 @@ catch (e) {
2949
2989
  // Auto-unwrap can break explicit signal calls like errorData().message
2950
2990
  // Retry without auto-unwrap so signal functions remain callable
2951
2991
  try {
2952
- const fn = __stxCompile(['__scope__'], 'with(__scope__) { return (' + expr + ') }');
2953
- var retried = maybeUnwrapSignal(fn(activeScope));
2992
+ const fn = __stxCompileScoped(activeScope, [], 'return (' + expr + ')');
2993
+ var retried = maybeUnwrapSignal(fn(...__stxArgs(fn, activeScope)));
2954
2994
  noteExprSuccess(expr);
2955
2995
  return retried;
2956
2996
  }
@@ -3289,8 +3329,8 @@ else if (name === 'ref' || name === ':ref' || name === 'x-ref' || name === 'data
3289
3329
  var fn3 = __stxCompile(['__s', '$event'], unwrapVars + ';' + value);
3290
3330
  fn3(eventCapturedScope, handlerEvent);
3291
3331
  } else {
3292
- var fn = __stxCompile(Object.keys(eventCapturedScope).concat(['$event']), value);
3293
- fn(...Object.values(eventCapturedScope), handlerEvent);
3332
+ var fn = __stxCompileScoped(eventCapturedScope, ['$event'], value);
3333
+ fn(...__stxArgs(fn, eventCapturedScope), handlerEvent);
3294
3334
  }
3295
3335
  }
3296
3336
  catch (e) {
@@ -3415,14 +3455,14 @@ catch (e) {
3415
3455
  var value;
3416
3456
  try {
3417
3457
  var unwrapScope = createExpressionAutoUnwrapProxy(capturedScope, expr);
3418
- var fn = __stxCompile(Object.keys(capturedScope), 'return ' + expr);
3419
- value = fn(...Object.values(unwrapScope));
3458
+ var fn = __stxCompileScoped(capturedScope, [], 'return ' + expr);
3459
+ value = fn(...__stxArgs(fn, unwrapScope));
3420
3460
  } catch (e1) {
3421
3461
  // Retry without unwrapping \u2014 handles edge cases where the proxy
3422
3462
  // interferes with certain expression patterns
3423
3463
  try {
3424
- var fn2 = __stxCompile(Object.keys(capturedScope), 'return ' + expr);
3425
- value = fn2(...Object.values(capturedScope));
3464
+ var fn2 = __stxCompileScoped(capturedScope, [], 'return ' + expr);
3465
+ value = fn2(...__stxArgs(fn2, capturedScope));
3426
3466
  } catch (e2) {
3427
3467
  // Suppress ReferenceError/TypeError during async init \u2014 a signal
3428
3468
  // or object may not be ready yet on the first effect run, and
@@ -3467,8 +3507,8 @@ catch (e) {
3467
3507
  return direct();
3468
3508
  try {
3469
3509
  var unwrapScope = createExpressionAutoUnwrapProxy(capturedScope, expr);
3470
- var fn = __stxCompile(['__scope__'], 'with(__scope__) { return (' + expr + ') }');
3471
- return fn(unwrapScope);
3510
+ var fn = __stxCompileScoped(unwrapScope, [], 'return (' + expr + ')');
3511
+ return fn(...__stxArgs(fn, unwrapScope));
3472
3512
  }
3473
3513
  catch (e) {
3474
3514
  if (!(e instanceof ReferenceError) && !(e instanceof TypeError)) console.warn('[STX] ' + attrName + ' get error:', expr, e);
@@ -3605,8 +3645,11 @@ else {
3605
3645
  const capturedScope = { ...globalHelpers, ...passedScope, ...(findElementScope(el) || {}) };
3606
3646
  const keys = Object.keys(capturedScope);
3607
3647
 
3608
- // Pre-compile \u2014 filter out keys that aren't valid JS identifiers
3609
- const safeKeys = keys.filter(k => /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(k));
3648
+ // Pre-compile \u2014 only the names the expression mentions (see
3649
+ // __stxCompileScoped: reading every signal subscribed the class binding to
3650
+ // every signal on the page), and only valid JS identifiers.
3651
+ const mentioned = new Set(__stxNamesIn(expr));
3652
+ const safeKeys = keys.filter(k => mentioned.has(k) && /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(k));
3610
3653
  let fn;
3611
3654
  try {
3612
3655
  fn = __stxCompile(safeKeys, 'return ' + expr);
@@ -3678,13 +3721,13 @@ else {
3678
3721
  // throw TypeError.
3679
3722
  try {
3680
3723
  const unwrapScope = createExpressionAutoUnwrapProxy(capturedScope, expr);
3681
- const fn = __stxCompile(Object.keys(capturedScope), 'return ' + expr);
3682
- return fn(...Object.values(unwrapScope));
3724
+ const fn = __stxCompileScoped(capturedScope, [], 'return ' + expr);
3725
+ return fn(...__stxArgs(fn, unwrapScope));
3683
3726
  }
3684
3727
  catch (e1) {
3685
3728
  try {
3686
- const fn2 = __stxCompile(Object.keys(capturedScope), 'return ' + expr);
3687
- return fn2(...Object.values(capturedScope));
3729
+ const fn2 = __stxCompileScoped(capturedScope, [], 'return ' + expr);
3730
+ return fn2(...__stxArgs(fn2, capturedScope));
3688
3731
  }
3689
3732
  catch (e2) {
3690
3733
  if (!(e2 instanceof ReferenceError) && !(e2 instanceof TypeError)) console.warn('[STX] Style expression error:', expr, e2);
@@ -4169,8 +4212,8 @@ else {
4169
4212
  return expressionCallsSignal(expression, prop)
4170
4213
  || expressionUsesSignalApi(expression, prop);
4171
4214
  });
4172
- const fn = __stxCompile(Object.keys(scope), 'return ' + expression);
4173
- return fn(...Object.values(unwrapScope));
4215
+ const fn = __stxCompileScoped(scope, [], 'return ' + expression);
4216
+ return fn(...__stxArgs(fn, unwrapScope));
4174
4217
  }
4175
4218
  catch (e) {
4176
4219
  if (!(e instanceof ReferenceError) && !(e instanceof TypeError)) console.warn('[STX] Expression error:', expression, e);
@@ -4190,10 +4233,12 @@ catch (e) {
4190
4233
  return expressionCallsSignal(expression, prop)
4191
4234
  || expressionUsesSignalApi(expression, prop);
4192
4235
  });
4193
- // new Function body is non-strict, so with() works \u2014 only accessed
4194
- // properties trigger the proxy's get trap and register as dependencies
4195
- const fn = __stxCompile(['__scope__'], 'with(__scope__) { return ' + expression + ' }');
4196
- return fn(unwrapScope);
4236
+ // Compiled over the names the expression mentions (__stxCompileScoped),
4237
+ // so only those are read and register as dependencies. It used with()
4238
+ // over the proxy, which JavaScriptCore resolves through proxy traps on
4239
+ // every identifier - 36x slower than V8 for a list of message rows.
4240
+ const fn = __stxCompileScoped(unwrapScope, [], 'return ' + expression + '');
4241
+ return fn(...__stxArgs(fn, unwrapScope));
4197
4242
  } catch (e) {
4198
4243
  if (!(e instanceof ReferenceError) && !(e instanceof TypeError)) console.warn('[STX] Expression error:', expression, e);
4199
4244
  return '';
@@ -4709,14 +4754,14 @@ catch (e) {
4709
4754
  var scope = { ...globalHelpers, ...capturedComponentScope, ...(b.capturedElementScope || {}) };
4710
4755
  try {
4711
4756
  var unwrapScope = createExpressionAutoUnwrapProxy(scope, expression);
4712
- // new Function body is non-strict, so with() works.
4713
- var fn = __stxCompile(['__scope__'], 'with(__scope__) { return ' + expression + ' }');
4714
- return fn(unwrapScope);
4757
+ // Compiled over the names the expression mentions (see __stxCompileScoped).
4758
+ var fn = __stxCompileScoped(unwrapScope, [], 'return ' + expression + '');
4759
+ return fn(...__stxArgs(fn, unwrapScope));
4715
4760
  }
4716
4761
  catch (e1) {
4717
4762
  try {
4718
- var fn2 = __stxCompile(['__scope__'], 'with(__scope__) { return ' + expression + ' }');
4719
- return fn2(scope);
4763
+ var fn2 = __stxCompileScoped(scope, [], 'return ' + expression + '');
4764
+ return fn2(...__stxArgs(fn2, scope));
4720
4765
  }
4721
4766
  catch (e2) {
4722
4767
  if (!(e2 instanceof ReferenceError) && !(e2 instanceof TypeError)) console.warn('[STX] Expression error:', expression, e2);
@@ -4959,15 +5004,15 @@ catch (e) { /* a disposer of its own is not this branch's problem */ }
4959
5004
  try {
4960
5005
  const scope = { ...globalHelpers, ...capturedComponentScope, ...(capturedElementScope || {}) };
4961
5006
  const unwrapScope = createExpressionAutoUnwrapProxy(scope, expression);
4962
- const fn = __stxCompile(['__scope__'], 'with(__scope__) { return ' + expression + ' }');
4963
- return fn(unwrapScope);
5007
+ const fn = __stxCompileScoped(unwrapScope, [], 'return ' + expression + '');
5008
+ return fn(...__stxArgs(fn, unwrapScope));
4964
5009
  }
4965
5010
  catch (e1) {
4966
5011
  try {
4967
5012
  // Retry without the unwrap proxy so call-syntax (signal()) works.
4968
5013
  const scope2 = { ...globalHelpers, ...capturedComponentScope, ...(capturedElementScope || {}) };
4969
- const fn2 = __stxCompile(['__scope__'], 'with(__scope__) { return ' + expression + ' }');
4970
- return fn2(scope2);
5014
+ const fn2 = __stxCompileScoped(scope2, [], 'return ' + expression + '');
5015
+ return fn2(...__stxArgs(fn2, scope2));
4971
5016
  }
4972
5017
  catch (e2) {
4973
5018
  if (!(e2 instanceof ReferenceError) && !(e2 instanceof TypeError)) console.warn('[STX] Expression error:', expression, e2);
@@ -8259,8 +8304,8 @@ else {
8259
8304
  if (matches) {
8260
8305
  matches.forEach(match => {
8261
8306
  const expr = match.replace(/^\\{\\{\\s*|\\s*\\}\\}$/g, '');
8262
- const fn = __stxCompile(Object.keys(componentScope), 'return ' + expr);
8263
- const value = fn(...Object.values(componentScope));
8307
+ const fn = __stxCompileScoped(componentScope, [], 'return ' + expr);
8308
+ const value = fn(...__stxArgs(fn, componentScope));
8264
8309
  result = result.replace(match, value != null ? value : '');
8265
8310
  });
8266
8311
  }
@@ -8286,8 +8331,8 @@ else if (el.tagName === 'META') {
8286
8331
  matches.forEach(match => {
8287
8332
  const expr = match.replace(/^\\{\\{\\s*|\\s*\\}\\}$/g, '');
8288
8333
  if (/^__[A-Z_]+__$/.test(expr.trim())) return;
8289
- const fn = __stxCompile(Object.keys(componentScope), 'return ' + expr);
8290
- const value = fn(...Object.values(componentScope));
8334
+ const fn = __stxCompileScoped(componentScope, [], 'return ' + expr);
8335
+ const value = fn(...__stxArgs(fn, componentScope));
8291
8336
  result = result.replace(match, value != null ? value : '');
8292
8337
  });
8293
8338
  }
package/dist/ssg.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // @bun
2
- import{Ck as Fq,xk as Uq,yk as Iq}from"./chunk-necx4e30.js";import{Dk as Eq,Ek as Tq,Fk as Dq}from"./chunk-frp9fc7j.js";import{_k as _q,bl as zq,cl as Aq}from"./chunk-se8fh272.js";import"./chunk-ry56srm9.js";import"./chunk-qjvny3wf.js";import{Lp as P,Tm as Oq,jo as l,mo as Hq,xr as n}from"./chunk-r5dta1qf.js";import"./chunk-jc6wrxrh.js";import"./chunk-2xpdcr8c.js";import"./chunk-v90kxg77.js";import"./chunk-4arms0am.js";import"./chunk-135mme4g.js";import{nt as Xq}from"./chunk-v8ccphfs.js";import{st as d}from"./chunk-w1asc0zd.js";import"./chunk-kd95t585.js";import"./chunk-6njr31wk.js";import"./chunk-xk402w4a.js";import{Zt as Bq}from"./chunk-dnard9gp.js";import"./chunk-vgx5077x.js";import"./chunk-met6wtbk.js";import"./chunk-ta6z7k4p.js";import"./chunk-zxptxz2b.js";import"./chunk-7racewc5.js";import{Aw as Lq,Bw as Nq,ww as Yq,xw as Vq,yw as jq,zw as Gq}from"./chunk-e03m4har.js";import"./chunk-vsqx756d.js";import{Sw as y}from"./chunk-m8kem5ca.js";import O from"fs";import j from"path";import{createHash as xq}from"crypto";function yq(q){try{return new Bun.Transpiler({loader:"js",minifyWhitespace:!0}).transformSync(q).replace(/\}(var |let |const |function )/g,"};$1").trim()}catch{return q}}var Pq=/<script\s+type="stx\/island"\s+data-stx-island="([^"]+)"([^>]*)>([\s\S]*?)<\/script>/g;function Cq(q){return Bun.hash(q).toString(16)}function Qq(q,Z={}){if(!q.includes('type="stx/island"'))return{html:q,chunks:[]};let $=new Map,Q=q.replace(Pq,(J,W,z,A)=>{let G=A.trim();if(!G)return J;if(/\bdata-stx-src=/.test(z))return J;if(Z.minify)G=yq(G);let X=Cq(G);if(!$.has(X))$.set(X,G);let B=Z.integrity?` data-stx-integrity="sha384-${xq("sha384").update(G).digest("base64")}"`:"";return`<script type="stx/island" data-stx-island="${W}" data-stx-src="/_stx/islands/${X}.js"${B}${z}></script>`}),K=Array.from($,([J,W])=>({hash:J,code:W}));return{html:Q,chunks:K}}var gq=new Set(["visible","idle"]);function Zq(q){if(!q.includes("data-stx-src="))return q;let Z=new Map,$=/data-stx-scope="([^"]+)"[^>]*?stx-hydrate="([^"]+)"/g,Q;while((Q=$.exec(q))!==null)Z.set(Q[1],Q[2]);let K=new Set,J=/data-stx-island="([^"]+)"[^>]*?data-stx-src="([^"]+)"/g,W;while((W=J.exec(q))!==null)if(gq.has(Z.get(W[1])||""))K.add(W[2]);let z=q.lastIndexOf("</head>");if(K.size===0||z===-1)return q;let A=Array.from(K).filter((G)=>!q.includes(`rel="prefetch" href="${G}"`)).map((G)=>`<link rel="prefetch" href="${G}" as="script">`).join("");if(!A)return q;return q.slice(0,z)+A+q.slice(z)}var fq=["STX_SITE_URL","SITE_URL","URL","VERCEL_URL","CF_PAGES_URL"];function h(q){let Z=q.trim();if(!Z)return null;let $=/^https?:\/\//i.test(Z)?Z:`https://${Z}`;try{return new URL($).origin+new URL($).pathname.replace(/\/$/,"")}catch{return null}}function mq(q){for(let Z of fq){let $=q[Z];if(!$)continue;let Q=h($);if(Q)return{url:Q,source:"env",via:Z}}return null}function $q(q){if(!q||typeof q!=="object")return null;let Z=q,$=Z.site?.url??Z.url??Z.app?.url;return typeof $==="string"?h($):null}async function dq(q){let{existsSync:Z}=await import("fs"),$=await import("path");for(let Q of["site.config.ts","site.config.js",".config/site.config.ts"]){let K=$.resolve(q,Q);if(!Z(K))continue;try{let J=await import(K),W=$q(J.default??J);if(W)return W}catch{}}return null}async function Kq(q={}){let Z=q.cwd??process.cwd(),$=q.env??process.env;if(q.explicit){let W=h(q.explicit);if(W)return{url:W,source:"option"}}let Q=$q(q.stxConfig);if(Q)return{url:Q,source:"stx.config",via:"site.url"};let K=await dq(Z);if(K)return{url:K,source:"site.config",via:"url"};let J=mq($);if(J)return J;return{url:"http://localhost",source:"fallback"}}function Wq(){return["No site URL configured \u2014 sitemap.xml and robots.txt will point at http://localhost."," Set one in stx.config.ts (site: { url: 'https://example.com' }), in site.config.ts,"," via --domain, or with SITE_URL in the build environment."].join(`
2
+ import{Ck as Fq,xk as Uq,yk as Iq}from"./chunk-necx4e30.js";import{Dk as Eq,Ek as Tq,Fk as Dq}from"./chunk-frp9fc7j.js";import{_k as _q,bl as zq,cl as Aq}from"./chunk-17s5aghd.js";import"./chunk-q2jvq038.js";import"./chunk-qjvny3wf.js";import{Lp as P,Tm as Oq,jo as l,mo as Hq,xr as n}from"./chunk-0vgexs1k.js";import"./chunk-jc6wrxrh.js";import"./chunk-2xpdcr8c.js";import"./chunk-v90kxg77.js";import"./chunk-4arms0am.js";import"./chunk-135mme4g.js";import{nt as Xq}from"./chunk-243n8zxy.js";import{st as d}from"./chunk-w1asc0zd.js";import"./chunk-kd95t585.js";import"./chunk-w54m70rf.js";import"./chunk-xk402w4a.js";import{Zt as Bq}from"./chunk-dnard9gp.js";import"./chunk-vgx5077x.js";import"./chunk-met6wtbk.js";import"./chunk-ta6z7k4p.js";import"./chunk-zxptxz2b.js";import"./chunk-7racewc5.js";import{Aw as Lq,Bw as Nq,ww as Yq,xw as Vq,yw as jq,zw as Gq}from"./chunk-e03m4har.js";import"./chunk-vsqx756d.js";import{Sw as y}from"./chunk-m8kem5ca.js";import O from"fs";import j from"path";import{createHash as xq}from"crypto";function yq(q){try{return new Bun.Transpiler({loader:"js",minifyWhitespace:!0}).transformSync(q).replace(/\}(var |let |const |function )/g,"};$1").trim()}catch{return q}}var Pq=/<script\s+type="stx\/island"\s+data-stx-island="([^"]+)"([^>]*)>([\s\S]*?)<\/script>/g;function Cq(q){return Bun.hash(q).toString(16)}function Qq(q,Z={}){if(!q.includes('type="stx/island"'))return{html:q,chunks:[]};let $=new Map,Q=q.replace(Pq,(J,W,z,A)=>{let G=A.trim();if(!G)return J;if(/\bdata-stx-src=/.test(z))return J;if(Z.minify)G=yq(G);let X=Cq(G);if(!$.has(X))$.set(X,G);let B=Z.integrity?` data-stx-integrity="sha384-${xq("sha384").update(G).digest("base64")}"`:"";return`<script type="stx/island" data-stx-island="${W}" data-stx-src="/_stx/islands/${X}.js"${B}${z}></script>`}),K=Array.from($,([J,W])=>({hash:J,code:W}));return{html:Q,chunks:K}}var gq=new Set(["visible","idle"]);function Zq(q){if(!q.includes("data-stx-src="))return q;let Z=new Map,$=/data-stx-scope="([^"]+)"[^>]*?stx-hydrate="([^"]+)"/g,Q;while((Q=$.exec(q))!==null)Z.set(Q[1],Q[2]);let K=new Set,J=/data-stx-island="([^"]+)"[^>]*?data-stx-src="([^"]+)"/g,W;while((W=J.exec(q))!==null)if(gq.has(Z.get(W[1])||""))K.add(W[2]);let z=q.lastIndexOf("</head>");if(K.size===0||z===-1)return q;let A=Array.from(K).filter((G)=>!q.includes(`rel="prefetch" href="${G}"`)).map((G)=>`<link rel="prefetch" href="${G}" as="script">`).join("");if(!A)return q;return q.slice(0,z)+A+q.slice(z)}var fq=["STX_SITE_URL","SITE_URL","URL","VERCEL_URL","CF_PAGES_URL"];function h(q){let Z=q.trim();if(!Z)return null;let $=/^https?:\/\//i.test(Z)?Z:`https://${Z}`;try{return new URL($).origin+new URL($).pathname.replace(/\/$/,"")}catch{return null}}function mq(q){for(let Z of fq){let $=q[Z];if(!$)continue;let Q=h($);if(Q)return{url:Q,source:"env",via:Z}}return null}function $q(q){if(!q||typeof q!=="object")return null;let Z=q,$=Z.site?.url??Z.url??Z.app?.url;return typeof $==="string"?h($):null}async function dq(q){let{existsSync:Z}=await import("fs"),$=await import("path");for(let Q of["site.config.ts","site.config.js",".config/site.config.ts"]){let K=$.resolve(q,Q);if(!Z(K))continue;try{let J=await import(K),W=$q(J.default??J);if(W)return W}catch{}}return null}async function Kq(q={}){let Z=q.cwd??process.cwd(),$=q.env??process.env;if(q.explicit){let W=h(q.explicit);if(W)return{url:W,source:"option"}}let Q=$q(q.stxConfig);if(Q)return{url:Q,source:"stx.config",via:"site.url"};let K=await dq(Z);if(K)return{url:K,source:"site.config",via:"url"};let J=mq($);if(J)return J;return{url:"http://localhost",source:"fallback"}}function Wq(){return["No site URL configured \u2014 sitemap.xml and robots.txt will point at http://localhost."," Set one in stx.config.ts (site: { url: 'https://example.com' }), in site.config.ts,"," via --domain, or with SITE_URL in the build environment."].join(`
3
3
  `)}class wq{cacheDir;cache=new Map;loaded=!1;salt;constructor(q,Z=""){this.cacheDir=q,this.salt=Z}async load(){if(this.loaded)return;let q=j.join(this.cacheDir,"build-cache.json");if(await Bun.file(q).exists())try{let Z=JSON.parse(await Bun.file(q).text());for(let[$,Q]of Object.entries(Z))this.cache.set($,Q)}catch{}this.loaded=!0}async save(){await O.promises.mkdir(this.cacheDir,{recursive:!0});let q=j.join(this.cacheDir,"build-cache.json"),Z={};for(let[$,Q]of this.cache)Z[$]=Q;await Bun.write(q,JSON.stringify(Z))}getHash(q,Z){let $=O.statSync(q),Q=`${this.salt}|${q}:${$.mtimeMs}`;for(let J of Z)if(O.existsSync(J)){let W=O.statSync(J);Q+=`:${J}:${W.mtimeMs}`}let K=0;for(let J=0;J<Q.length;J++){let W=Q.charCodeAt(J);K=(K<<5)-K+W,K=K&K}return Math.abs(K).toString(36)}get(q,Z){let $=this.cache.get(q);if(!$)return null;let Q=this.getHash(Z,$.dependencies??[]);if($.hash!==Q)return this.cache.delete(q),null;return $.html}set(q,Z,$,Q){let K=this.getHash(Z,$);this.cache.set(q,{hash:K,html:Q,generatedAt:Date.now(),dependencies:$})}}class Rq{cacheDir;constructor(q){this.cacheDir=q}getFilePath(q){let Z=q.replace(/[^a-zA-Z0-9]/g,"_")+".json";return j.join(this.cacheDir,"isr",Z)}async get(q){let Z=this.getFilePath(q);if(!await Bun.file(Z).exists())return null;try{return JSON.parse(await Bun.file(Z).text())}catch{return null}}async set(q,Z){let $=this.getFilePath(q);await O.promises.mkdir(j.dirname($),{recursive:!0}),await Bun.write($,JSON.stringify(Z))}async invalidate(q){let Z=this.getFilePath(q);if(await Bun.file(Z).exists())await O.promises.unlink(Z)}async invalidatePattern(q){let Z=j.join(this.cacheDir,"isr");if(!O.existsSync(Z))return;let $=await O.promises.readdir(Z);for(let Q of $){let K=Q.replace(/_/g,"/").replace(".json","");if(q.test(K))await O.promises.unlink(j.join(Z,Q))}}async needsRevalidation(q){let Z=await this.get(q);if(!Z)return!0;return Date.now()>Z.revalidateAfter}}async function pq(q){try{let $=(await Bun.file(q).text()).match(/<script\s+server\b[^>]*>([\s\S]*?)<\/script>/i);if(!$)return null;let Q=$[1];if(!Q.includes("getStaticPaths"))return null;let K=Q.match(/(?:export\s+)?(?:async\s+)?function\s+getStaticPaths\s*\([^)]*\)\s*\{([\s\S]*?)\n[\t ]*\}/);if(!K)return null;return await Function(`
4
4
  return (async function getStaticPaths() {
5
5
  ${K[1]}
@@ -41,7 +41,7 @@ ${q.map((Q)=>{let K=new URL(Q.loc,Z).href,J=` <url>
41
41
  ${$.join(`
42
42
  `)}
43
43
  </channel>
44
- </rss>`}async function aq(q={}){let Z=Date.now();Aq();let $=await n(process.cwd()),Q=$.build||{},K=await Kq({explicit:q.domain||Q.domain,stxConfig:$});if(K.source==="fallback"&&(q.sitemap??Q.sitemap??!0))console.warn(Wq());let J={router:q.router??$?.router??{},pagesDir:q.pagesDir||Q.pagesDir||"pages",outputDir:q.outputDir||Q.outputDir||"dist",baseUrl:q.baseUrl||Q.baseUrl||"/",domain:K.url,revalidate:q.revalidate??Q.revalidate??!1,sitemap:q.sitemap??Q.sitemap??!0,sitemapExclude:q.sitemapExclude||Q.sitemapExclude||[],robots:q.robots??Q.robots??!0,rss:q.rss??Q.rss??!1,concurrency:q.concurrency||Q.concurrency||10,cache:q.cache??Q.cache??!0,cacheDir:q.cacheDir||Q.cacheDir||d(process.cwd(),"ssg-cache"),contentLoaders:q.contentLoaders||[],hooks:q.hooks||{},minify:q.minify??Q.minify??!0,generate404:q.generate404??Q.generate404??!0,publicDir:q.publicDir||Q.publicDir||"public",trailingSlash:q.trailingSlash??Q.trailingSlash??!1,cleanOutput:q.cleanOutput??Q.cleanOutput??!0,cacheSalt:q.cacheSalt??"",partialsDir:q.partialsDir||$?.partialsDir||"",componentsDir:q.componentsDir||$?.componentsDir||"",failOnIncludeError:q.failOnIncludeError??!0,chunkIslands:q.chunkIslands===!0,prefetchIslands:q.prefetchIslands===!0,integrityIslands:q.integrityIslands===!0},W={totalPages:0,successCount:0,failedCount:0,cachedCount:0,buildTime:0,pages:[],errors:[]},z=new Set,A=0,G={},X={};await J.hooks.onBuildStart?.();try{if(J.cleanOutput&&O.existsSync(J.outputDir))await O.promises.rm(J.outputDir,{recursive:!0});await O.promises.mkdir(J.outputDir,{recursive:!0});let L=J.cacheSalt;if(!L){let{resolveUserCssConfig:Y,fingerprintConfig:N}=await import("./chunk-eczq4cxz.js");try{L=N(await Y(process.cwd()))}catch{}}let{prepareImageDelivery:_}=await import("./chunk-pf8575bx.js"),F=await _(J.publicDir,J.outputDir);if(F.count>0)console.log(`Optimized ${F.count} image(s) for responsive delivery`),L=[L,F.fingerprint].filter(Boolean).join(":");let C=new wq(J.cacheDir,L);if(J.cache)await C.load();try{let{generateCss:Y}=await import("./chunk-eczq4cxz.js");await Y('<div class="bg-black"></div>')}catch{}Yq();let kq=$?.routeMiddleware?.dir||"middleware";await jq(process.cwd(),kq);let p=Vq();if(p.length>0)console.log(`Loaded ${p.length} middleware: ${p.join(", ")}`);let bq=$?.routeMiddleware?.global||[];Fq($?.layoutsDir,d(process.cwd()));let i=l(".",{pagesDir:J.pagesDir,pagesDirs:$?._layerPageDirs});console.log(`Found ${i.length} routes`);let g=[];for(let Y of i){let N=await uq(Y);for(let H of N)g.push({route:Y,url:H.url,params:H.params,props:H.props,revalidate:H.revalidate??J.revalidate})}W.totalPages=g.length,console.log(`Generating ${W.totalPages} pages...`);let b=[],s=[];for(let Y=0;Y<g.length;Y+=J.concurrency)s.push(g.slice(Y,Y+J.concurrency));for(let Y of s)await Promise.all(Y.map(async(N)=>{let{route:H,url:V,params:S,props:Sq,revalidate:a}=N;try{await J.hooks.onPageStart?.(V);let w=await Bun.file(H.filePath).text(),R=JJ(w),vq=R?.middleware?Array.isArray(R.middleware)?R.middleware:[R.middleware]:[],t=[...bq,...vq];if(t.length>0){let D=Gq(V,S,R||{}),M=Lq(D,null,void 0,{isServer:!0}),E=await Nq(t,M);if(E.redirect){let U=typeof E.redirect==="string"?E.redirect:E.redirect.path||E.redirect,x=QJ(String(U),V),k=ZJ(V,J);await O.promises.mkdir(j.dirname(k),{recursive:!0}),await Bun.write(k,x),W.successCount++,W.pages.push({route:V,outputPath:k,size:Buffer.byteLength(x),cached:!1}),b.push({loc:V,lastmod:new Date().toISOString()}),console.log(` \u21B3 ${V} \u2192 redirect to ${U}`);return}if(E.abort){let U=typeof E.abort==="string"?E.abort:E.abort?.error?.message||"aborted";console.warn(` \u21B3 ${V} \u2014 middleware aborted: ${U}`);return}}let e=w.match(/definePageMeta\s*\(\s*\{[\s\S]*?validate\s*:\s*((?:\([^)]*\)|[^,}])*(?:\{[\s\S]*?\})?)/m);if(e)try{if(!await Function("route",`
44
+ </rss>`}async function aq(q={}){let Z=Date.now();Aq();let $=await n(process.cwd()),Q=$.build||{},K=await Kq({explicit:q.domain||Q.domain,stxConfig:$});if(K.source==="fallback"&&(q.sitemap??Q.sitemap??!0))console.warn(Wq());let J={router:q.router??$?.router??{},pagesDir:q.pagesDir||Q.pagesDir||"pages",outputDir:q.outputDir||Q.outputDir||"dist",baseUrl:q.baseUrl||Q.baseUrl||"/",domain:K.url,revalidate:q.revalidate??Q.revalidate??!1,sitemap:q.sitemap??Q.sitemap??!0,sitemapExclude:q.sitemapExclude||Q.sitemapExclude||[],robots:q.robots??Q.robots??!0,rss:q.rss??Q.rss??!1,concurrency:q.concurrency||Q.concurrency||10,cache:q.cache??Q.cache??!0,cacheDir:q.cacheDir||Q.cacheDir||d(process.cwd(),"ssg-cache"),contentLoaders:q.contentLoaders||[],hooks:q.hooks||{},minify:q.minify??Q.minify??!0,generate404:q.generate404??Q.generate404??!0,publicDir:q.publicDir||Q.publicDir||"public",trailingSlash:q.trailingSlash??Q.trailingSlash??!1,cleanOutput:q.cleanOutput??Q.cleanOutput??!0,cacheSalt:q.cacheSalt??"",partialsDir:q.partialsDir||$?.partialsDir||"",componentsDir:q.componentsDir||$?.componentsDir||"",failOnIncludeError:q.failOnIncludeError??!0,chunkIslands:q.chunkIslands===!0,prefetchIslands:q.prefetchIslands===!0,integrityIslands:q.integrityIslands===!0},W={totalPages:0,successCount:0,failedCount:0,cachedCount:0,buildTime:0,pages:[],errors:[]},z=new Set,A=0,G={},X={};await J.hooks.onBuildStart?.();try{if(J.cleanOutput&&O.existsSync(J.outputDir))await O.promises.rm(J.outputDir,{recursive:!0});await O.promises.mkdir(J.outputDir,{recursive:!0});let L=J.cacheSalt;if(!L){let{resolveUserCssConfig:Y,fingerprintConfig:N}=await import("./chunk-azg8n1ez.js");try{L=N(await Y(process.cwd()))}catch{}}let{prepareImageDelivery:_}=await import("./chunk-pf8575bx.js"),F=await _(J.publicDir,J.outputDir);if(F.count>0)console.log(`Optimized ${F.count} image(s) for responsive delivery`),L=[L,F.fingerprint].filter(Boolean).join(":");let C=new wq(J.cacheDir,L);if(J.cache)await C.load();try{let{generateCss:Y}=await import("./chunk-azg8n1ez.js");await Y('<div class="bg-black"></div>')}catch{}Yq();let kq=$?.routeMiddleware?.dir||"middleware";await jq(process.cwd(),kq);let p=Vq();if(p.length>0)console.log(`Loaded ${p.length} middleware: ${p.join(", ")}`);let bq=$?.routeMiddleware?.global||[];Fq($?.layoutsDir,d(process.cwd()));let i=l(".",{pagesDir:J.pagesDir,pagesDirs:$?._layerPageDirs});console.log(`Found ${i.length} routes`);let g=[];for(let Y of i){let N=await uq(Y);for(let H of N)g.push({route:Y,url:H.url,params:H.params,props:H.props,revalidate:H.revalidate??J.revalidate})}W.totalPages=g.length,console.log(`Generating ${W.totalPages} pages...`);let b=[],s=[];for(let Y=0;Y<g.length;Y+=J.concurrency)s.push(g.slice(Y,Y+J.concurrency));for(let Y of s)await Promise.all(Y.map(async(N)=>{let{route:H,url:V,params:S,props:Sq,revalidate:a}=N;try{await J.hooks.onPageStart?.(V);let w=await Bun.file(H.filePath).text(),R=JJ(w),vq=R?.middleware?Array.isArray(R.middleware)?R.middleware:[R.middleware]:[],t=[...bq,...vq];if(t.length>0){let D=Gq(V,S,R||{}),M=Lq(D,null,void 0,{isServer:!0}),E=await Nq(t,M);if(E.redirect){let U=typeof E.redirect==="string"?E.redirect:E.redirect.path||E.redirect,x=QJ(String(U),V),k=ZJ(V,J);await O.promises.mkdir(j.dirname(k),{recursive:!0}),await Bun.write(k,x),W.successCount++,W.pages.push({route:V,outputPath:k,size:Buffer.byteLength(x),cached:!1}),b.push({loc:V,lastmod:new Date().toISOString()}),console.log(` \u21B3 ${V} \u2192 redirect to ${U}`);return}if(E.abort){let U=typeof E.abort==="string"?E.abort:E.abort?.error?.message||"aborted";console.warn(` \u21B3 ${V} \u2014 middleware aborted: ${U}`);return}}let e=w.match(/definePageMeta\s*\(\s*\{[\s\S]*?validate\s*:\s*((?:\([^)]*\)|[^,}])*(?:\{[\s\S]*?\})?)/m);if(e)try{if(!await Function("route",`
45
45
  const validate = ${e[1]};
46
46
  return validate(route);
47
47
  `)({params:S})){console.warn(`Validation failed for ${V}, skipping...`);return}}catch{}let I=null,qq=!1;if(J.cache){if(I=C.get(V,H.filePath),I)qq=!0,W.cachedCount++}if(!I){let D=await Mq(H,S,Sq,J,$);if(I=D.html,J.failOnIncludeError&&D.includeFailures.length>0)throw Error(`${D.includeFailures.length} include(s) failed to resolve, so this page would have shipped with an error banner where the markup should be:
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@stacksjs/stx",
3
3
  "type": "module",
4
- "version": "0.2.365",
4
+ "version": "0.2.367",
5
5
  "description": "A performant UI Framework. Powered by Bun.",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",
@@ -118,12 +118,12 @@
118
118
  "dependencies": {
119
119
  "@stacksjs/ts-css": "^0.3.2",
120
120
  "@stacksjs/clapp": "^0.2.16",
121
- "@stacksjs/desktop": "0.2.365",
122
- "@stacksjs/sanitizer": "0.2.365",
121
+ "@stacksjs/desktop": "0.2.367",
122
+ "@stacksjs/sanitizer": "0.2.367",
123
123
  "@stacksjs/ts-i18n": "^0.1.11",
124
- "bun-plugin-stx": "0.2.365",
124
+ "bun-plugin-stx": "0.2.367",
125
125
  "bunfig": "^0.15.19",
126
- "stx-router": "0.2.365",
126
+ "stx-router": "0.2.367",
127
127
  "ts-broadcasting": "^0.0.10",
128
128
  "ts-images": "^0.2.22",
129
129
  "ts-syntax-highlighter": "^0.2.1"