Skip to content

Commit da3009b

Browse files
committed
fix tests
1 parent 9271b58 commit da3009b

17 files changed

Lines changed: 231 additions & 113 deletions

File tree

.changeset/curly-bikes-play.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
'@tanstack/devtools-event-client': patch
3+
'@tanstack/devtools-client': patch
4+
'@tanstack/devtools-vite': patch
5+
'@tanstack/devtools': patch
6+
---
7+
8+
9+
Number of improvements to various parts of the DevTools:
10+
- Update event client to allow users to disable it
11+
- Allow trigger to be completely hidden
12+
- Add a new package `@tanstack/devtools-client` to allow users to listen to events we emit from Vite.
13+
- Fix bugs inside of the DevTools like plugins being nuked on page refresh.

examples/angular/ssr/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"name": "ssr",
3+
"version": "0.0.0",
4+
"private": true
5+
}

examples/react/basic/src/package-json-panel.tsx

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,17 @@ export const PackageJsonPanel = () => {
1818

1919
useEffect(() => {
2020
devtoolsEventClient.emit('mounted', undefined as any)
21-
const off = devtoolsEventClient.on('ready', (event) => {
22-
setPackageJson(event.payload.packageJson)
21+
const cleanupOutdated = devtoolsEventClient.on("outdated-deps-read", (event) => {
2322
setOutdatedDeps(event.payload.outdatedDeps || {})
2423
})
25-
return off
24+
const cleanupPackageJson = devtoolsEventClient.on("package-json-read", (event) => {
25+
console.log('package-json-read', event)
26+
setPackageJson(event.payload.packageJson)
27+
})
28+
return () => {
29+
cleanupOutdated()
30+
cleanupPackageJson()
31+
}
2632
}, [])
2733

2834
const hasOutdated = Object.keys(outdatedDeps).length > 0
@@ -120,11 +126,11 @@ export const PackageJsonPanel = () => {
120126
}) => {
121127
const info = outdatedDeps[dep] as
122128
| {
123-
current: string
124-
wanted: string
125-
latest: string
126-
type?: 'dependencies' | 'devDependencies'
127-
}
129+
current: string
130+
wanted: string
131+
latest: string
132+
type?: 'dependencies' | 'devDependencies'
133+
}
128134
| undefined
129135
const current = info?.current ?? specified
130136
const latest = info?.latest
@@ -147,11 +153,11 @@ export const PackageJsonPanel = () => {
147153
const UpgradeRowActions = ({ name }: { name: string }) => {
148154
const info = outdatedDeps[name] as
149155
| {
150-
current: string
151-
wanted: string
152-
latest: string
153-
type?: 'dependencies' | 'devDependencies'
154-
}
156+
current: string
157+
wanted: string
158+
latest: string
159+
type?: 'dependencies' | 'devDependencies'
160+
}
155161
| undefined
156162
if (!info) return null
157163
return (
@@ -242,11 +248,11 @@ export const PackageJsonPanel = () => {
242248
{Object.entries(deps || {}).map(([dep, version]) => {
243249
const info = outdatedDeps[dep] as
244250
| {
245-
current: string
246-
wanted: string
247-
latest: string
248-
type?: 'dependencies' | 'devDependencies'
249-
}
251+
current: string
252+
wanted: string
253+
latest: string
254+
type?: 'dependencies' | 'devDependencies'
255+
}
250256
| undefined
251257
const isOutdated = !!info && info.current !== info.latest
252258
return (

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
},
5353
{
5454
"path": "packages/event-bus-client/dist/esm/plugin.js",
55-
"limit": "1 KB"
55+
"limit": "1.1 KB"
5656
}
5757
],
5858
"devDependencies": {
@@ -85,4 +85,4 @@
8585
"@tanstack/solid-devtools": "workspace:*",
8686
"@tanstack/devtools-vite": "workspace:*"
8787
}
88-
}
88+
}

packages/devtools-client/package.json

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,10 @@
4242
"clean": "premove ./build ./dist",
4343
"lint:fix": "eslint ./src --fix",
4444
"test:eslint": "eslint ./src",
45-
"test:lib": "vitest",
45+
"test:lib": "vitest --passWithNoTests",
4646
"test:lib:dev": "pnpm test:lib --watch",
4747
"test:types": "tsc",
4848
"test:build": "publint --strict",
4949
"build": "vite build"
50-
},
51-
"devDependencies": {
52-
"tsup": "^8.5.0",
53-
"tsup-preset-solid": "^2.2.0",
54-
"vite-plugin-solid": "^2.11.8"
5550
}
56-
}
51+
}

packages/devtools-client/src/index.ts

Lines changed: 51 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,58 @@
11
import { EventClient } from '@tanstack/devtools-event-client'
22

3+
export interface PackageJson {
4+
name?: string
5+
version?: string
6+
description?: string
7+
author?: string
8+
license?: string
9+
scripts?: Record<string, string>
10+
keywords?: Array<string>
11+
homepage?: string
12+
repository?:
13+
| string
14+
| {
15+
type: string
16+
url: string
17+
}
18+
bugs?:
19+
| string
20+
| {
21+
url?: string
22+
email?: string
23+
}
24+
readme?: string
25+
packageManager?: string
26+
engines?: Record<string, string>
27+
private?: boolean
28+
type?: 'module' | 'commonjs'
29+
overrides?: Record<string, string>
30+
dependencies?: Record<string, string>
31+
devDependencies?: Record<string, string>
32+
peerDependencies?: Record<string, string>
33+
[key: string]: any
34+
}
35+
36+
export interface OutdatedDeps {
37+
[key: string]: {
38+
current: string
39+
wanted: string
40+
latest: string
41+
dependent: string
42+
location: string
43+
}
44+
}
45+
346
interface EventMap {
447
'tanstack-devtools-core:ready': {
5-
packageJson: {
6-
name?: string
7-
version?: string
8-
dependencies?: Record<string, string>
9-
devDependencies?: Record<string, string>
10-
peerDependencies?: Record<string, string>
11-
[key: string]: any
12-
} | null
13-
outdatedDeps: Record<
14-
string,
15-
{
16-
current: string
17-
wanted: string
18-
latest: string
19-
dependent: string
20-
location: string
21-
}
22-
> | null
48+
packageJson: PackageJson | null
49+
outdatedDeps: OutdatedDeps | null
50+
}
51+
'tanstack-devtools-core:outdated-deps-read': {
52+
outdatedDeps: OutdatedDeps | null
53+
}
54+
'tanstack-devtools-core:package-json-read': {
55+
packageJson: PackageJson | null
2356
}
2457
'tanstack-devtools-core:mounted': void
2558
}

packages/devtools-client/tsconfig.json

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11
{
2-
"compilerOptions": {
3-
"jsx": "react-jsx",
4-
"jsxImportSource": "react"
5-
},
62
"extends": "../../tsconfig.json",
73
"include": [
84
"src",

packages/devtools-vite/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
"@babel/traverse": "^7.28.4",
5858
"@babel/types": "^7.28.4",
5959
"@tanstack/devtools-client": "workspace:*",
60-
"@tanstack/devtools-event-client": "workspace:*",
6160
"@tanstack/devtools-event-bus": "workspace:*",
6261
"chalk": "^5.6.2",
6362
"launch-editor": "^2.11.1"
@@ -68,4 +67,4 @@
6867
"@types/babel__traverse": "^7.28.0",
6968
"happy-dom": "^18.0.1"
7069
}
71-
}
70+
}

