@qwik.dev/core 2.0.0-beta.11 → 2.0.0-beta.14

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.
Files changed (79) hide show
  1. package/bindings/qwik.darwin-arm64.node +0 -0
  2. package/bindings/qwik.darwin-x64.node +0 -0
  3. package/bindings/qwik.linux-x64-gnu.node +0 -0
  4. package/bindings/qwik.win32-x64-msvc.node +0 -0
  5. package/bindings/qwik_wasm_bg.wasm +0 -0
  6. package/dist/backpatch/index.mjs +2 -2
  7. package/dist/backpatch/package.json +1 -1
  8. package/dist/backpatch-executor.debug.js +7 -2
  9. package/dist/backpatch-executor.js +1 -1
  10. package/dist/build/package.json +1 -1
  11. package/dist/{cli.cjs → cli.mjs} +444 -2624
  12. package/dist/core-internal.d.ts +219 -123
  13. package/dist/core.min.mjs +1 -1
  14. package/dist/core.mjs +9416 -8957
  15. package/dist/core.mjs.map +1 -1
  16. package/dist/core.prod.mjs +5225 -4890
  17. package/dist/loader/index.mjs +2 -2
  18. package/dist/loader/package.json +1 -1
  19. package/dist/optimizer.d.ts +3 -0
  20. package/dist/optimizer.mjs +1354 -1341
  21. package/dist/qwikloader.debug.js +14 -8
  22. package/dist/qwikloader.js +1 -1
  23. package/dist/server.d.ts +20 -12
  24. package/dist/server.mjs +466 -381
  25. package/dist/starters/adapters/aws-lambda/adapters/aws-lambda/{vite.config.mts → vite.config.ts} +1 -1
  26. package/dist/starters/adapters/aws-lambda/package.json +3 -2
  27. package/dist/starters/adapters/azure-swa/adapters/azure-swa/{vite.config.mts → vite.config.ts} +1 -1
  28. package/dist/starters/adapters/azure-swa/package.json +3 -2
  29. package/dist/starters/adapters/bun/adapters/bun/{vite.config.mts → vite.config.ts} +1 -1
  30. package/dist/starters/adapters/bun/package.json +3 -2
  31. package/dist/starters/adapters/cloud-run/adapters/cloud-run/{vite.config.mts → vite.config.ts} +1 -1
  32. package/dist/starters/adapters/cloud-run/package.json +3 -2
  33. package/dist/starters/adapters/cloudflare-pages/adapters/cloudflare-pages/{vite.config.mts → vite.config.ts} +1 -1
  34. package/dist/starters/adapters/cloudflare-pages/package.json +3 -2
  35. package/dist/starters/adapters/deno/adapters/deno/{vite.config.mts → vite.config.ts} +1 -1
  36. package/dist/starters/adapters/deno/package.json +3 -2
  37. package/dist/starters/adapters/express/adapters/express/{vite.config.mts → vite.config.ts} +1 -1
  38. package/dist/starters/adapters/express/package.json +3 -2
  39. package/dist/starters/adapters/fastify/adapters/fastify/{vite.config.mts → vite.config.ts} +1 -1
  40. package/dist/starters/adapters/fastify/package.json +3 -2
  41. package/dist/starters/adapters/firebase/adapters/firebase/{vite.config.mts → vite.config.ts} +1 -1
  42. package/dist/starters/adapters/firebase/package.json +3 -2
  43. package/dist/starters/adapters/netlify-edge/adapters/netlify-edge/{vite.config.mts → vite.config.ts} +1 -1
  44. package/dist/starters/adapters/netlify-edge/package.json +3 -2
  45. package/dist/starters/adapters/node-server/adapters/node-server/{vite.config.mts → vite.config.ts} +1 -1
  46. package/dist/starters/adapters/node-server/package.json +3 -2
  47. package/dist/starters/adapters/ssg/adapters/ssg/{vite.config.mts → vite.config.ts} +1 -1
  48. package/dist/starters/adapters/ssg/package.json +4 -3
  49. package/dist/starters/adapters/vercel-edge/README.md +2 -2
  50. package/dist/starters/adapters/vercel-edge/adapters/vercel-edge/{vite.config.mts → vite.config.ts} +1 -1
  51. package/dist/starters/adapters/vercel-edge/package.json +3 -2
  52. package/dist/starters/features/csr/package.json +1 -1
  53. package/dist/starters/features/storybook/.storybook/tsconfig.json +0 -1
  54. package/dist/starters/features/styled-vanilla-extract/package.json +2 -1
  55. package/dist/testing/index.d.ts +75 -27
  56. package/dist/testing/index.mjs +2809 -2178
  57. package/dist/testing/package.json +1 -1
  58. package/handlers.mjs +1 -1
  59. package/package.json +16 -50
  60. package/public.d.ts +1 -0
  61. package/{qwik-cli.cjs → qwik-cli.mjs} +1 -1
  62. package/dist/backpatch/index.cjs +0 -6
  63. package/dist/build/index.cjs +0 -35
  64. package/dist/build/index.cjs.map +0 -7
  65. package/dist/build/index.dev.cjs +0 -37
  66. package/dist/build/index.dev.cjs.map +0 -7
  67. package/dist/build/index.prod.cjs +0 -37
  68. package/dist/build/index.prod.cjs.map +0 -7
  69. package/dist/core.cjs +0 -12672
  70. package/dist/core.cjs.map +0 -1
  71. package/dist/core.prod.cjs +0 -6111
  72. package/dist/insights/index.qwik.cjs +0 -1
  73. package/dist/insights/vite/index.cjs +0 -1
  74. package/dist/loader/index.cjs +0 -4
  75. package/dist/optimizer.cjs +0 -212
  76. package/dist/preloader.cjs +0 -266
  77. package/dist/server.cjs +0 -3209
  78. package/dist/testing/index.cjs +0 -35696
  79. /package/dist/starters/features/csr/{vite.config.mts → vite.config.ts} +0 -0
