diff options
| author | Kit Langton <[email protected]> | 2026-04-17 21:20:06 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-04-18 01:20:06 +0000 |
| commit | 826fd3350ce8aa1a855956f956038fad7ecffb86 (patch) | |
| tree | 13dc21cbb8b311756214a29bf69edd67aa50f136 /packages | |
| parent | 23a2d0128254480e51c630f8cd077af29dc39efa (diff) | |
| download | opencode-826fd3350ce8aa1a855956f956038fad7ecffb86.tar.gz opencode-826fd3350ce8aa1a855956f956038fad7ecffb86.zip | |
refactor(config): migrate Server + Layout to Effect Schema (#23216)
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/config/config.ts | 34 | ||||
| -rw-r--r-- | packages/opencode/src/config/layout.ts | 10 | ||||
| -rw-r--r-- | packages/opencode/src/config/provider.ts | 2 | ||||
| -rw-r--r-- | packages/opencode/src/config/server.ts | 20 |
4 files changed, 41 insertions, 25 deletions
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index bfb0c2f1f..179c6a609 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -25,18 +25,20 @@ import { Context, Duration, Effect, Exit, Fiber, Layer, Option } from "effect" import { EffectFlock } from "@opencode-ai/shared/util/effect-flock" import { InstanceRef } from "@/effect/instance-ref" import { ConfigAgent } from "./agent" +import { ConfigCommand } from "./command" +import { ConfigFormatter } from "./formatter" +import { ConfigLayout } from "./layout" +import { ConfigLSP } from "./lsp" +import { ConfigManaged } from "./managed" import { ConfigMCP } from "./mcp" import { ConfigModelID } from "./model-id" -import { ConfigPlugin } from "./plugin" -import { ConfigManaged } from "./managed" -import { ConfigCommand } from "./command" import { ConfigParse } from "./parse" +import { ConfigPaths } from "./paths" import { ConfigPermission } from "./permission" +import { ConfigPlugin } from "./plugin" import { ConfigProvider } from "./provider" +import { ConfigServer } from "./server" import { ConfigSkills } from "./skills" -import { ConfigPaths } from "./paths" -import { ConfigFormatter } from "./formatter" -import { ConfigLSP } from "./lsp" import { ConfigVariable } from "./variable" import { Npm } from "@/npm" @@ -73,23 +75,9 @@ async function resolveLoadedPlugins<T extends { plugin?: ConfigPlugin.Spec[] }>( return config } -export const Server = z - .object({ - port: z.number().int().positive().optional().describe("Port to listen on"), - hostname: z.string().optional().describe("Hostname to listen on"), - mdns: z.boolean().optional().describe("Enable mDNS service discovery"), - mdnsDomain: z.string().optional().describe("Custom domain name for mDNS service (default: opencode.local)"), - cors: z.array(z.string()).optional().describe("Additional domains to allow for CORS"), - }) - .strict() - .meta({ - ref: "ServerConfig", - }) - -export const Layout = z.enum(["auto", "stretch"]).meta({ - ref: "LayoutConfig", -}) -export type Layout = z.infer<typeof Layout> +export const Server = ConfigServer.Server.zod +export const Layout = ConfigLayout.Layout.zod +export type Layout = ConfigLayout.Layout export const Info = z .object({ diff --git a/packages/opencode/src/config/layout.ts b/packages/opencode/src/config/layout.ts new file mode 100644 index 000000000..49c34b663 --- /dev/null +++ b/packages/opencode/src/config/layout.ts @@ -0,0 +1,10 @@ +import { Schema } from "effect" +import { zod } from "@/util/effect-zod" +import { withStatics } from "@/util/schema" + +export const Layout = Schema.Literals(["auto", "stretch"]) + .annotate({ identifier: "LayoutConfig" }) + .pipe(withStatics((s) => ({ zod: zod(s) }))) +export type Layout = Schema.Schema.Type<typeof Layout> + +export * as ConfigLayout from "./layout" diff --git a/packages/opencode/src/config/provider.ts b/packages/opencode/src/config/provider.ts index 4b08592a6..212e71625 100644 --- a/packages/opencode/src/config/provider.ts +++ b/packages/opencode/src/config/provider.ts @@ -2,8 +2,6 @@ import { Schema } from "effect" import { zod } from "@/util/effect-zod" import { withStatics } from "@/util/schema" -// Positive integer: emits JSON Schema `type: integer, exclusiveMinimum: 0` -// via the effect-zod walker's well-known refinement translation. const PositiveInt = Schema.Number.check(Schema.isInt()).check(Schema.isGreaterThan(0)) export const Model = Schema.Struct({ diff --git a/packages/opencode/src/config/server.ts b/packages/opencode/src/config/server.ts new file mode 100644 index 000000000..969a79964 --- /dev/null +++ b/packages/opencode/src/config/server.ts @@ -0,0 +1,20 @@ +import { Schema } from "effect" +import { zod } from "@/util/effect-zod" + +export class Server extends Schema.Class<Server>("ServerConfig")({ + port: Schema.optional(Schema.Number.check(Schema.isInt()).check(Schema.isGreaterThan(0))).annotate({ + description: "Port to listen on", + }), + hostname: Schema.optional(Schema.String).annotate({ description: "Hostname to listen on" }), + mdns: Schema.optional(Schema.Boolean).annotate({ description: "Enable mDNS service discovery" }), + mdnsDomain: Schema.optional(Schema.String).annotate({ + description: "Custom domain name for mDNS service (default: opencode.local)", + }), + cors: Schema.optional(Schema.mutable(Schema.Array(Schema.String))).annotate({ + description: "Additional domains to allow for CORS", + }), +}) { + static readonly zod = zod(this) +} + +export * as ConfigServer from "./server" |