packages/devtools-vite/src/plugin.ts

Lines changed: 60 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { DEFAULT_EDITOR_CONFIG, handleOpenSource } from './editor'
1212
import { removeDevtools } from './remove-devtools'
1313
import { addSourceToJsx } from './inject-source'
1414
import { enhanceConsoleLog } from './enhance-logs'
15+
import type { OutdatedDeps } from '@tanstack/devtools-client'
1516
import type { Plugin } from 'vite'
1617
import type { EditorConfig } from './editor'
1718
import type { ServerEventBusConfig } from '@tanstack/devtools-event-bus/server'
@@ -24,7 +25,13 @@ export type TanStackDevtoolsViteConfig = {
2425
/**
2526
* The configuration options for the server event bus
2627
*/
27-
eventBusConfig?: ServerEventBusConfig
28+
eventBusConfig?: ServerEventBusConfig & {
29+
/**
30+
* Should the server event bus be enabled or not
31+
* @default true
32+
*/
33+
enabled?: boolean // defaults to true
34+
}
2835
/**
2936
* Configuration for enhanced logging.
3037
*/
@@ -61,33 +68,33 @@ export type TanStackDevtoolsViteConfig = {
6168
export const defineDevtoolsConfig = (config: TanStackDevtoolsViteConfig) =>
6269
config
6370

64-
export const devtools = async (
65-
args?: TanStackDevtoolsViteConfig,
66-
): Promise<Array<Plugin>> => {
71+
const emitOutdatedDeps = async () => {
72+
return await new Promise<OutdatedDeps | null>((resolve) => {
73+
exec('npm outdated --json', (_, stdout) => {
74+
// npm outdated exits with code 1 if there are outdated packages, but still outputs valid JSON
75+
if (stdout) {
76+
const newOutdatedDeps = tryParseJson<OutdatedDeps>(stdout)
77+
if (!newOutdatedDeps) {
78+
return
79+
}
80+
devtoolsEventClient.emit('outdated-deps-read', {
81+
outdatedDeps: newOutdatedDeps,
82+
})
83+
resolve(newOutdatedDeps)
84+
}
85+
})
86+
})
87+
}
88+
89+
export const devtools = (args?: TanStackDevtoolsViteConfig): Array<Plugin> => {
6790
let port = 5173
6891
const logging = args?.logging ?? true
6992
const enhancedLogsConfig = args?.enhancedLogs ?? { enabled: true }
7093
const injectSourceConfig = args?.injectSource ?? { enabled: true }
7194
const removeDevtoolsOnBuild = args?.removeDevtoolsOnBuild ?? true
95+
const serverBusEnabled = args?.eventBusConfig?.enabled ?? true
7296
const bus = new ServerEventBus(args?.eventBusConfig)
73-
const packageJson = await readPackageJson()
74-
let outdatedDeps: any = null
75-
exec('npm outdated --json', (_, stdout) => {
76-
// npm outdated exits with code 1 if there are outdated packages, but still outputs valid JSON
77-
if (stdout) {
78-
outdatedDeps = tryParseJson(stdout)
79-
devtoolsEventClient.emit('ready', {
80-
packageJson,
81-
outdatedDeps,
82-
})
83-
}
84-
})
85-
devtoolsEventClient.on('mounted', () => {
86-
devtoolsEventClient.emit('ready', {
87-
packageJson,
88-
outdatedDeps,
89-
})
90-
})
97+
9198
return [
9299
{
93100
enforce: 'pre',
@@ -142,7 +149,9 @@ export const devtools = async (
142149
return config.mode === 'development'
143150
},
144151
configureServer(server) {
145-
bus.start()
152+
if (serverBusEnabled) {
153+
bus.start()
154+
}
146155

147156
server.middlewares.use((req, _res, next) => {
148157
if (req.socket.localPort && req.socket.localPort !== port) {
@@ -208,12 +217,37 @@ export const devtools = async (
208217
},
209218
},
210219
{
211-
name: '@tanstack/devtools:listener',
220+
name: '@tanstack/devtools:event-client-setup',
221+
apply(config, { command }) {
222+
if (
223+
process.env.CI ||
224+
process.env.NODE_ENV !== 'development' ||
225+
command !== 'serve'
226+
)
227+
return false
228+
return config.mode === 'development'
229+
},
230+
async configureServer() {
231+
const packageJson = await readPackageJson()
232+
const outdatedDeps = emitOutdatedDeps().then((deps) => deps)
233+
234+
// whenever a client mounts we send all the current info to the subscribers
235+
devtoolsEventClient.on('mounted', async () => {
236+
devtoolsEventClient.emit('outdated-deps-read', {
237+
outdatedDeps: await outdatedDeps,
238+
})
239+
devtoolsEventClient.emit('package-json-read', {
240+
packageJson,
241+
})
242+
})
243+
},
212244
async handleHotUpdate({ file }) {
213245
if (file.endsWith('package.json')) {
214-
console.log(packageJson)
215246
const newPackageJson = await readPackageJson()
216-
console.log(newPackageJson)
247+
devtoolsEventClient.emit('package-json-read', {
248+
packageJson: newPackageJson,
249+
})
250+
emitOutdatedDeps()
217251
}
218252
},
219253
},

0 commit comments

Comments
 (0)