@@ -2,6 +2,7 @@ const doc = document;
2
2
  const win = window;
3
3
  const events = /* @__PURE__ */ new Set();
4
4
  const roots = /* @__PURE__ */ new Set([doc]);
5
+ const symbols = {};
5
6
  let hasInitialized;
6
7
  const nativeQuerySelectorAll = (root, selector) => Array.from(root.querySelectorAll(selector));
7
8
  const querySelectorAll = (query) => {
@@ -101,6 +102,8 @@ const dispatch = async (element, scope, ev, eventName = ev.type) => {
101
102
  importError = "sync";
102
103
  error = new Error("sym:" + symbol);
103
104
  }
105
+ } else if (symbol in symbols) {
106
+ handler = symbols[symbol];
104
107
  } else {
105
108
  emitEvent("qsymbol", eventData);
106
109
  const uri = url.href.split("#")[0];
@@ -114,6 +117,8 @@ const dispatch = async (element, scope, ev, eventName = ev.type) => {
114
117
  if (!handler) {
115
118
  importError = "no-symbol";
116
119
  error = new Error(`${symbol} not in ${uri}`);
120
+ } else {
121
+ symbols[symbol] = handler;
117
122
  }
118
123
  } catch (err) {
119
124
  importError || (importError = "async");
@@ -149,7 +154,7 @@ const dispatch = async (element, scope, ev, eventName = ev.type) => {
149
154
  const emitEvent = (eventName, detail) => {
150
155
  doc.dispatchEvent(createEvent(eventName, detail));
151
156
  };
152
- const camelToKebab = (str) => str.replace(/([A-Z])/g, (a) => "-" + a.toLowerCase());
157
+ const camelToKebab = (str) => str.replace(/([A-Z-])/g, (a) => "-" + a.toLowerCase());
153
158
  const processDocumentEvent = async (ev) => {
154
159
  let type = camelToKebab(ev.type);
155
160
  let element = ev.target;
@@ -192,21 +197,22 @@ const processReadyStateChange = () => {
192
197
  const addEventListener = (el, eventName, handler, capture = false) => {
193
198
  el.addEventListener(eventName, handler, { capture, passive: false });
194
199
  };
200
+ const kebabToCamel = (eventName) => eventName.replace(/-./g, (a) => a[1].toUpperCase());
195
201
  const processEventOrNode = (...eventNames) => {
196
202
  for (const eventNameOrNode of eventNames) {
197
203
  if (typeof eventNameOrNode === "string") {
198
204
  if (!events.has(eventNameOrNode)) {
199
- roots.forEach(
200
- (root) => addEventListener(root, eventNameOrNode, processDocumentEvent, true)
201
- );
202
- addEventListener(win, eventNameOrNode, processWindowEvent, true);
203
205
  events.add(eventNameOrNode);
206
+ const eventName = kebabToCamel(eventNameOrNode);
207
+ roots.forEach((root) => addEventListener(root, eventName, processDocumentEvent, true));
208
+ addEventListener(win, eventName, processWindowEvent, true);
204
209
  }
205
210
  } else {
206
211
  if (!roots.has(eventNameOrNode)) {
207
- events.forEach(
208
- (eventName) => addEventListener(eventNameOrNode, eventName, processDocumentEvent, true)
209
- );
212
+ events.forEach((kebabEventName) => {
213
+ const eventName = kebabToCamel(kebabEventName);
214
+ addEventListener(eventNameOrNode, eventName, processDocumentEvent, true);
215
+ });
210
216
  roots.add(eventNameOrNode);
211
217
  }
212
218
  }
@@ -1 +1 @@
1
- const t=document,e=window,n=new Set,o=new Set([t]);let r;const s=(t,e)=>Array.from(t.querySelectorAll(e)),a=t=>{const e=[];return o.forEach(n=>e.push(...s(n,t))),e},i=t=>{m(t),s(t,"[q\\:shadowroot]").forEach(t=>{const e=t.shadowRoot;e&&i(e)})},c=t=>t&&"function"==typeof t.then,l=(t,e,n=e.type)=>{a("[on"+t+"\\:"+n+"]").forEach(o=>{u(o,t,e,n)})},f=e=>{if(void 0===e._qwikjson_){let n=(e===t.documentElement?t.body:e).lastElementChild;for(;n;){if("SCRIPT"===n.tagName&&"qwik/json"===n.getAttribute("type")){e._qwikjson_=JSON.parse(n.textContent.replace(/\\x3C(\/?script)/gi,"<$1"));break}n=n.previousElementSibling}}},p=(t,e)=>new CustomEvent(t,{detail:e}),u=async(e,n,o,r=o.type)=>{const s="on"+n+":"+r;e.hasAttribute("preventdefault:"+r)&&o.preventDefault(),e.hasAttribute("stoppropagation:"+r)&&o.stopPropagation();const a=e._qc_,i=a&&a.li.filter(t=>t[0]===s);if(i&&i.length>0){for(const t of i){const n=t[1].getFn([e,o],()=>e.isConnected)(o,e),r=o.cancelBubble;c(n)&&await n,r&&o.stopPropagation()}return}const l=e.getAttribute(s),p=e.qDispatchEvent;if(p)return p(o,n);if(l){const n=e.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"),r=n.getAttribute("q:base"),s=n.getAttribute("q:version")||"unknown",a=n.getAttribute("q:manifest-hash")||"dev",i=new URL(r,t.baseURI);for(const p of l.split("\n")){const l=new URL(p,i),u=l.href,q=l.hash.replace(/^#?([^?[|]*).*$/,"$1")||"default",h=performance.now();let _,d,y;const m=p.startsWith("#"),w={qBase:r,qManifest:a,qVersion:s,href:u,symbol:q,element:e,reqTime:h};if(m){const e=n.getAttribute("q:instance");_=(t["qFuncs_"+e]||[])[Number.parseInt(q)],_||(d="sync",y=Error("sym:"+q))}else{b("qsymbol",w);const t=l.href.split("#")[0];try{const e=import(t);f(n),_=(await e)[q],_||(d="no-symbol",y=Error(`${q} not in ${t}`))}catch(t){d||(d="async"),y=t}}if(!_){b("qerror",{importError:d,error:y,...w}),console.error(y);break}const g=t.__q_context__;if(e.isConnected)try{t.__q_context__=[e,o,l];const n=_(o,e);c(n)&&await n}catch(t){b("qerror",{error:t,...w})}finally{t.__q_context__=g}}}},b=(e,n)=>{t.dispatchEvent(p(e,n))},q=t=>t.replace(/([A-Z])/g,t=>"-"+t.toLowerCase()),h=async t=>{let e=q(t.type),n=t.target;for(l("-document",t,e);n&&n.getAttribute;){const o=u(n,"",t,e);let r=t.cancelBubble;c(o)&&await o,r||(r=r||t.cancelBubble||n.hasAttribute("stoppropagation:"+t.type)),n=t.bubbles&&!0!==r?n.parentElement:null}},_=t=>{l("-window",t,q(t.type))},d=()=>{const s=t.readyState;if(!r&&("interactive"==s||"complete"==s)&&(o.forEach(i),r=1,b("qinit"),(e.requestIdleCallback??e.setTimeout).bind(e)(()=>b("qidle")),n.has("qvisible"))){const t=a("[on\\:qvisible]"),e=new IntersectionObserver(t=>{for(const n of t)n.isIntersecting&&(e.unobserve(n.target),u(n.target,"",p("qvisible",n)))});t.forEach(t=>e.observe(t))}},y=(t,e,n,o=!1)=>{t.addEventListener(e,n,{capture:o,passive:!1})},m=(...t)=>{for(const r of t)"string"==typeof r?n.has(r)||(o.forEach(t=>y(t,r,h,!0)),y(e,r,_,!0),n.add(r)):o.has(r)||(n.forEach(t=>y(r,t,h,!0)),o.add(r))};if(!("__q_context__"in t)){t.__q_context__=0;const r=e.qwikevents;r&&(Array.isArray(r)?m(...r):m("click","input")),e.qwikevents={events:n,roots:o,push:m},y(t,"readystatechange",d),d()}
1
+ const t=document,e=window,n=new Set,o=new Set([t]),r={};let s;const i=(t,e)=>Array.from(t.querySelectorAll(e)),a=t=>{const e=[];return o.forEach(n=>e.push(...i(n,t))),e},c=t=>{w(t),i(t,"[q\\:shadowroot]").forEach(t=>{const e=t.shadowRoot;e&&c(e)})},l=t=>t&&"function"==typeof t.then,f=(t,e,n=e.type)=>{a("[on"+t+"\\:"+n+"]").forEach(o=>{b(o,t,e,n)})},p=e=>{if(void 0===e._qwikjson_){let n=(e===t.documentElement?t.body:e).lastElementChild;for(;n;){if("SCRIPT"===n.tagName&&"qwik/json"===n.getAttribute("type")){e._qwikjson_=JSON.parse(n.textContent.replace(/\\x3C(\/?script)/gi,"<$1"));break}n=n.previousElementSibling}}},u=(t,e)=>new CustomEvent(t,{detail:e}),b=async(e,n,o,s=o.type)=>{const i="on"+n+":"+s;e.hasAttribute("preventdefault:"+s)&&o.preventDefault(),e.hasAttribute("stoppropagation:"+s)&&o.stopPropagation();const a=e._qc_,c=a&&a.li.filter(t=>t[0]===i);if(c&&c.length>0){for(const t of c){const n=t[1].getFn([e,o],()=>e.isConnected)(o,e),r=o.cancelBubble;l(n)&&await n,r&&o.stopPropagation()}return}const f=e.getAttribute(i),u=e.qDispatchEvent;if(u)return u(o,n);if(f){const n=e.closest("[q\\:container]:not([q\\:container=html]):not([q\\:container=text])"),s=n.getAttribute("q:base"),i=n.getAttribute("q:version")||"unknown",a=n.getAttribute("q:manifest-hash")||"dev",c=new URL(s,t.baseURI);for(const u of f.split("\n")){const f=new URL(u,c),b=f.href,h=f.hash.replace(/^#?([^?[|]*).*$/,"$1")||"default",_=performance.now();let d,y,g;const m=u.startsWith("#"),w={qBase:s,qManifest:a,qVersion:i,href:b,symbol:h,element:e,reqTime:_};if(m){const e=n.getAttribute("q:instance");d=(t["qFuncs_"+e]||[])[Number.parseInt(h)],d||(y="sync",g=Error("sym:"+h))}else if(h in r)d=r[h];else{q("qsymbol",w);const t=f.href.split("#")[0];try{const e=import(t);p(n),d=(await e)[h],d?r[h]=d:(y="no-symbol",g=Error(`${h} not in ${t}`))}catch(t){y||(y="async"),g=t}}if(!d){q("qerror",{importError:y,error:g,...w}),console.error(g);break}const v=t.__q_context__;if(e.isConnected)try{t.__q_context__=[e,o,f];const n=d(o,e);l(n)&&await n}catch(t){q("qerror",{error:t,...w})}finally{t.__q_context__=v}}}},q=(e,n)=>{t.dispatchEvent(u(e,n))},h=t=>t.replace(/([A-Z-])/g,t=>"-"+t.toLowerCase()),_=async t=>{let e=h(t.type),n=t.target;for(f("-document",t,e);n&&n.getAttribute;){const o=b(n,"",t,e);let r=t.cancelBubble;l(o)&&await o,r||(r=r||t.cancelBubble||n.hasAttribute("stoppropagation:"+t.type)),n=t.bubbles&&!0!==r?n.parentElement:null}},d=t=>{f("-window",t,h(t.type))},y=()=>{const r=t.readyState;if(!s&&("interactive"==r||"complete"==r)&&(o.forEach(c),s=1,q("qinit"),(e.requestIdleCallback??e.setTimeout).bind(e)(()=>q("qidle")),n.has("qvisible"))){const t=a("[on\\:qvisible]"),e=new IntersectionObserver(t=>{for(const n of t)n.isIntersecting&&(e.unobserve(n.target),b(n.target,"",u("qvisible",n)))});t.forEach(t=>e.observe(t))}},g=(t,e,n,o=!1)=>{t.addEventListener(e,n,{capture:o,passive:!1})},m=t=>t.replace(/-./g,t=>t[1].toUpperCase()),w=(...t)=>{for(const r of t)if("string"==typeof r){if(!n.has(r)){n.add(r);const t=m(r);o.forEach(e=>g(e,t,_,!0)),g(e,t,d,!0)}}else o.has(r)||(n.forEach(t=>{const e=m(t);g(r,e,_,!0)}),o.add(r))};if(!("__q_context__"in t)){t.__q_context__=0;const r=e.qwikevents;r&&(Array.isArray(r)?w(...r):w("click","input")),e.qwikevents={events:n,roots:o,push:w},g(t,"readystatechange",y),y()}
package/dist/server.d.ts CHANGED
@@ -245,18 +245,12 @@ declare interface QwikBundle {
245
245
  declare type QwikBundleGraph = Array<string | number>;
246
246
 
247
247
  /** @public */
248
- export declare interface QwikLoaderOptions {
249
- /**
250
- * Whether to include the qwikloader script in the document. Normally you don't need to worry
251
- * about this, but in case of multi-container apps using different Qwik versions, you might want
252
- * to only enable it on one of the containers.
253
- *
254
- * Defaults to `'auto'`.
255
- */
248
+ export declare type QwikLoaderOptions = 'module' | 'inline' | 'never' | {
249
+ /** @deprecated No longer used. */
256
250
  include?: 'always' | 'never' | 'auto';
257
- /** @deprecated No longer used, the qwikloader is always loaded as soon as possible */
251
+ /** @deprecated No longer used. */
258
252
  position?: 'top' | 'bottom';
259
- }
253
+ };
260
254
 
261
255
  /**
262
256
  * The metadata of the build. One of its uses is storing where QRL symbols are located.
@@ -351,11 +345,25 @@ export declare interface RenderOptions extends SerializeDocumentOptions {
351
345
  /** Language to use when rendering the document. */
352
346
  locale?: string | ((options: RenderOptions) => string);
353
347
  /**
354
- * Specifies if the Qwik Loader script is added to the document or not.
348
+ * Specifies how the Qwik Loader is included in the document. This enables interactivity and lazy
349
+ * loading.
350
+ *
351
+ * `module`: Use a `<script>` tag to load the Qwik Loader. Subsequent page loads will have the
352
+ * script cached and instantly running.
353
+ *
354
+ * `inline`: This embeds the Qwik Loader script directly in the document. This adds about 3kB
355
+ * before compression, which typically is reduced to about 1.6kB with gzip.
356
+ *
357
+ * `never`: Do not include the Qwik Loader script. This is mostly useful when embedding multiple
358
+ * containers on the same page.
359
+ *
360
+ * Defaults to `module`.
355
361
  *
356
- * Defaults to `{ include: true }`.
362
+ * Note that the Qwik Loader is absolutely required for Qwik to work. There must be an instance of
363
+ * it loaded for any interactivity to happen.
357
364
  */
358
365
  qwikLoader?: QwikLoaderOptions;
366
+ /** Specifies how preloading is handled. This ensures that code is instantly available when needed. */
359
367
  preloader?: PreloaderOptions | false;
360
368
  /** @deprecated Use `preloader` instead */
361
369
  prefetchStrategy?: PrefetchStrategy | null;