Skip to content

Commit 87dac4e

Browse files
committed
feat: extract viteDevBridge into a standalone @devframes/vite package
Move packages/devframe/src/helpers/vite.ts into its own package, @devframes/vite, mirroring the existing @devframes/next/@devframes/nuxt integration-package pattern. Being a separate package, it can now depend on vite directly — viteDevBridge's return type and configureServer hook are typed against vite's real Plugin/ViteDevServer surface instead of a hand-rolled duck-typed interface, while devframe core stays free of any vite dependency. - devframe/internal gains diagnostics/resolveBasePath/normalizeBasePath re-exports so the new package reuses core's DF0033 diagnostic and mount-base logic instead of duplicating it. - The 8 built-in plugins with a vite.ts (inspect, messages, terminals, code-server, og, assets, data-inspector, a11y) and @devframes/nuxt now import viteDevBridge from @devframes/vite. - Updates turbo.json's build graph, alias.ts/tsconfig.base.json, vitest.config.ts projects, knip.jsonc, docs, and the tsnapi API snapshots accordingly. This PR was created with the help of an agent.
1 parent b9f5c2f commit 87dac4e

43 files changed

Lines changed: 466 additions & 92 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

alias.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ export const alias = {
3939
'devframe/adapters/cac': r('devframe/src/adapters/cac.ts'),
4040
'devframe/adapters/dev': r('devframe/src/adapters/dev.ts'),
4141
'devframe/adapters/build': r('devframe/src/adapters/build.ts'),
42-
'devframe/helpers/vite': r('devframe/src/helpers/vite.ts'),
4342
'devframe/adapters/embedded': r('devframe/src/adapters/embedded.ts'),
4443
'devframe/initiate': r('devframe/src/adapters/initiate.ts'),
4544
'devframe/adapters/mcp': r('devframe/src/adapters/mcp/index.ts'),
@@ -54,6 +53,7 @@ export const alias = {
5453
'@devframes/nuxt': r('nuxt/src/index.ts'),
5554
'@devframes/next/client': r('next/src/client.tsx'),
5655
'@devframes/next': r('next/src/index.ts'),
56+
'@devframes/vite': r('vite/src/index.ts'),
5757
'@devframes/json-render/core': r('json-render/src/core.ts'),
5858
'@devframes/json-render/hub': r('json-render/src/hub.ts'),
5959
'@devframes/json-render/node': r('json-render/src/node/index.ts'),

docs/errors/DF0033.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ outline: deep
1010
1111
## Cause
1212

13-
`viteDevBridge({ devMiddleware })` could not bring up the bridge dev server that pairs a host-served SPA (Vite, Nuxt, Astro, etc.) with devframe's RPC backend. Common reasons:
13+
`viteDevBridge({ devMiddleware })` (from `@devframes/vite`) could not bring up the bridge dev server that pairs a host-served SPA (Vite, Nuxt, Astro, etc.) with devframe's RPC backend. Common reasons:
1414

1515
- The preferred port is in use and no fallback range was configured.
1616
- Calling `def.setup(ctx)` threw — the devframe's own setup logic surfaced an error.
@@ -26,4 +26,4 @@ This is a soft warning — the surrounding Vite dev server keeps running, but th
2626

2727
## Source
2828

29-
- [`packages/devframe/src/helpers/vite.ts`](https://github.com/devframes/devframe/blob/main/packages/devframe/src/helpers/vite.ts)`viteDevBridge({ devMiddleware })` logs `DF0033` when port resolution or `createDevServer` throws during `configureServer`.
29+
- [`packages/vite/src/index.ts`](https://github.com/devframes/devframe/blob/main/packages/vite/src/index.ts)`viteDevBridge({ devMiddleware })` logs `DF0033` when port resolution or `createDevServer` throws during `configureServer`.

docs/helpers/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Helpers are the optional, opt-in surface around the core `defineDevframe` API: s
99
| Helper | Entry | What it does |
1010
|--------|-------|--------------|
1111
| [Utilities](./utilities) | `devframe/utils/*` | Bundled small utilities — terminal colors, hashing, editor launch, structured-clone serialization, and more. |
12-
| [Vite Bridge](./vite-bridge) | `devframe/helpers/vite` | Vite plugin for mounting a devframe inside any Vite-based host (Astro, SolidStart, plain Vite). |
12+
| [Vite Bridge](./vite-bridge) | `@devframes/vite` | Vite plugin for mounting a devframe inside any Vite-based host (Astro, SolidStart, plain Vite). |
1313
| [Nuxt Module](./nuxt) | `@devframes/nuxt` | Nuxt module that wires a Nuxt SPA as a devframe client and serves the dev-time RPC bridge. |
1414
| [Next Helper](./next) | `@devframes/next` | Route-handler host + React client for mounting devframes inside a Next.js App Router app (experimental). |
1515
| [Common RPC Functions](./common-rpc-functions) | `devframe/recipes/common-rpc-functions` | Prebuilt RPC actions for "open in editor" and "reveal in Finder". |

docs/helpers/vite-bridge.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ A thin Vite plugin for mounting a devframe inside an existing Vite dev server. U
99
This sits below the [`vite` adapter](/adapters/vite) on the abstraction ladder: the adapter targets the full Vite DevTools dock; the bridge is the lower-level Vite plugin you reach for when you want a devframe to ride along with an existing app's dev server without the DevTools dock.
1010

1111
```ts
12-
import { viteDevBridge } from 'devframe/helpers/vite'
12+
import { viteDevBridge } from '@devframes/vite'
1313
import { defineConfig } from 'vite'
1414
import devframe from './devframe'
1515

knip.jsonc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@
9090
// listed explicitly instead. Keep this in sync with the `exports` map.
9191
"entry": [
9292
"src/{index,constants}.ts",
93-
"src/helpers/vite.ts",
9493
"src/adapters/{build,cac,dev,embedded,initiate}.ts",
9594
"src/adapters/mcp/index.ts",
9695
"src/client/index.ts",

packages/devframe/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
"./adapters/mcp": "./dist/adapters/mcp.mjs",
2828
"./client": "./dist/client/index.mjs",
2929
"./constants": "./dist/constants.mjs",
30-
"./helpers/vite": "./dist/helpers/vite.mjs",
3130
"./initiate": "./dist/adapters/initiate.mjs",
3231
"./internal": "./dist/internal/index.mjs",
3332
"./node": "./dist/node/index.mjs",

packages/devframe/scripts/check-client-dist.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ const FORBIDDEN: ForbiddenRule[] = [
1414
{ name: 'devframe/rpc/transports/*', match: id => id.startsWith('devframe/rpc/transports/') },
1515
{ name: 'devframe/node*', match: id => id === 'devframe/node' || id.startsWith('devframe/node/') },
1616
{ name: 'devframe/adapters/*', match: id => id.startsWith('devframe/adapters/') },
17-
{ name: 'devframe/helpers/*', match: id => id.startsWith('devframe/helpers/') },
1817
{ name: 'devframe/recipes/*', match: id => id.startsWith('devframe/recipes/') },
1918
{ name: 'devframe/utils/launch-editor', match: id => id === 'devframe/utils/launch-editor' },
2019
{ name: 'devframe/utils/open', match: id => id === 'devframe/utils/open' },

packages/devframe/src/internal/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,16 @@
2626
// transport"), the fetch/connect handler pair, and teardown. `StartedServer`
2727
// is the live handle its bound tiers produce and `createDevServer` re-exposes.
2828
// - `normalizeHttpServerUrl` — a small host-side URL helper.
29+
// - `resolveBasePath` / `normalizeBasePath` — the mount-base resolution
30+
// `initDevframe` itself uses; a bridge (`@devframes/vite`) that mounts a
31+
// devframe onto a host it doesn't own reuses the exact same defaulting.
32+
// - `diagnostics` — devframe core's structured diagnostics instance
33+
// (`DF00xx`), so a first-party integration built outside this package can
34+
// report against the same registered codes instead of minting its own.
35+
export { normalizeBasePath, resolveBasePath } from '../adapters/_shared'
2936
export { coerceAgentPositionalArgs } from '../node/agent-args'
3037
export type { AgentArgsFallback } from '../node/agent-args'
38+
export { diagnostics } from '../node/diagnostics'
3139
export { DevframeAgentHost } from '../node/host-agent'
3240
export * from '../node/host-h3'
3341
export { listLiveDevframeInstances, registerDevframeInstance } from '../node/instance-registry'

packages/devframe/tsdown.config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ const serverEntries = {
110110
'adapters/initiate': 'src/adapters/initiate.ts',
111111
'adapters/mcp': 'src/adapters/mcp/index.ts',
112112
'cli/main': 'src/cli/main.ts',
113-
'helpers/vite': 'src/helpers/vite.ts',
114113
'recipes/common-rpc-functions': 'src/recipes/common-rpc-functions.ts',
115114
'recipes/interactive-auth': 'src/recipes/interactive-auth.ts',
116115
}

packages/nuxt/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
"@nuxt/kit": "^3.0.0 || ^4.0.0 || ^5.0.0-0",
4040
"devframe": "workspace:*"
4141
},
42+
"dependencies": {
43+
"@devframes/vite": "workspace:*"
44+
},
4245
"devDependencies": {
4346
"@nuxt/kit": "catalog:build",
4447
"@types/node": "catalog:types",

0 commit comments

Comments
 (0)