@vue/compat 3.5.5 → 3.5.7

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vue/compat v3.5.5
2
+ * @vue/compat v3.5.7
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -465,7 +465,7 @@ class ReactiveEffect {
465
465
  /**
466
466
  * @internal
467
467
  */
468
- this.nextEffect = void 0;
468
+ this.next = void 0;
469
469
  /**
470
470
  * @internal
471
471
  */
@@ -495,9 +495,7 @@ class ReactiveEffect {
495
495
  return;
496
496
  }
497
497
  if (!(this.flags & 8)) {
498
- this.flags |= 8;
499
- this.nextEffect = batchedEffect;
500
- batchedEffect = this;
498
+ batch(this);
501
499
  }
502
500
  }
503
501
  run() {
@@ -558,7 +556,12 @@ class ReactiveEffect {
558
556
  }
559
557
  }
560
558
  let batchDepth = 0;
561
- let batchedEffect;
559
+ let batchedSub;
560
+ function batch(sub) {
561
+ sub.flags |= 8;
562
+ sub.next = batchedSub;
563
+ batchedSub = sub;
564
+ }
562
565
  function startBatch() {
563
566
  batchDepth++;
564
567
  }
@@ -567,15 +570,16 @@ function endBatch() {
567
570
  return;
568
571
  }
569
572
  let error;
