@gluonjs/devtools / packages/devtools/src / GluonDevtoolsBridge
Class: GluonDevtoolsBridge
Constructors
Constructor
new GluonDevtoolsBridge(
options?):GluonDevtoolsBridge
Parameters
options?
Returns
GluonDevtoolsBridge
Properties
enabled
readonlyenabled:boolean
protocol
readonlyprotocol:DevtoolsProtocol
Methods
dispose()
dispose():
void
Returns
void
handshake()
handshake():
DevtoolsHandshake
Returns
recordError()
recordError(
applicationId,payload):DevtoolsEvent|undefined
Parameters
applicationId
string
payload
unknown
Returns
DevtoolsEvent | undefined
recordEvent()
recordEvent(
applicationId,payload):DevtoolsEvent|undefined
Parameters
applicationId
string
payload
unknown
Returns
DevtoolsEvent | undefined
recordScheduler()
recordScheduler(
applicationId,payload):DevtoolsEvent|undefined
Parameters
applicationId
string
payload
unknown
Returns
DevtoolsEvent | undefined
registerApplication()
registerApplication(
options): () =>void
Parameters
options
Returns
() => void
selectApplication()
selectApplication(
id):void
Parameters
id
string
Returns
void
snapshot()
snapshot():
DevtoolsSnapshot
Returns
Example
Connect application, Router, Store, render, scheduler, event, and error evidence to one Devtools protocol owner and deterministic cleanup cycle:
import { createApp, html } from '@gluonjs/core';
import {
GLUON_DEVTOOLS_GLOBAL,
GluonDevtoolsBridge,
createDevtoolsArtifactContract,
createDevtoolsBridge,
gluonDevtoolsPlugin,
mountGluonDevtools,
type DevtoolsBridgeOptions,
type DevtoolsArtifactContract,
type DevtoolsInspectorOptions,
type GluonDevtoolsPluginOptions,
type InspectableRouter,
type InspectableStore,
type MountedDevtools,
} from '@gluonjs/devtools';
const root = document.querySelector<HTMLElement>('#app')!;
const app = createApp(() => html`<main>Shop</main>`);
app.mount(root);
const router: InspectableRouter = {
currentRoute: { value: { fullPath: '/shop' } },
afterEach: (_hook) => () => undefined,
};
const store: InspectableStore = {
subscribe: (_callback) => () => undefined,
dehydrate: () => ({ version: 1, stores: {} }),
};
const globalObject: Record<string, unknown> = {};
const bridgeOptions = { enabled: true, exposeGlobal: true, globalObject } satisfies DevtoolsBridgeOptions;
const bridge: GluonDevtoolsBridge = createDevtoolsBridge(bridgeOptions);
const unregister = bridge.registerApplication({ id: 'shop', app, root, router, store });
const inspectorOptions = { navigateToSource: (location) => console.log(location) } satisfies DevtoolsInspectorOptions;
const mounted: MountedDevtools = mountGluonDevtools(bridge, document.body, inspectorOptions);
const artifact: DevtoolsArtifactContract = createDevtoolsArtifactContract();
const pluginOptions = { virtualId: 'virtual:shop-devtools' } satisfies GluonDevtoolsPluginOptions;
const vitePlugin = gluonDevtoolsPlugin(pluginOptions);
console.log(globalObject[GLUON_DEVTOOLS_GLOBAL] === bridge, vitePlugin.name, mounted.element, artifact.manifest);
mounted.unmount();
unregister();
bridge.dispose();
app.unmount();