Skip to content

Commit f1391ce

Browse files
committed
refactor: avoid using the JS-specific "in" syntax.
1 parent 9e4c143 commit f1391ce

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

src/index.ts

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,21 @@ const {
2424
checkDirty,
2525
shallowPropagate,
2626
} = createReactiveSystem({
27-
update(signal: Signal | Computed): boolean {
28-
if ('getter' in signal) {
29-
return updateComputed(signal);
27+
update(node: Signal | Computed): boolean {
28+
if (node.depsTail !== undefined) {
29+
return updateComputed(node as Computed);
3030
} else {
31-
return updateSignal(signal);
31+
return updateSignal(node as Signal);
3232
}
3333
},
3434
notify,
3535
unwatched(node: Signal | Computed | Effect | EffectScope) {
36-
if ('getter' in node) {
37-
if (node.depsTail !== undefined) {
38-
node.depsTail = undefined;
39-
node.flags = 17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty;
40-
purgeDeps(node);
41-
}
42-
} else if ('fn' in node) {
43-
effectOper.call(node);
44-
} else if (!('currentValue' in node)) {
36+
if (!(node.flags & 1 satisfies ReactiveFlags.Mutable)) {
4537
effectScopeOper.call(node);
38+
} else if (node.depsTail !== undefined) {
39+
node.depsTail = undefined;
40+
node.flags = 17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty;
41+
purgeDeps(node);
4642
}
4743
},
4844
});
@@ -121,7 +117,7 @@ export function computed<T>(getter: (previousValue?: T) => T): () => T {
121117
subsTail: undefined,
122118
deps: undefined,
123119
depsTail: undefined,
124-
flags: 0 satisfies ReactiveFlags.None,
120+
flags: 17 as ReactiveFlags.Mutable | ReactiveFlags.Dirty,
125121
getter: getter as (previousValue?: unknown) => unknown,
126122
}) as () => T;
127123
}
@@ -263,14 +259,6 @@ function computedOper<T>(this: Computed<T>): T {
263259
shallowPropagate(subs);
264260
}
265261
}
266-
} else if (!flags) {
267-
this.flags = 1 satisfies ReactiveFlags.Mutable;
268-
const prevSub = setActiveSub(this);
269-
try {
270-
this.value = this.getter();
271-
} finally {
272-
activeSub = prevSub;
273-
}
274262
}
275263
const sub = activeSub;
276264
if (sub !== undefined) {
@@ -314,7 +302,6 @@ function signalOper<T>(this: Signal<T>, ...value: [T]): T | void {
314302

315303
function effectOper(this: Effect): void {
316304
effectScopeOper.call(this);
317-
this.flags = 0 satisfies ReactiveFlags.None;
318305
}
319306

320307
function effectScopeOper(this: EffectScope): void {
@@ -326,12 +313,13 @@ function effectScopeOper(this: EffectScope): void {
326313
if (sub !== undefined) {
327314
unlink(sub);
328315
}
316+
this.flags = 0 satisfies ReactiveFlags.None;
329317
}
330318

331319
function purgeDeps(sub: ReactiveNode) {
332320
const depsTail = sub.depsTail;
333-
let toRemove = depsTail !== undefined ? depsTail.nextDep : sub.deps;
334-
while (toRemove !== undefined) {
335-
toRemove = unlink(toRemove, sub);
321+
let dep = depsTail !== undefined ? depsTail.nextDep : sub.deps;
322+
while (dep !== undefined) {
323+
dep = unlink(dep, sub);
336324
}
337325
}

0 commit comments

Comments
 (0)