@qwik.dev/core 2.0.0-beta.16 → 2.0.0-beta.17

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/server.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * @qwik.dev/core/server 2.0.0-beta.16-dev+a83ccf3
3
+ * @qwik.dev/core/server 2.0.0-beta.17-dev+c34c237
4
4
  * Copyright QwikDev. All Rights Reserved.
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://github.com/QwikDev/qwik/blob/main/LICENSE
@@ -195,7 +195,7 @@ See https://qwik.dev/docs/core/tasks/#use-method-rules`,
195
195
  // 30
196
196
  "WrappedSignal is read-only",
197
197
  // 31
198
- "Attribute value is unsafe for SSR",
198
+ "Attribute value is unsafe for SSR {{0}}",
199
199
  // 32
200
200
  "SerializerSymbol function returned rejected promise",
201
201
  // 33
@@ -229,264 +229,6 @@ var SYNC_QRL = "<sync>";
229
229
  // packages/qwik/src/core/shared/types.ts
230
230
  var DEBUG_TYPE = "q:type";
231
231
 
232
- // packages/qwik/src/core/shared/utils/character-escaping.ts
233
- function escapeHTML(html) {
234
- let escapedHTML = "";
235
- const length = html.length;
236
- let idx = 0;
237
- let lastIdx = idx;
238
- for (; idx < length; idx++) {
239
- const ch = html.charCodeAt(idx);
240
- if (ch === 60) {
241
- escapedHTML += html.substring(lastIdx, idx) + "&lt;";
242
- } else if (ch === 62) {
243
- escapedHTML += html.substring(lastIdx, idx) + "&gt;";
244
- } else if (ch === 38) {
245
- escapedHTML += html.substring(lastIdx, idx) + "&amp;";
246
- } else if (ch === 34) {
247
- escapedHTML += html.substring(lastIdx, idx) + "&quot;";
248
- } else if (ch === 39) {
249
- escapedHTML += html.substring(lastIdx, idx) + "&#39;";
250
- } else {
251
- continue;
252
- }
253
- lastIdx = idx + 1;
254
- }
255
- if (lastIdx === 0) {
256
- return html;
257
- } else {
258
- return escapedHTML + html.substring(lastIdx);
259
- }
260
- }
261
-
262
- // packages/qwik/src/core/shared/utils/markers.ts
263
- var OnRenderProp = "q:renderFn";
264
- var QSlot = "q:slot";
265
- var QSlotParent = "q:sparent";
266
- var QStyle = "q:style";
267
- var QStyleSelector = "style[q\\:style]";
268
- var QStyleSSelector = "style[q\\:sstyle]";
269
- var QStylesAllSelector = QStyleSelector + "," + QStyleSSelector;
270
- var QScopedStyle = "q:sstyle";
271
- var QCtxAttr = "q:ctx";
272
- var QBackRefs = "q:brefs";
273
- var QRenderAttr = "q:render";
274
- var QRuntimeAttr = "q:runtime";
275
- var QVersionAttr = "q:version";
276
- var QBaseAttr = "q:base";
277
- var QLocaleAttr = "q:locale";
278
- var QManifestHashAttr = "q:manifest-hash";
279
- var QInstanceAttr = "q:instance";
280
- var QContainerIsland = "q:container-island";
281
- var QContainerIslandEnd = "/" + QContainerIsland;
282
- var QIgnore = "q:ignore";
283
- var QIgnoreEnd = "/" + QIgnore;
284
- var QContainerAttr = "q:container";
285
- var QContainerAttrEnd = "/" + QContainerAttr;
286
- var QTemplate = "q:template";
287
- var QContainerSelector = "[q\\:container]:not([q\\:container=" + "html" /* HTML */ + "]):not([q\\:container=" + "text" /* TEXT */ + "])";
288
- var QDefaultSlot = "";
289
- var ELEMENT_ID = "q:id";
290
- var ELEMENT_KEY = "q:key";
291
- var ELEMENT_PROPS = "q:props";
292
- var ELEMENT_SEQ = "q:seq";
293
- var ELEMENT_SEQ_IDX = "q:seqIdx";
294
- var ELEMENT_BACKPATCH_DATA = "qwik/backpatch";
295
- var NON_SERIALIZABLE_MARKER_PREFIX = ":";
296
- var USE_ON_LOCAL = NON_SERIALIZABLE_MARKER_PREFIX + "on";
297
- var USE_ON_LOCAL_SEQ_IDX = NON_SERIALIZABLE_MARKER_PREFIX + "onIdx";
298
- var USE_ON_LOCAL_FLAGS = NON_SERIALIZABLE_MARKER_PREFIX + "onFlags";
299
- var FLUSH_COMMENT = "qkssr-f";
300
- var STREAM_BLOCK_START_COMMENT = "qkssr-pu";
301
- var STREAM_BLOCK_END_COMMENT = "qkssr-po";
302
- var Q_PROPS_SEPARATOR = ":";
303
- var dangerouslySetInnerHTML = "dangerouslySetInnerHTML";
304
-
305
- // packages/qwik/src/core/shared/utils/promises.ts
306
- import { isDev as isDev2, isServer } from "@qwik.dev/core/build";
307
- var MAX_RETRY_ON_PROMISE_COUNT = 100;
308
- var isPromise = (value) => {
309
- return !!value && typeof value == "object" && typeof value.then === "function";
310
- };
311
- var maybeThen = (valueOrPromise, thenFn) => {
312
- return isPromise(valueOrPromise) ? valueOrPromise.then(thenFn, shouldNotError) : thenFn(valueOrPromise);
313
- };
314
- var shouldNotError = (reason) => {
315
- throwErrorAndStop(reason);
316
- };
317
- function retryOnPromise(fn, retryCount = 0) {
318
- const retryOrThrow = (e) => {
319
- if (isPromise(e) && retryCount < MAX_RETRY_ON_PROMISE_COUNT) {
320
- return e.then(retryOnPromise.bind(null, fn, retryCount++));
321
- }
322
- throw e;
323
- };
324
- try {
325
- const result = fn();
326
- if (isPromise(result)) {
327
- return result.catch((e) => retryOrThrow(e));
328
- }
329
- return result;
330
- } catch (e) {
331
- if (isDev2 && isServer && e instanceof ReferenceError && e.message.includes("window")) {
332
- e.message = 'It seems like you forgot to add "if (isBrowser) {...}" here:' + e.message;
333
- throw e;
334
- }
335
- return retryOrThrow(e);
336
- }
337
- }
338
-
339
- // packages/qwik/src/core/shared/utils/scoped-styles.ts
340
- function isClassAttr(key) {
341
- return key === "class" || key === "className";
342
- }
343
- function convertStyleIdsToString(scopedStyleIds) {
344
- return Array.from(scopedStyleIds).join(" ");
345
- }
346
-
347
- // packages/qwik/src/core/shared/utils/event-names.ts
348
- function isPreventDefault(key) {
349
- return key.startsWith("preventdefault:");
350
- }
351
-
352
- // packages/qwik/src/core/shared/utils/unitless_number.ts
353
- var unitlessNumbers = /* @__PURE__ */ new Set([
354
- "animationIterationCount",
355
- "aspectRatio",
356
- "borderImageOutset",
357
- "borderImageSlice",
358
- "borderImageWidth",
359
- "boxFlex",
360
- "boxFlexGroup",
361
- "boxOrdinalGroup",
362
- "columnCount",
363
- "columns",
364
- "flex",
365
- "flexGrow",
366
- "flexShrink",
367
- "gridArea",
368
- "gridRow",
369
- "gridRowEnd",
370
- "gridRowStart",
371
- "gridColumn",
372
- "gridColumnEnd",
373
- "gridColumnStart",
374
- "fontWeight",
375
- "lineClamp",
376
- "lineHeight",
377
- "opacity",
378
- "order",
379
- "orphans",
380
- "scale",
381
- "tabSize",
382
- "widows",
383
- "zIndex",
384
- "zoom",
385
- "MozAnimationIterationCount",
386
- // Known Prefixed Properties
387
- "MozBoxFlex",
388
- // TODO: Remove these since they shouldn't be used in modern code
389
- "msFlex",
390
- "msFlexPositive",
391
- "WebkitAnimationIterationCount",
392
- "WebkitBoxFlex",
393
- "WebkitBoxOrdinalGroup",
394
- "WebkitColumnCount",
395
- "WebkitColumns",
396
- "WebkitFlex",
397
- "WebkitFlexGrow",
398
- "WebkitFlexShrink",
399
- "WebkitLineClamp"
400
- ]);
401
- var isUnitlessNumber = (name) => {
402
- return unitlessNumbers.has(name);
403
- };
404
-
405
- // packages/qwik/src/core/shared/utils/styles.ts
406
- var serializeClass = (obj) => {
407
- if (!obj) {
408
- return "";
409
- }
410
- if (isString(obj)) {
411
- return obj.trim();
412
- }
413
- const classes = [];
414
- if (isArray(obj)) {
415
- for (const o of obj) {
416
- const classList = serializeClass(o);
417
- if (classList) {
418
- classes.push(classList);
419
- }
420
- }
421
- } else {
422
- for (const [key, value] of Object.entries(obj)) {
423
- if (value) {
424
- classes.push(key.trim());
425
- }
426
- }
427
- }
428
- return classes.join(" ");
429
- };
430
- var fromCamelToKebabCaseWithDash = (text) => {
431
- return text.replace(/([A-Z])/g, "-$1").toLowerCase();
432
- };
433
- var stringifyStyle = (obj) => {
434
- if (obj == null) {
435
- return "";
436
- }
437
- if (typeof obj == "object") {
438
- if (isArray(obj)) {
439
- throw qError(0 /* stringifyClassOrStyle */, [obj, "style"]);
440
- } else {
441
- const chunks = [];
442
- for (const key in obj) {
443
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
444
- const value = obj[key];
445
- if (value != null && typeof value !== "function") {
446
- if (key.startsWith("--")) {
447
- chunks.push(key + ":" + value);
448
- } else {
449
- chunks.push(fromCamelToKebabCaseWithDash(key) + ":" + setValueForStyle(key, value));
450
- }
451
- }
452
- }
453
- }
454
- return chunks.join(";");
455
- }
456
- }
457
- return String(obj);
458
- };
459
- var serializeBooleanOrNumberAttribute = (value) => {
460
- return value != null ? String(value) : null;
461
- };
462
- function serializeAttribute(key, value, styleScopedId) {
463
- if (isClassAttr(key)) {
464
- const serializedClass = serializeClass(value);
465
- value = styleScopedId ? styleScopedId + (serializedClass.length ? " " + serializedClass : serializedClass) : serializedClass;
466
- } else if (key === "style") {
467
- value = stringifyStyle(value);
468
- } else if (isEnumeratedBooleanAttribute(key) || typeof value === "number") {
469
- value = serializeBooleanOrNumberAttribute(value);
470
- } else if (value === false || value == null) {
471
- value = null;
472
- } else if (value === true && isPreventDefault(key)) {
473
- value = "";
474
- }
475
- return value;
476
- }
477
- function isEnumeratedBooleanAttribute(key) {
478
- return isAriaAttribute(key) || ["spellcheck", "draggable", "contenteditable"].includes(key);
479
- }
480
- var setValueForStyle = (styleName, value) => {
481
- if (typeof value === "number" && value !== 0 && !isUnitlessNumber(styleName)) {
482
- return value + "px";
483
- }
484
- return value;
485
- };
486
- function isAriaAttribute(prop) {
487
- return prop.startsWith("aria-");
488
- }
489
-
490
232
  // packages/qwik/src/core/shared/vnode-data-types.ts
