Skip to content

Commit a9c23a4

Browse files
committed
Add getNode helpter
1 parent d28ed2a commit a9c23a4

File tree

4 files changed

+58
-27
lines changed

4 files changed

+58
-27
lines changed

packages/debugger/src/dependency/index.ts

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {defer} from '@solid-primitives/utils'
44
import {msg} from '@solid-devtools/shared/utils'
55
import {ObjectType, getObjectById} from '../main/id.ts'
66
import {DevtoolsMainView, NodeType, type InspectedState, type NodeID, type OutputEmit, type Solid} from '../main/types.ts'
7-
import {getNodeType} from '../main/utils.ts'
7+
import {getNode} from '../main/utils.ts'
88
import {type OnNodeUpdate, type SerializedDGraph, collectDependencyGraph} from './collect.ts'
99

1010
export {type SerializedDGraph} from './collect.ts'
@@ -31,11 +31,16 @@ export function createDependencyGraph(props: {
3131

3232
const inspectedNode = s.createMemo(() => {
3333
const state = props.inspectedState()
34+
let node_raw: Solid.Owner | Solid.Signal | null = null
3435

3536
if (state.signalId) {
36-
return getObjectById(state.signalId, ObjectType.Signal)
37+
node_raw = getObjectById(state.signalId, ObjectType.Signal)
3738
} else if (state.ownerId) {
38-
return getObjectById(state.ownerId, ObjectType.Owner)
39+
node_raw = getObjectById(state.ownerId, ObjectType.Owner)
40+
}
41+
42+
if (node_raw != null) {
43+
return getNode(node_raw)
3944
}
4045

4146
return null
@@ -45,22 +50,20 @@ export function createDependencyGraph(props: {
4550
// listeners need to be cleared each time, because each update will cause the graph to be mapped again
4651
clearListeners?.()
4752

48-
const node = inspectedNode()
49-
const type = node && getNodeType(node)
53+
let node = inspectedNode()
5054

51-
if (
52-
!props.enabled() ||
53-
!type ||
54-
type === NodeType.Root ||
55-
type === NodeType.Component ||
56-
type === NodeType.Context
55+
if (!props.enabled() ||
56+
!node ||
57+
node.kind === NodeType.Root ||
58+
node.kind === NodeType.Component ||
59+
node.kind === NodeType.Context
5760
) {
5861
clearListeners = null
5962
props.emit(msg('DgraphUpdate', null))
6063
return
6164
}
6265

63-
const dgraph = collectDependencyGraph(node as Solid.Computation | Solid.Signal, {
66+
const dgraph = collectDependencyGraph(node.data as any, {
6467
onNodeUpdate,
6568
})
6669
clearListeners = dgraph.clearListeners

packages/debugger/src/inspector/inspector.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -164,33 +164,35 @@ let PropsMap: ObservedPropsMap
164164
const $INSPECTOR = Symbol('inspector')
165165

166166
function mapSourceValue(
167-
node: Solid.SourceMapValue | Solid.Computation,
168-
handler: (nodeId: NodeID, value: unknown) => void,
167+
node_raw: Solid.SourceMapValue | Solid.Computation,
168+
handler: (nodeId: NodeID, value: unknown) => void,
169169
): Mapped.SourceValue | null {
170170

171-
let type = utils.getNodeType(node)
172-
let {value} = node
171+
let node = utils.getNode(node_raw)
172+
let {value} = node_raw
173173
let id: NodeID
174174

175175
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
176-
switch (type) {
177-
case NodeType.Memo: id = getSdtId(node as Solid.Memo, ObjectType.Owner) ;break
178-
case NodeType.Signal: id = getSdtId(node as Solid.Signal, ObjectType.Signal) ;break
179-
case NodeType.Store: id = getSdtId(node as Solid.Store, ObjectType.Store) ;break
180-
case NodeType.CustomValue: id = getSdtId(node as Solid.SourceMapValue, ObjectType.CustomValue) ;break
176+
switch (node.kind) {
177+
case NodeType.Memo: id = getSdtId(node.data, ObjectType.Owner) ;break
178+
case NodeType.Signal: id = getSdtId(node.data, ObjectType.Signal) ;break
179+
case NodeType.Store: id = getSdtId(node.data, ObjectType.Store) ;break
180+
case NodeType.CustomValue: id = getSdtId(node.data, ObjectType.CustomValue) ;break
181181
default:
182182
return null
183183
}
184184

185-
ValueMap.add(`${ValueItemType.Signal}:${id}`, () => node.value)
185+
ValueMap.add(`${ValueItemType.Signal}:${id}`, () => node_raw.value)
186186

187-
if (type === NodeType.Memo || type === NodeType.Signal) {
188-
observeValueUpdate(node, v => handler(id, v), $INSPECTOR)
187+
if (node.kind === NodeType.Memo ||
188+
node.kind === NodeType.Signal
189+
) {
190+
observeValueUpdate(node.data, v => handler(id, v), $INSPECTOR)
189191
}
190192

191193
return {
192-
type: type,
193-
name: utils.getNodeName(node),
194+
type: node.kind,
195+
name: utils.getNodeName(node.data),
194196
id: id,
195197
value: encodeValue(value, false),
196198
}

packages/debugger/src/main/types.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,23 @@ export const NODE_TYPE_NAMES: Readonly<Record<NodeType, string>> = {
5656
[NodeType.CustomValue]: 'Custom Value',
5757
}
5858

59+
export type NodeData = {
60+
[NodeType.Root]: Solid.Root,
61+
[NodeType.Component]: Solid.Component,
62+
[NodeType.Element]: Element,
63+
[NodeType.Effect]: Solid.Computation,
64+
[NodeType.Render]: Solid.Computation,
65+
[NodeType.Memo]: Solid.Memo,
66+
[NodeType.Computation]: Solid.Computation,
67+
[NodeType.Refresh]: Solid.Memo,
68+
[NodeType.Context]: Solid.Computation,
69+
[NodeType.CatchError]: Solid.Computation,
70+
[NodeType.Signal]: Solid.Signal,
71+
[NodeType.Store]: Solid.Store,
72+
[NodeType.CustomValue]: Solid.SourceMapValue,
73+
}
74+
export type Node = Union<NodeData>
75+
5976
export enum ValueItemType {
6077
Signal = 'signal',
6178
Prop = 'prop',

packages/debugger/src/main/utils.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {trimString} from '@solid-devtools/shared/utils'
2-
import {type Solid, NodeType} from './types.ts'
2+
import {type Node, type Solid, NodeType} from './types.ts'
33
import setup from './setup.ts'
44

55
export const isSolidOwner = (o: Solid.SourceMapValue | Solid.Owner | Solid.Store | Solid.Signal): o is Solid.Owner =>
@@ -76,6 +76,15 @@ export const getOwnerType = (o: Solid.Owner): NodeType => {
7676
return NodeType.Computation
7777
}
7878

79+
export function getNode(
80+
o: Solid.SourceMapValue | Solid.Signal | Solid.Owner | Solid.Store,
81+
): Node {
82+
return {
83+
kind: getNodeType(o),
84+
data: o as any,
85+
}
86+
}
87+
7988
export const getNodeName = (o: {
8089
component?: ((..._: any) => any) & {displayName?: string},
8190
name?: string,

0 commit comments

Comments
 (0)