MCPcopy Index your code
hub / github.com/anomalyco/opencode / renderGroup

Function renderGroup

packages/httpapi-codegen/src/index.ts:1012–1121  ·  view source on GitHub ↗
(group: Group, groupIndex: number)

Source from the content-addressed store, hash-verified

1010}
1011
1012function renderGroup(group: Group, groupIndex: number) {
1013 const slots: Array<Slot> = []
1014 const adapters: Array<string> = []
1015 const endpointSources = group.endpoints.map((operation, endpointIndex) => {
1016 const {
1017 endpoint,
1018 errors,
1019 headers: endpointHeaders,
1020 params: endpointParams,
1021 payloads: endpointPayloads,
1022 query: endpointQuery,
1023 successes,
1024 } = operation
1025 const prefix = `Endpoint${endpointIndex}`
1026 const params = addSlot(endpointParams, `${prefix}Params`)
1027 const query = addSlot(endpointQuery, `${prefix}Query`)
1028 const headers = addSlot(endpointHeaders, `${prefix}Headers`)
1029 const payloads = endpointPayloads.map((schema, index) => addSlot(schema, `${prefix}Payload${index}`)!)
1030 const success = renderSuccess(successes[0], `${prefix}Success`)
1031 const errorSlots = errors.map((error, index) => addSlot(error.schema, `${prefix}Error${index}`)!)
1032 const options = [
1033 params === undefined ? undefined : `params: ${params.name}`,
1034 query === undefined ? undefined : `query: ${query.name}`,
1035 headers === undefined ? undefined : `headers: ${headers.name}`,
1036 payloads.length === 0
1037 ? undefined
1038 : `payload: ${payloads.length === 1 ? payloads[0].name : `[${payloads.map((slot) => slot.name).join(", ")}]`}`,
1039 `success: ${success.source}`,
1040 errorSlots.length === 0
1041 ? undefined
1042 : `error: ${errorSlots.length === 1 ? errorSlots[0].name : `[${errorSlots.map((slot) => slot.name).join(", ")}]`}`,
1043 ].filter((option): option is string => option !== undefined)
1044 const schemaBySource = { params, query, headers, payload: payloads[0] }
1045 const inputType = operation.input
1046 .map((field) => {
1047 const slot = schemaBySource[field.source]
1048 if (slot === undefined) {
1049 throw new GenerationError({ reason: `Missing input schema: ${group.identifier}.${endpoint.name}` })
1050 }
1051 return `readonly ${JSON.stringify(field.name)}${field.optional ? "?" : ""}: (typeof ${slot.name}.Type)[${JSON.stringify(field.name)}]`
1052 })
1053 .join("; ")
1054 const argument =
1055 operation.operation.inputMode === "none"
1056 ? ""
1057 : `input${operation.operation.inputMode === "optional" ? "?" : ""}: ${prefix}Input`
1058 const request = (["params", "query", "headers", "payload"] as const)
1059 .flatMap((source) => {
1060 const slot = schemaBySource[source]
1061 if (slot === undefined) return []
1062 const fields = operation.input
1063 .filter((field) => field.source === source)
1064 .map(
1065 (field) =>
1066 `${JSON.stringify(field.name)}: input${operation.operation.inputMode === "optional" ? "?." : ""}[${JSON.stringify(field.name)}]`,
1067 )
1068 return [`${source}: { ${fields.join(", ")} }`]
1069 })

Callers 1

renderEffectFilesFunction · 0.85

Calls 4

addSlotFunction · 0.85
renderSuccessFunction · 0.85
renderSchemasFunction · 0.85
pushMethod · 0.80

Tested by

no test coverage detected