Skip to content

Commit e124870

Browse files
committed
chore: fix tests
1 parent f3b4ccf commit e124870

File tree

3 files changed

+56
-38
lines changed

3 files changed

+56
-38
lines changed

packages/event-bus-client/src/plugin.ts

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ type AllDevtoolsEvents<TEventMap extends Record<string, any>> = {
1515
export class EventClient<
1616
TEventMap extends Record<string, any>,
1717
TPluginId extends string = TEventMap extends Record<infer P, any>
18-
? P extends `${infer Id}:${string}`
19-
? Id
20-
: never
21-
: never,
18+
? P extends `${infer Id}:${string}`
19+
? Id
20+
: never
21+
: never,
2222
> {
2323
#pluginId: TPluginId
2424
#eventTarget: () => EventTarget
@@ -29,7 +29,18 @@ export class EventClient<
2929
#connectEveryMs: number
3030
#retryCount = 0
3131
#maxRetries = 5
32-
32+
#onConnected = () => {
33+
this.debugLog('Connected to event bus')
34+
this.#connected = true
35+
this.debugLog('Emitting queued events', this.#queuedEvents)
36+
this.#queuedEvents.forEach((event) => this.emitEventToBus(event))
37+
this.#queuedEvents = []
38+
this.stopConnectLoop()
39+
this.#eventTarget().removeEventListener(
40+
'tanstack-connect-success',
41+
this.#onConnected,
42+
)
43+
}
3344
#connectFunction = () => {
3445
if (this.#retryCount < this.#maxRetries) {
3546
this.#retryCount++
@@ -41,8 +52,9 @@ export class EventClient<
4152
this.#connectFunction,
4253
)
4354
this.debugLog('Max retries reached, giving up on connection')
44-
clearInterval(this.#connectIntervalId!)
55+
this.stopConnectLoop()
4556
}
57+
4658
constructor({
4759
pluginId,
4860
debug = false,
@@ -58,28 +70,22 @@ export class EventClient<
5870
this.#connected = false
5971
this.#connectIntervalId = null
6072
this.#connectEveryMs = 600
73+
74+
this.#eventTarget().addEventListener(
75+
'tanstack-connect-success',
76+
this.#onConnected,
77+
)
78+
this.#connectFunction()
6179
this.startConnectLoop()
6280
}
6381

82+
onConnected(cb: () => void) {
83+
this.#eventTarget().addEventListener('tanstack-connect-success', cb)
84+
}
85+
6486
private startConnectLoop() {
65-
if (this.#connectIntervalId !== null) return
87+
if (this.#connectIntervalId !== null || this.#connected) return
6688
this.debugLog(`Starting connect loop (every ${this.#connectEveryMs}ms)`)
67-
const onConnected = () => {
68-
this.debugLog('Connected to event bus')
69-
this.#connected = true
70-
this.debugLog('Emitting queued events', this.#queuedEvents)
71-
this.#queuedEvents.forEach((event) => this.emitEventToBus(event))
72-
this.#queuedEvents = []
73-
this.stopConnectLoop()
74-
this.#eventTarget().removeEventListener(
75-
'tanstack-connect-success',
76-
onConnected,
77-
)
78-
}
79-
this.#eventTarget().addEventListener(
80-
'tanstack-connect-success',
81-
onConnected,
82-
)
8389

8490
this.#connectIntervalId = setInterval(
8591
this.#connectFunction,
@@ -107,7 +113,7 @@ export class EventClient<
107113
typeof globalThis !== 'undefined' &&
108114
globalThis.__TANSTACK_EVENT_TARGET__
109115
) {
110-
this.debugLog('Using global event target')
116+
this.debugLog('Using global event target',)
111117
return globalThis.__TANSTACK_EVENT_TARGET__
112118
}
113119
// CLient event target is the window object
@@ -137,8 +143,8 @@ export class EventClient<
137143
keyof TEventMap,
138144
`${TPluginId & string}:${string}`
139145
> extends `${TPluginId & string}:${infer S}`
140-
? S
141-
: never,
146+
? S
147+
: never,
142148
>(
143149
eventSuffix: TSuffix,
144150
payload: TEventMap[`${TPluginId & string}:${TSuffix}`],
@@ -165,8 +171,8 @@ export class EventClient<
165171
keyof TEventMap,
166172
`${TPluginId & string}:${string}`
167173
> extends `${TPluginId & string}:${infer S}`
168-
? S
169-
: never,
174+
? S
175+
: never,
170176
>(
171177
eventSuffix: TSuffix,
172178
cb: (

packages/event-bus-client/tests/index.test.ts

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
import { describe, expect, it, vi } from 'vitest'
2-
import { EventClient } from '../src'
1+
import { describe, expect, it, vi, } from 'vitest'
32
import { ClientEventBus } from '@tanstack/devtools-event-bus/client'
3+
import { EventClient } from '../src'
44

55
// start the client bus for testing
66
new ClientEventBus().start()
77
// client bus uses window to dispatch events
88
const clientBusEmitTarget = window
9-
109
describe('EventClient', () => {
1110
describe('debug config', () => {
12-
it('should emit logs when debug set to true and have the correct plugin name', () => {
11+
it('should emit logs when debug set to true and have the correct plugin name', async () => {
1312
const consoleSpy = vi.spyOn(console, 'log')
1413
new EventClient({
1514
debug: true,
@@ -35,15 +34,25 @@ describe('EventClient', () => {
3534
describe('getGlobalTarget', () => {
3635
it('if the global target is set it should re-use it for emitting/listening/removing of events', () => {
3736
const target = new EventTarget()
38-
globalThis.__TANSTACK_EVENT_TARGET__ = target
37+
const handleSuccessConnection = vi.fn()
38+
target.addEventListener("tanstack-connect", () => {
39+
target.dispatchEvent(
40+
new CustomEvent("tanstack-connect-success")
41+
)
42+
})
43+
globalThis.__TANSTACK_EVENT_TARGET__ = null
44+
45+
vi.spyOn(globalThis, '__TANSTACK_EVENT_TARGET__', 'get').mockImplementation(() => {
46+
return target
47+
})
3948
const client = new EventClient({
4049
debug: false,
4150
pluginId: 'test',
4251
})
4352
const targetEmitSpy = vi.spyOn(target, 'dispatchEvent')
4453
const targetListenSpy = vi.spyOn(target, 'addEventListener')
4554
const targetRemoveSpy = vi.spyOn(target, 'removeEventListener')
46-
const cleanup = client.on('test:event', () => {})
55+
const cleanup = client.on('test:event', () => { })
4756
cleanup()
4857
client.emit('test:event', { foo: 'bar' })
4958
expect(targetEmitSpy).toHaveBeenCalledWith(expect.any(Event))
@@ -55,9 +64,9 @@ describe('EventClient', () => {
5564
expect.any(String),
5665
expect.any(Function),
5766
)
58-
globalThis.__TANSTACK_EVENT_TARGET__ = null
67+
vi.resetAllMocks()
68+
target.removeEventListener("tanstack-connect", handleSuccessConnection)
5969
})
60-
6170
it('should use the window object if the globalTarget is not set for emitting/listening/removing of events', () => {
6271
const target = window
6372
const client = new EventClient({
@@ -67,7 +76,7 @@ describe('EventClient', () => {
6776
const targetEmitSpy = vi.spyOn(target, 'dispatchEvent')
6877
const targetListenSpy = vi.spyOn(target, 'addEventListener')
6978
const targetRemoveSpy = vi.spyOn(target, 'removeEventListener')
70-
const cleanup = client.on('test:event', () => {})
79+
const cleanup = client.on('test:event', () => { })
7180
cleanup()
7281
client.emit('test:event', { foo: 'bar' })
7382
expect(targetEmitSpy).toHaveBeenCalledWith(expect.any(Event))
@@ -80,6 +89,7 @@ describe('EventClient', () => {
8089
expect.any(Function),
8190
)
8291
})
92+
8393
})
8494

8595
describe('on', () => {
@@ -90,7 +100,7 @@ describe('EventClient', () => {
90100
})
91101

92102
const eventBusSpy = vi.spyOn(clientBusEmitTarget, 'addEventListener')
93-
client.on('event', () => {})
103+
client.on('event', () => { })
94104
expect(eventBusSpy).toHaveBeenCalledWith(
95105
'test:event',
96106
expect.any(Function),

pnpm-lock.yaml

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)