@qwik.dev/core 2.0.0-beta.30 → 2.0.0-beta.32

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/server.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * @qwik.dev/core/server 2.0.0-beta.30-dev+5421ed4
3
+ * @qwik.dev/core/server 2.0.0-beta.32-dev+0e29f8a
4
4
  * Copyright QwikDev. All Rights Reserved.
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://github.com/QwikDev/qwik/blob/main/LICENSE
@@ -124,6 +124,7 @@ var isString = (v) => {
124
124
  };
125
125
 
126
126
  // packages/qwik/src/core/shared/error/error.ts
127
+ var baseUrl = "https://qwikdev-build-v2.qwik-8nx.pages.dev/docs/errors/#Q";
127
128
  var codeToText = (code, ...parts) => {
128
129
  if (qDev) {
129
130
  const MAP = [
@@ -201,8 +202,10 @@ Verify that the Qwik libraries you're using are in "resolve.noExternal[]" and in
201
202
  // 32
202
203
  "SerializerSymbol function returned rejected promise",
203
204
  // 33
204
- "Serialization Error: Cannot serialize function: {{0}}"
205
+ "Serialization Error: Cannot serialize function: {{0}}",
205
206
  // 34
207
+ "Cannot read .value of a clientOnly async signal during SSR. Use .loading to check state, or provide an initial value."
208
+ // 35
206
209
  ];
207
210
  let text = MAP[code] ?? "";
208
211
  if (parts.length) {
@@ -216,7 +219,7 @@ Verify that the Qwik libraries you're using are in "resolve.noExternal[]" and in
216
219
  }
217
220
  return `Code(Q${code}): ${text}`;
218
221
  } else {
219
- return `Code(Q${code}) https://github.com/QwikDev/qwik/blob/build/v2/packages/qwik/src/core/shared/error/error.ts#${parts.join()}L${9 + code}`;
222
+ return `Code(Q${code}) ${baseUrl}${code}`;
220
223
  }
221
224
  };