491
233
  var VNodeDataSeparator = {
492
234
  REFERENCE_CH: (
@@ -640,140 +382,415 @@ var VNodeDataSeparator = {
640
382
  )
641
383
  // `.` is vNodeData separator skipping 4096.
642
384
  };
643
- var VNodeDataChar = {
644
- OPEN: (
645
- /* ************** */
646
- 123
647
- ),
648
- // `{` is the start of the VNodeData for a virtual element.
649
- OPEN_CHAR: (
650
- /* ****** */
651
- "{"
652
- ),
653
- CLOSE: (
654
- /* ************* */
655
- 125
656
- ),
657
- // `}` is the end of the VNodeData for a virtual element.
658
- CLOSE_CHAR: (
659
- /* ***** */
660
- "}"
661
- ),
662
- SCOPED_STYLE: (
663
- /* ******* */
664
- 59
665
- ),
666
- // `;` - `q:sstyle` - Style attribute.
667
- SCOPED_STYLE_CHAR: (
668
- /* */
669
- ";"
670
- ),
671
- RENDER_FN: (
672
- /* ********** */
673
- 60
674
- ),
675
- // `<` - `q:renderFn' - Component QRL render function (body)
676
- RENDER_FN_CHAR: (
677
- /* ** */
678
- "<"
679
- ),
680
- ID: (
681
- /* ***************** */
682
- 61
683
- ),
684
- // `=` - `q:id` - ID of the element.
685
- ID_CHAR: (
686
- /* ********* */
687
- "="
688
- ),
689
- PROPS: (
690
- /* ************** */
691
- 62
692
- ),
693
- // `>` - `q:props' - Component Props
694
- PROPS_CHAR: (
695
- /* ****** */
696
- ">"
697
- ),
698
- SLOT_PARENT: (
699
- /* ******** */
700
- 63
701
- ),
702
- // `?` - `q:sparent` - Slot parent.
703
- SLOT_PARENT_CHAR: (
704
- /* */
705
- "?"
706
- ),
707
- KEY: (
708
- /* **************** */
709
- 64
710
- ),
711
- // `@` - `q:key` - Element key.
712
- KEY_CHAR: (
713
- /* ******** */
714
- "@"
715
- ),
716
- SEQ: (
717
- /* **************** */
718
- 91
719
- ),
720
- // `[` - `q:seq' - Seq value from `useSequentialScope()`
721
- SEQ_CHAR: (
722
- /* ******** */
723
- "["
724
- ),
725
- DON_T_USE: (
726
- /* ********** */
727
- 92
728
- ),
729
- // `\` - SKIP because `\` is used as escaping
730
- DON_T_USE_CHAR: "\\",
731
- CONTEXT: (
732
- /* ************ */
733
- 93
734
- ),
735
- // `]` - `q:ctx' - Component context/props
736
- CONTEXT_CHAR: (
737
- /* **** */
738
- "]"
739
- ),
740
- SEQ_IDX: (
741
- /* ************ */
742
- 94
743
- ),
744
- // `^` - `q:seqIdx' - Sequential scope id
745
- SEQ_IDX_CHAR: (
746
- /* **** */
747
- "^"
748
- ),
749
- BACK_REFS: (
750
- /* ********** */
751
- 96
752
- ),
753
- // '`' - `q:brefs' - Effect dependencies/subscriptions
754
- BACK_REFS_CHAR: (
755
- /* ** */
756
- "`"
757
- ),
758
- SEPARATOR: (
759
- /* ********* */
760
- 124
761
- ),
762
- // `|` - Separator char to encode any key/value pairs.
763
- SEPARATOR_CHAR: (
764
- /* ** */
765
- "|"
766
- ),
767
- SLOT: (
768
- /* ************** */
769
- 126
770
- ),
771
- // `~` - `q:slot' - Slot name
772
- SLOT_CHAR: (
773
- /* ******* */
774
- "~"
775
- )
385
+ var VNodeDataChar = {
386
+ OPEN: (
387
+ /* ************** */
388
+ 123
389
+ ),
390
+ // `{` is the start of the VNodeData for a virtual element.
391
+ OPEN_CHAR: (
392
+ /* ****** */
393
+ "{"
394
+ ),
395
+ CLOSE: (
396
+ /* ************* */
397
+ 125
398
+ ),
399
+ // `}` is the end of the VNodeData for a virtual element.
400
+ CLOSE_CHAR: (
401
+ /* ***** */
402
+ "}"
403
+ ),
404
+ SCOPED_STYLE: (
405
+ /* ******* */
406
+ 59
407
+ ),
408
+ // `;` - `q:sstyle` - Style attribute.
409
+ SCOPED_STYLE_CHAR: (
410
+ /* */
411
+ ";"
412
+ ),
413
+ RENDER_FN: (
414
+ /* ********** */
415
+ 60
416
+ ),
417
+ // `<` - `q:renderFn' - Component QRL render function (body)
418
+ RENDER_FN_CHAR: (
419
+ /* ** */
420
+ "<"
421
+ ),
422
+ ID: (
423
+ /* ***************** */
424
+ 61
425
+ ),
426
+ // `=` - `q:id` - ID of the element.
427
+ ID_CHAR: (
428
+ /* ********* */
429
+ "="
430
+ ),
431
+ PROPS: (
432
+ /* ************** */
433
+ 62
434
+ ),
435
+ // `>` - `q:props' - Component Props
436
+ PROPS_CHAR: (
437
+ /* ****** */
438
+ ">"
439
+ ),
440
+ SLOT_PARENT: (
441
+ /* ******** */
442
+ 63
443
+ ),
444
+ // `?` - `q:sparent` - Slot parent.
445
+ SLOT_PARENT_CHAR: (
446
+ /* */
447
+ "?"
448
+ ),
449
+ KEY: (
450
+ /* **************** */
451
+ 64
452
+ ),
453
+ // `@` - `q:key` - Element key.
454
+ KEY_CHAR: (
455
+ /* ******** */
456
+ "@"
457
+ ),
458
+ SEQ: (
459
+ /* **************** */
460
+ 91
461
+ ),
462
+ // `[` - `q:seq' - Seq value from `useSequentialScope()`
463
+ SEQ_CHAR: (
464
+ /* ******** */
465
+ "["
466
+ ),
467
+ DON_T_USE: (
468
+ /* ********** */
469
+ 92
470
+ ),
471
+ // `\` - SKIP because `\` is used as escaping
472
+ DON_T_USE_CHAR: "\\",
473
+ CONTEXT: (
474
+ /* ************ */
475
+ 93
476
+ ),
477
+ // `]` - `q:ctx' - Component context/props
478
+ CONTEXT_CHAR: (
479
+ /* **** */
480
+ "]"
481
+ ),
482
+ SEQ_IDX: (
483
+ /* ************ */
484
+ 94
485
+ ),
486
+ // `^` - `q:seqIdx' - Sequential scope id
487
+ SEQ_IDX_CHAR: (
488
+ /* **** */
489
+ "^"
490
+ ),
491
+ BACK_REFS: (
492
+ /* ********** */
493
+ 96
494
+ ),
495
+ // '`' - `q:brefs' - Effect dependencies/subscriptions
496
+ BACK_REFS_CHAR: (
497
+ /* ** */
498
+ "`"
499
+ ),
500
+ SEPARATOR: (
501
+ /* ********* */
502
+ 124
503
+ ),
504
+ // `|` - Separator char to encode any key/value pairs.
505
+ SEPARATOR_CHAR: (
506
+ /* ** */
507
+ "|"
508
+ ),
509
+ SLOT: (
510
+ /* ************** */
511
+ 126
512
+ ),
513
+ // `~` - `q:slot' - Slot name
514
+ SLOT_CHAR: (
515
+ /* ******* */
516
+ "~"
517
+ )
518
+ };
519
+
520
+ // packages/qwik/src/core/shared/utils/character-escaping.ts
521
+ function escapeHTML(html) {
522
+ let escapedHTML = "";
523
+ const length = html.length;
524
+ let idx = 0;
525
+ let lastIdx = idx;
526
+ for (; idx < length; idx++) {
527
+ const ch = html.charCodeAt(idx);
528
+ if (ch === 60) {
529
+ escapedHTML += html.substring(lastIdx, idx) + "&lt;";
530
+ } else if (ch === 62) {
531
+ escapedHTML += html.substring(lastIdx, idx) + "&gt;";
532
+ } else if (ch === 38) {
533
+ escapedHTML += html.substring(lastIdx, idx) + "&amp;";
534
+ } else if (ch === 34) {
535
+ escapedHTML += html.substring(lastIdx, idx) + "&quot;";
536
+ } else if (ch === 39) {
537
+ escapedHTML += html.substring(lastIdx, idx) + "&#39;";
538
+ } else {
539
+ continue;
540
+ }
541
+ lastIdx = idx + 1;
542
+ }
543
+ if (lastIdx === 0) {
544
+ return html;
545
+ } else {
546
+ return escapedHTML + html.substring(lastIdx);
547
+ }
548
+ }
549
+ function encodeVNodeDataString(str) {
550
+ let escapedHTML = "";
551
+ const length = str.length;
552
+ let idx = 0;
553
+ let lastIdx = idx;
554
+ for (; idx < length; idx++) {
555
+ const ch = str.charCodeAt(idx);
556
+ if (ch >= VNodeDataSeparator.ADVANCE_1 && ch <= VNodeDataSeparator.ADVANCE_8192) {
557
+ escapedHTML += str.substring(lastIdx, idx) + "\\" + str.charAt(idx);
558
+ } else {
559
+ continue;
560
+ }
561
+ lastIdx = idx + 1;
562
+ }
563
+ if (lastIdx === 0) {
564
+ return str;
565
+ } else {
566
+ return escapedHTML + str.substring(lastIdx);
567
+ }
568
+ }
569
+
570
+ // packages/qwik/src/core/shared/utils/markers.ts
571
+ var OnRenderProp = "q:renderFn";
572
+ var QSlot = "q:slot";
573
+ var QSlotParent = "q:sparent";
574
+ var QStyle = "q:style";
575
+ var QStyleSelector = "style[q\\:style]";
576
+ var QStyleSSelector = "style[q\\:sstyle]";
577
+ var QStylesAllSelector = QStyleSelector + "," + QStyleSSelector;
578
+ var QScopedStyle = "q:sstyle";
579
+ var QCtxAttr = "q:ctx";
580
+ var QBackRefs = "q:brefs";
581
+ var QRenderAttr = "q:render";
582
+ var QRuntimeAttr = "q:runtime";
583
+ var QVersionAttr = "q:version";
584
+ var QBaseAttr = "q:base";
585
+ var QLocaleAttr = "q:locale";
586
+ var QManifestHashAttr = "q:manifest-hash";
587
+ var QInstanceAttr = "q:instance";
588
+ var QContainerIsland = "q:container-island";
589
+ var QContainerIslandEnd = "/" + QContainerIsland;
590
+ var QIgnore = "q:ignore";
591
+ var QIgnoreEnd = "/" + QIgnore;
592
+ var QContainerAttr = "q:container";
593
+ var QContainerAttrEnd = "/" + QContainerAttr;
594
+ var QTemplate = "q:template";
595
+ var QContainerSelector = "[q\\:container]:not([q\\:container=" + "html" /* HTML */ + "]):not([q\\:container=" + "text" /* TEXT */ + "])";
596
+ var QDefaultSlot = "";
597
+ var ELEMENT_ID = "q:id";
598
+ var ELEMENT_KEY = "q:key";
599
+ var ELEMENT_PROPS = "q:props";
600
+ var ELEMENT_SEQ = "q:seq";
601
+ var ELEMENT_SEQ_IDX = "q:seqIdx";
602
+ var ELEMENT_BACKPATCH_DATA = "qwik/backpatch";
603
+ var NON_SERIALIZABLE_MARKER_PREFIX = ":";
604
+ var USE_ON_LOCAL = NON_SERIALIZABLE_MARKER_PREFIX + "on";
605
+ var USE_ON_LOCAL_SEQ_IDX = NON_SERIALIZABLE_MARKER_PREFIX + "onIdx";
606
+ var USE_ON_LOCAL_FLAGS = NON_SERIALIZABLE_MARKER_PREFIX + "onFlags";
607
+ var FLUSH_COMMENT = "qkssr-f";
608
+ var STREAM_BLOCK_START_COMMENT = "qkssr-pu";
609
+ var STREAM_BLOCK_END_COMMENT = "qkssr-po";
610
+ var Q_PROPS_SEPARATOR = ":";
611
+ var dangerouslySetInnerHTML = "dangerouslySetInnerHTML";
612
+
613
+ // packages/qwik/src/core/shared/utils/promises.ts
614
+ import { isDev as isDev2, isServer } from "@qwik.dev/core/build";
615
+ var MAX_RETRY_ON_PROMISE_COUNT = 100;
616
+ var isPromise = (value) => {
617
+ return !!value && typeof value == "object" && typeof value.then === "function";
618
+ };
619
+ var maybeThen = (valueOrPromise, thenFn) => {
620
+ return isPromise(valueOrPromise) ? valueOrPromise.then(thenFn) : thenFn(valueOrPromise);
621
+ };
622
+ function retryOnPromise(fn, retryCount = 0) {
623
+ const retryOrThrow = (e) => {
624
+ if (isPromise(e) && retryCount < MAX_RETRY_ON_PROMISE_COUNT) {
625
+ return e.then(retryOnPromise.bind(null, fn, retryCount++));
626
+ }
627
+ throw e;
628
+ };
629
+ try {
630
+ const result = fn();
631
+ if (isPromise(result)) {
632
+ return result.catch((e) => retryOrThrow(e));
633
+ }
634
+ return result;
635
+ } catch (e) {
636
+ if (isDev2 && isServer && e instanceof ReferenceError && e.message.includes("window")) {
637
+ e.message = 'It seems like you forgot to add "if (isBrowser) {...}" here:' + e.message;
638
+ throw e;
639
+ }
640
+ return retryOrThrow(e);
641
+ }
642
+ }
643
+
644
+ // packages/qwik/src/core/shared/utils/scoped-styles.ts
645
+ function isClassAttr(key) {
646
+ return key === "class";
647
+ }
648
+ function convertStyleIdsToString(scopedStyleIds) {
649
+ return Array.from(scopedStyleIds).join(" ");
650
+ }
651
+
652
+ // packages/qwik/src/core/shared/utils/event-names.ts
653
+ function isPreventDefault(key) {
654
+ return key.startsWith("preventdefault:");
655
+ }
656
+
657
+ // packages/qwik/src/core/shared/utils/unitless_number.ts
658
+ var unitlessNumbers = /* @__PURE__ */ new Set([
659
+ "animationIterationCount",
660
+ "aspectRatio",
661
+ "borderImageOutset",
662
+ "borderImageSlice",
663
+ "borderImageWidth",
664
+ "boxFlex",
665
+ "boxFlexGroup",
666
+ "boxOrdinalGroup",
667
+ "columnCount",
668
+ "columns",
669
+ "flex",
670
+ "flexGrow",
671
+ "flexShrink",
672
+ "gridArea",
673
+ "gridRow",
674
+ "gridRowEnd",
675
+ "gridRowStart",
676
+ "gridColumn",
677
+ "gridColumnEnd",
678
+ "gridColumnStart",
679
+ "fontWeight",
680
+ "lineClamp",
681
+ "lineHeight",
682
+ "opacity",
683
+ "order",
684
+ "orphans",
685
+ "scale",
686
+ "tabSize",
687
+ "widows",
688
+ "zIndex",
689
+ "zoom",
690
+ "MozAnimationIterationCount",
691
+ // Known Prefixed Properties
692
+ "MozBoxFlex",
693
+ // TODO: Remove these since they shouldn't be used in modern code
694
+ "msFlex",
695
+ "msFlexPositive",
696
+ "WebkitAnimationIterationCount",
697
+ "WebkitBoxFlex",
698
+ "WebkitBoxOrdinalGroup",
699
+ "WebkitColumnCount",
700
+ "WebkitColumns",
701
+ "WebkitFlex",
702
+ "WebkitFlexGrow",
703
+ "WebkitFlexShrink",
704
+ "WebkitLineClamp"
705
+ ]);
706
+ var isUnitlessNumber = (name) => {
707
+ return unitlessNumbers.has(name);
708
+ };
709
+
710
+ // packages/qwik/src/core/shared/utils/styles.ts
711
+ var serializeClass = (obj) => {
712
+ if (!obj) {
713
+ return "";
714
+ }
715
+ if (isString(obj)) {
716
+ return obj.trim();
717
+ }
718
+ const classes = [];
719
+ if (isArray(obj)) {
720
+ for (const o of obj) {
721
+ const classList = serializeClass(o);
722
+ if (classList) {
723
+ classes.push(classList);
724
+ }
725
+ }
726
+ } else {
727
+ for (const [key, value] of Object.entries(obj)) {
728
+ if (value) {
729
+ classes.push(key.trim());
730
+ }
731
+ }
732
+ }
733
+ return classes.join(" ");
734
+ };
735
+ var fromCamelToKebabCaseWithDash = (text) => {
736
+ return text.replace(/([A-Z])/g, "-$1").toLowerCase();
737
+ };
738
+ var stringifyStyle = (obj) => {
739
+ if (obj == null) {
740
+ return "";
741
+ }
742
+ if (typeof obj == "object") {
743
+ if (isArray(obj)) {
744
+ throw qError(0 /* stringifyClassOrStyle */, [obj, "style"]);
745
+ } else {
746
+ const chunks = [];
747
+ for (const key in obj) {
748
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
749
+ const value = obj[key];
750
+ if (value != null && typeof value !== "function") {
751
+ if (key.startsWith("--")) {
752
+ chunks.push(key + ":" + value);
753
+ } else {
754
+ chunks.push(fromCamelToKebabCaseWithDash(key) + ":" + setValueForStyle(key, value));
755
+ }
756
+ }
757
+ }
758
+ }
759
+ return chunks.join(";");
760
+ }
761
+ }
762
+ return String(obj);
763
+ };
764
+ var serializeBooleanOrNumberAttribute = (value) => {
765
+ return value != null ? String(value) : null;
766
+ };
767
+ function serializeAttribute(key, value, styleScopedId) {
768
+ if (isClassAttr(key)) {
769
+ const serializedClass = serializeClass(value);
770
+ value = styleScopedId ? styleScopedId + (serializedClass.length ? " " + serializedClass : serializedClass) : serializedClass;
771
+ } else if (key === "style") {
772
+ value = stringifyStyle(value);
773
+ } else if (isEnumeratedBooleanAttribute(key) || typeof value === "number") {
774
+ value = serializeBooleanOrNumberAttribute(value);
775
+ } else if (value === false || value == null) {
776
+ value = null;
777
+ } else if (value === true && isPreventDefault(key)) {
778
+ value = "";
779
+ }
780
+ return value;
781
+ }
782
+ function isEnumeratedBooleanAttribute(key) {
783
+ return isAriaAttribute(key) || ["spellcheck", "draggable", "contenteditable"].includes(key);
784
+ }
785
+ var setValueForStyle = (styleName, value) => {
786
+ if (typeof value === "number" && value !== 0 && !isUnitlessNumber(styleName)) {
787
+ return value + "px";
788
+ }
789
+ return value;
776
790
  };
791
+ function isAriaAttribute(prop) {
792
+ return prop.startsWith("aria-");
793
+ }
777
794
 
778
795
  // packages/qwik/src/core/preloader/queue.ts
779
796
  import { isBrowser as isBrowser3 } from "@qwik.dev/core/build";
@@ -1154,7 +1171,7 @@ function getBuildBase(opts) {
1154
1171
  return `${import.meta.env.BASE_URL || "/"}build/`;
1155
1172
  }
1156
1173
  var versions = {
1157
- qwik: "2.0.0-beta.16-dev+a83ccf3",
1174
+ qwik: "2.0.0-beta.17-dev+c34c237",
1158
1175
  qwikDom: "2.1.19"
1159
1176
  };
1160
1177
 
@@ -1163,6 +1180,7 @@ import { isDev as isDev5 } from "@qwik.dev/core/build";
1163
1180
  import {
1164
1181
  _SubscriptionData as SubscriptionData,
1165
1182
  _SharedContainer,
1183
+ _executeSsrChores,
1166
1184
  _jsxSorted,
1167
1185
  _jsxSplit,
1168
1186
  _walkJSX,
@@ -1483,6 +1501,7 @@ var SsrNode = class {
1483
1501
  */
1484
1502
  __publicField(this, "id");
1485
1503
  __publicField(this, "flags");
1504
+ __publicField(this, "dirty", 0 /* NONE */);
1486
1505
  __publicField(this, "children", null);
1487
1506
  __publicField(this, "attrs");
1488
1507
  /** Local props which don't serialize; */
@@ -2096,7 +2115,7 @@ var StringBufferWriter = class {
2096
2115
  var EMPTY_OBJ = {};
2097
2116
  var SSRContainer = class extends _SharedContainer {
2098
2117
  constructor(opts) {
2099
- super(() => null, opts.renderOptions.serverData ?? EMPTY_OBJ, opts.locale);
2118
+ super(opts.renderOptions.serverData ?? EMPTY_OBJ, opts.locale);
2100
2119
  __publicField(this, "tag");
2101
2120
  __publicField(this, "isHtml");
2102
2121
  __publicField(this, "writer");
@@ -2255,14 +2274,14 @@ var SSRContainer = class extends _SharedContainer {
2255
2274
  },
2256
2275
  []
2257
2276
  );
2258
- this.openElement(this.tag, containerAttributeArray);
2277
+ this.openElement(this.tag, null, containerAttributeArray);
2259
2278
  }
2260
2279
  /** Renders closing tag for current container */
2261
2280
  closeContainer() {
2262
2281
  return this.closeElement();
2263
2282
  }
2264
2283
  /** Renders opening tag for DOM element */
2265
- openElement(elementName, varAttrs, constAttrs, currentFile) {
2284
+ openElement(elementName, key, varAttrs, constAttrs, currentFile) {
2266
2285
  const isQwikStyle = isQwikStyleElement(elementName, varAttrs) || isQwikStyleElement(elementName, constAttrs);
2267
2286
  if (
2268
2287
  // don't append qwik loader before qwik style elements
@@ -2289,7 +2308,11 @@ var SSRContainer = class extends _SharedContainer {
2289
2308
  innerHTML = this.writeAttrs(elementName, varAttrs, false, currentFile);
2290
2309
  }
2291
2310
  this.write(" " + Q_PROPS_SEPARATOR);
2292
- isDev5 && this.write('=""');
2311
+ if (key !== null) {
2312
+ this.write(`="${key}"`);
2313
+ } else if (isDev5) {
2314
+ this.write('=""');
2315
+ }
2293
2316
  if (constAttrs && constAttrs.length) {
2294
2317
  innerHTML = this.writeAttrs(elementName, constAttrs, true, currentFile) || innerHTML;
2295
2318
  }
@@ -2444,6 +2467,12 @@ var SSRContainer = class extends _SharedContainer {
2444
2467
  }
2445
2468
  return this.lastNode;
2446
2469
  }
2470
+ executeChores() {
2471
+ if (!this.lastNode) {
2472
+ return;
2473
+ }
2474
+ return _executeSsrChores(this, this.lastNode);
2475
+ }
2447
2476
  addUnclaimedProjection(frame, name, children) {
2448
2477
  this.unclaimedProjections.push(frame, null, name, children);
2449
2478
  }
@@ -2488,7 +2517,7 @@ var SSRContainer = class extends _SharedContainer {
2488
2517
  }
2489
2518
  }
2490
2519
  _styleNode(styleId, content) {
2491
- this.openElement("style", [QStyle, styleId]);
2520
+ this.openElement("style", null, [QStyle, styleId]);
2492
2521
  this.write(content);
2493
2522
  this.closeElement();
2494
2523
  }
@@ -2532,7 +2561,7 @@ var SSRContainer = class extends _SharedContainer {
2532
2561
  if (!this.serializationCtx.$roots$.length) {
2533
2562
  return;
2534
2563
  }
2535
- this.openElement("script", ["type", "qwik/vnode"]);
2564
+ this.openElement("script", null, ["type", "qwik/vnode"]);
2536
2565
  const vNodeAttrsStack = [];
2537
2566
  const vNodeData = this.vNodeDatas;
2538
2567
  let lastSerializedIdx = 0;
@@ -2564,9 +2593,11 @@ var SSRContainer = class extends _SharedContainer {
2564
2593
  this.write(VNodeDataChar.CLOSE_CHAR);
2565
2594
  } else if (value === WRITE_ELEMENT_ATTRS) {
2566
2595
  if (fragmentAttrs && fragmentAttrs.length) {
2596
+ this.write(VNodeDataChar.SEPARATOR_CHAR);
2567
2597
  this.write(VNodeDataChar.SEPARATOR_CHAR);
2568
2598
  this.writeFragmentAttrs(fragmentAttrs);
2569
2599
  this.write(VNodeDataChar.SEPARATOR_CHAR);
2600
+ this.write(VNodeDataChar.SEPARATOR_CHAR);
2570
2601
  fragmentAttrs = vNodeAttrsStack.pop();
2571
2602
  }
2572
2603
  } else if (value >= 0) {
@@ -2635,12 +2666,14 @@ var SSRContainer = class extends _SharedContainer {
2635
2666
  case QSlot:
2636
2667
  this.write(VNodeDataChar.SLOT_CHAR);
2637
2668
  break;
2638
- default:
2669
+ default: {
2670
+ encodeValue = true;
2639
2671
  this.write(VNodeDataChar.SEPARATOR_CHAR);
2640
- this.write(key);
2672
+ this.write(encodeVNodeDataString(key));
2641
2673
  this.write(VNodeDataChar.SEPARATOR_CHAR);
2674
+ }
2642
2675
  }
2643
- const encodedValue = encodeValue ? encodeURI(value) : value;
2676
+ const encodedValue = encodeVNodeDataString(encodeValue ? encodeURI(value) : value);
2644
2677
  const isEncoded = encodeValue ? encodedValue !== value : false;
2645
2678
  if (isEncoded) {
2646
2679
  this.write(VNodeDataChar.SEPARATOR_CHAR);
@@ -2655,7 +2688,7 @@ var SSRContainer = class extends _SharedContainer {
2655
2688
  if (!this.serializationCtx.$roots$.length) {
2656
2689
  return;
2657
2690
  }
2658
- this.openElement("script", ["type", "qwik/state"]);
2691
+ this.openElement("script", null, ["type", "qwik/state"]);
2659
2692
  return maybeThen(this.serializationCtx.$serialize$(), () => {
2660
2693
  this.closeElement();
2661
2694
  });
@@ -2667,7 +2700,7 @@ var SSRContainer = class extends _SharedContainer {
2667
2700
  if (this.renderOptions.serverData?.nonce) {
2668
2701
  scriptAttrs.push("nonce", this.renderOptions.serverData.nonce);
2669
2702
  }
2670
- this.openElement("script", scriptAttrs);
2703
+ this.openElement("script", null, scriptAttrs);
2671
2704
  this.write(Q_FUNCS_PREFIX.replace("HASH", this.$instanceHash$));
2672
2705
  this.write("[");
2673
2706
  this.writeArray(fns, ",");
@@ -2689,7 +2722,7 @@ var SSRContainer = class extends _SharedContainer {
2689
2722
  if (this.renderOptions.serverData?.nonce) {
2690
2723
  scriptAttrs.push("nonce", this.renderOptions.serverData.nonce);
2691
2724
  }
2692
- this.openElement("script", scriptAttrs);
2725
+ this.openElement("script", null, scriptAttrs);
2693
2726
  this.write(JSON.stringify(patches));
2694
2727
  this.closeElement();
2695
2728
  }
@@ -2702,7 +2735,7 @@ var SSRContainer = class extends _SharedContainer {
2702
2735
  if (this.renderOptions.serverData?.nonce) {
2703
2736
  scriptAttrs.push("nonce", this.renderOptions.serverData.nonce);
2704
2737
  }
2705
- this.openElement("script", scriptAttrs);
2738
+ this.openElement("script", null, scriptAttrs);
2706
2739
  const backpatchScript = getQwikBackpatchExecutorScript({ debug: isDev5 });
2707
2740
  this.write(backpatchScript);
2708
2741
  this.closeElement();
@@ -2722,13 +2755,13 @@ var SSRContainer = class extends _SharedContainer {
2722
2755
  if (nonce) {
2723
2756
  linkAttrs.push("nonce", nonce);
2724
2757
  }
2725
- this.openElement("link", linkAttrs);
2758
+ this.openElement("link", null, linkAttrs);
2726
2759
  this.closeElement();
2727
2760
  const scriptAttrs = ["async", true, "type", "module", "src", qwikLoaderBundle];
2728
2761
  if (nonce) {
2729
2762
  scriptAttrs.push("nonce", nonce);
2730
2763
  }
2731
- this.openElement("script", scriptAttrs);
2764
+ this.openElement("script", null, scriptAttrs);
2732
2765
  this.closeElement();
2733
2766
  }
2734
2767
  }
@@ -2739,7 +2772,7 @@ var SSRContainer = class extends _SharedContainer {
2739
2772
  if (this.renderOptions.serverData?.nonce) {
2740
2773
  scriptAttrs.push("nonce", this.renderOptions.serverData.nonce);
2741
2774
  }
2742
- this.openElement("script", scriptAttrs);
2775
+ this.openElement("script", null, scriptAttrs);
2743
2776
  this.write(qwikLoaderScript);
2744
2777
  this.closeElement();
2745
2778
  }
@@ -2758,7 +2791,7 @@ var SSRContainer = class extends _SharedContainer {
2758
2791
  if (nonce) {
2759
2792
  scriptAttrs.push("nonce", nonce);
2760
2793
  }
2761
- this.openElement("script", scriptAttrs);
2794
+ this.openElement("script", null, scriptAttrs);
2762
2795
  this.write(`(window.qwikevents||(window.qwikevents=[])).push(`);
2763
2796
  this.writeArray(eventNames, ", ");
2764
2797
  this.write(")");
@@ -2770,7 +2803,7 @@ var SSRContainer = class extends _SharedContainer {
2770
2803
  if (unclaimedProjections.length) {
2771
2804
  const previousCurrentComponentNode = this.currentComponentNode;
2772
2805
  try {
2773
- this.openElement(QTemplate, ["hidden", true, "aria-hidden", "true"], null);
2806
+ this.openElement(QTemplate, null, ["hidden", true, "aria-hidden", "true"], null);
2774
2807
  let idx = 0;
2775
2808
  let ssrComponentNode = null;
2776
2809
  let ssrComponentFrame = null;
@@ -2923,7 +2956,7 @@ var SSRContainer = class extends _SharedContainer {
2923
2956
  let styleScopedId = null;
2924
2957
  if (isSSRUnsafeAttr(key)) {
2925
2958
  if (isDev5) {
2926
- throw qError(32 /* unsafeAttr */);
2959
+ throw qError(32 /* unsafeAttr */, [key]);
2927
2960
  }
2928
2961
  continue;
2929
2962
  }
@@ -3082,7 +3115,7 @@ var renderToStream = async (jsx, opts) => {
3082
3115
  });
3083
3116
  await setServerPlatform(opts, resolvedManifest);
3084
3117
  await ssrContainer.render(jsx);
3085
- await ssrContainer.$scheduler$(255 /* WAIT_FOR_QUEUE */).$returnValue$;
3118
+ await ssrContainer.$renderPromise$;
3086
3119
  flush();
3087
3120
  const snapshotResult = getSnapshotResult(ssrContainer);
3088
3121
  const isDynamic = snapshotResult.resources.some((r) => r._cache !== Infinity);