@qwik.dev/core 2.0.0-beta.31 → 2.0.0-beta.34

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.
@@ -1,19 +1,25 @@
1
1
  const doc = document;
2
2
  const win = window;
3
3
  const windowPrefix = "w";
4
+ const passiveWindowPrefix = "wp";
4
5
  const documentPrefix = "d";
6
+ const passiveDocumentPrefix = "dp";
7
+ const elementPrefix = "e";
8
+ const passiveElementPrefix = "ep";
9
+ const capturePrefix = "capture:";
5
10
  const events = /* @__PURE__ */ new Set();
6
11
  const roots = /* @__PURE__ */ new Set([doc]);
7
12
  const symbols = /* @__PURE__ */ new Map();
8
13
  let observer;
9
14
  let hasInitialized;
15
+ let queuedTasks;
10
16
  const nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));
11
17
  const querySelectorAll = (query) => {
12
18
  const elements = [];
13
19
  roots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));
14
20
  return elements;
15
21
  };
16
- const addEventListener = (el, eventName, handler, capture = false) => el.addEventListener(eventName, handler, { capture, passive: false });
22
+ const addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, { capture, passive });
17
23
  const findShadowRoots = (fragment) => {
18
24
  addEventOrRoot(fragment);
19
25
  const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\:shadowroot]");
@@ -24,6 +30,17 @@ const findShadowRoots = (fragment) => {
24
30
  }
25
31
  };
26
32
  const isPromise = (promise) => promise && typeof promise.then === "function";
33
+ const runTasks = async (tasks) => {
34
+ for (let i = 0; i < tasks.length; i++) {
35
+ await tasks[i]();
36
+ }
37
+ };
38
+ const queueTasks = (tasks) => {
39
+ if (tasks.length) {
40
+ const run = () => runTasks(tasks);
41
+ queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();
42
+ }
43
+ };
27
44
  const resolveContainer = (containerEl) => {
28
45
  if (containerEl._qwikjson_ === void 0) {
29
46
  const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;
@@ -45,13 +62,82 @@ const emitEvent = (eventName, detail) => {
45
62
  };
46
63
  const camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());
47
64
  const kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());
