Skip to content

Commit 7019971

Browse files
thetarnavgithub-actions[bot]
authored andcommitted
Format
1 parent c1a4ed2 commit 7019971

File tree

2 files changed

+118
-117
lines changed

2 files changed

+118
-117
lines changed

packages/deep/src/track-store.ts

+36-35
Original file line numberDiff line numberDiff line change
@@ -20,47 +20,48 @@ function getTrackStoreNode(node: StoreNode): VoidFunction | undefined {
2020
// custom lazy memo to support circular references
2121
// maybe it won't be needed in solid 2.0
2222

23-
let is_reading = false
24-
let is_stale = true
25-
let version = 0
26-
27-
const [signal, trigger] = createSignal(undefined, EQUALS_FALSE)
28-
29-
const memo = createMemo(() => {
30-
31-
if (is_reading) {
32-
33-
node[$TRACK] // shallow track store node
34-
35-
// track each child node
36-
for (const [key, child] of Object.entries(unwrapped)) {
37-
let childNode: StoreNode;
38-
if (
39-
child != null && typeof child === "object" &&
40-
((childNode = child[$PROXY]) || $TRACK in (childNode = untrack(() => node[key])))
41-
) {
42-
getTrackStoreNode(childNode)?.();
23+
let is_reading = false;
24+
let is_stale = true;
25+
let version = 0;
26+
27+
const [signal, trigger] = createSignal(undefined, EQUALS_FALSE);
28+
29+
const memo = createMemo(
30+
() => {
31+
if (is_reading) {
32+
node[$TRACK]; // shallow track store node
33+
34+
// track each child node
35+
for (const [key, child] of Object.entries(unwrapped)) {
36+
let childNode: StoreNode;
37+
if (
38+
child != null &&
39+
typeof child === "object" &&
40+
((childNode = child[$PROXY]) || $TRACK in (childNode = untrack(() => node[key])))
41+
) {
42+
getTrackStoreNode(childNode)?.();
43+
}
4344
}
45+
} else {
46+
signal();
47+
is_stale = true;
4448
}
45-
46-
} else {
47-
signal()
48-
is_stale = true
49-
}
50-
51-
}, undefined, EQUALS_FALSE)
49+
},
50+
undefined,
51+
EQUALS_FALSE,
52+
);
5253

5354
track = () => {
54-
is_reading = true
55+
is_reading = true;
5556
if (is_stale) {
56-
trigger()
57-
is_stale = false
57+
trigger();
58+
is_stale = false;
5859
}
59-
const already_tracked = version === TrackVersion
60-
version = TrackVersion
61-
already_tracked || memo()
62-
is_reading = false
63-
}
60+
const already_tracked = version === TrackVersion;
61+
version = TrackVersion;
62+
already_tracked || memo();
63+
is_reading = false;
64+
};
6465

6566
TrackStoreCache.set(node, track);
6667
});

packages/deep/test/track.test.ts

+82-82
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,23 @@ import { captureStoreUpdates, trackDeep, trackStore } from "../src/index.js";
44
import { createStore, reconcile, unwrap } from "solid-js/store";
55

66
const apis: {
7-
name: string
8-
fn : (store: any) => () => void,
9-
pojo: boolean,
7+
name: string;
8+
fn: (store: any) => () => void;
9+
pojo: boolean;
1010
}[] = [
1111
{
1212
name: "trackDeep",
13-
fn : store => () => trackDeep(store),
13+
fn: store => () => trackDeep(store),
1414
pojo: true,
1515
},
1616
{
1717
name: "trackStore",
18-
fn : store => () => trackStore(store),
18+
fn: store => () => trackStore(store),
1919
pojo: false,
2020
},
2121
{
2222
name: "captureUpdates",
23-
fn : captureStoreUpdates,
23+
fn: captureStoreUpdates,
2424
pojo: false,
2525
},
2626
];
@@ -166,112 +166,112 @@ for (const api of apis) {
166166
});
167167

168168
test("circular reference", () => {
169-
type Ref = {ref: Ref, count: number};
170-
const ref: Ref = {ref: null as any, count: 0}
171-
ref.ref = ref
169+
type Ref = { ref: Ref; count: number };
170+
const ref: Ref = { ref: null as any, count: 0 };
171+
ref.ref = ref;
172172

173-
const [sign, set] = createStore(ref)
174-
const fn = api.fn(sign)
173+
const [sign, set] = createStore(ref);
174+
const fn = api.fn(sign);
175175

176-
let runs = 0
176+
let runs = 0;
177177
createRoot(() => {
178178
createEffect(() => {
179-
fn()
180-
runs += 1
181-
})
182-
})
183-
expect(runs).toBe(1)
179+
fn();
180+
runs += 1;
181+
});
182+
});
183+
expect(runs).toBe(1);
184184

