Files
suaveplan/packages/ui/react/react-control-surface/src/runtime/binding-registry/handlers/dmx.md
2026-05-27 23:47:53 +01:00

1.8 KiB

dmx handler

Purpose

The dmx handler is the binding-registry slot reserved for DMX universe / channel updates. The @suaveplan/react-dmx integration has not yet shipped, so this default throws REACT_CONTROL_SURFACE.BINDING_HANDLER_MISSING unconditionally. When the DMX integration lands the production handler will replace this default with a closure that writes the scaled value into the named universe/channel via the DMX transport.

Throwing here is doubly important: stage-lighting bindings tend to be load-bearing in live performance, and a silent drop of a DMX update can plunge a stage into darkness mid-cue. Failing loud at the default ensures operators see the gap before they take the surface live.

Features

  • Strongly-typed signature (binding: DmxBinding, value: number) => never.
  • Error context preserves universe, channel, and the dropped value.
  • Default behaviour matches the other unwired handlers for uniform error-handling at the call site.

Usage: Basic

import { BindingRegistry } from "@suaveplan/react-control-surface/runtime/binding-registry";

const registry = new BindingRegistry({
    dmx: (binding, value) =>
        dmxTransport.send(binding.universe, binding.channel, value),
});

Usage: Advanced

import { dmxHandler } from "@suaveplan/react-control-surface/runtime/binding-registry";

expect(() =>
    dmxHandler({ kind: "dmx", universe: 1, channel: 33 }, 0.75)
).toThrow(/BINDING_HANDLER_MISSING/);

API Reference

  • dmxHandler(binding: DmxBinding, value: number): never — always throws with code REACT_CONTROL_SURFACE.BINDING_HANDLER_MISSING.

Implementation Notes

DMX traffic must be ordered and rate-limited; the production handler will need to coalesce rapid drag-driven updates. None of that is the default's problem — the default's only job is to refuse to silently drop traffic.