fix(hub-ui): bridge tools to the inspected page - #363
Conversation
Add a transport-neutral in-page channel relay and a dedicated inspected-page endpoint for browser adapters. Route page scripts and action activation to the inspected document while keeping custom renderers in the hub UI provider document. Run action setup before activation and serialize stale activation cleanup so rapid navigation cannot disable a newer action. Cover port routing, lifecycle cleanup, isolation, activation races, and the public API with regression tests and snapshots.
|
@SaKaNa-Y is attempting to deploy a commit to the NuxtLabs Team on Vercel. A member of the Team first needs to authorize it. |
Preserve the endpoint API reference alongside the relay reference and adapt the relay test protocol to the functions namespace introduced upstream.
Track the active inspected-page action across sessions and release ownership when page selection changes. Ignore stale deactivation and disconnect requests while preserving serialized teardown for in-flight activations.
◈ PR Lens
Architecture 8 components touched across 4 lanes. Inside the changed components — 2 viewsComponent view — Inspected page bridge Internal components of the inspected page host and standalone viewer target. Component view — In-page channel relay Dual-role relay modules connecting panel iframes to page scripts. Data flow
The other flows — 1 sequence
View
Tip The diagrams are links. Click one to open it on the canvas, then press W or click play to walk through the change. 🪧 More tips
Thanks for using PR Lens! It's built by Coldtea, free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. |
Problem
Vue Tracer and A11y opened from the Vite DevTools browser extension run against the hub UI provider's iframe instead of the inspected app. The parent/opener connection does not cross the extension boundary. Action setup can finish after its first activation event, leaving Tracer inactive on the first click.
A disconnected or stale inspected-page session can also deactivate a newer session's Tracer action because cleanup previously tracked only the action ID.
Fix
Add a transport-neutral
createInPageChannelRelayand a dedicated inspected-page endpoint in@devframes/hub-ui. Browser adapters bind the transport to a document; page scripts and actions execute there while custom renderers stay in the hub UI provider document. Existing panel channel APIs remain unchanged.Finish action setup before activation and serialize activation and teardown. Track the active action's owning connection so disconnect and explicit deactivation requests can only stop that connection's action. Clear ownership when page selection changes, preserving subsequent activation from the embedded UI. In-flight actions still finish teardown before replacement sessions activate.
Include protocol documentation, API snapshots, and regression coverage for first activation, rapid navigation, reconnection, and session isolation. Incorporate current
main, retaining both endpoint and relay references and adapting test protocols to the upstream functions namespace.Merge and release order
This is step 1 of 2 in the Devframe / Vite DevTools fix. Keep this PR in draft for review.
devframe,@devframes/hub, and@devframes/hub-ui.Companion adapter: vitejs/devtools#563. That draft PR depends on this release; this PR can merge first.
Verification
pnpm lintandpnpm knip: passed.pnpm test --run: build passed; 1,556 tests passed, 9 skipped, including API snapshots.pnpm typecheck: passed, 39 tasks.