@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.
- package/dist/backpatch/index.mjs +2 -2
- package/dist/backpatch/package.json +1 -1
- package/dist/backpatch-executor.debug.js +12 -6
- package/dist/backpatch-executor.js +1 -1
- package/dist/build/package.json +1 -1
- package/dist/cli.mjs +2 -2
- package/dist/core-internal.d.ts +182 -38
- package/dist/core.min.mjs +2 -2
- package/dist/core.mjs +790 -438
- package/dist/core.mjs.map +1 -1
- package/dist/core.prod.mjs +3405 -3161
- package/dist/loader/index.mjs +2 -2
- package/dist/loader/package.json +1 -1
- package/dist/optimizer.mjs +727 -722
- package/dist/preloader.mjs +64 -89
- package/dist/qwikloader.debug.js +237 -90
- package/dist/qwikloader.js +1 -1
- package/dist/server.d.ts +0 -54
- package/dist/server.mjs +119 -491
- package/dist/server.prod.mjs +625 -1033
- package/dist/starters/adapters/bun/src/entry.bun.ts +2 -8
- package/dist/starters/adapters/cloud-run/src/entry.cloud-run.tsx +2 -4
- package/dist/starters/adapters/deno/src/entry.deno.ts +2 -8
- package/dist/starters/adapters/express/src/entry.express.tsx +1 -4
- package/dist/starters/adapters/fastify/src/plugins/fastify-qwik.ts +1 -2
- package/dist/starters/adapters/node-server/src/entry.node-server.tsx +2 -4
- package/dist/testing/index.d.ts +7 -4
- package/dist/testing/index.mjs +1452 -3772
- package/dist/testing/package.json +1 -1
- package/package.json +3 -3
package/dist/qwikloader.debug.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
65
|
-
if (
|
|
66
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
|
92
|
-
|
|
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
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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 (
|
|
127
|
-
|
|
128
|
-
|
|
216
|
+
} catch (error) {
|
|
217
|
+
emitEvent("qerror", {
|
|
218
|
+
error,
|
|
219
|
+
qBase,
|
|
220
|
+
symbol,
|
|
221
|
+
element,
|
|
222
|
+
reqTime
|
|
223
|
+
});
|
|
129
224
|
}
|
|
130
225
|
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
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 =
|
|
243
|
+
const processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {
|
|
155
244
|
const kebabName = camelToKebab(ev.type);
|
|
156
|
-
const scopedKebabName = "
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
|
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 =
|
|
170
|
-
const elements = querySelectorAll("[q-" +
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
237
|
-
|
|
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
|
-
|
|
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
|
-
|
|
400
|
+
const passive = isPassiveScope(scope);
|
|
401
|
+
const rootScope = getRootScope(scope);
|
|
402
|
+
if (rootScope !== windowPrefix) {
|
|
257
403
|
addEventListener(
|
|
258
404
|
eventNameOrRoot,
|
|
259
405
|
eventName,
|
|
260
|
-
|
|
261
|
-
true
|
|
406
|
+
rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
|
|
407
|
+
true,
|
|
408
|
+
passive
|
|
262
409
|
);
|
|
263
410
|
}
|
|
264
411
|
});
|
package/dist/qwikloader.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=document,t=window,
|
|
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;
|