48
- const parseKebabEvent = (event) => ({
49
- scope: event.charAt(0),
50
- eventName: kebabToCamel(event.slice(2))
51
- });
52
- const dispatch = async (element, ev, scopedKebabName, kebabName) => {
65
+ const parseKebabEvent = (event) => {
66
+ const separatorIndex = event.indexOf(":");
67
+ const scope = event.slice(0, separatorIndex);
68
+ return {
69
+ scope,
70
+ eventName: kebabToCamel(event.slice(separatorIndex + 1))
71
+ };
72
+ };
73
+ const isPassiveScope = (scope) => scope.length === 2;
74
+ const getRootScope = (scope) => scope.charAt(0);
75
+ const isElementNode = (node) => !!node && node.nodeType === 1;
76
+ const isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute("q-" + scopedKebabName));
77
+ const resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime) => {
78
+ const eventData = {
79
+ qBase,
80
+ symbol,
81
+ element,
82
+ reqTime
83
+ };
84
+ if (chunk === "") {
85
+ const hash = container.getAttribute("q:instance");
86
+ const handler2 = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];
87
+ if (!handler2) {
88
+ const error = new Error("sym:" + symbol);
89
+ emitEvent("qerror", {
90
+ importError: "sync",
91
+ error,
92
+ ...eventData
93
+ });
94
+ console.error(error);
95
+ }
96
+ return handler2;
97
+ }
98
+ const key = `${symbol}|${qBase}|${chunk}`;
99
+ const handler = symbols.get(key);
100
+ if (handler) {
101
+ return handler;
102
+ }
103
+ const href = new URL(chunk, base).href;
104
+ const module = import(
105
+ /* @vite-ignore */
106
+ href
107
+ );
108
+ resolveContainer(container);
109
+ return module.then(
110
+ (module2) => {
111
+ const handler2 = module2[symbol];
112
+ if (!handler2) {
113
+ const error = new Error(`${symbol} not in ${href}`);
114
+ emitEvent("qerror", {
115
+ importError: "no-symbol",
116
+ error,
117
+ ...eventData
118
+ });
119
+ console.error(error);
120
+ } else {
121
+ symbols.set(key, handler2);
122
+ emitEvent("qsymbol", eventData);
123
+ }
124
+ return handler2;
125
+ },
126
+ (error) => {
127
+ emitEvent("qerror", {
128
+ importError: "async",
129
+ error,
130
+ ...eventData
131
+ });
132
+ console.error(error);
133
+ return void 0;
134
+ }
135
+ );
136
+ };
137
+ const dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {
138
+ let defer = false;
53
139
  if (kebabName) {
54
- if (element.hasAttribute("preventdefault:" + kebabName)) {
140
+ if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) {
55
141
  ev.preventDefault();
56
142
  }
57
143
  if (element.hasAttribute("stoppropagation:" + kebabName)) {
@@ -61,16 +147,40 @@ const dispatch = async (element, ev, scopedKebabName, kebabName) => {
61
147
  const handlers = element._qDispatch?.[scopedKebabName];
62
148
  if (handlers) {
63
149
  if (typeof handlers === "function") {
64
- const result = handlers(ev, element);
65
- if (isPromise(result)) {
66
- await result;
150
+ const run = () => handlers(ev, element);
151
+ if (defer) {
152
+ tasks.push(async () => {
153
+ const result = run();
154
+ if (isPromise(result)) {
155
+ await result;
156
+ }
157
+ });
158
+ } else {
159
+ const result = run();
160
+ if (isPromise(result)) {
161
+ defer = true;
162
+ tasks.push(() => result);
163
+ }
67
164
  }
68
165
  } else if (handlers.length) {
69
166
  for (let i = 0; i < handlers.length; i++) {
70
167
  const handler = handlers[i];
71
- const result = handler?.(ev, element);
72
- if (isPromise(result)) {
73
- await result;
168
+ if (handler) {
169
+ const run = () => handler(ev, element);
170
+ if (defer) {
171
+ tasks.push(async () => {
172
+ const result = run();
173
+ if (isPromise(result)) {
174
+ await result;
175
+ }
176
+ });
177
+ } else {
178
+ const result = run();
179
+ if (isPromise(result)) {
180
+ defer = true;
181
+ tasks.push(() => result);
182
+ }
183
+ }
74
184
  }
75
185
  }
76
186
  }
@@ -88,97 +198,111 @@ const dispatch = async (element, ev, scopedKebabName, kebabName) => {
88
198
  const qrl = qrls[i];
89
199
  const reqTime = performance.now();
90
200
  const [chunk, symbol, capturedIds] = qrl.split("#");
91
- const eventData = {
92
- qBase,
93
- symbol,
94
- element,
95
- reqTime
96
- };
97
- let handler;
98
- let importError;
99
- let error;
100
- if (chunk === "") {
101
- const hash = container.getAttribute("q:instance");
102
- handler = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];
103
- if (!handler) {
104
- importError = "sync";
105
- error = new Error("sym:" + symbol);
106
- }
107
- } else {
108
- const key = `${symbol}|${qBase}|${chunk}`;
109
- handler = symbols.get(key);
110
- if (!handler) {
111
- const href = new URL(chunk, base).href;
201
+ const run = (handler2) => {
202
+ if (handler2 && element.isConnected) {
112
203
  try {
113
- const module = import(
114
- /* @vite-ignore */
115
- href
116
- );
117
- resolveContainer(container);
118
- handler = (await module)[symbol];
119
- if (!handler) {
120
- importError = "no-symbol";
121
- error = new Error(`${symbol} not in ${href}`);
122
- } else {
123
- symbols.set(key, handler);
124
- emitEvent("qsymbol", eventData);
204
+ const result = handler2.call(capturedIds, ev, element);
205
+ if (isPromise(result)) {
206
+ return result.catch((error) => {
207
+ emitEvent("qerror", {
208
+ error,
209
+ qBase,
210
+ symbol,
211
+ element,
212
+ reqTime
213
+ });
214
+ });
125
215
  }
126
- } catch (err) {
127
- importError = "async";
128
- error = err;
216
+ } catch (error) {
217
+ emitEvent("qerror", {
218
+ error,
219
+ qBase,
220
+ symbol,
221
+ element,
222
+ reqTime
223
+ });
129
224
  }
130
225
  }
131
- }
132
- if (!handler) {
133
- emitEvent("qerror", {
134
- importError,
135
- error,
136
- ...eventData
226
+ };
227
+ const handler = resolveHandler(container, element, qBase, base, chunk, symbol, reqTime);
228
+ if (defer || isPromise(handler)) {
229
+ defer = true;
230
+ tasks.push(async () => {
231
+ await run(isPromise(handler) ? await handler : handler);
137
232
  });
138
- console.error(error);
139
- continue;
140
- }
141
- if (element.isConnected) {
142
- try {
143
- const result = handler.call(capturedIds, ev, element);
144
- if (isPromise(result)) {
145
- await result;
146
- }
147
- } catch (error2) {
148
- emitEvent("qerror", { error: error2, ...eventData });
233
+ } else {
234
+ const result = run(handler);
235
+ if (isPromise(result)) {
236
+ defer = true;
237
+ tasks.push(() => result);
149
238
  }
150
239
  }
151
240
  }
152
241
  }
153
242
  };
154
- const processElementEvent = async (ev) => {
243
+ const processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {
155
244
  const kebabName = camelToKebab(ev.type);
156
- const scopedKebabName = "e:" + kebabName;
157
- let element = ev.target;
158
- while (element && element.getAttribute) {
159
- const results = dispatch(element, ev, scopedKebabName, kebabName);
160
- const doBubble = ev.bubbles && !ev.cancelBubble;
161
- if (isPromise(results)) {
162
- await results;
245
+ const scopedKebabName = scope + ":" + kebabName;
246
+ const captureAttribute = capturePrefix + kebabName;
247
+ const elements = [];
248
+ const captureHandlers = [];
249
+ const tasks = [];
250
+ let current = ev.target;
251
+ while (current) {
252
+ if (isElementNode(current)) {
253
+ elements.push(current);
254
+ captureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));
255
+ current = current.parentElement;
256
+ } else {
257
+ current = current.parentElement;
163
258
  }
164
- element = doBubble && ev.bubbles && !ev.cancelBubble ? element.parentElement : null;
165
259
  }
260
+ for (let i = elements.length - 1; i >= 0; i--) {
261
+ if (captureHandlers[i]) {
262
+ dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
263
+ const continuePropagation = !ev.cancelBubble;
264
+ if (!continuePropagation || ev.cancelBubble) {
265
+ queueTasks(tasks);
266
+ return;
267
+ }
268
+ }
269
+ }
270
+ for (let i = 0; i < elements.length; i++) {
271
+ if (!captureHandlers[i]) {
272
+ dispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
273
+ const doBubble = ev.bubbles && !ev.cancelBubble;
274
+ if (!doBubble || ev.cancelBubble) {
275
+ queueTasks(tasks);
276
+ return;
277
+ }
278
+ }
279
+ }
280
+ queueTasks(tasks);
166
281
  };
167
- const broadcast = (infix, ev) => {
282
+ const processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);
283
+ const broadcast = (scope, ev, allowPreventDefault = true) => {
168
284
  const kebabName = camelToKebab(ev.type);
169
- const scopedKebabName = infix + ":" + kebabName;
170
- const elements = querySelectorAll("[q-" + infix + "\\:" + kebabName + "]");
285
+ const scopedKebabName = scope + ":" + kebabName;
286
+ const elements = querySelectorAll("[q-" + scope + "\\:" + kebabName + "]");
287
+ const tasks = [];
171
288
  for (let i = 0; i < elements.length; i++) {
172
289
  const el = elements[i];
173
- dispatch(el, ev, scopedKebabName, kebabName);
290
+ dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
174
291
  }
292
+ queueTasks(tasks);
175
293
  };
176
- const processDocumentEvent = async (ev) => {
294
+ const processDocumentEvent = (ev) => {
177
295
  broadcast(documentPrefix, ev);
178
296
  };
297
+ const processPassiveDocumentEvent = (ev) => {
298
+ broadcast(passiveDocumentPrefix, ev, false);
299
+ };
179
300
  const processWindowEvent = (ev) => {
180
301
  broadcast(windowPrefix, ev);
181
302
  };
303
+ const processPassiveWindowEvent = (ev) => {
304
+ broadcast(passiveWindowPrefix, ev, false);
305
+ };
182
306
  const processReadyStateChange = () => {
183
307
  const readyState = doc.readyState;
184
308
  if (readyState == "interactive" || readyState == "complete") {
@@ -188,11 +312,13 @@ const processReadyStateChange = () => {
188
312
  events.delete("d:qinit");
189
313
  const ev = createEvent("qinit");
190
314
  const elements = querySelectorAll("[q-d\\:qinit]");
315
+ const tasks = [];
191
316
  for (let i = 0; i < elements.length; i++) {
192
317
  const el = elements[i];
193
- dispatch(el, ev, "d:qinit");
318
+ dispatch(el, ev, "d:qinit", tasks);
194
319
  el.removeAttribute("q-d:qinit");
195
320
  }
321
+ queueTasks(tasks);
196
322
  }
197
323
  if (events.has("d:qidle")) {
198
324
  events.delete("d:qidle");
@@ -200,22 +326,31 @@ const processReadyStateChange = () => {
200
326
  riC.bind(win)(() => {
201
327
  const ev = createEvent("qidle");
202
328
  const elements = querySelectorAll("[q-d\\:qidle]");
329
+ const tasks = [];
203
330
  for (let i = 0; i < elements.length; i++) {
204
331
  const el = elements[i];
205
- dispatch(el, ev, "d:qidle");
332
+ dispatch(el, ev, "d:qidle", tasks);
206
333
  el.removeAttribute("q-d:qidle");
207
334
  }
335
+ queueTasks(tasks);
208
336
  });
209
337
  }
210
338
  if (events.has("e:qvisible")) {
211
339
  observer || (observer = new IntersectionObserver((entries) => {
340
+ const tasks = [];
212
341
  for (let i = 0; i < entries.length; i++) {
213
342
  const entry = entries[i];
214
343
  if (entry.isIntersecting) {
215
344
  observer.unobserve(entry.target);
216
- dispatch(entry.target, createEvent("qvisible", entry), "e:qvisible");
345
+ dispatch(
346
+ entry.target,
347
+ createEvent("qvisible", entry),
348
+ "e:qvisible",
349
+ tasks
350
+ );
217
351
  }
218
352
  }
353
+ queueTasks(tasks);
219
354
  }));
220
355
  const elements = querySelectorAll("[q-e\\:qvisible]:not([q\\:observed])");
221
356
  for (let i = 0; i < elements.length; i++) {
@@ -233,15 +368,24 @@ const addEventOrRoot = (...eventNames) => {
233
368
  if (!events.has(eventNameOrRoot)) {
234
369
  events.add(eventNameOrRoot);
235
370
  const { scope, eventName } = parseKebabEvent(eventNameOrRoot);
236
- if (scope === windowPrefix) {
237
- addEventListener(win, eventName, processWindowEvent, true);
371
+ const passive = isPassiveScope(scope);
372
+ const rootScope = getRootScope(scope);
373
+ if (rootScope === windowPrefix) {
374
+ addEventListener(
375
+ win,
376
+ eventName,
377
+ passive ? processPassiveWindowEvent : processWindowEvent,
378
+ true,
379
+ passive
380
+ );
238
381
  } else {
239
382
  roots.forEach(
240
383
  (root) => addEventListener(
241
384
  root,
242
385
  eventName,
243
- scope === documentPrefix ? processDocumentEvent : processElementEvent,
244
- true
386
+ rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
387
+ true,
388
+ passive
245
389
  )
246
390
  );
247
391
  }
@@ -253,12 +397,15 @@ const addEventOrRoot = (...eventNames) => {
253
397
  if (!roots.has(eventNameOrRoot)) {
254
398
  events.forEach((kebabEventName) => {
255
399
  const { scope, eventName } = parseKebabEvent(kebabEventName);
256
- if (scope !== windowPrefix) {
400
+ const passive = isPassiveScope(scope);
401
+ const rootScope = getRootScope(scope);
402
+ if (rootScope !== windowPrefix) {
257
403
  addEventListener(
258
404
  eventNameOrRoot,
259
405
  eventName,
260
- scope === documentPrefix ? processDocumentEvent : processElementEvent,
261
- true
406
+ rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
407
+ true,
408
+ passive
262
409
  );
263
410
  }
264
411
  });
@@ -1 +1 @@
1
- const e=document,t=window,n="w",o="d",r=new Set,s=new Set([e]),i=new Map;let a,c;const l=(e,t)=>Array.from(e.querySelectorAll(t)),q=e=>{const t=[];return s.forEach(n=>t.push(...l(n,e))),t},d=(e,t,n,o=!1)=>e.addEventListener(t,n,{capture:o,passive:!1}),b=e=>{_(e);const t=l(e,"[q\\:shadowroot]");for(let e=0;e<t.length;e++){const n=t[e].shadowRoot;n&&b(n)}},f=e=>e&&"function"==typeof e.then,p=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}}},u=(e,t)=>new CustomEvent(e,{detail:t}),h=(t,n)=>{e.dispatchEvent(u(t,n))},g=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),m=e=>e.replace(/-./g,e=>e[1].toUpperCase()),v=e=>({scope:e.charAt(0),eventName:m(e.slice(2))}),w=async(t,n,o,r)=>{r&&(t.hasAttribute("preventdefault:"+r)&&n.preventDefault(),t.hasAttribute("stoppropagation:"+r)&&n.stopPropagation());const s=t._qDispatch?.[o];if(s){if("function"==typeof s){const e=s(n,t);f(e)&&await e}else if(s.length)for(let e=0;e<s.length;e++){const o=s[e],r=o?.(n,t);f(r)&&await r}return}const a=t.getAttribute("q-"+o);if(a){const o=t.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"),r=o.getAttribute("q:base"),s=new URL(r,e.baseURI),c=a.split("|");for(let a=0;a<c.length;a++){const l=c[a],q=performance.now(),[d,b,u]=l.split("#"),g={qBase:r,symbol:b,element:t,reqTime:q};let m,v,w;if(""===d){const t=o.getAttribute("q:instance");m=(e["qFuncs_"+t]||[])[Number.parseInt(b)],m||(v="sync",w=Error("sym:"+b))}else{const e=`${b}|${r}|${d}`;if(m=i.get(e),!m){const t=new URL(d,s).href;try{const n=import(t);p(o),m=(await n)[b],m?(i.set(e,m),h("qsymbol",g)):(v="no-symbol",w=Error(`${b} not in ${t}`))}catch(e){v="async",w=e}}}if(m){if(t.isConnected)try{const e=m.call(u,n,t);f(e)&&await e}catch(e){h("qerror",{error:e,...g})}}else h("qerror",{importError:v,error:w,...g}),console.error(w)}}},y=async e=>{const t=g(e.type),n="e:"+t;let o=e.target;for(;o&&o.getAttribute;){const r=w(o,e,n,t),s=e.bubbles&&!e.cancelBubble;f(r)&&await r,o=s&&e.bubbles&&!e.cancelBubble?o.parentElement:null}},A=(e,t)=>{const n=g(t.type),o=e+":"+n,r=q("[q-"+e+"\\:"+n+"]");for(let e=0;e<r.length;e++){const s=r[e];w(s,t,o,n)}},E=async e=>{A(o,e)},C=e=>{A(n,e)},k=()=>{const n=e.readyState;if("interactive"==n||"complete"==n){if(c=1,s.forEach(b),r.has("d:qinit")){r.delete("d:qinit");const e=u("qinit"),t=q("[q-d\\:qinit]");for(let n=0;n<t.length;n++){const o=t[n];w(o,e,"d:qinit"),o.removeAttribute("q-d:qinit")}}if(r.has("d:qidle")&&(r.delete("d:qidle"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{const e=u("qidle"),t=q("[q-d\\:qidle]");for(let n=0;n<t.length;n++){const o=t[n];w(o,e,"d:qidle"),o.removeAttribute("q-d:qidle")}})),r.has("e:qvisible")){a||(a=new IntersectionObserver(e=>{for(let t=0;t<e.length;t++){const n=e[t];n.isIntersecting&&(a.unobserve(n.target),w(n.target,u("qvisible",n),"e:qvisible"))}}));const e=q("[q-e\\:qvisible]:not([q\\:observed])");for(let t=0;t<e.length;t++){const n=e[t];a.observe(n),n.setAttribute("q:observed","true")}}}},_=(...e)=>{for(let i=0;i<e.length;i++){const a=e[i];if("string"==typeof a){if(!r.has(a)){r.add(a);const{scope:e,eventName:i}=v(a);e===n?d(t,i,C,!0):s.forEach(t=>d(t,i,e===o?E:y,!0)),1!==c||"e:qvisible"!==a&&"d:qinit"!==a&&"d:qidle"!==a||k()}}else s.has(a)||(r.forEach(e=>{const{scope:t,eventName:r}=v(e);t!==n&&d(a,r,t===o?E:y,!0)}),s.add(a))}},S=t._qwikEv;S?.roots||(Array.isArray(S)?_(...S):_("e:click","e:input"),t._qwikEv={events:r,roots:s,push:_},d(e,"readystatechange",k),k());
1
+ const e=document,t=window,r="w",n="wp",o="d",s="dp",i="e",c="ep",l="capture:",a=new Set,p=new Set([e]),q=new Map;let u,f,h;const d=(e,t)=>Array.from(e.querySelectorAll(t)),b=e=>{const t=[];return p.forEach(r=>t.push(...d(r,e))),t},m=(e,t,r,n=!1,o=!1)=>e.addEventListener(t,r,{capture:n,passive:o}),g=e=>{J(e);const t=d(e,"[q\\:shadowroot]");for(let e=0;e<t.length;e++){const r=t[e].shadowRoot;r&&g(r)}},v=e=>e&&"function"==typeof e.then,y=async e=>{for(let t=0;t<e.length;t++)await e[t]()},w=e=>{if(e.length){const t=()=>y(e);h=h?h.then(t,t):t()}},E=t=>{if(void 0===t._qwikjson_){let r=(t===e.documentElement?e.body:t).lastElementChild;for(;r;){if("SCRIPT"===r.tagName&&"qwik/json"===r.getAttribute("type")){t._qwikjson_=JSON.parse(r.textContent.replace(/\\x3C(\/?script)/gi,"<$1"));break}r=r.previousElementSibling}}},A=(e,t)=>new CustomEvent(e,{detail:t}),C=(t,r)=>{e.dispatchEvent(A(t,r))},_=e=>e.replace(/([A-Z-])/g,e=>"-"+e.toLowerCase()),k=e=>e.replace(/-./g,e=>e[1].toUpperCase()),B=e=>{const t=e.indexOf(":");return{scope:e.slice(0,t),eventName:k(e.slice(t+1))}},S=e=>2===e.length,I=e=>e.charAt(0),N=e=>!!e&&1===e.nodeType,T=(e,t,r)=>e.hasAttribute(r)&&(!!e._qDispatch?.[t]||e.hasAttribute("q-"+t)),$=(t,r,n,o,s,i,c)=>{const l={qBase:n,symbol:i,element:r,reqTime:c};if(""===s){const r=t.getAttribute("q:instance"),n=(e["qFuncs_"+r]||[])[Number.parseInt(i)];if(!n){const e=Error("sym:"+i);C("qerror",{importError:"sync",error:e,...l}),console.error(e)}return n}const a=`${i}|${n}|${s}`,p=q.get(a);if(p)return p;const u=new URL(s,o).href,f=import(u);return E(t),f.then(e=>{const t=e[i];if(t)q.set(a,t),C("qsymbol",l);else{const e=Error(`${i} not in ${u}`);C("qerror",{importError:"no-symbol",error:e,...l}),console.error(e)}return t},e=>{C("qerror",{importError:"async",error:e,...l}),console.error(e)})},R=(t,r,n,o,s,i=!0)=>{let c=!1;s&&(i&&t.hasAttribute("preventdefault:"+s)&&r.preventDefault(),t.hasAttribute("stoppropagation:"+s)&&r.stopPropagation());const l=t._qDispatch?.[n];if(l){if("function"==typeof l){const e=()=>l(r,t);if(c)o.push(async()=>{const t=e();v(t)&&await t});else{const t=e();v(t)&&(c=!0,o.push(()=>t))}}else if(l.length)for(let e=0;e<l.length;e++){const n=l[e];if(n){const e=()=>n(r,t);if(c)o.push(async()=>{const t=e();v(t)&&await t});else{const t=e();v(t)&&(c=!0,o.push(()=>t))}}}return}const a=t.getAttribute("q-"+n);if(a){const n=t.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"),s=n.getAttribute("q:base"),i=new URL(s,e.baseURI),l=a.split("|");for(let e=0;e<l.length;e++){const a=l[e],p=performance.now(),[q,u,f]=a.split("#"),h=e=>{if(e&&t.isConnected)try{const n=e.call(f,r,t);if(v(n))return n.catch(e=>{C("qerror",{error:e,qBase:s,symbol:u,element:t,reqTime:p})})}catch(e){C("qerror",{error:e,qBase:s,symbol:u,element:t,reqTime:p})}},d=$(n,t,s,i,q,u,p);if(c||v(d))c=!0,o.push(async()=>{await h(v(d)?await d:d)});else{const e=h(d);v(e)&&(c=!0,o.push(()=>e))}}}},x=(e,t=i,r=!0)=>{const n=_(e.type),o=t+":"+n,s=l+n,c=[],a=[],p=[];let q=e.target;for(;q;)N(q)?(c.push(q),a.push(T(q,o,s)),q=q.parentElement):q=q.parentElement;for(let t=c.length-1;t>=0;t--)if(a[t]&&(R(c[t],e,o,p,n,r),e.cancelBubble||e.cancelBubble))return void w(p);for(let t=0;t<c.length;t++)if(!a[t]&&(R(c[t],e,o,p,n,r),!e.bubbles||e.cancelBubble||e.cancelBubble))return void w(p);w(p)},L=e=>x(e,c,!1),U=(e,t,r=!0)=>{const n=_(t.type),o=e+":"+n,s=b("[q-"+e+"\\:"+n+"]"),i=[];for(let e=0;e<s.length;e++){const c=s[e];R(c,t,o,i,n,r)}w(i)},j=e=>{U(o,e)},D=e=>{U(s,e,!1)},O=e=>{U(r,e)},P=e=>{U(n,e,!1)},F=()=>{const r=e.readyState;if("interactive"==r||"complete"==r){if(f=1,p.forEach(g),a.has("d:qinit")){a.delete("d:qinit");const e=A("qinit"),t=b("[q-d\\:qinit]"),r=[];for(let n=0;n<t.length;n++){const o=t[n];R(o,e,"d:qinit",r),o.removeAttribute("q-d:qinit")}w(r)}if(a.has("d:qidle")&&(a.delete("d:qidle"),(t.requestIdleCallback??t.setTimeout).bind(t)(()=>{const e=A("qidle"),t=b("[q-d\\:qidle]"),r=[];for(let n=0;n<t.length;n++){const o=t[n];R(o,e,"d:qidle",r),o.removeAttribute("q-d:qidle")}w(r)})),a.has("e:qvisible")){u||(u=new IntersectionObserver(e=>{const t=[];for(let r=0;r<e.length;r++){const n=e[r];n.isIntersecting&&(u.unobserve(n.target),R(n.target,A("qvisible",n),"e:qvisible",t))}w(t)}));const e=b("[q-e\\:qvisible]:not([q\\:observed])");for(let t=0;t<e.length;t++){const r=e[t];u.observe(r),r.setAttribute("q:observed","true")}}}},J=(...e)=>{for(let n=0;n<e.length;n++){const s=e[n];if("string"==typeof s){if(!a.has(s)){a.add(s);const{scope:e,eventName:n}=B(s),i=S(e),c=I(e);c===r?m(t,n,i?P:O,!0,i):p.forEach(e=>m(e,n,c===o?i?D:j:i?L:x,!0,i)),1!==f||"e:qvisible"!==s&&"d:qinit"!==s&&"d:qidle"!==s||F()}}else p.has(s)||(a.forEach(e=>{const{scope:t,eventName:n}=B(e),i=S(t),c=I(t);c!==r&&m(s,n,c===o?i?D:j:i?L:x,!0,i)}),p.add(s))}},M=t._qwikEv;M?.roots||(Array.isArray(M)?J(...M):J("e:click","e:input"),t._qwikEv={events:a,roots:p,push:J},m(e,"readystatechange",F),F());
package/dist/server.d.ts CHANGED
@@ -98,32 +98,12 @@ declare interface JSXNode<T extends string | FunctionComponent | unknown = unkno
98
98
  */
99
99
  declare type JSXOutput = JSXNode | string | number | boolean | null | undefined | JSXOutput[];
100
100
 
101
- /** @public @deprecated Use `preloader` instead */
102
- export declare interface PrefetchImplementation {
103
- /** @deprecated No longer used. */
104
- linkRel?: 'prefetch' | 'preload' | 'modulepreload' | null;
105
- /** @deprecated No longer used. */
106
- linkFetchPriority?: 'auto' | 'low' | 'high' | null;
107
- /** @deprecated No longer used. */
108
- linkInsert?: 'js-append' | 'html-append' | null;
109
- /** @deprecated No longer used. */
110
- workerFetchInsert?: 'always' | 'no-link-support' | null;
111
- /** @deprecated No longer used. */
112
- prefetchEvent?: 'always' | null;
113
- }
114
-
115
101
  /** @public */
116
102
  export declare interface PrefetchResource {
117
103
  url: string;
118
104
  imports: PrefetchResource[];
119
105
  }
120
106
 
121
- /** @public */
122
- export declare interface PrefetchStrategy {
123
- implementation?: PrefetchImplementation;
124
- symbolsToPrefetch?: SymbolsToPrefetch;
125
- }
126
-
127
107
  /** @public */
128
108
  export declare interface PreloaderOptions {
129
109
  /**
@@ -137,20 +117,6 @@ export declare interface PreloaderOptions {
137
117
  * Defaults to `5`
138
118
  */
139
119
  ssrPreloads?: number;
140
- /**
141
- * The minimum probability for a bundle to be added as a preload link during SSR.
142
- *
143
- * Defaults to `0.7` (70% probability)
144
- *
145
- * This makes sure that the most likely bundles are preloaded ahead of time.
146
- */
147
- ssrPreloadProbability?: number;
148
- /**
149
- * Log preloader debug information to the console.
150
- *
151
- * Defaults to `false`
152
- */
153
- debug?: boolean;
154
120
  /**
155
121
  * Maximum number of simultaneous preload links that the preloader will maintain. If you set this
156
122
  * higher, the browser will have all JS files in memory sooner, but it will contend with other
@@ -163,15 +129,6 @@ export declare interface PreloaderOptions {
163
129
  * Defaults to `25`
164
130
  */
165
131
  maxIdlePreloads?: number;
166
- /**
167
- * @deprecated The minimum probability for a bundle to be added to the preload queue.
168
- *
169
- * Defaulted to `0.35` (35% probability).
170
- *
171
- * Deprecated because this could cause performance issues with bundles fetched on on click instead
172
- * of being preloaded ahead of time.
173
- */
174
- preloadProbability?: number;
175
132
  }
176
133
 
177
134
  /** @public */
@@ -217,8 +174,6 @@ export declare interface RenderOptions extends SerializeDocumentOptions {
217
174
  qwikLoader?: QwikLoaderOptions;
218
175
  /** Specifies how preloading is handled. This ensures that code is instantly available when needed. */
219
176
  preloader?: PreloaderOptions | false;
220
- /** @deprecated Use `preloader` instead */
221
- prefetchStrategy?: PrefetchStrategy | null;
222
177
  /**
223
178
  * When set, the app is serialized into a fragment. And the returned html is not a complete
224
179
  * document. Defaults to `html`
@@ -336,15 +291,6 @@ export declare interface StreamingOptions {
336
291
  inOrder?: InOrderStreaming;
337
292
  }
338
293
 
339
- /**
340
- * Auto: Prefetch all possible QRLs used by the document. Default
341
- *
342
- * @public
343
- */
344
- export declare type SymbolsToPrefetch = 'auto' | ((opts: {
345
- manifest: ServerQwikManifest;
346
- }) => PrefetchResource[]);
347
-
348
294
  /** @public */
349
295
  export declare const versions: {
350
296
  readonly qwik: string;