| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import { Location } from "@opencode-ai/schema/location"
- import { Schema } from "effect"
- import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
- export const LocationQuery = Schema.Struct({
- location: Schema.optional(
- Schema.Struct({
- directory: Schema.optional(Schema.String),
- workspace: Schema.optional(Schema.String),
- }),
- ),
- }).annotate({ identifier: "LocationQuery" })
- export const locationQueryOpenApi = OpenApi.annotations({
- transform: (operation) => {
- const parameters = operation.parameters
- if (!Array.isArray(parameters)) return operation
- return {
- ...operation,
- parameters: parameters.map((parameter) =>
- parameter?.name === "location" && parameter?.in === "query"
- ? { ...parameter, style: "deepObject", explode: true }
- : parameter,
- ),
- }
- },
- })
- export const LocationGroup = HttpApiGroup.make("server.location").add(
- HttpApiEndpoint.get("location.get", "/api/location", {
- query: LocationQuery,
- success: Location.Info,
- })
- .annotateMerge(locationQueryOpenApi)
- .annotateMerge(
- OpenApi.annotations({
- identifier: "v2.location.get",
- summary: "Get location",
- description: "Resolve the requested location or the server default location.",
- }),
- ),
- )
|