]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor(reactivity): sync alien-signals 1.0.4 changes (#12791)
authorJohnson Chu <johnsoncodehk@gmail.com>
Tue, 25 Feb 2025 07:23:25 +0000 (15:23 +0800)
committerdaiwei <daiwei521@126.com>
Thu, 27 Feb 2025 03:07:35 +0000 (11:07 +0800)
packages/reactivity/src/debug.ts
packages/reactivity/src/system.ts

index aa7c87c95688561603dbe63526db9111670deb59..5503dc8a11b763d9cb7e81829d846cb94e9ba9e1 100644 (file)
@@ -69,11 +69,8 @@ function setupFlagsHandler(target: Subscriber): void {
     },
     set(value) {
       if (
-        !(
-          (target as any)._flags &
-          (SubscriberFlags.PendingComputed | SubscriberFlags.Dirty)
-        ) &&
-        !!(value & (SubscriberFlags.PendingComputed | SubscriberFlags.Dirty))
+        !((target as any)._flags & SubscriberFlags.Propagated) &&
+        !!(value & SubscriberFlags.Propagated)
       ) {
         onTrigger(this)
       }
index 056ccfdd1108108ca680afa9eb9a1a20841d8705..c88914a391ccd54157d28e6bc818486f6187831f 100644 (file)
@@ -1,5 +1,5 @@
 /* eslint-disable */
-// Ported from https://github.com/stackblitz/alien-signals/blob/v1.0.0/src/system.ts
+// Ported from https://github.com/stackblitz/alien-signals/blob/v1.0.4/src/system.ts
 import type { ComputedRefImpl as Computed } from './computed.js'
 import type { ReactiveEffect as Effect } from './effect.js'
 
@@ -35,7 +35,6 @@ export const enum SubscriberFlags {
 let batchDepth = 0
 let queuedEffects: Effect | undefined
 let queuedEffectsTail: Effect | undefined
-let linkPool: Link | undefined
 
 export function startBatch(): void {
   ++batchDepth
@@ -195,24 +194,18 @@ export function processComputedUpdate(
   computed: Computed,
   flags: SubscriberFlags,
 ): void {
-  if (flags & SubscriberFlags.Dirty) {
+  if (
+    flags & SubscriberFlags.Dirty ||
+    (checkDirty(computed.deps!)
+      ? true
+      : ((computed.flags = flags & ~SubscriberFlags.PendingComputed), false))
+  ) {
     if (computed.update()) {
       const subs = computed.subs
       if (subs !== undefined) {
         shallowPropagate(subs)
       }
     }
-  } else if (flags & SubscriberFlags.PendingComputed) {
-    if (checkDirty(computed.deps!)) {
-      if (computed.update()) {
-        const subs = computed.subs
-        if (subs !== undefined) {
-          shallowPropagate(subs)
-        }
-      }
-    } else {
-      computed.flags = flags & ~SubscriberFlags.PendingComputed
-    }
   }
 }
 
@@ -238,22 +231,12 @@ function linkNewDep(
   nextDep: Link | undefined,
   depsTail: Link | undefined,
 ): Link {
-  let newLink: Link
-
-  if (linkPool !== undefined) {
-    newLink = linkPool
-    linkPool = newLink.nextDep
-    newLink.nextDep = nextDep
-    newLink.dep = dep
-    newLink.sub = sub
-  } else {
-    newLink = {
-      dep,
-      sub,
-      nextDep,
-      prevSub: undefined,
-      nextSub: undefined,
-    }
+  const newLink: Link = {
+    dep,
+    sub,
+    nextDep,
+    prevSub: undefined,
+    nextSub: undefined,
   }
 
   if (depsTail === undefined) {
@@ -327,7 +310,7 @@ function checkDirty(link: Link): boolean {
           if (sub.update()) {
             if ((link = subSubs.prevSub!) !== undefined) {
               subSubs.prevSub = undefined
-              shallowPropagate(sub.subs!)
+              shallowPropagate(subSubs)
               sub = link.sub as Computed
             } else {
               sub = subSubs.sub as Computed
@@ -400,25 +383,16 @@ function clearTracking(link: Link): void {
 
     if (nextSub !== undefined) {
       nextSub.prevSub = prevSub
-      link.nextSub = undefined
     } else {
       dep.subsTail = prevSub
     }
 
     if (prevSub !== undefined) {
       prevSub.nextSub = nextSub
-      link.prevSub = undefined
     } else {
       dep.subs = nextSub
     }
 
-    // @ts-expect-error
-    link.dep = undefined
-    // @ts-expect-error
-    link.sub = undefined
-    link.nextDep = linkPool
-    linkPool = link
-
     if (dep.subs === undefined && 'deps' in dep) {
       const depFlags = dep.flags
       if (!(depFlags & SubscriberFlags.Dirty)) {