570
- while (batchedEffect) {
571
- let e = batchedEffect;
572
- batchedEffect = void 0;
573
+ while (batchedSub) {
574
+ let e = batchedSub;
575
+ batchedSub = void 0;
573
576
  while (e) {
574
- const next = e.nextEffect;
575
- e.nextEffect = void 0;
577
+ const next = e.next;
578
+ e.next = void 0;
576
579
  e.flags &= ~8;
577
580
  if (e.flags & 1) {
578
581
  try {
582
+ ;
579
583
  e.trigger();
580
584
  } catch (err) {
581
585
  if (!error) error = err;
@@ -615,7 +619,7 @@ function cleanupDeps(sub) {
615
619
  }
616
620
  function isDirty(sub) {
617
621
  for (let link = sub.deps; link; link = link.nextDep) {
618
- if (link.dep.version !== link.version || link.dep.computed && refreshComputed(link.dep.computed) || link.dep.version !== link.version) {
622
+ if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {
619
623
  return true;
620
624
  }
621
625
  }
@@ -635,7 +639,7 @@ function refreshComputed(computed) {
635
639
  computed.globalVersion = globalVersion;
636
640
  const dep = computed.dep;
637
641
  computed.flags |= 2;
638
- if (dep.version > 0 && !computed.isSSR && !isDirty(computed)) {
642
+ if (dep.version > 0 && !computed.isSSR && computed.deps && !isDirty(computed)) {
639
643
  computed.flags &= ~2;
640
644
  return;
641
645
  }
@@ -660,7 +664,7 @@ function refreshComputed(computed) {
660
664
  computed.flags &= ~2;
661
665
  }
662
666
  }
663
- function removeSub(link) {
667
+ function removeSub(link, fromComputed = false) {
664
668
  const { dep, prevSub, nextSub } = link;
665
669
  if (prevSub) {
666
670
  prevSub.nextSub = nextSub;
@@ -673,10 +677,18 @@ function removeSub(link) {
673
677
  if (dep.subs === link) {
674
678
  dep.subs = prevSub;
675
679
  }
676
- if (!dep.subs && dep.computed) {
677
- dep.computed.flags &= ~4;
678
- for (let l = dep.computed.deps; l; l = l.nextDep) {
679
- removeSub(l);
680
+ if (!!(process.env.NODE_ENV !== "production") && dep.subsHead === link) {
681
+ dep.subsHead = nextSub;
682
+ }
683
+ if (!dep.subs) {
684
+ if (dep.computed) {
685
+ dep.computed.flags &= ~4;
686
+ for (let l = dep.computed.deps; l; l = l.nextDep) {
687
+ removeSub(l, true);
688
+ }
689
+ } else if (dep.map && !fromComputed) {
690
+ dep.map.delete(dep.key);
691
+ if (!dep.map.size) targetMap.delete(dep.target);
680
692
  }
681
693
  }
682
694
  }
@@ -757,6 +769,12 @@ class Dep {
757
769
  * Doubly linked list representing the subscribing effects (tail)
758
770
  */
759
771
  this.subs = void 0;
772
+ /**
773
+ * For object property deps cleanup
774
+ */
775
+ this.target = void 0;
776
+ this.map = void 0;
777
+ this.key = void 0;
760
778
  if (!!(process.env.NODE_ENV !== "production")) {
761
779
  this.subsHead = void 0;
762
780
  }
@@ -817,7 +835,7 @@ class Dep {
817
835
  try {
818
836
  if (!!(process.env.NODE_ENV !== "production")) {
819
837
  for (let head = this.subsHead; head; head = head.nextSub) {
820
- if (!!(process.env.NODE_ENV !== "production") && head.sub.onTrigger && !(head.sub.flags & 8)) {
838
+ if (head.sub.onTrigger && !(head.sub.flags & 8)) {
821
839
  head.sub.onTrigger(
822
840
  extend(
823
841
  {
@@ -830,7 +848,10 @@ class Dep {
830
848
  }
831
849
  }
832
850
  for (let link = this.subs; link; link = link.prevSub) {
833
- link.sub.notify();
851
+ if (link.sub.notify()) {
852
+ ;
853
+ link.sub.dep.notify();
854
+ }
834
855
  }
835
856
  } finally {
836
857
  endBatch();
@@ -874,6 +895,9 @@ function track(target, type, key) {
874
895
  let dep = depsMap.get(key);
875
896
  if (!dep) {
876
897
  depsMap.set(key, dep = new Dep());
898
+ dep.target = target;
899
+ dep.map = depsMap;
900
+ dep.key = key;
877
901
  }
878
902
  if (!!(process.env.NODE_ENV !== "production")) {
879
903
  dep.track({
@@ -1758,15 +1782,17 @@ class RefImpl {
1758
1782
  }
1759
1783
  }
1760
1784
  function triggerRef(ref2) {
1761
- if (!!(process.env.NODE_ENV !== "production")) {
1762
- ref2.dep.trigger({
1763
- target: ref2,
1764
- type: "set",
1765
- key: "value",
1766
- newValue: ref2._value
1767
- });
1768
- } else {
1769
- ref2.dep.trigger();
1785
+ if (ref2.dep) {
1786
+ if (!!(process.env.NODE_ENV !== "production")) {
1787
+ ref2.dep.trigger({
1788
+ target: ref2,
1789
+ type: "set",
1790
+ key: "value",
1791
+ newValue: ref2._value
1792
+ });
1793
+ } else {
1794
+ ref2.dep.trigger();
1795
+ }
1770
1796
  }
1771
1797
  }
1772
1798
  function unref(ref2) {
@@ -1909,8 +1935,10 @@ class ComputedRefImpl {
1909
1935
  */
1910
1936
  notify() {
1911
1937
  this.flags |= 16;
1912
- if (activeSub !== this) {
1913
- this.dep.notify();
1938
+ if (!(this.flags & 8) && // avoid infinite self recursion
1939
+ activeSub !== this) {
1940
+ batch(this);
1941
+ return true;
1914
1942
  } else if (!!(process.env.NODE_ENV !== "production")) ;
1915
1943
  }
1916
1944
  get value() {
@@ -2058,20 +2086,12 @@ function watch$1(source, cb, options = EMPTY_OBJ) {
2058
2086
  remove(scope.effects, effect);
2059
2087
  }
2060
2088
  };
2061
- if (once) {
2062
- if (cb) {
2063
- const _cb = cb;
2064
- cb = (...args) => {
2065
- _cb(...args);
2066
- watchHandle();
2067
- };
2068
- } else {
2069
- const _getter = getter;
2070
- getter = () => {
2071
- _getter();
2072
- watchHandle();
2073
- };
2074
- }
2089
+ if (once && cb) {
2090
+ const _cb = cb;
2091
+ cb = (...args) => {
2092
+ _cb(...args);
2093
+ watchHandle();
2094
+ };
2075
2095
  }
2076
2096
  let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;
2077
2097
  const job = (immediateFirstRun) => {
@@ -2525,7 +2545,9 @@ function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {
2525
2545
  cb.flags &= ~1;
2526
2546
  }
2527
2547
  cb();
2528
- cb.flags &= ~1;
2548
+ if (!(cb.flags & 4)) {
2549
+ cb.flags &= ~1;
2550
+ }
2529
2551
  }
2530
2552
  }
2531
2553
  }
@@ -2581,7 +2603,9 @@ function flushJobs(seen) {
2581
2603
  job.i,
2582
2604
  job.i ? 15 : 14
2583
2605
  );
2584
- job.flags &= ~1;
2606
+ if (!(job.flags & 4)) {
2607
+ job.flags &= ~1;
2608
+ }
2585
2609
  }
2586
2610
  }
2587
2611
  } finally {
@@ -4926,6 +4950,11 @@ const hydrateOnIdle = (timeout = 1e4) => (hydrate) => {
4926
4950
  const id = requestIdleCallback(hydrate, { timeout });
4927
4951
  return () => cancelIdleCallback(id);
4928
4952
  };
4953
+ function elementIsVisibleInViewport(el) {
4954
+ const { top, left, bottom, right } = el.getBoundingClientRect();
4955
+ const { innerHeight, innerWidth } = window;
4956
+ return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);
4957
+ }
4929
4958
  const hydrateOnVisible = (opts) => (hydrate, forEach) => {
4930
4959
  const ob = new IntersectionObserver((entries) => {
4931
4960
  for (const e of entries) {
@@ -4935,7 +4964,15 @@ const hydrateOnVisible = (opts) => (hydrate, forEach) => {
4935
4964
  break;
4936
4965
  }
4937
4966
  }, opts);
4938
- forEach((el) => ob.observe(el));
4967
+ forEach((el) => {
4968
+ if (!(el instanceof Element)) return;
4969
+ if (elementIsVisibleInViewport(el)) {
4970
+ hydrate();
4971
+ ob.disconnect();
4972
+ return false;
4973
+ }
4974
+ ob.observe(el);
4975
+ });
4939
4976
  return () => ob.disconnect();
4940
4977
  };
4941
4978
  const hydrateOnMediaQuery = (query) => (hydrate) => {
@@ -4980,7 +5017,10 @@ function forEachElement(node, cb) {
4980
5017
  let next = node.nextSibling;
4981
5018
  while (next) {
4982
5019
  if (next.nodeType === 1) {
4983
- cb(next);
5020
+ const result = cb(next);
5021
+ if (result === false) {
5022
+ break;
5023
+ }
4984
5024
  } else if (isComment(next)) {
4985
5025
  if (next.data === "]") {
4986
5026
  if (--depth === 0) break;
@@ -7075,7 +7115,7 @@ function createCompatVue$1(createApp, createSingletonApp) {
7075
7115
  return vm;
7076
7116
  }
7077
7117
  }
7078
- Vue.version = `2.6.14-compat:${"3.5.5"}`;
7118
+ Vue.version = `2.6.14-compat:${"3.5.7"}`;
7079
7119
  Vue.config = singletonApp.config;
7080
7120
  Vue.use = (plugin, ...options) => {
7081
7121
  if (plugin && isFunction(plugin.install)) {
@@ -9933,11 +9973,12 @@ function doWatch(source, cb, options = EMPTY_OBJ) {
9933
9973
  } else if (!cb || immediate) {
9934
9974
  baseWatchOptions.once = true;
9935
9975
  } else {
9936
- return {
9937
- stop: NOOP,
9938
- resume: NOOP,
9939
- pause: NOOP
9976
+ const watchStopHandle = () => {
9940
9977
  };
9978
+ watchStopHandle.stop = NOOP;
9979
+ watchStopHandle.resume = NOOP;
9980
+ watchStopHandle.pause = NOOP;
9981
+ return watchStopHandle;
9941
9982
  }
9942
9983
  }
9943
9984
  const instance = currentInstance;
@@ -12243,7 +12284,7 @@ function isMemoSame(cached, memo) {
12243
12284
  return true;
12244
12285
  }
12245
12286
 
12246
- const version = "3.5.5";
12287
+ const version = "3.5.7";
12247
12288
  const warn = !!(process.env.NODE_ENV !== "production") ? warn$1 : NOOP;
12248
12289
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
12249
12290
  const devtools = !!(process.env.NODE_ENV !== "production") || true ? devtools$1 : void 0;
@@ -12586,7 +12627,7 @@ function whenTransitionEnds(el, expectedType, explicitTimeout, resolve) {
12586
12627
  resolve();
12587
12628
  }
12588
12629
  };
12589
- if (explicitTimeout) {
12630
+ if (explicitTimeout != null) {
12590
12631
  return setTimeout(resolveIfNotStale, explicitTimeout);
12591
12632
  }
12592
12633
  const { type, timeout, propCount } = getTransitionInfo(el, expectedType);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @vue/compat v3.5.5
2
+ * @vue/compat v3.5.7
3
3
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
4
4
  * @license MIT
5
5
  **/
@@ -468,7 +468,7 @@ var Vue = (function () {
468
468
  /**
469
469
  * @internal
470
470
  */
471
- this.nextEffect = void 0;
471
+ this.next = void 0;
472
472
  /**
473
473
  * @internal
474
474
  */
@@ -498,9 +498,7 @@ var Vue = (function () {
498
498
  return;
499
499
  }
500
500
  if (!(this.flags & 8)) {
501
- this.flags |= 8;
502
- this.nextEffect = batchedEffect;
503
- batchedEffect = this;
501
+ batch(this);
504
502
  }
505
503
  }
506
504
  run() {
@@ -561,7 +559,12 @@ var Vue = (function () {
561
559
  }
562
560
  }
563
561
  let batchDepth = 0;
564
- let batchedEffect;
562
+ let batchedSub;
563
+ function batch(sub) {
564
+ sub.flags |= 8;
565
+ sub.next = batchedSub;
566
+ batchedSub = sub;
567
+ }
565
568
  function startBatch() {
566
569
  batchDepth++;
567
570
  }
@@ -570,15 +573,16 @@ var Vue = (function () {
570
573
  return;
571
574
  }
572
575
  let error;
573
- while (batchedEffect) {
574
- let e = batchedEffect;
575
- batchedEffect = void 0;
576
+ while (batchedSub) {
577
+ let e = batchedSub;
578
+ batchedSub = void 0;
576
579
  while (e) {
577
- const next = e.nextEffect;
578
- e.nextEffect = void 0;
580
+ const next = e.next;
581
+ e.next = void 0;
579
582
  e.flags &= ~8;
580
583
  if (e.flags & 1) {
581
584
  try {
585
+ ;
582
586
  e.trigger();
583
587
  } catch (err) {
584
588
  if (!error) error = err;
@@ -618,7 +622,7 @@ var Vue = (function () {
618
622
  }
619
623
  function isDirty(sub) {
620
624
  for (let link = sub.deps; link; link = link.nextDep) {
621
- if (link.dep.version !== link.version || link.dep.computed && refreshComputed(link.dep.computed) || link.dep.version !== link.version) {
625
+ if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) {
622
626
  return true;
623
627
  }
624
628
  }
@@ -638,7 +642,7 @@ var Vue = (function () {
638
642
  computed.globalVersion = globalVersion;
639
643
  const dep = computed.dep;
640
644
  computed.flags |= 2;
641
- if (dep.version > 0 && !computed.isSSR && !isDirty(computed)) {
645
+ if (dep.version > 0 && !computed.isSSR && computed.deps && !isDirty(computed)) {
642
646
  computed.flags &= ~2;
643
647
  return;
644
648
  }
@@ -663,7 +667,7 @@ var Vue = (function () {
663
667
  computed.flags &= ~2;
664
668
  }
665
669
  }
666
- function removeSub(link) {
670
+ function removeSub(link, fromComputed = false) {
667
671
  const { dep, prevSub, nextSub } = link;
668
672
  if (prevSub) {
669
673
  prevSub.nextSub = nextSub;
@@ -676,10 +680,18 @@ var Vue = (function () {
676
680
  if (dep.subs === link) {
677
681
  dep.subs = prevSub;
678
682
  }
679
- if (!dep.subs && dep.computed) {
680
- dep.computed.flags &= ~4;
681
- for (let l = dep.computed.deps; l; l = l.nextDep) {
682
- removeSub(l);
683
+ if (dep.subsHead === link) {
684
+ dep.subsHead = nextSub;
685
+ }
686
+ if (!dep.subs) {
687
+ if (dep.computed) {
688
+ dep.computed.flags &= ~4;
689
+ for (let l = dep.computed.deps; l; l = l.nextDep) {
690
+ removeSub(l, true);
691
+ }
692
+ } else if (dep.map && !fromComputed) {
693
+ dep.map.delete(dep.key);
694
+ if (!dep.map.size) targetMap.delete(dep.target);
683
695
  }
684
696
  }
685
697
  }
@@ -760,6 +772,12 @@ var Vue = (function () {
760
772
  * Doubly linked list representing the subscribing effects (tail)
761
773
  */
762
774
  this.subs = void 0;
775
+ /**
776
+ * For object property deps cleanup
777
+ */
778
+ this.target = void 0;
779
+ this.map = void 0;
780
+ this.key = void 0;
763
781
  {
764
782
  this.subsHead = void 0;
765
783
  }
@@ -833,7 +851,10 @@ var Vue = (function () {
833
851
  }
834
852
  }
835
853
  for (let link = this.subs; link; link = link.prevSub) {
836
- link.sub.notify();
854
+ if (link.sub.notify()) {
855
+ ;
856
+ link.sub.dep.notify();
857
+ }
837
858
  }
838
859
  } finally {
839
860
  endBatch();
@@ -877,6 +898,9 @@ var Vue = (function () {
877
898
  let dep = depsMap.get(key);
878
899
  if (!dep) {
879
900
  depsMap.set(key, dep = new Dep());
901
+ dep.target = target;
902
+ dep.map = depsMap;
903
+ dep.key = key;
880
904
  }
881
905
  {
882
906
  dep.track({
@@ -1753,13 +1777,15 @@ var Vue = (function () {
1753
1777
  }
1754
1778
  }
1755
1779
  function triggerRef(ref2) {
1756
- {
1757
- ref2.dep.trigger({
1758
- target: ref2,
1759
- type: "set",
1760
- key: "value",
1761
- newValue: ref2._value
1762
- });
1780
+ if (ref2.dep) {
1781
+ {
1782
+ ref2.dep.trigger({
1783
+ target: ref2,
1784
+ type: "set",
1785
+ key: "value",
1786
+ newValue: ref2._value
1787
+ });
1788
+ }
1763
1789
  }
1764
1790
  }
1765
1791
  function unref(ref2) {
@@ -1902,8 +1928,10 @@ var Vue = (function () {
1902
1928
  */
1903
1929
  notify() {
1904
1930
  this.flags |= 16;
1905
- if (activeSub !== this) {
1906
- this.dep.notify();
1931
+ if (!(this.flags & 8) && // avoid infinite self recursion
1932
+ activeSub !== this) {
1933
+ batch(this);
1934
+ return true;
1907
1935
  }
1908
1936
  }
1909
1937
  get value() {
@@ -2051,20 +2079,12 @@ var Vue = (function () {
2051
2079
  remove(scope.effects, effect);
2052
2080
  }
2053
2081
  };
2054
- if (once) {
2055
- if (cb) {
2056
- const _cb = cb;
2057
- cb = (...args) => {
2058
- _cb(...args);
2059
- watchHandle();
2060
- };
2061
- } else {
2062
- const _getter = getter;
2063
- getter = () => {
2064
- _getter();
2065
- watchHandle();
2066
- };
2067
- }
2082
+ if (once && cb) {
2083
+ const _cb = cb;
2084
+ cb = (...args) => {
2085
+ _cb(...args);
2086
+ watchHandle();
2087
+ };
2068
2088
  }
2069
2089
  let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;
2070
2090
  const job = (immediateFirstRun) => {
@@ -2513,7 +2533,9 @@ var Vue = (function () {
2513
2533
  cb.flags &= ~1;
2514
2534
  }
2515
2535
  cb();
2516
- cb.flags &= ~1;
2536
+ if (!(cb.flags & 4)) {
2537
+ cb.flags &= ~1;
2538
+ }
2517
2539
  }
2518
2540
  }
2519
2541
  }
@@ -2569,7 +2591,9 @@ var Vue = (function () {
2569
2591
  job.i,
2570
2592
  job.i ? 15 : 14
2571
2593
  );
2572
- job.flags &= ~1;
2594
+ if (!(job.flags & 4)) {
2595
+ job.flags &= ~1;
2596
+ }
2573
2597
  }
2574
2598
  }
2575
2599
  } finally {
@@ -4899,6 +4923,11 @@ Server rendered element contains fewer child nodes than client vdom.`
4899
4923
  const id = requestIdleCallback(hydrate, { timeout });
4900
4924
  return () => cancelIdleCallback(id);
4901
4925
  };
4926
+ function elementIsVisibleInViewport(el) {
4927
+ const { top, left, bottom, right } = el.getBoundingClientRect();
4928
+ const { innerHeight, innerWidth } = window;
4929
+ return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth);
4930
+ }
4902
4931
  const hydrateOnVisible = (opts) => (hydrate, forEach) => {
4903
4932
  const ob = new IntersectionObserver((entries) => {
4904
4933
  for (const e of entries) {
@@ -4908,7 +4937,15 @@ Server rendered element contains fewer child nodes than client vdom.`
4908
4937
  break;
4909
4938
  }
4910
4939
  }, opts);
4911
- forEach((el) => ob.observe(el));
4940
+ forEach((el) => {
4941
+ if (!(el instanceof Element)) return;
4942
+ if (elementIsVisibleInViewport(el)) {
4943
+ hydrate();
4944
+ ob.disconnect();
4945
+ return false;
4946
+ }
4947
+ ob.observe(el);
4948
+ });
4912
4949
  return () => ob.disconnect();
4913
4950
  };
4914
4951
  const hydrateOnMediaQuery = (query) => (hydrate) => {
@@ -4953,7 +4990,10 @@ Server rendered element contains fewer child nodes than client vdom.`
4953
4990
  let next = node.nextSibling;
4954
4991
  while (next) {
4955
4992
  if (next.nodeType === 1) {
4956
- cb(next);
4993
+ const result = cb(next);
4994
+ if (result === false) {
4995
+ break;
4996
+ }
4957
4997
  } else if (isComment(next)) {
4958
4998
  if (next.data === "]") {
4959
4999
  if (--depth === 0) break;
@@ -7037,7 +7077,7 @@ If this is a native custom element, make sure to exclude it from component resol
7037
7077
  return vm;
7038
7078
  }
7039
7079
  }
7040
- Vue.version = `2.6.14-compat:${"3.5.5"}`;
7080
+ Vue.version = `2.6.14-compat:${"3.5.7"}`;
7041
7081
  Vue.config = singletonApp.config;
7042
7082
  Vue.use = (plugin, ...options) => {
7043
7083
  if (plugin && isFunction(plugin.install)) {
@@ -12115,7 +12155,7 @@ Component that was made reactive: `,
12115
12155
  return true;
12116
12156
  }
12117
12157
 
12118
- const version = "3.5.5";
12158
+ const version = "3.5.7";
12119
12159
  const warn = warn$1 ;
12120
12160
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
12121
12161
  const devtools = devtools$1 ;
@@ -12446,7 +12486,7 @@ Component that was made reactive: `,
12446
12486
  resolve();
12447
12487
  }
12448
12488
  };
12449
- if (explicitTimeout) {
12489
+ if (explicitTimeout != null) {
12450
12490
  return setTimeout(resolveIfNotStale, explicitTimeout);
12451
12491
  }
12452
12492
  const { type, timeout, propCount } = getTransitionInfo(el, expectedType);