185-
set("count", 1)
186-
expect(runs).toBe(2)
187-
})
185+
set("count", 1);
186+
expect(runs).toBe(2);
187+
});
188188

189189
test("circular reference, two effects", () => {
190-
type Ref = {ref: Ref, count: number};
191-
const ref: Ref = {ref: null as any, count: 0}
192-
ref.ref = ref
190+
type Ref = { ref: Ref; count: number };
191+
const ref: Ref = { ref: null as any, count: 0 };
192+
ref.ref = ref;
193193

194-
const [sign, set] = createStore(ref)
195-
const fn_root = api.fn(sign)
196-
const fn_leaf = api.fn(sign.ref)
194+
const [sign, set] = createStore(ref);
195+
const fn_root = api.fn(sign);
196+
const fn_leaf = api.fn(sign.ref);
197197

198-
let runs_root = 0
199-
let runs_leaf = 0
198+
let runs_root = 0;
199+
let runs_leaf = 0;
200200

201201
createRoot(() => {
202202
createEffect(() => {
203-
fn_root()
204-
runs_root += 1
205-
})
203+
fn_root();
204+
runs_root += 1;
205+
});
206206
createEffect(() => {
207-
fn_leaf()
208-
runs_leaf += 1
209-
})
210-
})
211-
212-
expect(runs_root).toBe(1)
213-
expect(runs_leaf).toBe(1)
214-
215-
set("count", 1)
216-
expect(runs_root).toBe(2)
217-
expect(runs_leaf).toBe(2)
218-
})
207+
fn_leaf();
208+
runs_leaf += 1;
209+
});
210+
});
211+
212+
expect(runs_root).toBe(1);
213+
expect(runs_leaf).toBe(1);
214+
215+
set("count", 1);
216+
expect(runs_root).toBe(2);
217+
expect(runs_leaf).toBe(2);
218+
});
219219

220220
test("multiple references", () => {
221-
const obj = {count: 0}
222-
const [sign, set] = createStore({a: obj, b: obj})
221+
const obj = { count: 0 };
222+
const [sign, set] = createStore({ a: obj, b: obj });
223223

224-
const fn = api.fn(sign)
224+
const fn = api.fn(sign);
225225

226-
let runs = 0
226+
let runs = 0;
227227
createRoot(() => {
228228
createEffect(() => {
229-
fn()
230-
runs++
231-
})
232-
})
229+
fn();
230+
runs++;
231+
});
232+
});
233233

234-
expect(runs).toBe(1)
234+
expect(runs).toBe(1);
235235

236-
set("a", "count", 1)
237-
expect(runs).toBe(2)
236+
set("a", "count", 1);
237+
expect(runs).toBe(2);
238238

239-
set("b", "count", 2)
240-
expect(runs).toBe(3)
241-
})
239+
set("b", "count", 2);
240+
expect(runs).toBe(3);
241+
});
242242

243243
test("multiple references, two effects", () => {
244-
const obj = {count: 0}
245-
const [sign, set] = createStore({a: obj, b: obj})
244+
const obj = { count: 0 };
245+
const [sign, set] = createStore({ a: obj, b: obj });
246246

247-
const fn_a = api.fn(sign.a)
248-
const fn_b = api.fn(sign.b)
247+
const fn_a = api.fn(sign.a);
248+
const fn_b = api.fn(sign.b);
249249

250-
let runs_a = 0
251-
let runs_b = 0
250+
let runs_a = 0;
251+
let runs_b = 0;
252252

253253
createRoot(() => {
254254
createEffect(() => {
255-
fn_a()
256-
runs_a++
257-
})
255+
fn_a();
256+
runs_a++;
257+
});
258258
createEffect(() => {
259-
fn_b()
260-
runs_b++
261-
})
262-
})
263-
264-
expect(runs_a).toBe(1)
265-
expect(runs_b).toBe(1)
266-
267-
set("a", "count", 1)
268-
expect(runs_a).toBe(2)
269-
expect(runs_b).toBe(2)
270-
271-
set("b", "count", 2)
272-
expect(runs_a).toBe(3)
273-
expect(runs_b).toBe(3)
274-
})
259+
fn_b();
260+
runs_b++;
261+
});
262+
});
263+
264+
expect(runs_a).toBe(1);
265+
expect(runs_b).toBe(1);
266+
267+
set("a", "count", 1);
268+
expect(runs_a).toBe(2);
269+
expect(runs_b).toBe(2);
270+
271+
set("b", "count", 2);
272+
expect(runs_a).toBe(3);
273+
expect(runs_b).toBe(3);
274+
});
275275

276276
test("doesn't trigger on unrelated changes", () => {
277277
const [sign, set] = createStore<any>({ a: { "a.b": "thoughts" } });

0 commit comments

Comments
 (0)