Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/tidy-tools-reconnect.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'@tanstack/pacer-devtools': patch
'@tanstack/pacer': patch
---

Fix Pacer Devtools discovering utilities and receiving their updates when the
devtools panel mounts after the event client has exhausted its connection
retries.
2 changes: 1 addition & 1 deletion docs/reference/functions/emitChange.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ title: emitChange
function emitChange<TEvent>(event, instance): void;
```

Defined in: [event-client.ts:117](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L117)
Defined in: [event-client.ts:173](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L173)

## Type Parameters

Expand Down
2 changes: 1 addition & 1 deletion docs/reference/functions/getPacerDevtoolsInstance.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ title: getPacerDevtoolsInstance
function getPacerDevtoolsInstance(key): unknown;
```

Defined in: [event-client.ts:25](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L25)
Defined in: [event-client.ts:53](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L53)

## Parameters

Expand Down
46 changes: 23 additions & 23 deletions docs/reference/interfaces/PacerEventMap.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ title: PacerEventMap

# Interface: PacerEventMap

Defined in: [event-client.ts:66](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L66)
Defined in: [event-client.ts:122](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L122)

Suffix-only keys: EventClient prepends `pluginId:` (`pacer:`) at runtime
for `emit` / `on`. Wire `type` values are `pacer:${key}`.
Expand All @@ -18,7 +18,7 @@ for `emit` / `on`. Wire `type` values are `pacer:${key}`.
AsyncBatcher: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:78](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L78)
Defined in: [event-client.ts:134](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L134)

***

Expand All @@ -28,7 +28,7 @@ Defined in: [event-client.ts:78](https://github.com/TanStack/pacer/blob/main/pac
AsyncDebouncer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:79](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L79)
Defined in: [event-client.ts:135](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L135)

***

Expand All @@ -38,7 +38,7 @@ Defined in: [event-client.ts:79](https://github.com/TanStack/pacer/blob/main/pac
AsyncQueuer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:80](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L80)
Defined in: [event-client.ts:136](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L136)

***

Expand All @@ -48,7 +48,7 @@ Defined in: [event-client.ts:80](https://github.com/TanStack/pacer/blob/main/pac
AsyncRateLimiter: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:81](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L81)
Defined in: [event-client.ts:137](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L137)

***

Expand All @@ -58,7 +58,7 @@ Defined in: [event-client.ts:81](https://github.com/TanStack/pacer/blob/main/pac
AsyncRetryer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:82](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L82)
Defined in: [event-client.ts:138](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L138)

***

Expand All @@ -68,7 +68,7 @@ Defined in: [event-client.ts:82](https://github.com/TanStack/pacer/blob/main/pac
AsyncThrottler: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:83](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L83)
Defined in: [event-client.ts:139](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L139)

***

Expand All @@ -78,7 +78,7 @@ Defined in: [event-client.ts:83](https://github.com/TanStack/pacer/blob/main/pac
Batcher: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:84](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L84)
Defined in: [event-client.ts:140](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L140)

***

Expand All @@ -88,7 +88,7 @@ Defined in: [event-client.ts:84](https://github.com/TanStack/pacer/blob/main/pac
d-AsyncBatcher: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:67](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L67)
Defined in: [event-client.ts:123](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L123)

***

Expand All @@ -98,7 +98,7 @@ Defined in: [event-client.ts:67](https://github.com/TanStack/pacer/blob/main/pac
d-AsyncDebouncer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:68](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L68)
Defined in: [event-client.ts:124](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L124)

***

Expand All @@ -108,7 +108,7 @@ Defined in: [event-client.ts:68](https://github.com/TanStack/pacer/blob/main/pac
d-AsyncQueuer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:69](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L69)
Defined in: [event-client.ts:125](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L125)

***

Expand All @@ -118,7 +118,7 @@ Defined in: [event-client.ts:69](https://github.com/TanStack/pacer/blob/main/pac
d-AsyncRateLimiter: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:70](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L70)
Defined in: [event-client.ts:126](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L126)

***

Expand All @@ -128,7 +128,7 @@ Defined in: [event-client.ts:70](https://github.com/TanStack/pacer/blob/main/pac
d-AsyncRetryer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:71](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L71)
Defined in: [event-client.ts:127](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L127)

***

Expand All @@ -138,7 +138,7 @@ Defined in: [event-client.ts:71](https://github.com/TanStack/pacer/blob/main/pac
d-AsyncThrottler: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:72](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L72)
Defined in: [event-client.ts:128](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L128)

***

Expand All @@ -148,7 +148,7 @@ Defined in: [event-client.ts:72](https://github.com/TanStack/pacer/blob/main/pac
d-Batcher: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:73](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L73)
Defined in: [event-client.ts:129](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L129)

***

Expand All @@ -158,7 +158,7 @@ Defined in: [event-client.ts:73](https://github.com/TanStack/pacer/blob/main/pac
d-Debouncer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:74](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L74)
Defined in: [event-client.ts:130](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L130)

***

Expand All @@ -168,7 +168,7 @@ Defined in: [event-client.ts:74](https://github.com/TanStack/pacer/blob/main/pac
d-Queuer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:75](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L75)
Defined in: [event-client.ts:131](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L131)

***

Expand All @@ -178,7 +178,7 @@ Defined in: [event-client.ts:75](https://github.com/TanStack/pacer/blob/main/pac
d-RateLimiter: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:76](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L76)
Defined in: [event-client.ts:132](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L132)

***

Expand All @@ -188,7 +188,7 @@ Defined in: [event-client.ts:76](https://github.com/TanStack/pacer/blob/main/pac
d-Throttler: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:77](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L77)
Defined in: [event-client.ts:133](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L133)

