summaryrefslogtreecommitdiffhomepage
path: root/js/src/bus
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-05-19 15:43:14 -0400
committerDax Raad <[email protected]>2025-05-26 12:40:17 -0400
commit652429377b99085d686d6b907c2f550c304e6b98 (patch)
treee4fa0de6b0503885c76bb77e1e0d0e7d56e5117e /js/src/bus
parent99af6146d5def31c59993636d60eb75a483a283b (diff)
downloadopencode-652429377b99085d686d6b907c2f550c304e6b98.tar.gz
opencode-652429377b99085d686d6b907c2f550c304e6b98.zip
sync
Diffstat (limited to 'js/src/bus')
-rw-r--r--js/src/bus/index.ts22
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>(