1+ import * as s from 'solid-js'
12import { createStaticStore } from '@solid-primitives/static-store'
23import { defer } from '@solid-primitives/utils'
3- import * as s from 'solid-js'
4- import { log_message , msg , mutate_remove , type Union } from '@solid-devtools/shared/utils'
5- import { createDependencyGraph , type DGraphUpdate } from '../dependency/index.ts'
6- import { createInspector , type InspectorUpdate , type ToggleInspectedValueData } from '../inspector/index.ts'
4+ import { log_message , msg , mutate_remove , type Timeout } from '@solid-devtools/shared/utils'
5+ import { createDependencyGraph } from '../dependency/index.ts'
6+ import { createInspector } from '../inspector/index.ts'
77import { createLocator } from '../locator/index.ts'
8- import { type HighlightElementPayload } from '../locator/types.ts'
9- import { createStructure , type StructureUpdates } from '../structure/index.ts'
10- import { DebuggerModule , DEFAULT_MAIN_VIEW , DevtoolsMainView , TreeWalkerMode } from './constants.ts'
8+ import { createStructure } from '../structure/index.ts'
9+ import { DebuggerModule , DEFAULT_MAIN_VIEW , DevtoolsMainView } from './constants.ts'
1110import { getObjectById , getSdtId , ObjectType } from './id.ts'
1211import setup from './setup.ts'
13- import { type Mapped , type NodeID , type ValueItemID } from './types.ts'
14-
15- export type InspectedState = {
16- readonly ownerId : NodeID | null
17- readonly signalId : NodeID | null
18- /** closest note to inspected signal/owner on the owner structure */
19- readonly treeWalkerOwnerId : NodeID | null
20- }
21-
22- export type OutputChannels = {
23- DebuggerEnabled : boolean
24- ResetPanel : void
25- InspectedState : InspectedState
26- InspectedNodeDetails : Mapped . OwnerDetails
27- StructureUpdates : StructureUpdates
28- NodeUpdates : NodeID [ ]
29- InspectorUpdate : InspectorUpdate [ ]
30- LocatorModeChange : boolean
31- HoveredComponent : { nodeId : NodeID ; state : boolean }
32- InspectedComponent : NodeID
33- DgraphUpdate : DGraphUpdate
34- }
35-
36- export type InputChannels = {
37- ResetState : void
38- InspectNode : { ownerId : NodeID | null ; signalId : NodeID | null } | null
39- InspectValue : ToggleInspectedValueData
40- ConsoleInspectValue : ValueItemID
41- HighlightElementChange : HighlightElementPayload
42- OpenLocation : void
43- TreeViewModeChange : TreeWalkerMode
44- ViewChange : DevtoolsMainView
45- ToggleModule : { module : DebuggerModule ; enabled : boolean }
46- }
47-
48- export type InputMessage = Union < InputChannels >
49- export type InputListener = ( e : InputMessage ) => void
50-
51- export type OutputMessage = Union < OutputChannels >
52- export type OutputListener = ( e : OutputMessage ) => void
53-
54- export type OutputEmit = ( e : OutputMessage ) => void
12+ import {
13+ INSPECTED_STATE_NULL ,
14+ type InputChannels ,
15+ type InputMessage ,
16+ type InspectedState ,
17+ type NodeID ,
18+ type OutputListener ,
19+ type OutputMessage ,
20+ } from './types.ts'
5521
5622function createDebugger ( ) {
5723
@@ -122,16 +88,10 @@ function createDebugger() {
12288 //
12389
12490 // Current inspected node is shared between modules
125- const INITIAL_INSPECTED_STATE = {
126- ownerId : null ,
127- signalId : null ,
128- treeWalkerOwnerId : null ,
129- } as const satisfies OutputChannels [ 'InspectedState' ]
130-
131- const [ inspectedState , setInspectedState ] = s . createSignal <
132- OutputChannels [ 'InspectedState' ]
133- > ( INITIAL_INSPECTED_STATE , { equals : false } )
134- const inspectedOwnerId = s . createMemo ( ( ) => inspectedState ( ) . ownerId )
91+ const [ inspectedState , setInspectedState ] = s . createSignal < InspectedState > (
92+ INSPECTED_STATE_NULL ,
93+ { equals : false } ,
94+ )
13595
13696 s . createEffect ( ( ) => {
13797 emitOutput ( msg ( 'InspectedState' , inspectedState ( ) ) )
@@ -143,48 +103,34 @@ function createDebugger() {
143103 return treeWalkerOwner ? getSdtId ( treeWalkerOwner , ObjectType . Owner ) : null
144104 }
145105
146- /** Check if the inspected node doesn't need to change (treeview mode changed or sth) */
147- function updateInspectedNode ( ) {
148- setInspectedState ( p => ( {
149- ...p ,
150- treeWalkerOwnerId : getTreeWalkerOwnerId ( p . treeWalkerOwnerId ) ,
151- } ) )
152- }
153-
154- function resetInspectedNode ( ) {
155- setInspectedState ( INITIAL_INSPECTED_STATE )
156- }
157-
158106 function setInspectedNode ( data : InputChannels [ 'InspectNode' ] ) : void {
159- let { ownerId , signalId } = data ?? { ownerId : null , signalId : null }
160- if ( ownerId && ! getObjectById ( ownerId , ObjectType . Owner ) ) ownerId = null
161- if ( signalId && ! getObjectById ( signalId , ObjectType . Signal ) ) signalId = null
162- setInspectedState ( {
163- ownerId ,
164- signalId ,
165- treeWalkerOwnerId : getTreeWalkerOwnerId ( ownerId ) ,
166- } )
107+ if ( data == null ) {
108+ setInspectedState ( INSPECTED_STATE_NULL )
109+ } else {
110+ let ownerId = data . ownerId && getObjectById ( data . ownerId , ObjectType . Owner ) && data . ownerId
111+ let signalId = data . signalId && getObjectById ( data . signalId , ObjectType . Signal ) && data . signalId
112+ let treeWalkerOwnerId = getTreeWalkerOwnerId ( ownerId )
113+ setInspectedState ( { ownerId, signalId , treeWalkerOwnerId } )
114+ }
167115 }
168116
169- s . createComputed (
170- defer ( debuggerEnabled , enabled => {
171- if ( ! enabled ) resetInspectedNode ( )
172- } ) ,
173- )
117+ s . createComputed ( defer ( debuggerEnabled , enabled => {
118+ if ( ! enabled ) setInspectedState ( INSPECTED_STATE_NULL )
119+ } ) )
174120
175121 // Computation and signal updates
176122 let node_updates_ids : NodeID [ ] = [ ]
177- let node_updates_timeout = 0
123+ let node_updates_timeout = null as null | Timeout
178124
179125 function pushNodeUpdate ( id : NodeID ) {
180126
181127 node_updates_ids . push ( id )
182128
183- if ( node_updates_timeout === 0 ) {
184- node_updates_timeout = window . setTimeout ( ( ) => {
129+ if ( node_updates_timeout == null ) {
130+ node_updates_timeout = setTimeout ( ( ) => {
185131 emitOutput ( msg ( 'NodeUpdates' , node_updates_ids ) )
186- node_updates_ids = [ ]
187- node_updates_timeout = 0
132+ node_updates_ids = [ ]
133+ node_updates_timeout = null
188134 } )
189135 }
190136 }
@@ -195,7 +141,11 @@ function createDebugger() {
195141 const structure = createStructure ( {
196142 onStructureUpdate ( updates ) {
197143 emitOutput ( msg ( 'StructureUpdates' , updates ) )
198- updateInspectedNode ( )
144+ /** Check if the inspected node doesn't need to change */
145+ setInspectedState ( p => ( {
146+ ...p ,
147+ treeWalkerOwnerId : getTreeWalkerOwnerId ( p . treeWalkerOwnerId ) ,
148+ } ) )
199149 } ,
200150 onNodeUpdate : pushNodeUpdate ,
201151 enabled : debuggerEnabled ,
@@ -206,8 +156,8 @@ function createDebugger() {
206156 //
207157 const inspector = createInspector ( {
208158 enabled : debuggerEnabled ,
209- inspectedOwnerId : inspectedOwnerId ,
210- resetInspectedNode : resetInspectedNode ,
159+ inspectedState : inspectedState ,
160+ resetInspectedNode : ( ) => setInspectedState ( INSPECTED_STATE_NULL ) ,
211161 emit : emitOutput ,
212162 } )
213163
@@ -249,6 +199,14 @@ function createDebugger() {
249199 s . createEffect ( defer ( modules . locatorKeyPressSignal , state => {
250200 emitOutput ( msg ( 'LocatorModeChange' , state ) )
251201 } ) )
202+
203+ console . log ( setup . unowned . signals )
204+ setup . unowned . onSignalAdded = ( ref , idx ) => {
205+ console . log ( 'unowned.onSignalAdded' , ref . deref ( ) , idx )
206+ }
207+ setup . unowned . onSignalRemoved = ( ref , idx ) => {
208+ console . log ( 'unowned.onSignalRemoved' , ref . deref ( ) , idx )
209+ }
252210
253211 function emitInput ( e : InputMessage ) {
254212
@@ -258,7 +216,7 @@ function createDebugger() {
258216 case 'ResetState' : {
259217 // reset all the internal state
260218 s . batch ( ( ) => {
261- resetInspectedNode ( )
219+ setInspectedState ( INSPECTED_STATE_NULL )
262220 currentView = DEFAULT_MAIN_VIEW
263221 structure . resetTreeWalkerMode ( )
264222 locator . setDevtoolsHighlightTarget ( null )
0 commit comments