mirror of
https://fastgit.cc/https://github.com/anomalyco/opencode
synced 2026-04-21 05:10:58 +08:00
refactor(file): use effectful HttpApi group builder
Build the file HttpApi handlers with an effectful group callback so the file service is resolved once at layer construction time and the endpoint handlers close over the resulting methods.
This commit is contained in:
@@ -58,24 +58,27 @@ const Api = HttpApi.make("file")
|
||||
}),
|
||||
)
|
||||
|
||||
const list = Effect.fn("FileHttpApi.list")(function* (ctx: { query: { path?: string } }) {
|
||||
const svc = yield* File.Service
|
||||
return Schema.decodeUnknownSync(Schema.Array(File.Node))(yield* svc.list(ctx.query.path))
|
||||
})
|
||||
const FileLive = HttpApiBuilder.group(
|
||||
Api,
|
||||
"file",
|
||||
Effect.fn("FileHttpApi.handlers")(function* (handlers) {
|
||||
const svc = yield* File.Service
|
||||
|
||||
const content = Effect.fn("FileHttpApi.content")(function* (ctx: { query: { path: string } }) {
|
||||
const svc = yield* File.Service
|
||||
return Schema.decodeUnknownSync(File.Content)(yield* svc.read(ctx.query.path))
|
||||
})
|
||||
const list = Effect.fn("FileHttpApi.list")(function* (ctx: { query: { path?: string } }) {
|
||||
return Schema.decodeUnknownSync(Schema.Array(File.Node))(yield* svc.list(ctx.query.path))
|
||||
})
|
||||
|
||||
const status = Effect.fn("FileHttpApi.status")(function* () {
|
||||
const svc = yield* File.Service
|
||||
return Schema.decodeUnknownSync(Schema.Array(File.Info))(yield* svc.status())
|
||||
})
|
||||
const content = Effect.fn("FileHttpApi.content")(function* (ctx: { query: { path: string } }) {
|
||||
return Schema.decodeUnknownSync(File.Content)(yield* svc.read(ctx.query.path))
|
||||
})
|
||||
|
||||
const FileLive = HttpApiBuilder.group(Api, "file", (handlers) =>
|
||||
handlers.handle("list", list).handle("content", content).handle("status", status),
|
||||
)
|
||||
const status = Effect.fn("FileHttpApi.status")(function* () {
|
||||
return Schema.decodeUnknownSync(Schema.Array(File.Info))(yield* svc.status())
|
||||
})
|
||||
|
||||
return handlers.handle("list", list).handle("content", content).handle("status", status)
|
||||
}),
|
||||
).pipe(Layer.provide(File.defaultLayer))
|
||||
|
||||
const web = lazy(() =>
|
||||
HttpRouter.toWebHandler(
|
||||
|
||||
Reference in New Issue
Block a user