@qwik.dev/core 2.0.0-beta.30 → 2.0.0-beta.32
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 +215 -170
- package/dist/core-internal.d.ts +147 -29
- package/dist/core.min.mjs +2 -2
- package/dist/core.mjs +11021 -10352
- package/dist/core.mjs.map +1 -1
- package/dist/core.prod.mjs +6064 -5555
- package/dist/insights/vite/index.mjs +36 -33
- package/dist/loader/index.mjs +2 -2
- package/dist/loader/package.json +1 -1
- package/dist/optimizer.mjs +790 -766
- package/dist/preloader.mjs +210 -112
- package/dist/qwikloader.debug.js +261 -101
- package/dist/qwikloader.js +1 -1
- package/dist/server.mjs +272 -95
- package/dist/server.prod.mjs +873 -681
- 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 +9 -4
- package/dist/testing/index.mjs +1226 -472
- package/dist/testing/package.json +1 -1
- package/package.json +3 -3
package/dist/qwikloader.debug.js
CHANGED
|
@@ -1,27 +1,46 @@
|
|
|
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
|
-
nativeQuerySelectorAll(fragment, "[q\\:shadowroot]")
|
|
25
|
+
const shadowRoots = nativeQuerySelectorAll(fragment, "[q\\:shadowroot]");
|
|
26
|
+
for (let i = 0; i < shadowRoots.length; i++) {
|
|
27
|
+
const parent = shadowRoots[i];
|
|
20
28
|
const shadowRoot = parent.shadowRoot;
|
|
21
29
|
shadowRoot && findShadowRoots(shadowRoot);
|
|
22
|
-
}
|
|
30
|
+
}
|
|
23
31
|
};
|
|
24
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
|
+
};
|
|
25
44
|
const resolveContainer = (containerEl) => {
|
|
26
45
|
if (containerEl._qwikjson_ === void 0) {
|
|
27
46
|
const parentJSON = containerEl === doc.documentElement ? doc.body : containerEl;
|
|
@@ -43,13 +62,82 @@ const emitEvent = (eventName, detail) => {
|
|
|
43
62
|
};
|
|
44
63
|
const camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());
|
|
45
64
|
const kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());
|
|
46
|
-
const parseKebabEvent = (event) =>
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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;
|
|
51
139
|
if (kebabName) {
|
|
52
|
-
if (element.hasAttribute("preventdefault:" + kebabName)) {
|
|
140
|
+
if (allowPreventDefault && element.hasAttribute("preventdefault:" + kebabName)) {
|
|
53
141
|
ev.preventDefault();
|
|
54
142
|
}
|
|
55
143
|
if (element.hasAttribute("stoppropagation:" + kebabName)) {
|
|
@@ -59,16 +147,40 @@ const dispatch = async (element, ev, scopedKebabName, kebabName) => {
|
|
|
59
147
|
const handlers = element._qDispatch?.[scopedKebabName];
|
|
60
148
|
if (handlers) {
|
|
61
149
|
if (typeof handlers === "function") {
|
|
62
|
-
const
|
|
63
|
-
if (
|
|
64
|
-
|
|
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
|
+
}
|
|
65
164
|
}
|
|
66
165
|
} else if (handlers.length) {
|
|
67
166
|
for (let i = 0; i < handlers.length; i++) {
|
|
68
167
|
const handler = handlers[i];
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
+
}
|
|
72
184
|
}
|
|
73
185
|
}
|
|
74
186
|
}
|
|
@@ -81,98 +193,116 @@ const dispatch = async (element, ev, scopedKebabName, kebabName) => {
|
|
|
81
193
|
);
|
|
82
194
|
const qBase = container.getAttribute("q:base");
|
|
83
195
|
const base = new URL(qBase, doc.baseURI);
|
|
84
|
-
|
|
196
|
+
const qrls = attrValue.split("|");
|
|
197
|
+
for (let i = 0; i < qrls.length; i++) {
|
|
198
|
+
const qrl = qrls[i];
|
|
85
199
|
const reqTime = performance.now();
|
|
86
200
|
const [chunk, symbol, capturedIds] = qrl.split("#");
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
symbol,
|
|
90
|
-
element,
|
|
91
|
-
reqTime
|
|
92
|
-
};
|
|
93
|
-
let handler;
|
|
94
|
-
let importError;
|
|
95
|
-
let error;
|
|
96
|
-
if (chunk === "") {
|
|
97
|
-
const hash = container.getAttribute("q:instance");
|
|
98
|
-
handler = (doc["qFuncs_" + hash] || [])[Number.parseInt(symbol)];
|
|
99
|
-
if (!handler) {
|
|
100
|
-
importError = "sync";
|
|
101
|
-
error = new Error("sym:" + symbol);
|
|
102
|
-
}
|
|
103
|
-
} else {
|
|
104
|
-
const key = `${symbol}|${qBase}|${chunk}`;
|
|
105
|
-
handler = symbols.get(key);
|
|
106
|
-
if (!handler) {
|
|
107
|
-
const href = new URL(chunk, base).href;
|
|
201
|
+
const run = (handler2) => {
|
|
202
|
+
if (handler2 && element.isConnected) {
|
|
108
203
|
try {
|
|
109
|
-
const
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
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
|
+
});
|
|
121
215
|
}
|
|
122
|
-
} catch (
|
|
123
|
-
|
|
124
|
-
|
|
216
|
+
} catch (error) {
|
|
217
|
+
emitEvent("qerror", {
|
|
218
|
+
error,
|
|
219
|
+
qBase,
|
|
220
|
+
symbol,
|
|
221
|
+
element,
|
|
222
|
+
reqTime
|
|
223
|
+
});
|
|
125
224
|
}
|
|
126
225
|
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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);
|
|
133
232
|
});
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
const result = handler.call(capturedIds, ev, element);
|
|
140
|
-
if (isPromise(result)) {
|
|
141
|
-
await result;
|
|
142
|
-
}
|
|
143
|
-
} catch (error2) {
|
|
144
|
-
emitEvent("qerror", { error: error2, ...eventData });
|
|
233
|
+
} else {
|
|
234
|
+
const result = run(handler);
|
|
235
|
+
if (isPromise(result)) {
|
|
236
|
+
defer = true;
|
|
237
|
+
tasks.push(() => result);
|
|
145
238
|
}
|
|
146
239
|
}
|
|
147
240
|
}
|
|
148
241
|
}
|
|
149
242
|
};
|
|
150
|
-
const processElementEvent =
|
|
243
|
+
const processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {
|
|
151
244
|
const kebabName = camelToKebab(ev.type);
|
|
152
|
-
const scopedKebabName = "
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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;
|
|
159
258
|
}
|
|
160
|
-
element = doBubble && ev.bubbles && !ev.cancelBubble ? element.parentElement : null;
|
|
161
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);
|
|
162
281
|
};
|
|
163
|
-
const
|
|
282
|
+
const processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);
|
|
283
|
+
const broadcast = (scope, ev, allowPreventDefault = true) => {
|
|
164
284
|
const kebabName = camelToKebab(ev.type);
|
|
165
|
-
const scopedKebabName =
|
|
166
|
-
querySelectorAll("[q-" +
|
|
167
|
-
|
|
168
|
-
)
|
|
285
|
+
const scopedKebabName = scope + ":" + kebabName;
|
|
286
|
+
const elements = querySelectorAll("[q-" + scope + "\\:" + kebabName + "]");
|
|
287
|
+
const tasks = [];
|
|
288
|
+
for (let i = 0; i < elements.length; i++) {
|
|
289
|
+
const el = elements[i];
|
|
290
|
+
dispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);
|
|
291
|
+
}
|
|
292
|
+
queueTasks(tasks);
|
|
169
293
|
};
|
|
170
|
-
const processDocumentEvent =
|
|
294
|
+
const processDocumentEvent = (ev) => {
|
|
171
295
|
broadcast(documentPrefix, ev);
|
|
172
296
|
};
|
|
297
|
+
const processPassiveDocumentEvent = (ev) => {
|
|
298
|
+
broadcast(passiveDocumentPrefix, ev, false);
|
|
299
|
+
};
|
|
173
300
|
const processWindowEvent = (ev) => {
|
|
174
301
|
broadcast(windowPrefix, ev);
|
|
175
302
|
};
|
|
303
|
+
const processPassiveWindowEvent = (ev) => {
|
|
304
|
+
broadcast(passiveWindowPrefix, ev, false);
|
|
305
|
+
};
|
|
176
306
|
const processReadyStateChange = () => {
|
|
177
307
|
const readyState = doc.readyState;
|
|
178
308
|
if (readyState == "interactive" || readyState == "complete") {
|
|
@@ -181,35 +311,53 @@ const processReadyStateChange = () => {
|
|
|
181
311
|
if (events.has("d:qinit")) {
|
|
182
312
|
events.delete("d:qinit");
|
|
183
313
|
const ev = createEvent("qinit");
|
|
184
|
-
querySelectorAll("[q-d\\:qinit]")
|
|
185
|
-
|
|
314
|
+
const elements = querySelectorAll("[q-d\\:qinit]");
|
|
315
|
+
const tasks = [];
|
|
316
|
+
for (let i = 0; i < elements.length; i++) {
|
|
317
|
+
const el = elements[i];
|
|
318
|
+
dispatch(el, ev, "d:qinit", tasks);
|
|
186
319
|
el.removeAttribute("q-d:qinit");
|
|
187
|
-
}
|
|
320
|
+
}
|
|
321
|
+
queueTasks(tasks);
|
|
188
322
|
}
|
|
189
323
|
if (events.has("d:qidle")) {
|
|
190
324
|
events.delete("d:qidle");
|
|
191
325
|
const riC = win.requestIdleCallback ?? win.setTimeout;
|
|
192
326
|
riC.bind(win)(() => {
|
|
193
327
|
const ev = createEvent("qidle");
|
|
194
|
-
querySelectorAll("[q-d\\:qidle]")
|
|
195
|
-
|
|
328
|
+
const elements = querySelectorAll("[q-d\\:qidle]");
|
|
329
|
+
const tasks = [];
|
|
330
|
+
for (let i = 0; i < elements.length; i++) {
|
|
331
|
+
const el = elements[i];
|
|
332
|
+
dispatch(el, ev, "d:qidle", tasks);
|
|
196
333
|
el.removeAttribute("q-d:qidle");
|
|
197
|
-
}
|
|
334
|
+
}
|
|
335
|
+
queueTasks(tasks);
|
|
198
336
|
});
|
|
199
337
|
}
|
|
200
338
|
if (events.has("e:qvisible")) {
|
|
201
339
|
observer || (observer = new IntersectionObserver((entries) => {
|
|
202
|
-
|
|
340
|
+
const tasks = [];
|
|
341
|
+
for (let i = 0; i < entries.length; i++) {
|
|
342
|
+
const entry = entries[i];
|
|
203
343
|
if (entry.isIntersecting) {
|
|
204
344
|
observer.unobserve(entry.target);
|
|
205
|
-
dispatch(
|
|
345
|
+
dispatch(
|
|
346
|
+
entry.target,
|
|
347
|
+
createEvent("qvisible", entry),
|
|
348
|
+
"e:qvisible",
|
|
349
|
+
tasks
|
|
350
|
+
);
|
|
206
351
|
}
|
|
207
352
|
}
|
|
353
|
+
queueTasks(tasks);
|
|
208
354
|
}));
|
|
209
|
-
querySelectorAll("[q-e\\:qvisible]:not([q\\:observed])")
|
|
355
|
+
const elements = querySelectorAll("[q-e\\:qvisible]:not([q\\:observed])");
|
|
356
|
+
for (let i = 0; i < elements.length; i++) {
|
|
357
|
+
const el = elements[i];
|
|
210
358
|
observer.observe(el);
|
|
211
359
|
el.setAttribute("q:observed", "true");
|
|
212
|
-
}
|
|
360
|
+
}
|
|
213
361
|
}
|
|
214
362
|
}
|
|
215
363
|
};
|
|
@@ -220,15 +368,24 @@ const addEventOrRoot = (...eventNames) => {
|
|
|
220
368
|
if (!events.has(eventNameOrRoot)) {
|
|
221
369
|
events.add(eventNameOrRoot);
|
|
222
370
|
const { scope, eventName } = parseKebabEvent(eventNameOrRoot);
|
|
223
|
-
|
|
224
|
-
|
|
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
|
+
);
|
|
225
381
|
} else {
|
|
226
382
|
roots.forEach(
|
|
227
383
|
(root) => addEventListener(
|
|
228
384
|
root,
|
|
229
385
|
eventName,
|
|
230
|
-
|
|
231
|
-
true
|
|
386
|
+
rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
|
|
387
|
+
true,
|
|
388
|
+
passive
|
|
232
389
|
)
|
|
233
390
|
);
|
|
234
391
|
}
|
|
@@ -240,12 +397,15 @@ const addEventOrRoot = (...eventNames) => {
|
|
|
240
397
|
if (!roots.has(eventNameOrRoot)) {
|
|
241
398
|
events.forEach((kebabEventName) => {
|
|
242
399
|
const { scope, eventName } = parseKebabEvent(kebabEventName);
|
|
243
|
-
|
|
400
|
+
const passive = isPassiveScope(scope);
|
|
401
|
+
const rootScope = getRootScope(scope);
|
|
402
|
+
if (rootScope !== windowPrefix) {
|
|
244
403
|
addEventListener(
|
|
245
404
|
eventNameOrRoot,
|
|
246
405
|
eventName,
|
|
247
|
-
|
|
248
|
-
true
|
|
406
|
+
rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent,
|
|
407
|
+
true,
|
|
408
|
+
passive
|
|
249
409
|
);
|
|
250
410
|
}
|
|
251
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());
|