@qwik.dev/core 2.0.0-beta.42 → 2.0.0-beta.45
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/async-local-storage.d.ts +3 -0
- package/dist/async-local-storage.mjs +8 -0
- package/dist/async-local-storage.node.mjs +6 -0
- package/dist/backpatch/package.json +1 -1
- package/dist/build/package.json +1 -1
- package/dist/cli.mjs +26 -5
- package/dist/core-internal.d.ts +65 -73
- package/dist/core.min.mjs +11 -11
- package/dist/core.mjs +905 -1071
- package/dist/core.mjs.map +1 -1
- package/dist/core.prod.mjs +3932 -4125
- package/dist/loader/index.mjs +2 -2
- package/dist/loader/package.json +1 -1
- package/dist/optimizer.d.ts +226 -7
- package/dist/optimizer.mjs +828 -648
- package/dist/qwikloader.debug.js +12 -10
- package/dist/qwikloader.js +1 -1
- package/dist/server.mjs +8 -6
- package/dist/server.prod.mjs +381 -379
- package/dist/testing/index.d.ts +3 -8
- package/dist/testing/index.mjs +183 -96
- package/dist/testing/package.json +1 -1
- package/dist/ts-optimizer.mjs +10450 -0
- package/dist/worker/index.mjs +10 -8
- package/dist/worker/package.json +1 -1
- package/package.json +21 -7
package/dist/loader/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const QWIK_LOADER = "var e,t,n,r=document,o=window,s=\"w\",i=\"wp\",a=\"d\",c=\"dp\",l=\"e\",p=\"ep\",
|
|
2
|
-
const QWIK_LOADER_DEBUG = "//#region packages/qwik/src/qwikloader.ts\nvar doc = document;\nvar win = window;\nvar windowPrefix = \"w\";\nvar passiveWindowPrefix = \"wp\";\nvar documentPrefix = \"d\";\nvar passiveDocumentPrefix = \"dp\";\nvar elementPrefix = \"e\";\nvar passiveElementPrefix = \"ep\";\nvar capturePrefix = \"capture:\";\nvar readyStateChange = \"readystatechange\";\nvar QwikEvContainerReady = 0;\nvar events = /* @__PURE__ */ new Set();\nvar roots = /* @__PURE__ */ new Set([doc]);\nvar symbols = /* @__PURE__ */ new Map();\nvar readyContainers = {};\nvar observer;\nvar hasInitialized;\nvar queuedTasks;\nvar nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nvar querySelectorAll = (query) => {\n\tconst elements = [];\n\troots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n\treturn elements;\n};\nvar addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, {\n\tcapture,\n\tpassive\n});\nvar findShadowRoots = (fragment) => {\n\taddEventOrRoot(fragment);\n\tconst shadowRoots = nativeQuerySelectorAll(fragment, \"[q\\\\:shadowroot]\");\n\tfor (let i = 0; i < shadowRoots.length; i++) {\n\t\tconst shadowRoot = shadowRoots[i].shadowRoot;\n\t\tshadowRoot && findShadowRoots(shadowRoot);\n\t}\n};\nvar isPromise = (promise) => promise && typeof promise.then === \"function\";\nvar runTasks = async (tasks) => {\n\tfor (let i = 0; i < tasks.length; i++) await tasks[i]();\n};\nvar queueTasks = (tasks) => {\n\tif (tasks.length) {\n\t\tconst run = () => runTasks(tasks);\n\t\tqueuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();\n\t}\n};\nvar resolveContainer = (containerEl) => {\n\tif (containerEl._qwikjson_ === void 0) {\n\t\tlet script = (containerEl === doc.documentElement ? doc.body : containerEl).lastElementChild;\n\t\twhile (script) {\n\t\t\tif (script.tagName === \"SCRIPT\" && script.getAttribute(\"type\") === \"qwik/json\") {\n\t\t\t\tcontainerEl._qwikjson_ = JSON.parse(script.textContent.replace(/\\\\x3C(\\/?script)/gi, \"<$1\"));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tscript = script.previousElementSibling;\n\t\t}\n\t}\n};\nvar markContainerReady = (hash) => {\n\treadyContainers[hash] = 1;\n\temitEvent(readyStateChange);\n};\nvar waitForContainerReady = (container) => {\n\tconst hash = container.getAttribute(\"q:instance\");\n\treturn container.getAttribute(\"q:container\") === \"paused\" && doc.readyState === \"loading\" && !readyContainers[hash] && new Promise((resolve) => {\n\t\tconst ready = () => {\n\t\t\tif (doc.readyState !== \"loading\" || readyContainers[hash]) resolve();\n\t\t};\n\t\taddEventListener(doc, readyStateChange, ready);\n\t});\n};\nvar createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nvar emitEvent = (eventName, detail) => {\n\tdoc.dispatchEvent(createEvent(eventName, detail));\n};\nvar camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => \"-\" + a.toLowerCase());\nvar kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nvar parseKebabEvent = (event) => {\n\tconst separatorIndex = event.indexOf(\":\");\n\treturn {\n\t\tscope: event.slice(0, separatorIndex),\n\t\teventName: kebabToCamel(event.slice(separatorIndex + 1))\n\t};\n};\nvar isPassiveScope = (scope) => scope.length === 2;\nvar getRootScope = (scope) => scope.charAt(0);\nvar isElementNode = (node) => !!node && node.nodeType === 1;\nvar isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute(\"q-\" + scopedKebabName));\nvar resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime, reportSyncError = true) => {\n\tconst eventData = {\n\t\tqBase,\n\t\tsymbol,\n\t\telement,\n\t\treqTime\n\t};\n\tif (!chunk) {\n\t\tconst handler = (doc[\"qFuncs_\" + container.getAttribute(\"q:instance\")] || [])[+symbol];\n\t\tif (!handler && reportSyncError) {\n\t\t\tconst error = /* @__PURE__ */ new Error(\"sym:\" + symbol);\n\t\t\temitEvent(\"qerror\", {\n\t\t\t\timportError: \"sync\",\n\t\t\t\terror,\n\t\t\t\t...eventData\n\t\t\t});\n\t\t\tconsole.error(error);\n\t\t}\n\t\treturn handler;\n\t}\n\tconst key = `${symbol}|${qBase}|${chunk}`;\n\tconst handler = symbols.get(key);\n\tif (handler) return handler;\n\tconst href = new URL(chunk, base).href;\n\tconst module = import(\n\t\t\t\thref\n);\n\tresolveContainer(container);\n\treturn module.then((module) => {\n\t\tconst handler = module[symbol];\n\t\tif (!handler) {\n\t\t\tconst error = /* @__PURE__ */ new Error(`${symbol} not in ${href}`);\n\t\t\temitEvent(\"qerror\", {\n\t\t\t\timportError: \"no-symbol\",\n\t\t\t\terror,\n\t\t\t\t...eventData\n\t\t\t});\n\t\t\tconsole.error(error);\n\t\t} else {\n\t\t\tsymbols.set(key, handler);\n\t\t\temitEvent(\"qsymbol\", eventData);\n\t\t}\n\t\treturn handler;\n\t}, (error) => {\n\t\temitEvent(\"qerror\", {\n\t\t\timportError: \"async\",\n\t\t\terror,\n\t\t\t...eventData\n\t\t});\n\t\tconsole.error(error);\n\t});\n};\n/**\n* Dispatch an event by invoking QRL handlers. If there are multiple handlers, they are awaited in\n* order.\n*/\nvar dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {\n\tlet defer = false;\n\tif (kebabName) {\n\t\tif (allowPreventDefault && element.hasAttribute(\"preventdefault:\" + kebabName)) ev.preventDefault();\n\t\tif (element.hasAttribute(\"stoppropagation:\" + kebabName)) ev.stopPropagation();\n\t}\n\tconst handlers = element._qDispatch?.[scopedKebabName];\n\tif (handlers) {\n\t\tif (typeof handlers === \"function\") {\n\t\t\tconst run = () => handlers(ev, element);\n\t\t\tif (defer) tasks.push(async () => {\n\t\t\t\tconst result = run();\n\t\t\t\tif (isPromise(result)) await result;\n\t\t\t});\n\t\t\telse {\n\t\t\t\tconst result = run();\n\t\t\t\tif (isPromise(result)) {\n\t\t\t\t\tdefer = true;\n\t\t\t\t\ttasks.push(() => result);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (handlers.length) for (let i = 0; i < handlers.length; i++) {\n\t\t\tconst handler = handlers[i];\n\t\t\tif (handler) {\n\t\t\t\tconst run = () => handler(ev, element);\n\t\t\t\tif (defer) tasks.push(async () => {\n\t\t\t\t\tconst result = run();\n\t\t\t\t\tif (isPromise(result)) await result;\n\t\t\t\t});\n\t\t\t\telse {\n\t\t\t\t\tconst result = run();\n\t\t\t\t\tif (isPromise(result)) {\n\t\t\t\t\t\tdefer = true;\n\t\t\t\t\t\ttasks.push(() => result);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\tconst attrValue = element.getAttribute(\"q-\" + scopedKebabName);\n\tif (attrValue) {\n\t\tconst container = element.closest(\"[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])\");\n\t\tconst qBase = container.getAttribute(\"q:base\");\n\t\tconst base = new URL(qBase, doc.baseURI);\n\t\tconst qrls = attrValue.split(\"|\");\n\t\tconst waitForReady = waitForContainerReady(container);\n\t\tfor (let i = 0; i < qrls.length; i++) {\n\t\t\tconst qrl = qrls[i];\n\t\t\tconst reqTime = performance.now();\n\t\t\tconst [chunk, symbol, capturedIds] = qrl.split(\"#\");\n\t\t\tconst run = (handler) => {\n\t\t\t\tif (handler && element.isConnected) {\n\t\t\t\t\tconst onError = (error) => {\n\t\t\t\t\t\temitEvent(\"qerror\", {\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\tqBase,\n\t\t\t\t\t\t\tsymbol,\n\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\treqTime\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = handler.call(capturedIds, ev, element);\n\t\t\t\t\t\tif (isPromise(result)) return result.catch(onError);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treturn onError(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst resolve = (reportSyncError = true) => resolveHandler(container, element, qBase, base, chunk, symbol, reqTime, reportSyncError);\n\t\t\tconst handler = waitForReady ? void 0 : resolve();\n\t\t\tif (waitForReady) {\n\t\t\t\tdefer = true;\n\t\t\t\ttasks.push(async () => {\n\t\t\t\t\tawait waitForReady;\n\t\t\t\t\tawait run(chunk ? await resolve() : await resolve(false) || await resolve());\n\t\t\t\t});\n\t\t\t} else if (isPromise(handler)) {\n\t\t\t\tdefer = true;\n\t\t\t\ttasks.push(() => handler.then(run));\n\t\t\t} else if (defer) {\n\t\t\t\tdefer = true;\n\t\t\t\ttasks.push(async () => {\n\t\t\t\t\tawait run(handler || await resolve());\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst result = run(handler);\n\t\t\t\tif (isPromise(result)) {\n\t\t\t\t\tdefer = true;\n\t\t\t\t\ttasks.push(() => result);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n/**\n* Event handler responsible for processing element events.\n*\n* If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding\n* `(${event.type})`. If found the event's URL is parsed and `import()`ed.\n*\n* @param ev - Browser event.\n*/\nvar processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {\n\tconst kebabName = camelToKebab(ev.type);\n\tconst scopedKebabName = scope + \":\" + kebabName;\n\tconst captureAttribute = capturePrefix + kebabName;\n\tconst elements = [];\n\tconst captureHandlers = [];\n\tconst tasks = [];\n\tlet current = ev.target;\n\twhile (current) if (isElementNode(current)) {\n\t\telements.push(current);\n\t\tcaptureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));\n\t\tcurrent = current.parentElement;\n\t} else current = current.parentElement;\n\tfor (let i = elements.length - 1; i >= 0; i--) if (captureHandlers[i]) {\n\t\tdispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n\t\tif (ev.cancelBubble) {\n\t\t\tqueueTasks(tasks);\n\t\t\treturn;\n\t\t}\n\t}\n\tfor (let i = 0; i < elements.length; i++) if (!captureHandlers[i]) {\n\t\tdispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n\t\tif (!ev.bubbles || ev.cancelBubble) {\n\t\t\tqueueTasks(tasks);\n\t\t\treturn;\n\t\t}\n\t}\n\tqueueTasks(tasks);\n};\nvar processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);\nvar broadcast = (scope, ev, allowPreventDefault = true) => {\n\tconst kebabName = camelToKebab(ev.type);\n\tconst scopedKebabName = scope + \":\" + kebabName;\n\tconst elements = querySelectorAll(\"[q-\" + CSS.escape(scopedKebabName) + \"]\");\n\tconst tasks = [];\n\tfor (let i = 0; i < elements.length; i++) {\n\t\tconst el = elements[i];\n\t\tdispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n\t}\n\tqueueTasks(tasks);\n};\n/**\n* Event handler responsible for processing browser events.\n*\n* If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding\n* `(${event.type})`. If found the event's URL is parsed and `import()`ed.\n*\n* @param ev - Browser event.\n*/\nvar processDocumentEvent = (ev) => {\n\tbroadcast(documentPrefix, ev);\n};\nvar processPassiveDocumentEvent = (ev) => {\n\tbroadcast(passiveDocumentPrefix, ev, false);\n};\nvar processWindowEvent = (ev) => {\n\tbroadcast(windowPrefix, ev);\n};\nvar processPassiveWindowEvent = (ev) => {\n\tbroadcast(passiveWindowPrefix, ev, false);\n};\n/**\n* Called when the document is ready and whenever a container is added, so make this idempotent. For\n* qidle and qinit we remove the attributes immediately, and for qvisible we add an attribute\n*/\nvar processReadyStateChange = () => {\n\tconst readyState = doc.readyState;\n\tif (readyState == \"interactive\" || readyState == \"complete\") {\n\t\thasInitialized = 1;\n\t\troots.forEach(findShadowRoots);\n\t\tif (events.has(\"d:qinit\")) {\n\t\t\tevents.delete(\"d:qinit\");\n\t\t\tconst ev = createEvent(\"qinit\");\n\t\t\tconst elements = querySelectorAll(\"[q-d\\\\:qinit]\");\n\t\t\tconst tasks = [];\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\tconst el = elements[i];\n\t\t\t\tdispatch(el, ev, \"d:qinit\", tasks);\n\t\t\t\tel.removeAttribute(\"q-d:qinit\");\n\t\t\t}\n\t\t\tqueueTasks(tasks);\n\t\t}\n\t\tif (events.has(\"d:qidle\")) {\n\t\t\tevents.delete(\"d:qidle\");\n\t\t\t(win.requestIdleCallback ?? win.setTimeout).bind(win)(() => {\n\t\t\t\tconst ev = createEvent(\"qidle\");\n\t\t\t\tconst elements = querySelectorAll(\"[q-d\\\\:qidle]\");\n\t\t\t\tconst tasks = [];\n\t\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\t\tconst el = elements[i];\n\t\t\t\t\tdispatch(el, ev, \"d:qidle\", tasks);\n\t\t\t\t\tel.removeAttribute(\"q-d:qidle\");\n\t\t\t\t}\n\t\t\t\tqueueTasks(tasks);\n\t\t\t});\n\t\t}\n\t\tif (events.has(\"e:qvisible\")) {\n\t\t\tobserver || (observer = new IntersectionObserver((entries) => {\n\t\t\t\tconst tasks = [];\n\t\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\t\tconst entry = entries[i];\n\t\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\t\tobserver.unobserve(entry.target);\n\t\t\t\t\t\tdispatch(entry.target, createEvent(\"qvisible\", entry), \"e:qvisible\", tasks);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tqueueTasks(tasks);\n\t\t\t}));\n\t\t\tconst elements = querySelectorAll(\"[q-e\\\\:qvisible]:not([q\\\\:observed])\");\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\tconst el = elements[i];\n\t\t\t\tobserver.observe(el);\n\t\t\t\tel.setAttribute(\"q:observed\", \"true\");\n\t\t\t}\n\t\t}\n\t}\n};\nvar addEventOrRoot = (...eventNames) => {\n\tfor (let i = 0; i < eventNames.length; i++) {\n\t\tconst eventNameOrRoot = eventNames[i];\n\t\tif (eventNameOrRoot === QwikEvContainerReady) markContainerReady(eventNames[++i]);\n\t\telse if (typeof eventNameOrRoot === \"string\") {\n\t\t\tif (!events.has(eventNameOrRoot)) {\n\t\t\t\tevents.add(eventNameOrRoot);\n\t\t\t\tconst { scope, eventName } = parseKebabEvent(eventNameOrRoot);\n\t\t\t\tconst passive = isPassiveScope(scope);\n\t\t\t\tconst rootScope = getRootScope(scope);\n\t\t\t\tif (rootScope === windowPrefix) addEventListener(win, eventName, passive ? processPassiveWindowEvent : processWindowEvent, true, passive);\n\t\t\t\telse roots.forEach((root) => addEventListener(root, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive));\n\t\t\t\tif (hasInitialized === 1 && (eventNameOrRoot === \"e:qvisible\" || eventNameOrRoot === \"d:qinit\" || eventNameOrRoot === \"d:qidle\")) processReadyStateChange();\n\t\t\t}\n\t\t} else if (!roots.has(eventNameOrRoot)) {\n\t\t\tevents.forEach((kebabEventName) => {\n\t\t\t\tconst { scope, eventName } = parseKebabEvent(kebabEventName);\n\t\t\t\tconst passive = isPassiveScope(scope);\n\t\t\t\tconst rootScope = getRootScope(scope);\n\t\t\t\tif (rootScope !== windowPrefix) addEventListener(eventNameOrRoot, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive);\n\t\t\t});\n\t\t\troots.add(eventNameOrRoot);\n\t\t}\n\t}\n};\nvar _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n\tif (Array.isArray(_qwikEv)) addEventOrRoot(..._qwikEv);\n\telse addEventOrRoot(\"e:click\", \"e:input\");\n\twin._qwikEv = {\n\t\tevents,\n\t\troots,\n\t\tpush: addEventOrRoot\n\t};\n\taddEventListener(doc, readyStateChange, processReadyStateChange);\n\tprocessReadyStateChange();\n}\n//#endregion";
|
|
1
|
+
const QWIK_LOADER = "var e,t,n,r=document,o=window,s=\"w\",i=\"wp\",a=\"d\",c=\"dp\",l=\"e\",p=\"ep\",q=\"capture:\",d=\"readystatechange\",u=0,h=new Set,f=new Set([r]),b=new Map,g={},m=(e,t)=>Array.from(e.querySelectorAll(t)),y=e=>{const t=[];return f.forEach(n=>t.push(...m(n,e))),t},v=(e,t,n,r=!1,o=!1)=>e.addEventListener(t,n,{capture:r,passive:o}),w=e=>{K(e);const t=m(e,\"[q\\\\:shadowroot]\");for(let e=0;e<t.length;e++){const n=t[e].shadowRoot;n&&w(n)}},A=e=>e&&\"function\"==typeof e.then,E=async e=>{for(let t=0;t<e.length;t++)await e[t]()},S=e=>\"q\"===e.charAt(0),C=(e,t)=>{if(e.length){const r=()=>E(e);S(t)?r():n=n?n.then(r,r):r()}},_=e=>{if(void 0===e._qwikjson_){let t=(e===r.documentElement?r.body:e).lastElementChild;for(;t;){if(\"SCRIPT\"===t.tagName&&\"qwik/json\"===t.getAttribute(\"type\")){e._qwikjson_=JSON.parse(t.textContent.replace(/\\\\x3C(\\/?script)/gi,\"<$1\"));break}t=t.previousElementSibling}}},k=e=>{g[e]=1,N(d)},$=e=>{const t=e.getAttribute(\"q:instance\");return\"paused\"===e.getAttribute(\"q:container\")&&\"loading\"===r.readyState&&!g[t]&&new Promise(e=>{v(r,d,()=>{(\"loading\"!==r.readyState||g[t])&&e()})})},I=(e,t)=>new CustomEvent(e,{detail:t}),N=(e,t)=>{r.dispatchEvent(I(e,t))},R=e=>e.replace(/([A-Z-])/g,e=>\"-\"+e.toLowerCase()),T=e=>e.replace(/-./g,e=>e[1].toUpperCase()),x=e=>{const t=e.indexOf(\":\");return{scope:e.slice(0,t),eventName:T(e.slice(t+1))}},B=e=>2===e.length,L=e=>e.charAt(0),U=e=>!!e&&1===e.nodeType,j=(e,t,n)=>e.hasAttribute(n)&&(!!e._qDispatch?.[t]||e.hasAttribute(\"q-\"+t)),D=(e,t,n,o,s,i,a,c=!0)=>{const l={qBase:n,symbol:i,element:t,reqTime:a};if(!s){const t=(r[\"qFuncs_\"+e.getAttribute(\"q:instance\")]||[])[+i];if(!t&&c){const e=Error(\"sym:\"+i);N(\"qerror\",{importError:\"sync\",error:e,...l}),console.error(e)}return t}const p=`${i}|${n}|${s}`,q=b.get(p);if(q)return q;const d=new URL(s,o).href,u=import(d);return _(e),u.then(e=>{const t=e[i];if(t)b.set(p,t),N(\"qsymbol\",l);else{const e=Error(`${i} not in ${d}`);N(\"qerror\",{importError:\"no-symbol\",error:e,...l}),console.error(e)}return t},e=>{N(\"qerror\",{importError:\"async\",error:e,...l}),console.error(e)})},O=(e,t,n,o,s,i=!0)=>{let a=!1;s&&(i&&e.hasAttribute(\"preventdefault:\"+s)&&t.preventDefault(),e.hasAttribute(\"stoppropagation:\"+s)&&t.stopPropagation());const c=e._qDispatch?.[n];if(c){if(\"function\"==typeof c){const n=()=>c(t,e);if(a)o.push(async()=>{const e=n();A(e)&&await e});else{const e=n();A(e)&&(a=!0,o.push(()=>e))}}else if(c.length)for(let n=0;n<c.length;n++){const r=c[n];if(r){const n=()=>r(t,e);if(a)o.push(async()=>{const e=n();A(e)&&await e});else{const e=n();A(e)&&(a=!0,o.push(()=>e))}}}return}const l=e.getAttribute(\"q-\"+n);if(l){const n=e.closest(\"[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])\"),s=n.getAttribute(\"q:base\"),i=new URL(s,r.baseURI),c=l.split(\"|\"),p=$(n);for(let r=0;r<c.length;r++){const l=c[r],q=performance.now(),[d,u,h]=l.split(\"#\"),f=n=>{if(n&&e.isConnected){const r=t=>{N(\"qerror\",{error:t,qBase:s,symbol:u,element:e,reqTime:q})};try{const o=n.call(h,t,e);if(A(o))return o.catch(r)}catch(e){return r(e)}}},b=(t=!0)=>D(n,e,s,i,d,u,q,t),g=p?void 0:b();if(p)a=!0,o.push(async()=>{await p,await f(d?await b():await b(!1)||await b())});else if(A(g))a=!0,o.push(()=>g.then(f));else if(a)a=!0,o.push(async()=>{await f(g||await b())});else{const e=f(g);A(e)&&(a=!0,o.push(()=>e))}}}},P=(e,t=l,n=!0)=>{const r=R(e.type),o=t+\":\"+r,s=q+r,i=[],a=[],c=[];let p=e.target;for(;p;)U(p)?(i.push(p),a.push(j(p,o,s)),p=p.parentElement):p=p.parentElement;for(let t=i.length-1;t>=0;t--)if(a[t]&&(O(i[t],e,o,c,r,n),e.cancelBubble))return void C(c,e.type);for(let t=0;t<i.length;t++)if(!a[t]&&(O(i[t],e,o,c,r,n),!e.bubbles||e.cancelBubble))return void C(c,e.type);C(c,e.type)},F=e=>P(e,p,!1),J=(e,t,n=!0)=>{const r=R(t.type),o=e+\":\"+r,s=y(\"[q-\"+CSS.escape(o)+\"]\"),i=[];for(let e=0;e<s.length;e++){const a=s[e];O(a,t,o,i,r,n)}C(i,t.type)},M=e=>{J(a,e)},Z=e=>{J(c,e,!1)},z=e=>{J(s,e)},G=e=>{J(i,e,!1)},H=()=>{const n=r.readyState;if(\"interactive\"==n||\"complete\"==n){if(t=1,f.forEach(w),h.has(\"d:qinit\")){h.delete(\"d:qinit\");const e=I(\"qinit\"),t=y(\"[q-d\\\\:qinit]\"),n=[];for(let r=0;r<t.length;r++){const o=t[r];O(o,e,\"d:qinit\",n),o.removeAttribute(\"q-d:qinit\")}C(n,\"qinit\")}if(h.has(\"d:qidle\")&&(h.delete(\"d:qidle\"),(o.requestIdleCallback??o.setTimeout).bind(o)(()=>{const e=I(\"qidle\"),t=y(\"[q-d\\\\:qidle]\"),n=[];for(let r=0;r<t.length;r++){const o=t[r];O(o,e,\"d:qidle\",n),o.removeAttribute(\"q-d:qidle\")}C(n,\"qidle\")})),h.has(\"e:qvisible\")){e||(e=new IntersectionObserver(t=>{const n=[];for(let r=0;r<t.length;r++){const o=t[r];o.isIntersecting&&(e.unobserve(o.target),O(o.target,I(\"qvisible\",o),\"e:qvisible\",n))}C(n,\"qvisible\")}));const t=y(\"[q-e\\\\:qvisible]:not([q\\\\:observed])\");for(let n=0;n<t.length;n++){const r=t[n];e.observe(r),r.setAttribute(\"q:observed\",\"true\")}}}},K=(...e)=>{for(let n=0;n<e.length;n++){const r=e[n];if(r===u)k(e[++n]);else if(\"string\"==typeof r){if(!h.has(r)){h.add(r);const{scope:e,eventName:t}=x(r),n=B(e),i=L(e);i===s?v(o,t,n?G:z,!0,n):f.forEach(e=>v(e,t,i===a?n?Z:M:n?F:P,!0,n))}1!==t||\"e:qvisible\"!==r&&\"d:qinit\"!==r&&\"d:qidle\"!==r||H()}else f.has(r)||(h.forEach(e=>{const{scope:t,eventName:n}=x(e),o=B(t),i=L(t);i!==s&&v(r,n,i===a?o?Z:M:o?F:P,!0,o)}),f.add(r))}},Q=o._qwikEv;Q?.roots||(Array.isArray(Q)?K(...Q):K(\"e:click\",\"e:input\"),o._qwikEv={events:h,roots:f,push:K},v(r,d,H),H())";
|
|
2
|
+
const QWIK_LOADER_DEBUG = "//#region packages/qwik/src/qwikloader.ts\nvar doc = document;\nvar win = window;\nvar windowPrefix = \"w\";\nvar passiveWindowPrefix = \"wp\";\nvar documentPrefix = \"d\";\nvar passiveDocumentPrefix = \"dp\";\nvar elementPrefix = \"e\";\nvar passiveElementPrefix = \"ep\";\nvar capturePrefix = \"capture:\";\nvar readyStateChange = \"readystatechange\";\nvar QwikEvContainerReady = 0;\nvar events = /* @__PURE__ */ new Set();\nvar roots = /* @__PURE__ */ new Set([doc]);\nvar symbols = /* @__PURE__ */ new Map();\nvar readyContainers = {};\nvar observer;\nvar hasInitialized;\nvar queuedTasks;\nvar nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\nvar querySelectorAll = (query) => {\n\tconst elements = [];\n\troots.forEach((root) => elements.push(...nativeQuerySelectorAll(root, query)));\n\treturn elements;\n};\nvar addEventListener = (el, eventName, handler, capture = false, passive = false) => el.addEventListener(eventName, handler, {\n\tcapture,\n\tpassive\n});\nvar findShadowRoots = (fragment) => {\n\taddEventOrRoot(fragment);\n\tconst shadowRoots = nativeQuerySelectorAll(fragment, \"[q\\\\:shadowroot]\");\n\tfor (let i = 0; i < shadowRoots.length; i++) {\n\t\tconst shadowRoot = shadowRoots[i].shadowRoot;\n\t\tshadowRoot && findShadowRoots(shadowRoot);\n\t}\n};\nvar isPromise = (promise) => promise && typeof promise.then === \"function\";\nvar runTasks = async (tasks) => {\n\tfor (let i = 0; i < tasks.length; i++) await tasks[i]();\n};\nvar isQwikLifecycleEvent = (eventName) => eventName.charAt(0) === \"q\";\nvar queueTasks = (tasks, eventName) => {\n\tif (tasks.length) {\n\t\tconst run = () => runTasks(tasks);\n\t\tif (isQwikLifecycleEvent(eventName)) run();\n\t\telse queuedTasks = queuedTasks ? queuedTasks.then(run, run) : run();\n\t}\n};\nvar resolveContainer = (containerEl) => {\n\tif (containerEl._qwikjson_ === void 0) {\n\t\tlet script = (containerEl === doc.documentElement ? doc.body : containerEl).lastElementChild;\n\t\twhile (script) {\n\t\t\tif (script.tagName === \"SCRIPT\" && script.getAttribute(\"type\") === \"qwik/json\") {\n\t\t\t\tcontainerEl._qwikjson_ = JSON.parse(script.textContent.replace(/\\\\x3C(\\/?script)/gi, \"<$1\"));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tscript = script.previousElementSibling;\n\t\t}\n\t}\n};\nvar markContainerReady = (hash) => {\n\treadyContainers[hash] = 1;\n\temitEvent(readyStateChange);\n};\nvar waitForContainerReady = (container) => {\n\tconst hash = container.getAttribute(\"q:instance\");\n\treturn container.getAttribute(\"q:container\") === \"paused\" && doc.readyState === \"loading\" && !readyContainers[hash] && new Promise((resolve) => {\n\t\tconst ready = () => {\n\t\t\tif (doc.readyState !== \"loading\" || readyContainers[hash]) resolve();\n\t\t};\n\t\taddEventListener(doc, readyStateChange, ready);\n\t});\n};\nvar createEvent = (eventName, detail) => new CustomEvent(eventName, { detail });\nvar emitEvent = (eventName, detail) => {\n\tdoc.dispatchEvent(createEvent(eventName, detail));\n};\nvar camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => \"-\" + a.toLowerCase());\nvar kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());\nvar parseKebabEvent = (event) => {\n\tconst separatorIndex = event.indexOf(\":\");\n\treturn {\n\t\tscope: event.slice(0, separatorIndex),\n\t\teventName: kebabToCamel(event.slice(separatorIndex + 1))\n\t};\n};\nvar isPassiveScope = (scope) => scope.length === 2;\nvar getRootScope = (scope) => scope.charAt(0);\nvar isElementNode = (node) => !!node && node.nodeType === 1;\nvar isCaptureHandlerElement = (element, scopedKebabName, captureAttribute) => element.hasAttribute(captureAttribute) && (!!element._qDispatch?.[scopedKebabName] || element.hasAttribute(\"q-\" + scopedKebabName));\nvar resolveHandler = (container, element, qBase, base, chunk, symbol, reqTime, reportSyncError = true) => {\n\tconst eventData = {\n\t\tqBase,\n\t\tsymbol,\n\t\telement,\n\t\treqTime\n\t};\n\tif (!chunk) {\n\t\tconst handler = (doc[\"qFuncs_\" + container.getAttribute(\"q:instance\")] || [])[+symbol];\n\t\tif (!handler && reportSyncError) {\n\t\t\tconst error = /* @__PURE__ */ new Error(\"sym:\" + symbol);\n\t\t\temitEvent(\"qerror\", {\n\t\t\t\timportError: \"sync\",\n\t\t\t\terror,\n\t\t\t\t...eventData\n\t\t\t});\n\t\t\tconsole.error(error);\n\t\t}\n\t\treturn handler;\n\t}\n\tconst key = `${symbol}|${qBase}|${chunk}`;\n\tconst handler = symbols.get(key);\n\tif (handler) return handler;\n\tconst href = new URL(chunk, base).href;\n\tconst module = import(\n\t\t\t\thref\n);\n\tresolveContainer(container);\n\treturn module.then((module) => {\n\t\tconst handler = module[symbol];\n\t\tif (!handler) {\n\t\t\tconst error = /* @__PURE__ */ new Error(`${symbol} not in ${href}`);\n\t\t\temitEvent(\"qerror\", {\n\t\t\t\timportError: \"no-symbol\",\n\t\t\t\terror,\n\t\t\t\t...eventData\n\t\t\t});\n\t\t\tconsole.error(error);\n\t\t} else {\n\t\t\tsymbols.set(key, handler);\n\t\t\temitEvent(\"qsymbol\", eventData);\n\t\t}\n\t\treturn handler;\n\t}, (error) => {\n\t\temitEvent(\"qerror\", {\n\t\t\timportError: \"async\",\n\t\t\terror,\n\t\t\t...eventData\n\t\t});\n\t\tconsole.error(error);\n\t});\n};\n/**\n* Dispatch an event by invoking QRL handlers. If there are multiple handlers, they are awaited in\n* order.\n*/\nvar dispatch = (element, ev, scopedKebabName, tasks, kebabName, allowPreventDefault = true) => {\n\tlet defer = false;\n\tif (kebabName) {\n\t\tif (allowPreventDefault && element.hasAttribute(\"preventdefault:\" + kebabName)) ev.preventDefault();\n\t\tif (element.hasAttribute(\"stoppropagation:\" + kebabName)) ev.stopPropagation();\n\t}\n\tconst handlers = element._qDispatch?.[scopedKebabName];\n\tif (handlers) {\n\t\tif (typeof handlers === \"function\") {\n\t\t\tconst run = () => handlers(ev, element);\n\t\t\tif (defer) tasks.push(async () => {\n\t\t\t\tconst result = run();\n\t\t\t\tif (isPromise(result)) await result;\n\t\t\t});\n\t\t\telse {\n\t\t\t\tconst result = run();\n\t\t\t\tif (isPromise(result)) {\n\t\t\t\t\tdefer = true;\n\t\t\t\t\ttasks.push(() => result);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (handlers.length) for (let i = 0; i < handlers.length; i++) {\n\t\t\tconst handler = handlers[i];\n\t\t\tif (handler) {\n\t\t\t\tconst run = () => handler(ev, element);\n\t\t\t\tif (defer) tasks.push(async () => {\n\t\t\t\t\tconst result = run();\n\t\t\t\t\tif (isPromise(result)) await result;\n\t\t\t\t});\n\t\t\t\telse {\n\t\t\t\t\tconst result = run();\n\t\t\t\t\tif (isPromise(result)) {\n\t\t\t\t\t\tdefer = true;\n\t\t\t\t\t\ttasks.push(() => result);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\tconst attrValue = element.getAttribute(\"q-\" + scopedKebabName);\n\tif (attrValue) {\n\t\tconst container = element.closest(\"[q\\\\:container]:not([q\\\\:container=html]):not([q\\\\:container=text])\");\n\t\tconst qBase = container.getAttribute(\"q:base\");\n\t\tconst base = new URL(qBase, doc.baseURI);\n\t\tconst qrls = attrValue.split(\"|\");\n\t\tconst waitForReady = waitForContainerReady(container);\n\t\tfor (let i = 0; i < qrls.length; i++) {\n\t\t\tconst qrl = qrls[i];\n\t\t\tconst reqTime = performance.now();\n\t\t\tconst [chunk, symbol, capturedIds] = qrl.split(\"#\");\n\t\t\tconst run = (handler) => {\n\t\t\t\tif (handler && element.isConnected) {\n\t\t\t\t\tconst onError = (error) => {\n\t\t\t\t\t\temitEvent(\"qerror\", {\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\tqBase,\n\t\t\t\t\t\t\tsymbol,\n\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\treqTime\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst result = handler.call(capturedIds, ev, element);\n\t\t\t\t\t\tif (isPromise(result)) return result.catch(onError);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treturn onError(error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst resolve = (reportSyncError = true) => resolveHandler(container, element, qBase, base, chunk, symbol, reqTime, reportSyncError);\n\t\t\tconst handler = waitForReady ? void 0 : resolve();\n\t\t\tif (waitForReady) {\n\t\t\t\tdefer = true;\n\t\t\t\ttasks.push(async () => {\n\t\t\t\t\tawait waitForReady;\n\t\t\t\t\tawait run(chunk ? await resolve() : await resolve(false) || await resolve());\n\t\t\t\t});\n\t\t\t} else if (isPromise(handler)) {\n\t\t\t\tdefer = true;\n\t\t\t\ttasks.push(() => handler.then(run));\n\t\t\t} else if (defer) {\n\t\t\t\tdefer = true;\n\t\t\t\ttasks.push(async () => {\n\t\t\t\t\tawait run(handler || await resolve());\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tconst result = run(handler);\n\t\t\t\tif (isPromise(result)) {\n\t\t\t\t\tdefer = true;\n\t\t\t\t\ttasks.push(() => result);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n/**\n* Event handler responsible for processing element events.\n*\n* If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding\n* `(${event.type})`. If found the event's URL is parsed and `import()`ed.\n*\n* @param ev - Browser event.\n*/\nvar processElementEvent = (ev, scope = elementPrefix, allowPreventDefault = true) => {\n\tconst kebabName = camelToKebab(ev.type);\n\tconst scopedKebabName = scope + \":\" + kebabName;\n\tconst captureAttribute = capturePrefix + kebabName;\n\tconst elements = [];\n\tconst captureHandlers = [];\n\tconst tasks = [];\n\tlet current = ev.target;\n\twhile (current) if (isElementNode(current)) {\n\t\telements.push(current);\n\t\tcaptureHandlers.push(isCaptureHandlerElement(current, scopedKebabName, captureAttribute));\n\t\tcurrent = current.parentElement;\n\t} else current = current.parentElement;\n\tfor (let i = elements.length - 1; i >= 0; i--) if (captureHandlers[i]) {\n\t\tdispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n\t\tif (ev.cancelBubble) {\n\t\t\tqueueTasks(tasks, ev.type);\n\t\t\treturn;\n\t\t}\n\t}\n\tfor (let i = 0; i < elements.length; i++) if (!captureHandlers[i]) {\n\t\tdispatch(elements[i], ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n\t\tif (!ev.bubbles || ev.cancelBubble) {\n\t\t\tqueueTasks(tasks, ev.type);\n\t\t\treturn;\n\t\t}\n\t}\n\tqueueTasks(tasks, ev.type);\n};\nvar processPassiveElementEvent = (ev) => processElementEvent(ev, passiveElementPrefix, false);\nvar broadcast = (scope, ev, allowPreventDefault = true) => {\n\tconst kebabName = camelToKebab(ev.type);\n\tconst scopedKebabName = scope + \":\" + kebabName;\n\tconst elements = querySelectorAll(\"[q-\" + CSS.escape(scopedKebabName) + \"]\");\n\tconst tasks = [];\n\tfor (let i = 0; i < elements.length; i++) {\n\t\tconst el = elements[i];\n\t\tdispatch(el, ev, scopedKebabName, tasks, kebabName, allowPreventDefault);\n\t}\n\tqueueTasks(tasks, ev.type);\n};\n/**\n* Event handler responsible for processing browser events.\n*\n* If browser emits an event, the `eventProcessor` walks the DOM tree looking for corresponding\n* `(${event.type})`. If found the event's URL is parsed and `import()`ed.\n*\n* @param ev - Browser event.\n*/\nvar processDocumentEvent = (ev) => {\n\tbroadcast(documentPrefix, ev);\n};\nvar processPassiveDocumentEvent = (ev) => {\n\tbroadcast(passiveDocumentPrefix, ev, false);\n};\nvar processWindowEvent = (ev) => {\n\tbroadcast(windowPrefix, ev);\n};\nvar processPassiveWindowEvent = (ev) => {\n\tbroadcast(passiveWindowPrefix, ev, false);\n};\n/**\n* Called when the document is ready and whenever a container is added, so make this idempotent. For\n* qidle and qinit we remove the attributes immediately, and for qvisible we add an attribute\n*/\nvar processReadyStateChange = () => {\n\tconst readyState = doc.readyState;\n\tif (readyState == \"interactive\" || readyState == \"complete\") {\n\t\thasInitialized = 1;\n\t\troots.forEach(findShadowRoots);\n\t\tif (events.has(\"d:qinit\")) {\n\t\t\tevents.delete(\"d:qinit\");\n\t\t\tconst ev = createEvent(\"qinit\");\n\t\t\tconst elements = querySelectorAll(\"[q-d\\\\:qinit]\");\n\t\t\tconst tasks = [];\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\tconst el = elements[i];\n\t\t\t\tdispatch(el, ev, \"d:qinit\", tasks);\n\t\t\t\tel.removeAttribute(\"q-d:qinit\");\n\t\t\t}\n\t\t\tqueueTasks(tasks, \"qinit\");\n\t\t}\n\t\tif (events.has(\"d:qidle\")) {\n\t\t\tevents.delete(\"d:qidle\");\n\t\t\t(win.requestIdleCallback ?? win.setTimeout).bind(win)(() => {\n\t\t\t\tconst ev = createEvent(\"qidle\");\n\t\t\t\tconst elements = querySelectorAll(\"[q-d\\\\:qidle]\");\n\t\t\t\tconst tasks = [];\n\t\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\t\tconst el = elements[i];\n\t\t\t\t\tdispatch(el, ev, \"d:qidle\", tasks);\n\t\t\t\t\tel.removeAttribute(\"q-d:qidle\");\n\t\t\t\t}\n\t\t\t\tqueueTasks(tasks, \"qidle\");\n\t\t\t});\n\t\t}\n\t\tif (events.has(\"e:qvisible\")) {\n\t\t\tobserver || (observer = new IntersectionObserver((entries) => {\n\t\t\t\tconst tasks = [];\n\t\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\t\tconst entry = entries[i];\n\t\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\t\tobserver.unobserve(entry.target);\n\t\t\t\t\t\tdispatch(entry.target, createEvent(\"qvisible\", entry), \"e:qvisible\", tasks);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tqueueTasks(tasks, \"qvisible\");\n\t\t\t}));\n\t\t\tconst elements = querySelectorAll(\"[q-e\\\\:qvisible]:not([q\\\\:observed])\");\n\t\t\tfor (let i = 0; i < elements.length; i++) {\n\t\t\t\tconst el = elements[i];\n\t\t\t\tobserver.observe(el);\n\t\t\t\tel.setAttribute(\"q:observed\", \"true\");\n\t\t\t}\n\t\t}\n\t}\n};\nvar addEventOrRoot = (...eventNames) => {\n\tfor (let i = 0; i < eventNames.length; i++) {\n\t\tconst eventNameOrRoot = eventNames[i];\n\t\tif (eventNameOrRoot === QwikEvContainerReady) markContainerReady(eventNames[++i]);\n\t\telse if (typeof eventNameOrRoot === \"string\") {\n\t\t\tif (!events.has(eventNameOrRoot)) {\n\t\t\t\tevents.add(eventNameOrRoot);\n\t\t\t\tconst { scope, eventName } = parseKebabEvent(eventNameOrRoot);\n\t\t\t\tconst passive = isPassiveScope(scope);\n\t\t\t\tconst rootScope = getRootScope(scope);\n\t\t\t\tif (rootScope === windowPrefix) addEventListener(win, eventName, passive ? processPassiveWindowEvent : processWindowEvent, true, passive);\n\t\t\t\telse roots.forEach((root) => addEventListener(root, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive));\n\t\t\t}\n\t\t\tif (hasInitialized === 1 && (eventNameOrRoot === \"e:qvisible\" || eventNameOrRoot === \"d:qinit\" || eventNameOrRoot === \"d:qidle\")) processReadyStateChange();\n\t\t} else if (!roots.has(eventNameOrRoot)) {\n\t\t\tevents.forEach((kebabEventName) => {\n\t\t\t\tconst { scope, eventName } = parseKebabEvent(kebabEventName);\n\t\t\t\tconst passive = isPassiveScope(scope);\n\t\t\t\tconst rootScope = getRootScope(scope);\n\t\t\t\tif (rootScope !== windowPrefix) addEventListener(eventNameOrRoot, eventName, rootScope === documentPrefix ? passive ? processPassiveDocumentEvent : processDocumentEvent : passive ? processPassiveElementEvent : processElementEvent, true, passive);\n\t\t\t});\n\t\t\troots.add(eventNameOrRoot);\n\t\t}\n\t}\n};\nvar _qwikEv = win._qwikEv;\nif (!_qwikEv?.roots) {\n\tif (Array.isArray(_qwikEv)) addEventOrRoot(..._qwikEv);\n\telse addEventOrRoot(\"e:click\", \"e:input\");\n\twin._qwikEv = {\n\t\tevents,\n\t\troots,\n\t\tpush: addEventOrRoot\n\t};\n\taddEventListener(doc, readyStateChange, processReadyStateChange);\n\tprocessReadyStateChange();\n}\n//#endregion";
|
|
3
3
|
export { QWIK_LOADER, QWIK_LOADER_DEBUG };
|
package/dist/loader/package.json
CHANGED
package/dist/optimizer.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
import { EntryStrategy } from '@qwik.dev/optimizer';
|
|
2
|
-
import { Optimizer } from '@qwik.dev/optimizer';
|
|
3
|
-
import { OptimizerOptions } from '@qwik.dev/optimizer';
|
|
4
1
|
import type { Plugin as Plugin_2 } from 'vite';
|
|
5
|
-
import { SegmentAnalysis } from '@qwik.dev/optimizer';
|
|
6
|
-
import { TransformModule } from '@qwik.dev/optimizer';
|
|
7
|
-
import { TransformModuleInput } from '@qwik.dev/optimizer';
|
|
8
2
|
|
|
9
3
|
/**
|
|
10
4
|
* A function that returns a map of bundle names to their dependencies.
|
|
@@ -16,6 +10,35 @@ export declare type BundleGraphAdder = (manifest: QwikManifest) => Record<string
|
|
|
16
10
|
dynamicImports?: string[];
|
|
17
11
|
}>;
|
|
18
12
|
|
|
13
|
+
/** @public */
|
|
14
|
+
export declare interface ComponentEntryStrategy {
|
|
15
|
+
type: 'component';
|
|
16
|
+
manual?: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** @public */
|
|
20
|
+
export declare const createOptimizer: (optimizerOptions?: OptimizerOptions) => Promise<Optimizer>;
|
|
21
|
+
|
|
22
|
+
/** @public */
|
|
23
|
+
export declare interface Diagnostic {
|
|
24
|
+
scope: string;
|
|
25
|
+
category: DiagnosticCategory;
|
|
26
|
+
code: string | null;
|
|
27
|
+
file: string;
|
|
28
|
+
message: string;
|
|
29
|
+
highlights: SourceLocation[] | null;
|
|
30
|
+
suggestions: string[] | null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** @public */
|
|
34
|
+
export declare type DiagnosticCategory = 'error' | 'warning' | 'sourceError';
|
|
35
|
+
|
|
36
|
+
/** @public */
|
|
37
|
+
export declare type EmitMode = 'dev' | 'prod' | 'lib' | 'hmr';
|
|
38
|
+
|
|
39
|
+
/** @public */
|
|
40
|
+
export declare type EntryStrategy = InlineEntryStrategy | HoistEntryStrategy | SingleEntryStrategy | HookEntryStrategy | SegmentEntryStrategy | ComponentEntryStrategy | SmartEntryStrategy;
|
|
41
|
+
|
|
19
42
|
/**
|
|
20
43
|
* Use `__EXPERIMENTAL__.x` to check if feature `x` is enabled. It will be replaced with `true` or
|
|
21
44
|
* `false` via an exact string replacement.
|
|
@@ -52,6 +75,25 @@ export declare interface GlobalInjections {
|
|
|
52
75
|
location: 'head' | 'body';
|
|
53
76
|
}
|
|
54
77
|
|
|
78
|
+
/** @public */
|
|
79
|
+
export declare interface HoistEntryStrategy {
|
|
80
|
+
type: 'hoist';
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** @public @deprecated Use SegmentStrategy instead */
|
|
84
|
+
export declare interface HookEntryStrategy {
|
|
85
|
+
type: 'hook';
|
|
86
|
+
manual?: Record<string, string>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** @public */
|
|
90
|
+
export declare interface InlineEntryStrategy {
|
|
91
|
+
type: 'inline';
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/** @public */
|
|
95
|
+
export declare type MinifyMode = 'simplify' | 'none';
|
|
96
|
+
|
|
55
97
|
declare interface NormalizedQwikPluginOptions extends Omit<Required<QwikPluginOptions>, 'input' | 'vendorRoots' | 'srcInputs' | 'experimental'> {
|
|
56
98
|
input: string[] | {
|
|
57
99
|
[entry: string]: string;
|
|
@@ -59,6 +101,44 @@ declare interface NormalizedQwikPluginOptions extends Omit<Required<QwikPluginOp
|
|
|
59
101
|
experimental: Record<keyof typeof ExperimentalFeatures, boolean> | undefined;
|
|
60
102
|
}
|
|
61
103
|
|
|
104
|
+
/** @public */
|
|
105
|
+
export declare interface Optimizer {
|
|
106
|
+
/** Transforms the input code string, does not access the file system. */
|
|
107
|
+
transformModules(opts: TransformModulesOptions): Promise<TransformOutput>;
|
|
108
|
+
/** Optimizer system use. This can be updated with a custom file system. */
|
|
109
|
+
sys: OptimizerSystem;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** @public */
|
|
113
|
+
export declare interface OptimizerOptions {
|
|
114
|
+
sys?: OptimizerSystem;
|
|
115
|
+
binding?: any;
|
|
116
|
+
/** Inline the global styles if they're smaller than this */
|
|
117
|
+
inlineStylesUpToBytes?: number;
|
|
118
|
+
/** Enable sourcemaps */
|
|
119
|
+
sourcemap?: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Use the TypeScript optimizer (`@qwik.dev/ts-optimizer`) instead of the Rust one. The
|
|
122
|
+
* `QWIK_OPTIMIZER` environment variable (`ts` or `rust`) overrides this, so a project can be
|
|
123
|
+
* built or tested on the other optimizer without changing its config.
|
|
124
|
+
*
|
|
125
|
+
* Default `false`
|
|
126
|
+
*/
|
|
127
|
+
tsOptimizer?: boolean;
|
|
128
|
+
_optimizer?: unknown;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** @public */
|
|
132
|
+
export declare interface OptimizerSystem {
|
|
133
|
+
cwd: () => string;
|
|
134
|
+
env: SystemEnvironment;
|
|
135
|
+
os: string;
|
|
136
|
+
dynamicImport: (path: string) => Promise<any>;
|
|
137
|
+
strictDynamicImport: (path: string) => Promise<any>;
|
|
138
|
+
getInputFiles?: (rootDir: string) => Promise<TransformModuleInput[]>;
|
|
139
|
+
path: Path;
|
|
140
|
+
}
|
|
141
|
+
|
|
62
142
|
/**
|
|
63
143
|
* Workaround to make the api be defined in the type.
|
|
64
144
|
*
|
|
@@ -69,6 +149,36 @@ declare type P<T> = Plugin_2<T> & {
|
|
|
69
149
|
config: Extract<Plugin_2<T>['config'], Function>;
|
|
70
150
|
};
|
|
71
151
|
|
|
152
|
+
/** @public */
|
|
153
|
+
export declare interface Path {
|
|
154
|
+
resolve(...paths: string[]): string;
|
|
155
|
+
normalize(path: string): string;
|
|
156
|
+
isAbsolute(path: string): boolean;
|
|
157
|
+
join(...paths: string[]): string;
|
|
158
|
+
relative(from: string, to: string): string;
|
|
159
|
+
dirname(path: string): string;
|
|
160
|
+
basename(path: string, ext?: string): string;
|
|
161
|
+
extname(path: string): string;
|
|
162
|
+
format(pathObject: {
|
|
163
|
+
root: string;
|
|
164
|
+
dir: string;
|
|
165
|
+
base: string;
|
|
166
|
+
ext: string;
|
|
167
|
+
name: string;
|
|
168
|
+
}): string;
|
|
169
|
+
parse(path: string): {
|
|
170
|
+
root: string;
|
|
171
|
+
dir: string;
|
|
172
|
+
base: string;
|
|
173
|
+
ext: string;
|
|
174
|
+
name: string;
|
|
175
|
+
};
|
|
176
|
+
readonly sep: string;
|
|
177
|
+
readonly delimiter: string;
|
|
178
|
+
readonly win32: null;
|
|
179
|
+
readonly posix: Path;
|
|
180
|
+
}
|
|
181
|
+
|
|
72
182
|
/** @public */
|
|
73
183
|
export declare interface QwikAsset {
|
|
74
184
|
/** Name of the asset */
|
|
@@ -97,6 +207,8 @@ export declare interface QwikBundle {
|
|
|
97
207
|
imports?: string[];
|
|
98
208
|
/** Dynamic imports */
|
|
99
209
|
dynamicImports?: string[];
|
|
210
|
+
/** Dynamic imports of qrl segments, the subset of `dynamicImports` the preloader follows */
|
|
211
|
+
qrlImports?: string[];
|
|
100
212
|
/** Source files of the bundle */
|
|
101
213
|
origins?: string[];
|
|
102
214
|
}
|
|
@@ -437,6 +549,14 @@ declare interface QwikVitePluginCommonOptions {
|
|
|
437
549
|
* Default `undefined`
|
|
438
550
|
*/
|
|
439
551
|
optimizerOptions?: OptimizerOptions;
|
|
552
|
+
/**
|
|
553
|
+
* Use the TypeScript optimizer (`@qwik.dev/ts-optimizer`) instead of the Rust one. The
|
|
554
|
+
* `QWIK_OPTIMIZER` environment variable (`ts` or `rust`) overrides this, so a project can be
|
|
555
|
+
* built or tested on the other optimizer without changing its config.
|
|
556
|
+
*
|
|
557
|
+
* Default `false`
|
|
558
|
+
*/
|
|
559
|
+
tsOptimizer?: boolean;
|
|
440
560
|
/**
|
|
441
561
|
* Hook that's called after the build and provides all of the transformed modules that were used
|
|
442
562
|
* before bundling.
|
|
@@ -542,9 +662,35 @@ export declare interface ResolvedManifest {
|
|
|
542
662
|
bundleGraph?: QwikBundleGraph;
|
|
543
663
|
}
|
|
544
664
|
|
|
665
|
+
/** @public */
|
|
666
|
+
export declare interface SegmentAnalysis {
|
|
667
|
+
origin: string;
|
|
668
|
+
name: string;
|
|
669
|
+
entry: string | null;
|
|
670
|
+
displayName: string;
|
|
671
|
+
hash: string;
|
|
672
|
+
canonicalFilename: string;
|
|
673
|
+
extension: string;
|
|
674
|
+
parent: string | null;
|
|
675
|
+
ctxKind: 'eventHandler' | 'function';
|
|
676
|
+
ctxName: string;
|
|
677
|
+
captures: boolean;
|
|
678
|
+
loc: [number, number];
|
|
679
|
+
/** The parameter names if it's a function with parameters */
|
|
680
|
+
paramNames?: string[];
|
|
681
|
+
/** The transformed names of scoped variables, if any */
|
|
682
|
+
captureNames?: string[];
|
|
683
|
+
}
|
|
684
|
+
|
|
545
685
|
/** @public */
|
|
546
686
|
declare type SegmentCallback = (parentId: string, segment: SegmentAnalysis) => void;
|
|
547
687
|
|
|
688
|
+
/** @public */
|
|
689
|
+
export declare interface SegmentEntryStrategy {
|
|
690
|
+
type: 'segment';
|
|
691
|
+
manual?: Record<string, string>;
|
|
692
|
+
}
|
|
693
|
+
|
|
548
694
|
/**
|
|
549
695
|
* The manifest values that are needed for SSR.
|
|
550
696
|
*
|
|
@@ -552,13 +698,86 @@ declare type SegmentCallback = (parentId: string, segment: SegmentAnalysis) => v
|
|
|
552
698
|
*/
|
|
553
699
|
export declare type ServerQwikManifest = Pick<QwikManifest, 'manifestHash' | 'injections' | 'bundleGraph' | 'bundleGraphAsset' | 'mapping' | 'preloader' | 'core' | 'qwikLoader'>;
|
|
554
700
|
|
|
701
|
+
/** @public */
|
|
702
|
+
export declare interface SingleEntryStrategy {
|
|
703
|
+
type: 'single';
|
|
704
|
+
manual?: Record<string, string>;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
/** @public */
|
|
708
|
+
export declare interface SmartEntryStrategy {
|
|
709
|
+
type: 'smart';
|
|
710
|
+
manual?: Record<string, string>;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
/** @public */
|
|
714
|
+
export declare interface SourceLocation {
|
|
715
|
+
hi: number;
|
|
716
|
+
lo: number;
|
|
717
|
+
startLine: number;
|
|
718
|
+
startCol: number;
|
|
719
|
+
endLine: number;
|
|
720
|
+
endCol: number;
|
|
721
|
+
}
|
|
722
|
+
|
|
555
723
|
/** @public */
|
|
556
724
|
export declare type SymbolMapper = Record<string, readonly [symbol: string, chunk: string]>;
|
|
557
725
|
|
|
558
726
|
/** @public */
|
|
559
727
|
export declare type SymbolMapperFn = (symbolName: string, mapper: SymbolMapper | undefined, parent?: string) => readonly [symbol: string, chunk: string] | undefined;
|
|
560
728
|
|
|
729
|
+
/** @public */
|
|
730
|
+
export declare type SystemEnvironment = 'node' | 'deno' | 'bun' | 'webworker' | 'browsermain' | 'unknown';
|
|
731
|
+
|
|
732
|
+
/** @public */
|
|
733
|
+
export declare interface TransformModule {
|
|
734
|
+
path: string;
|
|
735
|
+
isEntry: boolean;
|
|
736
|
+
code: string;
|
|
737
|
+
imports?: string[];
|
|
738
|
+
map: string | null;
|
|
739
|
+
segment: SegmentAnalysis | null;
|
|
740
|
+
origPath: string | null;
|
|
741
|
+
}
|
|
561
742
|
|
|
562
|
-
|
|
743
|
+
/** @public */
|
|
744
|
+
export declare interface TransformModuleInput {
|
|
745
|
+
path: string;
|
|
746
|
+
devPath?: string;
|
|
747
|
+
code: string;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/** @public */
|
|
751
|
+
export declare interface TransformModulesOptions extends TransformOptions {
|
|
752
|
+
input: TransformModuleInput[];
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/** @public */
|
|
756
|
+
export declare interface TransformOptions {
|
|
757
|
+
srcDir: string;
|
|
758
|
+
rootDir?: string;
|
|
759
|
+
entryStrategy?: EntryStrategy;
|
|
760
|
+
minify?: MinifyMode;
|
|
761
|
+
sourceMaps?: boolean;
|
|
762
|
+
transpileTs?: boolean;
|
|
763
|
+
transpileJsx?: boolean;
|
|
764
|
+
preserveFilenames?: boolean;
|
|
765
|
+
explicitExtensions?: boolean;
|
|
766
|
+
mode?: EmitMode;
|
|
767
|
+
scope?: string;
|
|
768
|
+
stripExports?: string[];
|
|
769
|
+
regCtxName?: string[];
|
|
770
|
+
stripCtxName?: string[];
|
|
771
|
+
stripEventHandlers?: boolean;
|
|
772
|
+
isServer?: boolean;
|
|
773
|
+
}
|
|
774
|
+
|
|
775
|
+
/** @public */
|
|
776
|
+
export declare interface TransformOutput {
|
|
777
|
+
modules: TransformModule[];
|
|
778
|
+
diagnostics: Diagnostic[];
|
|
779
|
+
isTypeScript: boolean;
|
|
780
|
+
isJsx: boolean;
|
|
781
|
+
}
|
|
563
782
|
|
|
564
783
|
export { }
|