|
1 | 1 | export * as ConfigCommand from "./command" |
2 | 2 |
|
3 | 3 | import { Log } from "../util" |
4 | | -import z from "zod" |
| 4 | +import { Schema } from "effect" |
5 | 5 | import { NamedError } from "@opencode-ai/shared/util/error" |
6 | 6 | import { Glob } from "@opencode-ai/shared/util/glob" |
7 | 7 | import { Bus } from "@/bus" |
| 8 | +import { zod } from "@/util/effect-zod" |
| 9 | +import { withStatics } from "@/util/schema" |
8 | 10 | import { configEntryNameFromPath } from "./entry-name" |
9 | 11 | import { InvalidError } from "./error" |
10 | 12 | import * as ConfigMarkdown from "./markdown" |
11 | 13 | import { ConfigModelID } from "./model-id" |
12 | 14 |
|
13 | 15 | const log = Log.create({ service: "config" }) |
14 | 16 |
|
15 | | -export const Info = z.object({ |
16 | | - template: z.string(), |
17 | | - description: z.string().optional(), |
18 | | - agent: z.string().optional(), |
19 | | - model: ConfigModelID.optional(), |
20 | | - subtask: z.boolean().optional(), |
21 | | -}) |
| 17 | +export const Info = Schema.Struct({ |
| 18 | + template: Schema.String, |
| 19 | + description: Schema.optional(Schema.String), |
| 20 | + agent: Schema.optional(Schema.String), |
| 21 | + model: Schema.optional(ConfigModelID), |
| 22 | + subtask: Schema.optional(Schema.Boolean), |
| 23 | +}).pipe(withStatics((s) => ({ zod: zod(s) }))) |
22 | 24 |
|
23 | | -export type Info = z.infer<typeof Info> |
| 25 | +export type Info = Schema.Schema.Type<typeof Info> |
24 | 26 |
|
25 | 27 | export async function load(dir: string) { |
26 | 28 | const result: Record<string, Info> = {} |
@@ -49,7 +51,7 @@ export async function load(dir: string) { |
49 | 51 | ...md.data, |
50 | 52 | template: md.content.trim(), |
51 | 53 | } |
52 | | - const parsed = Info.safeParse(config) |
| 54 | + const parsed = Info.zod.safeParse(config) |
53 | 55 | if (parsed.success) { |
54 | 56 | result[config.name] = parsed.data |
55 | 57 | continue |
|
0 commit comments