diff options
| author | Dax Raad <[email protected]> | 2025-05-19 15:43:14 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-05-26 12:40:17 -0400 |
| commit | 652429377b99085d686d6b907c2f550c304e6b98 (patch) | |
| tree | e4fa0de6b0503885c76bb77e1e0d0e7d56e5117e /js/src/bus | |
| parent | 99af6146d5def31c59993636d60eb75a483a283b (diff) | |
| download | opencode-652429377b99085d686d6b907c2f550c304e6b98.tar.gz opencode-652429377b99085d686d6b907c2f550c304e6b98.zip | |
sync
Diffstat (limited to 'js/src/bus')
| -rw-r--r-- | js/src/bus/index.ts | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/js/src/bus/index.ts b/js/src/bus/index.ts index 4f3b40041..f320aeef3 100644 --- a/js/src/bus/index.ts +++ b/js/src/bus/index.ts @@ -1,4 +1,4 @@ -import type { z, ZodSchema } from "zod"; +import { z, type ZodType } from "zod/v4"; import { App } from "../app"; import { Log } from "../util/log"; @@ -16,14 +16,30 @@ export namespace Bus { export type EventDefinition = ReturnType<typeof event>; - export function event<Type extends string, Properties extends ZodSchema>( + const registry = new Map<string, EventDefinition>(); + + export function event<Type extends string, Properties extends ZodType>( type: Type, properties: Properties, ) { - return { + const result = { type, properties, }; + registry.set(type, result); + return result; + } + + export function specs() { + const children = {} as any; + for (const [type, def] of registry.entries()) { + children[def.type] = def.properties; + } + const result = z.toJSONSchema(z.object(children)) as any; + result.definitions = result.properties; + delete result.properties; + delete result.required; + return result; } export function publish<Definition extends EventDefinition>( |
