refactor(reactivity): sync alien-signals 1.0.4 changes (#12791)
This commit is contained in:
parent
84663ccc2c
commit
1ac0499b7d
|
@ -69,11 +69,8 @@ function setupFlagsHandler(target: Subscriber): void {
|
||||||
},
|
},
|
||||||
set(value) {
|
set(value) {
|
||||||
if (
|
if (
|
||||||
!(
|
!((target as any)._flags & SubscriberFlags.Propagated) &&
|
||||||
(target as any)._flags &
|
!!(value & SubscriberFlags.Propagated)
|
||||||
(SubscriberFlags.PendingComputed | SubscriberFlags.Dirty)
|
|
||||||
) &&
|
|
||||||
!!(value & (SubscriberFlags.PendingComputed | SubscriberFlags.Dirty))
|
|
||||||
) {
|
) {
|
||||||
onTrigger(this)
|
onTrigger(this)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* eslint-disable */
|
/* 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 { ComputedRefImpl as Computed } from './computed.js'
|
||||||
import type { ReactiveEffect as Effect } from './effect.js'
|
import type { ReactiveEffect as Effect } from './effect.js'
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ export const enum SubscriberFlags {
|
||||||
let batchDepth = 0
|
let batchDepth = 0
|
||||||
let queuedEffects: Effect | undefined
|
let queuedEffects: Effect | undefined
|
||||||
let queuedEffectsTail: Effect | undefined
|
let queuedEffectsTail: Effect | undefined
|
||||||
let linkPool: Link | undefined
|
|
||||||
|
|
||||||
export function startBatch(): void {
|
export function startBatch(): void {
|
||||||
++batchDepth
|
++batchDepth
|
||||||
|
@ -195,24 +194,18 @@ export function processComputedUpdate(
|
||||||
computed: Computed,
|
computed: Computed,
|
||||||
flags: SubscriberFlags,
|
flags: SubscriberFlags,
|
||||||
): void {
|
): void {
|
||||||
if (flags & SubscriberFlags.Dirty) {
|
if (
|
||||||
|
flags & SubscriberFlags.Dirty ||
|
||||||
|
(checkDirty(computed.deps!)
|
||||||
|
? true
|
||||||
|
: ((computed.flags = flags & ~SubscriberFlags.PendingComputed), false))
|
||||||
|
) {
|
||||||
if (computed.update()) {
|
if (computed.update()) {
|
||||||
const subs = computed.subs
|
const subs = computed.subs
|
||||||
if (subs !== undefined) {
|
if (subs !== undefined) {
|
||||||
shallowPropagate(subs)
|
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,
|
nextDep: Link | undefined,
|
||||||
depsTail: Link | undefined,
|
depsTail: Link | undefined,
|
||||||
): Link {
|
): Link {
|
||||||
let newLink: Link
|
const newLink: Link = {
|
||||||
|
dep,
|
||||||
if (linkPool !== undefined) {
|
sub,
|
||||||
newLink = linkPool
|
nextDep,
|
||||||
linkPool = newLink.nextDep
|
prevSub: undefined,
|
||||||
newLink.nextDep = nextDep
|
nextSub: undefined,
|
||||||
newLink.dep = dep
|
|
||||||
newLink.sub = sub
|
|
||||||
} else {
|
|
||||||
newLink = {
|
|
||||||
dep,
|
|
||||||
sub,
|
|
||||||
nextDep,
|
|
||||||
prevSub: undefined,
|
|
||||||
nextSub: undefined,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (depsTail === undefined) {
|
if (depsTail === undefined) {
|
||||||
|
@ -327,7 +310,7 @@ function checkDirty(link: Link): boolean {
|
||||||
if (sub.update()) {
|
if (sub.update()) {
|
||||||
if ((link = subSubs.prevSub!) !== undefined) {
|
if ((link = subSubs.prevSub!) !== undefined) {
|
||||||
subSubs.prevSub = undefined
|
subSubs.prevSub = undefined
|
||||||
shallowPropagate(sub.subs!)
|
shallowPropagate(subSubs)
|
||||||
sub = link.sub as Computed
|
sub = link.sub as Computed
|
||||||
} else {
|
} else {
|
||||||
sub = subSubs.sub as Computed
|
sub = subSubs.sub as Computed
|
||||||
|
@ -400,25 +383,16 @@ function clearTracking(link: Link): void {
|
||||||
|
|
||||||
if (nextSub !== undefined) {
|
if (nextSub !== undefined) {
|
||||||
nextSub.prevSub = prevSub
|
nextSub.prevSub = prevSub
|
||||||
link.nextSub = undefined
|
|
||||||
} else {
|
} else {
|
||||||
dep.subsTail = prevSub
|
dep.subsTail = prevSub
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prevSub !== undefined) {
|
if (prevSub !== undefined) {
|
||||||
prevSub.nextSub = nextSub
|
prevSub.nextSub = nextSub
|
||||||
link.prevSub = undefined
|
|
||||||
} else {
|
} else {
|
||||||
dep.subs = nextSub
|
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) {
|
if (dep.subs === undefined && 'deps' in dep) {
|
||||||
const depFlags = dep.flags
|
const depFlags = dep.flags
|
||||||
if (!(depFlags & SubscriberFlags.Dirty)) {
|
if (!(depFlags & SubscriberFlags.Dirty)) {
|
||||||
|
|
Loading…
Reference in New Issue