@qwik.dev/core 2.0.0-beta.31 → 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 +2 -2
- package/dist/core-internal.d.ts +112 -34
- package/dist/core.min.mjs +2 -2
- package/dist/core.mjs +696 -347
- package/dist/core.mjs.map +1 -1
- package/dist/core.prod.mjs +3269 -3020
- package/dist/loader/index.mjs +2 -2
- package/dist/loader/package.json +1 -1
- package/dist/optimizer.mjs +4 -4
- package/dist/qwikloader.debug.js +237 -90
- package/dist/qwikloader.js +1 -1
- package/dist/server.mjs +10 -7
- package/dist/server.prod.mjs +694 -690
- 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 +5 -3
- package/dist/testing/index.mjs +717 -281
- package/dist/testing/package.json +1 -1
- package/package.json +3 -3
package/dist/loader/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const QWIK_LOADER = "const e=document,t=window,
|
|
2
|
-
const QWIK_LOADER_DEBUG = "const doc = document;\nconst win = window;\nconst windowPrefix = \"w\";\nconst documentPrefix = \"d\";\nconst events = /* @__PURE__ */ new Set();\nconst roots = /* @__PURE__ */ new Set([doc]);\nconst symbols = /* @__PURE__ */ new Map();\nlet observer;\nlet hasInitialized;\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) => el.addEventListener(eventName, handler, { capture, passive: false });\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 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 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 scope: event.charAt(0),\n eventName: kebabToCamel(event.slice(2))\n});\nconst dispatch = async (element, ev, scopedKebabName, kebabName) => {\n if (kebabName) {\n if (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 result = handlers(ev, element);\n if (isPromise(result)) {\n await result;\n }\n } else if (handlers.length) {\n for (let i = 0; i < handlers.length; i++) {\n const handler = handlers[i];\n const result = handler?.(ev, element);\n if (isPromise(result)) {\n await result;\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 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 eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n let handler;\n let importError;\n let error;\n if (chunk === \"\") {\n const hash = container.getAttribute(\"q:instance\");\n handler = (doc[\"qFuncs_\" + hash] || [])[Number.parseInt(symbol)];\n if (!handler) {\n importError = \"sync\";\n error = new Error(\"sym:\" + symbol);\n }\n } else {\n const key = `${symbol}|${qBase}|${chunk}`;\n handler = symbols.get(key);\n if (!handler) {\n const href = new URL(chunk, base).href;\n try {\n const module = import(\n href\n );\n resolveContainer(container);\n handler = (await module)[symbol];\n if (!handler) {\n importError = \"no-symbol\";\n error = new Error(`${symbol} not in ${href}`);\n } else {\n symbols.set(key, handler);\n emitEvent(\"qsymbol\", eventData);\n }\n } catch (err) {\n importError = \"async\";\n error = err;\n }\n }\n }\n if (!handler) {\n emitEvent(\"qerror\", {\n importError,\n error,\n ...eventData\n });\n console.error(error);\n continue;\n }\n if (element.isConnected) {\n try {\n const result = handler.call(capturedIds, ev, element);\n if (isPromise(result)) {\n await result;\n }\n } catch (error2) {\n emitEvent(\"qerror\", { error: error2, ...eventData });\n }\n }\n }\n }\n};\nconst processElementEvent = async (ev) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = \"e:\" + kebabName;\n let element = ev.target;\n while (element && element.getAttribute) {\n const results = dispatch(element, ev, scopedKebabName, kebabName);\n const doBubble = ev.bubbles && !ev.cancelBubble;\n if (isPromise(results)) {\n await results;\n }\n element = doBubble && ev.bubbles && !ev.cancelBubble ? element.parentElement : null;\n }\n};\nconst broadcast = (infix, ev) => {\n const kebabName = camelToKebab(ev.type);\n const scopedKebabName = infix + \":\" + kebabName;\n const elements = querySelectorAll(\"[q-\" + infix + \"\\\\:\" + kebabName + \"]\");\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, scopedKebabName, kebabName);\n }\n};\nconst processDocumentEvent = async (ev) => {\n broadcast(documentPrefix, ev);\n};\nconst processWindowEvent = (ev) => {\n broadcast(windowPrefix, ev);\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 for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, \"d:qinit\");\n el.removeAttribute(\"q-d:qinit\");\n }\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 for (let i = 0; i < elements.length; i++) {\n const el = elements[i];\n dispatch(el, ev, \"d:qidle\");\n el.removeAttribute(\"q-d:qidle\");\n }\n });\n }\n if (events.has(\"e:qvisible\")) {\n observer || (observer = new IntersectionObserver((entries) => {\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i];\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n dispatch(entry.target, createEvent(\"qvisible\", entry), \"e:qvisible\");\n }\n }\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 if (scope === windowPrefix) {\n addEventListener(win, eventName, processWindowEvent, true);\n } else {\n roots.forEach(\n (root) => addEventListener(\n root,\n eventName,\n scope === documentPrefix ? processDocumentEvent : processElementEvent,\n true\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 if (scope !== windowPrefix) {\n addEventListener(\n eventNameOrRoot,\n eventName,\n scope === documentPrefix ? processDocumentEvent : processElementEvent,\n true\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}";
|
|
1
|
+
const QWIK_LOADER = "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())";
|
|
2
|
+
const QWIK_LOADER_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 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 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) => {\n const eventData = {\n qBase,\n symbol,\n element,\n reqTime\n };\n if (chunk === \"\") {\n const hash = container.getAttribute(\"q:instance\");\n const handler2 = (doc[\"qFuncs_\" + hash] || [])[Number.parseInt(symbol)];\n if (!handler2) {\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 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 try {\n const result = handler2.call(capturedIds, ev, element);\n if (isPromise(result)) {\n return result.catch((error) => {\n emitEvent(\"qerror\", {\n error,\n qBase,\n symbol,\n element,\n reqTime\n });\n });\n }\n } catch (error) {\n emitEvent(\"qerror\", {\n error,\n qBase,\n symbol,\n element,\n reqTime\n });\n }\n }\n };\n const handler = resolveHandler(container, element, qBase, base, chunk, symbol, reqTime);\n if (defer || isPromise(handler)) {\n defer = true;\n tasks.push(async () => {\n await run(isPromise(handler) ? await handler : handler);\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 const continuePropagation = !ev.cancelBubble;\n if (!continuePropagation || 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 const doBubble = ev.bubbles && !ev.cancelBubble;\n if (!doBubble || 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}";
|
|
3
3
|
export { QWIK_LOADER, QWIK_LOADER_DEBUG };
|
package/dist/loader/package.json
CHANGED
package/dist/optimizer.mjs
CHANGED
|
@@ -1432,13 +1432,13 @@ Please ensure "src/entry.preview.tsx" has been built before the "preview" comman
|
|
|
1432
1432
|
);
|
|
1433
1433
|
try {
|
|
1434
1434
|
const f = u.pathToFileURL(c).href, t = await i.strictDynamicImport(f);
|
|
1435
|
-
let g = null
|
|
1436
|
-
if (t.default && (typeof t.default == "function" ? g = t.default : typeof t.default == "object" && (g = t.default.router
|
|
1435
|
+
let g = null;
|
|
1436
|
+
if (t.default && (typeof t.default == "function" ? g = t.default : typeof t.default == "object" && (g = t.default.router)), typeof g != "function")
|
|
1437
1437
|
return We(
|
|
1438
1438
|
e,
|
|
1439
1439
|
`Entry preview module "${c}" does not export a default middleware function`
|
|
1440
1440
|
);
|
|
1441
|
-
e.use(g)
|
|
1441
|
+
e.use(g);
|
|
1442
1442
|
} catch (f) {
|
|
1443
1443
|
return We(e, String(f));
|
|
1444
1444
|
}
|
|
@@ -2614,7 +2614,7 @@ function Rr(e = {}) {
|
|
|
2614
2614
|
const S = e?.devTools?.hmr ?? !0;
|
|
2615
2615
|
if (this.environment.name === "ssr" && b.modules.length)
|
|
2616
2616
|
if (S) {
|
|
2617
|
-
const x = /* @__PURE__ */ new Set(), U = (_) => /\.[mc]?[jt]sx
|
|
2617
|
+
const x = /* @__PURE__ */ new Set(), U = (_) => /\.([mc]?[jt]sx?|mdx?)$/.test(_.split("?")[0]);
|
|
2618
2618
|
for (const _ of b.modules) {
|
|
2619
2619
|
const P = _.url.split("?")[0];
|
|
2620
2620
|
if (_.type === "js" && U(_.url))
|
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());
|