fix(worktree): type expected errors (#27296)
This commit is contained in:
@@ -54,6 +54,22 @@ export const ToolListQuery = Schema.Struct({
|
||||
})
|
||||
|
||||
const WorktreeList = Schema.Array(Schema.String)
|
||||
const WorktreeErrorName = Schema.Union([
|
||||
Schema.Literal("WorktreeNotGitError"),
|
||||
Schema.Literal("WorktreeNameGenerationFailedError"),
|
||||
Schema.Literal("WorktreeCreateFailedError"),
|
||||
Schema.Literal("WorktreeStartCommandFailedError"),
|
||||
Schema.Literal("WorktreeRemoveFailedError"),
|
||||
Schema.Literal("WorktreeResetFailedError"),
|
||||
Schema.Literal("WorktreeListFailedError"),
|
||||
])
|
||||
export class WorktreeApiError extends Schema.ErrorClass<WorktreeApiError>("WorktreeError")(
|
||||
{
|
||||
name: WorktreeErrorName,
|
||||
data: Schema.Struct({ message: Schema.String }),
|
||||
},
|
||||
{ httpApiStatus: 400 },
|
||||
) {}
|
||||
export const SessionListQuery = Schema.Struct({
|
||||
...WorkspaceRoutingQueryFields,
|
||||
roots: Schema.optional(QueryBoolean),
|
||||
@@ -141,6 +157,7 @@ export const ExperimentalApi = HttpApi.make("experimental")
|
||||
HttpApiEndpoint.get("worktree", ExperimentalPaths.worktree, {
|
||||
query: WorkspaceRoutingQuery,
|
||||
success: described(WorktreeList, "List of worktree directories"),
|
||||
error: WorktreeApiError,
|
||||
}).annotateMerge(
|
||||
OpenApi.annotations({
|
||||
identifier: "worktree.list",
|
||||
@@ -152,7 +169,7 @@ export const ExperimentalApi = HttpApi.make("experimental")
|
||||
query: WorkspaceRoutingQuery,
|
||||
payload: Schema.optional(Worktree.CreateInput),
|
||||
success: described(Worktree.Info, "Worktree created"),
|
||||
error: HttpApiError.BadRequest,
|
||||
error: WorktreeApiError,
|
||||
}).annotateMerge(
|
||||
OpenApi.annotations({
|
||||
identifier: "worktree.create",
|
||||
@@ -164,7 +181,7 @@ export const ExperimentalApi = HttpApi.make("experimental")
|
||||
query: WorkspaceRoutingQuery,
|
||||
payload: Worktree.RemoveInput,
|
||||
success: described(Schema.Boolean, "Worktree removed"),
|
||||
error: HttpApiError.BadRequest,
|
||||
error: WorktreeApiError,
|
||||
}).annotateMerge(
|
||||
OpenApi.annotations({
|
||||
identifier: "worktree.remove",
|
||||
@@ -176,7 +193,7 @@ export const ExperimentalApi = HttpApi.make("experimental")
|
||||
query: WorkspaceRoutingQuery,
|
||||
payload: Worktree.ResetInput,
|
||||
success: described(Schema.Boolean, "Worktree reset"),
|
||||
error: HttpApiError.BadRequest,
|
||||
error: WorktreeApiError,
|
||||
}).annotateMerge(
|
||||
OpenApi.annotations({
|
||||
identifier: "worktree.reset",
|
||||
|
||||
@@ -12,7 +12,15 @@ import { Effect, Option } from "effect"
|
||||
import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse"
|
||||
import { HttpApiBuilder, HttpApiError } from "effect/unstable/httpapi"
|
||||
import { InstanceHttpApi } from "../api"
|
||||
import { ConsoleSwitchPayload, SessionListQuery, ToolListQuery } from "../groups/experimental"
|
||||
import { ConsoleSwitchPayload, SessionListQuery, ToolListQuery, WorktreeApiError } from "../groups/experimental"
|
||||
|
||||
function mapWorktreeError<A, R>(self: Effect.Effect<A, Worktree.Error, R>) {
|
||||
return self.pipe(
|
||||
Effect.mapError(
|
||||
(error) => new WorktreeApiError({ name: error._tag, data: { message: error.message } }),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
export const experimentalHandlers = HttpApiBuilder.group(InstanceHttpApi, "experimental", (handlers) =>
|
||||
Effect.gen(function* () {
|
||||
@@ -100,14 +108,14 @@ export const experimentalHandlers = HttpApiBuilder.group(InstanceHttpApi, "exper
|
||||
const worktreeCreate = Effect.fn("ExperimentalHttpApi.worktreeCreate")(function* (ctx: {
|
||||
payload: Worktree.CreateInput | undefined
|
||||
}) {
|
||||
return yield* worktreeSvc.create(ctx.payload)
|
||||
return yield* mapWorktreeError(worktreeSvc.create(ctx.payload))
|
||||
})
|
||||
|
||||
const worktreeRemove = Effect.fn("ExperimentalHttpApi.worktreeRemove")(function* (input: {
|
||||
payload: Worktree.RemoveInput
|
||||
}) {
|
||||
const ctx = yield* InstanceState.context
|
||||
yield* worktreeSvc.remove(input.payload)
|
||||
yield* mapWorktreeError(worktreeSvc.remove(input.payload))
|
||||
yield* project.removeSandbox(ctx.project.id, input.payload.directory)
|
||||
return true
|
||||
})
|
||||
@@ -115,7 +123,7 @@ export const experimentalHandlers = HttpApiBuilder.group(InstanceHttpApi, "exper
|
||||
const worktreeReset = Effect.fn("ExperimentalHttpApi.worktreeReset")(function* (ctx: {
|
||||
payload: Worktree.ResetInput
|
||||
}) {
|
||||
yield* worktreeSvc.reset(ctx.payload)
|
||||
yield* mapWorktreeError(worktreeSvc.reset(ctx.payload))
|
||||
return true
|
||||
})
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@ export const errorLayer = HttpRouter.middleware<{ handles: unknown }>()((effect)
|
||||
status: iife(() => {
|
||||
if (error instanceof Provider.ModelNotFoundError) return 400
|
||||
if (error.name === "ProviderAuthValidationFailed") return 400
|
||||
if (error.name.startsWith("Worktree")) return 400
|
||||
return 500
|
||||
}),
|
||||
}),
|
||||
|
||||
Reference in New Issue
Block a user