add layout for remaining processors/modules and order everything

This commit is contained in:
Joel Wetzell
2026-03-26 16:56:56 -05:00
parent aa79150507
commit 3a92370cdd
58 changed files with 545 additions and 79 deletions
+195 -63
View File
@@ -1,104 +1,210 @@
import starlight from '@astrojs/starlight'; import starlight from "@astrojs/starlight";
import { defineConfig } from 'astro/config'; import { defineConfig } from "astro/config";
// https://astro.build/config // https://astro.build/config
export default defineConfig({ export default defineConfig({
integrations: [ integrations: [
starlight({ starlight({
title: 'showbridge', title: "showbridge",
favicon: '/favicon.ico', favicon: "/favicon.ico",
social: [ social: [
{ {
icon: 'github', icon: "github",
label: 'GitHub', label: "GitHub",
href: 'https://github.com/jwetzell/showbridge-go', href: "https://github.com/jwetzell/showbridge-go",
}, },
], ],
sidebar: [ sidebar: [
{ {
label: 'showbridge', label: "showbridge",
autogenerate: { directory: '/showbridge' }, autogenerate: { directory: "/showbridge" },
}, },
{ {
label: 'Run', label: "Run",
autogenerate: { directory: 'run' }, autogenerate: { directory: "run" },
}, },
{ {
label: 'Concepts', label: "Concepts",
autogenerate: { directory: 'concepts' }, autogenerate: { directory: "concepts" },
}, },
{ {
label: 'Modules', label: "Modules",
items: [ items: [
{
label: "Time",
collapsed: true,
autogenerate: { directory: 'modules/time' }
},
{ {
label: "Database", label: "Database",
collapsed: true, collapsed: true,
autogenerate: { directory: 'modules/db' } autogenerate: { directory: "modules/db" },
},
{
label: "Network",
collapsed: true,
autogenerate: { directory: 'modules/network' }
}, },
{ {
label: "HTTP", label: "HTTP",
collapsed: true, collapsed: true,
autogenerate: { directory: 'modules/http' } autogenerate: { directory: "modules/http" },
}, },
{ {
label: "MIDI", label: "MIDI",
collapsed: true, collapsed: true,
autogenerate: { directory: 'modules/midi' } autogenerate: { directory: "modules/midi" },
},
{
label: "Serial",
collapsed: true,
autogenerate: { directory: 'modules/serial' }
}, },
{ {
label: "MQTT", label: "MQTT",
collapsed: true, collapsed: true,
autogenerate: { directory: 'modules/mqtt' } autogenerate: { directory: "modules/mqtt" },
},
{
label: "NATS",
collapsed: true,
autogenerate: { directory: "modules/nats" },
},
{
label: "Network",
collapsed: true,
items: [
{
label: "TCP",
collapsed: true,
autogenerate: { directory: "modules/net/tcp" },
},
{
label: "UDP",
collapsed: true,
autogenerate: { directory: "modules/net/udp" },
},
],
},
{
label: "PosiStageNet",
collapsed: true,
autogenerate: { directory: "modules/psn" },
}, },
{ {
label: "Redis", label: "Redis",
collapsed: true, collapsed: true,
autogenerate: { directory: 'modules/redis' } autogenerate: { directory: "modules/redis" },
},
]
}, },
{ {
label: 'Processors', label: "Time",
collapsed: true,
autogenerate: { directory: "modules/time" },
},
{
label: "Serial",
collapsed: true,
autogenerate: { directory: "modules/serial" },
},
{
label: "SIP",
collapsed: true,
items: [ items: [
{ {
label: "Router", label: "Call",
collapsed: true, collapsed: true,
autogenerate: { directory: 'processors/router' } autogenerate: { directory: "modules/sip/call" },
},
{
label: "DTMF",
collapsed: true,
autogenerate: { directory: "modules/sip/dtmf" },
},
],
},
],
},
{
label: "Processors",
items: [
{
label: "ArtNet",
collapsed: true,
autogenerate: { directory: "processors/artnet" },
}, },
{ {
label: "Database", label: "Database",
collapsed: true, collapsed: true,
autogenerate: { directory: 'processors/db' } autogenerate: { directory: "processors/db" },
},
{
label: "Debug",
collapsed: true,
autogenerate: { directory: "processors/debug" },
}, },
{ {
label: "Filter", label: "Filter",
collapsed: true, collapsed: true,
autogenerate: { directory: 'processors/filter' } autogenerate: { directory: "processors/filter" },
},
{
label: "Int",
collapsed: true,
autogenerate: { directory: 'processors/int' }
}, },
{ {
label: "Float", label: "Float",
collapsed: true, collapsed: true,
autogenerate: { directory: 'processors/float' } autogenerate: { directory: "processors/float" },
},
{
label: "FreeD",
collapsed: true,
autogenerate: { directory: "processors/free-d" },
},
{
label: "HTTP",
collapsed: true,
items: [
{
label: "Request",
collapsed: true,
autogenerate: { directory: "processors/http/request" },
},
{
label: "Response",
collapsed: true,
autogenerate: { directory: "processors/http/response" },
},
],
},
{
label: "Int",
collapsed: true,
autogenerate: { directory: "processors/int" },
},
{
label: "JSON",
collapsed: true,
autogenerate: { directory: "processors/json" },
},
{
label: "Key/Value",
collapsed: true,
autogenerate: { directory: "processors/kv" },
},
{
label: "MIDI",
collapsed: true,
items: [
{
label: "Message",
collapsed: true,
autogenerate: { directory: "processors/midi/message" },
},
],
},
{
label: "MQTT",
collapsed: true,
items: [
{
label: "Message",
collapsed: true,
autogenerate: { directory: "processors/mqtt/message" },
},
],
},
{
label: "NATS",
collapsed: true,
items: [
{
label: "Message",
collapsed: true,
autogenerate: { directory: "processors/nats/message" },
},
],
}, },
{ {
label: "OSC", label: "OSC",
@@ -107,35 +213,61 @@ export default defineConfig({
{ {
label: "Message", label: "Message",
collapsed: true, collapsed: true,
autogenerate: { directory: 'processors/osc/message' } autogenerate: { directory: "processors/osc/message" },
} },
] ],
}, },
{ {
label: "String", label: "Router",
collapsed: true, collapsed: true,
autogenerate: { directory: 'processors/string' } autogenerate: { directory: "processors/router" },
}, },
{ {
label: "Script", label: "Script",
collapsed: true, collapsed: true,
autogenerate: { directory: 'processors/script' } autogenerate: { directory: "processors/script" },
},
{
label: "SIP",
collapsed: true,
items: [
{
label: "Response",
collapsed: true,
items: [
{
label: "Audio",
collapsed: true,
autogenerate: {
directory: "processors/sip/response/audio",
},
},
{
label: "DTMF",
collapsed: true,
autogenerate: {
directory: "processors/sip/response/dtmf",
},
},
],
},
],
},
{
label: "String",
collapsed: true,
autogenerate: { directory: "processors/string" },
}, },
{ {
label: "Time", label: "Time",
collapsed: true, collapsed: true,
autogenerate: { directory: 'processors/time' } autogenerate: { directory: "processors/time" },
},
],
}, },
{ {
label: "Key/Value", label: "Examples",
collapsed: true, autogenerate: { directory: "examples" },
autogenerate: { directory: 'processors/kv' }
}
]
},
{
label: 'Examples',
autogenerate: { directory: 'examples' },
}, },
], ],
}), }),
@@ -1,6 +1,7 @@
--- ---
title: HTTP Server title: HTTP Server
sidebar: sidebar:
label: Server
order: 2 order: 2
--- ---
The `http.server` module emits a message for every HTTP request that is made to the server. The `http.server` module emits a message for every HTTP request that is made to the server.
+1
View File
@@ -1,6 +1,7 @@
--- ---
title: MIDI Input title: MIDI Input
sidebar: sidebar:
label: Input
order: 1 order: 1
--- ---
+1
View File
@@ -1,6 +1,7 @@
--- ---
title: MIDI Output title: MIDI Output
sidebar: sidebar:
label: Output
order: 2 order: 2
--- ---
import { Aside } from '@astrojs/starlight/components'; import { Aside } from '@astrojs/starlight/components';
+1
View File
@@ -1,6 +1,7 @@
--- ---
title: MQTT Client title: MQTT Client
sidebar: sidebar:
label: Client
order: 1 order: 1
--- ---
+11
View File
@@ -0,0 +1,11 @@
---
title: NATS Client
sidebar:
label: Client
order: 1
---
- **type**: `nats.client`
- **params**:
- **url**
- **subject**
+11
View File
@@ -0,0 +1,11 @@
---
title: NATS Server
sidebar:
label: Server
order: 2
---
- **type**: `nats.server`
- **params**:
- **ip**
- **port**
@@ -1,6 +1,7 @@
--- ---
title: TCP Client title: TCP Client
sidebar: sidebar:
label: Client
order: 1 order: 1
--- ---
The `net.tcp.client` module connects to TCP server and emits messages based on the data it receives from the server that it connects to. Messages are determined by "framing" techniques as TCP is a stream based protocol. The module will attempt to reconnect anytime the connection is closed. The `net.tcp.client` module connects to TCP server and emits messages based on the data it receives from the server that it connects to. Messages are determined by "framing" techniques as TCP is a stream based protocol. The module will attempt to reconnect anytime the connection is closed.
@@ -1,6 +1,7 @@
--- ---
title: TCP Server title: TCP Server
sidebar: sidebar:
label: Server
order: 2 order: 2
--- ---
The `net.tcp.server` module emits a message messages based on the data it receives from clients that connect to it. Messages are determined by "framing" techniques as TCP is a stream based protocol. The `net.tcp.server` module emits a message messages based on the data it receives from clients that connect to it. Messages are determined by "framing" techniques as TCP is a stream based protocol.
@@ -1,7 +1,8 @@
--- ---
title: UDP Client title: UDP Client
sidebar: sidebar:
order: 3 label: Client
order: 1
--- ---
The `net.udp.client` module sends messages to a the configured `host` and `port`. This module does not produce any messages and so using it as an `input` to a [route](/concepts/routes) would be pointless. The `net.udp.client` module sends messages to a the configured `host` and `port`. This module does not produce any messages and so using it as an `input` to a [route](/concepts/routes) would be pointless.
@@ -0,0 +1,12 @@
---
title: UDP Multicast
sidebar:
label: Multicast
order: 3
---
- **type**: `net.udp.multicast`
- **params**:
- **ip**
- **port**
- **bufferSize**
@@ -1,7 +1,8 @@
--- ---
title: UDP Server title: UDP Server
sidebar: sidebar:
order: 4 label: Server
order: 2
--- ---
The `net.udp.server` module emits a message for every incoming UDP datagram. The `net.udp.server` module emits a message for every incoming UDP datagram.
+8
View File
@@ -0,0 +1,8 @@
---
title: PSN Client
sidebar:
label: Client
order: 1
---
- **type**: `psn.client`
@@ -1,6 +1,7 @@
--- ---
title: Redis Client title: Redis Client
sidebar: sidebar:
label: Client
order: 1 order: 1
--- ---
@@ -1,6 +1,7 @@
--- ---
title: Serial Client title: Serial Client
sidebar: sidebar:
label: Client
order: 1 order: 1
--- ---
@@ -0,0 +1,13 @@
---
title: SIP Call Server
sidebar:
label: Server
order: 1
---
- **type**: `sip.call.server`
- **params**:
- **ip**
- **port**
- **transport**
- **userAgent**
@@ -0,0 +1,14 @@
---
title: SIP DTMF Server
sidebar:
label: Server
order: 1
---
- **type**: `sip.dtmf.server`
- **params**:
- **ip**
- **port**
- **transport**
- **userAgent**
- **separator**
@@ -0,0 +1,8 @@
---
title: Decode ArtNet Packet
sidebar:
label: Decode
order: 1
---
- **type**: `artnet.packet.decode`
@@ -0,0 +1,8 @@
---
title: Encode ArtNet Packet
sidebar:
label: Encode
order: 2
---
- **type**: `artnet.packet.encode`
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: Query title: Database Query
sidebar: sidebar:
label: Query
order: 1 order: 1
--- ---
The `db.query` processor will issue a query to the specified module and return the result to the next processor in line. The `db.query` processor will issue a query to the specified module and return the result to the next processor in line.
+8
View File
@@ -0,0 +1,8 @@
---
title: Debug Log
sidebar:
label: Log
order: 1
---
- **type**: `debug.log`
@@ -0,0 +1,8 @@
---
title: Filter On Change
sidebar:
label: On Change
order: 3
---
- **type**: `filter.change`
@@ -1,6 +1,7 @@
--- ---
title: Expr Filter title: Expr Filter
sidebar: sidebar:
label: Expr
order: 2 order: 2
--- ---
The `filter.expr` processor evaluates an [Expr expression](https://expr-lang.org/playground). If the expression evaluates to true then the payload is sent through. This processor will return an error if the expression fails to evaluate. The `filter.expr` processor evaluates an [Expr expression](https://expr-lang.org/playground). If the expression evaluates to true then the payload is sent through. This processor will return an error if the expression fails to evaluate.
@@ -1,6 +1,7 @@
--- ---
title: Regex Filter title: Regex Filter
sidebar: sidebar:
label: Regex
order: 1 order: 1
--- ---
The `filter.regex` processor matches incoming string payload against a regular expression. If there is a match then the payload is sent through. This processor will return an error if the message being processed is not a string. The `filter.regex` processor matches incoming string payload against a regular expression. If there is a match then the payload is sent through. This processor will return an error if the message being processed is not a string.
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: Float Parse title: Parse Float
sidebar: sidebar:
label: Parse
order: 1 order: 1
--- ---
The `float.parse` processor takes a string and parses it as a float with the specified `base` and `bitSize`. This processor will return an error if the message being processed is not a string or if the string cannot be parsed into a float. The `float.parse` processor takes a string and parses it as a float with the specified `base` and `bitSize`. This processor will return an error if the message being processed is not a string or if the string cannot be parsed into a float.
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: Float Random title: Create Random Float
sidebar: sidebar:
label: Random
order: 2 order: 2
--- ---
The `float.random` processor will set the payload to a random float between the specified `min` and `max` value. The `float.random` processor will set the payload to a random float between the specified `min` and `max` value.
@@ -0,0 +1,18 @@
---
title: Create FreeD
sidebar:
label: Create
order: 1
---
- **type**: `free.d.create`
- **params**:
- **id**
- **pan**
- **tilt**
- **roll**
- **posX**
- **posY**
- **posZ**
- **zoom**
- **focus**
@@ -0,0 +1,8 @@
---
title: Decode FreeD
sidebar:
label: Decode
order: 3
---
- **type**: `free.d.decode`
@@ -0,0 +1,8 @@
---
title: Encode FreeD
sidebar:
label: Encode
order: 2
---
- **type**: `free.d.encode`
@@ -0,0 +1,11 @@
---
title: Make HTTP Request
sidebar:
label: Make Request
order: 1
---
- **type**: `http.request.do`
- **params**:
- **method**
- **url**
@@ -0,0 +1,11 @@
---
title: Create HTTP Response
sidebar:
label: Create
order: 2
---
- **type**: `http.response.create`
- **params**:
- **status**
- **body**
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: Int Parse title: Parse Int
sidebar: sidebar:
label: Parse
order: 1 order: 1
--- ---
The `int.parse` processor takes a string and parses it as an integer with the specified `base` and `bitSize`. This processor will return an error if the message being processed is not a string or if the string cannot be parsed into an integer. The `int.parse` processor takes a string and parses it as an integer with the specified `base` and `bitSize`. This processor will return an error if the message being processed is not a string or if the string cannot be parsed into an integer.
+1 -1
View File
@@ -1,5 +1,5 @@
--- ---
title: Int Random title: Create Random Int
sidebar: sidebar:
order: 2 order: 2
--- ---
+13
View File
@@ -0,0 +1,13 @@
---
title: Scale Int
sidebar:
label: Scale
order: 3
---
- **type**: `int.scale`
- **params**:
- **inMin**
- **inMax**
- **outMin**
- **outMax**
@@ -0,0 +1,8 @@
---
title: Decode JSON
sidebar:
label: Decode
order: 2
---
- **type**: `json.decode`
@@ -0,0 +1,8 @@
---
title: Encode JSON
sidebar:
label: Encode
order: 1
---
- **type**: `json.decode`
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: Get title: Get Key/Value
sidebar: sidebar:
label: Get
order: 1 order: 1
--- ---
The `kv.get` processor gets the value associated with a key from a compatible module. The output payload is the value if the key is found. The `kv.get` processor gets the value associated with a key from a compatible module. The output payload is the value if the key is found.
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: Set title: Set Key/Value
sidebar: sidebar:
label: Set
order: 2 order: 2
--- ---
The `kv.set` processor sets the value associated with a key from a compatible module. The payload is unchanged so whatever is received by this payload is output unless any errors are encountered. The `kv.set` processor sets the value associated with a key from a compatible module. The payload is unchanged so whatever is received by this payload is output unless any errors are encountered.
@@ -0,0 +1,16 @@
---
title: Create MIDI Message
sidebar:
label: Create
order: 1
---
- **type**: `midi.message.create`
- **params**:
- **type**
- **channel**
- **note**
- **velocity**
- **program**
- **control**
- **value**
@@ -0,0 +1,8 @@
---
title: Decode MIDI Message
sidebar:
label: Decode
order: 3
---
- **type**: `midi.message.decode`
@@ -0,0 +1,8 @@
---
title: Encode MIDI Message
sidebar:
label: Encode
order: 2
---
- **type**: `midi.message.encode`
@@ -0,0 +1,8 @@
---
title: Unpack MIDI Message
sidebar:
label: Unpack
order: 4
---
- **type**: `midi.message.unpack`
@@ -0,0 +1,12 @@
---
title: Create MQTT Message
sidebar:
order: 1
---
- **type**: `mqtt.message.create`
- **params**:
- **topic**
- **qos**
- **retained**
- **payload**
@@ -0,0 +1,11 @@
---
title: Create NATS Message
sidebar:
label: Create
order: 1
---
- **type**: `nats.message.create`
- **params**:
- **subject**
- **payload**
@@ -0,0 +1,12 @@
---
title: Create OSC Message
sidebar:
label: Create
order: 1
---
- **type**: `osc.message.create`
- **params**:
- **address**
- **args**
- **types**
@@ -1,7 +1,8 @@
--- ---
title: OSC Message Decode title: Decode OSC Message
sidebar: sidebar:
order: 1 label: Decode
order: 3
--- ---
The `osc.message.decode` processor takes a array of bytes and turn it into OSC message if it can be. This processor will return an error if the bytes cannot be parsed as an OSC message The `osc.message.decode` processor takes a array of bytes and turn it into OSC message if it can be. This processor will return an error if the bytes cannot be parsed as an OSC message
@@ -1,6 +1,7 @@
--- ---
title: OSC Message Encode title: Encode OSC Message
sidebar: sidebar:
label: Encode
order: 2 order: 2
--- ---
The `osc.message.encode` processor takes an OSC message and turns it into an array of bytes. This processor will return an error if the OSC message cannot be turned into bytes. The `osc.message.encode` processor takes an OSC message and turns it into an array of bytes. This processor will return an error if the OSC message cannot be turned into bytes.
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: Router Output title: Output from Router
sidebar: sidebar:
label: Output
order: 1 order: 1
--- ---
The `router.output` processor takes any payload and outputs to the specified module. The `router.output` processor takes any payload and outputs to the specified module.
@@ -0,0 +1,10 @@
---
title: Execute Expr Expression
sidebar:
label: Expr
order: 2
---
- **type**: `script.expr`
- **params**:
- **expression**
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: JavaScript title: Execute JavaScript
sidebar: sidebar:
label: JavaScript
order: 1 order: 1
--- ---
@@ -0,0 +1,12 @@
---
title: Run WASM (Extism) Plugin
sidebar:
label: WASM
order: 3
---
- **type**: `script.wasm`
- **params**:
- **path**
- **function**
- **enableWasi**
@@ -0,0 +1,12 @@
---
title: Create SIP Audio Response
sidebar:
label: Create
order: 1
---
- **type**: `sip.response.audio.create`
- **params**:
- **preWait**
- **audioFile**
- **postWait**
@@ -0,0 +1,12 @@
---
title: Create SIP DTMF Response
sidebar:
label: Create
order: 1
---
- **type**: `sip.response.dtmf.create`
- **params**:
- **preWait**
- **digits**
- **postWait**
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: String Create title: Create String
sidebar: sidebar:
label: Create
order: 3 order: 3
--- ---
The `string.create` processor creates a string based on the provided template. This processor will return an error if there is an issue executing the template. The template property is just a [Go template](https://pkg.go.dev/text/template) that will be evaluated with the incoming message provided as an environment. The `string.create` processor creates a string based on the provided template. This processor will return an error if there is an issue executing the template. The template property is just a [Go template](https://pkg.go.dev/text/template) that will be evaluated with the incoming message provided as an environment.
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: String Decode title: Decode String
sidebar: sidebar:
label: Decode
order: 1 order: 1
--- ---
The `string.decode` processor takes a array of bytes and turn it into string. This processor will return an error if the message being processed is not an array of bytes. The `string.decode` processor takes a array of bytes and turn it into string. This processor will return an error if the message being processed is not an array of bytes.
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: String Encode title: Encode String
sidebar: sidebar:
label: Encode
order: 2 order: 2
--- ---
The `string.encode` processor takes a string and turns it into an array of bytes. This processor will return an error if the message being processed is not a string. The `string.encode` processor takes a string and turns it into an array of bytes. This processor will return an error if the message being processed is not a string.
+2 -1
View File
@@ -1,6 +1,7 @@
--- ---
title: String Split title: Split String
sidebar: sidebar:
label: Split
order: 5 order: 5
--- ---
The `string.split` processor takes a string and turns it into an array of strings by splitting on `params.separator`. This processor will return an error if the message being processed is not a string. The `string.split` processor takes a string and turns it into an array of strings by splitting on `params.separator`. This processor will return an error if the message being processed is not a string.
@@ -1,6 +1,7 @@
--- ---
title: Sleep title: Sleep
sidebar: sidebar:
label: Sleep
order: 1 order: 1
--- ---
The `time.sleep` processor will sleep for the specified `duration` in milliseconds before passing the message to the next processor. The `time.sleep` processor will sleep for the specified `duration` in milliseconds before passing the message to the next processor.