222
225
  var qError = (code, errorMessageArgs = []) => {
@@ -227,6 +230,10 @@ var qError = (code, errorMessageArgs = []) => {
227
230
  // packages/qwik/src/core/shared/qrl/qrl-utils.ts
228
231
  import { isDev as isDev3 } from "@qwik.dev/core/build";
229
232
  var SYNC_QRL = "<sync>";
233
+ var getSymbolHash = (symbolName) => {
234
+ const index = symbolName.lastIndexOf("_") + 1;
235
+ return symbolName.slice(index);
236
+ };
230
237
 
231
238
  // packages/qwik/src/core/shared/types.ts
232
239
  var DEBUG_TYPE = "q:type";
@@ -680,7 +687,7 @@ function convertStyleIdsToString(scopedStyleIds) {
680
687
 
681
688
  // packages/qwik/src/core/shared/utils/event-names.ts
682
689
  var isHtmlAttributeAnEventName = (name) => {
683
- return name.charCodeAt(0) === 113 && name.charCodeAt(1) === 45 && name.charCodeAt(3) === 58;
690
+ return name.charCodeAt(0) === 113 && name.charCodeAt(1) === 45 && (name.charCodeAt(3) === 58 || name.charCodeAt(3) === 112 && name.charCodeAt(4) === 58);
684
691
  };
685
692
  function isPreventDefault(key) {
686
693
  return key.startsWith("preventdefault:");
@@ -749,7 +756,8 @@ var serializeClass = (obj) => {
749
756
  }
750
757
  const classes = [];
751
758
  if (isArray(obj)) {
752
- for (const o of obj) {
759
+ for (let i = 0; i < obj.length; i++) {
760
+ const o = obj[i];
753
761
  const classList = serializeClass(o);
754
762
  if (classList) {
755
763
  classes.push(classList);
@@ -828,19 +836,90 @@ function isAriaAttribute(prop) {
828
836
  import { isBrowser as isBrowser3 } from "@qwik.dev/core/build";
829
837
 
830
838
  // packages/qwik/src/core/preloader/bundle-graph.ts
831
- import { isBrowser as isBrowser2 } from "@qwik.dev/core/build";
839
+ import { isServer as isServer4 } from "@qwik.dev/core/build";
840
+
841
+ // packages/qwik/src/core/shared/platform/platform.ts
842
+ import { isServer as isServer2 } from "@qwik.dev/core/build";
843
+ var createPlatform = () => {
844
+ return {
845
+ isServer: isServer2,
846
+ importSymbol(containerEl, url, symbolName) {
847
+ if (isServer2) {
848
+ const hash = getSymbolHash(symbolName);
849
+ const regSym = globalThis.__qwik_reg_symbols?.get(hash);
850
+ if (regSym) {
851
+ return regSym;
852
+ }
853
+ throw qError(6 /* dynamicImportFailed */, [symbolName]);
854
+ }
855
+ if (!url) {
856
+ throw qError(14 /* qrlMissingChunk */, [symbolName]);
857
+ }
858
+ if (!containerEl) {
859
+ throw qError(13 /* qrlMissingContainer */, [url, symbolName]);
860
+ }
861
+ const urlDoc = toUrl(containerEl.ownerDocument, containerEl, url).toString();
862
+ const urlCopy = new URL(urlDoc);
863
+ urlCopy.hash = "";
864
+ const importURL = urlCopy.href;
865
+ return import(
866
+ /* @vite-ignore */
867
+ importURL
868
+ ).then((mod) => {
869
+ return mod[symbolName];
870
+ });
871
+ },
872
+ raf: (fn) => {
873
+ return new Promise((resolve) => {
874
+ requestAnimationFrame(() => {
875
+ resolve(fn());
876
+ });
877
+ });
878
+ },
879
+ chunkForSymbol(symbolName, chunk) {
880
+ return [symbolName, chunk ?? "_"];
881
+ }
882
+ };
883
+ };
884
+ var toUrl = (doc2, containerEl, url) => {
885
+ const baseURI = doc2.baseURI;
886
+ const base2 = new URL(containerEl.getAttribute(QBaseAttr) ?? baseURI, baseURI);
887
+ return new URL(url, base2);
888
+ };
889
+ var _platform = /* @__PURE__ */ createPlatform();
890
+ var isServerPlatform = () => {
891
+ if (qDynamicPlatform) {
892
+ return _platform.isServer;
893
+ }
894
+ return false;
895
+ };
896
+
897
+ // packages/qwik/src/core/shared/platform/next-tick.ts
898
+ var createMacroTask = (fn) => {
899
+ let macroTask;
900
+ if (typeof MessageChannel !== "undefined") {
901
+ const channel = new MessageChannel();
902
+ channel.port1.onmessage = () => fn();
903
+ macroTask = () => channel.port2.postMessage(null);
904
+ } else {
905
+ macroTask = () => setTimeout(fn);
906
+ }
907
+ return macroTask;
908
+ };
832
909
 
833
910
  // packages/qwik/src/core/preloader/constants.ts
834
- import { isBrowser } from "@qwik.dev/core/build";
911
+ import { isServer as isServer3 } from "@qwik.dev/core/build";
912
+ var isBrowser = import.meta.env.TEST ? !isServerPlatform() : !isServer3;
835
913
  var doc = isBrowser ? document : void 0;
836
914
  var config = {
837
915
  $DEBUG$: false,
838
916
  $maxIdlePreloads$: 25,
839
917
  $invPreloadProbability$: 0.65
840
918
  };
841
- var rel = isBrowser && doc.createElement("link").relList.supports("modulepreload") ? "modulePreload" : "preload";
842
- var loadStart = Date.now();
919
+ var rel = isBrowser && doc.createElement("link").relList?.supports?.("modulepreload") ? "modulePreload" : "preload";
920
+ var loadStart = performance.now();
843
921
  var isJSRegex = /\.[mc]?js$/;
922
+ var yieldInterval = 1e3 / 60;
844
923
 
845
924
  // packages/qwik/src/core/preloader/types.ts
846
925
  var BundleImportState_None = 0;
@@ -852,13 +931,14 @@ var BundleImportState_Loaded = 4;
852
931
  // packages/qwik/src/core/preloader/bundle-graph.ts
853
932
  var base;
854
933
  var graph;
934
+ var isBrowser2 = import.meta.env.TEST ? !isServerPlatform() : !isServer4;
855
935
  var makeBundle = (name, deps) => {
856
936
  return {
857
937
  $name$: name,
858
938
  $state$: isJSRegex.test(name) ? BundleImportState_None : BundleImportState_Alias,
859
939
  $deps$: shouldResetFactor ? deps?.map((d) => ({ ...d, $factor$: 1 })) : deps,
860
940
  $inverseProbability$: 1,
861
- $createdTs$: Date.now(),
941
+ $createdTs$: performance.now(),
862
942
  $waitedMs$: 0,
863
943
  $loadedMs$: 0
864
944
  };
@@ -927,9 +1007,16 @@ var shouldResetFactor;
927
1007
  var queueDirty;
928
1008
  var preloadCount = 0;
929
1009
  var queue = [];
1010
+ var nextTriggerMacroTask = createMacroTask(trigger);
1011
+ var nextAdjustmentMacroTask = createMacroTask(processPendingAdjustments);
1012
+ var isTriggerScheduled = false;
1013
+ var isAdjustmentScheduled = false;
1014
+ var isProcessingAdjustments = false;
1015
+ var shouldYieldInBrowser = import.meta.env.TEST ? !isServerPlatform() : isBrowser3;
1016
+ var adjustmentStack = [];
930
1017
  var log = (...args) => {
931
1018
  console.log(
932
- `Preloader ${Date.now() - loadStart}ms ${preloadCount}/${queue.length} queued>`,
1019
+ `Preloader ${performance.now() - loadStart}ms ${preloadCount}/${queue.length} queued>`,
933
1020
  ...args
934
1021
  );
935
1022
  };
@@ -939,6 +1026,10 @@ var resetQueue = () => {
939
1026
  shouldResetFactor = true;
940
1027
  preloadCount = 0;
941
1028
  queue.length = 0;
1029
+ adjustmentStack.length = 0;
1030
+ isTriggerScheduled = false;
1031
+ isAdjustmentScheduled = false;
1032
+ isProcessingAdjustments = false;
942
1033
  };
943
1034
  var sortQueue = () => {
944
1035
  if (queueDirty) {
@@ -950,7 +1041,8 @@ var getQueue = () => {
950
1041
  sortQueue();
951
1042
  let probability = 0.4;
952
1043
  const result = [];
953
- for (const b of queue) {
1044
+ for (let i = 0; i < queue.length; i++) {
1045
+ const b = queue[i];
954
1046
  const nextProbability = Math.round((1 - b.$inverseProbability$) * 10);
955
1047
  if (nextProbability !== probability) {
956
1048
  probability = nextProbability;
@@ -960,11 +1052,14 @@ var getQueue = () => {
960
1052
  }
961
1053
  return result;
962
1054
  };
963
- var trigger = () => {
1055
+ function trigger() {
1056
+ isTriggerScheduled = false;
964
1057
  if (!queue.length) {
965
1058
  return;
966
1059
  }
967
1060
  sortQueue();
1061
+ const deadline = performance.now() + yieldInterval;
1062
+ let shouldYield = false;
968
1063
  while (queue.length) {
969
1064
  const bundle = queue[0];
970
1065
  const inverseProbability = bundle.$inverseProbability$;
@@ -976,10 +1071,18 @@ var trigger = () => {
976
1071
  if (probability >= 0.99 || preloadCount < allowedPreloads) {
977
1072
  queue.shift();
978
1073
  preloadOne(bundle);
1074
+ if (performance.now() >= deadline) {
1075
+ shouldYield = true;
1076
+ break;
1077
+ }
979
1078
  } else {
980
1079
  break;
981
1080
  }
982
1081
  }
1082
+ if (shouldYield && queue.length && !isTriggerScheduled) {
1083
+ isTriggerScheduled = true;
1084
+ nextTriggerMacroTask();
1085
+ }
983
1086
  if (config.$DEBUG$ && !queue.length) {
984
1087
  const loaded = [...bundles.values()].filter((b) => b.$state$ > BundleImportState_None);
985
1088
  const waitTime = loaded.reduce((acc, b) => acc + b.$waitedMs$, 0);
@@ -988,13 +1091,112 @@ var trigger = () => {
988
1091
  `>>>> done ${loaded.length}/${bundles.size} total: ${waitTime}ms waited, ${loadTime}ms loaded`
989
1092
  );
990
1093
  }
1094
+ }
1095
+ var enqueueAdjustment = (bundle, inverseProbability, context, seen) => {
1096
+ adjustmentStack.unshift({
1097
+ $bundle$: bundle,
1098
+ $inverseProbability$: inverseProbability,
1099
+ $seen$: seen,
1100
+ $context$: context
1101
+ });
991
1102
  };
1103
+ var processAdjustmentFrame = () => {
1104
+ const frame = adjustmentStack[adjustmentStack.length - 1];
1105
+ const bundle = frame.$bundle$;
1106
+ if (frame.$deps$) {
1107
+ const index = frame.$index$;
1108
+ if (index >= frame.$deps$.length) {
1109
+ adjustmentStack.pop();
1110
+ return false;
1111
+ }
1112
+ const dep = frame.$deps$[index];
1113
+ frame.$index$ = index + 1;
1114
+ const depBundle = getBundle(dep.$name$);
1115
+ if (depBundle.$inverseProbability$ === 0) {
1116
+ return true;
1117
+ }
1118
+ const probability = 1 - bundle.$inverseProbability$;
1119
+ let newInverseProbability;
1120
+ if (probability === 1 || probability >= 0.99 && frame.$context$.$depsCount$ < 100) {
1121
+ frame.$context$.$depsCount$++;
1122
+ newInverseProbability = Math.min(0.01, 1 - dep.$importProbability$);
1123
+ } else {
1124
+ const newInverseImportProbability = 1 - dep.$importProbability$ * probability;
1125
+ const prevAdjust = dep.$factor$;
1126
+ const factor = newInverseImportProbability / prevAdjust;
1127
+ newInverseProbability = Math.max(0.02, depBundle.$inverseProbability$ * factor);
1128
+ dep.$factor$ = factor;
1129
+ }
1130
+ adjustmentStack.push({
1131
+ $bundle$: depBundle,
1132
+ $inverseProbability$: newInverseProbability,
1133
+ $seen$: frame.$seen$,
1134
+ $context$: frame.$context$
1135
+ });
1136
+ return true;
1137
+ }
1138
+ if (frame.$seen$?.has(bundle)) {
1139
+ adjustmentStack.pop();
1140
+ return false;
1141
+ }
1142
+ const previousInverseProbability = bundle.$inverseProbability$;
1143
+ bundle.$inverseProbability$ = frame.$inverseProbability$;
1144
+ if (previousInverseProbability - bundle.$inverseProbability$ < 0.01) {
1145
+ adjustmentStack.pop();
1146
+ return false;
1147
+ }
1148
+ if (
1149
+ // don't queue until we have initialized the preloader
1150
+ base != null && bundle.$state$ < BundleImportState_Preload
1151
+ ) {
1152
+ if (bundle.$state$ === BundleImportState_None) {
1153
+ bundle.$state$ = BundleImportState_Queued;
1154
+ queue.push(bundle);
1155
+ config.$DEBUG$ && log(`queued ${Math.round((1 - bundle.$inverseProbability$) * 100)}%`, bundle.$name$);
1156
+ }
1157
+ queueDirty = true;
1158
+ }
1159
+ if (bundle.$deps$?.length) {
1160
+ const seen = frame.$seen$ || /* @__PURE__ */ new Set();
1161
+ seen.add(bundle);
1162
+ frame.$seen$ = seen;
1163
+ frame.$deps$ = bundle.$deps$;
1164
+ frame.$index$ = 0;
1165
+ return false;
1166
+ }
1167
+ adjustmentStack.pop();
1168
+ return false;
1169
+ };
1170
+ function processPendingAdjustments() {
1171
+ if (isProcessingAdjustments || !adjustmentStack.length) {
1172
+ return;
1173
+ }
1174
+ isAdjustmentScheduled = false;
1175
+ isProcessingAdjustments = true;
1176
+ const deadline = shouldYieldInBrowser ? performance.now() + yieldInterval : 0;
1177
+ let processed = false;
1178
+ while (adjustmentStack.length) {
1179
+ processed = true;
1180
+ const checkDeadline = processAdjustmentFrame();
1181
+ if (shouldYieldInBrowser && checkDeadline && performance.now() >= deadline) {
1182
+ if (!isAdjustmentScheduled) {
1183
+ isAdjustmentScheduled = true;
1184
+ nextAdjustmentMacroTask();
1185
+ }
1186
+ break;
1187
+ }
1188
+ }
1189
+ isProcessingAdjustments = false;
1190
+ if (processed && shouldYieldInBrowser) {
1191
+ nextTriggerMacroTask();
1192
+ }
1193
+ }
992
1194
  var preloadOne = (bundle) => {
993
1195
  if (bundle.$state$ >= BundleImportState_Preload) {
994
1196
  return;
995
1197
  }
996
1198
  preloadCount++;
997
- const start = Date.now();
1199
+ const start = performance.now();
998
1200
  bundle.$waitedMs$ = start - bundle.$createdTs$;
999
1201
  bundle.$state$ = BundleImportState_Preload;
1000
1202
  config.$DEBUG$ && log(
@@ -1007,89 +1209,58 @@ var preloadOne = (bundle) => {
1007
1209
  link.as = "script";
1008
1210
  link.onload = link.onerror = () => {
1009
1211
  preloadCount--;
1010
- const end = Date.now();
1212
+ const end = performance.now();
1011
1213
  bundle.$loadedMs$ = end - start;
1012
1214
  bundle.$state$ = BundleImportState_Loaded;
1013
1215
  config.$DEBUG$ && log(`>> done after ${bundle.$loadedMs$}ms`, bundle.$name$);
1014
1216
  link.remove();
1015
- trigger();
1217
+ nextTriggerMacroTask();
1016
1218
  };
1017
1219
  doc.head.appendChild(link);
1018
1220
  };
1019
1221
  var adjustProbabilities = (bundle, newInverseProbability, seen) => {
1020
- if (seen?.has(bundle)) {
1021
- return;
1022
- }
1023
- const previousInverseProbability = bundle.$inverseProbability$;
1024
- bundle.$inverseProbability$ = newInverseProbability;
1025
- if (previousInverseProbability - bundle.$inverseProbability$ < 0.01) {
1026
- return;
1027
- }
1028
- if (
1029
- // don't queue until we have initialized the preloader
1030
- base != null && bundle.$state$ < BundleImportState_Preload
1031
- ) {
1032
- if (bundle.$state$ === BundleImportState_None) {
1033
- bundle.$state$ = BundleImportState_Queued;
1034
- queue.push(bundle);
1035
- config.$DEBUG$ && log(`queued ${Math.round((1 - bundle.$inverseProbability$) * 100)}%`, bundle.$name$);
1036
- }
1037
- queueDirty = true;
1038
- }
1039
- if (bundle.$deps$) {
1040
- seen ||= /* @__PURE__ */ new Set();
1041
- seen.add(bundle);
1042
- const probability = 1 - bundle.$inverseProbability$;
1043
- for (const dep of bundle.$deps$) {
1044
- const depBundle = getBundle(dep.$name$);
1045
- if (depBundle.$inverseProbability$ === 0) {
1046
- continue;
1047
- }
1048
- let newInverseProbability2;
1049
- if (probability === 1 || probability >= 0.99 && depsCount < 100) {
1050
- depsCount++;
1051
- newInverseProbability2 = Math.min(0.01, 1 - dep.$importProbability$);
1052
- } else {
1053
- const newInverseImportProbability = 1 - dep.$importProbability$ * probability;
1054
- const prevAdjust = dep.$factor$;
1055
- const factor = newInverseImportProbability / prevAdjust;
1056
- newInverseProbability2 = Math.max(0.02, depBundle.$inverseProbability$ * factor);
1057
- dep.$factor$ = factor;
1058
- }
1059
- adjustProbabilities(depBundle, newInverseProbability2, seen);
1060
- }
1222
+ enqueueAdjustment(bundle, newInverseProbability, { $depsCount$: 0 }, seen);
1223
+ if (shouldYieldInBrowser) {
1224
+ nextAdjustmentMacroTask();
1225
+ } else {
1226
+ processPendingAdjustments();
1061
1227
  }
1062
1228
  };
1063
- var handleBundle = (name, inverseProbability) => {
1229
+ var handleBundle = (name, inverseProbability, context) => {
1064
1230
  const bundle = getBundle(name);
1065
1231
  if (bundle && bundle.$inverseProbability$ > inverseProbability) {
1066
- adjustProbabilities(bundle, inverseProbability);
1232
+ if (context) {
1233
+ enqueueAdjustment(bundle, inverseProbability, context);
1234
+ } else {
1235
+ adjustProbabilities(bundle, inverseProbability);
1236
+ }
1067
1237
  }
1068
1238
  };
1069
- var depsCount;
1070
1239
  var preload = (name, probability) => {
1071
1240
  if (!name?.length) {
1072
1241
  return;
1073
1242
  }
1074
- depsCount = 0;
1075
1243
  let inverseProbability = probability ? 1 - probability : 0.4;
1244
+ const context = { $depsCount$: 0 };
1076
1245
  if (Array.isArray(name)) {
1077
1246
  for (let i = name.length - 1; i >= 0; i--) {
1078
1247
  const item = name[i];
1079
1248
  if (typeof item === "number") {
1080
1249
  inverseProbability = 1 - item / 10;
1081
1250
  } else {
1082
- handleBundle(item, inverseProbability);
1251
+ handleBundle(item, inverseProbability, context);
1083
1252
  }
1084
1253
  }
1085
1254
  } else {
1086
- handleBundle(name, inverseProbability);
1255
+ handleBundle(name, inverseProbability, context);
1087
1256
  }
1088
- if (isBrowser3) {
1089
- trigger();
1257
+ if (shouldYieldInBrowser) {
1258
+ nextAdjustmentMacroTask();
1259
+ } else {
1260
+ processPendingAdjustments();
1090
1261
  }
1091
1262
  };
1092
- if (isBrowser3) {
1263
+ if (import.meta.env.TEST ? !isServerPlatform() : isBrowser3) {
1093
1264
  document.addEventListener("qsymbol", (ev) => {
1094
1265
  const { symbol, href } = ev.detail;
1095
1266
  if (href) {
@@ -1141,11 +1312,11 @@ var getDevSegmentPath = (mapper, hash, symbolName, parent) => {
1141
1312
  const qrlFile = `${import.meta.env.BASE_URL}${parent.startsWith("/") ? parent.slice(1) : parent}_${symbolName}.js`;
1142
1313
  return [symbolName, qrlFile];
1143
1314
  };
1144
- function createPlatform(opts, resolvedManifest) {
1315
+ function createPlatform2(opts, resolvedManifest) {
1145
1316
  const mapper = resolvedManifest?.mapper;
1146
1317
  const mapperFn = opts.symbolMapper ? opts.symbolMapper : (symbolName, _chunk, parent) => {
1147
1318
  if (mapper || isDev5 && import.meta.env.MODE !== "test") {
1148
- const hash = getSymbolHash(symbolName);
1319
+ const hash = getSymbolHash2(symbolName);
1149
1320
  const result = !isDev5 ? mapper[hash] : getDevSegmentPath(mapper, hash, symbolName, parent);
1150
1321
  if (!result) {
1151
1322
  if (hash === SYNC_QRL) {
@@ -1163,7 +1334,7 @@ function createPlatform(opts, resolvedManifest) {
1163
1334
  const serverPlatform = {
1164
1335
  isServer: true,
1165
1336
  async importSymbol(_containerEl, url, symbolName) {
1166
- const hash = getSymbolHash(symbolName);
1337
+ const hash = getSymbolHash2(symbolName);
1167
1338
  const regSym = globalThis.__qwik_reg_symbols?.get(hash);
1168
1339
  if (regSym) {
1169
1340
  return regSym;
@@ -1181,10 +1352,10 @@ function createPlatform(opts, resolvedManifest) {
1181
1352
  return serverPlatform;
1182
1353
  }
1183
1354
  async function setServerPlatform(opts, manifest) {
1184
- const platform = createPlatform(opts, manifest);
1355
+ const platform = createPlatform2(opts, manifest);
1185
1356
  setPlatform(platform);
1186
1357
  }
1187
- var getSymbolHash = (symbolName) => {
1358
+ var getSymbolHash2 = (symbolName) => {
1188
1359
  const index = symbolName.lastIndexOf("_");
1189
1360
  if (index > -1) {
1190
1361
  return symbolName.slice(index + 1);
@@ -1218,7 +1389,7 @@ function getBuildBase(opts) {
1218
1389
  return `${import.meta.env.BASE_URL || "/"}build/`;
1219
1390
  }
1220
1391
  var versions = {
1221
- qwik: "2.0.0-beta.30-dev+5421ed4",
1392
+ qwik: "2.0.0-beta.32-dev+0e29f8a",
1222
1393
  qwikDom: "2.1.19"
1223
1394
  };
1224
1395
 
@@ -1244,7 +1415,8 @@ function flattenPrefetchResources(prefetchResources) {
1244
1415
  const urls = [];
1245
1416
  const addPrefetchResource = (prefetchResources2) => {
1246
1417
  if (prefetchResources2) {
1247
- for (const prefetchResource of prefetchResources2) {
1418
+ for (let i = 0; i < prefetchResources2.length; i++) {
1419
+ const prefetchResource = prefetchResources2[i];
1248
1420
  if (!urls.includes(prefetchResource.url)) {
1249
1421
  urls.push(prefetchResource.url);
1250
1422
  if (prefetchResource.imports) {
@@ -1291,8 +1463,8 @@ function getPreloadPaths(qrls, opts, resolvedManifest) {
1291
1463
  }
1292
1464
  }
1293
1465
  const symbols = /* @__PURE__ */ new Set();
1294
- for (const qrl of qrls) {
1295
- const symbol = getSymbolHash(qrl.$symbol$);
1466
+ for (let i = 0; i < qrls.length; i++) {
1467
+ const symbol = getSymbolHash2(qrls[i].$symbol$);
1296
1468
  if (symbol && symbol.length >= 10) {
1297
1469
  symbols.add(symbol);
1298
1470
  }
@@ -1305,8 +1477,8 @@ var expandBundles = (names, resolvedManifest) => {
1305
1477
  }
1306
1478
  resetQueue();
1307
1479
  let probability = 0.99;
1308
- for (const name of names) {
1309
- preload(name, probability);
1480
+ for (let i = 0; i < names.length; i++) {
1481
+ preload(names[i], probability);
1310
1482
  probability *= 0.95;
1311
1483
  }
1312
1484
  return getQueue();
@@ -1319,7 +1491,8 @@ var simplifyPath = (base2, path) => {
1319
1491
  }
1320
1492
  const segments = `${base2}${path}`.split("/");
1321
1493
  const simplified = [];
1322
- for (const segment of segments) {
1494
+ for (let i = 0; i < segments.length; i++) {
1495
+ const segment = segments[i];
1323
1496
  if (segment === ".." && simplified.length > 0) {
1324
1497
  simplified.pop();
1325
1498
  } else {
@@ -1421,7 +1594,8 @@ var includePreloader = (container, options, referencedBundles, nonce) => {
1421
1594
  const expandedBundles = expandBundles(referencedBundles, resolvedManifest);
1422
1595
  let probability = 4;
1423
1596
  const tenXMinProbability = ssrPreloadProbability * 10;
1424
- for (const hrefOrProbability of expandedBundles) {
1597
+ for (let i = 0; i < expandedBundles.length; i++) {
1598
+ const hrefOrProbability = expandedBundles[i];
1425
1599
  if (typeof hrefOrProbability === "string") {
1426
1600
  if (probability < tenXMinProbability) {
1427
1601
  break;
@@ -1484,8 +1658,8 @@ var preLoaderOptionsDefault = {
1484
1658
  };
1485
1659
 
1486
1660
  // packages/qwik/src/server/scripts.ts
1487
- var QWIK_LOADER_DEFAULT_MINIFIED = 'const e=document,t=window,o="w",n="d",r=new Set,s=new Set([e]),i=new Map;let a,c;const l=(e,t)=>Array.from(e.querySelectorAll(t)),q=e=>{const t=[];return s.forEach(o=>t.push(...l(o,e))),t},d=(e,t,o,n=!1)=>e.addEventListener(t,o,{capture:n,passive:!1}),b=e=>{_(e),l(e,"[q\\\\:shadowroot]").forEach(e=>{const t=e.shadowRoot;t&&b(t)})},f=e=>e&&"function"==typeof e.then,p=t=>{if(void 0===t._qwikjson_){let o=(t===e.documentElement?e.body:t).lastElementChild;for(;o;){if("SCRIPT"===o.tagName&&"qwik/json"===o.getAttribute("type")){t._qwikjson_=JSON.parse(o.textContent.replace(/\\\\x3C(\\/?script)/gi,"<$1"));break}o=o.previousElementSibling}}},u=(e,t)=>new CustomEvent(e,{detail:t}),h=(t,o)=>{e.dispatchEvent(u(t,o))},m=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),v=e=>e.replace(/-./g,e=>e[1].toUpperCase()),w=e=>({scope:e.charAt(0),eventName:v(e.slice(2))}),y=async(t,o,n,r)=>{r&&(t.hasAttribute("preventdefault:"+r)&&o.preventDefault(),t.hasAttribute("stoppropagation:"+r)&&o.stopPropagation());const s=t._qDispatch?.[n];if(s){if("function"==typeof s){const e=s(o,t);f(e)&&await e}else if(s.length)for(let e=0;e<s.length;e++){const n=s[e],r=n?.(o,t);f(r)&&await r}return}const a=t.getAttribute("q-"+n);if(a){const n=t.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])"),r=n.getAttribute("q:base"),s=new URL(r,e.baseURI);for(const c of a.split("|")){const a=performance.now(),[l,q,d]=c.split("#"),b={qBase:r,symbol:q,element:t,reqTime:a};let u,m,v;if(""===l){const t=n.getAttribute("q:instance");u=(e["qFuncs_"+t]||[])[Number.parseInt(q)],u||(m="sync",v=Error("sym:"+q))}else{const e=`${q}|${r}|${l}`;if(u=i.get(e),!u){const t=new URL(l,s).href;try{const o=import(t);p(n),u=(await o)[q],u?(i.set(e,u),h("qsymbol",b)):(m="no-symbol",v=Error(`${q} not in ${t}`))}catch(e){m="async",v=e}}}if(u){if(t.isConnected)try{const e=u.call(d,o,t);f(e)&&await e}catch(e){h("qerror",{error:e,...b})}}else h("qerror",{importError:m,error:v,...b}),console.error(v)}}},g=async e=>{const t=m(e.type),o="e:"+t;let n=e.target;for(;n&&n.getAttribute;){const r=y(n,e,o,t),s=e.bubbles&&!e.cancelBubble;f(r)&&await r,n=s&&e.bubbles&&!e.cancelBubble?n.parentElement:null}},E=(e,t)=>{const o=m(t.type),n=e+":"+o;q("[q-"+e+"\\\\:"+o+"]").forEach(e=>y(e,t,n,o))},A=async e=>{E(n,e)},C=e=>{E(o,e)},k=()=>{const o=e.readyState;if("interactive"==o||"complete"==o){if(c=1,s.forEach(b),r.has("d:qinit")){r.delete("d:qinit");const e=u("qinit");q("[q-d\\\\:qinit]").forEach(t=>{y(t,e,"d:qinit"),t.removeAttribute("q-d:qinit")})}r.has("d:qidle")&&(r.delete("d:qidle"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{const e=u("qidle");q("[q-d\\\\:qidle]").forEach(t=>{y(t,e,"d:qidle"),t.removeAttribute("q-d:qidle")})})),r.has("e:qvisible")&&(a||(a=new IntersectionObserver(e=>{for(const t of e)t.isIntersecting&&(a.unobserve(t.target),y(t.target,u("qvisible",t),"e:qvisible"))})),q("[q-e\\\\:qvisible]:not([q\\\\:observed])").forEach(e=>{a.observe(e),e.setAttribute("q:observed","true")}))}},_=(...e)=>{for(let i=0;i<e.length;i++){const a=e[i];if("string"==typeof a){if(!r.has(a)){r.add(a);const{scope:e,eventName:i}=w(a);e===o?d(t,i,C,!0):s.forEach(t=>d(t,i,e===n?A:g,!0)),1!==c||"e:qvisible"!==a&&"d:qinit"!==a&&"d:qidle"!==a||k()}}else s.has(a)||(r.forEach(e=>{const{scope:t,eventName:r}=w(e);t!==o&&d(a,r,t===n?A:g,!0)}),s.add(a))}},S=t._qwikEv;S?.roots||(Array.isArray(S)?_(...S):_("e:click","e:input"),t._qwikEv={events:r,roots:s,push:_},d(e,"readystatechange",k),k())';
1488
- var QWIK_LOADER_DEFAULT_DEBUG = 'const doc = document;\nconst win = window;\nconst windowPrefix = "w";\nconst documentPrefix = "d";\nconst events = /* @__PURE__ */ new Set();\nconst roots = /* @__PURE__ */ new Set([doc]);\nconst symbols = /* @__PURE__ */ new Map();\nlet observer;\nlet hasInitialized;\nconst nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nconst querySelectorAll = (query) => {\n const elements = [];\n roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n return elements;\n};\nconst addEventListener = (el, eventName, handler, capture = false) => el.addEventListener(eventName, handler, { capture, passive: false });\nconst findShadowRoots = (fragment) => {\n addEventOrRoot(fragment);\n nativeQuerySelectorAll(fragment, "[q\\\\:shadowroot]").forEach((parent) => {\n const shadowRoot = parent.shadowRoot;\n shadowRoot && findShadowRoots(shadowRoot);\n });\n};\nconst isPromise = (promise) => promise && typeof promise.then === "function";\nconst resolveContainer = (containerEl) => {\n if (containerEl._qwikjson_ === void 0) {\n const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;\n let script = parentJSON.lastElementChild;\n while (script) {\n if (script.tagName === "SCRIPT" && script.getAttribute("type") === "qwik/json") {\n containerEl._qwikjson_ = JSON.parse(\n script.textContent.replace(/\\\\x3C(\\/?script)/gi, "<$1")\n );\n break;\n }\n script = script.previousElementSibling;\n }\n }\n};\nconst createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nconst emitEvent = (eventName, detail) => {\n doc.dispatchEvent(createEvent(eventName, detail));\n};\nconst camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());\nconst kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nconst parseKebabEvent = (event) => ({\n scope: event.charAt(0),\n eventName: kebabToCamel(event.slice(2))\n});\nconst dispatch = async (element, ev, scopedKebabName, kebabName) => {\n if (kebabName) {\n if (element.hasAttribute("preventdefault:" + kebabName)) {\n ev.preventDefault();\n }\n if (element.hasAttribute("stoppropagation:" + kebabName)) {\n ev.stopPropagation();\n }\n }\n const handlers = element._qDispatch?.[scopedKebabName];\n if (handlers) {\n if (typeof handlers === "function") {\n const result = handlers(ev, element);\n if (isPromise(result)) {\n await result;\n }\n } else if (handlers.length) {\n for (let i = 0; i < handlers.length; i++) {\n const handler = handlers[i];\n const result = handler?.(ev, element);\n if (isPromise(result)) {\n await result;\n }\n }\n }\n return;\n }\n const attrValue = element.getAttribute("q-" + scopedKebabName);\n if (attrValue) {\n const container = element.closest(\n "[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])"\n );\n const qBase = container.getAttribute("q:base");\n const base = new URL(qBase, doc.baseURI);\n for (const qrl of attrValue.split("|")) {\n const reqTime = performance.now();\n const [chunk, symbol, capturedIds] = qrl.split("#");\n const eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n let handler;\n let importError;\n let error;\n if (chunk === "") {\n const hash = container.getAttribute("q:instance");\n handler = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];\n if (!handler) {\n importError = "sync";\n error = new Error("sym:" + symbol);\n }\n } else {\n const key = `${symbol}|${qBase}|${chunk}`;\n handler = symbols.get(key);\n if (!handler) {\n const href = new URL(chunk, base).href;\n try {\n const module = import(\n href\n );\n resolveContainer(container);\n handler = (await module)[symbol];\n if (!handler) {\n importError = "no-symbol";\n error = new Error(`${symbol} not in ${href}`);\n } else {\n symbols.set(key, handler);\n emitEvent("qsymbol", eventData);\n }\n } catch (err) {\n importError = "async";\n error = err;\n }\n }\n }\n if (!handler) {\n emitEvent("qerror", {\n importError,\n error,\n ...eventData\n });\n console.error(error);\n continue;\n }\n if (element.isConnected) {\n try {\n const result = handler.call(capturedIds, ev, element);\n if (isPromise(result)) {\n await result;\n }\n } catch (error2) {\n emitEvent("qerror", { error: error2, ...eventData });\n }\n }\n }\n }\n};\nconst processElementEvent = async (ev) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = "e:" + kebabName;\n let element = ev.target;\n while (element && element.getAttribute) {\n const results = dispatch(element, ev, scopedKebabName, kebabName);\n const doBubble = ev.bubbles && !ev.cancelBubble;\n if (isPromise(results)) {\n await results;\n }\n element = doBubble && ev.bubbles && !ev.cancelBubble ? element.parentElement : null;\n }\n};\nconst broadcast = (infix, ev) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = infix + ":" + kebabName;\n querySelectorAll("[q-" + infix + "\\\\:" + kebabName + "]").forEach(\n (el) => dispatch(el, ev, scopedKebabName, kebabName)\n );\n};\nconst processDocumentEvent = async (ev) => {\n broadcast(documentPrefix, ev);\n};\nconst processWindowEvent = (ev) => {\n broadcast(windowPrefix, ev);\n};\nconst processReadyStateChange = () => {\n const readyState = doc.readyState;\n if (readyState == "interactive" || readyState == "complete") {\n hasInitialized = 1;\n roots.forEach(findShadowRoots);\n if (events.has("d:qinit")) {\n events.delete("d:qinit");\n const ev = createEvent("qinit");\n querySelectorAll("[q-d\\\\:qinit]").forEach((el) => {\n dispatch(el, ev, "d:qinit");\n el.removeAttribute("q-d:qinit");\n });\n }\n if (events.has("d:qidle")) {\n events.delete("d:qidle");\n const riC = win.requestIdleCallback ?? win.setTimeout;\n riC.bind(win)(() => {\n const ev = createEvent("qidle");\n querySelectorAll("[q-d\\\\:qidle]").forEach((el) => {\n dispatch(el, ev, "d:qidle");\n el.removeAttribute("q-d:qidle");\n });\n });\n }\n if (events.has("e:qvisible")) {\n observer || (observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n dispatch(entry.target, createEvent("qvisible", entry), "e:qvisible");\n }\n }\n }));\n querySelectorAll("[q-e\\\\:qvisible]:not([q\\\\:observed])").forEach((el) => {\n observer.observe(el);\n el.setAttribute("q:observed", "true");\n });\n }\n }\n};\nconst addEventOrRoot = (...eventNames) => {\n for (let i = 0; i < eventNames.length; i++) {\n const eventNameOrRoot = eventNames[i];\n if (typeof eventNameOrRoot === "string") {\n if (!events.has(eventNameOrRoot)) {\n events.add(eventNameOrRoot);\n const { scope, eventName } = parseKebabEvent(eventNameOrRoot);\n if (scope === windowPrefix) {\n addEventListener(win, eventName, processWindowEvent, true);\n } else {\n roots.forEach(\n (root) => addEventListener(\n root,\n eventName,\n scope === documentPrefix ? processDocumentEvent : processElementEvent,\n true\n )\n );\n }\n if (hasInitialized === 1 && (eventNameOrRoot === "e:qvisible" || eventNameOrRoot === "d:qinit" || eventNameOrRoot === "d:qidle")) {\n processReadyStateChange();\n }\n }\n } else {\n if (!roots.has(eventNameOrRoot)) {\n events.forEach((kebabEventName) => {\n const { scope, eventName } = parseKebabEvent(kebabEventName);\n if (scope !== windowPrefix) {\n addEventListener(\n eventNameOrRoot,\n eventName,\n scope === documentPrefix ? processDocumentEvent : processElementEvent,\n true\n );\n }\n });\n roots.add(eventNameOrRoot);\n }\n }\n }\n};\nconst _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n if (Array.isArray(_qwikEv)) {\n addEventOrRoot(..._qwikEv);\n } else {\n addEventOrRoot("e:click", "e:input");\n }\n win._qwikEv = {\n events,\n roots,\n push: addEventOrRoot\n };\n addEventListener(doc, "readystatechange", processReadyStateChange);\n processReadyStateChange();\n}';
1661
+ var QWIK_LOADER_DEFAULT_MINIFIED = 'const e=document,t=window,r="w",n="wp",o="d",s="dp",i="e",c="ep",l="capture:",a=new Set,p=new Set([e]),q=new Map;let u,f,h;const d=(e,t)=>Array.from(e.querySelectorAll(t)),b=e=>{const t=[];return p.forEach(r=>t.push(...d(r,e))),t},m=(e,t,r,n=!1,o=!1)=>e.addEventListener(t,r,{capture:n,passive:o}),g=e=>{J(e);const t=d(e,"[q\\\\:shadowroot]");for(let e=0;e<t.length;e++){const r=t[e].shadowRoot;r&&g(r)}},v=e=>e&&"function"==typeof e.then,y=async e=>{for(let t=0;t<e.length;t++)await e[t]()},w=e=>{if(e.length){const t=()=>y(e);h=h?h.then(t,t):t()}},E=t=>{if(void 0===t._qwikjson_){let r=(t===e.documentElement?e.body:t).lastElementChild;for(;r;){if("SCRIPT"===r.tagName&&"qwik/json"===r.getAttribute("type")){t._qwikjson_=JSON.parse(r.textContent.replace(/\\\\x3C(\\/?script)/gi,"<$1"));break}r=r.previousElementSibling}}},A=(e,t)=>new CustomEvent(e,{detail:t}),C=(t,r)=>{e.dispatchEvent(A(t,r))},_=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),k=e=>e.replace(/-./g,e=>e[1].toUpperCase()),B=e=>{const t=e.indexOf(":");return{scope:e.slice(0,t),eventName:k(e.slice(t+1))}},S=e=>2===e.length,I=e=>e.charAt(0),N=e=>!!e&&1===e.nodeType,T=(e,t,r)=>e.hasAttribute(r)&&(!!e._qDispatch?.[t]||e.hasAttribute("q-"+t)),$=(t,r,n,o,s,i,c)=>{const l={qBase:n,symbol:i,element:r,reqTime:c};if(""===s){const r=t.getAttribute("q:instance"),n=(e["qFuncs_"+r]||[])[Number.parseInt(i)];if(!n){const e=Error("sym:"+i);C("qerror",{importError:"sync",error:e,...l}),console.error(e)}return n}const a=`${i}|${n}|${s}`,p=q.get(a);if(p)return p;const u=new URL(s,o).href,f=import(u);return E(t),f.then(e=>{const t=e[i];if(t)q.set(a,t),C("qsymbol",l);else{const e=Error(`${i} not in ${u}`);C("qerror",{importError:"no-symbol",error:e,...l}),console.error(e)}return t},e=>{C("qerror",{importError:"async",error:e,...l}),console.error(e)})},R=(t,r,n,o,s,i=!0)=>{let c=!1;s&&(i&&t.hasAttribute("preventdefault:"+s)&&r.preventDefault(),t.hasAttribute("stoppropagation:"+s)&&r.stopPropagation());const l=t._qDispatch?.[n];if(l){if("function"==typeof l){const e=()=>l(r,t);if(c)o.push(async()=>{const t=e();v(t)&&await t});else{const t=e();v(t)&&(c=!0,o.push(()=>t))}}else if(l.length)for(let e=0;e<l.length;e++){const n=l[e];if(n){const e=()=>n(r,t);if(c)o.push(async()=>{const t=e();v(t)&&await t});else{const t=e();v(t)&&(c=!0,o.push(()=>t))}}}return}const a=t.getAttribute("q-"+n);if(a){const n=t.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])"),s=n.getAttribute("q:base"),i=new URL(s,e.baseURI),l=a.split("|");for(let e=0;e<l.length;e++){const a=l[e],p=performance.now(),[q,u,f]=a.split("#"),h=e=>{if(e&&t.isConnected)try{const n=e.call(f,r,t);if(v(n))return n.catch(e=>{C("qerror",{error:e,qBase:s,symbol:u,element:t,reqTime:p})})}catch(e){C("qerror",{error:e,qBase:s,symbol:u,element:t,reqTime:p})}},d=$(n,t,s,i,q,u,p);if(c||v(d))c=!0,o.push(async()=>{await h(v(d)?await d:d)});else{const e=h(d);v(e)&&(c=!0,o.push(()=>e))}}}},x=(e,t=i,r=!0)=>{const n=_(e.type),o=t+":"+n,s=l+n,c=[],a=[],p=[];let q=e.target;for(;q;)N(q)?(c.push(q),a.push(T(q,o,s)),q=q.parentElement):q=q.parentElement;for(let t=c.length-1;t>=0;t--)if(a[t]&&(R(c[t],e,o,p,n,r),e.cancelBubble||e.cancelBubble))return void w(p);for(let t=0;t<c.length;t++)if(!a[t]&&(R(c[t],e,o,p,n,r),!e.bubbles||e.cancelBubble||e.cancelBubble))return void w(p);w(p)},L=e=>x(e,c,!1),U=(e,t,r=!0)=>{const n=_(t.type),o=e+":"+n,s=b("[q-"+e+"\\\\:"+n+"]"),i=[];for(let e=0;e<s.length;e++){const c=s[e];R(c,t,o,i,n,r)}w(i)},j=e=>{U(o,e)},D=e=>{U(s,e,!1)},O=e=>{U(r,e)},P=e=>{U(n,e,!1)},F=()=>{const r=e.readyState;if("interactive"==r||"complete"==r){if(f=1,p.forEach(g),a.has("d:qinit")){a.delete("d:qinit");const e=A("qinit"),t=b("[q-d\\\\:qinit]"),r=[];for(let n=0;n<t.length;n++){const o=t[n];R(o,e,"d:qinit",r),o.removeAttribute("q-d:qinit")}w(r)}if(a.has("d:qidle")&&(a.delete("d:qidle"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{const e=A("qidle"),t=b("[q-d\\\\:qidle]"),r=[];for(let n=0;n<t.length;n++){const o=t[n];R(o,e,"d:qidle",r),o.removeAttribute("q-d:qidle")}w(r)})),a.has("e:qvisible")){u||(u=new IntersectionObserver(e=>{const t=[];for(let r=0;r<e.length;r++){const n=e[r];n.isIntersecting&&(u.unobserve(n.target),R(n.target,A("qvisible",n),"e:qvisible",t))}w(t)}));const e=b("[q-e\\\\:qvisible]:not([q\\\\:observed])");for(let t=0;t<e.length;t++){const r=e[t];u.observe(r),r.setAttribute("q:observed","true")}}}},J=(...e)=>{for(let n=0;n<e.length;n++){const s=e[n];if("string"==typeof s){if(!a.has(s)){a.add(s);const{scope:e,eventName:n}=B(s),i=S(e),c=I(e);c===r?m(t,n,i?P:O,!0,i):p.forEach(e=>m(e,n,c===o?i?D:j:i?L:x,!0,i)),1!==f||"e:qvisible"!==s&&"d:qinit"!==s&&"d:qidle"!==s||F()}}else p.has(s)||(a.forEach(e=>{const{scope:t,eventName:n}=B(e),i=S(t),c=I(t);c!==r&&m(s,n,c===o?i?D:j:i?L:x,!0,i)}),p.add(s))}},M=t._qwikEv;M?.roots||(Array.isArray(M)?J(...M):J("e:click","e:input"),t._qwikEv={events:a,roots:p,push:J},m(e,"readystatechange",F),F())';
1662
+ var QWIK_LOADER_DEFAULT_DEBUG = 'const doc = document;\nconst win = window;\nconst windowPrefix = "w";\nconst passiveWindowPrefix = "wp";\nconst documentPrefix = "d";\nconst passiveDocumentPrefix = "dp";\nconst elementPrefix = "e";\nconst passiveElementPrefix = "ep";\nconst capturePrefix = "capture:";\nconst events = /* @__PURE__ */ new Set();\nconst roots = /* @__PURE__ */ new Set([doc]);\nconst symbols = /* @__PURE__ */ new Map();\nlet observer;\nlet hasInitialized;\nlet queuedTasks;\nconst nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nconst querySelectorAll = (query) => {\n const elements = [];\n roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n return elements;\n};\nconst addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, { capture, passive });\nconst findShadowRoots = (fragment) => {\n addEventOrRoot(fragment);\n const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\\\:shadowroot]");\n for (let i = 0; i < shadowRoots.length; i++) {\n const parent = shadowRoots[i];\n const shadowRoot = parent.shadowRoot;\n shadowRoot && findShadowRoots(shadowRoot);\n }\n};\nconst isPromise = (promise) => promise && typeof promise.then === "function";\nconst runTasks = async (tasks) => {\n for (let i = 0; i < tasks.length; i++) {\n await tasks[i]();\n }\n};\nconst queueTasks = (tasks) => {\n if (tasks.length) {\n const run = () => runTasks(tasks);\n queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();\n }\n};\nconst resolveContainer = (containerEl) => {\n if (containerEl._qwikjson_ === void 0) {\n const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;\n let script = parentJSON.lastElementChild;\n while (script) {\n if (script.tagName === "SCRIPT" && script.getAttribute("type") === "qwik/json") {\n containerEl._qwikjson_ = JSON.parse(\n script.textContent.replace(/\\\\x3C(\\/?script)/gi, "<$1")\n );\n break;\n }\n script = script.previousElementSibling;\n }\n }\n};\nconst createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nconst emitEvent = (eventName, detail) => {\n doc.dispatchEvent(createEvent(eventName, detail));\n};\nconst camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());\nconst kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nconst parseKebabEvent = (event) => {\n const separatorIndex = event.indexOf(":");\n const scope = event.slice(0, separatorIndex);\n return {\n scope,\n eventName: kebabToCamel(event.slice(separatorIndex + 1))\n };\n};\nconst isPassiveScope = (scope) => scope.length === 2;\nconst getRootScope = (scope) => scope.charAt(0);\nconst isElementNode = (node) => !!node && node.nodeType === 1;\nconst isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute("q-" + scopedKebabName));\nconst resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime) => {\n const eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n if (chunk === "") {\n const hash = container.getAttribute("q:instance");\n const handler2 = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];\n if (!handler2) {\n const error = new Error("sym:" + symbol);\n emitEvent("qerror", {\n importError: "sync",\n error,\n ...eventData\n });\n console.error(error);\n }\n return handler2;\n }\n const key = `${symbol}|${qBase}|${chunk}`;\n const handler = symbols.get(key);\n if (handler) {\n return handler;\n }\n const href = new URL(chunk, base).href;\n const module = import(\n href\n );\n resolveContainer(container);\n return module.then(\n (module2) => {\n const handler2 = module2[symbol];\n if (!handler2) {\n const error = new Error(`${symbol} not in ${href}`);\n emitEvent("qerror", {\n importError: "no-symbol",\n error,\n ...eventData\n });\n console.error(error);\n } else {\n symbols.set(key, handler2);\n emitEvent("qsymbol", eventData);\n }\n return handler2;\n },\n (error) => {\n emitEvent("qerror", {\n importError: "async",\n error,\n ...eventData\n });\n console.error(error);\n return void 0;\n }\n );\n};\nconst dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {\n let defer = false;\n if (kebabName) {\n if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) {\n ev.preventDefault();\n }\n if (element.hasAttribute("stoppropagation:" + kebabName)) {\n ev.stopPropagation();\n }\n }\n const handlers = element._qDispatch?.[scopedKebabName];\n if (handlers) {\n if (typeof handlers === "function") {\n const run = () => handlers(ev, element);\n if (defer) {\n tasks.push(async () => {\n const result = run();\n if (isPromise(result)) {\n await result;\n }\n });\n } else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n } else if (handlers.length) {\n for (let i = 0; i < handlers.length; i++) {\n const handler = handlers[i];\n if (handler) {\n const run = () => handler(ev, element);\n if (defer) {\n tasks.push(async () => {\n const result = run();\n if (isPromise(result)) {\n await result;\n }\n });\n } else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n }\n return;\n }\n const attrValue = element.getAttribute("q-" + scopedKebabName);\n if (attrValue) {\n const container = element.closest(\n "[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])"\n );\n const qBase = container.getAttribute("q:base");\n const base = new URL(qBase, doc.baseURI);\n const qrls = attrValue.split("|");\n for (let i = 0; i < qrls.length; i++) {\n const qrl = qrls[i];\n const reqTime = performance.now();\n const [chunk, symbol, capturedIds] = qrl.split("#");\n const run = (handler2) => {\n if (handler2 && element.isConnected) {\n try {\n const result = handler2.call(capturedIds, ev, element);\n if (isPromise(result)) {\n return result.catch((error) => {\n emitEvent("qerror", {\n error,\n qBase,\n symbol,\n element,\n reqTime\n });\n });\n }\n } catch (error) {\n emitEvent("qerror", {\n error,\n qBase,\n symbol,\n element,\n reqTime\n });\n }\n }\n };\n const handler = resolveHandler(container, element, qBase, base, chunk, symbol, reqTime);\n if (defer || isPromise(handler)) {\n defer = true;\n tasks.push(async () => {\n await run(isPromise(handler) ? await handler : handler);\n });\n } else {\n const result = run(handler);\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n};\nconst processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + ":" + kebabName;\n const captureAttribute = capturePrefix + kebabName;\n const elements = [];\n const captureHandlers = [];\n const tasks = [];\n let current = ev.target;\n while (current) {\n if (isElementNode(current)) {\n elements.push(current);\n captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));\n current = current.parentElement;\n } else {\n current = current.parentElement;\n }\n }\n for (let i = elements.length - 1; i >= 0; i--) {\n if (captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n const continuePropagation = !ev.cancelBubble;\n if (!continuePropagation || ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n }\n for (let i = 0; i < elements.length; i++) {\n if (!captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n const doBubble = ev.bubbles && !ev.cancelBubble;\n if (!doBubble || ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n }\n queueTasks(tasks);\n};\nconst processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);\nconst broadcast = (scope, ev, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + ":" + kebabName;\n const elements = querySelectorAll("[q-" + scope + "\\\\:" + kebabName + "]");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n }\n queueTasks(tasks);\n};\nconst processDocumentEvent = (ev) => {\n broadcast(documentPrefix, ev);\n};\nconst processPassiveDocumentEvent = (ev) => {\n broadcast(passiveDocumentPrefix, ev, false);\n};\nconst processWindowEvent = (ev) => {\n broadcast(windowPrefix, ev);\n};\nconst processPassiveWindowEvent = (ev) => {\n broadcast(passiveWindowPrefix, ev, false);\n};\nconst processReadyStateChange = () => {\n const readyState = doc.readyState;\n if (readyState == "interactive" || readyState == "complete") {\n hasInitialized = 1;\n roots.forEach(findShadowRoots);\n if (events.has("d:qinit")) {\n events.delete("d:qinit");\n const ev = createEvent("qinit");\n const elements = querySelectorAll("[q-d\\\\:qinit]");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, "d:qinit", tasks);\n el.removeAttribute("q-d:qinit");\n }\n queueTasks(tasks);\n }\n if (events.has("d:qidle")) {\n events.delete("d:qidle");\n const riC = win.requestIdleCallback ?? win.setTimeout;\n riC.bind(win)(() => {\n const ev = createEvent("qidle");\n const elements = querySelectorAll("[q-d\\\\:qidle]");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, "d:qidle", tasks);\n el.removeAttribute("q-d:qidle");\n }\n queueTasks(tasks);\n });\n }\n if (events.has("e:qvisible")) {\n observer || (observer = new IntersectionObserver((entries) => {\n const tasks = [];\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n dispatch(\n entry.target,\n createEvent("qvisible", entry),\n "e:qvisible",\n tasks\n );\n }\n }\n queueTasks(tasks);\n }));\n const elements = querySelectorAll("[q-e\\\\:qvisible]:not([q\\\\:observed])");\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n observer.observe(el);\n el.setAttribute("q:observed", "true");\n }\n }\n }\n};\nconst addEventOrRoot = (...eventNames) => {\n for (let i = 0; i < eventNames.length; i++) {\n const eventNameOrRoot = eventNames[i];\n if (typeof eventNameOrRoot === "string") {\n if (!events.has(eventNameOrRoot)) {\n events.add(eventNameOrRoot);\n const { scope, eventName } = parseKebabEvent(eventNameOrRoot);\n const passive = isPassiveScope(scope);\n const rootScope = getRootScope(scope);\n if (rootScope === windowPrefix) {\n addEventListener(\n win,\n eventName,\n passive ? processPassiveWindowEvent : processWindowEvent,\n true,\n passive\n );\n } else {\n roots.forEach(\n (root) => addEventListener(\n root,\n eventName,\n rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,\n true,\n passive\n )\n );\n }\n if (hasInitialized === 1 && (eventNameOrRoot === "e:qvisible" || eventNameOrRoot === "d:qinit" || eventNameOrRoot === "d:qidle")) {\n processReadyStateChange();\n }\n }\n } else {\n if (!roots.has(eventNameOrRoot)) {\n events.forEach((kebabEventName) => {\n const { scope, eventName } = parseKebabEvent(kebabEventName);\n const passive = isPassiveScope(scope);\n const rootScope = getRootScope(scope);\n if (rootScope !== windowPrefix) {\n addEventListener(\n eventNameOrRoot,\n eventName,\n rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,\n true,\n passive\n );\n }\n });\n roots.add(eventNameOrRoot);\n }\n }\n }\n};\nconst _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n if (Array.isArray(_qwikEv)) {\n addEventOrRoot(..._qwikEv);\n } else {\n addEventOrRoot("e:click", "e:input");\n }\n win._qwikEv = {\n events,\n roots,\n push: addEventOrRoot\n };\n addEventListener(doc, "readystatechange", processReadyStateChange);\n processReadyStateChange();\n}';
1489
1663
  var QWIK_BACKPATCH_EXECUTOR_MINIFIED = `const t='script[type="qwik/backpatch"]',e=document.currentScript;if(e){const o=e.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])");if(o){const e=o.querySelector(t);if(e){const t=JSON.parse(e.textContent||"[]"),n=document.createTreeWalker(o,NodeFilter.SHOW_ELEMENT);let r=n.currentNode,c=r.hasAttribute(":")?0:-1;for(let e=0;e<t.length;e+=3){const o=t[e],i=t[e+1];let s=t[e+2];for(;c<o&&(r=n.nextNode(),r);)r.hasAttribute(":")&&c++;const l=r;null==s||!1===s?l.removeAttribute(i):("boolean"==typeof s&&(s=""),l.setAttribute(i,s))}}}}`;
1490
1664
  var QWIK_BACKPATCH_EXECUTOR_DEBUG = `const BACKPATCH_DATA_SELECTOR = 'script[type="qwik/backpatch"]';
1491
1665
  const executorScript = document.currentScript;
@@ -1626,7 +1800,8 @@ var SsrNode = class {
1626
1800
  if (this.flags & 1 /* Updatable */) {
1627
1801
  this.flags &= ~1 /* Updatable */;
1628
1802
  if (this.children) {
1629
- for (const child of this.children) {
1803
+ for (let i = 0; i < this.children.length; i++) {
1804
+ const child = this.children[i];
1630
1805
  child.setTreeNonUpdatable();
1631
1806
  }
1632
1807
  }
@@ -2335,6 +2510,9 @@ var SSRContainer = class extends _SharedContainer {
2335
2510
  /** Renders opening tag for DOM element */
2336
2511
  openElement(elementName, key, varAttrs, constAttrs = null, styleScopedId = null, currentFile = null, hasMovedCaptures = true) {
2337
2512
  const isQwikStyle = isQwikStyleElement(elementName, varAttrs) || isQwikStyleElement(elementName, constAttrs);
2513
+ if (elementName === "noscript" || elementName === "template" || elementName === "script") {
2514
+ this.$noScriptHere$++;
2515
+ }
2338
2516
  if (
2339
2517
  // don't append qwik loader before qwik style elements
2340
2518
  // it will confuse the resuming, because styles are expected to be the first nodes in subtree
@@ -2342,8 +2520,6 @@ var SSRContainer = class extends _SharedContainer {
2342
2520
  ) {
2343
2521
  if (this.$noScriptHere$ === 0 && this.size > 30 * 1024 && elementName !== "body") {
2344
2522
  this.emitQwikLoaderInline();
2345
- } else if (elementName === "noscript" || elementName === "template") {
2346
- this.$noScriptHere$++;
2347
2523
  }
2348
2524
  }
2349
2525
  let innerHTML = void 0;
@@ -2432,10 +2608,8 @@ var SSRContainer = class extends _SharedContainer {
2432
2608
  this.write(GT);
2433
2609
  }
2434
2610
  this.lastNode = null;
2435
- if (this.qlInclude === 1 /* Inline */) {
2436
- if (elementName === "noscript" || elementName === "template") {
2437
- this.$noScriptHere$--;
2438
- }
2611
+ if (elementName === "noscript" || elementName === "template" || elementName === "script") {
2612
+ this.$noScriptHere$--;
2439
2613
  }
2440
2614
  }
2441
2615
  /** Writes opening data to vNodeData for fragment boundaries */
@@ -2798,7 +2972,8 @@ var SSRContainer = class extends _SharedContainer {
2798
2972
  emitPatchDataIfNeeded() {
2799
2973
  const patches = [];
2800
2974
  for (const [elementIndex, backpatchEntries] of this.backpatchMap) {
2801
- for (const backpatchEntry of backpatchEntries) {
2975
+ for (let i = 0; i < backpatchEntries.length; i++) {
2976
+ const backpatchEntry = backpatchEntries[i];
2802
2977
  patches.push(
2803
2978
  elementIndex,
2804
2979
  backpatchEntry.attrName,
@@ -2950,7 +3125,8 @@ var SSRContainer = class extends _SharedContainer {
2950
3125
  );
2951
3126
  let indent = " ";
2952
3127
  let lastName = "";
2953
- for (const frame3 of frames) {
3128
+ for (let i = 0; i < frames.length; i++) {
3129
+ const frame3 = frames[i];
2954
3130
  const [name, example] = allowedContent(frame3.tagNesting);
2955
3131
  text.push(
2956
3132
  `${indent}<${frame3.elementName}>${lastName !== name ? ` [${name}]${example ? ` -> ${example}` : ""}` : ""}`
@@ -2961,7 +3137,7 @@ var SSRContainer = class extends _SharedContainer {
2961
3137
  text.push(
2962
3138
  `${indent}<${elementName}> <= is not allowed as a child of ${allowedContent(previousTagNesting)[0]}.`
2963
3139
  );
2964
- throw newTagError(text.join("\n"));
3140
+ throw newTagError(text.map(escapeHTML).join("\n"));
2965
3141
  }
2966
3142
  }
2967
3143
  }
@@ -3289,9 +3465,10 @@ function resolveManifest(manifest) {
3289
3465
  }
3290
3466
  if (mergedManifest.mapping) {
3291
3467
  const mapper = {};
3292
- Object.entries(mergedManifest.mapping).forEach(([symbol, bundleFilename]) => {
3293
- mapper[getSymbolHash(symbol)] = [symbol, bundleFilename];
3294
- });
3468
+ for (const symbol in mergedManifest.mapping) {
3469
+ const bundleFilename = mergedManifest.mapping[symbol];
3470
+ mapper[getSymbolHash2(symbol)] = [symbol, bundleFilename];
3471
+ }
3295
3472
  return {
3296
3473
  mapper,
3297
3474
  manifest: mergedManifest,
@@ -3304,7 +3481,7 @@ var Q_FUNCS_PREFIX = 'document["qFuncs_HASH"]=';
3304
3481
 
3305
3482
  // packages/qwik/src/server/index.ts
3306
3483
  async function setServerPlatform2(manifest) {
3307
- const platform = createPlatform({ manifest }, resolveManifest(manifest));
3484
+ const platform = createPlatform2({ manifest }, resolveManifest(manifest));
3308
3485
  setPlatform2(platform);
3309
3486
  }
3310
3487
  export {