Skip to content

Commit cd277a6

Browse files
committed
Remove createEventHub from controller.tsx
1 parent 5065a08 commit cd277a6

File tree

4 files changed

+69
-34
lines changed

4 files changed

+69
-34
lines changed

packages/frontend/src/controller.tsx

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import {SECOND} from '@solid-primitives/date'
2-
import {type EventBus, createEventBus, createEventHub} from '@solid-primitives/event-bus'
2+
import {createEventBus} from '@solid-primitives/event-bus'
33
import {debounce} from '@solid-primitives/scheduled'
44
import {defer} from '@solid-primitives/utils'
55
import {type Debugger, DebuggerModule, DevtoolsMainView, type NodeID} from '@solid-devtools/debugger/types'
@@ -10,41 +10,50 @@ import createInspector from './inspector.tsx'
1010
import {type Structure} from './structure.tsx'
1111
import * as ui from './ui/index.ts'
1212

13-
// TODO: add to solid-primitives/event-bus
14-
type ToEventBusChannels<T extends Record<string, any>> = {
15-
[K in keyof T]: EventBus<T[K]>
16-
}
17-
18-
export type InputMessage = {
13+
export type Input_Message = {
1914
[K in keyof Debugger.OutputChannels]: {
2015
name: K,
2116
details: Debugger.OutputChannels[K],
2217
}
2318
}[keyof Debugger.OutputChannels]
24-
export type InputListener = (e: InputMessage) => void
19+
export type Input_Listener = (e: Input_Message) => void
20+
21+
export type Output_Message = {
22+
[K in keyof Debugger.InputChannels]: {
23+
name: K,
24+
details: Debugger.InputChannels[K],
25+
}
26+
}[keyof Debugger.InputChannels]
27+
export type Output_Listener = (e: Output_Message) => void
2528

2629
function createDebuggerBridge() {
2730

28-
const output = createEventHub<ToEventBusChannels<Debugger.InputChannels>>($ => ({
29-
ResetState: $(),
30-
InspectNode: $(),
31-
InspectValue: $(),
32-
HighlightElementChange: $(),
33-
OpenLocation: $(),
34-
TreeViewModeChange: $(),
35-
ViewChange: $(),
36-
ToggleModule: $(),
37-
}))
31+
let output_listeners: Output_Listener[] = []
32+
const output = {
33+
listen(listener: Output_Listener) {
34+
output_listeners.push(listener)
35+
s.onCleanup(() => {
36+
mutate_remove(output_listeners, listener)
37+
})
38+
},
39+
emit(e: Output_Message) {
40+
s.batch(() => {
41+
for (let fn of output_listeners) {
42+
fn(e)
43+
}
44+
})
45+
},
46+
}
3847

39-
let input_listeners: InputListener[] = []
48+
let input_listeners: Input_Listener[] = []
4049
const input = {
41-
listen(listener: InputListener) {
50+
listen(listener: Input_Listener) {
4251
input_listeners.push(listener)
4352
s.onCleanup(() => {
4453
mutate_remove(input_listeners, listener)
4554
})
4655
},
47-
emit(e: InputMessage) {
56+
emit(e: Input_Message) {
4857
s.batch(() => {
4958
for (let fn of input_listeners) {
5059
fn(e)
@@ -163,9 +172,12 @@ function createController(bridge: DebuggerBridge, options: DevtoolsOptions) {
163172
const locatorEnabled = () => devtoolsLocatorEnabled() || clientLocatorEnabled()
164173

165174
// send devtools locator state
166-
s.createEffect(defer(devtoolsLocatorEnabled, enabled =>
167-
bridge.output.ToggleModule.emit({module: DebuggerModule.Locator, enabled}),
168-
))
175+
s.createEffect(defer(devtoolsLocatorEnabled, enabled => {
176+
bridge.output.emit({
177+
name: 'ToggleModule',
178+
details: {module: DebuggerModule.Locator, enabled}
179+
})
180+
}))
169181

170182
function setClientLocatorState(enabled: boolean) {
171183
s.batch(() => {
@@ -184,7 +196,12 @@ function createController(bridge: DebuggerBridge, options: DevtoolsOptions) {
184196
} | null>(null, {equals: (a, b) => a?.id === b?.id})
185197

186198
// highlight hovered element
187-
s.createEffect(defer(extHoveredNode, bridge.output.HighlightElementChange.emit))
199+
s.createEffect(defer(extHoveredNode, node => {
200+
bridge.output.emit({
201+
name: 'HighlightElementChange',
202+
details: node,
203+
})
204+
}))
188205

189206
const hoveredId = s.createMemo(() => {
190207
const extNode = extHoveredNode()
@@ -213,7 +230,9 @@ function createController(bridge: DebuggerBridge, options: DevtoolsOptions) {
213230
setOpenedView(view)
214231
}
215232

216-
s.createEffect(defer(openedView, bridge.output.ViewChange.emit))
233+
s.createEffect(defer(openedView, view => {
234+
bridge.output.emit({name: 'ViewChange', details: view})
235+
}))
217236

218237
//
219238
// Node updates - signals and computations updating

packages/frontend/src/dgraph.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,16 @@ export function createDependencyGraph() {
2020
}
2121
})
2222

23-
bridge.output.ToggleModule.emit({module: debug.DebuggerModule.Dgraph, enabled: true})
24-
s.onCleanup(() =>
25-
bridge.output.ToggleModule.emit({module: debug.DebuggerModule.Dgraph, enabled: false}),
26-
)
23+
bridge.output.emit({
24+
name: 'ToggleModule',
25+
details: {module: debug.DebuggerModule.Dgraph, enabled: true},
26+
})
27+
s.onCleanup(() => {
28+
bridge.output.emit({
29+
name: 'ToggleModule',
30+
details: {module: debug.DebuggerModule.Dgraph, enabled: false},
31+
})
32+
})
2733

2834
function inspectNode(id: debug.NodeID) {
2935
const node = graph()?.[id]

packages/frontend/src/inspector.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,9 @@ export default function createInspector({bridge}: {bridge: DebuggerBridge}) {
200200
}
201201

202202
// sync inspected node with the debugger
203-
s.createEffect(defer(inspectedNode, bridge.output.InspectNode.emit))
203+
s.createEffect(defer(inspectedNode, node => {
204+
bridge.output.emit({name: 'InspectNode', details: node})
205+
}))
204206

205207
//
206208
// Inspector state
@@ -344,14 +346,20 @@ export default function createInspector({bridge}: {bridge: DebuggerBridge}) {
344346
function inspectValueItem(item: Inspector.ValueItem, selected?: boolean): void {
345347
if (selected !== undefined && item.extended === selected) return
346348
selected = item.setExtended(p => selected ?? !p)
347-
bridge.output.InspectValue.emit({id: item.itemId, selected})
349+
bridge.output.emit({
350+
name: 'InspectValue',
351+
details: {id: item.itemId, selected},
352+
})
348353
}
349354

350355
//
351356
// LOCATION
352357
//
353358
function openComponentLocation(): void {
354-
bridge.output.OpenLocation.emit()
359+
bridge.output.emit({
360+
name: 'OpenLocation',
361+
details: undefined,
362+
})
355363
}
356364

357365
return {

packages/frontend/src/structure.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,9 @@ export function createStructure() {
162162
})
163163

164164
// TREE VIEW MODE
165-
s.createEffect(defer(mode, bridge.output.TreeViewModeChange.emit))
165+
s.createEffect(defer(mode, mode => {
166+
bridge.output.emit({name: 'TreeViewModeChange', details: mode})
167+
}))
166168

167169
return {
168170
state,

0 commit comments

Comments
 (0)