@viewfly/core 3.0.0-alpha.2 → 3.0.0-alpha.4

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/index.js CHANGED
@@ -210,7 +210,7 @@ var NullInjector = class {
210
210
  * @param provider
211
211
  */
212
212
  function normalizeProvider(provider) {
213
- if (provider.useValue) return normalizeValueProviderFactory(provider);
213
+ if (Object.prototype.hasOwnProperty.call(provider, "useValue")) return normalizeValueProviderFactory(provider);
214
214
  if (provider.useClass) return normalizeClassProviderFactory(provider);
215
215
  if (provider.useExisting) return normalizeExistingProviderFactory(provider);
216
216
  if (provider.useFactory) return normalizeFactoryProviderFactory(provider);
@@ -346,13 +346,14 @@ var provideScopeError = (token) => {
346
346
  * 反射注入器
347
347
  */
348
348
  var ReflectiveInjector = class {
349
- normalizedProviders;
349
+ normalizedProviders = /* @__PURE__ */ new Map();
350
350
  recordValues = /* @__PURE__ */ new Map();
351
351
  constructor(parentInjector, staticProviders, scope) {
352
352
  this.parentInjector = parentInjector;
353
353
  this.scope = scope;
354
- this.normalizedProviders = staticProviders.map((provide) => {
355
- return normalizeProvider(provide);
354
+ staticProviders.forEach((provide) => {
355
+ const normalizedProvider = normalizeProvider(provide);
356
+ this.normalizedProviders.set(normalizedProvider.provide, normalizedProvider);
356
357
  });
357
358
  }
358
359
  /**
@@ -369,22 +370,20 @@ var ReflectiveInjector = class {
369
370
  throw reflectiveInjectorErrorFn(token);
370
371
  }
371
372
  if (this.recordValues.has(token)) return this.recordValues.get(token);
372
- for (let i = 0; i < this.normalizedProviders.length; i++) {
373
- const normalizedProvider = this.normalizedProviders[i];
374
- if (normalizedProvider.provide === token) return this.getValue(token, normalizedProvider);
375
- }
373
+ const normalizedProvider = this.normalizedProviders.get(token);
374
+ if (normalizedProvider) return this.getValue(token, normalizedProvider);
376
375
  if (!(token instanceof InjectionToken)) {
377
376
  const scope = getAnnotations(token).getClassMetadata(Injectable)?.metadata.provideIn;
378
377
  if (scope) {
379
378
  const normalizedProvider = normalizeProvider(token);
380
379
  if (this.scope === scope) {
381
- this.normalizedProviders.push(normalizedProvider);
380
+ this.normalizedProviders.set(normalizedProvider.provide, normalizedProvider);
382
381
  return this.getValue(token, normalizedProvider);
383
382
  }
384
383
  const parentInjector = this.parentInjector;
385
384
  if (!parentInjector || parentInjector instanceof NullInjector) {
386
385
  if (normalizedProvider.scope === "root") {
387
- this.normalizedProviders.push(normalizedProvider);
386
+ this.normalizedProviders.set(normalizedProvider.provide, normalizedProvider);
388
387
  return this.getValue(token, normalizedProvider);
389
388
  }
390
389
  if (notFoundValue !== THROW_IF_NOT_FOUND) return notFoundValue;
@@ -403,9 +402,8 @@ var ReflectiveInjector = class {
403
402
  getValue(token, normalizedProvider) {
404
403
  const { generateFactory, deps } = normalizedProvider;
405
404
  const params = this.resolveDeps(deps);
406
- let value = this.recordValues.get(token);
407
- if (value) return value;
408
- value = generateFactory(this, (token, value) => {
405
+ if (this.recordValues.has(token)) return this.recordValues.get(token);
406
+ const value = generateFactory(this, (token, value) => {
409
407
  this.recordValues.set(token, value);
410
408
  })(...params);
411
409
  this.recordValues.set(token, value);
@@ -510,47 +508,89 @@ function onUnmounted(callback) {
510
508
  }
511
509
  //#endregion
512
510
  //#region src/reactive/_help.ts
513
- var toStr$1 = Object.prototype.toString;
514
- function getStringType$1(v) {
515
- return toStr$1.call(v);
511
+ var toStr = Object.prototype.toString;
512
+ function getStringType(v) {
513
+ return toStr.call(v);
516
514
  }
517
- function isArray$1(v) {
515
+ function isArray(v) {
518
516
  return Array.isArray(v);
519
517
  }
520
- var hasOwnProperty$1 = Object.prototype.hasOwnProperty;
521
- function hasOwn$1(target, key) {
522
- return hasOwnProperty$1.call(target, key);
518
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
519
+ function hasOwn(target, key) {
520
+ return hasOwnProperty.call(target, key);
523
521
  }
524
522
  //#endregion
525
523
  //#region src/base/dep.ts
526
524
  var Dep = class {
527
525
  destroyCallbacks = [];
528
- constructor(effect) {
526
+ constructor(effect, flushMode = "sync") {
529
527
  this.effect = effect;
528
+ this.flushMode = flushMode;
530
529
  }
531
530
  destroy() {
532
531
  this.destroyCallbacks.forEach((callback) => callback());
533
532
  this.destroyCallbacks = [];
534
533
  }
535
534
  };
536
- var deps$1 = [];
535
+ var deps = [];
537
536
  function getDepContext() {
538
- return deps$1.at(-1);
537
+ return deps[deps.length - 1];
539
538
  }
540
539
  function pushDepContext(dep) {
541
- deps$1.push(dep);
540
+ deps.push(dep);
542
541
  }
543
542
  function popDepContext() {
544
- deps$1.pop();
543
+ deps.pop();
545
544
  }
546
545
  //#endregion
547
546
  //#region src/reactive/effect.ts
548
- var subscribers$1 = /* @__PURE__ */ new WeakMap();
549
- function getSubscriber$1(target) {
550
- let subscriber = subscribers$1.get(target);
547
+ var subscribers = /* @__PURE__ */ new WeakMap();
548
+ var pendingDeps = /* @__PURE__ */ new Set();
549
+ var isFlushScheduled = false;
550
+ var effectErrorFn = makeError("Effect");
551
+ function scheduleDep(dep) {
552
+ if (dep.flushMode === "sync") {
553
+ dep.effect();
554
+ return;
555
+ }
556
+ pendingDeps.add(dep);
557
+ if (!isFlushScheduled) {
558
+ isFlushScheduled = true;
559
+ queueMicrotask(flushPendingDeps);
560
+ }
561
+ }
562
+ function flushPendingDeps() {
563
+ try {
564
+ while (pendingDeps.size > 0) {
565
+ const deps = Array.from(pendingDeps);
566
+ pendingDeps.clear();
567
+ deps.forEach((dep) => {
568
+ dep.effect();
569
+ });
570
+ }
571
+ } finally {
572
+ isFlushScheduled = false;
573
+ if (pendingDeps.size > 0) {
574
+ isFlushScheduled = true;
575
+ queueMicrotask(flushPendingDeps);
576
+ }
577
+ }
578
+ }
579
+ function nextTick() {
580
+ return Promise.resolve();
581
+ }
582
+ /**
583
+ * 同步清空响应式调度队列。
584
+ * @internal 仅用于框架内部桥接与测试控制,不建议业务代码使用。
585
+ */
586
+ function flushReactiveEffectsSync() {
587
+ flushPendingDeps();
588
+ }
589
+ function getSubscriber(target) {
590
+ let subscriber = subscribers.get(target);
551
591
  if (!subscriber) {
552
592
  subscriber = /* @__PURE__ */ new Map();
553
- subscribers$1.set(target, subscriber);
593
+ subscribers.set(target, subscriber);
554
594
  }
555
595
  return subscriber;
556
596
  }
@@ -565,13 +605,21 @@ var TriggerOpTypes = /* @__PURE__ */ function(TriggerOpTypes) {
565
605
  TriggerOpTypes["Add"] = "Add";
566
606
  TriggerOpTypes["Delete"] = "Delete";
567
607
  TriggerOpTypes["Clear"] = "Clear";
608
+ TriggerOpTypes["Iterate"] = "Iterate";
568
609
  return TriggerOpTypes;
569
610
  }({});
570
- var unKnownKey$1 = Symbol("unKnownKey");
571
- function track(target, type, key = unKnownKey$1) {
611
+ var unKnownKey = Symbol("unKnownKey");
612
+ function cleanupEmptyEffects(target, type, key, effects, record, subscriber) {
613
+ if (effects.size > 0) return;
614
+ record.delete(key);
615
+ if (record.size > 0) return;
616
+ subscriber.delete(type);
617
+ if (subscriber.size === 0) subscribers.delete(target);
618
+ }
619
+ function track(target, type, key = unKnownKey) {
572
620
  const dep = getDepContext();
573
621
  if (dep) {
574
- const subscriber = getSubscriber$1(target);
622
+ const subscriber = getSubscriber(target);
575
623
  let record = subscriber.get(type);
576
624
  if (!record) {
577
625
  record = /* @__PURE__ */ new Map();
@@ -583,40 +631,124 @@ function track(target, type, key = unKnownKey$1) {
583
631
  record.set(key, effects);
584
632
  dep.destroyCallbacks.push(() => {
585
633
  effects.delete(dep);
634
+ cleanupEmptyEffects(target, type, key, effects, record, subscriber);
586
635
  });
587
636
  } else if (!effects.has(dep)) {
588
637
  dep.destroyCallbacks.push(() => {
589
638
  effects.delete(dep);
639
+ cleanupEmptyEffects(target, type, key, effects, record, subscriber);
590
640
  });
591
641
  effects.add(dep);
592
642
  }
593
643
  }
594
644
  }
595
- function runEffect$1(key, record) {
645
+ function runEffect(key, record) {
596
646
  if (!record) return;
597
647
  const effects = record.get(key);
598
- if (effects) [...effects].forEach((i) => i.effect());
648
+ if (effects) [...effects].forEach((dep) => scheduleDep(dep));
599
649
  }
600
- function trigger(target, type, key = unKnownKey$1) {
601
- const subscriber = getSubscriber$1(target);
602
- if (subscriber) switch (type) {
650
+ function collectAllEffects(record, effectSet) {
651
+ if (!record) return;
652
+ record.forEach((effects) => {
653
+ effects.forEach((effect) => {
654
+ effectSet.add(effect);
655
+ });
656
+ });
657
+ }
658
+ function trigger(target, type, key = unKnownKey) {
659
+ const subscriber = subscribers.get(target);
660
+ if (!subscriber) return;
661
+ if (isArray(target)) {
662
+ switch (type) {
663
+ case TriggerOpTypes.Set:
664
+ runEffect(key, subscriber.get(TrackOpTypes.Get));
665
+ runEffect(key, subscriber.get(TrackOpTypes.Has));
666
+ break;
667
+ case TriggerOpTypes.Iterate:
668
+ runEffect(key, subscriber.get(TrackOpTypes.Iterate));
669
+ break;
670
+ case TriggerOpTypes.Delete:
671
+ runEffect(key, subscriber.get(TrackOpTypes.Get));
672
+ runEffect(key, subscriber.get(TrackOpTypes.Has));
673
+ break;
674
+ default: throw effectErrorFn(`trigger: type '${type}' is not supported`);
675
+ }
676
+ return;
677
+ }
678
+ if (target instanceof Map || target instanceof WeakMap) {
679
+ switch (type) {
680
+ case TriggerOpTypes.Set:
681
+ case TriggerOpTypes.Add:
682
+ runEffect(key, subscriber.get(TrackOpTypes.Get));
683
+ runEffect(key, subscriber.get(TrackOpTypes.Has));
684
+ break;
685
+ case TriggerOpTypes.Iterate:
686
+ runEffect(key, subscriber.get(TrackOpTypes.Iterate));
687
+ break;
688
+ case TriggerOpTypes.Delete:
689
+ runEffect(key, subscriber.get(TrackOpTypes.Get));
690
+ runEffect(key, subscriber.get(TrackOpTypes.Has));
691
+ runEffect(key, subscriber.get(TrackOpTypes.Iterate));
692
+ break;
693
+ case TriggerOpTypes.Clear: {
694
+ const effects = /* @__PURE__ */ new Set();
695
+ collectAllEffects(subscriber.get(TrackOpTypes.Get), effects);
696
+ collectAllEffects(subscriber.get(TrackOpTypes.Has), effects);
697
+ collectAllEffects(subscriber.get(TrackOpTypes.Iterate), effects);
698
+ effects.forEach((effect) => scheduleDep(effect));
699
+ break;
700
+ }
701
+ default: throw effectErrorFn(`trigger: type '${type}' is not supported`);
702
+ }
703
+ return;
704
+ }
705
+ if (target instanceof Set || target instanceof WeakSet) {
706
+ switch (type) {
707
+ case TriggerOpTypes.Add:
708
+ runEffect(key, subscriber.get(TrackOpTypes.Get));
709
+ runEffect(key, subscriber.get(TrackOpTypes.Has));
710
+ break;
711
+ case TriggerOpTypes.Iterate:
712
+ runEffect(key, subscriber.get(TrackOpTypes.Iterate));
713
+ break;
714
+ case TriggerOpTypes.Delete:
715
+ runEffect(key, subscriber.get(TrackOpTypes.Get));
716
+ runEffect(key, subscriber.get(TrackOpTypes.Has));
717
+ runEffect(key, subscriber.get(TrackOpTypes.Iterate));
718
+ break;
719
+ case TriggerOpTypes.Clear: {
720
+ const effects = /* @__PURE__ */ new Set();
721
+ collectAllEffects(subscriber.get(TrackOpTypes.Get), effects);
722
+ collectAllEffects(subscriber.get(TrackOpTypes.Has), effects);
723
+ collectAllEffects(subscriber.get(TrackOpTypes.Iterate), effects);
724
+ effects.forEach((effect) => scheduleDep(effect));
725
+ break;
726
+ }
727
+ default: throw effectErrorFn(`trigger: type '${type}' is not supported`);
728
+ }
729
+ return;
730
+ }
731
+ switch (type) {
732
+ case TriggerOpTypes.Add:
733
+ runEffect(key, subscriber.get(TrackOpTypes.Get));
734
+ runEffect(key, subscriber.get(TrackOpTypes.Has));
735
+ break;
603
736
  case TriggerOpTypes.Set:
604
- if (isArray$1(target)) runEffect$1(unKnownKey$1, subscriber.get(TrackOpTypes.Iterate));
605
- runEffect$1(key, subscriber.get(TrackOpTypes.Get));
606
- runEffect$1(key, subscriber.get(TrackOpTypes.Has));
737
+ runEffect(key, subscriber.get(TrackOpTypes.Get));
607
738
  break;
608
- case TriggerOpTypes.Add:
609
- case TriggerOpTypes.Clear:
610
739
  case TriggerOpTypes.Delete:
611
- runEffect$1(unKnownKey$1, subscriber.get(TrackOpTypes.Iterate));
612
- runEffect$1(key, subscriber.get(TrackOpTypes.Has));
613
- runEffect$1(key, subscriber.get(TrackOpTypes.Get));
740
+ runEffect(key, subscriber.get(TrackOpTypes.Get));
741
+ runEffect(key, subscriber.get(TrackOpTypes.Has));
742
+ break;
743
+ case TriggerOpTypes.Iterate:
744
+ runEffect(key, subscriber.get(TrackOpTypes.Iterate));
614
745
  break;
746
+ default: throw effectErrorFn(`trigger: type '${type}' is not supported`);
615
747
  }
616
748
  }
617
749
  //#endregion
618
750
  //#region src/reactive/iterable-iterator.ts
619
- function createIterableIterator$1(wrapper) {
751
+ function createIterableIterator(wrapper) {
620
752
  return {
621
753
  *entries() {
622
754
  const target = toRaw(this);
@@ -637,51 +769,54 @@ function createIterableIterator$1(wrapper) {
637
769
  }
638
770
  //#endregion
639
771
  //#region src/reactive/array-handlers.ts
640
- function applyPredicateMethod$1(self, methodName, predicate, wrapper, thisArg) {
772
+ function applyPredicateMethod(self, methodName, predicate, wrapper, thisArg) {
641
773
  const target = toRaw(self);
642
774
  track(target, TrackOpTypes.Iterate);
643
- return target[methodName]((value, index, array) => {
644
- return predicate.call(target, wrapper(value), index, array);
775
+ return target[methodName]((value, index) => {
776
+ return predicate.call(thisArg, wrapper(value), index, self);
645
777
  }, thisArg);
646
778
  }
647
- function applySearchMethod$1(self, methodName, args) {
779
+ function applySearchMethod(self, methodName, args) {
648
780
  const target = toRaw(self);
649
781
  track(target, TrackOpTypes.Iterate);
650
782
  return target[methodName](...args.map(toRaw));
651
783
  }
652
- function createArrayHandlers$1(wrapper) {
784
+ function triggerArrayByRange(target, startIndex, endIndex) {
785
+ for (; startIndex < endIndex; startIndex++) trigger(target, TriggerOpTypes.Set, startIndex + "");
786
+ }
787
+ function createArrayHandlers(wrapper) {
653
788
  return {
654
789
  concat(...items) {
655
790
  const target = toRaw(this);
656
- trigger(target, TriggerOpTypes.Add);
791
+ track(target, TrackOpTypes.Iterate);
657
792
  return target.concat(...items);
658
793
  },
659
794
  every(predicate, thisArg) {
660
- return applyPredicateMethod$1(this, "every", predicate, wrapper, thisArg);
795
+ return applyPredicateMethod(this, "every", predicate, wrapper, thisArg);
661
796
  },
662
797
  filter(predicate, thisArg) {
663
- return applyPredicateMethod$1(this, "filter", predicate, wrapper, thisArg);
798
+ return applyPredicateMethod(this, "filter", predicate, wrapper, thisArg);
664
799
  },
665
800
  find(predicate, thisArg) {
666
- return applyPredicateMethod$1(this, "find", predicate, wrapper, thisArg);
801
+ return applyPredicateMethod(this, "find", predicate, wrapper, thisArg);
667
802
  },
668
803
  findIndex(predicate, thisArg) {
669
- return applyPredicateMethod$1(this, "findIndex", predicate, wrapper, thisArg);
804
+ return applyPredicateMethod(this, "findIndex", predicate, wrapper, thisArg);
670
805
  },
671
806
  findLast(predicate, thisArg) {
672
- return applyPredicateMethod$1(this, "findLast", predicate, wrapper, thisArg);
807
+ return applyPredicateMethod(this, "findLast", predicate, wrapper, thisArg);
673
808
  },
674
809
  findLastIndex(predicate, thisArg) {
675
- return applyPredicateMethod$1(this, "findLastIndex", predicate, wrapper, thisArg);
810
+ return applyPredicateMethod(this, "findLastIndex", predicate, wrapper, thisArg);
676
811
  },
677
812
  forEach(callbackfn, thisArg) {
678
- return applyPredicateMethod$1(this, "forEach", callbackfn, wrapper, thisArg);
813
+ return applyPredicateMethod(this, "forEach", callbackfn, wrapper, thisArg);
679
814
  },
680
815
  includes(...args) {
681
- return applySearchMethod$1(this, "includes", args);
816
+ return applySearchMethod(this, "includes", args);
682
817
  },
683
818
  indexOf(...args) {
684
- return applySearchMethod$1(this, "indexOf", args);
819
+ return applySearchMethod(this, "indexOf", args);
685
820
  },
686
821
  join(separator) {
687
822
  const target = toRaw(this);
@@ -689,20 +824,30 @@ function createArrayHandlers$1(wrapper) {
689
824
  return target.join(separator);
690
825
  },
691
826
  lastIndexOf(...args) {
692
- return applySearchMethod$1(this, "lastIndexOf", args);
827
+ return applySearchMethod(this, "lastIndexOf", args);
693
828
  },
694
829
  map(callbackFn, thisArg) {
695
- return applyPredicateMethod$1(this, "map", callbackFn, wrapper, thisArg);
830
+ return applyPredicateMethod(this, "map", callbackFn, wrapper, thisArg);
696
831
  },
697
832
  pop() {
698
833
  const target = toRaw(this);
699
- trigger(target, TriggerOpTypes.Delete);
700
- return target.pop();
834
+ const oldLength = target.length;
835
+ const value = target.pop();
836
+ const newLength = target.length;
837
+ if (newLength < oldLength) {
838
+ trigger(target, TriggerOpTypes.Set, newLength + "");
839
+ trigger(target, TriggerOpTypes.Set, "length");
840
+ trigger(target, TriggerOpTypes.Iterate);
841
+ }
842
+ return value;
701
843
  },
702
844
  push(...items) {
703
845
  const target = toRaw(this);
704
- trigger(target, TriggerOpTypes.Add);
705
- return target.push(...items);
846
+ const oldLength = target.length;
847
+ const length = target.push(...items);
848
+ triggerArrayByRange(target, oldLength, length);
849
+ trigger(target, TriggerOpTypes.Iterate);
850
+ return length;
706
851
  },
707
852
  reduce(callbackFn, ...args) {
708
853
  const target = toRaw(this);
@@ -722,18 +867,27 @@ function createArrayHandlers$1(wrapper) {
722
867
  },
723
868
  shift() {
724
869
  const target = toRaw(this);
725
- trigger(target, TriggerOpTypes.Delete);
726
- return target.shift();
870
+ const oldLength = target.length;
871
+ const value = target.shift();
872
+ if (target.length < oldLength) {
873
+ triggerArrayByRange(target, 0, oldLength);
874
+ trigger(target, TriggerOpTypes.Set, "length");
875
+ trigger(target, TriggerOpTypes.Iterate);
876
+ }
877
+ return value;
727
878
  },
728
879
  some(predicate, thisArg) {
729
- return applyPredicateMethod$1(this, "some", predicate, wrapper, thisArg);
880
+ return applyPredicateMethod(this, "some", predicate, wrapper, thisArg);
730
881
  },
731
- splice(start, deleteCount) {
882
+ splice(start, ...items) {
732
883
  const target = toRaw(this);
733
- trigger(target, TriggerOpTypes.Set);
734
- trigger(target, TriggerOpTypes.Add);
735
- trigger(target, TriggerOpTypes.Delete);
736
- return target.splice(start, deleteCount).map((i) => wrapper(i));
884
+ const oldLength = target.length;
885
+ const deleted = target.splice(start, ...items).map((i) => wrapper(i));
886
+ const newLength = target.length;
887
+ triggerArrayByRange(target, start, Math.max(oldLength, newLength));
888
+ if (oldLength !== newLength) trigger(target, TriggerOpTypes.Set, "length");
889
+ trigger(target, TriggerOpTypes.Iterate);
890
+ return deleted;
737
891
  },
738
892
  toReversed() {
739
893
  const target = toRaw(this);
@@ -752,20 +906,24 @@ function createArrayHandlers$1(wrapper) {
752
906
  },
753
907
  unshift(...items) {
754
908
  const target = toRaw(this);
755
- trigger(target, TriggerOpTypes.Add);
756
- return target.unshift(...items);
909
+ const length = target.unshift(...items);
910
+ triggerArrayByRange(target, 0, length);
911
+ trigger(target, TriggerOpTypes.Set, "length");
912
+ trigger(target, TriggerOpTypes.Iterate);
913
+ return length;
757
914
  },
758
915
  [Symbol.iterator]() {
759
916
  return this.values();
760
917
  },
761
- ...createIterableIterator$1(wrapper)
918
+ ...createIterableIterator(wrapper)
762
919
  };
763
920
  }
764
921
  //#endregion
765
922
  //#region src/reactive/map-handlers.ts
766
- function createMapHandlers$1(wrapper) {
923
+ function createMapHandlers(wrapper) {
767
924
  return {
768
925
  get(key) {
926
+ key = toRaw(key);
769
927
  const target = toRaw(this);
770
928
  track(target, TrackOpTypes.Get, key);
771
929
  return wrapper(target.get(key));
@@ -775,8 +933,11 @@ function createMapHandlers$1(wrapper) {
775
933
  key = toRaw(key);
776
934
  value = toRaw(value);
777
935
  const has = target.has(key);
936
+ const oldValue = has ? target.get(key) : void 0;
937
+ if (has && Object.is(oldValue, value)) return this;
778
938
  const r = target.set(key, value);
779
939
  trigger(target, has ? TriggerOpTypes.Set : TriggerOpTypes.Add, key);
940
+ if (!has) trigger(target, TriggerOpTypes.Iterate);
780
941
  return r;
781
942
  },
782
943
  has(key) {
@@ -790,45 +951,50 @@ function createMapHandlers$1(wrapper) {
790
951
  key = toRaw(key);
791
952
  const r = target.delete(key);
792
953
  trigger(target, TriggerOpTypes.Delete, key);
954
+ if (r) trigger(target, TriggerOpTypes.Iterate);
793
955
  return r;
794
956
  },
795
957
  forEach(callbackFn, thisArg) {
796
958
  const target = toRaw(this);
797
- track(target, TrackOpTypes.Iterate, void 0);
959
+ track(target, TrackOpTypes.Iterate);
798
960
  target.forEach((v, k, m) => {
799
- callbackFn.call(this, wrapper(v), wrapper(k), m);
961
+ callbackFn.call(thisArg, wrapper(v), wrapper(k), m);
800
962
  }, thisArg);
801
963
  },
802
964
  clear() {
803
965
  const target = toRaw(this);
966
+ if (target.size === 0) return;
804
967
  target.clear();
805
- trigger(target, TriggerOpTypes.Clear, void 0);
968
+ trigger(target, TriggerOpTypes.Clear);
806
969
  },
807
970
  [Symbol.iterator]() {
808
971
  return this.entries();
809
972
  },
810
- ...createIterableIterator$1(wrapper)
973
+ ...createIterableIterator(wrapper)
811
974
  };
812
975
  }
813
976
  //#endregion
814
977
  //#region src/reactive/set-handlers.ts
815
- function createSetHandlers$1(wrapper) {
978
+ function createSetHandlers(wrapper) {
816
979
  return {
817
980
  add(value) {
818
981
  const target = toRaw(this);
819
982
  value = toRaw(value);
820
983
  if (!target.has(value)) {
821
984
  target.add(value);
822
- trigger(target, TriggerOpTypes.Add, void 0);
985
+ trigger(target, TriggerOpTypes.Add, value);
986
+ trigger(target, TriggerOpTypes.Iterate);
823
987
  }
824
988
  return this;
825
989
  },
826
990
  delete(value) {
827
991
  const target = toRaw(this);
828
992
  value = toRaw(value);
829
- const has = target.has(value);
830
993
  const b = target.delete(value);
831
- if (!has) trigger(target, TriggerOpTypes.Delete, void 0);
994
+ if (b) {
995
+ trigger(target, TriggerOpTypes.Delete, value);
996
+ trigger(target, TriggerOpTypes.Iterate);
997
+ }
832
998
  return b;
833
999
  },
834
1000
  has(key) {
@@ -839,29 +1005,31 @@ function createSetHandlers$1(wrapper) {
839
1005
  },
840
1006
  forEach(callbackFn, thisArg) {
841
1007
  const target = toRaw(this);
842
- track(target, TrackOpTypes.Iterate, void 0);
1008
+ track(target, TrackOpTypes.Iterate);
843
1009
  target.forEach((v, k, m) => {
844
- callbackFn.call(this, wrapper(v), wrapper(k), m);
1010
+ callbackFn.call(thisArg, wrapper(v), wrapper(k), m);
845
1011
  }, thisArg);
846
1012
  },
847
1013
  clear() {
848
1014
  const target = toRaw(this);
849
1015
  if (target.size !== 0) {
850
1016
  target.clear();
851
- trigger(target, TriggerOpTypes.Clear, void 0);
1017
+ trigger(target, TriggerOpTypes.Clear);
852
1018
  }
853
1019
  },
854
1020
  [Symbol.iterator]() {
855
1021
  return this.values();
856
1022
  },
857
- ...createIterableIterator$1(wrapper)
1023
+ ...createIterableIterator(wrapper)
858
1024
  };
859
1025
  }
860
1026
  //#endregion
861
1027
  //#region src/reactive/reactive.ts
862
- var reactiveErrorFn$1 = makeError("reactive");
1028
+ var reactiveErrorFn = makeError("reactive");
863
1029
  var rawToProxyCache = /* @__PURE__ */ new WeakMap();
864
1030
  var proxyToRawCache = /* @__PURE__ */ new WeakMap();
1031
+ var shallowRawToProxyCache = /* @__PURE__ */ new WeakMap();
1032
+ var shallowProxyToRawCache = /* @__PURE__ */ new WeakMap();
865
1033
  /**
866
1034
  * 将响应式对象转换为原始对象
867
1035
  * @param value 响应式对象
@@ -877,6 +1045,7 @@ var proxyToRawCache = /* @__PURE__ */ new WeakMap();
877
1045
  */
878
1046
  function toRaw(value) {
879
1047
  if (proxyToRawCache.has(value)) return proxyToRawCache.get(value);
1048
+ if (shallowProxyToRawCache.has(value)) return shallowProxyToRawCache.get(value);
880
1049
  return value;
881
1050
  }
882
1051
  /**
@@ -893,18 +1062,24 @@ function toRaw(value) {
893
1062
  * ```
894
1063
  */
895
1064
  function isReactive(value) {
896
- return proxyToRawCache.has(value);
1065
+ return proxyToRawCache.has(value) || shallowProxyToRawCache.has(value);
1066
+ }
1067
+ var internalWriteDepth = 0;
1068
+ function isInternalWriting() {
1069
+ return internalWriteDepth > 0;
897
1070
  }
898
- var fromInternalWrite$1 = false;
899
1071
  /**
900
1072
  * 内部写入,用于避免类型为只读的响应式对象写入报错
901
1073
  * @param fn 要执行的函数
902
1074
  * @internal
903
1075
  */
904
1076
  function internalWrite(fn) {
905
- fromInternalWrite$1 = true;
906
- fn();
907
- fromInternalWrite$1 = false;
1077
+ internalWriteDepth++;
1078
+ try {
1079
+ fn();
1080
+ } finally {
1081
+ internalWriteDepth--;
1082
+ }
908
1083
  }
909
1084
  var ObjectReactiveHandler = class {
910
1085
  isShallow;
@@ -914,69 +1089,114 @@ var ObjectReactiveHandler = class {
914
1089
  this.isShallow = config.shallow;
915
1090
  }
916
1091
  set(target, p, newValue, receiver) {
917
- if (this.isReadonly && !fromInternalWrite$1) throw reactiveErrorFn$1("Object is readonly!");
1092
+ if (this.isReadonly && !isInternalWriting()) throw reactiveErrorFn("Object is readonly!");
918
1093
  const rawValue = toRaw(newValue);
919
1094
  const oldValue = target[p];
920
1095
  const v = this.isShallow ? newValue : rawValue;
921
- if (oldValue === rawValue) return Reflect.set(target, p, v, receiver);
1096
+ if (Object.is(oldValue, rawValue)) return Reflect.set(target, p, v, receiver);
1097
+ const has = hasOwn(target, p);
922
1098
  const b = Reflect.set(target, p, v, receiver);
923
- fromInternalWrite$1 = false;
924
- if (hasOwn$1(target, p)) trigger(target, TriggerOpTypes.Set, p);
925
- else trigger(target, TriggerOpTypes.Add, p);
1099
+ if (has) trigger(target, TriggerOpTypes.Set, p);
1100
+ else {
1101
+ trigger(target, TriggerOpTypes.Add, p);
1102
+ trigger(target, TriggerOpTypes.Iterate);
1103
+ }
926
1104
  return b;
927
1105
  }
928
1106
  get(target, p, receiver) {
929
1107
  track(target, TrackOpTypes.Get, p);
930
1108
  const value = Reflect.get(target, p, receiver);
931
- if (this.isShallow) return value;
1109
+ if (this.isShallow || !value || typeof value !== "object") return value;
932
1110
  return reactive(value);
933
1111
  }
934
1112
  deleteProperty(target, p) {
1113
+ if (this.isReadonly && !isInternalWriting()) throw reactiveErrorFn("Object is readonly!");
1114
+ const has = hasOwn(target, p);
935
1115
  const b = Reflect.deleteProperty(target, p);
936
- trigger(target, TriggerOpTypes.Delete, p);
1116
+ if (b && has) {
1117
+ trigger(target, TriggerOpTypes.Delete, p);
1118
+ trigger(target, TriggerOpTypes.Iterate);
1119
+ }
937
1120
  return b;
938
1121
  }
939
1122
  ownKeys(target) {
940
1123
  track(target, TrackOpTypes.Iterate);
941
1124
  return Reflect.ownKeys(target);
942
1125
  }
1126
+ has(target, p) {
1127
+ track(target, TrackOpTypes.Has, p);
1128
+ return Reflect.has(target, p);
1129
+ }
943
1130
  };
944
- function noReactive$1(v) {
1131
+ function noReactive(v) {
945
1132
  return v;
946
1133
  }
947
1134
  var ArrayReactiveHandler = class extends ObjectReactiveHandler {
948
- interceptors = createArrayHandlers$1(this.isShallow ? noReactive$1 : reactive);
1135
+ interceptors = createArrayHandlers(this.isShallow ? noReactive : reactive);
949
1136
  constructor(config) {
950
1137
  super(config);
951
1138
  }
952
1139
  get(target, p, receiver) {
953
1140
  if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
1141
+ if (p === "length") {
1142
+ track(target, TrackOpTypes.Iterate);
1143
+ return Reflect.get(target, p, receiver);
1144
+ }
954
1145
  return super.get(target, p, receiver);
955
1146
  }
1147
+ set(target, p, newValue, receiver) {
1148
+ if (this.isReadonly && !isInternalWriting()) throw reactiveErrorFn("Object is readonly!");
1149
+ if (p === "length") {
1150
+ const oldLength = target.length;
1151
+ const b = super.set(target, p, newValue, receiver);
1152
+ const newLength = target.length;
1153
+ if (newLength < oldLength) triggerArrayByRange(target, newLength, oldLength);
1154
+ if (oldLength !== newLength) trigger(target, TriggerOpTypes.Iterate);
1155
+ return b;
1156
+ }
1157
+ const rawValue = toRaw(newValue);
1158
+ const oldValue = target[p];
1159
+ const v = this.isShallow ? newValue : rawValue;
1160
+ if (Object.is(oldValue, rawValue)) return Reflect.set(target, p, v, receiver);
1161
+ const oldLength = target.length;
1162
+ const b = Reflect.set(target, p, v, receiver);
1163
+ const newLength = target.length;
1164
+ trigger(target, TriggerOpTypes.Set, p);
1165
+ trigger(target, TriggerOpTypes.Iterate);
1166
+ if (newLength > oldLength) trigger(target, TriggerOpTypes.Set, "length");
1167
+ return b;
1168
+ }
1169
+ deleteProperty(target, p) {
1170
+ if (this.isReadonly && !isInternalWriting()) throw reactiveErrorFn("Object is readonly!");
1171
+ const has = hasOwn(target, p);
1172
+ const b = Reflect.deleteProperty(target, p);
1173
+ if (b && has) trigger(target, TriggerOpTypes.Delete, p);
1174
+ return b;
1175
+ }
956
1176
  };
957
1177
  var MapReactiveHandler = class extends ObjectReactiveHandler {
958
- interceptors = createMapHandlers$1(this.isShallow ? noReactive$1 : reactive);
1178
+ interceptors = createMapHandlers(this.isShallow ? noReactive : reactive);
959
1179
  constructor(config) {
960
1180
  super(config);
961
1181
  }
962
1182
  get(target, p, receiver) {
963
1183
  if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
964
1184
  if (p === "size") {
965
- track(target, TrackOpTypes.Iterate, p);
1185
+ track(target, TrackOpTypes.Iterate);
966
1186
  return Reflect.get(target, p);
967
1187
  }
968
1188
  return super.get(target, p, receiver);
969
1189
  }
970
1190
  };
971
1191
  var SetReactiveHandler = class extends ObjectReactiveHandler {
972
- interceptors = createSetHandlers$1(this.isShallow ? noReactive$1 : reactive);
1192
+ interceptors = createSetHandlers(this.isShallow ? noReactive : reactive);
973
1193
  constructor(config) {
974
1194
  super(config);
975
1195
  }
976
1196
  get(target, p, receiver) {
977
1197
  if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
978
1198
  if (p === "size") {
979
- track(target, TrackOpTypes.Iterate, p);
1199
+ track(target, TrackOpTypes.Iterate);
980
1200
  return Reflect.get(target, p);
981
1201
  }
982
1202
  return super.get(target, p, receiver);
@@ -1029,7 +1249,7 @@ function reactive(raw) {
1029
1249
  if (isReactive(raw)) return raw;
1030
1250
  let proxy = rawToProxyCache.get(raw);
1031
1251
  if (proxy) return proxy;
1032
- switch (getStringType$1(raw)) {
1252
+ switch (getStringType(raw)) {
1033
1253
  case "[object Object]":
1034
1254
  proxy = new Proxy(raw, defaultObjectReactiveHandler);
1035
1255
  break;
@@ -1052,29 +1272,10 @@ function reactive(raw) {
1052
1272
  }
1053
1273
  //#endregion
1054
1274
  //#region src/base/_utils.ts
1055
- function hasChange(newProps, oldProps) {
1056
- const newKeys = Object.keys(oldProps);
1057
- const oldKeys = Object.keys(newProps);
1058
- if (oldKeys.length !== newKeys.length) return true;
1059
- const len = oldKeys.length;
1060
- for (let i = 0; i < len; i++) {
1061
- const key = newKeys[i];
1062
- if (newProps[key] !== oldProps[key]) return true;
1063
- }
1064
- return false;
1065
- }
1066
1275
  function comparePropsWithCallbacks(oldProps, newProps, onDeleted, onAdded, onUpdated) {
1067
- const oldKeys = Object.keys(oldProps);
1068
- for (let i = 0; i < oldKeys.length; i++) {
1069
- const key = oldKeys[i];
1070
- if (!(key in newProps)) onDeleted(key, oldProps[key]);
1071
- }
1072
- const newKeys = Object.keys(newProps);
1073
- for (let i = 0; i < newKeys.length; i++) {
1074
- const key = newKeys[i];
1075
- if (!(key in oldProps)) onAdded(key, newProps[key]);
1076
- else if (oldProps[key] !== newProps[key]) onUpdated(key, newProps[key], oldProps[key]);
1077
- }
1276
+ for (const key in oldProps) if (!(key in newProps)) onDeleted(key, oldProps[key]);
1277
+ for (const key in newProps) if (!(key in oldProps)) onAdded(key, newProps[key]);
1278
+ else if (oldProps[key] !== newProps[key]) onUpdated(key, newProps[key], oldProps[key]);
1078
1279
  }
1079
1280
  function classToString(config) {
1080
1281
  if (typeof config === "string") return config;
@@ -1109,7 +1310,7 @@ var ElementAtomType = Symbol("Element");
1109
1310
  var ComponentAtomType = Symbol("Component");
1110
1311
  //#endregion
1111
1312
  //#region src/base/ref.ts
1112
- var refErrorFn$1 = makeError("Ref");
1313
+ var refErrorFn = makeError("Ref");
1113
1314
  /**
1114
1315
  * 创建一个动态 ref,当 ref 的绑定的元素或组件初始化后,会调用副作用函数,并把元素或组件的实例作为参数传入。
1115
1316
  * @param effect 用于接收实例的副作用函数,该函数还可以返回一个清理副作用的函数,当元素或组件销毁时调用
@@ -1128,6 +1329,30 @@ var refErrorFn$1 = makeError("Ref");
1128
1329
  * }
1129
1330
  * }
1130
1331
  * ```
1332
+ * @example
1333
+ * ```tsx
1334
+ * function Child() {
1335
+ * return {
1336
+ * show() {
1337
+ * console.log('show')
1338
+ * },
1339
+ * render() {
1340
+ * return <div>child</div>
1341
+ * }
1342
+ * }
1343
+ * }
1344
+ * function App() {
1345
+ * const ref = createDynamicRef<typeof Child>((child) => {
1346
+ * child.show()
1347
+ * return () => {
1348
+ * console.log('destroy')
1349
+ * }
1350
+ * })
1351
+ * return () => {
1352
+ * return <Child ref={ref}/>
1353
+ * }
1354
+ * }
1355
+ * ```
1131
1356
  */
1132
1357
  function createDynamicRef(effect) {
1133
1358
  return effect;
@@ -1148,6 +1373,28 @@ function createDynamicRef(effect) {
1148
1373
  * }
1149
1374
  * }
1150
1375
  * ```
1376
+ * @example
1377
+ * ```tsx
1378
+ * function Child() {
1379
+ * return {
1380
+ * show() {
1381
+ * console.log('show')
1382
+ * },
1383
+ * render() {
1384
+ * return <div>child</div>
1385
+ * }
1386
+ * }
1387
+ * }
1388
+ * function App() {
1389
+ * const ref = createRef<typeof Child>()
1390
+ * onMounted(() => {
1391
+ * ref.value?.show()
1392
+ * })
1393
+ * return () => {
1394
+ * return <Child ref={ref}/>
1395
+ * }
1396
+ * }
1397
+ * ```
1151
1398
  */
1152
1399
  function createRef() {
1153
1400
  return createShallowReadonlyProxy({ value: null });
@@ -1196,15 +1443,15 @@ function bindRefs(ref, value, refEffects) {
1196
1443
  ref.value = null;
1197
1444
  });
1198
1445
  });
1199
- } else throw refErrorFn$1("ref must be a function or `Ref<T>` object!");
1446
+ } else throw refErrorFn("ref must be a function or `Ref<T>` object!");
1200
1447
  }
1201
1448
  //#endregion
1202
1449
  //#region src/base/component.ts
1203
- var componentSetupStack$1 = [];
1204
- var componentErrorFn$1 = makeError("component");
1450
+ var componentSetupStack = [];
1451
+ var componentErrorFn = makeError("component");
1205
1452
  function getSetupContext(need = true) {
1206
- const current = componentSetupStack$1[componentSetupStack$1.length - 1];
1207
- if (!current && need) throw componentErrorFn$1("cannot be called outside the component!");
1453
+ const current = componentSetupStack[componentSetupStack.length - 1];
1454
+ if (!current && need) throw componentErrorFn("cannot be called outside the component!");
1208
1455
  return current;
1209
1456
  }
1210
1457
  /**
@@ -1237,7 +1484,7 @@ var Component = class {
1237
1484
  this.refEffects = /* @__PURE__ */ new Map();
1238
1485
  this.listener = new Dep(() => {
1239
1486
  this.markAsDirtied();
1240
- });
1487
+ }, "sync");
1241
1488
  }
1242
1489
  markAsDirtied() {
1243
1490
  this._dirty = true;
@@ -1250,10 +1497,10 @@ var Component = class {
1250
1497
  if (this.parentComponent) this.parentComponent.markAsChanged(this);
1251
1498
  }
1252
1499
  render(update) {
1253
- componentSetupStack$1.push(this);
1500
+ componentSetupStack.push(this);
1254
1501
  const render = this.type(this.props);
1255
1502
  const isRenderFn = typeof render === "function";
1256
- this.instance = isRenderFn ? { $render: render } : render;
1503
+ this.instance = isRenderFn ? { render } : render;
1257
1504
  onMounted(() => {
1258
1505
  applyRefs(this.props.ref, this.instance, this.refEffects);
1259
1506
  return () => {
@@ -1262,17 +1509,18 @@ var Component = class {
1262
1509
  });
1263
1510
  };
1264
1511
  });
1265
- componentSetupStack$1.pop();
1512
+ componentSetupStack.pop();
1266
1513
  pushDepContext(this.listener);
1267
- const template = this.instance.$render();
1514
+ const template = this.instance.render();
1268
1515
  popDepContext();
1269
- update(template, this.instance.$portalHost);
1516
+ update(template);
1270
1517
  this.rendered();
1271
1518
  }
1272
1519
  updateProps(newProps) {
1273
1520
  const oldProps = this.rawProps;
1274
1521
  this.rawProps = newProps;
1275
1522
  const newRefs = newProps.ref;
1523
+ updateRefs(newRefs, this.instance, this.refEffects);
1276
1524
  comparePropsWithCallbacks(oldProps, newProps, (key) => {
1277
1525
  internalWrite(() => {
1278
1526
  Reflect.deleteProperty(oldProps, key);
@@ -1286,12 +1534,11 @@ var Component = class {
1286
1534
  this.props[key] = value;
1287
1535
  });
1288
1536
  });
1289
- updateRefs(newRefs, this.instance, this.refEffects);
1290
1537
  }
1291
1538
  rerender() {
1292
1539
  this.listener.destroy();
1293
1540
  pushDepContext(this.listener);
1294
- const template = this.instance.$render();
1541
+ const template = this.instance.render();
1295
1542
  popDepContext();
1296
1543
  return template;
1297
1544
  }
@@ -1374,6 +1621,18 @@ function registryComponentDestroyCallback(fn) {
1374
1621
  }
1375
1622
  }
1376
1623
  //#endregion
1624
+ //#region src/base/_render-context.ts
1625
+ var containerStack = [];
1626
+ function pushContainer(container) {
1627
+ containerStack.push(container);
1628
+ }
1629
+ function popContainer() {
1630
+ containerStack.pop();
1631
+ }
1632
+ function getContainer() {
1633
+ return containerStack[containerStack.length - 1];
1634
+ }
1635
+ //#endregion
1377
1636
  //#region src/base/jsx-element.ts
1378
1637
  function Fragment(props) {
1379
1638
  return () => {
@@ -1411,8 +1670,8 @@ function withMark(marks, setup) {
1411
1670
  if (typeof componentRenderFn === "function") return function() {
1412
1671
  return applyMark(marks, componentRenderFn);
1413
1672
  };
1414
- const oldRender = componentRenderFn.$render;
1415
- componentRenderFn.$render = function() {
1673
+ const oldRender = componentRenderFn.render;
1674
+ componentRenderFn.render = function() {
1416
1675
  return applyMark(marks, () => {
1417
1676
  return oldRender.call(componentRenderFn);
1418
1677
  });
@@ -1451,7 +1710,7 @@ function applyMark(mark, render) {
1451
1710
  * return () => {
1452
1711
  * return (
1453
1712
  * <div>
1454
- * <Portal host={modal}>
1713
+ * <Portal container={modal}>
1455
1714
  * 这里的内容将渲染到 modal 节点
1456
1715
  * </Portal>
1457
1716
  * </div>
@@ -1461,632 +1720,76 @@ function applyMark(mark, render) {
1461
1720
  * ```
1462
1721
  */
1463
1722
  function Portal(props) {
1464
- return {
1465
- $portalHost: props.host,
1466
- $render() {
1467
- return props.children;
1468
- }
1469
- };
1723
+ return { render() {
1724
+ pushContainer(props.container);
1725
+ return props.children;
1726
+ } };
1470
1727
  }
1471
1728
  //#endregion
1472
- //#region dist/index.esm.js
1473
- function makeError$1(name) {
1474
- return function viewflyError(message) {
1475
- const error = new Error(message);
1476
- error.name = `[ViewflyError: ${name}]`;
1477
- error.stack = error.stack.replace(/\n.*?(?=\n)/, "");
1478
- return error;
1479
- };
1480
- }
1481
- var toStr = Object.prototype.toString;
1482
- function getStringType(v) {
1483
- return toStr.call(v);
1484
- }
1485
- function isArray(v) {
1486
- return Array.isArray(v);
1487
- }
1488
- var hasOwnProperty = Object.prototype.hasOwnProperty;
1489
- function hasOwn(target, key) {
1490
- return hasOwnProperty.call(target, key);
1491
- }
1492
- var Dep$1 = class {
1493
- destroyCallbacks = [];
1494
- constructor(effect) {
1495
- this.effect = effect;
1729
+ //#region src/reactive/watch-effect.ts
1730
+ /**
1731
+ * 创建一个 watchEffect,立即执行 effect 函数,当依赖的值发生变化时,会再次执行 effect 函数。
1732
+ * watchEffect 会返回一个函数,用于停止监听
1733
+ * @param effect 执行的函数
1734
+ * @returns 一个函数,用于停止监听
1735
+ */
1736
+ function watchEffect(effect) {
1737
+ const dep = new Dep(function() {
1738
+ pushDepContext(dep);
1739
+ try {
1740
+ effect();
1741
+ } finally {
1742
+ popDepContext();
1743
+ }
1744
+ }, "async");
1745
+ pushDepContext(dep);
1746
+ try {
1747
+ effect();
1748
+ } finally {
1749
+ popDepContext();
1496
1750
  }
1497
- destroy() {
1498
- this.destroyCallbacks.forEach((callback) => callback());
1499
- this.destroyCallbacks = [];
1751
+ function unWatch() {
1752
+ dep.destroy();
1500
1753
  }
1501
- };
1502
- var deps = [];
1503
- function getDepContext$1() {
1504
- return deps.at(-1);
1505
- }
1506
- function pushDepContext$1(dep) {
1507
- deps.push(dep);
1754
+ registryComponentDestroyCallback(unWatch);
1755
+ return unWatch;
1508
1756
  }
1509
- function popDepContext$1() {
1510
- deps.pop();
1757
+ //#endregion
1758
+ //#region src/reactive/watch.ts
1759
+ /**
1760
+ * 创建一个 watch,当依赖的值发生变化时,会执行 callback 函数。
1761
+ * watch 会返回一个函数,用于停止监听。
1762
+ * @param trigger 触发函数,用于获取依赖的值
1763
+ * @param callback 回调函数,当依赖的值发生变化时,会执行 callback 函数
1764
+ * @returns 一个函数,用于停止监听
1765
+ */
1766
+ function watch(trigger, callback) {
1767
+ const initValue = {};
1768
+ let oldValue = initValue;
1769
+ const unWatch = watchEffect(function() {
1770
+ if (oldValue === initValue) {
1771
+ oldValue = trigger();
1772
+ return;
1773
+ }
1774
+ const newValue = trigger();
1775
+ if (!Object.is(newValue, oldValue)) {
1776
+ callback(newValue, oldValue);
1777
+ oldValue = newValue;
1778
+ }
1779
+ });
1780
+ registryComponentDestroyCallback(unWatch);
1781
+ return unWatch;
1511
1782
  }
1512
- var subscribers = /* @__PURE__ */ new WeakMap();
1513
- function getSubscriber(target) {
1514
- let subscriber = subscribers.get(target);
1515
- if (!subscriber) {
1516
- subscriber = /* @__PURE__ */ new Map();
1517
- subscribers.set(target, subscriber);
1783
+ //#endregion
1784
+ //#region src/base/context.ts
1785
+ var injectMap = /* @__PURE__ */ new WeakMap();
1786
+ function getInjector(start) {
1787
+ while (start) {
1788
+ const injector = injectMap.get(start);
1789
+ if (injector) return injector;
1790
+ start = start.parentComponent;
1518
1791
  }
1519
- return subscriber;
1520
- }
1521
- var TrackOpTypes$1 = /* @__PURE__ */ function(TrackOpTypes) {
1522
- TrackOpTypes["Get"] = "Get";
1523
- TrackOpTypes["Has"] = "Has";
1524
- TrackOpTypes["Iterate"] = "Iterate";
1525
- return TrackOpTypes;
1526
- }({});
1527
- var TriggerOpTypes$1 = /* @__PURE__ */ function(TriggerOpTypes) {
1528
- TriggerOpTypes["Set"] = "Set";
1529
- TriggerOpTypes["Add"] = "Add";
1530
- TriggerOpTypes["Delete"] = "Delete";
1531
- TriggerOpTypes["Clear"] = "Clear";
1532
- return TriggerOpTypes;
1533
- }({});
1534
- var unKnownKey = Symbol("unKnownKey");
1535
- function track$1(target, type, key = unKnownKey) {
1536
- const dep = getDepContext$1();
1537
- if (dep) {
1538
- const subscriber = getSubscriber(target);
1539
- let record = subscriber.get(type);
1540
- if (!record) {
1541
- record = /* @__PURE__ */ new Map();
1542
- subscriber.set(type, record);
1543
- }
1544
- let effects = record.get(key);
1545
- if (!effects) {
1546
- effects = new Set([dep]);
1547
- record.set(key, effects);
1548
- dep.destroyCallbacks.push(() => {
1549
- effects.delete(dep);
1550
- });
1551
- } else if (!effects.has(dep)) {
1552
- dep.destroyCallbacks.push(() => {
1553
- effects.delete(dep);
1554
- });
1555
- effects.add(dep);
1556
- }
1557
- }
1558
- }
1559
- function runEffect(key, record) {
1560
- if (!record) return;
1561
- const effects = record.get(key);
1562
- if (effects) [...effects].forEach((i) => i.effect());
1563
- }
1564
- function trigger$1(target, type, key = unKnownKey) {
1565
- const subscriber = getSubscriber(target);
1566
- if (subscriber) switch (type) {
1567
- case TriggerOpTypes$1.Set:
1568
- if (isArray(target)) runEffect(unKnownKey, subscriber.get(TrackOpTypes$1.Iterate));
1569
- runEffect(key, subscriber.get(TrackOpTypes$1.Get));
1570
- runEffect(key, subscriber.get(TrackOpTypes$1.Has));
1571
- break;
1572
- case TriggerOpTypes$1.Add:
1573
- case TriggerOpTypes$1.Clear:
1574
- case TriggerOpTypes$1.Delete:
1575
- runEffect(unKnownKey, subscriber.get(TrackOpTypes$1.Iterate));
1576
- runEffect(key, subscriber.get(TrackOpTypes$1.Has));
1577
- runEffect(key, subscriber.get(TrackOpTypes$1.Get));
1578
- break;
1579
- }
1580
- }
1581
- function createIterableIterator(wrapper) {
1582
- return {
1583
- *entries() {
1584
- const target = toRaw$1(this);
1585
- track$1(target, TrackOpTypes$1.Iterate);
1586
- for (const [key, value] of target.entries()) yield [wrapper(key), wrapper(value)];
1587
- },
1588
- *keys() {
1589
- const target = toRaw$1(this);
1590
- track$1(target, TrackOpTypes$1.Iterate);
1591
- for (const item of target.keys()) yield wrapper(item);
1592
- },
1593
- *values() {
1594
- const target = toRaw$1(this);
1595
- track$1(target, TrackOpTypes$1.Iterate);
1596
- for (const item of target.values()) yield wrapper(item);
1597
- }
1598
- };
1599
- }
1600
- function applyPredicateMethod(self, methodName, predicate, wrapper, thisArg) {
1601
- const target = toRaw$1(self);
1602
- track$1(target, TrackOpTypes$1.Iterate);
1603
- return target[methodName]((value, index, array) => {
1604
- return predicate.call(target, wrapper(value), index, array);
1605
- }, thisArg);
1606
- }
1607
- function applySearchMethod(self, methodName, args) {
1608
- const target = toRaw$1(self);
1609
- track$1(target, TrackOpTypes$1.Iterate);
1610
- return target[methodName](...args.map(toRaw$1));
1611
- }
1612
- function createArrayHandlers(wrapper) {
1613
- return {
1614
- concat(...items) {
1615
- const target = toRaw$1(this);
1616
- trigger$1(target, TriggerOpTypes$1.Add);
1617
- return target.concat(...items);
1618
- },
1619
- every(predicate, thisArg) {
1620
- return applyPredicateMethod(this, "every", predicate, wrapper, thisArg);
1621
- },
1622
- filter(predicate, thisArg) {
1623
- return applyPredicateMethod(this, "filter", predicate, wrapper, thisArg);
1624
- },
1625
- find(predicate, thisArg) {
1626
- return applyPredicateMethod(this, "find", predicate, wrapper, thisArg);
1627
- },
1628
- findIndex(predicate, thisArg) {
1629
- return applyPredicateMethod(this, "findIndex", predicate, wrapper, thisArg);
1630
- },
1631
- findLast(predicate, thisArg) {
1632
- return applyPredicateMethod(this, "findLast", predicate, wrapper, thisArg);
1633
- },
1634
- findLastIndex(predicate, thisArg) {
1635
- return applyPredicateMethod(this, "findLastIndex", predicate, wrapper, thisArg);
1636
- },
1637
- forEach(callbackfn, thisArg) {
1638
- return applyPredicateMethod(this, "forEach", callbackfn, wrapper, thisArg);
1639
- },
1640
- includes(...args) {
1641
- return applySearchMethod(this, "includes", args);
1642
- },
1643
- indexOf(...args) {
1644
- return applySearchMethod(this, "indexOf", args);
1645
- },
1646
- join(separator) {
1647
- const target = toRaw$1(this);
1648
- track$1(target, TrackOpTypes$1.Iterate);
1649
- return target.join(separator);
1650
- },
1651
- lastIndexOf(...args) {
1652
- return applySearchMethod(this, "lastIndexOf", args);
1653
- },
1654
- map(callbackFn, thisArg) {
1655
- return applyPredicateMethod(this, "map", callbackFn, wrapper, thisArg);
1656
- },
1657
- pop() {
1658
- const target = toRaw$1(this);
1659
- trigger$1(target, TriggerOpTypes$1.Delete);
1660
- return target.pop();
1661
- },
1662
- push(...items) {
1663
- const target = toRaw$1(this);
1664
- trigger$1(target, TriggerOpTypes$1.Add);
1665
- return target.push(...items);
1666
- },
1667
- reduce(callbackFn, ...args) {
1668
- const target = toRaw$1(this);
1669
- track$1(target, TrackOpTypes$1.Iterate);
1670
- return target.reduce((p, c, i, a) => {
1671
- if (args.length > 0) return callbackFn(p, wrapper(c), i, a);
1672
- return callbackFn(wrapper(p), wrapper(c), i, a);
1673
- }, ...args);
1674
- },
1675
- reduceRight(callbackFn, ...args) {
1676
- const target = toRaw$1(this);
1677
- track$1(target, TrackOpTypes$1.Iterate);
1678
- return target.reduceRight((p, c, i, a) => {
1679
- if (args.length > 0) return callbackFn(p, wrapper(c), i, a);
1680
- return callbackFn(wrapper(p), wrapper(c), i, a);
1681
- }, ...args);
1682
- },
1683
- shift() {
1684
- const target = toRaw$1(this);
1685
- trigger$1(target, TriggerOpTypes$1.Delete);
1686
- return target.shift();
1687
- },
1688
- some(predicate, thisArg) {
1689
- return applyPredicateMethod(this, "some", predicate, wrapper, thisArg);
1690
- },
1691
- splice(start, deleteCount) {
1692
- const target = toRaw$1(this);
1693
- trigger$1(target, TriggerOpTypes$1.Set);
1694
- trigger$1(target, TriggerOpTypes$1.Add);
1695
- trigger$1(target, TriggerOpTypes$1.Delete);
1696
- return target.splice(start, deleteCount).map((i) => wrapper(i));
1697
- },
1698
- toReversed() {
1699
- const target = toRaw$1(this);
1700
- track$1(target, TrackOpTypes$1.Iterate);
1701
- return target.toReversed();
1702
- },
1703
- toSorted(compareFn) {
1704
- const target = toRaw$1(this);
1705
- track$1(target, TrackOpTypes$1.Iterate);
1706
- return target.toSorted(compareFn);
1707
- },
1708
- toSpliced(start, deleteCount, ...items) {
1709
- const target = toRaw$1(this);
1710
- track$1(target, TrackOpTypes$1.Iterate);
1711
- return target.toSpliced(start, deleteCount, ...items);
1712
- },
1713
- unshift(...items) {
1714
- const target = toRaw$1(this);
1715
- trigger$1(target, TriggerOpTypes$1.Add);
1716
- return target.unshift(...items);
1717
- },
1718
- [Symbol.iterator]() {
1719
- return this.values();
1720
- },
1721
- ...createIterableIterator(wrapper)
1722
- };
1723
- }
1724
- function createMapHandlers(wrapper) {
1725
- return {
1726
- get(key) {
1727
- const target = toRaw$1(this);
1728
- track$1(target, TrackOpTypes$1.Get, key);
1729
- return wrapper(target.get(key));
1730
- },
1731
- set(key, value) {
1732
- const target = toRaw$1(this);
1733
- key = toRaw$1(key);
1734
- value = toRaw$1(value);
1735
- const has = target.has(key);
1736
- const r = target.set(key, value);
1737
- trigger$1(target, has ? TriggerOpTypes$1.Set : TriggerOpTypes$1.Add, key);
1738
- return r;
1739
- },
1740
- has(key) {
1741
- const target = toRaw$1(this);
1742
- key = toRaw$1(key);
1743
- track$1(target, TrackOpTypes$1.Has, key);
1744
- return target.has(key);
1745
- },
1746
- delete(key) {
1747
- const target = toRaw$1(this);
1748
- key = toRaw$1(key);
1749
- const r = target.delete(key);
1750
- trigger$1(target, TriggerOpTypes$1.Delete, key);
1751
- return r;
1752
- },
1753
- forEach(callbackFn, thisArg) {
1754
- const target = toRaw$1(this);
1755
- track$1(target, TrackOpTypes$1.Iterate, void 0);
1756
- target.forEach((v, k, m) => {
1757
- callbackFn.call(this, wrapper(v), wrapper(k), m);
1758
- }, thisArg);
1759
- },
1760
- clear() {
1761
- const target = toRaw$1(this);
1762
- target.clear();
1763
- trigger$1(target, TriggerOpTypes$1.Clear, void 0);
1764
- },
1765
- [Symbol.iterator]() {
1766
- return this.entries();
1767
- },
1768
- ...createIterableIterator(wrapper)
1769
- };
1770
- }
1771
- function createSetHandlers(wrapper) {
1772
- return {
1773
- add(value) {
1774
- const target = toRaw$1(this);
1775
- value = toRaw$1(value);
1776
- if (!target.has(value)) {
1777
- target.add(value);
1778
- trigger$1(target, TriggerOpTypes$1.Add, void 0);
1779
- }
1780
- return this;
1781
- },
1782
- delete(value) {
1783
- const target = toRaw$1(this);
1784
- value = toRaw$1(value);
1785
- const has = target.has(value);
1786
- const b = target.delete(value);
1787
- if (!has) trigger$1(target, TriggerOpTypes$1.Delete, void 0);
1788
- return b;
1789
- },
1790
- has(key) {
1791
- const target = toRaw$1(this);
1792
- key = toRaw$1(key);
1793
- track$1(target, TrackOpTypes$1.Has, key);
1794
- return target.has(key);
1795
- },
1796
- forEach(callbackFn, thisArg) {
1797
- const target = toRaw$1(this);
1798
- track$1(target, TrackOpTypes$1.Iterate, void 0);
1799
- target.forEach((v, k, m) => {
1800
- callbackFn.call(this, wrapper(v), wrapper(k), m);
1801
- }, thisArg);
1802
- },
1803
- clear() {
1804
- const target = toRaw$1(this);
1805
- if (target.size !== 0) {
1806
- target.clear();
1807
- trigger$1(target, TriggerOpTypes$1.Clear, void 0);
1808
- }
1809
- },
1810
- [Symbol.iterator]() {
1811
- return this.values();
1812
- },
1813
- ...createIterableIterator(wrapper)
1814
- };
1815
- }
1816
- var reactiveErrorFn = makeError$1("reactive");
1817
- var rawToProxyCache$1 = /* @__PURE__ */ new WeakMap();
1818
- var proxyToRawCache$1 = /* @__PURE__ */ new WeakMap();
1819
- /**
1820
- * 将响应式对象转换为原始对象
1821
- * @param value 响应式对象
1822
- * @returns 原始对象
1823
- * @example
1824
- * ```tsx
1825
- * const obj = reactive({
1826
- * name: 'John',
1827
- * age: 18
1828
- * })
1829
- * console.log(toRaw(obj))
1830
- * ```
1831
- */
1832
- function toRaw$1(value) {
1833
- if (proxyToRawCache$1.has(value)) return proxyToRawCache$1.get(value);
1834
- return value;
1835
- }
1836
- /**
1837
- * 检查对象是否是响应式对象
1838
- * @param value 要检查的对象
1839
- * @returns 是否是响应式对象
1840
- * @example
1841
- * ```tsx
1842
- * const obj = reactive({
1843
- * name: 'John',
1844
- * age: 18
1845
- * })
1846
- * console.log(isReactive(obj))
1847
- * ```
1848
- */
1849
- function isReactive$1(value) {
1850
- return proxyToRawCache$1.has(value);
1851
- }
1852
- var fromInternalWrite = false;
1853
- var ObjectReactiveHandler$1 = class {
1854
- isShallow;
1855
- isReadonly;
1856
- constructor(config) {
1857
- this.isReadonly = config.readonly;
1858
- this.isShallow = config.shallow;
1859
- }
1860
- set(target, p, newValue, receiver) {
1861
- if (this.isReadonly && !fromInternalWrite) throw reactiveErrorFn("Object is readonly!");
1862
- const rawValue = toRaw$1(newValue);
1863
- const oldValue = target[p];
1864
- const v = this.isShallow ? newValue : rawValue;
1865
- if (oldValue === rawValue) return Reflect.set(target, p, v, receiver);
1866
- const b = Reflect.set(target, p, v, receiver);
1867
- fromInternalWrite = false;
1868
- if (hasOwn(target, p)) trigger$1(target, TriggerOpTypes$1.Set, p);
1869
- else trigger$1(target, TriggerOpTypes$1.Add, p);
1870
- return b;
1871
- }
1872
- get(target, p, receiver) {
1873
- track$1(target, TrackOpTypes$1.Get, p);
1874
- const value = Reflect.get(target, p, receiver);
1875
- if (this.isShallow) return value;
1876
- return reactive$1(value);
1877
- }
1878
- deleteProperty(target, p) {
1879
- const b = Reflect.deleteProperty(target, p);
1880
- trigger$1(target, TriggerOpTypes$1.Delete, p);
1881
- return b;
1882
- }
1883
- ownKeys(target) {
1884
- track$1(target, TrackOpTypes$1.Iterate);
1885
- return Reflect.ownKeys(target);
1886
- }
1887
- };
1888
- function noReactive(v) {
1889
- return v;
1890
- }
1891
- var ArrayReactiveHandler$1 = class extends ObjectReactiveHandler$1 {
1892
- interceptors = createArrayHandlers(this.isShallow ? noReactive : reactive$1);
1893
- constructor(config) {
1894
- super(config);
1895
- }
1896
- get(target, p, receiver) {
1897
- if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
1898
- return super.get(target, p, receiver);
1899
- }
1900
- };
1901
- var MapReactiveHandler$1 = class extends ObjectReactiveHandler$1 {
1902
- interceptors = createMapHandlers(this.isShallow ? noReactive : reactive$1);
1903
- constructor(config) {
1904
- super(config);
1905
- }
1906
- get(target, p, receiver) {
1907
- if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
1908
- if (p === "size") {
1909
- track$1(target, TrackOpTypes$1.Iterate, p);
1910
- return Reflect.get(target, p);
1911
- }
1912
- return super.get(target, p, receiver);
1913
- }
1914
- };
1915
- var SetReactiveHandler$1 = class extends ObjectReactiveHandler$1 {
1916
- interceptors = createSetHandlers(this.isShallow ? noReactive : reactive$1);
1917
- constructor(config) {
1918
- super(config);
1919
- }
1920
- get(target, p, receiver) {
1921
- if (Reflect.has(this.interceptors, p) && p in target) return this.interceptors[p];
1922
- if (p === "size") {
1923
- track$1(target, TrackOpTypes$1.Iterate, p);
1924
- return Reflect.get(target, p);
1925
- }
1926
- return super.get(target, p, receiver);
1927
- }
1928
- };
1929
- var defaultObjectReactiveHandler$1 = new ObjectReactiveHandler$1({
1930
- readonly: false,
1931
- shallow: false
1932
- });
1933
- var defaultArrayReactiveHandler$1 = new ArrayReactiveHandler$1({
1934
- readonly: false,
1935
- shallow: false
1936
- });
1937
- var defaultMapReactiveHandler$1 = new MapReactiveHandler$1({
1938
- readonly: false,
1939
- shallow: false
1940
- });
1941
- var defaultSetReactiveHandler$1 = new SetReactiveHandler$1({
1942
- readonly: false,
1943
- shallow: false
1944
- });
1945
- new ObjectReactiveHandler$1({
1946
- shallow: true,
1947
- readonly: true
1948
- });
1949
- /**
1950
- * 创建一个响应式对象
1951
- * @param raw 原始对象
1952
- * @returns 响应式对象
1953
- * @example
1954
- * ```tsx
1955
- * const obj = reactive({
1956
- * name: 'John',
1957
- * age: 18,
1958
- * children: [
1959
- * {
1960
- * name: 'Jane',
1961
- * age: 16
1962
- * }
1963
- * ]
1964
- * })
1965
- * console.log(obj.name)
1966
- * console.log(obj.children[0].name)
1967
- * ```
1968
- */
1969
- function reactive$1(raw) {
1970
- if (isReactive$1(raw)) return raw;
1971
- let proxy = rawToProxyCache$1.get(raw);
1972
- if (proxy) return proxy;
1973
- switch (getStringType(raw)) {
1974
- case "[object Object]":
1975
- proxy = new Proxy(raw, defaultObjectReactiveHandler$1);
1976
- break;
1977
- case "[object Array]":
1978
- proxy = new Proxy(raw, defaultArrayReactiveHandler$1);
1979
- break;
1980
- case "[object Set]":
1981
- case "[object WeakSet]":
1982
- proxy = new Proxy(raw, defaultSetReactiveHandler$1);
1983
- break;
1984
- case "[object Map]":
1985
- case "[object WeakMap]":
1986
- proxy = new Proxy(raw, defaultMapReactiveHandler$1);
1987
- break;
1988
- default: return raw;
1989
- }
1990
- rawToProxyCache$1.set(raw, proxy);
1991
- proxyToRawCache$1.set(proxy, raw);
1992
- return proxy;
1993
- }
1994
- makeError$1("Ref");
1995
- var componentSetupStack = [];
1996
- var componentErrorFn = makeError$1("component");
1997
- function getSetupContext$1(need = true) {
1998
- const current = componentSetupStack[componentSetupStack.length - 1];
1999
- if (!current && need) throw componentErrorFn("cannot be called outside the component!");
2000
- return current;
2001
- }
2002
- /**
2003
- * 注册组件销毁回调函数
2004
- * @param fn 要注册的回调函数
2005
- * @internal
2006
- */
2007
- function registryComponentDestroyCallback$1(fn) {
2008
- const component = getSetupContext$1(false);
2009
- if (component) {
2010
- if (!component.unmountedCallbacks) component.unmountedCallbacks = [];
2011
- component.unmountedCallbacks.push(fn);
2012
- }
2013
- }
2014
- makeError$1("Viewfly");
2015
- new ObjectReactiveHandler$1({
2016
- readonly: false,
2017
- shallow: true
2018
- });
2019
- new ArrayReactiveHandler$1({
2020
- readonly: false,
2021
- shallow: true
2022
- });
2023
- new MapReactiveHandler$1({
2024
- readonly: false,
2025
- shallow: true
2026
- });
2027
- new SetReactiveHandler$1({
2028
- readonly: false,
2029
- shallow: true
2030
- });
2031
- //#endregion
2032
- //#region src/reactive/watch-effect.ts
2033
- /**
2034
- * 创建一个 watchEffect,立即执行 effect 函数,当依赖的值发生变化时,会再次执行 effect 函数。
2035
- * watchEffect 会返回一个函数,用于停止监听
2036
- * @param effect 执行的函数
2037
- * @returns 一个函数,用于停止监听
2038
- */
2039
- function watchEffect(effect) {
2040
- const dep = new Dep$1(function() {
2041
- pushDepContext$1(dep);
2042
- effect();
2043
- popDepContext$1();
2044
- });
2045
- pushDepContext$1(dep);
2046
- effect();
2047
- popDepContext$1();
2048
- function unWatch() {
2049
- dep.destroy();
2050
- }
2051
- registryComponentDestroyCallback$1(unWatch);
2052
- return unWatch;
2053
- }
2054
- //#endregion
2055
- //#region src/reactive/watch.ts
2056
- /**
2057
- * 创建一个 watch,当依赖的值发生变化时,会执行 callback 函数。
2058
- * watch 会返回一个函数,用于停止监听。
2059
- * @param trigger 触发函数,用于获取依赖的值
2060
- * @param callback 回调函数,当依赖的值发生变化时,会执行 callback 函数
2061
- * @returns 一个函数,用于停止监听
2062
- */
2063
- function watch(trigger, callback) {
2064
- const initValue = {};
2065
- let oldValue = initValue;
2066
- const unWatch = watchEffect(function() {
2067
- if (oldValue === initValue) {
2068
- oldValue = trigger();
2069
- return;
2070
- }
2071
- const newValue = trigger();
2072
- if (newValue !== oldValue) {
2073
- callback(newValue, oldValue);
2074
- oldValue = newValue;
2075
- }
2076
- });
2077
- registryComponentDestroyCallback(unWatch);
2078
- return unWatch;
2079
- }
2080
- //#endregion
2081
- //#region src/base/context.ts
2082
- var injectMap = /* @__PURE__ */ new WeakMap();
2083
- function getInjector(start) {
2084
- while (start) {
2085
- const injector = injectMap.get(start);
2086
- if (injector) return injector;
2087
- start = start.parentComponent;
2088
- }
2089
- return new NullInjector();
1792
+ return new NullInjector();
2090
1793
  }
2091
1794
  /**
2092
1795
  * 创建一个上下文,用于在组件之间共享数据
@@ -2234,7 +1937,7 @@ var listenerReg = /^on[A-Z]/;
2234
1937
  var nativeNodeRefRecord = /* @__PURE__ */ new WeakMap();
2235
1938
  function createRenderer(component, nativeRenderer, namespace) {
2236
1939
  let isInit = true;
2237
- return function render(host) {
1940
+ return function render(container) {
2238
1941
  if (isInit) {
2239
1942
  isInit = false;
2240
1943
  componentRender(nativeRenderer, component, {
@@ -2248,8 +1951,8 @@ function createRenderer(component, nativeRenderer, namespace) {
2248
1951
  namespace
2249
1952
  }, {
2250
1953
  isParent: true,
2251
- host,
2252
- rootHost: host
1954
+ anchorNode: container,
1955
+ rootContainer: container
2253
1956
  });
2254
1957
  } else deepUpdateByComponentDirtyTree(nativeRenderer, component, false);
2255
1958
  };
@@ -2271,23 +1974,40 @@ function buildElementChildren(atom, nativeRenderer, parentComponent, context) {
2271
1974
  }
2272
1975
  }
2273
1976
  function patchComponent(nativeRenderer, component, oldChildAtom, newAtom, context, needMove) {
2274
- newAtom.child = createChildChain(component.rerender(), nativeRenderer, newAtom.namespace);
1977
+ const oldContainer = component.viewMetadata.anchorNode;
1978
+ const expectContainer = component.viewMetadata.expectContainer;
1979
+ const newTemplate = component.rerender();
1980
+ const portalContainer = getContainer();
1981
+ popContainer();
1982
+ if (portalContainer && portalContainer !== expectContainer) context = {
1983
+ isParent: true,
1984
+ anchorNode: portalContainer,
1985
+ rootContainer: portalContainer
1986
+ };
1987
+ component.viewMetadata = {
1988
+ atom: newAtom,
1989
+ expectContainer,
1990
+ ...context
1991
+ };
1992
+ if (oldContainer !== context.anchorNode) needMove = true;
1993
+ newAtom.child = createChildChain(newTemplate, nativeRenderer, newAtom.namespace);
2275
1994
  diff(nativeRenderer, component, newAtom.child, oldChildAtom, context, needMove);
1995
+ return context;
2276
1996
  }
2277
1997
  function deepUpdateByComponentDirtyTree(nativeRenderer, component, needMove) {
2278
1998
  if (component.dirty) {
2279
- const { atom, host, isParent, rootHost } = component.viewMetadata;
1999
+ const { atom, anchorNode, isParent, rootContainer } = component.viewMetadata;
2280
2000
  const context = {
2281
- host,
2001
+ anchorNode,
2282
2002
  isParent,
2283
- rootHost
2003
+ rootContainer
2284
2004
  };
2285
2005
  const diffAtom = atom.child;
2286
2006
  patchComponent(nativeRenderer, component, diffAtom, atom, context, needMove);
2287
2007
  const next = atom.sibling;
2288
2008
  if (next && next.jsxNode instanceof Component) {
2289
2009
  const view = next.jsxNode.viewMetadata;
2290
- view.host = context.host;
2010
+ view.anchorNode = context.anchorNode;
2291
2011
  view.isParent = context.isParent;
2292
2012
  }
2293
2013
  component.rendered();
@@ -2298,85 +2018,24 @@ function deepUpdateByComponentDirtyTree(nativeRenderer, component, needMove) {
2298
2018
  component.rendered();
2299
2019
  }
2300
2020
  }
2301
- function createOldAtomMatcher(oldAtoms) {
2302
- const typeMap = /* @__PURE__ */ new Map();
2303
- const cursorMap = /* @__PURE__ */ new WeakMap();
2304
- for (let i = 0; i < oldAtoms.length; i++) {
2305
- const atom = oldAtoms[i];
2306
- let nodeTypeMap = typeMap.get(atom.type);
2307
- if (!nodeTypeMap) {
2308
- nodeTypeMap = /* @__PURE__ */ new Map();
2309
- typeMap.set(atom.type, nodeTypeMap);
2310
- }
2311
- let keyMap = nodeTypeMap.get(atom.nodeType);
2312
- if (!keyMap) {
2313
- keyMap = /* @__PURE__ */ new Map();
2314
- nodeTypeMap.set(atom.nodeType, keyMap);
2315
- }
2316
- const key = atom.key;
2317
- const indices = keyMap.get(key);
2318
- if (indices) indices.push(i);
2319
- else keyMap.set(key, [i]);
2320
- }
2321
- const take = (atom, matched) => {
2322
- const nodeTypeMap = typeMap.get(atom.type);
2323
- if (!nodeTypeMap) return -1;
2324
- const keyMap = nodeTypeMap.get(atom.nodeType);
2325
- if (!keyMap) return -1;
2326
- const indices = keyMap.get(atom.key);
2327
- if (!indices || !indices.length) return -1;
2328
- let cursor = cursorMap.get(indices) ?? 0;
2329
- while (cursor < indices.length) {
2330
- const index = indices[cursor];
2331
- cursor++;
2332
- if (!matched[index]) {
2333
- cursorMap.set(indices, cursor);
2334
- return index;
2335
- }
2336
- }
2337
- cursorMap.set(indices, cursor);
2338
- return -1;
2339
- };
2340
- return { take };
2341
- }
2342
2021
  function diff(nativeRenderer, parentComponent, newAtom, oldAtom, context, needMove) {
2343
2022
  const commits = [];
2344
- const oldAtoms = [];
2023
+ while (newAtom) {
2024
+ oldAtom = createChanges(newAtom, oldAtom, commits);
2025
+ newAtom = newAtom.sibling;
2026
+ }
2345
2027
  let dirtyDiffAtom = oldAtom;
2346
2028
  while (dirtyDiffAtom) {
2347
- oldAtoms.push(dirtyDiffAtom);
2029
+ cleanView(nativeRenderer, dirtyDiffAtom, true);
2348
2030
  dirtyDiffAtom = dirtyDiffAtom.sibling;
2349
2031
  }
2350
- const matched = new Array(oldAtoms.length).fill(false);
2351
- const matcher = createOldAtomMatcher(oldAtoms);
2352
- const pendingDeleteIndices = [];
2353
- let cursor = newAtom;
2354
- while (cursor) {
2355
- const matchedIndex = matcher.take(cursor, matched);
2356
- if (matchedIndex >= 0) {
2357
- matched[matchedIndex] = true;
2358
- commits.push({
2359
- dirtyAtom: oldAtoms[matchedIndex],
2360
- newAtom: cursor
2361
- });
2362
- } else commits.push({
2363
- dirtyAtom: null,
2364
- newAtom: cursor
2365
- });
2366
- cursor = cursor.sibling;
2367
- }
2368
- for (let i = 0; i < oldAtoms.length; i++) if (!matched[i]) {
2369
- pendingDeleteIndices.push(i);
2370
- cleanView(nativeRenderer, oldAtoms[i], true);
2371
- }
2372
2032
  let offset = 0;
2373
- let pendingDeleteCursor = 0;
2374
2033
  const len = commits.length;
2375
2034
  for (let i = 0; i < len; i++) {
2376
- while (pendingDeleteCursor < pendingDeleteIndices.length) {
2377
- if (oldAtoms[pendingDeleteIndices[pendingDeleteCursor]].index <= i) {
2035
+ while (oldAtom) {
2036
+ if (oldAtom.index <= i) {
2378
2037
  offset--;
2379
- pendingDeleteCursor++;
2038
+ oldAtom = oldAtom.sibling;
2380
2039
  continue;
2381
2040
  }
2382
2041
  break;
@@ -2399,51 +2058,68 @@ function diff(nativeRenderer, parentComponent, newAtom, oldAtom, context, needMo
2399
2058
  }
2400
2059
  }
2401
2060
  }
2061
+ function createChanges(newAtom, oldAtom, commits) {
2062
+ const startDiffAtom = oldAtom;
2063
+ let prev = null;
2064
+ while (oldAtom) {
2065
+ if (oldAtom.type === newAtom.type && oldAtom.nodeType === newAtom.nodeType && oldAtom.key === newAtom.key) {
2066
+ commits.push({
2067
+ dirtyAtom: oldAtom,
2068
+ newAtom
2069
+ });
2070
+ const next = oldAtom.sibling;
2071
+ if (!prev) return next;
2072
+ prev.sibling = next;
2073
+ return startDiffAtom;
2074
+ }
2075
+ prev = oldAtom;
2076
+ oldAtom = oldAtom.sibling;
2077
+ }
2078
+ commits.push({
2079
+ dirtyAtom: null,
2080
+ newAtom
2081
+ });
2082
+ return startDiffAtom;
2083
+ }
2402
2084
  function updateText(nativeRenderer, context, offset, needMove, newAtom, oldAtom) {
2403
2085
  const nativeNode = oldAtom.nativeNode;
2404
2086
  newAtom.nativeNode = nativeNode;
2405
2087
  if (needMove || newAtom.index - offset !== oldAtom.index) insertNode(nativeRenderer, newAtom, context);
2406
- context.host = nativeNode;
2088
+ context.anchorNode = nativeNode;
2407
2089
  context.isParent = false;
2408
2090
  }
2409
2091
  function updateElement(nativeRenderer, context, parentComponent, offset, needMove, newAtom, oldAtom) {
2410
2092
  const nativeNode = oldAtom.nativeNode;
2411
2093
  newAtom.nativeNode = nativeNode;
2412
2094
  if (needMove || newAtom.index - offset !== oldAtom.index) insertNode(nativeRenderer, newAtom, context);
2413
- context.host = nativeNode;
2095
+ context.anchorNode = nativeNode;
2414
2096
  context.isParent = false;
2415
2097
  updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComponent, {
2416
- host: nativeNode,
2098
+ anchorNode: nativeNode,
2417
2099
  isParent: true,
2418
- rootHost: context.rootHost
2100
+ rootContainer: context.rootContainer
2419
2101
  });
2420
2102
  }
2421
2103
  function updateComponent(nativeRenderer, context, offset, needMove, newAtom, oldAtom) {
2422
2104
  const component = oldAtom.jsxNode;
2423
- const portalHost = component.instance.$portalHost;
2424
- context = portalHost ? {
2425
- isParent: true,
2426
- host: portalHost,
2427
- rootHost: portalHost
2428
- } : context;
2429
- component.viewMetadata = {
2430
- atom: newAtom,
2431
- ...context
2432
- };
2433
2105
  const newProps = newAtom.jsxNode.props;
2434
2106
  newAtom.jsxNode = component;
2435
2107
  needMove = needMove || newAtom.index - offset !== oldAtom.index;
2436
- const propsIsChanged = hasChange(newProps, component.props);
2437
- if (propsIsChanged) component.updateProps(newProps);
2438
- if (propsIsChanged || component.dirty) {
2439
- patchComponent(nativeRenderer, component, oldAtom.child, newAtom, context, needMove);
2108
+ component.updateProps(newProps);
2109
+ if (component.dirty) {
2110
+ const updatedContext = patchComponent(nativeRenderer, component, oldAtom.child, newAtom, context, needMove);
2440
2111
  const next = oldAtom.sibling;
2441
2112
  if (next && next.jsxNode instanceof Component) {
2442
2113
  const view = next.jsxNode.viewMetadata;
2443
- view.host = context.host;
2444
- view.isParent = context.isParent;
2114
+ view.anchorNode = updatedContext.anchorNode;
2115
+ view.isParent = updatedContext.isParent;
2445
2116
  }
2446
2117
  } else {
2118
+ component.viewMetadata = {
2119
+ atom: newAtom,
2120
+ expectContainer: component.viewMetadata.expectContainer,
2121
+ ...context
2122
+ };
2447
2123
  newAtom.child = oldAtom.child;
2448
2124
  reuseComponentView(nativeRenderer, newAtom.child, context, needMove, !component.changedSubComponents.size);
2449
2125
  }
@@ -2459,7 +2135,7 @@ function reuseComponentView(nativeRenderer, child, context, moveView, skipSubCom
2459
2135
  if (moveView) insertNode(nativeRenderer, atom, context);
2460
2136
  if (!skipSubComponentDiff) reuseElementChildrenView(nativeRenderer, atom, context);
2461
2137
  context.isParent = false;
2462
- context.host = atom.nativeNode;
2138
+ context.anchorNode = atom.nativeNode;
2463
2139
  }
2464
2140
  };
2465
2141
  while (child) {
@@ -2486,7 +2162,7 @@ function cleanElementChildren(atom, nativeRenderer) {
2486
2162
  function cleanView(nativeRenderer, atom, needClean) {
2487
2163
  if (atom.type === ComponentAtomType) {
2488
2164
  const jsxNode = atom.jsxNode;
2489
- if (jsxNode.instance.$portalHost) needClean = true;
2165
+ if (jsxNode.viewMetadata.anchorNode !== jsxNode.viewMetadata.expectContainer) needClean = true;
2490
2166
  cleanChildren(atom, nativeRenderer, needClean);
2491
2167
  jsxNode.destroy();
2492
2168
  return;
@@ -2514,15 +2190,19 @@ function cleanChildren(atom, nativeRenderer, needClean) {
2514
2190
  }
2515
2191
  }
2516
2192
  function componentRender(nativeRenderer, component, from, context) {
2517
- component.render((template, portalHost) => {
2193
+ component.render((template) => {
2194
+ const portalContainer = getContainer();
2195
+ popContainer();
2518
2196
  from.child = createChildChain(template, nativeRenderer, from.namespace);
2519
- context = portalHost ? {
2197
+ const expectContainer = context.anchorNode;
2198
+ context = portalContainer && portalContainer !== context.anchorNode ? {
2520
2199
  isParent: true,
2521
- host: portalHost,
2522
- rootHost: portalHost
2200
+ anchorNode: portalContainer,
2201
+ rootContainer: portalContainer
2523
2202
  } : context;
2524
2203
  component.viewMetadata = {
2525
2204
  atom: from,
2205
+ expectContainer,
2526
2206
  ...context
2527
2207
  };
2528
2208
  let child = from.child;
@@ -2579,9 +2259,9 @@ function createChildChain(template, nativeRenderer, namespace) {
2579
2259
  return beforeAtom.sibling;
2580
2260
  }
2581
2261
  function insertNode(nativeRenderer, atom, context) {
2582
- if (context.isParent) if (context.host === context.rootHost) nativeRenderer.appendChild(context.host, atom.nativeNode, atom.namespace);
2583
- else nativeRenderer.prependChild(context.host, atom.nativeNode, atom.namespace);
2584
- else nativeRenderer.insertAfter(atom.nativeNode, context.host, atom.namespace);
2262
+ if (context.isParent) if (context.anchorNode === context.rootContainer) nativeRenderer.appendChild(context.anchorNode, atom.nativeNode, atom.namespace);
2263
+ else nativeRenderer.prependChild(context.anchorNode, atom.nativeNode, atom.namespace);
2264
+ else nativeRenderer.insertAfter(atom.nativeNode, context.anchorNode, atom.namespace);
2585
2265
  }
2586
2266
  function createElementChildren(type, children, nativeRenderer, namespace) {
2587
2267
  return createChildChain(children, nativeRenderer, nativeRenderer.getNameSpace(type, namespace));
@@ -2591,10 +2271,7 @@ function createElement(nativeRenderer, atom, parentComponent, context) {
2591
2271
  const nativeNode = nativeRenderer.createElement(jsxNode.type, namespace);
2592
2272
  const props = jsxNode.props;
2593
2273
  let bindingRefs;
2594
- const propKeys = Object.keys(props);
2595
- const propKeyLen = propKeys.length;
2596
- for (let i = 0; i < propKeyLen; i++) {
2597
- const key = propKeys[i];
2274
+ for (const key in props) {
2598
2275
  if (key === "children") {
2599
2276
  atom.child = createElementChildren(jsxNode.type, props.children, nativeRenderer, namespace);
2600
2277
  continue;
@@ -2624,10 +2301,10 @@ function createElement(nativeRenderer, atom, parentComponent, context) {
2624
2301
  insertNode(nativeRenderer, atom, context);
2625
2302
  buildElementChildren(atom, nativeRenderer, parentComponent, {
2626
2303
  isParent: true,
2627
- host: nativeNode,
2628
- rootHost: context.rootHost
2304
+ anchorNode: nativeNode,
2305
+ rootContainer: context.rootContainer
2629
2306
  });
2630
- context.host = nativeNode;
2307
+ context.anchorNode = nativeNode;
2631
2308
  context.isParent = false;
2632
2309
  if (bindingRefs) {
2633
2310
  const refEffects = /* @__PURE__ */ new Map();
@@ -2639,7 +2316,7 @@ function createTextNode(nativeRenderer, atom, context) {
2639
2316
  const nativeNode = nativeRenderer.createTextNode(atom.jsxNode, atom.namespace);
2640
2317
  atom.nativeNode = nativeNode;
2641
2318
  insertNode(nativeRenderer, atom, context);
2642
- context.host = nativeNode;
2319
+ context.anchorNode = nativeNode;
2643
2320
  context.isParent = false;
2644
2321
  }
2645
2322
  function updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComponent, context) {
@@ -2648,6 +2325,11 @@ function updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComp
2648
2325
  const nativeNode = newAtom.nativeNode;
2649
2326
  const oldVNode = oldAtom.jsxNode;
2650
2327
  if (newVNode === oldVNode) {
2328
+ const refEffects = nativeNodeRefRecord.get(oldAtom);
2329
+ if (refEffects) {
2330
+ nativeNodeRefRecord.delete(oldAtom);
2331
+ nativeNodeRefRecord.set(newAtom, refEffects);
2332
+ }
2651
2333
  newAtom.child = oldAtom.child;
2652
2334
  reuseElementChildrenView(nativeRenderer, newAtom, context);
2653
2335
  return;
@@ -2655,17 +2337,6 @@ function updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComp
2655
2337
  let unBindRefs;
2656
2338
  let bindRefs;
2657
2339
  let updatedChildren = false;
2658
- const styleCache = /* @__PURE__ */ new WeakMap();
2659
- const toStyleObject = (style) => {
2660
- if (style && typeof style === "object") {
2661
- const cached = styleCache.get(style);
2662
- if (cached) return cached;
2663
- const normalized = styleToObject(style);
2664
- styleCache.set(style, normalized);
2665
- return normalized;
2666
- }
2667
- return styleToObject(style);
2668
- };
2669
2340
  comparePropsWithCallbacks(oldVNode.props, newVNode.props, (key, oldValue) => {
2670
2341
  if (key === "children") {
2671
2342
  updatedChildren = true;
@@ -2677,12 +2348,7 @@ function updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComp
2677
2348
  return;
2678
2349
  }
2679
2350
  if (key === "style") {
2680
- const oldStyle = toStyleObject(oldValue);
2681
- const styleNames = Object.keys(oldStyle);
2682
- for (let i = 0; i < styleNames.length; i++) {
2683
- const styleName = styleNames[i];
2684
- nativeRenderer.removeStyle(nativeNode, styleName, isSvg);
2685
- }
2351
+ for (const styleName in styleToObject(oldValue)) nativeRenderer.removeStyle(nativeNode, styleName, isSvg);
2686
2352
  return;
2687
2353
  }
2688
2354
  if (listenerReg.test(key)) {
@@ -2706,12 +2372,8 @@ function updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComp
2706
2372
  return;
2707
2373
  }
2708
2374
  if (key === "style") {
2709
- const styleObj = toStyleObject(value);
2710
- const styleNames = Object.keys(styleObj);
2711
- for (let i = 0; i < styleNames.length; i++) {
2712
- const styleName = styleNames[i];
2713
- nativeRenderer.setStyle(nativeNode, styleName, styleObj[styleName], isSvg);
2714
- }
2375
+ const styleObj = styleToObject(value);
2376
+ for (const styleName in styleObj) nativeRenderer.setStyle(nativeNode, styleName, styleObj[styleName], isSvg);
2715
2377
  return;
2716
2378
  }
2717
2379
  if (listenerReg.test(key)) {
@@ -2739,7 +2401,7 @@ function updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComp
2739
2401
  return;
2740
2402
  }
2741
2403
  if (key === "style") {
2742
- comparePropsWithCallbacks(toStyleObject(oldValue), toStyleObject(newValue), (styleName) => {
2404
+ comparePropsWithCallbacks(styleToObject(oldValue), styleToObject(newValue), (styleName) => {
2743
2405
  nativeRenderer.removeStyle(nativeNode, styleName, isSvg);
2744
2406
  }, (styleName, styleValue) => {
2745
2407
  nativeRenderer.setStyle(nativeNode, styleName, styleValue, isSvg);
@@ -2798,7 +2460,7 @@ function viewfly(config) {
2798
2460
  const { context, nativeRenderer, autoUpdate, root } = Object.assign({ autoUpdate: true }, config);
2799
2461
  const modules = [];
2800
2462
  let destroyed = false;
2801
- let appHost = null;
2463
+ let appContainer = null;
2802
2464
  const rootProviders = [];
2803
2465
  const rootComponent = new RootComponent(() => {
2804
2466
  const rootContext = createContext(rootProviders, null, context);
@@ -2808,7 +2470,7 @@ function viewfly(config) {
2808
2470
  }, function() {
2809
2471
  if (destroyed || !autoUpdate) return;
2810
2472
  nextTick(() => {
2811
- render(appHost);
2473
+ render(appContainer);
2812
2474
  });
2813
2475
  });
2814
2476
  const render = createRenderer(rootComponent, nativeRenderer, config.elementNamespace);
@@ -2832,18 +2494,22 @@ function viewfly(config) {
2832
2494
  else modules.push(module);
2833
2495
  return app;
2834
2496
  },
2835
- mount(host) {
2497
+ mount(container) {
2836
2498
  if (isStarted) throw viewflyErrorFn("application has already started.");
2837
2499
  for (const module of modules) module.setup?.(app);
2838
2500
  isStarted = true;
2839
- appHost = host;
2840
- render(host);
2501
+ appContainer = container;
2502
+ render(container);
2841
2503
  for (const module of modules) module.onAfterStartup?.(app);
2842
2504
  if (!autoUpdate) return app;
2843
2505
  return app;
2844
2506
  },
2845
2507
  render() {
2846
- if (appHost) render(appHost);
2508
+ if (appContainer) {
2509
+ flushReactiveEffectsSync();
2510
+ render(appContainer);
2511
+ flushReactiveEffectsSync();
2512
+ }
2847
2513
  return app;
2848
2514
  },
2849
2515
  destroy() {
@@ -2864,13 +2530,31 @@ function viewfly(config) {
2864
2530
  * @returns 一个对象,对象的 value 属性是计算的值
2865
2531
  */
2866
2532
  function computed(getter) {
2867
- const proxy = new Proxy({ value: null }, readonlyProxyHandler);
2868
- watchEffect(() => {
2869
- internalWrite(() => {
2870
- proxy.value = getter();
2871
- });
2533
+ let cacheValue;
2534
+ let dirty = true;
2535
+ const target = { get value() {
2536
+ if (dirty) {
2537
+ dep.destroy();
2538
+ pushDepContext(dep);
2539
+ try {
2540
+ cacheValue = getter();
2541
+ dirty = false;
2542
+ } finally {
2543
+ popDepContext();
2544
+ }
2545
+ }
2546
+ return cacheValue;
2547
+ } };
2548
+ const dep = new Dep(() => {
2549
+ if (!dirty) {
2550
+ dirty = true;
2551
+ trigger(target, TriggerOpTypes.Set, "value");
2552
+ }
2553
+ }, "sync");
2554
+ registryComponentDestroyCallback(() => {
2555
+ dep.destroy();
2872
2556
  });
2873
- return proxy;
2557
+ return new Proxy(target, readonlyProxyHandler);
2874
2558
  }
2875
2559
  //#endregion
2876
2560
  //#region src/reactive/shallow-reactive.ts
@@ -2892,9 +2576,9 @@ var defaultShallowSetReactiveHandler = new SetReactiveHandler({
2892
2576
  });
2893
2577
  function shallowReactive(raw) {
2894
2578
  if (isReactive(raw)) return raw;
2895
- let proxy = rawToProxyCache.get(raw);
2579
+ let proxy = shallowRawToProxyCache.get(raw);
2896
2580
  if (proxy) return proxy;
2897
- switch (getStringType$1(raw)) {
2581
+ switch (getStringType(raw)) {
2898
2582
  case "[object Object]":
2899
2583
  proxy = new Proxy(raw, defaultShallowObjectReactiveHandler);
2900
2584
  break;
@@ -2911,8 +2595,8 @@ function shallowReactive(raw) {
2911
2595
  break;
2912
2596
  default: return raw;
2913
2597
  }
2914
- rawToProxyCache.set(raw, proxy);
2915
- proxyToRawCache.set(proxy, raw);
2598
+ shallowRawToProxyCache.set(raw, proxy);
2599
+ shallowProxyToRawCache.set(proxy, raw);
2916
2600
  return proxy;
2917
2601
  }
2918
2602
  //#endregion
@@ -2998,6 +2682,7 @@ exports.defaultShallowArrayReactiveHandler = defaultShallowArrayReactiveHandler;
2998
2682
  exports.defaultShallowMapReactiveHandler = defaultShallowMapReactiveHandler;
2999
2683
  exports.defaultShallowObjectReactiveHandler = defaultShallowObjectReactiveHandler;
3000
2684
  exports.defaultShallowSetReactiveHandler = defaultShallowSetReactiveHandler;
2685
+ exports.flushReactiveEffectsSync = flushReactiveEffectsSync;
3001
2686
  exports.forwardRef = forwardRef;
3002
2687
  exports.getCurrentInstance = getCurrentInstance;
3003
2688
  exports.getDepContext = getDepContext;
@@ -3008,6 +2693,7 @@ exports.isReactive = isReactive;
3008
2693
  exports.jsx = jsx;
3009
2694
  exports.jsxs = jsxs;
3010
2695
  exports.makeError = makeError;
2696
+ exports.nextTick = nextTick;
3011
2697
  exports.normalizeProvider = normalizeProvider;
3012
2698
  exports.onMounted = onMounted;
3013
2699
  exports.onUnmounted = onUnmounted;
@@ -3019,6 +2705,8 @@ exports.rawToProxyCache = rawToProxyCache;
3019
2705
  exports.reactive = reactive;
3020
2706
  exports.readonlyProxyHandler = readonlyProxyHandler;
3021
2707
  exports.registryComponentDestroyCallback = registryComponentDestroyCallback;
2708
+ exports.shallowProxyToRawCache = shallowProxyToRawCache;
2709
+ exports.shallowRawToProxyCache = shallowRawToProxyCache;
3022
2710
  exports.shallowReactive = shallowReactive;
3023
2711
  exports.toRaw = toRaw;
3024
2712
  exports.track = track;