@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/base/_render-context.d.ts +4 -0
- package/dist/base/_utils.d.ts +0 -1
- package/dist/base/component.d.ts +5 -5
- package/dist/base/dep.d.ts +3 -2
- package/dist/base/jsx-element.d.ts +3 -4
- package/dist/base/ref.d.ts +46 -0
- package/dist/base/renderer.d.ts +1 -1
- package/dist/di/reflective-injector.d.ts +1 -1
- package/dist/index.esm.js +503 -259
- package/dist/index.js +611 -923
- package/dist/reactive/array-handlers.d.ts +3 -2
- package/dist/reactive/effect.d.ts +8 -1
- package/dist/reactive/map-handlers.d.ts +1 -1
- package/dist/reactive/reactive.d.ts +8 -3
- package/dist/viewfly.d.ts +1 -1
- package/package.json +1 -1
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
|
|
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
|
-
|
|
355
|
-
|
|
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
|
-
|
|
373
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
407
|
-
|
|
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
|
|
514
|
-
function getStringType
|
|
515
|
-
return toStr
|
|
511
|
+
var toStr = Object.prototype.toString;
|
|
512
|
+
function getStringType(v) {
|
|
513
|
+
return toStr.call(v);
|
|
516
514
|
}
|
|
517
|
-
function isArray
|
|
515
|
+
function isArray(v) {
|
|
518
516
|
return Array.isArray(v);
|
|
519
517
|
}
|
|
520
|
-
var hasOwnProperty
|
|
521
|
-
function hasOwn
|
|
522
|
-
return hasOwnProperty
|
|
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
|
|
535
|
+
var deps = [];
|
|
537
536
|
function getDepContext() {
|
|
538
|
-
return deps
|
|
537
|
+
return deps[deps.length - 1];
|
|
539
538
|
}
|
|
540
539
|
function pushDepContext(dep) {
|
|
541
|
-
deps
|
|
540
|
+
deps.push(dep);
|
|
542
541
|
}
|
|
543
542
|
function popDepContext() {
|
|
544
|
-
deps
|
|
543
|
+
deps.pop();
|
|
545
544
|
}
|
|
546
545
|
//#endregion
|
|
547
546
|
//#region src/reactive/effect.ts
|
|
548
|
-
var subscribers
|
|
549
|
-
|
|
550
|
-
|
|
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
|
|
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
|
|
571
|
-
function
|
|
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
|
|
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
|
|
645
|
+
function runEffect(key, record) {
|
|
596
646
|
if (!record) return;
|
|
597
647
|
const effects = record.get(key);
|
|
598
|
-
if (effects) [...effects].forEach((
|
|
648
|
+
if (effects) [...effects].forEach((dep) => scheduleDep(dep));
|
|
599
649
|
}
|
|
600
|
-
function
|
|
601
|
-
|
|
602
|
-
|
|
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
|
-
|
|
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
|
|
612
|
-
runEffect
|
|
613
|
-
|
|
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
|
|
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
|
|
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
|
|
644
|
-
return predicate.call(
|
|
775
|
+
return target[methodName]((value, index) => {
|
|
776
|
+
return predicate.call(thisArg, wrapper(value), index, self);
|
|
645
777
|
}, thisArg);
|
|
646
778
|
}
|
|
647
|
-
function applySearchMethod
|
|
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
|
|
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
|
-
|
|
791
|
+
track(target, TrackOpTypes.Iterate);
|
|
657
792
|
return target.concat(...items);
|
|
658
793
|
},
|
|
659
794
|
every(predicate, thisArg) {
|
|
660
|
-
return applyPredicateMethod
|
|
795
|
+
return applyPredicateMethod(this, "every", predicate, wrapper, thisArg);
|
|
661
796
|
},
|
|
662
797
|
filter(predicate, thisArg) {
|
|
663
|
-
return applyPredicateMethod
|
|
798
|
+
return applyPredicateMethod(this, "filter", predicate, wrapper, thisArg);
|
|
664
799
|
},
|
|
665
800
|
find(predicate, thisArg) {
|
|
666
|
-
return applyPredicateMethod
|
|
801
|
+
return applyPredicateMethod(this, "find", predicate, wrapper, thisArg);
|
|
667
802
|
},
|
|
668
803
|
findIndex(predicate, thisArg) {
|
|
669
|
-
return applyPredicateMethod
|
|
804
|
+
return applyPredicateMethod(this, "findIndex", predicate, wrapper, thisArg);
|
|
670
805
|
},
|
|
671
806
|
findLast(predicate, thisArg) {
|
|
672
|
-
return applyPredicateMethod
|
|
807
|
+
return applyPredicateMethod(this, "findLast", predicate, wrapper, thisArg);
|
|
673
808
|
},
|
|
674
809
|
findLastIndex(predicate, thisArg) {
|
|
675
|
-
return applyPredicateMethod
|
|
810
|
+
return applyPredicateMethod(this, "findLastIndex", predicate, wrapper, thisArg);
|
|
676
811
|
},
|
|
677
812
|
forEach(callbackfn, thisArg) {
|
|
678
|
-
return applyPredicateMethod
|
|
813
|
+
return applyPredicateMethod(this, "forEach", callbackfn, wrapper, thisArg);
|
|
679
814
|
},
|
|
680
815
|
includes(...args) {
|
|
681
|
-
return applySearchMethod
|
|
816
|
+
return applySearchMethod(this, "includes", args);
|
|
682
817
|
},
|
|
683
818
|
indexOf(...args) {
|
|
684
|
-
return applySearchMethod
|
|
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
|
|
827
|
+
return applySearchMethod(this, "lastIndexOf", args);
|
|
693
828
|
},
|
|
694
829
|
map(callbackFn, thisArg) {
|
|
695
|
-
return applyPredicateMethod
|
|
830
|
+
return applyPredicateMethod(this, "map", callbackFn, wrapper, thisArg);
|
|
696
831
|
},
|
|
697
832
|
pop() {
|
|
698
833
|
const target = toRaw(this);
|
|
699
|
-
|
|
700
|
-
|
|
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
|
-
|
|
705
|
-
|
|
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
|
-
|
|
726
|
-
|
|
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
|
|
880
|
+
return applyPredicateMethod(this, "some", predicate, wrapper, thisArg);
|
|
730
881
|
},
|
|
731
|
-
splice(start,
|
|
882
|
+
splice(start, ...items) {
|
|
732
883
|
const target = toRaw(this);
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
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
|
-
|
|
756
|
-
|
|
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
|
|
918
|
+
...createIterableIterator(wrapper)
|
|
762
919
|
};
|
|
763
920
|
}
|
|
764
921
|
//#endregion
|
|
765
922
|
//#region src/reactive/map-handlers.ts
|
|
766
|
-
function createMapHandlers
|
|
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
|
|
959
|
+
track(target, TrackOpTypes.Iterate);
|
|
798
960
|
target.forEach((v, k, m) => {
|
|
799
|
-
callbackFn.call(
|
|
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
|
|
968
|
+
trigger(target, TriggerOpTypes.Clear);
|
|
806
969
|
},
|
|
807
970
|
[Symbol.iterator]() {
|
|
808
971
|
return this.entries();
|
|
809
972
|
},
|
|
810
|
-
...createIterableIterator
|
|
973
|
+
...createIterableIterator(wrapper)
|
|
811
974
|
};
|
|
812
975
|
}
|
|
813
976
|
//#endregion
|
|
814
977
|
//#region src/reactive/set-handlers.ts
|
|
815
|
-
function createSetHandlers
|
|
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,
|
|
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 (
|
|
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
|
|
1008
|
+
track(target, TrackOpTypes.Iterate);
|
|
843
1009
|
target.forEach((v, k, m) => {
|
|
844
|
-
callbackFn.call(
|
|
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
|
|
1017
|
+
trigger(target, TriggerOpTypes.Clear);
|
|
852
1018
|
}
|
|
853
1019
|
},
|
|
854
1020
|
[Symbol.iterator]() {
|
|
855
1021
|
return this.values();
|
|
856
1022
|
},
|
|
857
|
-
...createIterableIterator
|
|
1023
|
+
...createIterableIterator(wrapper)
|
|
858
1024
|
};
|
|
859
1025
|
}
|
|
860
1026
|
//#endregion
|
|
861
1027
|
//#region src/reactive/reactive.ts
|
|
862
|
-
var reactiveErrorFn
|
|
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
|
-
|
|
906
|
-
|
|
907
|
-
|
|
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 && !
|
|
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
|
|
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
|
-
|
|
924
|
-
|
|
925
|
-
|
|
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
|
-
|
|
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
|
|
1131
|
+
function noReactive(v) {
|
|
945
1132
|
return v;
|
|
946
1133
|
}
|
|
947
1134
|
var ArrayReactiveHandler = class extends ObjectReactiveHandler {
|
|
948
|
-
interceptors = createArrayHandlers
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
1068
|
-
for (
|
|
1069
|
-
|
|
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
|
|
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
|
|
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
|
|
1204
|
-
var componentErrorFn
|
|
1450
|
+
var componentSetupStack = [];
|
|
1451
|
+
var componentErrorFn = makeError("component");
|
|
1205
1452
|
function getSetupContext(need = true) {
|
|
1206
|
-
const current = componentSetupStack
|
|
1207
|
-
if (!current && need) throw componentErrorFn
|
|
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
|
|
1500
|
+
componentSetupStack.push(this);
|
|
1254
1501
|
const render = this.type(this.props);
|
|
1255
1502
|
const isRenderFn = typeof render === "function";
|
|
1256
|
-
this.instance = isRenderFn ? {
|
|
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
|
|
1512
|
+
componentSetupStack.pop();
|
|
1266
1513
|
pushDepContext(this.listener);
|
|
1267
|
-
const template = this.instance
|
|
1514
|
+
const template = this.instance.render();
|
|
1268
1515
|
popDepContext();
|
|
1269
|
-
update(template
|
|
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
|
|
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
|
|
1415
|
-
componentRenderFn
|
|
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
|
|
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
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
}
|
|
1469
|
-
};
|
|
1723
|
+
return { render() {
|
|
1724
|
+
pushContainer(props.container);
|
|
1725
|
+
return props.children;
|
|
1726
|
+
} };
|
|
1470
1727
|
}
|
|
1471
1728
|
//#endregion
|
|
1472
|
-
//#region
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
}
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
}
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
}
|
|
1492
|
-
|
|
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
|
-
|
|
1498
|
-
|
|
1499
|
-
this.destroyCallbacks = [];
|
|
1751
|
+
function unWatch() {
|
|
1752
|
+
dep.destroy();
|
|
1500
1753
|
}
|
|
1501
|
-
|
|
1502
|
-
|
|
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
|
-
|
|
1510
|
-
|
|
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
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
2252
|
-
|
|
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
|
-
|
|
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,
|
|
1999
|
+
const { atom, anchorNode, isParent, rootContainer } = component.viewMetadata;
|
|
2280
2000
|
const context = {
|
|
2281
|
-
|
|
2001
|
+
anchorNode,
|
|
2282
2002
|
isParent,
|
|
2283
|
-
|
|
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.
|
|
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
|
-
|
|
2023
|
+
while (newAtom) {
|
|
2024
|
+
oldAtom = createChanges(newAtom, oldAtom, commits);
|
|
2025
|
+
newAtom = newAtom.sibling;
|
|
2026
|
+
}
|
|
2345
2027
|
let dirtyDiffAtom = oldAtom;
|
|
2346
2028
|
while (dirtyDiffAtom) {
|
|
2347
|
-
|
|
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 (
|
|
2377
|
-
if (
|
|
2035
|
+
while (oldAtom) {
|
|
2036
|
+
if (oldAtom.index <= i) {
|
|
2378
2037
|
offset--;
|
|
2379
|
-
|
|
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.
|
|
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.
|
|
2095
|
+
context.anchorNode = nativeNode;
|
|
2414
2096
|
context.isParent = false;
|
|
2415
2097
|
updateNativeNodeProperties(nativeRenderer, newAtom, oldAtom, parentComponent, {
|
|
2416
|
-
|
|
2098
|
+
anchorNode: nativeNode,
|
|
2417
2099
|
isParent: true,
|
|
2418
|
-
|
|
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
|
-
|
|
2437
|
-
if (
|
|
2438
|
-
|
|
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.
|
|
2444
|
-
view.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.
|
|
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.
|
|
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
|
|
2193
|
+
component.render((template) => {
|
|
2194
|
+
const portalContainer = getContainer();
|
|
2195
|
+
popContainer();
|
|
2518
2196
|
from.child = createChildChain(template, nativeRenderer, from.namespace);
|
|
2519
|
-
|
|
2197
|
+
const expectContainer = context.anchorNode;
|
|
2198
|
+
context = portalContainer && portalContainer !== context.anchorNode ? {
|
|
2520
2199
|
isParent: true,
|
|
2521
|
-
|
|
2522
|
-
|
|
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.
|
|
2583
|
-
else nativeRenderer.prependChild(context.
|
|
2584
|
-
else nativeRenderer.insertAfter(atom.nativeNode, context.
|
|
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
|
|
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
|
-
|
|
2628
|
-
|
|
2304
|
+
anchorNode: nativeNode,
|
|
2305
|
+
rootContainer: context.rootContainer
|
|
2629
2306
|
});
|
|
2630
|
-
context.
|
|
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.
|
|
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
|
|
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 =
|
|
2710
|
-
const
|
|
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(
|
|
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
|
|
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(
|
|
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(
|
|
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
|
-
|
|
2840
|
-
render(
|
|
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 (
|
|
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
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
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
|
|
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 =
|
|
2579
|
+
let proxy = shallowRawToProxyCache.get(raw);
|
|
2896
2580
|
if (proxy) return proxy;
|
|
2897
|
-
switch (getStringType
|
|
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
|
-
|
|
2915
|
-
|
|
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;
|