@qwik.dev/core 2.0.0-beta.41 → 2.0.0-beta.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backpatch/package.json +1 -1
- package/dist/build/package.json +1 -1
- package/dist/cli.mjs +2 -2
- package/dist/core-internal.d.ts +85 -16
- package/dist/core.min.mjs +11 -9
- package/dist/core.mjs +695 -89
- package/dist/core.mjs.map +1 -1
- package/dist/core.prod.mjs +3863 -3310
- package/dist/error-swap-executor.debug.js +37 -0
- package/dist/error-swap-executor.js +1 -0
- package/dist/loader/index.mjs +2 -2
- package/dist/loader/package.json +1 -1
- package/dist/optimizer.d.ts +2 -0
- package/dist/optimizer.mjs +5 -3
- package/dist/out-of-order-executor.debug.js +12 -12
- package/dist/qwikloader.debug.js +1 -1
- package/dist/qwikloader.js +1 -1
- package/dist/server.d.ts +27 -0
- package/dist/server.mjs +100 -40
- package/dist/server.prod.mjs +849 -781
- package/dist/testing/index.d.ts +11 -2
- package/dist/testing/index.mjs +6565 -6295
- package/dist/testing/package.json +1 -1
- package/dist/worker/package.json +1 -1
- package/handlers.mjs +3 -0
- package/package.json +2 -2
- package/public.d.ts +3 -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.42-dev+3473a49
|
|
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
|
|
@@ -674,14 +674,21 @@ var dangerouslySetInnerHTML = "dangerouslySetInnerHTML";
|
|
|
674
674
|
import { isDev as isDev5, isServer } from "@qwik.dev/core/build";
|
|
675
675
|
var MAX_RETRY_ON_PROMISE_COUNT = 100;
|
|
676
676
|
var isPromise = (value) => {
|
|
677
|
-
|
|
677
|
+
try {
|
|
678
|
+
return !!value && typeof value == "object" && typeof value.then === "function";
|
|
679
|
+
} catch {
|
|
680
|
+
return false;
|
|
681
|
+
}
|
|
678
682
|
};
|
|
679
683
|
var maybeThen = (valueOrPromise, thenFn) => {
|
|
680
684
|
return isPromise(valueOrPromise) ? valueOrPromise.then(thenFn) : thenFn(valueOrPromise);
|
|
681
685
|
};
|
|
682
686
|
var checkError = (e) => {
|
|
683
|
-
|
|
684
|
-
|
|
687
|
+
try {
|
|
688
|
+
if (isServer && e instanceof ReferenceError && e.message.includes("window")) {
|
|
689
|
+
e.message = 'It seems like you forgot to add "if (isBrowser) {...}" here:' + e.message;
|
|
690
|
+
}
|
|
691
|
+
} catch {
|
|
685
692
|
}
|
|
686
693
|
};
|
|
687
694
|
var justThrow = (e) => {
|
|
@@ -1049,6 +1056,7 @@ import {
|
|
|
1049
1056
|
_res,
|
|
1050
1057
|
_setEvent,
|
|
1051
1058
|
_walkJSX,
|
|
1059
|
+
_handleSSRError,
|
|
1052
1060
|
_createQRL as createQRL,
|
|
1053
1061
|
isSignal
|
|
1054
1062
|
} from "@qwik.dev/core/internal";
|
|
@@ -1277,12 +1285,14 @@ var preLoaderOptionsDefault = {
|
|
|
1277
1285
|
};
|
|
1278
1286
|
|
|
1279
1287
|
// packages/qwik/src/server/scripts.ts
|
|
1280
|
-
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",u="capture:",d="readystatechange",f=0,h=new Set,q=new Set([r]),b=new Map,g={},m=(e,t)=>Array.from(e.querySelectorAll(t)),v=e=>{const t=[];return q.forEach(n=>t.push(...m(n,e))),t},w=(e,t,n,r=!1,o=!1)=>e.addEventListener(t,n,{capture:r,passive:o}),y=e=>{H(e);const t=m(e,"[q\\\\:shadowroot]");for(let e=0;e<t.length;e++){const n=t[e].shadowRoot;n&&y(n)}},A=e=>e&&"function"==typeof e.then,E=async e=>{for(let t=0;t<e.length;t++)await e[t]()},S=e=>{if(e.length){const t=()=>E(e);n=n?n.then(t,t):t()}},C=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}}},_=e=>{g[e]=1,I(d)},k=e=>{const t=e.getAttribute("q:instance");return"paused"===e.getAttribute("q:container")&&"loading"===r.readyState&&!g[t]&&new Promise(e=>{w(r,d,()=>{("loading"!==r.readyState||g[t])&&e()})})},$=(e,t)=>new CustomEvent(e,{detail:t}),I=(e,t)=>{r.dispatchEvent($(e,t))},N=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),R=e=>e.replace(/-./g,e=>e[1].toUpperCase()),T=e=>{const t=e.indexOf(":");return{scope:e.slice(0,t),eventName:R(e.slice(t+1))}},x=e=>2===e.length,B=e=>e.charAt(0),L=e=>!!e&&1===e.nodeType,U=(e,t,n)=>e.hasAttribute(n)&&(!!e._qDispatch?.[t]||e.hasAttribute("q-"+t)),j=(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);I("qerror",{importError:"sync",error:e,...l}),console.error(e)}return t}const p=`${i}|${n}|${s}`,u=b.get(p);if(u)return u;const d=new URL(s,o).href,f=import(d);return C(e),f.then(e=>{const t=e[i];if(t)b.set(p,t),I("qsymbol",l);else{const e=Error(`${i} not in ${d}`);I("qerror",{importError:"no-symbol",error:e,...l}),console.error(e)}return t},e=>{I("qerror",{importError:"async",error:e,...l}),console.error(e)})},D=(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=k(n);for(let r=0;r<c.length;r++){const l=c[r],u=performance.now(),[d,f,h]=l.split("#"),q=n=>{if(n&&e.isConnected){const r=t=>{I("qerror",{error:t,qBase:s,symbol:f,element:e,reqTime:u})};try{const o=n.call(h,t,e);if(A(o))return o.catch(r)}catch(e){return r(e)}}},b=(t=!0)=>j(n,e,s,i,d,f,u,t),g=p?void 0:b();if(p)a=!0,o.push(async()=>{await p,await q(await b(!1)||await b())});else if(A(g))a=!0,o.push(()=>g.then(q));else if(a)a=!0,o.push(async()=>{await q(g||await b())});else{const e=q(g);A(e)&&(a=!0,o.push(()=>e))}}}},O=(e,t=l,n=!0)=>{const r=N(e.type),o=t+":"+r,s=u+r,i=[],a=[],c=[];let p=e.target;for(;p;)L(p)?(i.push(p),a.push(U(p,o,s)),p=p.parentElement):p=p.parentElement;for(let t=i.length-1;t>=0;t--)if(a[t]&&(D(i[t],e,o,c,r,n),e.cancelBubble))return void S(c);for(let t=0;t<i.length;t++)if(!a[t]&&(D(i[t],e,o,c,r,n),!e.bubbles||e.cancelBubble))return void S(c);S(c)},P=e=>O(e,p,!1),F=(e,t,n=!0)=>{const r=N(t.type),o=e+":"+r,s=v("[q-"+CSS.escape(o)+"]"),i=[];for(let e=0;e<s.length;e++){const a=s[e];D(a,t,o,i,r,n)}S(i)},J=e=>{F(a,e)},M=e=>{F(c,e,!1)},Z=e=>{F(s,e)},z=e=>{F(i,e,!1)},G=()=>{const n=r.readyState;if("interactive"==n||"complete"==n){if(t=1,q.forEach(y),h.has("d:qinit")){h.delete("d:qinit");const e=$("qinit"),t=v("[q-d\\\\:qinit]"),n=[];for(let r=0;r<t.length;r++){const o=t[r];D(o,e,"d:qinit",n),o.removeAttribute("q-d:qinit")}S(n)}if(h.has("d:qidle")&&(h.delete("d:qidle"),(o.requestIdleCallback??o.setTimeout).bind(o)(()=>{const e=$("qidle"),t=v("[q-d\\\\:qidle]"),n=[];for(let r=0;r<t.length;r++){const o=t[r];D(o,e,"d:qidle",n),o.removeAttribute("q-d:qidle")}S(n)})),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),D(o.target,$("qvisible",o),"e:qvisible",n))}S(n)}));const t=v("[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")}}}},H=(...e)=>{for(let n=0;n<e.length;n++){const r=e[n];if(r===f)_(e[++n]);else if("string"==typeof r){if(!h.has(r)){h.add(r);const{scope:e,eventName:n}=T(r),i=x(e),c=B(e);c===s?w(o,n,i?z:Z,!0,i):q.forEach(e=>w(e,n,c===a?i?M:J:i?P:O,!0,i)),1!==t||"e:qvisible"!==r&&"d:qinit"!==r&&"d:qidle"!==r||G()}}else q.has(r)||(h.forEach(e=>{const{scope:t,eventName:n}=T(e),o=x(t),i=B(t);i!==s&&w(r,n,i===a?o?M:J:o?P:O,!0,o)}),q.add(r))}},K=o._qwikEv;K?.roots||(Array.isArray(K)?H(...K):H("e:click","e:input"),o._qwikEv={events:h,roots:q,push:H},w(r,d,G),G())';
|
|
1281
|
-
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(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';
|
|
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",u="capture:",d="readystatechange",f=0,h=new Set,q=new Set([r]),b=new Map,g={},m=(e,t)=>Array.from(e.querySelectorAll(t)),v=e=>{const t=[];return q.forEach(n=>t.push(...m(n,e))),t},w=(e,t,n,r=!1,o=!1)=>e.addEventListener(t,n,{capture:r,passive:o}),y=e=>{H(e);const t=m(e,"[q\\\\:shadowroot]");for(let e=0;e<t.length;e++){const n=t[e].shadowRoot;n&&y(n)}},A=e=>e&&"function"==typeof e.then,E=async e=>{for(let t=0;t<e.length;t++)await e[t]()},S=e=>{if(e.length){const t=()=>E(e);n=n?n.then(t,t):t()}},C=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}}},_=e=>{g[e]=1,I(d)},k=e=>{const t=e.getAttribute("q:instance");return"paused"===e.getAttribute("q:container")&&"loading"===r.readyState&&!g[t]&&new Promise(e=>{w(r,d,()=>{("loading"!==r.readyState||g[t])&&e()})})},$=(e,t)=>new CustomEvent(e,{detail:t}),I=(e,t)=>{r.dispatchEvent($(e,t))},N=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),R=e=>e.replace(/-./g,e=>e[1].toUpperCase()),T=e=>{const t=e.indexOf(":");return{scope:e.slice(0,t),eventName:R(e.slice(t+1))}},x=e=>2===e.length,B=e=>e.charAt(0),L=e=>!!e&&1===e.nodeType,U=(e,t,n)=>e.hasAttribute(n)&&(!!e._qDispatch?.[t]||e.hasAttribute("q-"+t)),j=(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);I("qerror",{importError:"sync",error:e,...l}),console.error(e)}return t}const p=`${i}|${n}|${s}`,u=b.get(p);if(u)return u;const d=new URL(s,o).href,f=import(d);return C(e),f.then(e=>{const t=e[i];if(t)b.set(p,t),I("qsymbol",l);else{const e=Error(`${i} not in ${d}`);I("qerror",{importError:"no-symbol",error:e,...l}),console.error(e)}return t},e=>{I("qerror",{importError:"async",error:e,...l}),console.error(e)})},D=(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=k(n);for(let r=0;r<c.length;r++){const l=c[r],u=performance.now(),[d,f,h]=l.split("#"),q=n=>{if(n&&e.isConnected){const r=t=>{I("qerror",{error:t,qBase:s,symbol:f,element:e,reqTime:u})};try{const o=n.call(h,t,e);if(A(o))return o.catch(r)}catch(e){return r(e)}}},b=(t=!0)=>j(n,e,s,i,d,f,u,t),g=p?void 0:b();if(p)a=!0,o.push(async()=>{await p,await q(d?await b():await b(!1)||await b())});else if(A(g))a=!0,o.push(()=>g.then(q));else if(a)a=!0,o.push(async()=>{await q(g||await b())});else{const e=q(g);A(e)&&(a=!0,o.push(()=>e))}}}},O=(e,t=l,n=!0)=>{const r=N(e.type),o=t+":"+r,s=u+r,i=[],a=[],c=[];let p=e.target;for(;p;)L(p)?(i.push(p),a.push(U(p,o,s)),p=p.parentElement):p=p.parentElement;for(let t=i.length-1;t>=0;t--)if(a[t]&&(D(i[t],e,o,c,r,n),e.cancelBubble))return void S(c);for(let t=0;t<i.length;t++)if(!a[t]&&(D(i[t],e,o,c,r,n),!e.bubbles||e.cancelBubble))return void S(c);S(c)},P=e=>O(e,p,!1),F=(e,t,n=!0)=>{const r=N(t.type),o=e+":"+r,s=v("[q-"+CSS.escape(o)+"]"),i=[];for(let e=0;e<s.length;e++){const a=s[e];D(a,t,o,i,r,n)}S(i)},J=e=>{F(a,e)},M=e=>{F(c,e,!1)},Z=e=>{F(s,e)},z=e=>{F(i,e,!1)},G=()=>{const n=r.readyState;if("interactive"==n||"complete"==n){if(t=1,q.forEach(y),h.has("d:qinit")){h.delete("d:qinit");const e=$("qinit"),t=v("[q-d\\\\:qinit]"),n=[];for(let r=0;r<t.length;r++){const o=t[r];D(o,e,"d:qinit",n),o.removeAttribute("q-d:qinit")}S(n)}if(h.has("d:qidle")&&(h.delete("d:qidle"),(o.requestIdleCallback??o.setTimeout).bind(o)(()=>{const e=$("qidle"),t=v("[q-d\\\\:qidle]"),n=[];for(let r=0;r<t.length;r++){const o=t[r];D(o,e,"d:qidle",n),o.removeAttribute("q-d:qidle")}S(n)})),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),D(o.target,$("qvisible",o),"e:qvisible",n))}S(n)}));const t=v("[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")}}}},H=(...e)=>{for(let n=0;n<e.length;n++){const r=e[n];if(r===f)_(e[++n]);else if("string"==typeof r){if(!h.has(r)){h.add(r);const{scope:e,eventName:n}=T(r),i=x(e),c=B(e);c===s?w(o,n,i?z:Z,!0,i):q.forEach(e=>w(e,n,c===a?i?M:J:i?P:O,!0,i)),1!==t||"e:qvisible"!==r&&"d:qinit"!==r&&"d:qidle"!==r||G()}}else q.has(r)||(h.forEach(e=>{const{scope:t,eventName:n}=T(e),o=x(t),i=B(t);i!==s&&w(r,n,i===a?o?M:J:o?P:O,!0,o)}),q.add(r))}},K=o._qwikEv;K?.roots||(Array.isArray(K)?H(...K):H("e:click","e:input"),o._qwikEv={events:h,roots:q,push:H},w(r,d,G),G())';
|
|
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';
|
|
1282
1290
|
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)}`;
|
|
1283
1291
|
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';
|
|
1284
1292
|
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)`;
|
|
1285
|
-
var QWIK_OUT_OF_ORDER_EXECUTOR_DEBUG = '//#region packages/qwik/src/out-of-order-executor-shared.ts\n/** Shared out-of-order Suspense 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,
|
|
1293
|
+
var QWIK_OUT_OF_ORDER_EXECUTOR_DEBUG = '//#region packages/qwik/src/out-of-order-executor-shared.ts\n/** Shared out-of-order Suspense 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 Suspense 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';
|
|
1294
|
+
var QWIK_ERROR_SWAP_EXECUTOR_MINIFIED = `var t='[q\\\\:ebc="',e='[q\\\\:ebf="',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)`;
|
|
1295
|
+
var QWIK_ERROR_SWAP_EXECUTOR_DEBUG = '//#region packages/qwik/src/error-swap-executor-shared.ts\nvar Q_ERROR_CONTENT_SELECTOR = "[q\\\\:ebc=\\"";\nvar Q_ERROR_FALLBACK_SELECTOR = "[q\\\\:ebf=\\"";\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';
|
|
1286
1296
|
function getQwikLoaderScript(opts = {}) {
|
|
1287
1297
|
return opts.debug ? QWIK_LOADER_DEFAULT_DEBUG : QWIK_LOADER_DEFAULT_MINIFIED;
|
|
1288
1298
|
}
|
|
@@ -1302,6 +1312,11 @@ function getQwikOutOfOrderExecutorScript(opts = {}) {
|
|
|
1302
1312
|
return `if(!globalThis.qO||globalThis.qO.d!==document){${script}
|
|
1303
1313
|
}`;
|
|
1304
1314
|
}
|
|
1315
|
+
function getQwikErrorSwapExecutorScript(opts = {}) {
|
|
1316
|
+
const script = opts.debug ? QWIK_ERROR_SWAP_EXECUTOR_DEBUG : QWIK_ERROR_SWAP_EXECUTOR_MINIFIED;
|
|
1317
|
+
return `if(!globalThis.qErr||globalThis.qErr.d!==document){${script}
|
|
1318
|
+
}`;
|
|
1319
|
+
}
|
|
1305
1320
|
|
|
1306
1321
|
// packages/qwik/src/server/ssr-node.ts
|
|
1307
1322
|
import {
|
|
@@ -1907,7 +1922,7 @@ function getBuildBase(opts) {
|
|
|
1907
1922
|
return `${import.meta.env?.BASE_URL || "/"}build/`;
|
|
1908
1923
|
}
|
|
1909
1924
|
var versions = {
|
|
1910
|
-
qwik: "2.0.0-beta.
|
|
1925
|
+
qwik: "2.0.0-beta.42-dev+3473a49",
|
|
1911
1926
|
qwikDom: "2.1.19"
|
|
1912
1927
|
};
|
|
1913
1928
|
|
|
@@ -2069,6 +2084,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2069
2084
|
symbolToChunkResolver;
|
|
2070
2085
|
renderOptions;
|
|
2071
2086
|
outOfOrderStreaming;
|
|
2087
|
+
$transformError$;
|
|
2072
2088
|
serializationCtx;
|
|
2073
2089
|
// Sometimes there is no app state, but framework metadata still points to a vnode id.
|
|
2074
2090
|
// For example, an OOOS segment can point outside the segment to a root vnode through
|
|
@@ -2092,6 +2108,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2092
2108
|
styleIds = /* @__PURE__ */ new Set();
|
|
2093
2109
|
isBackpatchExecutorEmitted = false;
|
|
2094
2110
|
isOutOfOrderExecutorEmitted = false;
|
|
2111
|
+
isErrorSwapExecutorEmitted = false;
|
|
2095
2112
|
backpatchMap = /* @__PURE__ */ new Map();
|
|
2096
2113
|
currentElementFrame = null;
|
|
2097
2114
|
renderTimer;
|
|
@@ -2148,6 +2165,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2148
2165
|
this.$buildBase$ = opts.buildBase;
|
|
2149
2166
|
this.resolvedManifest = opts.resolvedManifest;
|
|
2150
2167
|
this.renderOptions = opts.renderOptions;
|
|
2168
|
+
this.$transformError$ = opts.renderOptions.transformError;
|
|
2151
2169
|
const outOfOrderStreaming = this.renderOptions.streaming?.outOfOrder === true;
|
|
2152
2170
|
if (!__EXPERIMENTAL__.suspense) {
|
|
2153
2171
|
if (outOfOrderStreaming) {
|
|
@@ -2172,8 +2190,8 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2172
2190
|
}
|
|
2173
2191
|
ensureProjectionResolved(_host) {
|
|
2174
2192
|
}
|
|
2175
|
-
handleError(err,
|
|
2176
|
-
|
|
2193
|
+
handleError(err, host, phase = "render" /* Render */) {
|
|
2194
|
+
_handleSSRError(this, err, host, phase);
|
|
2177
2195
|
}
|
|
2178
2196
|
addBackpatchEntry(ssrNodeId, attrName, serializedValue) {
|
|
2179
2197
|
const elementIndex = parseInt(ssrNodeId, 10);
|
|
@@ -2230,11 +2248,14 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2230
2248
|
this.resolveRootContainerReady = null;
|
|
2231
2249
|
this.rootContainerReadyPromise = null;
|
|
2232
2250
|
}
|
|
2233
|
-
nextOutOfOrderId() {
|
|
2234
|
-
|
|
2251
|
+
nextOutOfOrderId(markUsed = true) {
|
|
2252
|
+
const ooosActive = __EXPERIMENTAL__.suspense && this.outOfOrderStreaming;
|
|
2253
|
+
if (!ooosActive && !__EXPERIMENTAL__.errorBoundary) {
|
|
2235
2254
|
return 0;
|
|
2236
2255
|
}
|
|
2237
|
-
|
|
2256
|
+
if (markUsed && ooosActive) {
|
|
2257
|
+
this.outOfOrderUsed = true;
|
|
2258
|
+
}
|
|
2238
2259
|
return ++this.outOfOrderId;
|
|
2239
2260
|
}
|
|
2240
2261
|
emitOutOfOrderSegmentScripts(scripts) {
|
|
@@ -2254,6 +2275,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2254
2275
|
"Out-of-order Suspense streaming requires `streaming.outOfOrder` to be `true`."
|
|
2255
2276
|
);
|
|
2256
2277
|
}
|
|
2278
|
+
this.outOfOrderUsed = true;
|
|
2257
2279
|
this.markVNodeRefForSerialization(options.parentComponentFrame?.componentNode);
|
|
2258
2280
|
const writer = new StringBufferSegmentWriter();
|
|
2259
2281
|
const segmentContainer = this.createSegmentContainer(segmentId, writer);
|
|
@@ -2282,8 +2304,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2282
2304
|
createSegmentContainer(segmentId, writer) {
|
|
2283
2305
|
const rootContainer = this.$getRootContainer$();
|
|
2284
2306
|
const contentHostNode = this.getOrCreateLastNode();
|
|
2285
|
-
this
|
|
2286
|
-
this.markVNodeRefForSerialization(contentHostNode);
|
|
2307
|
+
this.$retainForResume$(contentHostNode);
|
|
2287
2308
|
const rootFrame = {
|
|
2288
2309
|
tagNesting: 10 /* ANYTHING */,
|
|
2289
2310
|
parent: null,
|
|
@@ -2310,12 +2331,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2310
2331
|
const innerSegmentContainer = segmentContainer;
|
|
2311
2332
|
innerSegmentContainer.$isOutOfOrderSegment$ = true;
|
|
2312
2333
|
innerSegmentContainer.$storeProxyMap$ = this.$storeProxyMap$;
|
|
2313
|
-
segmentContainer.serializationCtx =
|
|
2314
|
-
SsrNode,
|
|
2315
|
-
DomRef,
|
|
2316
|
-
this.symbolToChunkResolver,
|
|
2317
|
-
writer
|
|
2318
|
-
);
|
|
2334
|
+
segmentContainer.serializationCtx.$storeProxyMap$ = this.$storeProxyMap$;
|
|
2319
2335
|
segmentContainer.serializationCtx.$addSyncFn$ = this.serializationCtx.$addSyncFn$.bind(
|
|
2320
2336
|
this.serializationCtx
|
|
2321
2337
|
);
|
|
@@ -2414,6 +2430,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2414
2430
|
return this.closeElement();
|
|
2415
2431
|
}
|
|
2416
2432
|
$noScriptHere$ = 0;
|
|
2433
|
+
$errorContentHost$ = null;
|
|
2417
2434
|
/** Renders opening tag for DOM element */
|
|
2418
2435
|
openElement(elementName, key, varAttrs, constAttrs = null, styleScopedId = null, currentFile = null, hasMovedCaptures = true) {
|
|
2419
2436
|
if (!VALID_ELEMENT_NAME.test(elementName)) {
|
|
@@ -2805,7 +2822,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2805
2822
|
if (flag & 8 /* REFERENCE */) {
|
|
2806
2823
|
this.write(VNodeDataSeparator.REFERENCE_CH);
|
|
2807
2824
|
}
|
|
2808
|
-
if (flag & (1 /* TEXT_DATA */ | 2 /* VIRTUAL_NODE */ | 4 /* ELEMENT_NODE */)) {
|
|
2825
|
+
if (!(flag & 32 /* INERT */) && flag & (1 /* TEXT_DATA */ | 2 /* VIRTUAL_NODE */ | 4 /* ELEMENT_NODE */)) {
|
|
2809
2826
|
let fragmentAttrs = null;
|
|
2810
2827
|
let depth = 0;
|
|
2811
2828
|
for (let i = 1; i < vNode.length; i++) {
|
|
@@ -2855,6 +2872,12 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2855
2872
|
);
|
|
2856
2873
|
}
|
|
2857
2874
|
}
|
|
2875
|
+
$retainForResume$(node) {
|
|
2876
|
+
if (node) {
|
|
2877
|
+
this.addRoot(node);
|
|
2878
|
+
this.markVNodeRefForSerialization(node);
|
|
2879
|
+
}
|
|
2880
|
+
}
|
|
2858
2881
|
markVNodeRefForSerialization(node) {
|
|
2859
2882
|
if (node) {
|
|
2860
2883
|
this.hasVNodeRefsForSerialization = true;
|
|
@@ -2998,7 +3021,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2998
3021
|
if (!append) {
|
|
2999
3022
|
this.write(BRACKET_OPEN);
|
|
3000
3023
|
}
|
|
3001
|
-
this.writeArray(append ?
|
|
3024
|
+
this.writeArray(fns, COMMA, append ? start : 0);
|
|
3002
3025
|
if (!append) {
|
|
3003
3026
|
this.write(BRACKET_CLOSE);
|
|
3004
3027
|
}
|
|
@@ -3010,8 +3033,15 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3010
3033
|
}
|
|
3011
3034
|
}
|
|
3012
3035
|
emitPatchDataIfNeeded() {
|
|
3036
|
+
if (this.backpatchMap.size === 0) {
|
|
3037
|
+
return;
|
|
3038
|
+
}
|
|
3013
3039
|
const patches = [];
|
|
3014
|
-
|
|
3040
|
+
const sortedBackpatches = [...this.backpatchMap.entries()].sort(
|
|
3041
|
+
([a], [b]) => Number(a) - Number(b)
|
|
3042
|
+
);
|
|
3043
|
+
for (let entryIdx = 0; entryIdx < sortedBackpatches.length; entryIdx++) {
|
|
3044
|
+
const [elementIndex, backpatchEntries] = sortedBackpatches[entryIdx];
|
|
3015
3045
|
for (let i = 0; i < backpatchEntries.length; i++) {
|
|
3016
3046
|
const backpatchEntry = backpatchEntries[i];
|
|
3017
3047
|
patches.push(
|
|
@@ -3022,14 +3052,12 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3022
3052
|
}
|
|
3023
3053
|
}
|
|
3024
3054
|
this.backpatchMap.clear();
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
scriptAttrs["nonce"] = this.renderOptions.serverData.nonce;
|
|
3030
|
-
}
|
|
3031
|
-
this.writeScript(scriptAttrs, JSON.stringify(patches).replaceAll("<", "\\u003C"));
|
|
3055
|
+
this.isBackpatchExecutorEmitted = true;
|
|
3056
|
+
const scriptAttrs = { type: ELEMENT_BACKPATCH_DATA };
|
|
3057
|
+
if (this.renderOptions.serverData?.nonce) {
|
|
3058
|
+
scriptAttrs["nonce"] = this.renderOptions.serverData.nonce;
|
|
3032
3059
|
}
|
|
3060
|
+
this.writeScript(scriptAttrs, JSON.stringify(patches).replaceAll("<", "\\u003C"));
|
|
3033
3061
|
}
|
|
3034
3062
|
emitBackpatchDataAndExecutorIfNeeded() {
|
|
3035
3063
|
if (this.backpatchMap.size === 0) {
|
|
@@ -3060,6 +3088,16 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3060
3088
|
getQwikOutOfOrderExecutorScript({ debug: isDev8 })
|
|
3061
3089
|
);
|
|
3062
3090
|
}
|
|
3091
|
+
emitErrorSwapExecutorIfNeeded() {
|
|
3092
|
+
if (!__EXPERIMENTAL__.errorBoundary || this.isErrorSwapExecutorEmitted) {
|
|
3093
|
+
return;
|
|
3094
|
+
}
|
|
3095
|
+
this.isErrorSwapExecutorEmitted = true;
|
|
3096
|
+
this.emitInlineScript(getQwikErrorSwapExecutorScript({ debug: isDev8 }));
|
|
3097
|
+
}
|
|
3098
|
+
// Root containers emit qErr inline at the swap site; only segment containers defer ids.
|
|
3099
|
+
$registerErrorSwap$(_boundaryId) {
|
|
3100
|
+
}
|
|
3063
3101
|
emitInlineScript(script) {
|
|
3064
3102
|
const scriptAttrs = { type: "text/javascript" };
|
|
3065
3103
|
if (this.renderOptions.serverData?.nonce) {
|
|
@@ -3267,10 +3305,10 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3267
3305
|
this.size += String(delta).length;
|
|
3268
3306
|
this.writer.writeRootRefDelta(id, base2);
|
|
3269
3307
|
}
|
|
3270
|
-
writeArray(array, separator) {
|
|
3271
|
-
for (let i =
|
|
3308
|
+
writeArray(array, separator, start = 0) {
|
|
3309
|
+
for (let i = start; i < array.length; i++) {
|
|
3272
3310
|
const element = array[i];
|
|
3273
|
-
if (i >
|
|
3311
|
+
if (i > start) {
|
|
3274
3312
|
this.write(separator);
|
|
3275
3313
|
}
|
|
3276
3314
|
this.write(element);
|
|
@@ -3404,8 +3442,18 @@ var SSRSegmentContainer = class extends SSRContainer {
|
|
|
3404
3442
|
$rootContainer$;
|
|
3405
3443
|
$outOfOrderState$ = 0 /* Rendering */;
|
|
3406
3444
|
$outOfOrderRootIdMap$ = null;
|
|
3445
|
+
$errorSwapIds$ = null;
|
|
3407
3446
|
subscriptionPatchRecords = [];
|
|
3408
3447
|
pendingVNodeDataPatches = null;
|
|
3448
|
+
nextOutOfOrderId(markUsed = true) {
|
|
3449
|
+
return this.$rootContainer$.nextOutOfOrderId(markUsed);
|
|
3450
|
+
}
|
|
3451
|
+
$registerErrorSwap$(boundaryId) {
|
|
3452
|
+
(this.$errorSwapIds$ ||= []).push(boundaryId);
|
|
3453
|
+
}
|
|
3454
|
+
emitErrorSwapExecutorIfNeeded() {
|
|
3455
|
+
this.$rootContainer$.emitErrorSwapExecutorIfNeeded();
|
|
3456
|
+
}
|
|
3409
3457
|
$recordExternalRootEffect$(producer, effect, prop, sourceEffects) {
|
|
3410
3458
|
recordExternalRootEffect(
|
|
3411
3459
|
this.$rootContainer$.serializationCtx,
|
|
@@ -3579,11 +3627,8 @@ var SSRSegmentContainer = class extends SSRContainer {
|
|
|
3579
3627
|
if (segment === this) {
|
|
3580
3628
|
continue;
|
|
3581
3629
|
}
|
|
3582
|
-
|
|
3583
|
-
|
|
3584
|
-
if (rootObjs[j] === obj) {
|
|
3585
|
-
return true;
|
|
3586
|
-
}
|
|
3630
|
+
if (obj === obj && segment.serializationCtx.$hasRootId$(obj) !== void 0) {
|
|
3631
|
+
return true;
|
|
3587
3632
|
}
|
|
3588
3633
|
}
|
|
3589
3634
|
return false;
|
|
@@ -3694,6 +3739,8 @@ var StreamHandler = class {
|
|
|
3694
3739
|
timing;
|
|
3695
3740
|
bufferSize = 0;
|
|
3696
3741
|
buffer = "";
|
|
3742
|
+
firstWriteNotified = false;
|
|
3743
|
+
onFirstWrite;
|
|
3697
3744
|
networkFlushes = 0;
|
|
3698
3745
|
inOrderStreaming;
|
|
3699
3746
|
streamBlockDepth = 0;
|
|
@@ -3722,6 +3769,7 @@ var StreamHandler = class {
|
|
|
3722
3769
|
if (chunk === void 0 || chunk === null) {
|
|
3723
3770
|
return;
|
|
3724
3771
|
}
|
|
3772
|
+
handler.notifyFirstWrite();
|
|
3725
3773
|
if (handler.pendingFlush) {
|
|
3726
3774
|
const queued = handler.pendingFlush.then(() => originalStream.write(chunk));
|
|
3727
3775
|
return handler.trackPendingFlush(queued);
|
|
@@ -3773,7 +3821,14 @@ var StreamHandler = class {
|
|
|
3773
3821
|
this.pendingFlush = pending;
|
|
3774
3822
|
return pending;
|
|
3775
3823
|
}
|
|
3824
|
+
notifyFirstWrite() {
|
|
3825
|
+
if (!this.firstWriteNotified) {
|
|
3826
|
+
this.firstWriteNotified = true;
|
|
3827
|
+
this.onFirstWrite?.();
|
|
3828
|
+
}
|
|
3829
|
+
}
|
|
3776
3830
|
flushBuffer() {
|
|
3831
|
+
this.notifyFirstWrite();
|
|
3777
3832
|
const chunk = this.buffer;
|
|
3778
3833
|
this.buffer = "";
|
|
3779
3834
|
this.bufferSize = 0;
|
|
@@ -3865,6 +3920,10 @@ var renderToStream = async (jsx, opts) => {
|
|
|
3865
3920
|
resolvedManifest,
|
|
3866
3921
|
renderOptions: opts
|
|
3867
3922
|
});
|
|
3923
|
+
const onBeforeFirstFlush = opts.onBeforeFirstFlush;
|
|
3924
|
+
if (onBeforeFirstFlush) {
|
|
3925
|
+
streamHandler.onFirstWrite = () => onBeforeFirstFlush({ errorBoundaryCaught: ssrContainer.$hasBoundaryError$ === true });
|
|
3926
|
+
}
|
|
3868
3927
|
await setServerPlatform(opts, resolvedManifest);
|
|
3869
3928
|
await ssrContainer.render(jsx);
|
|
3870
3929
|
await ssrContainer.$renderPromise$;
|
|
@@ -3874,7 +3933,8 @@ var renderToStream = async (jsx, opts) => {
|
|
|
3874
3933
|
manifest: resolvedManifest?.manifest,
|
|
3875
3934
|
size: ssrContainer.size,
|
|
3876
3935
|
isStatic: false,
|
|
3877
|
-
timing
|
|
3936
|
+
timing,
|
|
3937
|
+
errorBoundaryCaught: ssrContainer.$hasBoundaryError$ === true
|
|
3878
3938
|
};
|
|
3879
3939
|
return result;
|
|
3880
3940
|
};
|