@qwik.dev/core 2.0.0-beta.43 → 2.0.0-beta.47
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/build.d.ts +1 -1
- package/dist/async-local-storage.d.ts +3 -0
- package/dist/async-local-storage.mjs +8 -0
- package/dist/async-local-storage.node.mjs +6 -0
- package/dist/backpatch/package.json +1 -1
- package/dist/build/package.json +1 -1
- package/dist/cli.mjs +26 -5
- package/dist/core-internal.d.ts +223 -162
- package/dist/core.min.mjs +10 -11
- package/dist/core.mjs +6268 -6181
- package/dist/core.mjs.map +1 -1
- package/dist/core.prod.mjs +5104 -5104
- package/dist/error-swap-executor.debug.js +2 -2
- package/dist/error-swap-executor.js +1 -1
- package/dist/insights.d.ts +2 -2
- package/dist/jsx-runtime/index.d.ts +1 -1
- package/dist/loader/index.mjs +2 -2
- package/dist/loader/package.json +1 -1
- package/dist/optimizer.d.ts +240 -11
- package/dist/optimizer.mjs +879 -656
- package/dist/out-of-order-executor.debug.js +2 -2
- package/dist/preloader.mjs +77 -69
- package/dist/qwikloader.debug.js +12 -10
- package/dist/qwikloader.js +1 -1
- package/dist/server-modules.d.ts +7 -7
- package/dist/server.d.ts +17 -17
- package/dist/server.mjs +99 -66
- package/dist/server.prod.mjs +485 -448
- package/dist/starters/adapters/bun/adapters/bun/vite.config.ts +0 -1
- package/dist/testing/index.d.ts +26 -30
- package/dist/testing/index.mjs +7560 -7335
- package/dist/testing/package.json +1 -1
- package/dist/ts-optimizer.mjs +10477 -0
- package/dist/worker/index.mjs +12 -10
- package/dist/worker/package.json +1 -1
- package/dist/worker/worker.shared.js +3 -3
- package/handlers.mjs +6 -6
- package/jsx-dev-runtime.d.ts +1 -1
- package/jsx-runtime.d.ts +1 -1
- package/loader.d.ts +1 -1
- package/optimizer.d.ts +1 -1
- package/package.json +22 -7
- package/public.d.ts +6 -6
- package/server.d.ts +1 -1
- package/testing.d.ts +1 -1
package/dist/server.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license
|
|
3
|
-
* @qwik.dev/core/server 2.0.0-beta.
|
|
3
|
+
* @qwik.dev/core/server 2.0.0-beta.47-dev+919c91b
|
|
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
|
|
@@ -191,12 +191,7 @@ See https://qwik.dev/docs/core/tasks/#use-method-rules`,
|
|
|
191
191
|
// 28
|
|
192
192
|
"",
|
|
193
193
|
// 29 (cleared: useComputed$ now supports async functions)
|
|
194
|
-
|
|
195
|
-
Qwik version {{0}} already imported while importing {{1}}.
|
|
196
|
-
This can lead to issues due to duplicated shared structures.
|
|
197
|
-
Verify that the Qwik libraries you're using are in "resolve.noExternal[]" and in "optimizeDeps.exclude".
|
|
198
|
-
===
|
|
199
|
-
`,
|
|
194
|
+
"===\nQwik version {{0}} already imported while importing {{1}}.\nDifferent Qwik versions or builds cannot share their runtime state on the server.\nMake sure every Qwik library resolves to the same @qwik.dev/core version and build.\n===\n",
|
|
200
195
|
// 30
|
|
201
196
|
"WrappedSignal is read-only",
|
|
202
197
|
// 31
|
|
@@ -206,14 +201,16 @@ Verify that the Qwik libraries you're using are in "resolve.noExternal[]" and in
|
|
|
206
201
|
// 33
|
|
207
202
|
"Serialization Error: Cannot serialize function: {{0}}",
|
|
208
203
|
// 34
|
|
209
|
-
"Cannot read .value of a clientOnly async signal during SSR.
|
|
204
|
+
"Cannot read .value of a clientOnly async signal during SSR. Provide an initial value.",
|
|
210
205
|
// 35
|
|
211
206
|
"Invalid element name for SSR {{0}}",
|
|
212
207
|
// 36
|
|
213
208
|
"Invalid serialized Promise dependency",
|
|
214
209
|
// 37
|
|
215
|
-
"Invalid serialized Uint8Array payload"
|
|
210
|
+
"Invalid serialized Uint8Array payload",
|
|
216
211
|
// 38
|
|
212
|
+
"Computed signal was disposed"
|
|
213
|
+
// 39
|
|
217
214
|
];
|
|
218
215
|
let text = MAP[code] ?? "";
|
|
219
216
|
if (parts.length) {
|
|
@@ -627,7 +624,7 @@ var OnRenderProp = "q:renderFn";
|
|
|
627
624
|
var QSlot = "q:slot";
|
|
628
625
|
var QSlotParent = "q:sparent";
|
|
629
626
|
var QStatePatchAttr = "q:patch";
|
|
630
|
-
var
|
|
627
|
+
var QPendingResolved = "q:r";
|
|
631
628
|
var QStyle = "q:style";
|
|
632
629
|
var QStyleSelector = "style[q\\:style]";
|
|
633
630
|
var QStyleSSelector = "style[q\\:sstyle]";
|
|
@@ -891,6 +888,19 @@ function isAriaAttribute(prop) {
|
|
|
891
888
|
return prop.startsWith("aria-");
|
|
892
889
|
}
|
|
893
890
|
|
|
891
|
+
// packages/qwik/src/core/shared/singletons.ts
|
|
892
|
+
import { isServer as isServer2 } from "@qwik.dev/core/build";
|
|
893
|
+
|
|
894
|
+
// packages/qwik/src/core/version.ts
|
|
895
|
+
var version = "2.0.0-beta.47-dev+919c91b";
|
|
896
|
+
|
|
897
|
+
// packages/qwik/src/core/shared/singletons.ts
|
|
898
|
+
var qwikGlobal = globalThis.__qwik__ ||= {};
|
|
899
|
+
var singletons = isServer2 ? qwikGlobal.singletons ||= /* @__PURE__ */ Object.create(null) : qwikGlobal[version] ||= /* @__PURE__ */ Object.create(null);
|
|
900
|
+
var getSingleton = (key) => {
|
|
901
|
+
return singletons[key];
|
|
902
|
+
};
|
|
903
|
+
|
|
894
904
|
// packages/qwik/src/core/preloader/bundle-graph.ts
|
|
895
905
|
var base;
|
|
896
906
|
var graph;
|
|
@@ -1002,8 +1012,8 @@ function createPlatform(opts, resolvedManifest) {
|
|
|
1002
1012
|
if (hash === SYNC_QRL) {
|
|
1003
1013
|
return [hash, ""];
|
|
1004
1014
|
}
|
|
1005
|
-
const
|
|
1006
|
-
if (
|
|
1015
|
+
const regSymbols = getSingleton("regSymbols");
|
|
1016
|
+
if (regSymbols?.has(hash)) {
|
|
1007
1017
|
return [symbolName, "_"];
|
|
1008
1018
|
}
|
|
1009
1019
|
console.error("Cannot resolve symbol", symbolName, "in", mapper, parent);
|
|
@@ -1015,7 +1025,7 @@ function createPlatform(opts, resolvedManifest) {
|
|
|
1015
1025
|
isServer: true,
|
|
1016
1026
|
async importSymbol(_containerEl, url, symbolName) {
|
|
1017
1027
|
const hash = getSymbolHash(symbolName);
|
|
1018
|
-
const regSym =
|
|
1028
|
+
const regSym = getSingleton("regSymbols")?.get(hash);
|
|
1019
1029
|
if (regSym) {
|
|
1020
1030
|
return regSym;
|
|
1021
1031
|
}
|
|
@@ -1142,13 +1152,8 @@ var simplifyPath = (base2, path) => {
|
|
|
1142
1152
|
}
|
|
1143
1153
|
return simplified.join("/");
|
|
1144
1154
|
};
|
|
1145
|
-
var getBase = (container) =>
|
|
1146
|
-
|
|
1147
|
-
if (import.meta.env?.DEV && !qTest) {
|
|
1148
|
-
base2 = import.meta.env?.BASE_URL;
|
|
1149
|
-
}
|
|
1150
|
-
return base2;
|
|
1151
|
-
};
|
|
1155
|
+
var getBase = (container) => container.$buildBase$;
|
|
1156
|
+
var afterPagePaint = (task) => `window.addEventListener('load',f=>{f=_=>${task};requestAnimationFrame(_=>requestAnimationFrame(_=>{typeof requestIdleCallback==='function'?requestIdleCallback(f,{timeout:1000}):requestAnimationFrame(_=>setTimeout(f))}))})`;
|
|
1152
1157
|
var preloaderPre = (container, options, nonce) => {
|
|
1153
1158
|
const { resolvedManifest } = container;
|
|
1154
1159
|
const base2 = getBase(container);
|
|
@@ -1185,7 +1190,9 @@ var preloaderPre = (container, options, nonce) => {
|
|
|
1185
1190
|
null
|
|
1186
1191
|
);
|
|
1187
1192
|
container.closeElement();
|
|
1188
|
-
const script =
|
|
1193
|
+
const script = afterPagePaint(
|
|
1194
|
+
`{let b=fetch("${bundleGraphPath}");import("${preloaderBundle}").then(({l})=>l(${JSON.stringify(base2)},b${optsStr}))}`
|
|
1195
|
+
);
|
|
1189
1196
|
const scriptAttrs = {
|
|
1190
1197
|
type: "module",
|
|
1191
1198
|
async: true,
|
|
@@ -1242,7 +1249,9 @@ var includePreloader = (container, options, referencedBundles, nonce) => {
|
|
|
1242
1249
|
) : "";
|
|
1243
1250
|
let script = insertLinks;
|
|
1244
1251
|
if (preloaderBundle) {
|
|
1245
|
-
script +=
|
|
1252
|
+
script += afterPagePaint(
|
|
1253
|
+
`import("${preloaderBundle}").then(({p})=>p(${JSON.stringify(referencedBundles)}))`
|
|
1254
|
+
);
|
|
1246
1255
|
}
|
|
1247
1256
|
if (script) {
|
|
1248
1257
|
const attrs = { type: "module", async: "true", "q:type": "preload" };
|
|
@@ -1280,19 +1289,19 @@ var getBundles = (qrls) => {
|
|
|
1280
1289
|
return [...new Set(bundles)];
|
|
1281
1290
|
};
|
|
1282
1291
|
var preLoaderOptionsDefault = {
|
|
1283
|
-
ssrPreloads:
|
|
1292
|
+
ssrPreloads: 0,
|
|
1284
1293
|
maxIdlePreloads: 25
|
|
1285
1294
|
};
|
|
1286
1295
|
|
|
1287
1296
|
// packages/qwik/src/server/scripts.ts
|
|
1288
|
-
var QWIK_LOADER_DEFAULT_MINIFIED = 'var e,t,n,r=document,o=window,s="w",i="wp",a="d",c="dp",l="e",p="ep",
|
|
1289
|
-
var QWIK_LOADER_DEFAULT_DEBUG = '//#region packages/qwik/src/qwikloader.ts\nvar doc = document;\nvar win = window;\nvar windowPrefix = "w";\nvar passiveWindowPrefix = "wp";\nvar documentPrefix = "d";\nvar passiveDocumentPrefix = "dp";\nvar elementPrefix = "e";\nvar passiveElementPrefix = "ep";\nvar capturePrefix = "capture:";\nvar readyStateChange = "readystatechange";\nvar QwikEvContainerReady = 0;\nvar events = /* @__PURE__ */ new Set();\nvar roots = /* @__PURE__ */ new Set([doc]);\nvar symbols = /* @__PURE__ */ new Map();\nvar readyContainers = {};\nvar observer;\nvar hasInitialized;\nvar queuedTasks;\nvar nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nvar querySelectorAll = (query) => {\n const elements = [];\n roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n return elements;\n};\nvar addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, {\n capture,\n passive\n});\nvar findShadowRoots = (fragment) => {\n addEventOrRoot(fragment);\n const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\\\:shadowroot]");\n for (let i = 0; i < shadowRoots.length; i++) {\n const shadowRoot = shadowRoots[i].shadowRoot;\n shadowRoot && findShadowRoots(shadowRoot);\n }\n};\nvar isPromise = (promise) => promise && typeof promise.then === "function";\nvar runTasks = async (tasks) => {\n for (let i = 0; i < tasks.length; i++) await tasks[i]();\n};\nvar queueTasks = (tasks) => {\n if (tasks.length) {\n const run = () => runTasks(tasks);\n queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();\n }\n};\nvar resolveContainer = (containerEl) => {\n if (containerEl._qwikjson_ === void 0) {\n let script = (containerEl === doc.documentElement ? doc.body : containerEl).lastElementChild;\n while (script) {\n if (script.tagName === "SCRIPT" && script.getAttribute("type") === "qwik/json") {\n containerEl._qwikjson_ = JSON.parse(script.textContent.replace(/\\\\x3C(\\/?script)/gi, "<$1"));\n break;\n }\n script = script.previousElementSibling;\n }\n }\n};\nvar markContainerReady = (hash) => {\n readyContainers[hash] = 1;\n emitEvent(readyStateChange);\n};\nvar waitForContainerReady = (container) => {\n const hash = container.getAttribute("q:instance");\n return container.getAttribute("q:container") === "paused" && doc.readyState === "loading" && !readyContainers[hash] && new Promise((resolve) => {\n const ready = () => {\n if (doc.readyState !== "loading" || readyContainers[hash]) resolve();\n };\n addEventListener(doc, readyStateChange, ready);\n });\n};\nvar createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nvar emitEvent = (eventName, detail) => {\n doc.dispatchEvent(createEvent(eventName, detail));\n};\nvar camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());\nvar kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nvar parseKebabEvent = (event) => {\n const separatorIndex = event.indexOf(":");\n return {\n scope: event.slice(0, separatorIndex),\n eventName: kebabToCamel(event.slice(separatorIndex + 1))\n };\n};\nvar isPassiveScope = (scope) => scope.length === 2;\nvar getRootScope = (scope) => scope.charAt(0);\nvar isElementNode = (node) => !!node && node.nodeType === 1;\nvar isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute("q-" + scopedKebabName));\nvar resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime, reportSyncError = true) => {\n const eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n if (!chunk) {\n const handler = (doc["qFuncs_" + container.getAttribute("q:instance")] || [])[+symbol];\n if (!handler && reportSyncError) {\n const error = /* @__PURE__ */ new Error("sym:" + symbol);\n emitEvent("qerror", {\n importError: "sync",\n error,\n ...eventData\n });\n console.error(error);\n }\n return handler;\n }\n const key = `${symbol}|${qBase}|${chunk}`;\n const handler = symbols.get(key);\n if (handler) return handler;\n const href = new URL(chunk, base).href;\n const module = import(\n href\n);\n resolveContainer(container);\n return module.then((module) => {\n const handler = module[symbol];\n if (!handler) {\n const error = /* @__PURE__ */ 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, handler);\n emitEvent("qsymbol", eventData);\n }\n return handler;\n }, (error) => {\n emitEvent("qerror", {\n importError: "async",\n error,\n ...eventData\n });\n console.error(error);\n });\n};\n/**\n* Dispatch an event by invoking QRL handlers. If there are multiple handlers, they are awaited in\n* order.\n*/\nvar dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {\n let defer = false;\n if (kebabName) {\n if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) ev.preventDefault();\n if (element.hasAttribute("stoppropagation:" + kebabName)) ev.stopPropagation();\n }\n const handlers = element._qDispatch?.[scopedKebabName];\n if (handlers) {\n if (typeof handlers === "function") {\n const run = () => handlers(ev, element);\n if (defer) tasks.push(async () => {\n const result = run();\n if (isPromise(result)) await result;\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) 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) tasks.push(async () => {\n const result = run();\n if (isPromise(result)) await result;\n });\n else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n return;\n }\n const attrValue = element.getAttribute("q-" + scopedKebabName);\n if (attrValue) {\n const container = element.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])");\n const qBase = container.getAttribute("q:base");\n const base = new URL(qBase, doc.baseURI);\n const qrls = attrValue.split("|");\n const waitForReady = waitForContainerReady(container);\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 = (handler) => {\n if (handler && element.isConnected) {\n const onError = (error) => {\n emitEvent("qerror", {\n error,\n qBase,\n symbol,\n element,\n reqTime\n });\n };\n try {\n const result = handler.call(capturedIds, ev, element);\n if (isPromise(result)) return result.catch(onError);\n } catch (error) {\n return onError(error);\n }\n }\n };\n const resolve = (reportSyncError = true) => resolveHandler(container, element, qBase, base, chunk, symbol, reqTime, reportSyncError);\n const handler = waitForReady ? void 0 : resolve();\n if (waitForReady) {\n defer = true;\n tasks.push(async () => {\n await waitForReady;\n await run(chunk ? await resolve() : await resolve(false) || await resolve());\n });\n } else if (isPromise(handler)) {\n defer = true;\n tasks.push(() => handler.then(run));\n } else if (defer) {\n defer = true;\n tasks.push(async () => {\n await run(handler || await resolve());\n });\n } else {\n const result = run(handler);\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n};\n/**\n* Event handler responsible for processing element events.\n*\n* If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding\n* `(${event.type})`. If found the event\'s URL is parsed and `import()`ed.\n*\n* @param ev - Browser event.\n*/\nvar 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) if (isElementNode(current)) {\n elements.push(current);\n captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));\n current = current.parentElement;\n } else current = current.parentElement;\n for (let i = elements.length - 1; i >= 0; i--) if (captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n if (ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n for (let i = 0; i < elements.length; i++) if (!captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n if (!ev.bubbles || ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n queueTasks(tasks);\n};\nvar processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);\nvar broadcast = (scope, ev, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + ":" + kebabName;\n const elements = querySelectorAll("[q-" + CSS.escape(scopedKebabName) + "]");\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};\n/**\n* Event handler responsible for processing browser events.\n*\n* If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding\n* `(${event.type})`. If found the event\'s URL is parsed and `import()`ed.\n*\n* @param ev - Browser event.\n*/\nvar processDocumentEvent = (ev) => {\n broadcast(documentPrefix, ev);\n};\nvar processPassiveDocumentEvent = (ev) => {\n broadcast(passiveDocumentPrefix, ev, false);\n};\nvar processWindowEvent = (ev) => {\n broadcast(windowPrefix, ev);\n};\nvar processPassiveWindowEvent = (ev) => {\n broadcast(passiveWindowPrefix, ev, false);\n};\n/**\n* Called when the document is ready and whenever a container is added, so make this idempotent. For\n* qidle and qinit we remove the attributes immediately, and for qvisible we add an attribute\n*/\nvar 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 (win.requestIdleCallback ?? win.setTimeout).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(entry.target, createEvent("qvisible", entry), "e:qvisible", tasks);\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};\nvar addEventOrRoot = (...eventNames) => {\n for (let i = 0; i < eventNames.length; i++) {\n const eventNameOrRoot = eventNames[i];\n if (eventNameOrRoot === QwikEvContainerReady) markContainerReady(eventNames[++i]);\n else 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) addEventListener(win, eventName, passive ? processPassiveWindowEvent : processWindowEvent, true, passive);\n else roots.forEach((root) => addEventListener(root, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive));\n if (hasInitialized === 1 && (eventNameOrRoot === "e:qvisible" || eventNameOrRoot === "d:qinit" || eventNameOrRoot === "d:qidle")) processReadyStateChange();\n }\n } else 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) addEventListener(eventNameOrRoot, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive);\n });\n roots.add(eventNameOrRoot);\n }\n }\n};\nvar _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n if (Array.isArray(_qwikEv)) addEventOrRoot(..._qwikEv);\n else addEventOrRoot("e:click", "e:input");\n win._qwikEv = {\n events,\n roots,\n push: addEventOrRoot\n };\n addEventListener(doc, readyStateChange, processReadyStateChange);\n processReadyStateChange();\n}\n//#endregion';
|
|
1297
|
+
var QWIK_LOADER_DEFAULT_MINIFIED = 'var e,t,n,r=document,o=window,s="w",i="wp",a="d",c="dp",l="e",p="ep",q="capture:",d="readystatechange",u=0,h=new Set,f=new Set([r]),b=new Map,g={},m=(e,t)=>Array.from(e.querySelectorAll(t)),y=e=>{const t=[];return f.forEach(n=>t.push(...m(n,e))),t},v=(e,t,n,r=!1,o=!1)=>e.addEventListener(t,n,{capture:r,passive:o}),w=e=>{K(e);const t=m(e,"[q\\\\:shadowroot]");for(let e=0;e<t.length;e++){const n=t[e].shadowRoot;n&&w(n)}},A=e=>e&&"function"==typeof e.then,E=async e=>{for(let t=0;t<e.length;t++)await e[t]()},S=e=>"q"===e.charAt(0),C=(e,t)=>{if(e.length){const r=()=>E(e);S(t)?r():n=n?n.then(r,r):r()}},_=e=>{if(void 0===e._qwikjson_){let t=(e===r.documentElement?r.body:e).lastElementChild;for(;t;){if("SCRIPT"===t.tagName&&"qwik/json"===t.getAttribute("type")){e._qwikjson_=JSON.parse(t.textContent.replace(/\\\\x3C(\\/?script)/gi,"<$1"));break}t=t.previousElementSibling}}},k=e=>{g[e]=1,N(d)},$=e=>{const t=e.getAttribute("q:instance");return"paused"===e.getAttribute("q:container")&&"loading"===r.readyState&&!g[t]&&new Promise(e=>{v(r,d,()=>{("loading"!==r.readyState||g[t])&&e()})})},I=(e,t)=>new CustomEvent(e,{detail:t}),N=(e,t)=>{r.dispatchEvent(I(e,t))},R=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),T=e=>e.replace(/-./g,e=>e[1].toUpperCase()),x=e=>{const t=e.indexOf(":");return{scope:e.slice(0,t),eventName:T(e.slice(t+1))}},B=e=>2===e.length,L=e=>e.charAt(0),U=e=>!!e&&1===e.nodeType,j=(e,t,n)=>e.hasAttribute(n)&&(!!e._qDispatch?.[t]||e.hasAttribute("q-"+t)),D=(e,t,n,o,s,i,a,c=!0)=>{const l={qBase:n,symbol:i,element:t,reqTime:a};if(!s){const t=(r["qFuncs_"+e.getAttribute("q:instance")]||[])[+i];if(!t&&c){const e=Error("sym:"+i);N("qerror",{importError:"sync",error:e,...l}),console.error(e)}return t}const p=`${i}|${n}|${s}`,q=b.get(p);if(q)return q;const d=new URL(s,o).href,u=import(d);return _(e),u.then(e=>{const t=e[i];if(t)b.set(p,t),N("qsymbol",l);else{const e=Error(`${i} not in ${d}`);N("qerror",{importError:"no-symbol",error:e,...l}),console.error(e)}return t},e=>{N("qerror",{importError:"async",error:e,...l}),console.error(e)})},O=(e,t,n,o,s,i=!0)=>{let a=!1;s&&(i&&e.hasAttribute("preventdefault:"+s)&&t.preventDefault(),e.hasAttribute("stoppropagation:"+s)&&t.stopPropagation());const c=e._qDispatch?.[n];if(c){if("function"==typeof c){const n=()=>c(t,e);if(a)o.push(async()=>{const e=n();A(e)&&await e});else{const e=n();A(e)&&(a=!0,o.push(()=>e))}}else if(c.length)for(let n=0;n<c.length;n++){const r=c[n];if(r){const n=()=>r(t,e);if(a)o.push(async()=>{const e=n();A(e)&&await e});else{const e=n();A(e)&&(a=!0,o.push(()=>e))}}}return}const l=e.getAttribute("q-"+n);if(l){const n=e.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])"),s=n.getAttribute("q:base"),i=new URL(s,r.baseURI),c=l.split("|"),p=$(n);for(let r=0;r<c.length;r++){const l=c[r],q=performance.now(),[d,u,h]=l.split("#"),f=n=>{if(n&&e.isConnected){const r=t=>{N("qerror",{error:t,qBase:s,symbol:u,element:e,reqTime:q})};try{const o=n.call(h,t,e);if(A(o))return o.catch(r)}catch(e){return r(e)}}},b=(t=!0)=>D(n,e,s,i,d,u,q,t),g=p?void 0:b();if(p)a=!0,o.push(async()=>{await p,await f(d?await b():await b(!1)||await b())});else if(A(g))a=!0,o.push(()=>g.then(f));else if(a)a=!0,o.push(async()=>{await f(g||await b())});else{const e=f(g);A(e)&&(a=!0,o.push(()=>e))}}}},P=(e,t=l,n=!0)=>{const r=R(e.type),o=t+":"+r,s=q+r,i=[],a=[],c=[];let p=e.target;for(;p;)U(p)?(i.push(p),a.push(j(p,o,s)),p=p.parentElement):p=p.parentElement;for(let t=i.length-1;t>=0;t--)if(a[t]&&(O(i[t],e,o,c,r,n),e.cancelBubble))return void C(c,e.type);for(let t=0;t<i.length;t++)if(!a[t]&&(O(i[t],e,o,c,r,n),!e.bubbles||e.cancelBubble))return void C(c,e.type);C(c,e.type)},F=e=>P(e,p,!1),J=(e,t,n=!0)=>{const r=R(t.type),o=e+":"+r,s=y("[q-"+CSS.escape(o)+"]"),i=[];for(let e=0;e<s.length;e++){const a=s[e];O(a,t,o,i,r,n)}C(i,t.type)},M=e=>{J(a,e)},Z=e=>{J(c,e,!1)},z=e=>{J(s,e)},G=e=>{J(i,e,!1)},H=()=>{const n=r.readyState;if("interactive"==n||"complete"==n){if(t=1,f.forEach(w),h.has("d:qinit")){h.delete("d:qinit");const e=I("qinit"),t=y("[q-d\\\\:qinit]"),n=[];for(let r=0;r<t.length;r++){const o=t[r];O(o,e,"d:qinit",n),o.removeAttribute("q-d:qinit")}C(n,"qinit")}if(h.has("d:qidle")&&(h.delete("d:qidle"),(o.requestIdleCallback??o.setTimeout).bind(o)(()=>{const e=I("qidle"),t=y("[q-d\\\\:qidle]"),n=[];for(let r=0;r<t.length;r++){const o=t[r];O(o,e,"d:qidle",n),o.removeAttribute("q-d:qidle")}C(n,"qidle")})),h.has("e:qvisible")){e||(e=new IntersectionObserver(t=>{const n=[];for(let r=0;r<t.length;r++){const o=t[r];o.isIntersecting&&(e.unobserve(o.target),O(o.target,I("qvisible",o),"e:qvisible",n))}C(n,"qvisible")}));const t=y("[q-e\\\\:qvisible]:not([q\\\\:observed])");for(let n=0;n<t.length;n++){const r=t[n];e.observe(r),r.setAttribute("q:observed","true")}}}},K=(...e)=>{for(let n=0;n<e.length;n++){const r=e[n];if(r===u)k(e[++n]);else if("string"==typeof r){if(!h.has(r)){h.add(r);const{scope:e,eventName:t}=x(r),n=B(e),i=L(e);i===s?v(o,t,n?G:z,!0,n):f.forEach(e=>v(e,t,i===a?n?Z:M:n?F:P,!0,n))}1!==t||"e:qvisible"!==r&&"d:qinit"!==r&&"d:qidle"!==r||H()}else f.has(r)||(h.forEach(e=>{const{scope:t,eventName:n}=x(e),o=B(t),i=L(t);i!==s&&v(r,n,i===a?o?Z:M:o?F:P,!0,o)}),f.add(r))}},Q=o._qwikEv;Q?.roots||(Array.isArray(Q)?K(...Q):K("e:click","e:input"),o._qwikEv={events:h,roots:f,push:K},v(r,d,H),H())';
|
|
1298
|
+
var QWIK_LOADER_DEFAULT_DEBUG = '//#region packages/qwik/src/qwikloader.ts\nvar doc = document;\nvar win = window;\nvar windowPrefix = "w";\nvar passiveWindowPrefix = "wp";\nvar documentPrefix = "d";\nvar passiveDocumentPrefix = "dp";\nvar elementPrefix = "e";\nvar passiveElementPrefix = "ep";\nvar capturePrefix = "capture:";\nvar readyStateChange = "readystatechange";\nvar QwikEvContainerReady = 0;\nvar events = /* @__PURE__ */ new Set();\nvar roots = /* @__PURE__ */ new Set([doc]);\nvar symbols = /* @__PURE__ */ new Map();\nvar readyContainers = {};\nvar observer;\nvar hasInitialized;\nvar queuedTasks;\nvar nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nvar querySelectorAll = (query) => {\n const elements = [];\n roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n return elements;\n};\nvar addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, {\n capture,\n passive\n});\nvar findShadowRoots = (fragment) => {\n addEventOrRoot(fragment);\n const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\\\:shadowroot]");\n for (let i = 0; i < shadowRoots.length; i++) {\n const shadowRoot = shadowRoots[i].shadowRoot;\n shadowRoot && findShadowRoots(shadowRoot);\n }\n};\nvar isPromise = (promise) => promise && typeof promise.then === "function";\nvar runTasks = async (tasks) => {\n for (let i = 0; i < tasks.length; i++) await tasks[i]();\n};\nvar isQwikLifecycleEvent = (eventName) => eventName.charAt(0) === "q";\nvar queueTasks = (tasks, eventName) => {\n if (tasks.length) {\n const run = () => runTasks(tasks);\n if (isQwikLifecycleEvent(eventName)) run();\n else queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();\n }\n};\nvar resolveContainer = (containerEl) => {\n if (containerEl._qwikjson_ === void 0) {\n let script = (containerEl === doc.documentElement ? doc.body : containerEl).lastElementChild;\n while (script) {\n if (script.tagName === "SCRIPT" && script.getAttribute("type") === "qwik/json") {\n containerEl._qwikjson_ = JSON.parse(script.textContent.replace(/\\\\x3C(\\/?script)/gi, "<$1"));\n break;\n }\n script = script.previousElementSibling;\n }\n }\n};\nvar markContainerReady = (hash) => {\n readyContainers[hash] = 1;\n emitEvent(readyStateChange);\n};\nvar waitForContainerReady = (container) => {\n const hash = container.getAttribute("q:instance");\n return container.getAttribute("q:container") === "paused" && doc.readyState === "loading" && !readyContainers[hash] && new Promise((resolve) => {\n const ready = () => {\n if (doc.readyState !== "loading" || readyContainers[hash]) resolve();\n };\n addEventListener(doc, readyStateChange, ready);\n });\n};\nvar createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nvar emitEvent = (eventName, detail) => {\n doc.dispatchEvent(createEvent(eventName, detail));\n};\nvar camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());\nvar kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nvar parseKebabEvent = (event) => {\n const separatorIndex = event.indexOf(":");\n return {\n scope: event.slice(0, separatorIndex),\n eventName: kebabToCamel(event.slice(separatorIndex + 1))\n };\n};\nvar isPassiveScope = (scope) => scope.length === 2;\nvar getRootScope = (scope) => scope.charAt(0);\nvar isElementNode = (node) => !!node && node.nodeType === 1;\nvar isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute("q-" + scopedKebabName));\nvar resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime, reportSyncError = true) => {\n const eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n if (!chunk) {\n const handler = (doc["qFuncs_" + container.getAttribute("q:instance")] || [])[+symbol];\n if (!handler && reportSyncError) {\n const error = /* @__PURE__ */ new Error("sym:" + symbol);\n emitEvent("qerror", {\n importError: "sync",\n error,\n ...eventData\n });\n console.error(error);\n }\n return handler;\n }\n const key = `${symbol}|${qBase}|${chunk}`;\n const handler = symbols.get(key);\n if (handler) return handler;\n const href = new URL(chunk, base).href;\n const module = import(\n href\n);\n resolveContainer(container);\n return module.then((module) => {\n const handler = module[symbol];\n if (!handler) {\n const error = /* @__PURE__ */ 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, handler);\n emitEvent("qsymbol", eventData);\n }\n return handler;\n }, (error) => {\n emitEvent("qerror", {\n importError: "async",\n error,\n ...eventData\n });\n console.error(error);\n });\n};\n/**\n* Dispatch an event by invoking QRL handlers. If there are multiple handlers, they are awaited in\n* order.\n*/\nvar dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {\n let defer = false;\n if (kebabName) {\n if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) ev.preventDefault();\n if (element.hasAttribute("stoppropagation:" + kebabName)) ev.stopPropagation();\n }\n const handlers = element._qDispatch?.[scopedKebabName];\n if (handlers) {\n if (typeof handlers === "function") {\n const run = () => handlers(ev, element);\n if (defer) tasks.push(async () => {\n const result = run();\n if (isPromise(result)) await result;\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) 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) tasks.push(async () => {\n const result = run();\n if (isPromise(result)) await result;\n });\n else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n return;\n }\n const attrValue = element.getAttribute("q-" + scopedKebabName);\n if (attrValue) {\n const container = element.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])");\n const qBase = container.getAttribute("q:base");\n const base = new URL(qBase, doc.baseURI);\n const qrls = attrValue.split("|");\n const waitForReady = waitForContainerReady(container);\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 = (handler) => {\n if (handler && element.isConnected) {\n const onError = (error) => {\n emitEvent("qerror", {\n error,\n qBase,\n symbol,\n element,\n reqTime\n });\n };\n try {\n const result = handler.call(capturedIds, ev, element);\n if (isPromise(result)) return result.catch(onError);\n } catch (error) {\n return onError(error);\n }\n }\n };\n const resolve = (reportSyncError = true) => resolveHandler(container, element, qBase, base, chunk, symbol, reqTime, reportSyncError);\n const handler = waitForReady ? void 0 : resolve();\n if (waitForReady) {\n defer = true;\n tasks.push(async () => {\n await waitForReady;\n await run(chunk ? await resolve() : await resolve(false) || await resolve());\n });\n } else if (isPromise(handler)) {\n defer = true;\n tasks.push(() => handler.then(run));\n } else if (defer) {\n defer = true;\n tasks.push(async () => {\n await run(handler || await resolve());\n });\n } else {\n const result = run(handler);\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n};\n/**\n* Event handler responsible for processing element events.\n*\n* If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding\n* `(${event.type})`. If found the event\'s URL is parsed and `import()`ed.\n*\n* @param ev - Browser event.\n*/\nvar 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) if (isElementNode(current)) {\n elements.push(current);\n captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));\n current = current.parentElement;\n } else current = current.parentElement;\n for (let i = elements.length - 1; i >= 0; i--) if (captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n if (ev.cancelBubble) {\n queueTasks(tasks, ev.type);\n return;\n }\n }\n for (let i = 0; i < elements.length; i++) if (!captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n if (!ev.bubbles || ev.cancelBubble) {\n queueTasks(tasks, ev.type);\n return;\n }\n }\n queueTasks(tasks, ev.type);\n};\nvar processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);\nvar broadcast = (scope, ev, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + ":" + kebabName;\n const elements = querySelectorAll("[q-" + CSS.escape(scopedKebabName) + "]");\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, ev.type);\n};\n/**\n* Event handler responsible for processing browser events.\n*\n* If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding\n* `(${event.type})`. If found the event\'s URL is parsed and `import()`ed.\n*\n* @param ev - Browser event.\n*/\nvar processDocumentEvent = (ev) => {\n broadcast(documentPrefix, ev);\n};\nvar processPassiveDocumentEvent = (ev) => {\n broadcast(passiveDocumentPrefix, ev, false);\n};\nvar processWindowEvent = (ev) => {\n broadcast(windowPrefix, ev);\n};\nvar processPassiveWindowEvent = (ev) => {\n broadcast(passiveWindowPrefix, ev, false);\n};\n/**\n* Called when the document is ready and whenever a container is added, so make this idempotent. For\n* qidle and qinit we remove the attributes immediately, and for qvisible we add an attribute\n*/\nvar 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, "qinit");\n }\n if (events.has("d:qidle")) {\n events.delete("d:qidle");\n (win.requestIdleCallback ?? win.setTimeout).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, "qidle");\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(entry.target, createEvent("qvisible", entry), "e:qvisible", tasks);\n }\n }\n queueTasks(tasks, "qvisible");\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};\nvar addEventOrRoot = (...eventNames) => {\n for (let i = 0; i < eventNames.length; i++) {\n const eventNameOrRoot = eventNames[i];\n if (eventNameOrRoot === QwikEvContainerReady) markContainerReady(eventNames[++i]);\n else 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) addEventListener(win, eventName, passive ? processPassiveWindowEvent : processWindowEvent, true, passive);\n else roots.forEach((root) => addEventListener(root, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive));\n }\n if (hasInitialized === 1 && (eventNameOrRoot === "e:qvisible" || eventNameOrRoot === "d:qinit" || eventNameOrRoot === "d:qidle")) processReadyStateChange();\n } else 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) addEventListener(eventNameOrRoot, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive);\n });\n roots.add(eventNameOrRoot);\n }\n }\n};\nvar _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n if (Array.isArray(_qwikEv)) addEventOrRoot(..._qwikEv);\n else addEventOrRoot("e:click", "e:input");\n win._qwikEv = {\n events,\n roots,\n push: addEventOrRoot\n };\n addEventListener(doc, readyStateChange, processReadyStateChange);\n processReadyStateChange();\n}\n//#endregion';
|
|
1290
1299
|
var QWIK_BACKPATCH_EXECUTOR_MINIFIED = `var t='script[type="qwik/backpatch"]';function e(e,n){const o=n||e.querySelector("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])");if(o){const n=o.querySelectorAll(t),r=n[n.length-1];if(r){const t=JSON.parse(r.textContent||"[]"),n=e.createTreeWalker(o,NodeFilter.SHOW_ELEMENT);let c=n.currentNode,i=c.hasAttribute(":")?0:-1;for(let e=0;e<t.length;e+=3){const o=t[e],r=t[e+1];let l=t[e+2];for(;i<o&&(c=n.nextNode(),c);)c.hasAttribute(":")&&i++;const a=c;null==l||!1===l?a.removeAttribute(r):("boolean"==typeof l&&(l=""),a.setAttribute(r,l))}}}}var n=document.currentScript;if(n){const t=n.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])");t&&e(document,t)}`;
|
|
1291
1300
|
var QWIK_BACKPATCH_EXECUTOR_DEBUG = '//#region packages/qwik/src/backpatch-executor-shared.ts\n/**\n* Shared backpatch executor logic that can be imported by both the inline script\n* (backpatch-executor.ts) and test utilities.\n*/\nvar BACKPATCH_DATA_SELECTOR = "script[type=\\"qwik/backpatch\\"]";\n/**\n* Execute backpatch operations on a document.\n*\n* @param doc - The document to execute backpatch on\n* @param containerElement - Optional specific container element (if not provided, will search for\n* it)\n*/\nfunction executeBackpatch(doc, containerElement) {\n const container = containerElement || doc.querySelector("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])");\n if (container) {\n const scripts = container.querySelectorAll(BACKPATCH_DATA_SELECTOR);\n const script = scripts[scripts.length - 1];\n if (script) {\n const data = JSON.parse(script.textContent || "[]");\n const walker = doc.createTreeWalker(container, NodeFilter.SHOW_ELEMENT);\n let currentNode = walker.currentNode;\n let currentNodeIdx = currentNode.hasAttribute(":") ? 0 : -1;\n for (let i = 0; i < data.length; i += 3) {\n const elementIdx = data[i];\n const attrName = data[i + 1];\n let value = data[i + 2];\n while (currentNodeIdx < elementIdx) {\n currentNode = walker.nextNode();\n if (!currentNode) break;\n if (currentNode.hasAttribute(":")) currentNodeIdx++;\n }\n const element = currentNode;\n if (value == null || value === false) element.removeAttribute(attrName);\n else {\n if (typeof value === "boolean") value = "";\n element.setAttribute(attrName, value);\n }\n }\n }\n }\n}\n//#endregion\n//#region packages/qwik/src/backpatch-executor.ts\n/**\n* Qwik Backpatch Executor\n*\n* This script executes the backpatch operations by finding the backpatch data script within the\n* same container and applying the patches to the DOM elements.\n*\n* This is the inline script version that auto-executes when loaded in the browser. The actual logic\n* is in backpatch-executor-shared.ts for reusability.\n*/\nvar executorScript = document.currentScript;\nif (executorScript) {\n const container = executorScript.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])");\n if (container) executeBackpatch(document, container);\n}\n//#endregion';
|
|
1292
1301
|
var QWIK_OUT_OF_ORDER_EXECUTOR_MINIFIED = `var t='template[q\\\\:r="',e="q:r",r='[q\\\\:rp="',n="q:g",l="q:i",o="q:o",i="[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])",u=u=>{const s=new WeakMap,c=()=>{const t=u.currentScript;return t&&t.closest(i)||u},f=(t,e,r,n)=>{let l=s.get(t);return l||s.set(t,l={}),l[e]||(l[e]={r:{},n:0,t:r,o:n})},a=(t,e)=>t?(e&&e.style&&(e.style.display="none"),t.style&&(t.style.display="contents"),1):0,q=t=>{const e=t.o;let r,n,l=0;if("p"===e)for(const e in t.r)r=t.r[e],r[0]&&a(r[0],r[1])&&(r[0]=0,l++);else if("s"===e)for(n=t.n;(r=t.r[n])&&r[0]&&a(r[0],r[1]);n++)r[0]=0,l++,t.n=n+1;else if("r"===e){if(t.t<0)return 0;for(t.n<0&&(t.n=t.t-1),n=t.n;(r=t.r[n])&&r[0]&&a(r[0],r[1]);n--)r[0]=0,l++,t.n=n-1}else{if(t.t<0)return 0;for(n=0;n<t.t;n++)if(r=t.r[n],!r)return 0;for(n=0;n<t.t;n++)r=t.r[n],r[0]&&a(r[0],r[1])&&(r[0]=0,l++)}return l},p=i=>{const s=c(),p=((r,n)=>{const l=u.currentScript,o=l?l.previousElementSibling:null;if(o&&"template"===o.localName&&o.getAttribute(e)===n+"")return o;const i=r.querySelectorAll(t+n+'"]');return i.length?i[i.length-1]:null})(s,i);if(!p)return;const g=((e,n,l)=>{if(!l)return null;const o=((t,e)=>t.querySelector(r+e+'"]'))(e,n),i=o?((e,r)=>e.querySelector(t+r+'"]'))(o,n):null,u=i?i.parentNode:null;return i&&o&&u?(u.insertBefore(l.content,i),i.remove(),l.remove(),[o,o.previousElementSibling]):null})(s,i,p);if(!g)return;((t,e)=>{var r;const n=u;null===(r=n.qProcessOOOS)||void 0===r||r.call(n,t,e)})(i,g[0]||null);const m=p.getAttribute(n);if(m){const t=+(p.getAttribute(l)||0),e=f(s,m,-1,p.getAttribute(o)||"p");return e.r[t]=g,void q(e)}a(g[0]||null,g[1])};p.g=(t,e,r)=>{const n=f(c(),t,e,r);n.t=e,n.o=r,"r"===n.o&&0===n.n&&(n.n=e-1),q(n)},p.d=u,globalThis.qO=p};u(document)`;
|
|
1293
|
-
var QWIK_OUT_OF_ORDER_EXECUTOR_DEBUG = '//#region packages/qwik/src/out-of-order-executor-shared.ts\n/** Shared out-of-order
|
|
1294
|
-
var QWIK_ERROR_SWAP_EXECUTOR_MINIFIED = `var t='[q\\\\:
|
|
1295
|
-
var QWIK_ERROR_SWAP_EXECUTOR_DEBUG = '//#region packages/qwik/src/error-swap-executor-shared.ts\nvar Q_ERROR_CONTENT_SELECTOR = "[q\\\\:
|
|
1302
|
+
var QWIK_OUT_OF_ORDER_EXECUTOR_DEBUG = '//#region packages/qwik/src/out-of-order-executor-shared.ts\n/** Shared out-of-order streaming executor logic for the inline script and source tests. */\nvar Q_RESOLVED_SELECTOR = "template[q\\\\:r=\\"";\nvar Q_RESOLVED_ATTR = "q:r";\nvar Q_RESULT_PARENT_SELECTOR = "[q\\\\:rp=\\"";\nvar Q_GROUP_ATTR = "q:g";\nvar Q_INDEX_ATTR = "q:i";\nvar Q_ORDER_ATTR = "q:o";\nvar Q_CONTAINER_SELECTOR = "[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])";\nvar installOutOfOrderExecutor = (doc) => {\n const groups = /* @__PURE__ */ new WeakMap();\n const process = (boundaryId, revealNode) => {\n var _executorDoc$qProcess;\n const executorDoc = doc;\n (_executorDoc$qProcess = executorDoc.qProcessOOOS) === null || _executorDoc$qProcess === void 0 || _executorDoc$qProcess.call(executorDoc, boundaryId, revealNode);\n };\n const getScope = () => {\n const script = doc.currentScript;\n return script ? script.closest(Q_CONTAINER_SELECTOR) || doc : doc;\n };\n const group = (scope, groupId, total, order) => {\n let scopedGroups = groups.get(scope);\n if (!scopedGroups) groups.set(scope, scopedGroups = {});\n return scopedGroups[groupId] || (scopedGroups[groupId] = {\n r: {},\n n: 0,\n t: total,\n o: order\n });\n };\n const getResolvedTemplate = (scope, boundaryId) => {\n const currentScript = doc.currentScript;\n const previousElement = currentScript ? currentScript.previousElementSibling : null;\n if (previousElement && previousElement.localName === "template" && previousElement.getAttribute(Q_RESOLVED_ATTR) === String(boundaryId)) return previousElement;\n const templates = scope.querySelectorAll(Q_RESOLVED_SELECTOR + boundaryId + "\\"]");\n return templates.length ? templates[templates.length - 1] : null;\n };\n const getPlaceholderTemplate = (revealHost, boundaryId) => {\n return revealHost.querySelector(Q_RESOLVED_SELECTOR + boundaryId + "\\"]");\n };\n const getResultParent = (scope, boundaryId) => {\n return scope.querySelector(Q_RESULT_PARENT_SELECTOR + boundaryId + "\\"]");\n };\n const reveal = (revealHost, hideHost) => {\n if (!revealHost) return 0;\n if (hideHost && hideHost.style) hideHost.style.display = "none";\n if (revealHost.style) revealHost.style.display = "contents";\n return 1;\n };\n const move = (scope, boundaryId, resolved) => {\n if (!resolved) return null;\n const revealHost = getResultParent(scope, boundaryId);\n const placeholder = revealHost ? getPlaceholderTemplate(revealHost, boundaryId) : null;\n const parent = placeholder ? placeholder.parentNode : null;\n if (!placeholder || !revealHost || !parent) return null;\n parent.insertBefore(resolved.content, placeholder);\n placeholder.remove();\n resolved.remove();\n return [revealHost, revealHost.previousElementSibling];\n };\n const flush = (group) => {\n const order = group.o;\n let entry;\n let index;\n let swapped = 0;\n if (order === "p") for (const key in group.r) {\n entry = group.r[key];\n if (entry[0] && reveal(entry[0], entry[1])) {\n entry[0] = 0;\n swapped++;\n }\n }\n else if (order === "s") for (index = group.n; (entry = group.r[index]) && entry[0]; index++) {\n if (!reveal(entry[0], entry[1])) break;\n entry[0] = 0;\n swapped++;\n group.n = index + 1;\n }\n else if (order === "r") {\n if (group.t < 0) return 0;\n if (group.n < 0) group.n = group.t - 1;\n for (index = group.n; (entry = group.r[index]) && entry[0]; index--) {\n if (!reveal(entry[0], entry[1])) break;\n entry[0] = 0;\n swapped++;\n group.n = index - 1;\n }\n } else {\n if (group.t < 0) return 0;\n for (index = 0; index < group.t; index++) {\n entry = group.r[index];\n if (!entry) return 0;\n }\n for (index = 0; index < group.t; index++) {\n entry = group.r[index];\n if (entry[0] && reveal(entry[0], entry[1])) {\n entry[0] = 0;\n swapped++;\n }\n }\n }\n return swapped;\n };\n const qO = ((boundaryId) => {\n const scope = getScope();\n const resolved = getResolvedTemplate(scope, boundaryId);\n if (!resolved) return;\n const entry = move(scope, boundaryId, resolved);\n if (!entry) return;\n process(boundaryId, entry[0] || null);\n const groupId = resolved.getAttribute(Q_GROUP_ATTR);\n if (groupId) {\n const index = +(resolved.getAttribute(Q_INDEX_ATTR) || 0);\n const currentGroup = group(scope, groupId, -1, resolved.getAttribute(Q_ORDER_ATTR) || "p");\n currentGroup.r[index] = entry;\n flush(currentGroup);\n return;\n }\n reveal(entry[0] || null, entry[1]);\n });\n qO.g = (groupId, total, order) => {\n const currentGroup = group(getScope(), groupId, total, order);\n currentGroup.t = total;\n currentGroup.o = order;\n if (currentGroup.o === "r" && currentGroup.n === 0) currentGroup.n = total - 1;\n flush(currentGroup);\n };\n qO.d = doc;\n globalThis.qO = qO;\n};\n//#endregion\n//#region packages/qwik/src/out-of-order-executor.ts\n/**\n* Qwik Out-of-Order Streaming Executor\n*\n* This is the inline script entry. The actual logic lives in out-of-order-executor-shared.ts so\n* source tests can install the same executor.\n*/\ninstallOutOfOrderExecutor(document);\n//#endregion';
|
|
1303
|
+
var QWIK_ERROR_SWAP_EXECUTOR_MINIFIED = `var t='[q\\\\:cc="',e='[q\\\\:cf="',n="[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])",o=t=>{const e=t.querySelectorAll("*");for(let t=0;t<e.length;t++){const n=e[t].attributes;for(let o=n.length-1;o>=0;o--){const l=n[o].name;0!==l.indexOf("q-d:")&&0!==l.indexOf("q-w:")||e[t].removeAttribute(l)}}},l=l=>{const r=r=>{var c;const s=(null===(c=l.currentScript)||void 0===c?void 0:c.closest(n))||l,i=s.querySelector(t+r+'"]'),q=s.querySelector(e+r+'"]');i&&i.style&&(i.style.display="none",o(i)),q&&q.style&&(q.style.display="contents")};r.d=l,globalThis.qErr=r};l(document)`;
|
|
1304
|
+
var QWIK_ERROR_SWAP_EXECUTOR_DEBUG = '//#region packages/qwik/src/error-swap-executor-shared.ts\nvar Q_ERROR_CONTENT_SELECTOR = "[q\\\\:cc=\\"";\nvar Q_ERROR_FALLBACK_SELECTOR = "[q\\\\:cf=\\"";\nvar Q_CONTAINER_SELECTOR = "[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])";\n/**\n* Qwikloader broadcasts document/window events to every matching element in the document, and\n* `display:none` still counts as connected, so a torn-down subtree keeps handling them.\n*/\nvar stripBroadcastHandlers = (content) => {\n const nodes = content.querySelectorAll("*");\n for (let i = 0; i < nodes.length; i++) {\n const attrs = nodes[i].attributes;\n for (let j = attrs.length - 1; j >= 0; j--) {\n const name = attrs[j].name;\n if (name.indexOf("q-d:") === 0 || name.indexOf("q-w:") === 0) nodes[i].removeAttribute(name);\n }\n }\n};\nvar installErrorSwapExecutor = (doc) => {\n const qErr = ((boundaryId) => {\n var _doc$currentScript;\n const scope = ((_doc$currentScript = doc.currentScript) === null || _doc$currentScript === void 0 ? void 0 : _doc$currentScript.closest(Q_CONTAINER_SELECTOR)) || doc;\n const content = scope.querySelector(Q_ERROR_CONTENT_SELECTOR + boundaryId + "\\"]");\n const fallback = scope.querySelector(Q_ERROR_FALLBACK_SELECTOR + boundaryId + "\\"]");\n if (content && content.style) {\n content.style.display = "none";\n stripBroadcastHandlers(content);\n }\n if (fallback && fallback.style) fallback.style.display = "contents";\n });\n qErr.d = doc;\n globalThis.qErr = qErr;\n};\n//#endregion\n//#region packages/qwik/src/error-swap-executor.ts\ninstallErrorSwapExecutor(document);\n//#endregion';
|
|
1296
1305
|
function getQwikLoaderScript(opts = {}) {
|
|
1297
1306
|
return opts.debug ? QWIK_LOADER_DEFAULT_DEBUG : QWIK_LOADER_DEFAULT_MINIFIED;
|
|
1298
1307
|
}
|
|
@@ -1305,7 +1314,7 @@ function getQwikBackpatchExecutorScript(opts = {}) {
|
|
|
1305
1314
|
return opts.debug ? QWIK_BACKPATCH_EXECUTOR_DEBUG : QWIK_BACKPATCH_EXECUTOR_MINIFIED;
|
|
1306
1315
|
}
|
|
1307
1316
|
function getQwikOutOfOrderExecutorScript(opts = {}) {
|
|
1308
|
-
if (!__EXPERIMENTAL__.
|
|
1317
|
+
if (!__EXPERIMENTAL__.pendingBoundary) {
|
|
1309
1318
|
return "";
|
|
1310
1319
|
}
|
|
1311
1320
|
const script = opts.debug ? QWIK_OUT_OF_ORDER_EXECUTOR_DEBUG : QWIK_OUT_OF_ORDER_EXECUTOR_MINIFIED;
|
|
@@ -1322,7 +1331,8 @@ function getQwikErrorSwapExecutorScript(opts = {}) {
|
|
|
1322
1331
|
import {
|
|
1323
1332
|
_isJSXNode as isJSXNode,
|
|
1324
1333
|
_EMPTY_OBJ,
|
|
1325
|
-
_EFFECT_BACK_REF
|
|
1334
|
+
_EFFECT_BACK_REF,
|
|
1335
|
+
_hasSlotProps
|
|
1326
1336
|
} from "@qwik.dev/core/internal";
|
|
1327
1337
|
import { isDev as isDev7 } from "@qwik.dev/core/build";
|
|
1328
1338
|
var SsrNode = class {
|
|
@@ -1392,6 +1402,9 @@ var SsrNode = class {
|
|
|
1392
1402
|
return this.attrs[name] ?? null;
|
|
1393
1403
|
}
|
|
1394
1404
|
}
|
|
1405
|
+
hasSlotProps() {
|
|
1406
|
+
return _hasSlotProps(this.attrs);
|
|
1407
|
+
}
|
|
1395
1408
|
removeProp(name) {
|
|
1396
1409
|
if (name.startsWith(NON_SERIALIZABLE_MARKER_PREFIX)) {
|
|
1397
1410
|
if (this.localProps) {
|
|
@@ -1922,7 +1935,7 @@ function getBuildBase(opts) {
|
|
|
1922
1935
|
return `${import.meta.env?.BASE_URL || "/"}build/`;
|
|
1923
1936
|
}
|
|
1924
1937
|
var versions = {
|
|
1925
|
-
qwik: "2.0.0-beta.
|
|
1938
|
+
qwik: "2.0.0-beta.47-dev+919c91b",
|
|
1926
1939
|
qwikDom: "2.1.19"
|
|
1927
1940
|
};
|
|
1928
1941
|
|
|
@@ -1961,11 +1974,25 @@ function vNodeData_openElement(vNodeData) {
|
|
|
1961
1974
|
vNodeData.push({}, WRITE_ELEMENT_ATTRS);
|
|
1962
1975
|
vNodeData[0] |= 4 /* ELEMENT_NODE */;
|
|
1963
1976
|
}
|
|
1977
|
+
var vnodeDataCursors = /* @__PURE__ */ new WeakMap();
|
|
1964
1978
|
function vNodeData_createSsrNodeReference(currentComponentNode, vNodeData, depthFirstElementIdx, cleanupQueue, currentFile) {
|
|
1965
1979
|
vNodeData[0] |= 8 /* REFERENCE */;
|
|
1966
|
-
const
|
|
1967
|
-
|
|
1968
|
-
|
|
1980
|
+
const shouldTrack = vNodeData.length >= 16;
|
|
1981
|
+
const cursor = shouldTrack ? vnodeDataCursors.get(vNodeData) : void 0;
|
|
1982
|
+
const saved = cursor && cursor.firstEntry === vNodeData[1] ? cursor : void 0;
|
|
1983
|
+
const stack = saved ? saved.stack.slice() : [-1];
|
|
1984
|
+
let attributesIndex = saved ? saved.attributesIndex : -1;
|
|
1985
|
+
let hasSavedCursor = false;
|
|
1986
|
+
for (let i = saved ? saved.index : 1; i < vNodeData.length; i++) {
|
|
1987
|
+
if (shouldTrack && i === vNodeData.length - 1) {
|
|
1988
|
+
vnodeDataCursors.set(vNodeData, {
|
|
1989
|
+
index: i,
|
|
1990
|
+
stack: stack.slice(),
|
|
1991
|
+
attributesIndex,
|
|
1992
|
+
firstEntry: vNodeData[1]
|
|
1993
|
+
});
|
|
1994
|
+
hasSavedCursor = true;
|
|
1995
|
+
}
|
|
1969
1996
|
const value = vNodeData[i];
|
|
1970
1997
|
if (typeof value === "object" && value !== null) {
|
|
1971
1998
|
attributesIndex = i;
|
|
@@ -1983,6 +2010,14 @@ function vNodeData_createSsrNodeReference(currentComponentNode, vNodeData, depth
|
|
|
1983
2010
|
stack[stack.length - 1]++;
|
|
1984
2011
|
}
|
|
1985
2012
|
}
|
|
2013
|
+
if (shouldTrack && !hasSavedCursor) {
|
|
2014
|
+
vnodeDataCursors.set(vNodeData, {
|
|
2015
|
+
index: vNodeData.length,
|
|
2016
|
+
stack: stack.slice(),
|
|
2017
|
+
attributesIndex,
|
|
2018
|
+
firstEntry: vNodeData[1]
|
|
2019
|
+
});
|
|
2020
|
+
}
|
|
1986
2021
|
let refId = String(depthFirstElementIdx);
|
|
1987
2022
|
if (vNodeData[0] & (2 /* VIRTUAL_NODE */ | 1 /* TEXT_DATA */)) {
|
|
1988
2023
|
for (let i = 0; i < stack.length; i++) {
|
|
@@ -2167,10 +2202,10 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2167
2202
|
this.renderOptions = opts.renderOptions;
|
|
2168
2203
|
this.$transformError$ = opts.renderOptions.transformError;
|
|
2169
2204
|
const outOfOrderStreaming = this.renderOptions.streaming?.outOfOrder === true;
|
|
2170
|
-
if (!__EXPERIMENTAL__.
|
|
2205
|
+
if (!__EXPERIMENTAL__.pendingBoundary) {
|
|
2171
2206
|
if (outOfOrderStreaming) {
|
|
2172
2207
|
throw new Error(
|
|
2173
|
-
'Out-of-order
|
|
2208
|
+
'Out-of-order streaming requires `experimental: ["pendingBoundary"]` in the `qwikVite` plugin.'
|
|
2174
2209
|
);
|
|
2175
2210
|
}
|
|
2176
2211
|
this.outOfOrderStreaming = false;
|
|
@@ -2219,7 +2254,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2219
2254
|
}
|
|
2220
2255
|
/** Queue OOOS serialization/write work that must not overlap with root state serialization. */
|
|
2221
2256
|
$runQueuedRender$(render) {
|
|
2222
|
-
if (!__EXPERIMENTAL__.
|
|
2257
|
+
if (!__EXPERIMENTAL__.pendingBoundary || !this.outOfOrderStreaming) {
|
|
2223
2258
|
return render();
|
|
2224
2259
|
}
|
|
2225
2260
|
if (this.$containerState$ === 0 /* NotReady */) {
|
|
@@ -2231,7 +2266,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2231
2266
|
return result;
|
|
2232
2267
|
}
|
|
2233
2268
|
$waitForRootContainerReady$() {
|
|
2234
|
-
if (!__EXPERIMENTAL__.
|
|
2269
|
+
if (!__EXPERIMENTAL__.pendingBoundary || !this.outOfOrderStreaming || this.$isReadyForOOOS$()) {
|
|
2235
2270
|
return;
|
|
2236
2271
|
}
|
|
2237
2272
|
return this.rootContainerReadyPromise ||= new Promise((resolve) => {
|
|
@@ -2239,7 +2274,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2239
2274
|
});
|
|
2240
2275
|
}
|
|
2241
2276
|
$markRootContainerReady$() {
|
|
2242
|
-
if (!__EXPERIMENTAL__.
|
|
2277
|
+
if (!__EXPERIMENTAL__.pendingBoundary || !this.outOfOrderStreaming || this.$isReadyForOOOS$()) {
|
|
2243
2278
|
return;
|
|
2244
2279
|
}
|
|
2245
2280
|
this.rootContainerSerializedRootCount = this.serializationCtx.$roots$.length;
|
|
@@ -2249,8 +2284,8 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2249
2284
|
this.rootContainerReadyPromise = null;
|
|
2250
2285
|
}
|
|
2251
2286
|
nextOutOfOrderId(markUsed = true) {
|
|
2252
|
-
const ooosActive = __EXPERIMENTAL__.
|
|
2253
|
-
if (!ooosActive && !__EXPERIMENTAL__.
|
|
2287
|
+
const ooosActive = __EXPERIMENTAL__.pendingBoundary && this.outOfOrderStreaming;
|
|
2288
|
+
if (!ooosActive && !__EXPERIMENTAL__.catchBoundary) {
|
|
2254
2289
|
return 0;
|
|
2255
2290
|
}
|
|
2256
2291
|
if (markUsed && ooosActive) {
|
|
@@ -2259,21 +2294,19 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2259
2294
|
return ++this.outOfOrderId;
|
|
2260
2295
|
}
|
|
2261
2296
|
emitOutOfOrderSegmentScripts(scripts) {
|
|
2262
|
-
if (!__EXPERIMENTAL__.
|
|
2297
|
+
if (!__EXPERIMENTAL__.pendingBoundary || !this.outOfOrderStreaming || !scripts) {
|
|
2263
2298
|
return;
|
|
2264
2299
|
}
|
|
2265
2300
|
this.write(scripts);
|
|
2266
2301
|
}
|
|
2267
2302
|
async segment(segmentId, jsx, options) {
|
|
2268
|
-
if (!__EXPERIMENTAL__.
|
|
2303
|
+
if (!__EXPERIMENTAL__.pendingBoundary) {
|
|
2269
2304
|
throw new Error(
|
|
2270
|
-
'Out-of-order
|
|
2305
|
+
'Out-of-order streaming requires `experimental: ["pendingBoundary"]` in the `qwikVite` plugin.'
|
|
2271
2306
|
);
|
|
2272
2307
|
}
|
|
2273
2308
|
if (!this.outOfOrderStreaming) {
|
|
2274
|
-
throw new Error(
|
|
2275
|
-
"Out-of-order Suspense streaming requires `streaming.outOfOrder` to be `true`."
|
|
2276
|
-
);
|
|
2309
|
+
throw new Error("Out-of-order streaming requires `streaming.outOfOrder` to be `true`.");
|
|
2277
2310
|
}
|
|
2278
2311
|
this.outOfOrderUsed = true;
|
|
2279
2312
|
this.markVNodeRefForSerialization(options.parentComponentFrame?.componentNode);
|
|
@@ -2310,7 +2343,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2310
2343
|
parent: null,
|
|
2311
2344
|
elementName: "#segment",
|
|
2312
2345
|
depthFirstElementIdx: -1,
|
|
2313
|
-
// OOOS inserts this synthetic root under the
|
|
2346
|
+
// OOOS inserts this synthetic root under the Pending content host on the client.
|
|
2314
2347
|
vNodeData: [16 /* SERIALIZE */],
|
|
2315
2348
|
currentFile: null,
|
|
2316
2349
|
refBase: contentHostNode.id
|
|
@@ -2349,7 +2382,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2349
2382
|
return segmentContainer;
|
|
2350
2383
|
}
|
|
2351
2384
|
queueOutOfOrderSegment(segment) {
|
|
2352
|
-
if (!__EXPERIMENTAL__.
|
|
2385
|
+
if (!__EXPERIMENTAL__.pendingBoundary || !this.outOfOrderStreaming) {
|
|
2353
2386
|
return;
|
|
2354
2387
|
}
|
|
2355
2388
|
this.outOfOrderPendingSegments.push(segment);
|
|
@@ -2729,7 +2762,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2729
2762
|
////////////////////////////////////
|
|
2730
2763
|
emitContainerData() {
|
|
2731
2764
|
const isStreamingDisabled = this.renderOptions.streaming?.inOrder?.strategy === "disabled";
|
|
2732
|
-
const shouldFlushShell = !isStreamingDisabled || __EXPERIMENTAL__.
|
|
2765
|
+
const shouldFlushShell = !isStreamingDisabled || __EXPERIMENTAL__.pendingBoundary && this.outOfOrderStreaming && this.outOfOrderUsed;
|
|
2733
2766
|
return maybeThen(
|
|
2734
2767
|
maybeThen(
|
|
2735
2768
|
shouldFlushShell ? this.streamHandler.flush() : void 0,
|
|
@@ -2756,7 +2789,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2756
2789
|
this.emitQwikLoaderAtBottomIfNeeded();
|
|
2757
2790
|
}
|
|
2758
2791
|
emitDelayedOutOfOrderSegmentVNodeData() {
|
|
2759
|
-
if (!__EXPERIMENTAL__.
|
|
2792
|
+
if (!__EXPERIMENTAL__.pendingBoundary || !this.outOfOrderStreaming || !this.outOfOrderUsed) {
|
|
2760
2793
|
return;
|
|
2761
2794
|
}
|
|
2762
2795
|
for (let i = 0; i < this.outOfOrderSegments.length; i++) {
|
|
@@ -2768,7 +2801,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2768
2801
|
}
|
|
2769
2802
|
}
|
|
2770
2803
|
emitOutOfOrderSegmentsAndData() {
|
|
2771
|
-
if (!__EXPERIMENTAL__.
|
|
2804
|
+
if (!__EXPERIMENTAL__.pendingBoundary || !this.outOfOrderStreaming || !this.outOfOrderUsed) {
|
|
2772
2805
|
return;
|
|
2773
2806
|
}
|
|
2774
2807
|
this.emitOutOfOrderExecutorIfNeeded();
|
|
@@ -2806,8 +2839,8 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2806
2839
|
}
|
|
2807
2840
|
emitVNodeDataScript(segmentId, entries, patch = false) {
|
|
2808
2841
|
const attrs = { type: "qwik/vnode" };
|
|
2809
|
-
if (__EXPERIMENTAL__.
|
|
2810
|
-
attrs[
|
|
2842
|
+
if (__EXPERIMENTAL__.pendingBoundary && this.outOfOrderStreaming && segmentId) {
|
|
2843
|
+
attrs[QPendingResolved] = segmentId;
|
|
2811
2844
|
}
|
|
2812
2845
|
if (patch) {
|
|
2813
2846
|
attrs[QStatePatchAttr] = true;
|
|
@@ -2885,7 +2918,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2885
2918
|
}
|
|
2886
2919
|
}
|
|
2887
2920
|
markVNodeDataOwnerEmitted(segmentId) {
|
|
2888
|
-
if (!__EXPERIMENTAL__.
|
|
2921
|
+
if (!__EXPERIMENTAL__.pendingBoundary || !this.outOfOrderStreaming) {
|
|
2889
2922
|
return;
|
|
2890
2923
|
}
|
|
2891
2924
|
(this.emittedVNodeDataOwners ||= /* @__PURE__ */ new Set()).add(segmentId);
|
|
@@ -3079,7 +3112,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3079
3112
|
this.writeScript(scriptAttrs, backpatchScript);
|
|
3080
3113
|
}
|
|
3081
3114
|
emitOutOfOrderExecutorIfNeeded() {
|
|
3082
|
-
if (!__EXPERIMENTAL__.
|
|
3115
|
+
if (!__EXPERIMENTAL__.pendingBoundary || !this.outOfOrderStreaming || !this.outOfOrderUsed || this.isOutOfOrderExecutorEmitted) {
|
|
3083
3116
|
return;
|
|
3084
3117
|
}
|
|
3085
3118
|
this.isOutOfOrderExecutorEmitted = true;
|
|
@@ -3089,7 +3122,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3089
3122
|
);
|
|
3090
3123
|
}
|
|
3091
3124
|
emitErrorSwapExecutorIfNeeded() {
|
|
3092
|
-
if (!__EXPERIMENTAL__.
|
|
3125
|
+
if (!__EXPERIMENTAL__.catchBoundary || this.isErrorSwapExecutorEmitted) {
|
|
3093
3126
|
return;
|
|
3094
3127
|
}
|
|
3095
3128
|
this.isErrorSwapExecutorEmitted = true;
|
|
@@ -3126,7 +3159,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3126
3159
|
}
|
|
3127
3160
|
}
|
|
3128
3161
|
isStatic() {
|
|
3129
|
-
return !(__EXPERIMENTAL__.
|
|
3162
|
+
return !(__EXPERIMENTAL__.pendingBoundary && this.outOfOrderStreaming && this.outOfOrderUsed) && this.serializationCtx.$eventQrls$.size === 0;
|
|
3130
3163
|
}
|
|
3131
3164
|
emitQwikLoaderAtTopIfNeeded() {
|
|
3132
3165
|
if (this.qlInclude === 0 /* Module */) {
|
|
@@ -3535,12 +3568,12 @@ var SSRSegmentContainer = class extends SSRContainer {
|
|
|
3535
3568
|
this.serializationCtx.$onAddRoot$ = void 0;
|
|
3536
3569
|
}
|
|
3537
3570
|
}
|
|
3538
|
-
markVNodeDataForSerialization(node, flags = 16 /* SERIALIZE
|
|
3571
|
+
markVNodeDataForSerialization(node, flags = 16 /* SERIALIZE */, isStateRoot = false) {
|
|
3539
3572
|
const previousFlags = node.vnodeData[0];
|
|
3540
3573
|
const nextFlags = previousFlags | flags;
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
this.queueLateVNodeDataPatch(node, nextFlags & ~previousFlags);
|
|
3574
|
+
node.vnodeData[0] = nextFlags;
|
|
3575
|
+
if (isStateRoot || nextFlags !== previousFlags) {
|
|
3576
|
+
this.queueLateVNodeDataPatch(node, isStateRoot ? nextFlags : nextFlags & ~previousFlags);
|
|
3544
3577
|
}
|
|
3545
3578
|
}
|
|
3546
3579
|
queueLateVNodeDataPatch(node, addedFlags) {
|
|
@@ -3686,7 +3719,7 @@ var SSRSegmentContainer = class extends SSRContainer {
|
|
|
3686
3719
|
const attrs = this.stateScriptAttrs();
|
|
3687
3720
|
attrs[QStatePatchAttr] = true;
|
|
3688
3721
|
if (segmentId) {
|
|
3689
|
-
attrs[
|
|
3722
|
+
attrs[QPendingResolved] = segmentId;
|
|
3690
3723
|
}
|
|
3691
3724
|
return attrs;
|
|
3692
3725
|
}
|
|
@@ -3891,7 +3924,7 @@ var renderToString = async (jsx, opts = {}) => {
|
|
|
3891
3924
|
};
|
|
3892
3925
|
};
|
|
3893
3926
|
var renderToStream = async (jsx, opts) => {
|
|
3894
|
-
if (__EXPERIMENTAL__.
|
|
3927
|
+
if (__EXPERIMENTAL__.pendingBoundary && opts.streaming?.outOfOrder === void 0) {
|
|
3895
3928
|
opts = {
|
|
3896
3929
|
...opts,
|
|
3897
3930
|
streaming: {
|
|
@@ -3922,7 +3955,7 @@ var renderToStream = async (jsx, opts) => {
|
|
|
3922
3955
|
});
|
|
3923
3956
|
const onBeforeFirstFlush = opts.onBeforeFirstFlush;
|
|
3924
3957
|
if (onBeforeFirstFlush) {
|
|
3925
|
-
streamHandler.onFirstWrite = () => onBeforeFirstFlush({
|
|
3958
|
+
streamHandler.onFirstWrite = () => onBeforeFirstFlush({ hasCaughtError: ssrContainer.$hasBoundaryError$ === true });
|
|
3926
3959
|
}
|
|
3927
3960
|
await setServerPlatform(opts, resolvedManifest);
|
|
3928
3961
|
await ssrContainer.render(jsx);
|
|
@@ -3934,7 +3967,7 @@ var renderToStream = async (jsx, opts) => {
|
|
|
3934
3967
|
size: ssrContainer.size,
|
|
3935
3968
|
isStatic: false,
|
|
3936
3969
|
timing,
|
|
3937
|
-
|
|
3970
|
+
hasCaughtError: ssrContainer.$hasBoundaryError$ === true
|
|
3938
3971
|
};
|
|
3939
3972
|
return result;
|
|
3940
3973
|
};
|