@qwik.dev/core
Version:
An open source framework for building instant loading web apps at any scale, without the extra effort.
1,457 lines (1,424 loc) • 113 kB
JavaScript
/**
* @license
* @qwik.dev/core/server 2.0.0-beta.13-dev+cb19ff7
* Copyright QwikDev. All Rights Reserved.
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/QwikDev/qwik/blob/main/LICENSE
*/
globalThis.qwikServer = (function (module) {
if (typeof require !== 'function' && typeof location !== 'undefined' && typeof navigator !== 'undefined') {
// shim cjs require() for core.cjs within a browser
globalThis.require = function(path) {
if (path === './core.cjs' || path === '@qwik.dev/core') {
if (!self.qwikCore) {
throw new Error('Qwik Core global, "globalThis.qwikCore", must already be loaded for the Qwik Server to be used within a browser.');
}
return self.qwikCore;
}
if (path === '@qwik.dev/core/build') {
if (!self.qwikBuild) {
throw new Error('Qwik Build global, "globalThis.qwikBuild", must already be loaded for the Qwik Server to be used within a browser.');
}
return self.qwikBuild;
}
if (path === '@qwik-client-manifest') {
return {};
}
throw new Error('Unable to require() path "' + path + '" from a browser environment.');
};
}
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/qwik/src/server/index.ts
var index_exports = {};
__export(index_exports, {
getQwikBackpatchExecutorScript: () => getQwikBackpatchExecutorScript,
getQwikLoaderScript: () => getQwikLoaderScript,
getQwikPrefetchWorkerScript: () => getQwikPrefetchWorkerScript,
renderToStream: () => renderToStream,
renderToString: () => renderToString,
resolveManifest: () => resolveManifest,
setServerPlatform: () => setServerPlatform2,
versions: () => versions
});
module.exports = __toCommonJS(index_exports);
var import_core3 = require("@qwik.dev/core");
// packages/qwik/src/server/platform.ts
var import_core = require("@qwik.dev/core");
var import_build6 = require("@qwik.dev/core/build");
// packages/qwik/src/core/shared/utils/qdev.ts
var qDev = globalThis.qDev !== false;
var qInspector = globalThis.qInspector === true;
var qSerialize = globalThis.qSerialize !== false;
var qDynamicPlatform = globalThis.qDynamicPlatform !== false;
var qTest = globalThis.qTest === true;
var qRuntimeQrl = globalThis.qRuntimeQrl === true;
// packages/qwik/src/core/shared/utils/log.ts
var STYLE = qDev ? `background: #564CE0; color: white; padding: 2px 3px; border-radius: 2px; font-size: 0.8em;` : "";
var throwErrorAndStop = (message, ...optionalParams) => {
const error = createAndLogError(false, message, ...optionalParams);
debugger;
throw error;
};
var logErrorAndStop = (message, ...optionalParams) => {
const err = createAndLogError(qDev, message, ...optionalParams);
debugger;
return err;
};
var createAndLogError = (asyncThrow, message, ...optionalParams) => {
const err = message instanceof Error ? message : new Error(message);
!qTest && console.error("%cQWIK ERROR", STYLE, err.message, ...optionalParams, err.stack);
asyncThrow && !qTest && setTimeout(() => {
throw err;
}, 0);
return err;
};
// packages/qwik/src/core/shared/error/assert.ts
var ASSERT_DISCLAIMER = "Internal assert, this is likely caused by a bug in Qwik: ";
function assertTrue(value1, text, ...parts) {
if (qDev) {
if (value1 === true) {
return;
}
throwErrorAndStop(ASSERT_DISCLAIMER + text, ...parts);
}
}
// packages/qwik/src/core/client/util-mapArray.ts
var mapApp_findIndx = (array, key, start) => {
assertTrue(start % 2 === 0, "Expecting even number.");
let bottom = start >> 1;
let top = array.length - 2 >> 1;
while (bottom <= top) {
const mid = bottom + (top - bottom >> 1);
const midKey = array[mid << 1];
if (midKey === key) {
return mid << 1;
}
if (midKey < key) {
bottom = mid + 1;
} else {
top = mid - 1;
}
}
return bottom << 1 ^ -1;
};
var mapArray_set = (array, key, value, start, allowNullValue = false) => {
const indx = mapApp_findIndx(array, key, start);
if (indx >= 0) {
if (value == null && !allowNullValue) {
array.splice(indx, 2);
} else {
array[indx + 1] = value;
}
} else if (value != null || allowNullValue) {
array.splice(indx ^ -1, 0, key, value);
}
};
var mapApp_remove = (array, key, start) => {
const indx = mapApp_findIndx(array, key, start);
let value = null;
if (indx >= 0) {
value = array[indx + 1];
array.splice(indx, 2);
return value;
}
return value;
};
var mapArray_get = (array, key, start) => {
const indx = mapApp_findIndx(array, key, start);
if (indx >= 0) {
return array[indx + 1];
} else {
return null;
}
};
var mapArray_has = (array, key, start) => {
return mapApp_findIndx(array, key, start) >= 0;
};
// packages/qwik/src/core/shared/utils/types.ts
var isObject = (v) => {
return typeof v === "object" && v !== null;
};
var isArray = (v) => {
return Array.isArray(v);
};
var isString = (v) => {
return typeof v === "string";
};
// packages/qwik/src/core/shared/error/error.ts
var codeToText = (code, ...parts) => {
if (qDev) {
const MAP = [
"Error while serializing class or style attributes",
// 0
"Scheduler not found",
// 1
"track() received object, without prop to track",
// 2
"Only primitive and object literals can be serialized. {{0}}",
// 3
"You can render over a existing q:container. Skipping render().",
// 4
"QRL is not a function",
// 5
"Dynamic import not found",
// 6
"Unknown type argument",
// 7
`Actual value for useContext({{0}}) can not be found, make sure some ancestor component has set a value using useContextProvider(). In the browser make sure that the context was used during SSR so its state was serialized.`,
// 8
"Invoking 'use*()' method outside of invocation context.",
// 9
`Calling a 'use*()' method outside 'component$(() => { HERE })' is not allowed. 'use*()' methods provide hooks to the 'component$' state and lifecycle, ie 'use' hooks can only be called synchronously within the 'component$' function or another 'use' method.
See https://qwik.dev/docs/core/tasks/#use-method-rules`,
// 10
'The provided Context reference "{{0}}" is not a valid context created by createContextId()',
// 11
"SsrError(tag): {{0}}",
// 12
"QRLs can not be resolved because it does not have an attached container. This means that the QRL does not know where it belongs inside the DOM, so it cant dynamically import() from a relative path.",
// 13
"QRLs can not be dynamically resolved, because it does not have a chunk path",
// 14
"{{0}}\nThe JSX ref attribute must be a Signal",
// 15
"Serialization Error: Deserialization of data type {{0}} is not implemented",
// 16
"Serialization Error: Expected vnode for ref prop, but got {{0}}",
// 17
"Serialization Error: Cannot allocate data type {{0}}",
// 18
"Serialization Error: Missing root id for {{0}}",
// 19
"Serialization Error: Serialization of data type {{0}} is not implemented",
// 20
"Serialization Error: Unvisited {{0}}",
// 21
"Serialization Error: Missing QRL chunk for {{0}}",
// 22
"{{0}}\nThe value of the textarea must be a string found {{1}}",
// 23
"Unable to find q:container",
// 24
"Element must have 'q:container' attribute.",
// 25
"Unknown vnode type {{0}}.",
// 26
"Materialize error: missing element: {{0}} {{1}} {{2}}",
// 27
"Cannot coerce a Signal, use `.value` instead",
// 28
"useComputed$ QRL {{0}} {{1}} cannot return a Promise",
// 29
"ComputedSignal is read-only",
// 30
"WrappedSignal is read-only",
// 31
"Attribute value is unsafe for SSR",
// 32
"SerializerSymbol function returned rejected promise",
// 33
"Serialization Error: Cannot serialize function: {{0}}"
// 34
];
let text = MAP[code] ?? "";
if (parts.length) {
text = text.replaceAll(/{{(\d+)}}/g, (_, index) => {
let v = parts[index];
if (v && isObject(v) && v.constructor === Object) {
v = JSON.stringify(v).slice(0, 50);
}
return v;
});
}
return `Code(Q${code}): ${text}`;
} else {
return `Code(Q${code}) https://github.com/QwikDev/qwik/blob/main/packages/qwik/src/core/error/error.ts#L${8 + code}`;
}
};
var qError = (code, errorMessageArgs = []) => {
const text = codeToText(code, ...errorMessageArgs);
return logErrorAndStop(text, ...errorMessageArgs);
};
// packages/qwik/src/core/shared/qrl/qrl-utils.ts
var import_build = require("@qwik.dev/core/build");
var SYNC_QRL = "<sync>";
// packages/qwik/src/core/shared/types.ts
var DEBUG_TYPE = "q:type";
// packages/qwik/src/core/shared/utils/character-escaping.ts
function escapeHTML(html) {
let escapedHTML = "";
const length = html.length;
let idx = 0;
let lastIdx = idx;
for (; idx < length; idx++) {
const ch = html.charCodeAt(idx);
if (ch === 60) {
escapedHTML += html.substring(lastIdx, idx) + "<";
} else if (ch === 62) {
escapedHTML += html.substring(lastIdx, idx) + ">";
} else if (ch === 38) {
escapedHTML += html.substring(lastIdx, idx) + "&";
} else if (ch === 34) {
escapedHTML += html.substring(lastIdx, idx) + """;
} else if (ch === 39) {
escapedHTML += html.substring(lastIdx, idx) + "'";
} else {
continue;
}
lastIdx = idx + 1;
}
if (lastIdx === 0) {
return html;
} else {
return escapedHTML + html.substring(lastIdx);
}
}
// packages/qwik/src/core/shared/utils/markers.ts
var OnRenderProp = "q:renderFn";
var QSlot = "q:slot";
var QSlotParent = "q:sparent";
var QStyle = "q:style";
var QStyleSelector = "style[q\\:style]";
var QStyleSSelector = "style[q\\:sstyle]";
var QStylesAllSelector = QStyleSelector + "," + QStyleSSelector;
var QScopedStyle = "q:sstyle";
var QCtxAttr = "q:ctx";
var QBackRefs = "q:brefs";
var QRenderAttr = "q:render";
var QRuntimeAttr = "q:runtime";
var QVersionAttr = "q:version";
var QBaseAttr = "q:base";
var QLocaleAttr = "q:locale";
var QManifestHashAttr = "q:manifest-hash";
var QInstanceAttr = "q:instance";
var QContainerIsland = "q:container-island";
var QContainerIslandEnd = "/" + QContainerIsland;
var QIgnore = "q:ignore";
var QIgnoreEnd = "/" + QIgnore;
var QContainerAttr = "q:container";
var QContainerAttrEnd = "/" + QContainerAttr;
var QTemplate = "q:template";
var QContainerSelector = "[q\\:container]:not([q\\:container=" + "html" /* HTML */ + "]):not([q\\:container=" + "text" /* TEXT */ + "])";
var QDefaultSlot = "";
var ELEMENT_ID = "q:id";
var ELEMENT_KEY = "q:key";
var ELEMENT_PROPS = "q:props";
var ELEMENT_SEQ = "q:seq";
var ELEMENT_SEQ_IDX = "q:seqIdx";
var ELEMENT_BACKPATCH_DATA = "qwik/backpatch";
var NON_SERIALIZABLE_MARKER_PREFIX = ":";
var USE_ON_LOCAL = NON_SERIALIZABLE_MARKER_PREFIX + "on";
var USE_ON_LOCAL_SEQ_IDX = NON_SERIALIZABLE_MARKER_PREFIX + "onIdx";
var USE_ON_LOCAL_FLAGS = NON_SERIALIZABLE_MARKER_PREFIX + "onFlags";
var FLUSH_COMMENT = "qkssr-f";
var STREAM_BLOCK_START_COMMENT = "qkssr-pu";
var STREAM_BLOCK_END_COMMENT = "qkssr-po";
var Q_PROPS_SEPARATOR = ":";
var dangerouslySetInnerHTML = "dangerouslySetInnerHTML";
// packages/qwik/src/core/shared/utils/promises.ts
var import_build2 = require("@qwik.dev/core/build");
var MAX_RETRY_ON_PROMISE_COUNT = 100;
var isPromise = (value) => {
return !!value && typeof value == "object" && typeof value.then === "function";
};
var maybeThen = (valueOrPromise, thenFn) => {
return isPromise(valueOrPromise) ? valueOrPromise.then(thenFn, shouldNotError) : thenFn(valueOrPromise);
};
var shouldNotError = (reason) => {
throwErrorAndStop(reason);
};
function retryOnPromise(fn, retryCount = 0) {
const retryOrThrow = (e) => {
if (isPromise(e) && retryCount < MAX_RETRY_ON_PROMISE_COUNT) {
return e.then(retryOnPromise.bind(null, fn, retryCount++));
}
throw e;
};
try {
const result = fn();
if (isPromise(result)) {
return result.catch((e) => retryOrThrow(e));
}
return result;
} catch (e) {
if (import_build2.isDev && import_build2.isServer && e instanceof ReferenceError && e.message.includes("window")) {
e.message = 'It seems like you forgot to add "if (isBrowser) {...}" here:' + e.message;
throw e;
}
return retryOrThrow(e);
}
}
// packages/qwik/src/core/shared/utils/scoped-styles.ts
function isClassAttr(key) {
return key === "class" || key === "className";
}
function convertStyleIdsToString(scopedStyleIds) {
return Array.from(scopedStyleIds).join(" ");
}
// packages/qwik/src/core/shared/utils/event-names.ts
function isPreventDefault(key) {
return key.startsWith("preventdefault:");
}
// packages/qwik/src/core/shared/utils/unitless_number.ts
var unitlessNumbers = /* @__PURE__ */ new Set([
"animationIterationCount",
"aspectRatio",
"borderImageOutset",
"borderImageSlice",
"borderImageWidth",
"boxFlex",
"boxFlexGroup",
"boxOrdinalGroup",
"columnCount",
"columns",
"flex",
"flexGrow",
"flexShrink",
"gridArea",
"gridRow",
"gridRowEnd",
"gridRowStart",
"gridColumn",
"gridColumnEnd",
"gridColumnStart",
"fontWeight",
"lineClamp",
"lineHeight",
"opacity",
"order",
"orphans",
"scale",
"tabSize",
"widows",
"zIndex",
"zoom",
"MozAnimationIterationCount",
// Known Prefixed Properties
"MozBoxFlex",
// TODO: Remove these since they shouldn't be used in modern code
"msFlex",
"msFlexPositive",
"WebkitAnimationIterationCount",
"WebkitBoxFlex",
"WebkitBoxOrdinalGroup",
"WebkitColumnCount",
"WebkitColumns",
"WebkitFlex",
"WebkitFlexGrow",
"WebkitFlexShrink",
"WebkitLineClamp"
]);
var isUnitlessNumber = (name) => {
return unitlessNumbers.has(name);
};
// packages/qwik/src/core/shared/utils/styles.ts
var serializeClass = (obj) => {
if (!obj) {
return "";
}
if (isString(obj)) {
return obj.trim();
}
const classes = [];
if (isArray(obj)) {
for (const o of obj) {
const classList = serializeClass(o);
if (classList) {
classes.push(classList);
}
}
} else {
for (const [key, value] of Object.entries(obj)) {
if (value) {
classes.push(key.trim());
}
}
}
return classes.join(" ");
};
var fromCamelToKebabCaseWithDash = (text) => {
return text.replace(/([A-Z])/g, "-$1").toLowerCase();
};
var stringifyStyle = (obj) => {
if (obj == null) {
return "";
}
if (typeof obj == "object") {
if (isArray(obj)) {
throw qError(0 /* stringifyClassOrStyle */, [obj, "style"]);
} else {
const chunks = [];
for (const key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
const value = obj[key];
if (value != null && typeof value !== "function") {
if (key.startsWith("--")) {
chunks.push(key + ":" + value);
} else {
chunks.push(fromCamelToKebabCaseWithDash(key) + ":" + setValueForStyle(key, value));
}
}
}
}
return chunks.join(";");
}
}
return String(obj);
};
var serializeBooleanOrNumberAttribute = (value) => {
return value != null ? String(value) : null;
};
function serializeAttribute(key, value, styleScopedId) {
if (isClassAttr(key)) {
const serializedClass = serializeClass(value);
value = styleScopedId ? styleScopedId + (serializedClass.length ? " " + serializedClass : serializedClass) : serializedClass;
} else if (key === "style") {
value = stringifyStyle(value);
} else if (isEnumeratedBooleanAttribute(key) || typeof value === "number") {
value = serializeBooleanOrNumberAttribute(value);
} else if (value === false || value == null) {
value = null;
} else if (value === true && isPreventDefault(key)) {
value = "";
}
return value;
}
function isEnumeratedBooleanAttribute(key) {
return isAriaAttribute(key) || ["spellcheck", "draggable", "contenteditable"].includes(key);
}
var setValueForStyle = (styleName, value) => {
if (typeof value === "number" && value !== 0 && !isUnitlessNumber(styleName)) {
return value + "px";
}
return value;
};
function isAriaAttribute(prop) {
return prop.startsWith("aria-");
}
// packages/qwik/src/core/shared/vnode-data-types.ts
var VNodeDataSeparator = {
REFERENCE_CH: (
/* ***** */
`~`
),
// `~` is a reference to the node. Save it.
REFERENCE: (
/* ******** */
126
),
// `~` is a reference to the node. Save it.
ADVANCE_1_CH: (
/* ***** */
`!`
),
// `!` is vNodeData separator skipping 0. (ie next vNode)
ADVANCE_1: (
/* ********* */
33
),
// `!` is vNodeData separator skipping 0. (ie next vNode)
ADVANCE_2_CH: (
/* ***** */
`"`
),
// `"` is vNodeData separator skipping 1.
ADVANCE_2: (
/* ********* */
34
),
// `"` is vNodeData separator skipping 1.
ADVANCE_4_CH: (
/* ***** */
`#`
),
// `#` is vNodeData separator skipping 2.
ADVANCE_4: (
/* ********* */
35
),
// `#` is vNodeData separator skipping 2.
ADVANCE_8_CH: (
/* ***** */
`$`
),
// `$` is vNodeData separator skipping 4.
ADVANCE_8: (
/* ********* */
36
),
// `$` is vNodeData separator skipping 4.
ADVANCE_16_CH: (
/* **** */
`%`
),
// `%` is vNodeData separator skipping 8.
ADVANCE_16: (
/* ******** */
37
),
// `%` is vNodeData separator skipping 8.
ADVANCE_32_CH: (
/* **** */
`&`
),
// `&` is vNodeData separator skipping 16.
ADVANCE_32: (
/* ******** */
38
),
// `&` is vNodeData separator skipping 16.
ADVANCE_64_CH: (
/* **** */
`'`
),
// `'` is vNodeData separator skipping 32.
ADVANCE_64: (
/* ******** */
39
),
// `'` is vNodeData separator skipping 32.
ADVANCE_128_CH: (
/* *** */
`(`
),
// `(` is vNodeData separator skipping 64.
ADVANCE_128: (
/* ******* */
40
),
// `(` is vNodeData separator skipping 64.
ADVANCE_256_CH: (
/* *** */
`)`
),
// `)` is vNodeData separator skipping 128.
ADVANCE_256: (
/* ******* */
41
),
// `)` is vNodeData separator skipping 128.
ADVANCE_512_CH: (
/* *** */
`*`
),
// `*` is vNodeData separator skipping 256.
ADVANCE_512: (
/* ******* */
42
),
// `*` is vNodeData separator skipping 256.
ADVANCE_1024_CH: (
/* ** */
`+`
),
// `+` is vNodeData separator skipping 512.
ADVANCE_1024: (
/* ****** */
43
),
// `+` is vNodeData separator skipping 512.
ADVANCE_2048_CH: (
/* * */
","
),
// ',' is vNodeData separator skipping 1024.
ADVANCE_2048: (
/* ****** */
44
),
// ',' is vNodeData separator skipping 1024.
ADVANCE_4096_CH: (
/* * */
`-`
),
// `-` is vNodeData separator skipping 2048.
ADVANCE_4096: (
/* ****** */
45
),
// `-` is vNodeData separator skipping 2048.
ADVANCE_8192_CH: (
/* * */
`.`
),
// `.` is vNodeData separator skipping 4096.
ADVANCE_8192: (
/* ****** */
46
)
// `.` is vNodeData separator skipping 4096.
};
var VNodeDataChar = {
OPEN: (
/* ************** */
123
),
// `{` is the start of the VNodeData for a virtual element.
OPEN_CHAR: (
/* ****** */
"{"
),
CLOSE: (
/* ************* */
125
),
// `}` is the end of the VNodeData for a virtual element.
CLOSE_CHAR: (
/* ***** */
"}"
),
SCOPED_STYLE: (
/* ******* */
59
),
// `;` - `q:sstyle` - Style attribute.
SCOPED_STYLE_CHAR: (
/* */
";"
),
RENDER_FN: (
/* ********** */
60
),
// `<` - `q:renderFn' - Component QRL render function (body)
RENDER_FN_CHAR: (
/* ** */
"<"
),
ID: (
/* ***************** */
61
),
// `=` - `q:id` - ID of the element.
ID_CHAR: (
/* ********* */
"="
),
PROPS: (
/* ************** */
62
),
// `>` - `q:props' - Component Props
PROPS_CHAR: (
/* ****** */
">"
),
SLOT_PARENT: (
/* ******** */
63
),
// `?` - `q:sparent` - Slot parent.
SLOT_PARENT_CHAR: (
/* */
"?"
),
KEY: (
/* **************** */
64
),
// `@` - `q:key` - Element key.
KEY_CHAR: (
/* ******** */
"@"
),
SEQ: (
/* **************** */
91
),
// `[` - `q:seq' - Seq value from `useSequentialScope()`
SEQ_CHAR: (
/* ******** */
"["
),
DON_T_USE: (
/* ********** */
92
),
// `\` - SKIP because `\` is used as escaping
DON_T_USE_CHAR: "\\",
CONTEXT: (
/* ************ */
93
),
// `]` - `q:ctx' - Component context/props
CONTEXT_CHAR: (
/* **** */
"]"
),
SEQ_IDX: (
/* ************ */
94
),
// `^` - `q:seqIdx' - Sequential scope id
SEQ_IDX_CHAR: (
/* **** */
"^"
),
BACK_REFS: (
/* ********** */
96
),
// '`' - `q:brefs' - Effect dependencies/subscriptions
BACK_REFS_CHAR: (
/* ** */
"`"
),
SEPARATOR: (
/* ********* */
124
),
// `|` - Separator char to encode any key/value pairs.
SEPARATOR_CHAR: (
/* ** */
"|"
),
SLOT: (
/* ************** */
126
),
// `~` - `q:slot' - Slot name
SLOT_CHAR: (
/* ******* */
"~"
)
};
// packages/qwik/src/core/preloader/queue.ts
var import_build5 = require("@qwik.dev/core/build");
// packages/qwik/src/core/preloader/bundle-graph.ts
var import_build4 = require("@qwik.dev/core/build");
// packages/qwik/src/core/preloader/constants.ts
var import_build3 = require("@qwik.dev/core/build");
var doc = import_build3.isBrowser ? document : void 0;
var config = {
$DEBUG$: false,
$maxIdlePreloads$: 25,
$invPreloadProbability$: 0.65
};
var rel = import_build3.isBrowser && doc.createElement("link").relList.supports("modulepreload") ? "modulePreload" : "preload";
var loadStart = Date.now();
var isJSRegex = /\.[mc]?js$/;
// packages/qwik/src/core/preloader/types.ts
var BundleImportState_None = 0;
var BundleImportState_Queued = 1;
var BundleImportState_Preload = 2;
var BundleImportState_Alias = 3;
var BundleImportState_Loaded = 4;
// packages/qwik/src/core/preloader/bundle-graph.ts
var base;
var graph;
var makeBundle = (name, deps) => {
return {
$name$: name,
$state$: isJSRegex.test(name) ? BundleImportState_None : BundleImportState_Alias,
$deps$: shouldResetFactor ? deps == null ? void 0 : deps.map((d) => ({ ...d, $factor$: 1 })) : deps,
$inverseProbability$: 1,
$createdTs$: Date.now(),
$waitedMs$: 0,
$loadedMs$: 0
};
};
var parseBundleGraph = (serialized) => {
const graph2 = /* @__PURE__ */ new Map();
let i = 0;
while (i < serialized.length) {
const name = serialized[i++];
const deps = [];
let idx;
let probability = 1;
while (idx = serialized[i], typeof idx === "number") {
if (idx < 0) {
probability = -idx / 10;
} else {
deps.push({
$name$: serialized[idx],
$importProbability$: probability,
$factor$: 1
});
}
i++;
}
graph2.set(name, deps);
}
return graph2;
};
var getBundle = (name) => {
let bundle = bundles.get(name);
if (!bundle) {
let deps;
if (graph) {
deps = graph.get(name);
if (!deps) {
return;
}
if (!deps.length) {
deps = void 0;
}
}
bundle = makeBundle(name, deps);
bundles.set(name, bundle);
}
return bundle;
};
var initPreloader = (serializedBundleGraph, opts) => {
if (opts) {
if ("debug" in opts) {
config.$DEBUG$ = !!opts.debug;
}
if (typeof opts.preloadProbability === "number") {
config.$invPreloadProbability$ = 1 - opts.preloadProbability;
}
}
if (base != null || !serializedBundleGraph) {
return;
}
base = "";
graph = parseBundleGraph(serializedBundleGraph);
};
// packages/qwik/src/core/preloader/queue.ts
var bundles = /* @__PURE__ */ new Map();
var shouldResetFactor;
var queueDirty;
var preloadCount = 0;
var queue = [];
var log = (...args) => {
console.log(
`Preloader ${Date.now() - loadStart}ms ${preloadCount}/${queue.length} queued>`,
...args
);
};
var resetQueue = () => {
bundles.clear();
queueDirty = false;
shouldResetFactor = true;
preloadCount = 0;
queue.length = 0;
};
var sortQueue = () => {
if (queueDirty) {
queue.sort((a, b) => a.$inverseProbability$ - b.$inverseProbability$);
queueDirty = false;
}
};
var getQueue = () => {
sortQueue();
let probability = 0.4;
const result = [];
for (const b of queue) {
const nextProbability = Math.round((1 - b.$inverseProbability$) * 10);
if (nextProbability !== probability) {
probability = nextProbability;
result.push(probability);
}
result.push(b.$name$);
}
return result;
};
var trigger = () => {
if (!queue.length) {
return;
}
sortQueue();
while (queue.length) {
const bundle = queue[0];
const inverseProbability = bundle.$inverseProbability$;
const probability = 1 - inverseProbability;
const allowedPreloads = graph ? config.$maxIdlePreloads$ : (
// While the graph is not available, we limit to 5 preloads
5
);
if (probability >= 0.99 || preloadCount < allowedPreloads) {
queue.shift();
preloadOne(bundle);
} else {
break;
}
}
if (config.$DEBUG$ && !queue.length) {
const loaded = [...bundles.values()].filter((b) => b.$state$ > BundleImportState_None);
const waitTime = loaded.reduce((acc, b) => acc + b.$waitedMs$, 0);
const loadTime = loaded.reduce((acc, b) => acc + b.$loadedMs$, 0);
log(
`>>>> done ${loaded.length}/${bundles.size} total: ${waitTime}ms waited, ${loadTime}ms loaded`
);
}
};
var preloadOne = (bundle) => {
if (bundle.$state$ >= BundleImportState_Preload) {
return;
}
preloadCount++;
const start = Date.now();
bundle.$waitedMs$ = start - bundle.$createdTs$;
bundle.$state$ = BundleImportState_Preload;
config.$DEBUG$ && log(
`<< load ${Math.round((1 - bundle.$inverseProbability$) * 100)}% after ${`${bundle.$waitedMs$}ms`}`,
bundle.$name$
);
const link = doc.createElement("link");
link.href = new URL(`${base}${bundle.$name$}`, doc.baseURI).toString();
link.rel = rel;
link.as = "script";
link.onload = link.onerror = () => {
preloadCount--;
const end = Date.now();
bundle.$loadedMs$ = end - start;
bundle.$state$ = BundleImportState_Loaded;
config.$DEBUG$ && log(`>> done after ${bundle.$loadedMs$}ms`, bundle.$name$);
link.remove();
trigger();
};
doc.head.appendChild(link);
};
var adjustProbabilities = (bundle, newInverseProbability, seen) => {
if (seen == null ? void 0 : seen.has(bundle)) {
return;
}
const previousInverseProbability = bundle.$inverseProbability$;
bundle.$inverseProbability$ = newInverseProbability;
if (previousInverseProbability - bundle.$inverseProbability$ < 0.01) {
return;
}
if (
// don't queue until we have initialized the preloader
base != null && bundle.$state$ < BundleImportState_Preload
) {
if (bundle.$state$ === BundleImportState_None) {
bundle.$state$ = BundleImportState_Queued;
queue.push(bundle);
config.$DEBUG$ && log(`queued ${Math.round((1 - bundle.$inverseProbability$) * 100)}%`, bundle.$name$);
}
queueDirty = true;
}
if (bundle.$deps$) {
seen ||= /* @__PURE__ */ new Set();
seen.add(bundle);
const probability = 1 - bundle.$inverseProbability$;
for (const dep of bundle.$deps$) {
const depBundle = getBundle(dep.$name$);
if (depBundle.$inverseProbability$ === 0) {
continue;
}
let newInverseProbability2;
if (probability === 1 || probability >= 0.99 && depsCount < 100) {
depsCount++;
newInverseProbability2 = Math.min(0.01, 1 - dep.$importProbability$);
} else {
const newInverseImportProbability = 1 - dep.$importProbability$ * probability;
const prevAdjust = dep.$factor$;
const factor = newInverseImportProbability / prevAdjust;
newInverseProbability2 = Math.max(0.02, depBundle.$inverseProbability$ * factor);
dep.$factor$ = factor;
}
adjustProbabilities(depBundle, newInverseProbability2, seen);
}
}
};
var handleBundle = (name, inverseProbability) => {
const bundle = getBundle(name);
if (bundle && bundle.$inverseProbability$ > inverseProbability) {
adjustProbabilities(bundle, inverseProbability);
}
};
var depsCount;
var preload = (name, probability) => {
if (!(name == null ? void 0 : name.length)) {
return;
}
depsCount = 0;
let inverseProbability = probability ? 1 - probability : 0.4;
if (Array.isArray(name)) {
for (let i = name.length - 1; i >= 0; i--) {
const item = name[i];
if (typeof item === "number") {
inverseProbability = 1 - item / 10;
} else {
handleBundle(item, inverseProbability);
}
}
} else {
handleBundle(name, inverseProbability);
}
if (import_build5.isBrowser) {
trigger();
}
};
if (import_build5.isBrowser) {
document.addEventListener("qsymbol", (ev) => {
const { symbol, href } = ev.detail;
if (href) {
const hash2 = symbol.slice(symbol.lastIndexOf("_") + 1);
preload(hash2, 1);
}
});
}
// packages/qwik/src/server/platform.ts
var import_meta = {};
var getDevSegmentPath = (mapper, hash2, symbolName, parent) => {
const existing = mapper == null ? void 0 : mapper[hash2];
if (existing) {
return existing;
}
if (symbolName === SYNC_QRL) {
return [symbolName, ""];
}
if (!parent) {
if (symbolName.startsWith("_") && symbolName.length < 6) {
return [symbolName, `${globalThis.BASE_URL}@qwik-handlers`];
}
console.error("qwik symbolMapper: unknown qrl requested without parent:", symbolName);
return [symbolName, `${globalThis.BASE_URL}${symbolName}.js`];
}
const qrlFile = `${globalThis.BASE_URL}${parent.startsWith("/") ? parent.slice(1) : parent}_${symbolName}.js`;
return [symbolName, qrlFile];
};
function createPlatform(opts, resolvedManifest) {
const mapper = resolvedManifest == null ? void 0 : resolvedManifest.mapper;
const mapperFn = opts.symbolMapper ? opts.symbolMapper : (symbolName, _chunk, parent) => {
var _a;
if (mapper || import_build6.isDev && import_meta.env.MODE !== "test") {
const hash2 = getSymbolHash(symbolName);
const result = !import_build6.isDev ? mapper[hash2] : getDevSegmentPath(mapper, hash2, symbolName, parent);
if (!result) {
if (hash2 === SYNC_QRL) {
return [hash2, ""];
}
const isRegistered = (_a = globalThis.__qwik_reg_symbols) == null ? void 0 : _a.has(hash2);
if (isRegistered) {
return [symbolName, "_"];
}
console.error("Cannot resolve symbol", symbolName, "in", mapper, parent);
}
return result;
}
};
const serverPlatform = {
isServer: true,
async importSymbol(_containerEl, url, symbolName) {
var _a;
const hash2 = getSymbolHash(symbolName);
const regSym = (_a = globalThis.__qwik_reg_symbols) == null ? void 0 : _a.get(hash2);
if (regSym) {
return regSym;
}
let modulePath = String(url);
if (!modulePath.endsWith(".js")) {
modulePath += ".js";
}
const module2 = require(modulePath);
if (!(symbolName in module2)) {
throw new Error(`Q-ERROR: missing symbol '${symbolName}' in module '${modulePath}'.`);
}
return module2[symbolName];
},
raf: () => {
console.error("server can not rerender");
return Promise.resolve();
},
chunkForSymbol(symbolName, _chunk, parent) {
return mapperFn(symbolName, mapper, parent);
}
};
return serverPlatform;
}
async function setServerPlatform(opts, manifest) {
const platform = createPlatform(opts, manifest);
(0, import_core.setPlatform)(platform);
}
var getSymbolHash = (symbolName) => {
const index = symbolName.lastIndexOf("_");
if (index > -1) {
return symbolName.slice(index + 1);
}
return symbolName;
};
// packages/qwik/src/server/utils.ts
function createTimer() {
if (typeof performance === "undefined") {
return () => 0;
}
const start = performance.now();
return () => {
const end = performance.now();
const delta = end - start;
return delta / 1e6;
};
}
function getBuildBase(opts) {
let base2 = opts.base;
if (typeof opts.base === "function") {
base2 = opts.base(opts);
}
if (typeof base2 === "string") {
if (!base2.endsWith("/")) {
base2 += "/";
}
return base2;
}
return `${globalThis.BASE_URL || "/"}build/`;
}
var versions = {
qwik: "2.0.0-beta.13-dev+cb19ff7",
qwikDom: "2.1.19"
};
// packages/qwik/src/server/ssr-container.ts
var import_build8 = require("@qwik.dev/core/build");
var import_internal2 = require("@qwik.dev/core/internal");
// packages/qwik/src/server/preload-strategy.ts
var import_core2 = require("@qwik.dev/core");
// packages/qwik/src/server/preload-utils.ts
function flattenPrefetchResources(prefetchResources) {
const urls = [];
const addPrefetchResource = (prefetchResources2) => {
if (prefetchResources2) {
for (const prefetchResource of prefetchResources2) {
if (!urls.includes(prefetchResource.url)) {
urls.push(prefetchResource.url);
if (prefetchResource.imports) {
addPrefetchResource(prefetchResource.imports);
}
}
}
}
};
addPrefetchResource(prefetchResources);
return urls;
}
// packages/qwik/src/server/preload-strategy.ts
var getBundles = (qrls) => {
const platform = (0, import_core2.getPlatform)();
return qrls == null ? void 0 : qrls.map((qrl) => {
var _a;
const symbol = qrl.$symbol$;
const chunk = qrl.$chunk$;
const result = platform.chunkForSymbol(symbol, chunk, (_a = qrl.dev) == null ? void 0 : _a.file);
if (result) {
return result[1];
}
return chunk;
}).filter(Boolean);
};
function getPreloadPaths(qrls, opts, resolvedManifest) {
const prefetchStrategy = opts.prefetchStrategy;
if (prefetchStrategy === null) {
return [];
}
if (!(resolvedManifest == null ? void 0 : resolvedManifest.manifest.bundleGraph)) {
return getBundles(qrls);
}
if (typeof (prefetchStrategy == null ? void 0 : prefetchStrategy.symbolsToPrefetch) === "function") {
try {
const prefetchResources = prefetchStrategy.symbolsToPrefetch({
manifest: resolvedManifest.manifest
});
return flattenPrefetchResources(prefetchResources);
} catch (e) {
console.error("getPrefetchUrls, symbolsToPrefetch()", e);
}
}
const symbols = /* @__PURE__ */ new Set();
for (const qrl of qrls) {
const symbol = getSymbolHash(qrl.$symbol$);
if (symbol && symbol.length >= 10) {
symbols.add(symbol);
}
}
return [...symbols];
}
var expandBundles = (names, resolvedManifest) => {
if (!(resolvedManifest == null ? void 0 : resolvedManifest.manifest.bundleGraph)) {
return [...new Set(names)];
}
resetQueue();
let probability = 0.99;
for (const name of names) {
preload(name, probability);
probability *= 0.95;
}
return getQueue();
};
// packages/qwik/src/server/preload-impl.ts
var simplifyPath = (base2, path) => {
if (path == null) {
return null;
}
const segments = `${base2}${path}`.split("/");
const simplified = [];
for (const segment of segments) {
if (segment === ".." && simplified.length > 0) {
simplified.pop();
} else {
simplified.push(segment);
}
}
return simplified.join("/");
};
var getBase = (container) => {
let base2 = container.$buildBase$;
if (false) {
base2 = globalThis.BASE_URL;
}
return base2;
};
var preloaderPre = (container, options, nonce) => {
var _a, _b;
const { resolvedManifest } = container;
const base2 = getBase(container);
const preloaderBundle = simplifyPath(base2, (_a = resolvedManifest == null ? void 0 : resolvedManifest.manifest) == null ? void 0 : _a.preloader);
let bundleGraphPath = resolvedManifest == null ? void 0 : resolvedManifest.manifest.bundleGraphAsset;
if (bundleGraphPath) {
bundleGraphPath = (globalThis.BASE_URL || "/") + bundleGraphPath;
}
if (preloaderBundle && bundleGraphPath && options !== false) {
const preloaderOpts = typeof options === "object" ? {
debug: options.debug,
preloadProbability: options.ssrPreloadProbability
} : void 0;
const bundleGraph = (_b = container.resolvedManifest) == null ? void 0 : _b.manifest.bundleGraph;
initPreloader(bundleGraph, preloaderOpts);
const opts = [];
if (options) {
if (options.debug) {
opts.push("d:1");
}
if (options.maxIdlePreloads) {
opts.push(`P:${options.maxIdlePreloads}`);
}
if (options.preloadProbability) {
opts.push(`Q:${options.preloadProbability}`);
}
}
const optsStr = opts.length ? `,{${opts.join(",")}}` : "";
const preloaderLinkAttrs = ["rel", "modulepreload", "href", preloaderBundle];
if (nonce) {
preloaderLinkAttrs.push("nonce", nonce);
}
container.openElement("link", null, preloaderLinkAttrs);
container.closeElement();
container.openElement("link", null, [
"rel",
"preload",
"href",
bundleGraphPath,
"as",
"fetch",
"crossorigin",
"anonymous"
]);
container.closeElement();
const script = `let b=fetch("${bundleGraphPath}");import("${preloaderBundle}").then(({l})=>l(${JSON.stringify(base2)},b${optsStr}));`;
const scriptAttrs = ["type", "module", "async", true];
if (nonce) {
scriptAttrs.push("nonce", nonce);
}
container.openElement("script", null, scriptAttrs);
container.write(script);
container.closeElement();
}
const corePath = simplifyPath(base2, resolvedManifest == null ? void 0 : resolvedManifest.manifest.core);
if (corePath) {
const linkAttrs = ["rel", "modulepreload", "href", corePath];
if (nonce) {
linkAttrs.push("nonce", nonce);
}
container.openElement("link", null, linkAttrs);
container.closeElement();
}
};
var includePreloader = (container, options, referencedBundles, nonce) => {
if (referencedBundles.length === 0 || options === false) {
return null;
}
const { ssrPreloads, ssrPreloadProbability } = normalizePreLoaderOptions(
typeof options === "boolean" ? void 0 : options
);
let allowed = ssrPreloads;
const base2 = getBase(container);
const links = [];
const { resolvedManifest } = container;
if (allowed) {
const preloaderBundle2 = resolvedManifest == null ? void 0 : resolvedManifest.manifest.preloader;
const coreBundle = resolvedManifest == null ? void 0 : resolvedManifest.manifest.core;
const expandedBundles = expandBundles(referencedBundles, resolvedManifest);
let probability = 4;
const tenXMinProbability = ssrPreloadProbability * 10;
for (const hrefOrProbability of expandedBundles) {
if (typeof hrefOrProbability === "string") {
if (probability < tenXMinProbability) {
break;
}
if (hrefOrProbability === preloaderBundle2 || hrefOrProbability === coreBundle) {
continue;
}
links.push(hrefOrProbability);
if (--allowed === 0) {
break;
}
} else {
probability = hrefOrProbability;
}
}
}
const preloaderBundle = simplifyPath(base2, resolvedManifest == null ? void 0 : resolvedManifest.manifest.preloader);
const insertLinks = links.length ? (
/**
* We only use modulepreload links because they behave best. Older browsers can rely on the
* preloader which does feature detection and which will be available soon after inserting these
* links.
*/
`${JSON.stringify(links)}.map((l,e)=>{e=document.createElement('link');e.rel='modulepreload';e.href=${JSON.stringify(base2)}+l;document.head.appendChild(e)});`
) : "";
let script = insertLinks;
if (preloaderBundle) {
script += `window.addEventListener('load',f=>{f=_=>import("${preloaderBundle}").then(({p})=>p(${JSON.stringify(referencedBundles)}));try{requestIdleCallback(f,{timeout:2000})}catch(e){setTimeout(f,200)}})`;
}
if (script) {
const attrs = ["type", "module", "async", true, "q:type", "preload"];
if (nonce) {
attrs.push("nonce", nonce);
}
container.openElement("script", null, attrs);
container.write(script);
container.closeElement();
}
return null;
};
var preloaderPost = (ssrContainer, opts, nonce) => {
if (opts.preloader !== false) {
const qrls = Array.from(ssrContainer.serializationCtx.$eventQrls$);
const preloadBundles = getPreloadPaths(qrls, opts, ssrContainer.resolvedManifest);
if (preloadBundles.length > 0) {
includePreloader(ssrContainer, opts.preloader, preloadBundles, nonce);
}
}
};
function normalizePreLoaderOptions(input) {
return { ...preLoaderOptionsDefault, ...input };
}
var preLoaderOptionsDefault = {
ssrPreloads: 7,
ssrPreloadProbability: 0.5,
debug: false,
maxIdlePreloads: 25,
preloadProbability: 0.35
// deprecated
};
// packages/qwik/src/server/scripts.ts
var QWIK_LOADER_DEFAULT_MINIFIED = 'const t=document,e=window,n=new Set,o=new Set([t]);let r;const s=(t,e)=>Array.from(t.querySelectorAll(e)),a=t=>{const e=[];return o.forEach(n=>e.push(...s(n,t))),e},i=t=>{m(t),s(t,"[q\\\\:shadowroot]").forEach(t=>{const e=t.shadowRoot;e&&i(e)})},c=t=>t&&"function"==typeof t.then,l=(t,e,n=e.type)=>{a("[on"+t+"\\\\:"+n+"]").forEach(o=>{u(o,t,e,n)})},f=e=>{if(void 0===e._qwikjson_){let n=(e===t.documentElement?t.body:e).lastElementChild;for(;n;){if("SCRIPT"===n.tagName&&"qwik/json"===n.getAttribute("type")){e._qwikjson_=JSON.parse(n.textContent.replace(/\\\\x3C(\\/?script)/gi,"<$1"));break}n=n.previousElementSibling}}},p=(t,e)=>new CustomEvent(t,{detail:e}),u=async(e,n,o,r=o.type)=>{const s="on"+n+":"+r;e.hasAttribute("preventdefault:"+r)&&o.preventDefault(),e.hasAttribute("stoppropagation:"+r)&&o.stopPropagation();const a=e._qc_,i=a&&a.li.filter(t=>t[0]===s);if(i&&i.length>0){for(const t of i){const n=t[1].getFn([e,o],()=>e.isConnected)(o,e),r=o.cancelBubble;c(n)&&await n,r&&o.stopPropagation()}return}const l=e.getAttribute(s),p=e.qDispatchEvent;if(p)return p(o,n);if(l){const n=e.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])"),r=n.getAttribute("q:base"),s=n.getAttribute("q:version")||"unknown",a=n.getAttribute("q:manifest-hash")||"dev",i=new URL(r,t.baseURI);for(const p of l.split("\\n")){const l=new URL(p,i),u=l.href,q=l.hash.replace(/^#?([^?[|]*).*$/,"$1")||"default",h=performance.now();let _,d,y;const g=p.startsWith("#"),m={qBase:r,qManifest:a,qVersion:s,href:u,symbol:q,element:e,reqTime:h};if(g){const e=n.getAttribute("q:instance");_=(t["qFuncs_"+e]||[])[Number.parseInt(q)],_||(d="sync",y=Error("sym:"+q))}else{b("qsymbol",m);const t=l.href.split("#")[0];try{const e=import(t);f(n),_=(await e)[q],_||(d="no-symbol",y=Error(`${q} not in ${t}`))}catch(t){d||(d="async"),y=t}}if(!_){b("qerror",{importError:d,error:y,...m}),console.error(y);break}const w=t.__q_context__;if(e.isConnected)try{t.__q_context__=[e,o,l];const n=_(o,e);c(n)&&await n}catch(t){b("qerror",{error:t,...m})}finally{t.__q_context__=w}}}},b=(e,n)=>{t.dispatchEvent(p(e,n))},q=t=>t.replace(/([A-Z-])/g,t=>"-"+t.toLowerCase()),h=async t=>{let e=q(t.type),n=t.target;for(l("-document",t,e);n&&n.getAttribute;){const o=u(n,"",t,e);let r=t.cancelBubble;c(o)&&await o,r||(r=r||t.cancelBubble||n.hasAttribute("stoppropagation:"+t.type)),n=t.bubbles&&!0!==r?n.parentElement:null}},_=t=>{l("-window",t,q(t.type))},d=()=>{const s=t.readyState;if(!r&&("interactive"==s||"complete"==s)&&(o.forEach(i),r=1,b("qinit"),(e.requestIdleCallback??e.setTimeout).bind(e)(()=>b("qidle")),n.has("qvisible"))){const t=a("[on\\\\:qvisible]"),e=new IntersectionObserver(t=>{for(const n of t)n.isIntersecting&&(e.unobserve(n.target),u(n.target,"",p("qvisible",n)))});t.forEach(t=>e.observe(t))}},y=(t,e,n,o=!1)=>{t.addEventListener(e,n,{capture:o,passive:!1})},g=t=>t.replace(/-./g,t=>t[1].toUpperCase()),m=(...t)=>{for(const r of t)if("string"==typeof r){if(!n.has(r)){n.add(r);const t=g(r);o.forEach(e=>y(e,t,h,!0)),y(e,t,_,!0)}}else o.has(r)||(n.forEach(t=>{const e=g(t);y(r,e,h,!0)}),o.add(r))};if(!("__q_context__"in t)){t.__q_context__=0;const r=e.qwikevents;r&&(Array.isArray(r)?m(...r):m("click","input")),e.qwikevents={events:n,roots:o,push:m},y(t,"readystatechange",d),d()}';
var QWIK_LOADER_DEFAULT_DEBUG = 'const doc = document;\nconst win = window;\nconst events = /* @__PURE__ */ new Set();\nconst roots = /* @__PURE__ */ new Set([doc]);\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 findShadowRoots = (fragment) => {\n processEventOrNode(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 broadcast = (infix, ev, type = ev.type) => {\n querySelectorAll("[on" + infix + "\\\\:" + type + "]").forEach((el) => {\n dispatch(el, infix, ev, type);\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, {\n detail\n});\nconst dispatch = async (element, scope, ev, eventName = ev.type) => {\n const attrName = "on" + scope + ":" + eventName;\n if (element.hasAttribute("preventdefault:" + eventName)) {\n ev.preventDefault();\n }\n if (element.hasAttribute("stoppropagation:" + eventName)) {\n ev.stopPropagation();\n }\n const ctx = element._qc_;\n const relevantListeners = ctx && ctx.li.filter((li) => li[0] === attrName);\n if (relevantListeners && relevantListeners.length > 0) {\n for (const listener of relevantListeners) {\n const results = listener[1].getFn([element, ev], () => element.isConnected)(ev, element);\n const cancelBubble = ev.cancelBubble;\n if (isPromise(results)) {\n await results;\n }\n if (cancelBubble) {\n ev.stopPropagation();\n }\n }\n return;\n }\n const attrValue = element.getAttribute(attrName);\n const qDispatchEvent = element.qDispatchEvent;\n if (qDispatchEvent) {\n return qDispatchEvent(ev, scope);\n }\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 qVersion = container.getAttribute("q:version") || "unknown";\n const qManifest = container.getAttribute("q:manifest-hash") || "dev";\n const base = new URL(qBase, doc.baseURI);\n for (const qrl of attrValue.split("\\n")) {\n const url = new URL(qrl, base);\n const href = url.href;\n const symbol = url.hash.replace(/^#?([^?[|]*).*$/, "$1") || "default";\n const reqTime = performance.now();\n let handler;\n let importError;\n let error;\n const isSync = qrl.startsWith("#");\n const eventData = {\n qBase,\n qManifest,\n qVersion,\n href,\n symbol,\n element,\n reqTime\n };\n if (isSync) {\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 emitEvent("qsymbol", eventData);\n const uri = url.href.split("#")[0];\n try {\n const module = import(\n uri\n );\n resolveContainer(container);\n handler = (await module)[symbol];\n if (!handler) {\n importError = "no-symbol";\n error = new Error(`${symbol} not in ${uri}`);\n }\n } catch (err) {\n importError || (importError = "async");\n error = err;\n }\n }\n if (!handler) {\n emitEvent("qerror", {\n