***

Expand All @@ -198,7 +198,7 @@ Defined in: [event-client.ts:77](https://github.com/TanStack/pacer/blob/main/pac
Debouncer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:85](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L85)
Defined in: [event-client.ts:141](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L141)

***

Expand All @@ -208,7 +208,7 @@ Defined in: [event-client.ts:85](https://github.com/TanStack/pacer/blob/main/pac
Queuer: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:86](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L86)
Defined in: [event-client.ts:142](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L142)

***

Expand All @@ -218,7 +218,7 @@ Defined in: [event-client.ts:86](https://github.com/TanStack/pacer/blob/main/pac
RateLimiter: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:87](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L87)
Defined in: [event-client.ts:143](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L143)

***

Expand All @@ -228,4 +228,4 @@ Defined in: [event-client.ts:87](https://github.com/TanStack/pacer/blob/main/pac
Throttler: PacerDevtoolsWirePayload;
```

Defined in: [event-client.ts:88](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L88)
Defined in: [event-client.ts:144](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L144)
2 changes: 1 addition & 1 deletion docs/reference/type-aliases/PacerEventName.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ title: PacerEventName
type PacerEventName = keyof PacerEventMap;
```

Defined in: [event-client.ts:91](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L91)
Defined in: [event-client.ts:147](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L147)
2 changes: 1 addition & 1 deletion docs/reference/variables/pacerEventClient.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ title: pacerEventClient
const pacerEventClient: PacerEventClient;
```

Defined in: [event-client.ts:129](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L129)
Defined in: [event-client.ts:189](https://github.com/TanStack/pacer/blob/main/packages/pacer/src/event-client.ts#L189)
2 changes: 1 addition & 1 deletion packages/pacer-devtools/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
"src"
],
"peerDependencies": {
"@tanstack/pacer": ">=0.16.4"
"@tanstack/pacer": ">=0.21.2"
},
"dependencies": {
"@tanstack/devtools-ui": "0.5.2",
Expand Down
74 changes: 42 additions & 32 deletions packages/pacer-devtools/src/PacerContextProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { createContext, createEffect, onCleanup, useContext } from 'solid-js'
import {
getPacerDevtoolsInstance,
pacerEventClient,
subscribeToPacerDevtoolsInstances,
} from '@tanstack/pacer/event-client'
import type {
AsyncBatcher,
Expand Down Expand Up @@ -56,13 +57,8 @@ const PacerDevtoolsContext = createContext<
type UtilListKey = Exclude<keyof PacerDevtoolsContextType, 'lastUpdatedByKey'>

/**
* Match TanStack Form devtools: subscribe with {@link pacerEventClient.on} per
* event suffix so the same `pacer:${suffix}` channel the library emits on is
* observed. `onAllPluginEvents` only sees `tanstack-devtools-global`, which is
* not always relayed the same way by the shell.
*
* `d-*` suffixes are used when the devtools panel pushes state back (see
* ActionButtons); those must update the panel store too.
* Bus subscriptions preserve relayed devtools events. The instance subscription
* below additionally replays same-runtime utilities when this provider mounts.
*/
const PACER_DEVTOOLS_UTIL_EVENTS: Array<{
listKey: UtilListKey
Expand Down Expand Up @@ -116,41 +112,55 @@ export function PacerContextProvider(props: { children: any }) {
)

createEffect(() => {
const cleanups: Array<() => void> = []
const updateInstance = (
event: PacerEventName,
key: string,
instance: unknown,
) => {
if (!instance || typeof instance !== 'object') return

for (const { listKey, suffixes } of PACER_DEVTOOLS_UTIL_EVENTS) {
for (const suffix of suffixes) {
cleanups.push(
pacerEventClient.on(suffix, (e) => {
const payload = e.payload
const key = payload.key
if (!key) return
const eventConfig = PACER_DEVTOOLS_UTIL_EVENTS.find(({ suffixes }) =>
suffixes.includes(event),
)
if (!eventConfig) return

setStore(
produce((draft) => {
const list = draft[eventConfig.listKey] as Array<{ key: string }>
const index = list.findIndex((item) => item.key === key)
const inst = instance as { key: string }
if (index !== -1) {
list[index] = inst as (typeof list)[number]
} else {
list.push(inst as (typeof list)[number])
}
draft.lastUpdatedByKey[key] = Date.now()
}),
)
}

const instance = getPacerDevtoolsInstance(key)
if (!instance || typeof instance !== 'object') return
const cleanups = [
subscribeToPacerDevtoolsInstances(({ event, key, instance }) => {
updateInstance(event, key, instance)
}),
]

setStore(
produce((draft) => {
const list = draft[listKey] as Array<{ key: string }>
const index = list.findIndex((item) => item.key === key)
const inst = instance as { key: string }
if (index !== -1) {
list[index] = inst as (typeof list)[number]
} else {
list.push(inst as (typeof list)[number])
}
draft.lastUpdatedByKey[key] = Date.now()
}),
for (const { suffixes } of PACER_DEVTOOLS_UTIL_EVENTS) {
for (const suffix of suffixes) {
cleanups.push(
pacerEventClient.on(suffix, ({ payload }) => {
updateInstance(
suffix,
payload.key,
getPacerDevtoolsInstance(payload.key),
)
}),
)
}
}

onCleanup(() => {
for (const cleanup of cleanups) {
cleanup()
}
cleanups.forEach((cleanup) => cleanup())
})
})
return (
Expand Down
7 changes: 0 additions & 7 deletions packages/pacer-devtools/tests/index.test.ts

This file was deleted.

Loading
Loading