@terkelg/trafficlights
v0.0.0
Published
Electrobun helpers for driving the native macOS traffic lights from browser-side state.
Downloads
74
Maintainers
Readme
@terkelg/trafficlights
Electrobun helpers for driving the native macOS traffic lights from browser-side state.
Install
bun add @terkelg/trafficlightsOn first use, the Bun helper will build the native TrafficLightsFFI bridge automatically if it is missing.
If the npm package already contains a matching file in native/prebuilt, the Bun helper will use that first and skip the local Swift build.
The package is macOS-only and targets:
darwin-x64darwin-arm64
There is also a GitHub Actions workflow in .github/workflows/trafficlights-electrobun-native.yml that builds release artifacts for both targets.
From the repo root you can use:
bun run release:electrobun:check
bun run release:electrobunThe first command runs the local checks and prints the release tag. The second does the same and creates the local git tag from this package version. Pushing that tag triggers the GitHub Actions publish flow.
Optional prebuild
cd node_modules/@terkelg/trafficlights/native
swift build --product TrafficLightsFFIBun
import { BrowserView, BrowserWindow } from "electrobun/bun";
import { createTrafficLightsHandlers, type TrafficLightsRPC } from "@terkelg/trafficlights/bun";
const rpc = BrowserView.defineRPC<TrafficLightsRPC>({
handlers: {
requests: createTrafficLightsHandlers(),
messages: {},
},
});
new BrowserWindow({
title: "Traffic Lights",
url: "views://main/index.html",
rpc,
});View
import { Electroview } from "electrobun/view";
import { createTrafficLightsClient, type TrafficLightsRPC } from "@terkelg/trafficlights/view";
const rpc = Electroview.defineRPC<TrafficLightsRPC>({
handlers: {
requests: {},
messages: {},
},
});
new Electroview({ rpc });
const lights = await createTrafficLightsClient(rpc.requestProxy);
const state = lights.get();
state.close.alpha = 0;
state.close.y = 8;
await lights.set(state);API
createTrafficLightsHandlers(options?)
Returns: request handlers object
Creates the Bun-side bridge handlers for:
trafficLightsState()trafficLightsSet(state)
Options:
build?: booleandefaulttrueswift?: stringdylib?: stringdelay?: numberretries?: number
createTrafficLightsClient(requestProxy)
Returns: Promise<TrafficLightsClient>
Creates the browser-side helper from an Electrobun requestProxy.
TrafficLightsClient
type TrafficLightsClient = {
get(): TrafficLightsState;
refresh(): Promise<TrafficLightsState>;
set(state: TrafficLightsState): Promise<TrafficLightsState>;
};TrafficLightsState
type TrafficLightName = "close" | "miniaturize" | "zoom";
type TrafficLightValues = {
alpha: number;
x: number;
y: number;
scale: number;
enabled: boolean;
};
type TrafficLightsState = Record<TrafficLightName, TrafficLightValues>;get() returns the latest desired values cached in the browser helper.
