(group: Group, groupIndex: number)
| 1010 | } |
| 1011 | |
| 1012 | function 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 | }) |
no test coverage detected