UNPKG

@builder.io/qwik

Version:

An Open-Source sub-framework designed with a focus on server-side-rendering, lazy-loading, and styling/animation.

755 lines (739 loc) 39.5 kB
/** * @license * @builder.io/qwik/server 1.11.0 * Copyright Builder.io, Inc. All Rights Reserved. * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/QwikDev/qwik/blob/main/LICENSE */ globalThis.qwikServer = (function (module) { if (typeof require !== 'function' && typeof location !== 'undefined' && typeof navigator !== 'undefined') { // shim cjs require() for core.cjs within a browser globalThis.require = function(path) { if (path === './core.cjs' || path === '@builder.io/qwik') { if (!self.qwikCore) { throw new Error('Qwik Core global, "globalThis.qwikCore", must already be loaded for the Qwik Server to be used within a browser.'); } return self.qwikCore; } if (path === '@builder.io/qwik/build') { if (!self.qwikBuild) { throw new Error('Qwik Build global, "globalThis.qwikBuild", must already be loaded for the Qwik Server to be used within a browser.'); } return self.qwikBuild; } throw new Error('Unable to require() path "' + path + '" from a browser environment.'); }; } "use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // packages/qwik/src/server/index.ts var server_exports = {}; __export(server_exports, { getQwikLoaderScript: () => getQwikLoaderScript, getQwikPrefetchWorkerScript: () => getQwikPrefetchWorkerScript, renderToStream: () => renderToStream, renderToString: () => renderToString, resolveManifest: () => resolveManifest, setServerPlatform: () => setServerPlatform2, versions: () => versions2 }); module.exports = __toCommonJS(server_exports); var import_qwik4 = require("@builder.io/qwik"); // packages/qwik/src/server/platform.ts var import_qwik = require("@builder.io/qwik"); var SYNC_QRL = "<sync>"; function createPlatform(opts, resolvedManifest) { const mapper = resolvedManifest == null ? void 0 : resolvedManifest.mapper; const mapperFn = opts.symbolMapper ? opts.symbolMapper : (symbolName, _chunk, parent) => { var _a; if (mapper) { const hash2 = getSymbolHash(symbolName); const result = mapper[hash2]; if (!result) { if (hash2 === SYNC_QRL) { return [hash2, ""]; } const isRegistered = (_a = globalThis.__qwik_reg_symbols) == null ? void 0 : _a.has(hash2); if (isRegistered) { return [symbolName, "_"]; } if (parent) { return [symbolName, `${parent}?qrl=${symbolName}`]; } console.error("Cannot resolve symbol", symbolName, "in", mapper, parent); } return result; } }; const serverPlatform = { isServer: true, async importSymbol(_containerEl, url, symbolName) { var _a; const hash2 = getSymbolHash(symbolName); const regSym = (_a = globalThis.__qwik_reg_symbols) == null ? void 0 : _a.get(hash2); if (regSym) { return regSym; } let modulePath = String(url); if (!modulePath.endsWith(".js")) { modulePath += ".js"; } const module2 = require(modulePath); if (!(symbolName in module2)) { throw new Error(`Q-ERROR: missing symbol '${symbolName}' in module '${modulePath}'.`); } return module2[symbolName]; }, raf: () => { console.error("server can not rerender"); return Promise.resolve(); }, nextTick: (fn) => { return new Promise((resolve) => { setTimeout(() => { resolve(fn()); }); }); }, chunkForSymbol(symbolName, _chunk, parent) { return mapperFn(symbolName, mapper, parent); } }; return serverPlatform; } async function setServerPlatform(opts, manifest) { const platform = createPlatform(opts, manifest); (0, import_qwik.setPlatform)(platform); } var getSymbolHash = (symbolName) => { const index = symbolName.lastIndexOf("_"); if (index > -1) { return symbolName.slice(index + 1); } return symbolName; }; // packages/qwik/src/server/render.ts var import_qwik3 = require("@builder.io/qwik"); var import_build = require("@builder.io/qwik/build"); // packages/qwik/src/core/util/markers.ts var QInstance = "q:instance"; // packages/qwik/src/optimizer/src/manifest.ts function getValidManifest(manifest) { if (manifest != null && manifest.mapping != null && typeof manifest.mapping === "object" && manifest.symbols != null && typeof manifest.symbols === "object" && manifest.bundles != null && typeof manifest.bundles === "object") { return manifest; } return void 0; } // packages/qwik/src/server/prefetch-implementation.ts var import_qwik2 = require("@builder.io/qwik"); // packages/qwik/src/server/prefetch-utils.ts function workerFetchScript() { const fetch2 = `Promise.all(e.data.map(u=>fetch(u))).finally(()=>{setTimeout(postMessage({}),9999)})`; const workerBody = `onmessage=(e)=>{${fetch2}}`; const blob = `new Blob(['${workerBody}'],{type:"text/javascript"})`; const url = `URL.createObjectURL(${blob})`; let s = `const w=new Worker(${url});`; s += `w.postMessage(u.map(u=>new URL(u,origin)+''));`; s += `w.onmessage=()=>{w.terminate()};`; return s; } function prefetchUrlsEventScript(base, prefetchResources) { const data = { bundles: flattenPrefetchResources(prefetchResources).map((u) => u.split("/").pop()) }; const args = JSON.stringify(["prefetch", base, ...data.bundles]); return `(window.qwikPrefetchSW||(window.qwikPrefetchSW=[])).push(${args});`; } function flattenPrefetchResources(prefetchResources) { const urls = []; const addPrefetchResource = (prefetchResources2) => { if (Array.isArray(prefetchResources2)) { for (const prefetchResource of prefetchResources2) { if (!urls.includes(prefetchResource.url)) { urls.push(prefetchResource.url); addPrefetchResource(prefetchResource.imports); } } } }; addPrefetchResource(prefetchResources); return urls; } function getMostReferenced(prefetchResources) { const common = /* @__PURE__ */ new Map(); let total = 0; const addPrefetchResource = (prefetchResources2, visited2) => { if (Array.isArray(prefetchResources2)) { for (const prefetchResource of prefetchResources2) { const count = common.get(prefetchResource.url) || 0; common.set(prefetchResource.url, count + 1); total++; if (!visited2.has(prefetchResource.url)) { visited2.add(prefetchResource.url); addPrefetchResource(prefetchResource.imports, visited2); } } } }; const visited = /* @__PURE__ */ new Set(); for (const resource of prefetchResources) { visited.clear(); addPrefetchResource(resource.imports, visited); } const threshold = total / common.size * 2; const urls = Array.from(common.entries()); urls.sort((a, b) => b[1] - a[1]); return urls.slice(0, 5).filter((e) => e[1] > threshold).map((e) => e[0]); } // packages/qwik/src/server/prefetch-implementation.ts function applyPrefetchImplementation(base, prefetchStrategy, prefetchResources, nonce) { const prefetchImpl = normalizePrefetchImplementation(prefetchStrategy == null ? void 0 : prefetchStrategy.implementation); const prefetchNodes = []; if (prefetchImpl.prefetchEvent === "always") { prefetchUrlsEvent(base, prefetchNodes, prefetchResources, nonce); } if (prefetchImpl.linkInsert === "html-append") { linkHtmlImplementation(prefetchNodes, prefetchResources, prefetchImpl); } if (prefetchImpl.linkInsert === "js-append") { linkJsImplementation(prefetchNodes, prefetchResources, prefetchImpl, nonce); } else if (prefetchImpl.workerFetchInsert === "always") { workerFetchImplementation(prefetchNodes, prefetchResources, nonce); } if (prefetchNodes.length > 0) { return (0, import_qwik2.jsx)(import_qwik2.Fragment, { children: prefetchNodes }); } return null; } function prefetchUrlsEvent(base, prefetchNodes, prefetchResources, nonce) { const mostReferenced = getMostReferenced(prefetchResources); for (const url of mostReferenced) { prefetchNodes.push( (0, import_qwik2.jsx)("link", { rel: "modulepreload", href: url, nonce }) ); } prefetchNodes.push( (0, import_qwik2.jsx)("script", { "q:type": "prefetch-bundles", dangerouslySetInnerHTML: prefetchUrlsEventScript(base, prefetchResources) + `document.dispatchEvent(new CustomEvent('qprefetch', {detail:{links: [location.pathname]}}))`, nonce }) ); } function linkHtmlImplementation(prefetchNodes, prefetchResources, prefetchImpl) { const urls = flattenPrefetchResources(prefetchResources); const rel = prefetchImpl.linkRel || "prefetch"; const priority = prefetchImpl.linkFetchPriority; for (const url of urls) { const attributes = {}; attributes["href"] = url; attributes["rel"] = rel; if (priority) { attributes["fetchpriority"] = priority; } if (rel === "prefetch" || rel === "preload") { if (url.endsWith(".js")) { attributes["as"] = "script"; } } prefetchNodes.push((0, import_qwik2.jsx)("link", attributes, void 0)); } } function linkJsImplementation(prefetchNodes, prefetchResources, prefetchImpl, nonce) { const rel = prefetchImpl.linkRel || "prefetch"; const priority = prefetchImpl.linkFetchPriority; let s = ``; if (prefetchImpl.workerFetchInsert === "no-link-support") { s += `let supportsLinkRel = true;`; } s += `const u=${JSON.stringify(flattenPrefetchResources(prefetchResources))};`; s += `u.map((u,i)=>{`; s += `const l=document.createElement('link');`; s += `l.setAttribute("href",u);`; s += `l.setAttribute("rel","${rel}");`; if (priority) { s += `l.setAttribute("fetchpriority","${priority}");`; } if (prefetchImpl.workerFetchInsert === "no-link-support") { s += `if(i===0){`; s += `try{`; s += `supportsLinkRel=l.relList.supports("${rel}");`; s += `}catch(e){}`; s += `}`; } s += `document.body.appendChild(l);`; s += `});`; if (prefetchImpl.workerFetchInsert === "no-link-support") { s += `if(!supportsLinkRel){`; s += workerFetchScript(); s += `}`; } if (prefetchImpl.workerFetchInsert === "always") { s += workerFetchScript(); } prefetchNodes.push( (0, import_qwik2.jsx)("script", { type: "module", "q:type": "link-js", dangerouslySetInnerHTML: s, nonce }) ); } function workerFetchImplementation(prefetchNodes, prefetchResources, nonce) { let s = `const u=${JSON.stringify(flattenPrefetchResources(prefetchResources))};`; s += workerFetchScript(); prefetchNodes.push( (0, import_qwik2.jsx)("script", { type: "module", "q:type": "prefetch-worker", dangerouslySetInnerHTML: s, nonce }) ); } function normalizePrefetchImplementation(input) { return { ...PrefetchImplementationDefault, ...input }; } var PrefetchImplementationDefault = { linkInsert: null, linkRel: null, linkFetchPriority: null, workerFetchInsert: null, prefetchEvent: "always" }; // packages/qwik/src/server/utils.ts var import_meta = {}; function createTimer() { if (typeof performance === "undefined") { return () => 0; } const start = performance.now(); return () => { const end = performance.now(); const delta = end - start; return delta / 1e6; }; } function getBuildBase(opts) { let base = opts.base; if (typeof opts.base === "function") { base = opts.base(opts); } if (typeof base === "string") { if (!base.endsWith("/")) { base += "/"; } return base; } return `${import_meta.env.BASE_URL}build/`; } var versions2 = { qwik: "1.11.0", qwikDom: "2.1.19" }; // packages/qwik/src/core/util/qdev.ts var qDev = globalThis.qDev !== false; var qInspector = globalThis.qInspector === true; var qSerialize = globalThis.qSerialize !== false; var qDynamicPlatform = globalThis.qDynamicPlatform !== false; var qTest = globalThis.qTest === true; var qRuntimeQrl = globalThis.qRuntimeQrl === true; // packages/qwik/src/server/prefetch-strategy.ts function getPrefetchResources(snapshotResult, opts, resolvedManifest) { if (!resolvedManifest) { return []; } const prefetchStrategy = opts.prefetchStrategy; const buildBase = getBuildBase(opts); if (prefetchStrategy !== null) { if (!prefetchStrategy || !prefetchStrategy.symbolsToPrefetch || prefetchStrategy.symbolsToPrefetch === "auto") { return getAutoPrefetch(snapshotResult, resolvedManifest, buildBase); } if (typeof prefetchStrategy.symbolsToPrefetch === "function") { try { return prefetchStrategy.symbolsToPrefetch({ manifest: resolvedManifest.manifest }); } catch (e) { console.error("getPrefetchUrls, symbolsToPrefetch()", e); } } } return []; } function getAutoPrefetch(snapshotResult, resolvedManifest, buildBase) { const prefetchResources = []; const qrls = snapshotResult == null ? void 0 : snapshotResult.qrls; const { mapper, manifest } = resolvedManifest; const urls = /* @__PURE__ */ new Map(); if (Array.isArray(qrls)) { for (const qrl of qrls) { const qrlSymbolName = qrl.getHash(); const resolvedSymbol = mapper[qrlSymbolName]; if (resolvedSymbol) { const bundleFileName = resolvedSymbol[1]; addBundle(manifest, urls, prefetchResources, buildBase, bundleFileName); } } } return prefetchResources; } function addBundle(manifest, urls, prefetchResources, buildBase, bundleFileName) { const url = qDev ? bundleFileName : buildBase + bundleFileName; let prefetchResource = urls.get(url); if (!prefetchResource) { prefetchResource = { url, imports: [] }; urls.set(url, prefetchResource); const bundle = manifest.bundles[bundleFileName]; if (bundle) { if (Array.isArray(bundle.imports)) { for (const importedFilename of bundle.imports) { addBundle(manifest, urls, prefetchResource.imports, buildBase, importedFilename); } } } } prefetchResources.push(prefetchResource); } // packages/qwik/src/server/scripts.ts var QWIK_LOADER_DEFAULT_MINIFIED = '(()=>{var e=Object.defineProperty,t=Object.getOwnPropertySymbols,r=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable,n=(t,r,o)=>r in t?e(t,r,{enumerable:!0,configurable:!0,writable:!0,value:o}):t[r]=o,s=(e,s)=>{for(var a in s||(s={}))r.call(s,a)&&n(e,a,s[a]);if(t)for(var a of t(s))o.call(s,a)&&n(e,a,s[a]);return e};((e,t)=>{const r="__q_context__",o=window,n=new Set,a=new Set([e]),c="replace",i="forEach",l="target",f="getAttribute",p="isConnected",b="qvisible",u="_qwikjson_",y=(e,t)=>Array.from(e.querySelectorAll(t)),h=e=>{const t=[];return a.forEach((r=>t.push(...y(r,e)))),t},d=e=>{S(e),y(e,"[q\\\\:shadowroot]").forEach((e=>{const t=e.shadowRoot;t&&d(t)}))},m=e=>e&&"function"==typeof e.then,w=(e,t,r=t.type)=>{h("[on"+e+"\\\\:"+r+"]")[i]((o=>E(o,e,t,r)))},q=t=>{if(void 0===t[u]){let r=(t===e.documentElement?e.body:t).lastElementChild;for(;r;){if("SCRIPT"===r.tagName&&"qwik/json"===r[f]("type")){t[u]=JSON.parse(r.textContent[c](/\\\\x3C(\\/?script)/gi,"<$1"));break}r=r.previousElementSibling}}},v=(e,t)=>new CustomEvent(e,{detail:t}),E=async(t,o,n,a=n.type)=>{const i="on"+o+":"+a;t.hasAttribute("preventdefault:"+a)&&n.preventDefault();const l=t._qc_,b=l&&l.li.filter((e=>e[0]===i));if(b&&b.length>0){for(const e of b){const r=e[1].getFn([t,n],(()=>t[p]))(n,t),o=n.cancelBubble;m(r)&&await r,o&&n.stopPropagation()}return}const u=t[f](i);if(u){const o=t.closest("[q\\\\:container]"),a=o[f]("q:base"),i=o[f]("q:version")||"unknown",l=o[f]("q:manifest-hash")||"dev",b=new URL(a,e.baseURI);for(const f of u.split("\\n")){const u=new URL(f,b),y=u.href,h=u.hash[c](/^#?([^?[|]*).*$/,"$1")||"default",d=performance.now();let w,v,E;const _=f.startsWith("#"),A={qBase:a,qManifest:l,qVersion:i,href:y,symbol:h,element:t,reqTime:d};if(_){const t=o.getAttribute("q:instance");w=(e["qFuncs_"+t]||[])[Number.parseInt(h)],w||(v="sync",E=Error("sync handler error for symbol: "+h))}else{const e=u.href.split("#")[0];try{const t=import(e);q(o),w=(await t)[h],w||(v="no-symbol",E=Error(`${h} not in ${e}`))}catch(e){v||(v="async"),E=e}}if(!w){g("qerror",s({importError:v,error:E},A)),console.error(E);break}const k=e[r];if(t[p])try{e[r]=[t,n,u],_||g("qsymbol",s({},A));const o=w(n,t);m(o)&&await o}catch(e){g("qerror",s({error:e},A))}finally{e[r]=k}}}},g=(t,r)=>{e.dispatchEvent(v(t,r))},_=e=>e[c](/([A-Z])/g,(e=>"-"+e.toLowerCase())),A=async e=>{let t=_(e.type),r=e[l];for(w("-document",e,t);r&&r[f];){const o=E(r,"",e,t);let n=e.cancelBubble;m(o)&&await o,n=n||e.cancelBubble||r.hasAttribute("stoppropagation:"+e.type),r=e.bubbles&&!0!==n?r.parentElement:null}},k=e=>{w("-window",e,_(e.type))},C=()=>{var r;const s=e.readyState;if(!t&&("interactive"==s||"complete"==s)&&(a.forEach(d),t=1,g("qinit"),(null!=(r=o.requestIdleCallback)?r:o.setTimeout).bind(o)((()=>g("qidle"))),n.has(b))){const e=h("[on\\\\:"+b+"]"),t=new IntersectionObserver((e=>{for(const r of e)r.isIntersecting&&(t.unobserve(r[l]),E(r[l],"",v(b,r)))}));e[i]((e=>t.observe(e)))}},O=(e,t,r,o=!1)=>e.addEventListener(t,r,{capture:o,passive:!1}),S=(...e)=>{for(const t of e)"string"==typeof t?n.has(t)||(a.forEach((e=>O(e,t,A,!0))),O(o,t,k,!0),n.add(t)):a.has(t)||(n.forEach((e=>O(t,e,A,!0))),a.add(t))};if(!(r in e)){e[r]=0;const t=o.qwikevents;Array.isArray(t)&&S(...t),o.qwikevents={events:n,roots:a,push:S},O(e,"readystatechange",C),C()}})(document)})()'; var QWIK_LOADER_DEFAULT_DEBUG = '(() => {\n var __defProp = Object.defineProperty;\n var __getOwnPropSymbols = Object.getOwnPropertySymbols;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __propIsEnum = Object.prototype.propertyIsEnumerable;\n var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {\n enumerable: !0,\n configurable: !0,\n writable: !0,\n value: value\n }) : obj[key] = value;\n var __spreadValues = (a, b) => {\n for (var prop in b || (b = {})) {\n __hasOwnProp.call(b, prop) && __defNormalProp(a, prop, b[prop]);\n }\n if (__getOwnPropSymbols) {\n for (var prop of __getOwnPropSymbols(b)) {\n __propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);\n }\n }\n return a;\n };\n ((doc, hasInitialized) => {\n const Q_CONTEXT = "__q_context__";\n const win = window;\n const events = new Set;\n const roots = new Set([ doc ]);\n const nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));\n const querySelectorAll = query => {\n const elements = [];\n roots.forEach((root => elements.push(...nativeQuerySelectorAll(root, query))));\n return elements;\n };\n const findShadowRoots = fragment => {\n processEventOrNode(fragment);\n nativeQuerySelectorAll(fragment, "[q\\\\:shadowroot]").forEach((parent => {\n const shadowRoot = parent.shadowRoot;\n shadowRoot && findShadowRoots(shadowRoot);\n }));\n };\n const isPromise = promise => promise && "function" == typeof promise.then;\n const broadcast = (infix, ev, type = ev.type) => {\n querySelectorAll("[on" + infix + "\\\\:" + type + "]").forEach((el => dispatch(el, infix, ev, type)));\n };\n const resolveContainer = containerEl => {\n if (void 0 === containerEl._qwikjson_) {\n let script = (containerEl === doc.documentElement ? doc.body : containerEl).lastElementChild;\n while (script) {\n if ("SCRIPT" === script.tagName && "qwik/json" === script.getAttribute("type")) {\n containerEl._qwikjson_ = JSON.parse(script.textContent.replace(/\\\\x3C(\\/?script)/gi, "<$1"));\n break;\n }\n script = script.previousElementSibling;\n }\n }\n };\n const createEvent = (eventName, detail) => new CustomEvent(eventName, {\n detail: detail\n });\n const dispatch = async (element, onPrefix, ev, eventName = ev.type) => {\n const attrName = "on" + onPrefix + ":" + eventName;\n element.hasAttribute("preventdefault:" + eventName) && ev.preventDefault();\n const ctx = element._qc_;\n const relevantListeners = ctx && ctx.li.filter((li => li[0] === attrName));\n if (relevantListeners && relevantListeners.length > 0) {\n for (const listener of relevantListeners) {\n const results = listener[1].getFn([ element, ev ], (() => element.isConnected))(ev, element);\n const cancelBubble = ev.cancelBubble;\n isPromise(results) && await results;\n cancelBubble && ev.stopPropagation();\n }\n return;\n }\n const attrValue = element.getAttribute(attrName);\n if (attrValue) {\n const container = element.closest("[q\\\\:container]");\n const qBase = container.getAttribute("q:base");\n const qVersion = container.getAttribute("q:version") || "unknown";\n const qManifest = container.getAttribute("q:manifest-hash") || "dev";\n const base = new URL(qBase, doc.baseURI);\n for (const qrl of attrValue.split("\\n")) {\n const url = new URL(qrl, base);\n const href = url.href;\n const symbol = url.hash.replace(/^#?([^?[|]*).*$/, "$1") || "default";\n const reqTime = performance.now();\n let handler;\n let importError;\n let error;\n const isSync = qrl.startsWith("#");\n const eventData = {\n qBase: qBase,\n qManifest: qManifest,\n qVersion: qVersion,\n href: href,\n symbol: symbol,\n element: element,\n reqTime: reqTime\n };\n if (isSync) {\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("sync handler error for symbol: " + symbol);\n }\n } else {\n const uri = url.href.split("#")[0];\n try {\n const module = import(\n uri);\n resolveContainer(container);\n handler = (await module)[symbol];\n if (!handler) {\n importError = "no-symbol";\n error = new Error(`${symbol} not in ${uri}`);\n }\n } catch (err) {\n importError || (importError = "async");\n error = err;\n }\n }\n if (!handler) {\n emitEvent("qerror", __spreadValues({\n importError: importError,\n error: error\n }, eventData));\n console.error(error);\n break;\n }\n const previousCtx = doc[Q_CONTEXT];\n if (element.isConnected) {\n try {\n doc[Q_CONTEXT] = [ element, ev, url ];\n isSync || emitEvent("qsymbol", __spreadValues({}, eventData));\n const results = handler(ev, element);\n isPromise(results) && await results;\n } catch (error2) {\n emitEvent("qerror", __spreadValues({\n error: error2\n }, eventData));\n } finally {\n doc[Q_CONTEXT] = previousCtx;\n }\n }\n }\n }\n };\n const emitEvent = (eventName, detail) => {\n doc.dispatchEvent(createEvent(eventName, detail));\n };\n const camelToKebab = str => str.replace(/([A-Z])/g, (a => "-" + a.toLowerCase()));\n const processDocumentEvent = async ev => {\n let type = camelToKebab(ev.type);\n let element = ev.target;\n broadcast("-document", ev, type);\n while (element && element.getAttribute) {\n const results = dispatch(element, "", ev, type);\n let cancelBubble = ev.cancelBubble;\n isPromise(results) && await results;\n cancelBubble = cancelBubble || ev.cancelBubble || element.hasAttribute("stoppropagation:" + ev.type);\n element = ev.bubbles && !0 !== cancelBubble ? element.parentElement : null;\n }\n };\n const processWindowEvent = ev => {\n broadcast("-window", ev, camelToKebab(ev.type));\n };\n const processReadyStateChange = () => {\n var _a;\n const readyState = doc.readyState;\n if (!hasInitialized && ("interactive" == readyState || "complete" == readyState)) {\n roots.forEach(findShadowRoots);\n hasInitialized = 1;\n emitEvent("qinit");\n (null != (_a = win.requestIdleCallback) ? _a : win.setTimeout).bind(win)((() => emitEvent("qidle")));\n if (events.has("qvisible")) {\n const results = querySelectorAll("[on\\\\:qvisible]");\n const observer = new IntersectionObserver((entries => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n observer.unobserve(entry.target);\n dispatch(entry.target, "", createEvent("qvisible", entry));\n }\n }\n }));\n results.forEach((el => observer.observe(el)));\n }\n }\n };\n const addEventListener = (el, eventName, handler, capture = !1) => el.addEventListener(eventName, handler, {\n capture: capture,\n passive: !1\n });\n const processEventOrNode = (...eventNames) => {\n for (const eventNameOrNode of eventNames) {\n if ("string" == typeof eventNameOrNode) {\n if (!events.has(eventNameOrNode)) {\n roots.forEach((root => addEventListener(root, eventNameOrNode, processDocumentEvent, !0)));\n addEventListener(win, eventNameOrNode, processWindowEvent, !0);\n events.add(eventNameOrNode);\n }\n } else if (!roots.has(eventNameOrNode)) {\n events.forEach((eventName => addEventListener(eventNameOrNode, eventName, processDocumentEvent, !0)));\n roots.add(eventNameOrNode);\n }\n }\n };\n if (!(Q_CONTEXT in doc)) {\n doc[Q_CONTEXT] = 0;\n const qwikevents = win.qwikevents;\n Array.isArray(qwikevents) && processEventOrNode(...qwikevents);\n win.qwikevents = {\n events: events,\n roots: roots,\n push: processEventOrNode\n };\n addEventListener(doc, "readystatechange", processReadyStateChange);\n processReadyStateChange();\n }\n })(document);\n})()'; function getQwikLoaderScript(opts = {}) { return opts.debug ? QWIK_LOADER_DEFAULT_DEBUG : QWIK_LOADER_DEFAULT_MINIFIED; } var QWIK_PREFETCH_MINIFIED = globalThis.QWIK_PREFETCH_MINIFIED; var QWIK_PREFETCH_DEBUG = globalThis.QWIK_PREFETCH_DEBUG; function getQwikPrefetchWorkerScript(opts = {}) { return opts.debug ? QWIK_PREFETCH_DEBUG : QWIK_PREFETCH_MINIFIED; } // packages/qwik/src/server/render.ts var DOCTYPE = "<!DOCTYPE html>"; async function renderToStream(rootNode, opts) { var _a, _b, _c; let stream = opts.stream; let bufferSize = 0; let totalSize = 0; let networkFlushes = 0; let firstFlushTime = 0; let buffer = ""; let snapshotResult; const inOrderStreaming = ((_a = opts.streaming) == null ? void 0 : _a.inOrder) ?? { strategy: "auto", maximunInitialChunk: 5e4, maximunChunk: 3e4 }; const containerTagName = opts.containerTagName ?? "html"; const containerAttributes = opts.containerAttributes ?? {}; const nativeStream = stream; const firstFlushTimer = createTimer(); const buildBase = getBuildBase(opts); const resolvedManifest = resolveManifest(opts.manifest); function flush() { if (buffer) { nativeStream.write(buffer); buffer = ""; bufferSize = 0; networkFlushes++; if (networkFlushes === 1) { firstFlushTime = firstFlushTimer(); } } } function enqueue(chunk) { const len = chunk.length; bufferSize += len; totalSize += len; buffer += chunk; } switch (inOrderStreaming.strategy) { case "disabled": stream = { write: enqueue }; break; case "direct": stream = nativeStream; break; case "auto": let count = 0; let forceFlush = false; const minimunChunkSize = inOrderStreaming.maximunChunk ?? 0; const initialChunkSize = inOrderStreaming.maximunInitialChunk ?? 0; stream = { write(chunk) { if (chunk === "<!--qkssr-f-->") { forceFlush ||= true; } else if (chunk === "<!--qkssr-pu-->") { count++; } else if (chunk === "<!--qkssr-po-->") { count--; } else { enqueue(chunk); } const chunkSize = networkFlushes === 0 ? initialChunkSize : minimunChunkSize; if (count === 0 && (forceFlush || bufferSize >= chunkSize)) { forceFlush = false; flush(); } } }; break; } if (containerTagName === "html") { stream.write(DOCTYPE); } else { stream.write("<!--cq-->"); if (opts.qwikLoader) { if (opts.qwikLoader.include === void 0) { opts.qwikLoader.include = "never"; } if (opts.qwikLoader.position === void 0) { opts.qwikLoader.position = "bottom"; } } else { opts.qwikLoader = { include: "never" }; } if (!opts.qwikPrefetchServiceWorker) { opts.qwikPrefetchServiceWorker = {}; } if (!opts.qwikPrefetchServiceWorker.include) { opts.qwikPrefetchServiceWorker.include = false; } if (!opts.qwikPrefetchServiceWorker.position) { opts.qwikPrefetchServiceWorker.position = "top"; } } if (!opts.manifest) { console.warn( `Missing client manifest, loading symbols in the client might 404. Please ensure the client build has run and generated the manifest for the server build.` ); } await setServerPlatform(opts, resolvedManifest); const injections = resolvedManifest == null ? void 0 : resolvedManifest.manifest.injections; const beforeContent = injections ? injections.map((injection) => (0, import_qwik3.jsx)(injection.tag, injection.attributes ?? {})) : []; const includeMode = ((_b = opts.qwikLoader) == null ? void 0 : _b.include) ?? "auto"; const positionMode = ((_c = opts.qwikLoader) == null ? void 0 : _c.position) ?? "bottom"; if (positionMode === "top" && includeMode !== "never") { const qwikLoaderScript = getQwikLoaderScript({ debug: opts.debug }); beforeContent.push( (0, import_qwik3.jsx)("script", { id: "qwikloader", dangerouslySetInnerHTML: qwikLoaderScript }) ); beforeContent.push( (0, import_qwik3.jsx)("script", { dangerouslySetInnerHTML: `window.qwikevents.push('click')` }) ); } const renderTimer = createTimer(); const renderSymbols = []; let renderTime = 0; let snapshotTime = 0; await (0, import_qwik3._renderSSR)(rootNode, { stream, containerTagName, containerAttributes, serverData: opts.serverData, base: buildBase, beforeContent, beforeClose: async (contexts, containerState, _dynamic, textNodes) => { var _a2, _b2, _c2, _d, _e; renderTime = renderTimer(); const snapshotTimer = createTimer(); snapshotResult = await (0, import_qwik3._pauseFromContexts)(contexts, containerState, void 0, textNodes); const children = []; if (opts.prefetchStrategy !== null) { const prefetchResources = getPrefetchResources(snapshotResult, opts, resolvedManifest); const base = containerAttributes["q:base"]; if (prefetchResources.length > 0) { const prefetchImpl = applyPrefetchImplementation( base, opts.prefetchStrategy, prefetchResources, (_a2 = opts.serverData) == null ? void 0 : _a2.nonce ); if (prefetchImpl) { children.push(prefetchImpl); } } } const jsonData = JSON.stringify(snapshotResult.state, void 0, import_build.isDev ? " " : void 0); children.push( (0, import_qwik3.jsx)("script", { type: "qwik/json", dangerouslySetInnerHTML: escapeText(jsonData), nonce: (_b2 = opts.serverData) == null ? void 0 : _b2.nonce }) ); if (snapshotResult.funcs.length > 0) { const hash2 = containerAttributes[QInstance]; children.push( (0, import_qwik3.jsx)("script", { "q:func": "qwik/json", dangerouslySetInnerHTML: serializeFunctions(hash2, snapshotResult.funcs), nonce: (_c2 = opts.serverData) == null ? void 0 : _c2.nonce }) ); } const needLoader = !snapshotResult || snapshotResult.mode !== "static"; const includeLoader = includeMode === "always" || includeMode === "auto" && needLoader; if (includeLoader) { const qwikLoaderScript = getQwikLoaderScript({ debug: opts.debug }); children.push( (0, import_qwik3.jsx)("script", { id: "qwikloader", dangerouslySetInnerHTML: qwikLoaderScript, nonce: (_d = opts.serverData) == null ? void 0 : _d.nonce }) ); } const extraListeners = Array.from(containerState.$events$, (s) => JSON.stringify(s)); if (extraListeners.length > 0) { const content = (includeLoader ? `window.qwikevents` : `(window.qwikevents||=[])`) + `.push(${extraListeners.join(", ")})`; children.push( (0, import_qwik3.jsx)("script", { dangerouslySetInnerHTML: content, nonce: (_e = opts.serverData) == null ? void 0 : _e.nonce }) ); } collectRenderSymbols(renderSymbols, contexts); snapshotTime = snapshotTimer(); return (0, import_qwik3.jsx)(import_qwik3.Fragment, { children }); }, manifestHash: (resolvedManifest == null ? void 0 : resolvedManifest.manifest.manifestHash) || "dev" + hash() }); if (containerTagName !== "html") { stream.write("<!--/cq-->"); } flush(); const isDynamic = snapshotResult.resources.some((r) => r._cache !== Infinity); const result = { prefetchResources: void 0, snapshotResult, flushes: networkFlushes, manifest: resolvedManifest == null ? void 0 : resolvedManifest.manifest, size: totalSize, isStatic: !isDynamic, timing: { render: renderTime, snapshot: snapshotTime, firstFlush: firstFlushTime }, _symbols: renderSymbols }; return result; } function hash() { return Math.random().toString(36).slice(2); } async function renderToString(rootNode, opts = {}) { const chunks = []; const stream = { write(chunk) { chunks.push(chunk); } }; const result = await renderToStream(rootNode, { base: opts.base, containerAttributes: opts.containerAttributes, containerTagName: opts.containerTagName, locale: opts.locale, manifest: opts.manifest, symbolMapper: opts.symbolMapper, qwikLoader: opts.qwikLoader, serverData: opts.serverData, prefetchStrategy: opts.prefetchStrategy, stream }); return { isStatic: result.isStatic, prefetchResources: result.prefetchResources, timing: result.timing, manifest: result.manifest, snapshotResult: result.snapshotResult, html: chunks.join("") }; } function resolveManifest(manifest) { if (!manifest) { return void 0; } if ("mapper" in manifest) { return manifest; } manifest = getValidManifest(manifest); if (manifest) { const mapper = {}; Object.entries(manifest.mapping).forEach(([symbol, bundleFilename]) => { mapper[getSymbolHash(symbol)] = [symbol, bundleFilename]; }); return { mapper, manifest }; } return void 0; } var escapeText = (str) => { return str.replace(/<(\/?script)/gi, "\\x3C$1"); }; function collectRenderSymbols(renderSymbols, elements) { var _a; for (const ctx of elements) { const symbol = (_a = ctx.$componentQrl$) == null ? void 0 : _a.getSymbol(); if (symbol && !renderSymbols.includes(symbol)) { renderSymbols.push(symbol); } } } var Q_FUNCS_PREFIX = 'document["qFuncs_HASH"]='; function serializeFunctions(hash2, funcs) { return Q_FUNCS_PREFIX.replace("HASH", hash2) + `[${funcs.join(",\n")}]`; } // packages/qwik/src/server/index.ts async function setServerPlatform2(manifest) { const platform = createPlatform({ manifest }, resolveManifest(manifest)); (0, import_qwik4.setPlatform)(platform); } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { getQwikLoaderScript, getQwikPrefetchWorkerScript, renderToStream, renderToString, resolveManifest, setServerPlatform, versions }); return module.exports; })(typeof module === 'object' && module.exports ? module : { exports: {} });