@qwik.dev/core 2.0.0-beta.36 → 2.0.0-beta.38
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 +526 -345
- package/dist/core.min.mjs +9 -8
- package/dist/core.mjs +1784 -925
- package/dist/core.mjs.map +1 -1
- package/dist/core.prod.mjs +4294 -3600
- package/dist/loader/index.mjs +2 -2
- package/dist/loader/package.json +1 -1
- package/dist/optimizer.d.ts +11 -3
- package/dist/optimizer.mjs +1574 -1459
- package/dist/preloader.mjs +1 -1
- package/dist/qwikloader.debug.js +23 -21
- package/dist/qwikloader.js +1 -1
- package/dist/server.d.ts +7 -0
- package/dist/server.mjs +63 -27
- package/dist/server.prod.mjs +424 -378
- package/dist/starters/adapters/bun/src/entry.bun.ts +35 -0
- package/dist/starters/adapters/cloud-run/src/entry.cloud-run.tsx +20 -0
- package/dist/starters/adapters/deno/src/entry.deno.ts +41 -0
- package/dist/starters/adapters/express/src/entry.express.tsx +20 -0
- package/dist/starters/adapters/fastify/src/entry.fastify.tsx +20 -0
- package/dist/starters/adapters/fastify/src/plugins/fastify-qwik.ts +10 -1
- package/dist/starters/adapters/node-server/src/entry.node-server.tsx +20 -0
- package/dist/testing/index.d.ts +40 -30
- package/dist/testing/index.mjs +1451 -719
- package/dist/testing/package.json +1 -1
- package/dist/worker/package.json +1 -1
- package/dist/worker/worker.shared.js +1 -1
- package/handlers.mjs +3 -0
- package/package.json +4 -4
- package/public.d.ts +3 -0
package/dist/preloader.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isServer as e}from"@qwik.dev/core/build";const n=e=>{let n;if(typeof MessageChannel!=="undefined"){const t=new MessageChannel;t.port1.onmessage=()=>e();n=()=>t.port2.postMessage(null)}else n=()=>setTimeout(e);return n};const t=typeof document!=="undefined";const o=!e&&t;const s=o?document:void 0;const c={
|
|
1
|
+
import{isServer as e}from"@qwik.dev/core/build";const n=e=>{let n;if(typeof MessageChannel!=="undefined"){const t=new MessageChannel;let o=1;t.port1.onmessage=()=>e();n=()=>{if(o)t.port2.postMessage(null)};n.t=()=>{if(o){o=0;t.port1.onmessage=null;t.port1.close();t.port2.close()}}}else n=()=>setTimeout(e);return n};const t=typeof document!=="undefined";const o=!e&&t;const s=o?document:void 0;const c={o:25};const r=o&&s.createElement("link").relList?.supports?.("modulepreload")?"modulePreload":"preload";const i=/\.[mc]?js$/;const f=10;const l=0;const a=1;const $=2;const u=3;const d=4;const m=/* @__PURE__ */new Map;let p;let b=0;const w=[];const h=n(q);const y=n(S);let M=0;let P=0;let k=0;const v=[];const g=()=>{if(p){w.sort((e,n)=>e.i-n.i);p=0}};function q(){M=0;if(!w.length)return;g();const e=performance.now()+f;let n=0;while(w.length){const t=w[0];const o=t.i;const s=1-o;if(s>=.99||b<c.o){w.shift();T(t);if(performance.now()>=e){n=1;break}}else break}if(n&&w.length&&!M){M=1;h()}}const x=(e,n,t)=>{v.unshift({l:e,i:n,$:t})};const C=()=>{const e=v[v.length-1];const n=e.l;if(e.u){const t=e.m;if(t>=e.u.length){v.pop();return 0}const o=e.u[t];e.m=t+1;const s=R(o.p);if(s.i===0)return 1;const c=1-n.i;let r;if(c===1||c>=.99)r=Math.min(.01,1-o.h);else{const e=1-o.h*c;const n=o.M;const t=e/n;r=Math.max(.02,s.i*t);o.M=t}v.push({l:s,i:r,$:e.$});return 1}if(e.$?.has(n)){v.pop();return 0}const t=n.i;n.i=e.i;if(t-n.i<.01){v.pop();return 0}if(J!=null&&n.k<$){if(n.k===l){n.k=a;w.push(n)}p=1}if(n.u?.length){const t=e.$||/* @__PURE__ */new Set;t.add(n);e.$=t;e.u=n.u;e.m=0;return 0}v.pop();return 0};function S(){if(k||!v.length)return;P=0;k=1;const e=o?performance.now()+f:0;let n=0;while(v.length){n=1;const t=C();if(o&&t&&performance.now()>=e){if(!P){P=1;y()}break}}k=0;if(n&&o)h()}const T=e=>{if(e.k>=$)return;b++;const n=performance.now();e.v=n-e.q;e.k=$;const t=s.createElement("link");t.href=new URL(`${J}${e.p}`,s.baseURI).toString();t.rel=r;t.as="script";t.onload=t.onerror=()=>{b--;const o=performance.now();e.C=o-n;e.k=d;t.remove();h()};s.head.appendChild(t)};const j=(e,n,t)=>{x(e,n,t);if(o)y();else S()};const A=(e,n)=>{const t=R(e);if(t)x(t,n)};const I=(e,n)=>{if(!e?.length)return;const t=n?1-n:.4;if(Array.isArray(e))for(let o=e.length-1;o>=0;o--){const n=e[o];A(n,t)}else A(e,t);if(o)y();else S()};if(o)document.addEventListener("qsymbol",e=>{const{symbol:n,href:t}=e.detail;if(t){const e=n.slice(n.lastIndexOf("_")+1);I(e,1)}});let J;let L;const N=(e,n)=>({p:e,k:i.test(e)?l:u,u:n,i:1,q:performance.now(),v:0,C:0});const O=e=>{const n=/* @__PURE__ */new Map;let t=0;while(t<e.length){const o=e[t++];const s=[];let c;let r=1;while(c=e[t],typeof c==="number"){if(c<0)r=-c/10;else s.push({p:e[c],h:r,M:1});t++}n.set(o,s)}return n};const R=e=>{let n=m.get(e);if(!n){let t;if(L){t=L.get(e);if(!t)return;if(!t.length)t=void 0}n=N(e,t);m.set(e,n)}return n};const U=(e,t,s)=>{if(s)if("P"in s)c.o=s["P"];if(!o||e==null)return;J=e;if(t)t.then(e=>e.text()).then(e=>{L=O(JSON.parse(e));const t=[];for(const[n,c]of L.entries()){const e=R(n);e.u=c;if(e.i<1){t.push([e,e.i]);e.i=1}}if(!t.length){h();return}let o=0;const s=n(()=>{const e=performance.now()+f;while(o<t.length){const[n,c]=t[o];o++;j(n,c);if(o<t.length&&performance.now()>=e){s();return}}h()});s()}).catch(console.warn)};export{O as g,U as l,I as p};
|
package/dist/qwikloader.debug.js
CHANGED
|
@@ -8,10 +8,11 @@ const elementPrefix = "e";
|
|
|
8
8
|
const passiveElementPrefix = "ep";
|
|
9
9
|
const capturePrefix = "capture:";
|
|
10
10
|
const readyStateChange = "readystatechange";
|
|
11
|
-
const
|
|
11
|
+
const QwikEvContainerReady = 0;
|
|
12
12
|
const events = /* @__PURE__ */ new Set();
|
|
13
13
|
const roots = /* @__PURE__ */ new Set([doc]);
|
|
14
14
|
const symbols = /* @__PURE__ */ new Map();
|
|
15
|
+
const readyContainers = {};
|
|
15
16
|
let observer;
|
|
16
17
|
let hasInitialized;
|
|
17
18
|
let queuedTasks;
|
|
@@ -58,17 +59,19 @@ const resolveContainer = (containerEl) => {
|
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
61
|
};
|
|
62
|
+
const markContainerReady = (hash) => {
|
|
63
|
+
readyContainers[hash] = 1;
|
|
64
|
+
emitEvent(readyStateChange);
|
|
65
|
+
};
|
|
61
66
|
const waitForContainerReady = (container) => {
|
|
62
67
|
const hash = container.getAttribute("q:instance");
|
|
63
|
-
return container.getAttribute("q:container") === "paused" && doc.readyState === "loading" && !
|
|
64
|
-
const ready = (
|
|
65
|
-
if (
|
|
66
|
-
doc.removeEventListener(containerReady, ready);
|
|
68
|
+
return container.getAttribute("q:container") === "paused" && doc.readyState === "loading" && !readyContainers[hash] && new Promise((resolve) => {
|
|
69
|
+
const ready = () => {
|
|
70
|
+
if (doc.readyState !== "loading" || readyContainers[hash]) {
|
|
67
71
|
resolve();
|
|
68
72
|
}
|
|
69
73
|
};
|
|
70
|
-
addEventListener(doc, readyStateChange,
|
|
71
|
-
addEventListener(doc, containerReady, ready);
|
|
74
|
+
addEventListener(doc, readyStateChange, ready);
|
|
72
75
|
});
|
|
73
76
|
};
|
|
74
77
|
const createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });
|
|
@@ -216,10 +219,6 @@ const dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDe
|
|
|
216
219
|
const run = (handler2) => {
|
|
217
220
|
if (handler2 && element.isConnected) {
|
|
218
221
|
const onError = (error) => {
|
|
219
|
-
const retry = waitForContainerReady(container);
|
|
220
|
-
if (retry) {
|
|
221
|
-
return retry.then(() => run(handler2));
|
|
222
|
-
}
|
|
223
222
|
emitEvent("qerror", {
|
|
224
223
|
error,
|
|
225
224
|
qBase,
|
|
@@ -239,19 +238,20 @@ const dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDe
|
|
|
239
238
|
}
|
|
240
239
|
};
|
|
241
240
|
const resolve = (reportSyncError = true) => resolveHandler(container, element, qBase, base, chunk, symbol, reqTime, reportSyncError);
|
|
242
|
-
const handler = waitForReady
|
|
243
|
-
if (
|
|
241
|
+
const handler = waitForReady ? void 0 : resolve();
|
|
242
|
+
if (waitForReady) {
|
|
243
|
+
defer = true;
|
|
244
|
+
tasks.push(async () => {
|
|
245
|
+
await waitForReady;
|
|
246
|
+
await run(await resolve(false) || await resolve());
|
|
247
|
+
});
|
|
248
|
+
} else if (isPromise(handler)) {
|
|
244
249
|
defer = true;
|
|
245
250
|
tasks.push(() => handler.then(run));
|
|
246
|
-
} else if (defer
|
|
251
|
+
} else if (defer) {
|
|
247
252
|
defer = true;
|
|
248
253
|
tasks.push(async () => {
|
|
249
|
-
|
|
250
|
-
if (!retryHandler && waitForReady) {
|
|
251
|
-
await waitForReady;
|
|
252
|
-
retryHandler = resolve(false);
|
|
253
|
-
}
|
|
254
|
-
await run(retryHandler || await resolve());
|
|
254
|
+
await run(handler || await resolve());
|
|
255
255
|
});
|
|
256
256
|
} else {
|
|
257
257
|
const result = run(handler);
|
|
@@ -385,7 +385,9 @@ const processReadyStateChange = () => {
|
|
|
385
385
|
const addEventOrRoot = (...eventNames) => {
|
|
386
386
|
for (let i = 0; i < eventNames.length; i++) {
|
|
387
387
|
const eventNameOrRoot = eventNames[i];
|
|
388
|
-
if (
|
|
388
|
+
if (eventNameOrRoot === QwikEvContainerReady) {
|
|
389
|
+
markContainerReady(eventNames[++i]);
|
|
390
|
+
} else if (typeof eventNameOrRoot === "string") {
|
|
389
391
|
if (!events.has(eventNameOrRoot)) {
|
|
390
392
|
events.add(eventNameOrRoot);
|
|
391
393
|
const { scope, eventName } = parseKebabEvent(eventNameOrRoot);
|
package/dist/qwikloader.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=document,t=window,n="w",r="wp",o="d",s="dp",i="e",
|
|
1
|
+
const e=document,t=window,n="w",r="wp",o="d",s="dp",i="e",a="ep",c="capture:",l="readystatechange",p=0,u=new Set,d=new Set([e]),f=new Map,h={};let q,b,g;const m=(e,t)=>Array.from(e.querySelectorAll(t)),v=e=>{const t=[];return d.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]()},C=e=>{if(e.length){const t=()=>E(e);g=g?g.then(t,t):t()}},S=t=>{if(void 0===t._qwikjson_){let n=(t===e.documentElement?e.body:t).lastElementChild;for(;n;){if("SCRIPT"===n.tagName&&"qwik/json"===n.getAttribute("type")){t._qwikjson_=JSON.parse(n.textContent.replace(/\\x3C(\/?script)/gi,"<$1"));break}n=n.previousElementSibling}}},_=e=>{h[e]=1,I(l)},k=t=>{const n=t.getAttribute("q:instance");return"paused"===t.getAttribute("q:container")&&"loading"===e.readyState&&!h[n]&&new Promise(t=>{w(e,l,()=>{("loading"!==e.readyState||h[n])&&t()})})},$=(e,t)=>new CustomEvent(e,{detail:t}),I=(t,n)=>{e.dispatchEvent($(t,n))},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=(t,n,r,o,s,i,a,c=!0)=>{const l={qBase:r,symbol:i,element:n,reqTime:a};if(!s){const n=(e["qFuncs_"+t.getAttribute("q:instance")]||[])[+i];if(!n&&c){const e=Error("sym:"+i);I("qerror",{importError:"sync",error:e,...l}),console.error(e)}return n}const p=`${i}|${r}|${s}`,u=f.get(p);if(u)return u;const d=new URL(s,o).href,h=import(d);return S(t),h.then(e=>{const t=e[i];if(t)f.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=(t,n,r,o,s,i=!0)=>{let a=!1;s&&(i&&t.hasAttribute("preventdefault:"+s)&&n.preventDefault(),t.hasAttribute("stoppropagation:"+s)&&n.stopPropagation());const c=t._qDispatch?.[r];if(c){if("function"==typeof c){const e=()=>c(n,t);if(a)o.push(async()=>{const t=e();A(t)&&await t});else{const t=e();A(t)&&(a=!0,o.push(()=>t))}}else if(c.length)for(let e=0;e<c.length;e++){const r=c[e];if(r){const e=()=>r(n,t);if(a)o.push(async()=>{const t=e();A(t)&&await t});else{const t=e();A(t)&&(a=!0,o.push(()=>t))}}}return}const l=t.getAttribute("q-"+r);if(l){const r=t.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"),s=r.getAttribute("q:base"),i=new URL(s,e.baseURI),c=l.split("|"),p=k(r);for(let e=0;e<c.length;e++){const l=c[e],u=performance.now(),[d,f,h]=l.split("#"),q=e=>{if(e&&t.isConnected){const r=e=>{I("qerror",{error:e,qBase:s,symbol:f,element:t,reqTime:u})};try{const o=e.call(h,n,t);if(A(o))return o.catch(r)}catch(e){return r(e)}}},b=(e=!0)=>j(r,t,s,i,d,f,u,e),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=i,n=!0)=>{const r=N(e.type),o=t+":"+r,s=c+r,a=[],l=[],p=[];let u=e.target;for(;u;)L(u)?(a.push(u),l.push(U(u,o,s)),u=u.parentElement):u=u.parentElement;for(let t=a.length-1;t>=0;t--)if(l[t]&&(D(a[t],e,o,p,r,n),e.cancelBubble))return void C(p);for(let t=0;t<a.length;t++)if(!l[t]&&(D(a[t],e,o,p,r,n),!e.bubbles||e.cancelBubble))return void C(p);C(p)},P=e=>O(e,a,!1),F=(e,t,n=!0)=>{const r=N(t.type),o=e+":"+r,s=v("[q-"+e+"\\:"+r+"]"),i=[];for(let e=0;e<s.length;e++){const a=s[e];D(a,t,o,i,r,n)}C(i)},J=e=>{F(o,e)},M=e=>{F(s,e,!1)},Z=e=>{F(n,e)},z=e=>{F(r,e,!1)},G=()=>{const n=e.readyState;if("interactive"==n||"complete"==n){if(b=1,d.forEach(y),u.has("d:qinit")){u.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")}C(n)}if(u.has("d:qidle")&&(u.delete("d:qidle"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{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")}C(n)})),u.has("e:qvisible")){q||(q=new IntersectionObserver(e=>{const t=[];for(let n=0;n<e.length;n++){const r=e[n];r.isIntersecting&&(q.unobserve(r.target),D(r.target,$("qvisible",r),"e:qvisible",t))}C(t)}));const e=v("[q-e\\:qvisible]:not([q\\:observed])");for(let t=0;t<e.length;t++){const n=e[t];q.observe(n),n.setAttribute("q:observed","true")}}}},H=(...e)=>{for(let r=0;r<e.length;r++){const s=e[r];if(0===s)_(e[++r]);else if("string"==typeof s){if(!u.has(s)){u.add(s);const{scope:e,eventName:r}=T(s),i=x(e),a=B(e);a===n?w(t,r,i?z:Z,!0,i):d.forEach(e=>w(e,r,a===o?i?M:J:i?P:O,!0,i)),1!==b||"e:qvisible"!==s&&"d:qinit"!==s&&"d:qidle"!==s||G()}}else d.has(s)||(u.forEach(e=>{const{scope:t,eventName:r}=T(e),i=x(t),a=B(t);a!==n&&w(s,r,a===o?i?M:J:i?P:O,!0,i)}),d.add(s))}},K=t._qwikEv;K?.roots||(Array.isArray(K)?H(...K):H("e:click","e:input"),t._qwikEv={events:u,roots:d,push:H},w(e,l,G),G());
|
package/dist/server.d.ts
CHANGED
|
@@ -177,6 +177,13 @@ export declare interface RenderOptions extends SerializeDocumentOptions {
|
|
|
177
177
|
qwikLoader?: QwikLoaderOptions;
|
|
178
178
|
/** Specifies how preloading is handled. This ensures that code is instantly available when needed. */
|
|
179
179
|
preloader?: PreloaderOptions | false;
|
|
180
|
+
/**
|
|
181
|
+
* Root-count threshold for eager yielded state prewarm during client resume.
|
|
182
|
+
*
|
|
183
|
+
* Defaults to `false`, keeping state fully lazy. Set to a number to enable eager prewarm when
|
|
184
|
+
* serialized state has at least that many roots.
|
|
185
|
+
*/
|
|
186
|
+
statePrewarm?: number | false;
|
|
180
187
|
/**
|
|
181
188
|
* When set, the app is serialized into a fragment. And the returned html is not a complete
|
|
182
189
|
* document. Defaults to `html`
|
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.38-dev+0339f17
|
|
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
|
|
@@ -189,8 +189,8 @@ See https://qwik.dev/docs/core/tasks/#use-method-rules`,
|
|
|
189
189
|
// 27
|
|
190
190
|
"Cannot coerce a Signal, use `.value` instead",
|
|
191
191
|
// 28
|
|
192
|
-
"
|
|
193
|
-
// 29
|
|
192
|
+
"",
|
|
193
|
+
// 29 (cleared: useComputed$ now supports async functions)
|
|
194
194
|
`===
|
|
195
195
|
Qwik version {{0}} already imported while importing {{1}}.
|
|
196
196
|
This can lead to issues due to duplicated shared structures.
|
|
@@ -206,8 +206,14 @@ Verify that the Qwik libraries you're using are in "resolve.noExternal[]" and in
|
|
|
206
206
|
// 33
|
|
207
207
|
"Serialization Error: Cannot serialize function: {{0}}",
|
|
208
208
|
// 34
|
|
209
|
-
"Cannot read .value of a clientOnly async signal during SSR. Use .loading to check state, or provide an initial value."
|
|
209
|
+
"Cannot read .value of a clientOnly async signal during SSR. Use .loading to check state, or provide an initial value.",
|
|
210
210
|
// 35
|
|
211
|
+
"Invalid element name for SSR {{0}}",
|
|
212
|
+
// 36
|
|
213
|
+
"Invalid serialized Promise dependency",
|
|
214
|
+
// 37
|
|
215
|
+
"Invalid serialized Uint8Array payload"
|
|
216
|
+
// 38
|
|
211
217
|
];
|
|
212
218
|
let text = MAP[code] ?? "";
|
|
213
219
|
if (parts.length) {
|
|
@@ -623,6 +629,7 @@ var QStylesAllSelector = QStyleSelector + "," + QStyleSSelector;
|
|
|
623
629
|
var QScopedStyle = "q:sstyle";
|
|
624
630
|
var QCtxAttr = "q:ctx";
|
|
625
631
|
var QBackRefs = "q:brefs";
|
|
632
|
+
var QwikEvContainerReady = 0;
|
|
626
633
|
var QRenderAttr = "q:render";
|
|
627
634
|
var QRuntimeAttr = "q:runtime";
|
|
628
635
|
var QVersionAttr = "q:version";
|
|
@@ -630,6 +637,7 @@ var QBaseAttr = "q:base";
|
|
|
630
637
|
var QLocaleAttr = "q:locale";
|
|
631
638
|
var QManifestHashAttr = "q:manifest-hash";
|
|
632
639
|
var QInstanceAttr = "q:instance";
|
|
640
|
+
var QStatePrewarmAttr = "q:prewarm";
|
|
633
641
|
var QContainerIsland = "q:container-island";
|
|
634
642
|
var QContainerIslandEnd = "/" + QContainerIsland;
|
|
635
643
|
var QIgnore = "q:ignore";
|
|
@@ -924,6 +932,7 @@ var stringifyRootRefPath = (path) => {
|
|
|
924
932
|
};
|
|
925
933
|
var writeStringRootRef = (writer, id) => writer.write(String(id));
|
|
926
934
|
var writeStringRootRefPath = (writer, path) => writer.write(stringifyRootRefPath(path));
|
|
935
|
+
var writeStringRootRefDelta = (writer, id, base2) => writer.write(String(id - base2));
|
|
927
936
|
var createStringStreamWriter = (write) => ({
|
|
928
937
|
write,
|
|
929
938
|
writeRootRef(id) {
|
|
@@ -931,6 +940,9 @@ var createStringStreamWriter = (write) => ({
|
|
|
931
940
|
},
|
|
932
941
|
writeRootRefPath(path) {
|
|
933
942
|
return writeStringRootRefPath(this, path);
|
|
943
|
+
},
|
|
944
|
+
writeRootRefDelta(id, base2) {
|
|
945
|
+
return writeStringRootRefDelta(this, id, base2);
|
|
934
946
|
}
|
|
935
947
|
});
|
|
936
948
|
|
|
@@ -1258,8 +1270,8 @@ var preLoaderOptionsDefault = {
|
|
|
1258
1270
|
};
|
|
1259
1271
|
|
|
1260
1272
|
// packages/qwik/src/server/scripts.ts
|
|
1261
|
-
var QWIK_LOADER_DEFAULT_MINIFIED = 'const e=document,t=window,n="w",r="wp",o="d",s="dp",i="e",
|
|
1262
|
-
var QWIK_LOADER_DEFAULT_DEBUG = 'const doc = document;\nconst win = window;\nconst windowPrefix = "w";\nconst passiveWindowPrefix = "wp";\nconst documentPrefix = "d";\nconst passiveDocumentPrefix = "dp";\nconst elementPrefix = "e";\nconst passiveElementPrefix = "ep";\nconst capturePrefix = "capture:";\nconst readyStateChange = "readystatechange";\nconst containerReady = "qready";\nconst events = /* @__PURE__ */ new Set();\nconst roots = /* @__PURE__ */ new Set([doc]);\nconst symbols = /* @__PURE__ */ new Map();\nlet observer;\nlet hasInitialized;\nlet queuedTasks;\nconst nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nconst querySelectorAll = (query) => {\n const elements = [];\n roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n return elements;\n};\nconst addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, { capture, passive });\nconst findShadowRoots = (fragment) => {\n addEventOrRoot(fragment);\n const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\\\:shadowroot]");\n for (let i = 0; i < shadowRoots.length; i++) {\n const parent = shadowRoots[i];\n const shadowRoot = parent.shadowRoot;\n shadowRoot && findShadowRoots(shadowRoot);\n }\n};\nconst isPromise = (promise) => promise && typeof promise.then === "function";\nconst runTasks = async (tasks) => {\n for (let i = 0; i < tasks.length; i++) {\n await tasks[i]();\n }\n};\nconst queueTasks = (tasks) => {\n if (tasks.length) {\n const run = () => runTasks(tasks);\n queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();\n }\n};\nconst resolveContainer = (containerEl) => {\n if (containerEl._qwikjson_ === void 0) {\n const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;\n let script = parentJSON.lastElementChild;\n while (script) {\n if (script.tagName === "SCRIPT" && script.getAttribute("type") === "qwik/json") {\n containerEl._qwikjson_ = JSON.parse(\n script.textContent.replace(/\\\\x3C(\\/?script)/gi, "<$1")\n );\n break;\n }\n script = script.previousElementSibling;\n }\n }\n};\nconst waitForContainerReady = (container) => {\n const hash = container.getAttribute("q:instance");\n return container.getAttribute("q:container") === "paused" && doc.readyState === "loading" && !doc[containerReady]?.[hash] && new Promise((resolve) => {\n const ready = (ev) => {\n if (ev.detail === hash) {\n doc.removeEventListener(containerReady, ready);\n resolve();\n }\n };\n addEventListener(doc, readyStateChange, resolve);\n addEventListener(doc, containerReady, ready);\n });\n};\nconst createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nconst emitEvent = (eventName, detail) => {\n doc.dispatchEvent(createEvent(eventName, detail));\n};\nconst camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());\nconst kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nconst parseKebabEvent = (event) => {\n const separatorIndex = event.indexOf(":");\n const scope = event.slice(0, separatorIndex);\n return {\n scope,\n eventName: kebabToCamel(event.slice(separatorIndex + 1))\n };\n};\nconst isPassiveScope = (scope) => scope.length === 2;\nconst getRootScope = (scope) => scope.charAt(0);\nconst isElementNode = (node) => !!node && node.nodeType === 1;\nconst isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute("q-" + scopedKebabName));\nconst resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime, reportSyncError = true) => {\n const eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n if (!chunk) {\n const handler2 = (doc["qFuncs_" + container.getAttribute("q:instance")] || [])[+symbol];\n if (!handler2 && reportSyncError) {\n const error = new Error("sym:" + symbol);\n emitEvent("qerror", {\n importError: "sync",\n error,\n ...eventData\n });\n console.error(error);\n }\n return handler2;\n }\n const key = `${symbol}|${qBase}|${chunk}`;\n const handler = symbols.get(key);\n if (handler) {\n return handler;\n }\n const href = new URL(chunk, base).href;\n const module = import(\n href\n );\n resolveContainer(container);\n return module.then(\n (module2) => {\n const handler2 = module2[symbol];\n if (!handler2) {\n const error = new Error(`${symbol} not in ${href}`);\n emitEvent("qerror", {\n importError: "no-symbol",\n error,\n ...eventData\n });\n console.error(error);\n } else {\n symbols.set(key, handler2);\n emitEvent("qsymbol", eventData);\n }\n return handler2;\n },\n (error) => {\n emitEvent("qerror", {\n importError: "async",\n error,\n ...eventData\n });\n console.error(error);\n return void 0;\n }\n );\n};\nconst dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {\n let defer = false;\n if (kebabName) {\n if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) {\n ev.preventDefault();\n }\n if (element.hasAttribute("stoppropagation:" + kebabName)) {\n ev.stopPropagation();\n }\n }\n const handlers = element._qDispatch?.[scopedKebabName];\n if (handlers) {\n if (typeof handlers === "function") {\n const run = () => handlers(ev, element);\n if (defer) {\n tasks.push(async () => {\n const result = run();\n if (isPromise(result)) {\n await result;\n }\n });\n } else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n } else if (handlers.length) {\n for (let i = 0; i < handlers.length; i++) {\n const handler = handlers[i];\n if (handler) {\n const run = () => handler(ev, element);\n if (defer) {\n tasks.push(async () => {\n const result = run();\n if (isPromise(result)) {\n await result;\n }\n });\n } else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n }\n return;\n }\n const attrValue = element.getAttribute("q-" + scopedKebabName);\n if (attrValue) {\n const container = element.closest(\n "[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])"\n );\n const qBase = container.getAttribute("q:base");\n const base = new URL(qBase, doc.baseURI);\n const qrls = attrValue.split("|");\n 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 = (handler2) => {\n if (handler2 && element.isConnected) {\n const onError = (error) => {\n const retry = waitForContainerReady(container);\n if (retry) {\n return retry.then(() => run(handler2));\n }\n emitEvent("qerror", {\n error,\n qBase,\n symbol,\n element,\n reqTime\n });\n };\n try {\n const result = handler2.call(capturedIds, ev, element);\n if (isPromise(result)) {\n return result.catch(onError);\n }\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 && !chunk ? resolve(false) : resolve();\n if (isPromise(handler)) {\n defer = true;\n tasks.push(() => handler.then(run));\n } else if (defer || waitForReady && !chunk && !handler) {\n defer = true;\n tasks.push(async () => {\n let retryHandler = handler;\n if (!retryHandler && waitForReady) {\n await waitForReady;\n retryHandler = resolve(false);\n }\n await run(retryHandler || 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};\nconst processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + ":" + kebabName;\n const captureAttribute = capturePrefix + kebabName;\n const elements = [];\n const captureHandlers = [];\n const tasks = [];\n let current = ev.target;\n while (current) {\n if (isElementNode(current)) {\n elements.push(current);\n captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));\n current = current.parentElement;\n } else {\n current = current.parentElement;\n }\n }\n for (let i = elements.length - 1; i >= 0; i--) {\n if (captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n if (ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n }\n for (let i = 0; i < elements.length; i++) {\n if (!captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n if (!ev.bubbles || ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n }\n queueTasks(tasks);\n};\nconst processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);\nconst broadcast = (scope, ev, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + ":" + kebabName;\n const elements = querySelectorAll("[q-" + scope + "\\\\:" + kebabName + "]");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n }\n queueTasks(tasks);\n};\nconst processDocumentEvent = (ev) => {\n broadcast(documentPrefix, ev);\n};\nconst processPassiveDocumentEvent = (ev) => {\n broadcast(passiveDocumentPrefix, ev, false);\n};\nconst processWindowEvent = (ev) => {\n broadcast(windowPrefix, ev);\n};\nconst processPassiveWindowEvent = (ev) => {\n broadcast(passiveWindowPrefix, ev, false);\n};\nconst processReadyStateChange = () => {\n const readyState = doc.readyState;\n if (readyState == "interactive" || readyState == "complete") {\n hasInitialized = 1;\n roots.forEach(findShadowRoots);\n if (events.has("d:qinit")) {\n events.delete("d:qinit");\n const ev = createEvent("qinit");\n const elements = querySelectorAll("[q-d\\\\:qinit]");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, "d:qinit", tasks);\n el.removeAttribute("q-d:qinit");\n }\n queueTasks(tasks);\n }\n if (events.has("d:qidle")) {\n events.delete("d:qidle");\n const riC = win.requestIdleCallback ?? win.setTimeout;\n riC.bind(win)(() => {\n const ev = createEvent("qidle");\n const elements = querySelectorAll("[q-d\\\\:qidle]");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, "d:qidle", tasks);\n el.removeAttribute("q-d:qidle");\n }\n queueTasks(tasks);\n });\n }\n if (events.has("e:qvisible")) {\n observer || (observer = new IntersectionObserver((entries) => {\n const tasks = [];\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n dispatch(\n entry.target,\n createEvent("qvisible", entry),\n "e:qvisible",\n tasks\n );\n }\n }\n queueTasks(tasks);\n }));\n const elements = querySelectorAll("[q-e\\\\:qvisible]:not([q\\\\:observed])");\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n observer.observe(el);\n el.setAttribute("q:observed", "true");\n }\n }\n }\n};\nconst addEventOrRoot = (...eventNames) => {\n for (let i = 0; i < eventNames.length; i++) {\n const eventNameOrRoot = eventNames[i];\n if (typeof eventNameOrRoot === "string") {\n if (!events.has(eventNameOrRoot)) {\n events.add(eventNameOrRoot);\n const { scope, eventName } = parseKebabEvent(eventNameOrRoot);\n const passive = isPassiveScope(scope);\n const rootScope = getRootScope(scope);\n if (rootScope === windowPrefix) {\n addEventListener(\n win,\n eventName,\n passive ? processPassiveWindowEvent : processWindowEvent,\n true,\n passive\n );\n } else {\n roots.forEach(\n (root) => addEventListener(\n root,\n eventName,\n rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,\n true,\n passive\n )\n );\n }\n if (hasInitialized === 1 && (eventNameOrRoot === "e:qvisible" || eventNameOrRoot === "d:qinit" || eventNameOrRoot === "d:qidle")) {\n processReadyStateChange();\n }\n }\n } else {\n if (!roots.has(eventNameOrRoot)) {\n events.forEach((kebabEventName) => {\n const { scope, eventName } = parseKebabEvent(kebabEventName);\n const passive = isPassiveScope(scope);\n const rootScope = getRootScope(scope);\n if (rootScope !== windowPrefix) {\n addEventListener(\n eventNameOrRoot,\n eventName,\n rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,\n true,\n passive\n );\n }\n });\n roots.add(eventNameOrRoot);\n }\n }\n }\n};\nconst _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n if (Array.isArray(_qwikEv)) {\n addEventOrRoot(..._qwikEv);\n } else {\n addEventOrRoot("e:click", "e:input");\n }\n win._qwikEv = {\n events,\n roots,\n push: addEventOrRoot\n };\n addEventListener(doc, readyStateChange, processReadyStateChange);\n processReadyStateChange();\n}';
|
|
1273
|
+
var QWIK_LOADER_DEFAULT_MINIFIED = 'const e=document,t=window,n="w",r="wp",o="d",s="dp",i="e",a="ep",c="capture:",l="readystatechange",p=0,u=new Set,d=new Set([e]),f=new Map,h={};let q,b,g;const m=(e,t)=>Array.from(e.querySelectorAll(t)),v=e=>{const t=[];return d.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]()},C=e=>{if(e.length){const t=()=>E(e);g=g?g.then(t,t):t()}},S=t=>{if(void 0===t._qwikjson_){let n=(t===e.documentElement?e.body:t).lastElementChild;for(;n;){if("SCRIPT"===n.tagName&&"qwik/json"===n.getAttribute("type")){t._qwikjson_=JSON.parse(n.textContent.replace(/\\\\x3C(\\/?script)/gi,"<$1"));break}n=n.previousElementSibling}}},_=e=>{h[e]=1,I(l)},k=t=>{const n=t.getAttribute("q:instance");return"paused"===t.getAttribute("q:container")&&"loading"===e.readyState&&!h[n]&&new Promise(t=>{w(e,l,()=>{("loading"!==e.readyState||h[n])&&t()})})},$=(e,t)=>new CustomEvent(e,{detail:t}),I=(t,n)=>{e.dispatchEvent($(t,n))},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=(t,n,r,o,s,i,a,c=!0)=>{const l={qBase:r,symbol:i,element:n,reqTime:a};if(!s){const n=(e["qFuncs_"+t.getAttribute("q:instance")]||[])[+i];if(!n&&c){const e=Error("sym:"+i);I("qerror",{importError:"sync",error:e,...l}),console.error(e)}return n}const p=`${i}|${r}|${s}`,u=f.get(p);if(u)return u;const d=new URL(s,o).href,h=import(d);return S(t),h.then(e=>{const t=e[i];if(t)f.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=(t,n,r,o,s,i=!0)=>{let a=!1;s&&(i&&t.hasAttribute("preventdefault:"+s)&&n.preventDefault(),t.hasAttribute("stoppropagation:"+s)&&n.stopPropagation());const c=t._qDispatch?.[r];if(c){if("function"==typeof c){const e=()=>c(n,t);if(a)o.push(async()=>{const t=e();A(t)&&await t});else{const t=e();A(t)&&(a=!0,o.push(()=>t))}}else if(c.length)for(let e=0;e<c.length;e++){const r=c[e];if(r){const e=()=>r(n,t);if(a)o.push(async()=>{const t=e();A(t)&&await t});else{const t=e();A(t)&&(a=!0,o.push(()=>t))}}}return}const l=t.getAttribute("q-"+r);if(l){const r=t.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])"),s=r.getAttribute("q:base"),i=new URL(s,e.baseURI),c=l.split("|"),p=k(r);for(let e=0;e<c.length;e++){const l=c[e],u=performance.now(),[d,f,h]=l.split("#"),q=e=>{if(e&&t.isConnected){const r=e=>{I("qerror",{error:e,qBase:s,symbol:f,element:t,reqTime:u})};try{const o=e.call(h,n,t);if(A(o))return o.catch(r)}catch(e){return r(e)}}},b=(e=!0)=>j(r,t,s,i,d,f,u,e),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=i,n=!0)=>{const r=N(e.type),o=t+":"+r,s=c+r,a=[],l=[],p=[];let u=e.target;for(;u;)L(u)?(a.push(u),l.push(U(u,o,s)),u=u.parentElement):u=u.parentElement;for(let t=a.length-1;t>=0;t--)if(l[t]&&(D(a[t],e,o,p,r,n),e.cancelBubble))return void C(p);for(let t=0;t<a.length;t++)if(!l[t]&&(D(a[t],e,o,p,r,n),!e.bubbles||e.cancelBubble))return void C(p);C(p)},P=e=>O(e,a,!1),F=(e,t,n=!0)=>{const r=N(t.type),o=e+":"+r,s=v("[q-"+e+"\\\\:"+r+"]"),i=[];for(let e=0;e<s.length;e++){const a=s[e];D(a,t,o,i,r,n)}C(i)},J=e=>{F(o,e)},M=e=>{F(s,e,!1)},Z=e=>{F(n,e)},z=e=>{F(r,e,!1)},G=()=>{const n=e.readyState;if("interactive"==n||"complete"==n){if(b=1,d.forEach(y),u.has("d:qinit")){u.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")}C(n)}if(u.has("d:qidle")&&(u.delete("d:qidle"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{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")}C(n)})),u.has("e:qvisible")){q||(q=new IntersectionObserver(e=>{const t=[];for(let n=0;n<e.length;n++){const r=e[n];r.isIntersecting&&(q.unobserve(r.target),D(r.target,$("qvisible",r),"e:qvisible",t))}C(t)}));const e=v("[q-e\\\\:qvisible]:not([q\\\\:observed])");for(let t=0;t<e.length;t++){const n=e[t];q.observe(n),n.setAttribute("q:observed","true")}}}},H=(...e)=>{for(let r=0;r<e.length;r++){const s=e[r];if(0===s)_(e[++r]);else if("string"==typeof s){if(!u.has(s)){u.add(s);const{scope:e,eventName:r}=T(s),i=x(e),a=B(e);a===n?w(t,r,i?z:Z,!0,i):d.forEach(e=>w(e,r,a===o?i?M:J:i?P:O,!0,i)),1!==b||"e:qvisible"!==s&&"d:qinit"!==s&&"d:qidle"!==s||G()}}else d.has(s)||(u.forEach(e=>{const{scope:t,eventName:r}=T(e),i=x(t),a=B(t);a!==n&&w(s,r,a===o?i?M:J:i?P:O,!0,i)}),d.add(s))}},K=t._qwikEv;K?.roots||(Array.isArray(K)?H(...K):H("e:click","e:input"),t._qwikEv={events:u,roots:d,push:H},w(e,l,G),G())';
|
|
1274
|
+
var QWIK_LOADER_DEFAULT_DEBUG = 'const doc = document;\nconst win = window;\nconst windowPrefix = "w";\nconst passiveWindowPrefix = "wp";\nconst documentPrefix = "d";\nconst passiveDocumentPrefix = "dp";\nconst elementPrefix = "e";\nconst passiveElementPrefix = "ep";\nconst capturePrefix = "capture:";\nconst readyStateChange = "readystatechange";\nconst QwikEvContainerReady = 0;\nconst events = /* @__PURE__ */ new Set();\nconst roots = /* @__PURE__ */ new Set([doc]);\nconst symbols = /* @__PURE__ */ new Map();\nconst readyContainers = {};\nlet observer;\nlet hasInitialized;\nlet queuedTasks;\nconst nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nconst querySelectorAll = (query) => {\n const elements = [];\n roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n return elements;\n};\nconst addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, { capture, passive });\nconst findShadowRoots = (fragment) => {\n addEventOrRoot(fragment);\n const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\\\:shadowroot]");\n for (let i = 0; i < shadowRoots.length; i++) {\n const parent = shadowRoots[i];\n const shadowRoot = parent.shadowRoot;\n shadowRoot && findShadowRoots(shadowRoot);\n }\n};\nconst isPromise = (promise) => promise && typeof promise.then === "function";\nconst runTasks = async (tasks) => {\n for (let i = 0; i < tasks.length; i++) {\n await tasks[i]();\n }\n};\nconst queueTasks = (tasks) => {\n if (tasks.length) {\n const run = () => runTasks(tasks);\n queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();\n }\n};\nconst resolveContainer = (containerEl) => {\n if (containerEl._qwikjson_ === void 0) {\n const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;\n let script = parentJSON.lastElementChild;\n while (script) {\n if (script.tagName === "SCRIPT" && script.getAttribute("type") === "qwik/json") {\n containerEl._qwikjson_ = JSON.parse(\n script.textContent.replace(/\\\\x3C(\\/?script)/gi, "<$1")\n );\n break;\n }\n script = script.previousElementSibling;\n }\n }\n};\nconst markContainerReady = (hash) => {\n readyContainers[hash] = 1;\n emitEvent(readyStateChange);\n};\nconst 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]) {\n resolve();\n }\n };\n addEventListener(doc, readyStateChange, ready);\n });\n};\nconst createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nconst emitEvent = (eventName, detail) => {\n doc.dispatchEvent(createEvent(eventName, detail));\n};\nconst camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());\nconst kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nconst parseKebabEvent = (event) => {\n const separatorIndex = event.indexOf(":");\n const scope = event.slice(0, separatorIndex);\n return {\n scope,\n eventName: kebabToCamel(event.slice(separatorIndex + 1))\n };\n};\nconst isPassiveScope = (scope) => scope.length === 2;\nconst getRootScope = (scope) => scope.charAt(0);\nconst isElementNode = (node) => !!node && node.nodeType === 1;\nconst isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute("q-" + scopedKebabName));\nconst resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime, reportSyncError = true) => {\n const eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n if (!chunk) {\n const handler2 = (doc["qFuncs_" + container.getAttribute("q:instance")] || [])[+symbol];\n if (!handler2 && reportSyncError) {\n const error = new Error("sym:" + symbol);\n emitEvent("qerror", {\n importError: "sync",\n error,\n ...eventData\n });\n console.error(error);\n }\n return handler2;\n }\n const key = `${symbol}|${qBase}|${chunk}`;\n const handler = symbols.get(key);\n if (handler) {\n return handler;\n }\n const href = new URL(chunk, base).href;\n const module = import(\n href\n );\n resolveContainer(container);\n return module.then(\n (module2) => {\n const handler2 = module2[symbol];\n if (!handler2) {\n const error = new Error(`${symbol} not in ${href}`);\n emitEvent("qerror", {\n importError: "no-symbol",\n error,\n ...eventData\n });\n console.error(error);\n } else {\n symbols.set(key, handler2);\n emitEvent("qsymbol", eventData);\n }\n return handler2;\n },\n (error) => {\n emitEvent("qerror", {\n importError: "async",\n error,\n ...eventData\n });\n console.error(error);\n return void 0;\n }\n );\n};\nconst dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {\n let defer = false;\n if (kebabName) {\n if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) {\n ev.preventDefault();\n }\n if (element.hasAttribute("stoppropagation:" + kebabName)) {\n ev.stopPropagation();\n }\n }\n const handlers = element._qDispatch?.[scopedKebabName];\n if (handlers) {\n if (typeof handlers === "function") {\n const run = () => handlers(ev, element);\n if (defer) {\n tasks.push(async () => {\n const result = run();\n if (isPromise(result)) {\n await result;\n }\n });\n } else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n } else if (handlers.length) {\n for (let i = 0; i < handlers.length; i++) {\n const handler = handlers[i];\n if (handler) {\n const run = () => handler(ev, element);\n if (defer) {\n tasks.push(async () => {\n const result = run();\n if (isPromise(result)) {\n await result;\n }\n });\n } else {\n const result = run();\n if (isPromise(result)) {\n defer = true;\n tasks.push(() => result);\n }\n }\n }\n }\n }\n return;\n }\n const attrValue = element.getAttribute("q-" + scopedKebabName);\n if (attrValue) {\n const container = element.closest(\n "[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])"\n );\n const qBase = container.getAttribute("q:base");\n const base = new URL(qBase, doc.baseURI);\n const qrls = attrValue.split("|");\n 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 = (handler2) => {\n if (handler2 && 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 = handler2.call(capturedIds, ev, element);\n if (isPromise(result)) {\n return result.catch(onError);\n }\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};\nconst processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + ":" + kebabName;\n const captureAttribute = capturePrefix + kebabName;\n const elements = [];\n const captureHandlers = [];\n const tasks = [];\n let current = ev.target;\n while (current) {\n if (isElementNode(current)) {\n elements.push(current);\n captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));\n current = current.parentElement;\n } else {\n current = current.parentElement;\n }\n }\n for (let i = elements.length - 1; i >= 0; i--) {\n if (captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n if (ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n }\n for (let i = 0; i < elements.length; i++) {\n if (!captureHandlers[i]) {\n dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n if (!ev.bubbles || ev.cancelBubble) {\n queueTasks(tasks);\n return;\n }\n }\n }\n queueTasks(tasks);\n};\nconst processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);\nconst broadcast = (scope, ev, allowPreventDefault = true) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = scope + ":" + kebabName;\n const elements = querySelectorAll("[q-" + scope + "\\\\:" + kebabName + "]");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n }\n queueTasks(tasks);\n};\nconst processDocumentEvent = (ev) => {\n broadcast(documentPrefix, ev);\n};\nconst processPassiveDocumentEvent = (ev) => {\n broadcast(passiveDocumentPrefix, ev, false);\n};\nconst processWindowEvent = (ev) => {\n broadcast(windowPrefix, ev);\n};\nconst processPassiveWindowEvent = (ev) => {\n broadcast(passiveWindowPrefix, ev, false);\n};\nconst processReadyStateChange = () => {\n const readyState = doc.readyState;\n if (readyState == "interactive" || readyState == "complete") {\n hasInitialized = 1;\n roots.forEach(findShadowRoots);\n if (events.has("d:qinit")) {\n events.delete("d:qinit");\n const ev = createEvent("qinit");\n const elements = querySelectorAll("[q-d\\\\:qinit]");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, "d:qinit", tasks);\n el.removeAttribute("q-d:qinit");\n }\n queueTasks(tasks);\n }\n if (events.has("d:qidle")) {\n events.delete("d:qidle");\n const riC = win.requestIdleCallback ?? win.setTimeout;\n riC.bind(win)(() => {\n const ev = createEvent("qidle");\n const elements = querySelectorAll("[q-d\\\\:qidle]");\n const tasks = [];\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, "d:qidle", tasks);\n el.removeAttribute("q-d:qidle");\n }\n queueTasks(tasks);\n });\n }\n if (events.has("e:qvisible")) {\n observer || (observer = new IntersectionObserver((entries) => {\n const tasks = [];\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n dispatch(\n entry.target,\n createEvent("qvisible", entry),\n "e:qvisible",\n tasks\n );\n }\n }\n queueTasks(tasks);\n }));\n const elements = querySelectorAll("[q-e\\\\:qvisible]:not([q\\\\:observed])");\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n observer.observe(el);\n el.setAttribute("q:observed", "true");\n }\n }\n }\n};\nconst addEventOrRoot = (...eventNames) => {\n for (let i = 0; i < eventNames.length; i++) {\n const eventNameOrRoot = eventNames[i];\n if (eventNameOrRoot === QwikEvContainerReady) {\n 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) {\n addEventListener(\n win,\n eventName,\n passive ? processPassiveWindowEvent : processWindowEvent,\n true,\n passive\n );\n } else {\n roots.forEach(\n (root) => addEventListener(\n root,\n eventName,\n rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,\n true,\n passive\n )\n );\n }\n if (hasInitialized === 1 && (eventNameOrRoot === "e:qvisible" || eventNameOrRoot === "d:qinit" || eventNameOrRoot === "d:qidle")) {\n processReadyStateChange();\n }\n }\n } else {\n if (!roots.has(eventNameOrRoot)) {\n events.forEach((kebabEventName) => {\n const { scope, eventName } = parseKebabEvent(kebabEventName);\n const passive = isPassiveScope(scope);\n const rootScope = getRootScope(scope);\n if (rootScope !== windowPrefix) {\n addEventListener(\n eventNameOrRoot,\n eventName,\n rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,\n true,\n passive\n );\n }\n });\n roots.add(eventNameOrRoot);\n }\n }\n }\n};\nconst _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n if (Array.isArray(_qwikEv)) {\n addEventOrRoot(..._qwikEv);\n } else {\n addEventOrRoot("e:click", "e:input");\n }\n win._qwikEv = {\n events,\n roots,\n push: addEventOrRoot\n };\n addEventListener(doc, readyStateChange, processReadyStateChange);\n processReadyStateChange();\n}';
|
|
1263
1275
|
var QWIK_BACKPATCH_EXECUTOR_MINIFIED = `const 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 s=c;null==l||!1===l?s.removeAttribute(r):("boolean"==typeof l&&(l=""),s.setAttribute(r,l))}}}}const n=document.currentScript;if(n){const t=n.closest("[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])");t&&e(document,t)}`;
|
|
1264
1276
|
var QWIK_BACKPATCH_EXECUTOR_DEBUG = `const BACKPATCH_DATA_SELECTOR = 'script[type="qwik/backpatch"]';
|
|
1265
1277
|
function executeBackpatch(doc, containerElement) {
|
|
@@ -1679,6 +1691,10 @@ var renderSSRChunks = (chunks, remap) => {
|
|
|
1679
1691
|
const chunk = chunks[i];
|
|
1680
1692
|
if (typeof chunk === "string") {
|
|
1681
1693
|
out += chunk;
|
|
1694
|
+
} else if (chunk.type === "root-ref-delta") {
|
|
1695
|
+
const id = remap ? remap[chunk.localId] ?? chunk.localId : chunk.localId;
|
|
1696
|
+
const base2 = remap ? remap[chunk.localBaseId] ?? chunk.localBaseId : chunk.localBaseId;
|
|
1697
|
+
out += String(id - base2);
|
|
1682
1698
|
} else {
|
|
1683
1699
|
const localId = chunk.type === "root-ref" ? chunk.localId : chunk.localPath[0];
|
|
1684
1700
|
out += String(remap ? remap[localId] ?? localId : localId);
|
|
@@ -1704,6 +1720,9 @@ var StringSSRWriter = class {
|
|
|
1704
1720
|
writeRootRefPath(path) {
|
|
1705
1721
|
writeStringRootRefPath(this, path);
|
|
1706
1722
|
}
|
|
1723
|
+
writeRootRefDelta(id, base2) {
|
|
1724
|
+
writeStringRootRefDelta(this, id, base2);
|
|
1725
|
+
}
|
|
1707
1726
|
clear() {
|
|
1708
1727
|
this.buffer.length = 0;
|
|
1709
1728
|
}
|
|
@@ -1722,6 +1741,9 @@ var StringBufferSegmentWriter = class {
|
|
|
1722
1741
|
writeRootRefPath(path) {
|
|
1723
1742
|
this.chunks.push({ type: "root-ref-path", localPath: path });
|
|
1724
1743
|
}
|
|
1744
|
+
writeRootRefDelta(id, base2) {
|
|
1745
|
+
this.chunks.push({ type: "root-ref-delta", localId: id, localBaseId: base2 });
|
|
1746
|
+
}
|
|
1725
1747
|
clear() {
|
|
1726
1748
|
this.chunks.length = 0;
|
|
1727
1749
|
}
|
|
@@ -2077,7 +2099,7 @@ function getBuildBase(opts) {
|
|
|
2077
2099
|
return `${import.meta.env?.BASE_URL || "/"}build/`;
|
|
2078
2100
|
}
|
|
2079
2101
|
var versions = {
|
|
2080
|
-
qwik: "2.0.0-beta.
|
|
2102
|
+
qwik: "2.0.0-beta.38-dev+0339f17",
|
|
2081
2103
|
qwikDom: "2.1.19"
|
|
2082
2104
|
};
|
|
2083
2105
|
|
|
@@ -2177,6 +2199,7 @@ function encodeAsAlphanumeric(value) {
|
|
|
2177
2199
|
}
|
|
2178
2200
|
|
|
2179
2201
|
// packages/qwik/src/server/ssr-container.ts
|
|
2202
|
+
var VALID_ELEMENT_NAME = /^[A-Za-z][A-Za-z0-9._:-]*$/;
|
|
2180
2203
|
var NO_SCRIPT_HERE_ELEMENTS = /* @__PURE__ */ new Set([
|
|
2181
2204
|
"script",
|
|
2182
2205
|
"style",
|
|
@@ -2566,6 +2589,12 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2566
2589
|
containerAttributes[QLocaleAttr] = this.$locale$;
|
|
2567
2590
|
containerAttributes[QManifestHashAttr] = this.resolvedManifest.manifest.manifestHash;
|
|
2568
2591
|
containerAttributes[QInstanceAttr] = this.$instanceHash$;
|
|
2592
|
+
const statePrewarm = this.renderOptions.statePrewarm;
|
|
2593
|
+
if (typeof statePrewarm === "number") {
|
|
2594
|
+
containerAttributes[QStatePrewarmAttr] = String(statePrewarm);
|
|
2595
|
+
} else {
|
|
2596
|
+
delete containerAttributes[QStatePrewarmAttr];
|
|
2597
|
+
}
|
|
2569
2598
|
this.$serverData$.containerAttributes = containerAttributes;
|
|
2570
2599
|
this.openElement(this.tag, null, containerAttributes);
|
|
2571
2600
|
if (!this.isHtml) {
|
|
@@ -2579,6 +2608,9 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2579
2608
|
$noScriptHere$ = 0;
|
|
2580
2609
|
/** Renders opening tag for DOM element */
|
|
2581
2610
|
openElement(elementName, key, varAttrs, constAttrs = null, styleScopedId = null, currentFile = null, hasMovedCaptures = true) {
|
|
2611
|
+
if (!VALID_ELEMENT_NAME.test(elementName)) {
|
|
2612
|
+
throw qError(36 /* invalidElementName */, [JSON.stringify(elementName)]);
|
|
2613
|
+
}
|
|
2582
2614
|
const isQwikStyle = isQwikStyleElement(elementName, varAttrs) || isQwikStyleElement(elementName, constAttrs);
|
|
2583
2615
|
if (NO_SCRIPT_HERE_ELEMENTS.has(elementName)) {
|
|
2584
2616
|
this.$noScriptHere$++;
|
|
@@ -2617,7 +2649,9 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2617
2649
|
}
|
|
2618
2650
|
this.write(" " + Q_PROPS_SEPARATOR);
|
|
2619
2651
|
if (key !== null) {
|
|
2620
|
-
this.write(
|
|
2652
|
+
this.write(ATTR_EQUALS_QUOTE);
|
|
2653
|
+
this.write(escapeHTML(key));
|
|
2654
|
+
this.write(QUOTE);
|
|
2621
2655
|
} else if (qTest) {
|
|
2622
2656
|
this.write(EMPTY_ATTR);
|
|
2623
2657
|
}
|
|
@@ -2895,7 +2929,6 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
2895
2929
|
this.emitPatchDataIfNeeded();
|
|
2896
2930
|
this.emitExecutorIfNeeded();
|
|
2897
2931
|
this.emitQwikLoaderAtBottomIfNeeded();
|
|
2898
|
-
this.emitContainerReadyEventIfNeeded();
|
|
2899
2932
|
}
|
|
2900
2933
|
emitDelayedOutOfOrderSegmentVNodeData() {
|
|
2901
2934
|
if (!__EXPERIMENTAL__.suspense || !this.outOfOrderStreaming || !this.outOfOrderUsed) {
|
|
@@ -3091,6 +3124,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3091
3124
|
this.write(VNodeDataChar.CONTEXT_CHAR);
|
|
3092
3125
|
break;
|
|
3093
3126
|
case QSlot:
|
|
3127
|
+
encodeValue = encodeVNodeDataKey;
|
|
3094
3128
|
this.write(VNodeDataChar.SLOT_CHAR);
|
|
3095
3129
|
break;
|
|
3096
3130
|
default: {
|
|
@@ -3114,7 +3148,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3114
3148
|
}
|
|
3115
3149
|
}
|
|
3116
3150
|
emitStateData() {
|
|
3117
|
-
if (!this.serializationCtx.$roots$.length) {
|
|
3151
|
+
if (!this.serializationCtx.$roots$.length && !this.serializationCtx.$eagerResume$.size) {
|
|
3118
3152
|
return;
|
|
3119
3153
|
}
|
|
3120
3154
|
const attrs = this.stateScriptAttrs();
|
|
@@ -3181,7 +3215,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3181
3215
|
if (this.renderOptions.serverData?.nonce) {
|
|
3182
3216
|
scriptAttrs["nonce"] = this.renderOptions.serverData.nonce;
|
|
3183
3217
|
}
|
|
3184
|
-
this.writeScript(scriptAttrs, JSON.stringify(patches));
|
|
3218
|
+
this.writeScript(scriptAttrs, JSON.stringify(patches).replaceAll("<", "\\u003C"));
|
|
3185
3219
|
}
|
|
3186
3220
|
}
|
|
3187
3221
|
emitBackpatchDataAndExecutorIfNeeded() {
|
|
@@ -3220,14 +3254,6 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3220
3254
|
}
|
|
3221
3255
|
this.writeScript(scriptAttrs, script);
|
|
3222
3256
|
}
|
|
3223
|
-
emitContainerReadyEventIfNeeded() {
|
|
3224
|
-
if (!__EXPERIMENTAL__.suspense || !this.outOfOrderStreaming || !this.outOfOrderUsed) {
|
|
3225
|
-
return;
|
|
3226
|
-
}
|
|
3227
|
-
this.emitInlineScript(
|
|
3228
|
-
`document.qready||(document.qready={});document.qready["${this.$instanceHash$}"]=1;try{document.dispatchEvent(new CustomEvent("qready",{detail:"${this.$instanceHash$}"}))}catch(e){}`
|
|
3229
|
-
);
|
|
3230
|
-
}
|
|
3231
3257
|
writeScript(attrs, body) {
|
|
3232
3258
|
this.openScript(attrs);
|
|
3233
3259
|
if (body) {
|
|
@@ -3291,21 +3317,24 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3291
3317
|
if (this.qlInclude !== 2 /* Done */) {
|
|
3292
3318
|
this.emitQwikLoaderInline();
|
|
3293
3319
|
}
|
|
3294
|
-
this.emitNewQwikEvents();
|
|
3320
|
+
this.emitNewQwikEvents(true);
|
|
3295
3321
|
}
|
|
3296
3322
|
}
|
|
3297
|
-
emitNewQwikEvents() {
|
|
3298
|
-
const
|
|
3323
|
+
emitNewQwikEvents(includeContainerReady = false) {
|
|
3324
|
+
const qwikEventItems = [];
|
|
3299
3325
|
for (const eventName of this.serializationCtx.$eventNames$) {
|
|
3300
3326
|
if (!this.emittedQwikEventNames.has(eventName)) {
|
|
3301
3327
|
this.emittedQwikEventNames.add(eventName);
|
|
3302
|
-
|
|
3328
|
+
qwikEventItems.push(JSON.stringify(eventName));
|
|
3303
3329
|
}
|
|
3304
3330
|
}
|
|
3305
|
-
|
|
3331
|
+
if (includeContainerReady) {
|
|
3332
|
+
qwikEventItems.push(`${QwikEvContainerReady}`, JSON.stringify(this.$instanceHash$));
|
|
3333
|
+
}
|
|
3334
|
+
this.emitQwikEvents(qwikEventItems);
|
|
3306
3335
|
}
|
|
3307
|
-
emitQwikEvents(
|
|
3308
|
-
if (
|
|
3336
|
+
emitQwikEvents(qwikEventItems) {
|
|
3337
|
+
if (qwikEventItems.length > 0) {
|
|
3309
3338
|
const scriptAttrs = {};
|
|
3310
3339
|
const nonce = this.renderOptions.serverData?.nonce;
|
|
3311
3340
|
if (nonce) {
|
|
@@ -3313,7 +3342,7 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3313
3342
|
}
|
|
3314
3343
|
this.openScript(scriptAttrs);
|
|
3315
3344
|
this.write(`(window._qwikEv||(window._qwikEv=[])).push(`);
|
|
3316
|
-
this.writeArray(
|
|
3345
|
+
this.writeArray(qwikEventItems, COMMA);
|
|
3317
3346
|
this.write(PAREN_CLOSE);
|
|
3318
3347
|
this.closeScript();
|
|
3319
3348
|
}
|
|
@@ -3420,6 +3449,11 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3420
3449
|
this.size += 1 + String(path[i]).length;
|
|
3421
3450
|
}
|
|
3422
3451
|
}
|
|
3452
|
+
writeRootRefDelta(id, base2) {
|
|
3453
|
+
const delta = id - base2;
|
|
3454
|
+
this.size += String(delta).length;
|
|
3455
|
+
this.writer.writeRootRefDelta(id, base2);
|
|
3456
|
+
}
|
|
3423
3457
|
writeArray(array, separator) {
|
|
3424
3458
|
for (let i = 0; i < array.length; i++) {
|
|
3425
3459
|
const element = array[i];
|
|
@@ -3531,6 +3565,8 @@ var SSRContainer = class extends _SharedContainer {
|
|
|
3531
3565
|
this.write(escapeHTML(chunk));
|
|
3532
3566
|
} else if (typeof chunk === "number") {
|
|
3533
3567
|
this.writeRootRef(chunk);
|
|
3568
|
+
} else if ("base" in chunk) {
|
|
3569
|
+
this.writeRootRefDelta(chunk.id, chunk.base);
|
|
3534
3570
|
} else {
|
|
3535
3571
|
this.writeRootRefPath(chunk.path);
|
|
3536
3572
|
}
|