Skip to content

Commit f7290ce

Browse files
committed
fix: add error logs for unsupported schemas
1 parent e5d5b13 commit f7290ce

3 files changed

Lines changed: 40 additions & 3 deletions

File tree

packages/openapi-code-generator/src/core/logger.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import util from "node:util"
22

33
export type LoggerMeta = Record<string, unknown>
44

5+
// todo: respect NO_COLOR env var, tty, TERM, etc.
56
enum Color {
67
FgRed = "\x1b[31m",
78
FgYellow = "\x1b[33m",
@@ -86,7 +87,7 @@ function defaultFormat(
8687
color = Color.Reset,
8788
) {
8889
return `${color}[${level}]${Color.Reset} ${message} ${
89-
meta ? util.inspect(meta) : ""
90+
meta ? util.inspect(meta, false, 3, false) : ""
9091
}`
9192
}
9293

packages/openapi-code-generator/src/typescript/server/server-operation-builder.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,19 +227,54 @@ export class ServerOperationBuilder {
227227

228228
private queryParameterRuntimeSchema(schema: IRModel): SchemaStructure {
229229
const type = schema.type
230+
230231
switch (type) {
231232
case "string":
232233
case "number":
233234
case "boolean":
235+
case "null": {
234236
return {type}
235-
case "array":
237+
}
238+
case "array": {
236239
return {
237240
type: "array",
238241
items: this.queryParameterRuntimeSchema(
239242
this.input.schema(schema.items),
240243
),
241244
}
245+
}
246+
242247
case "object": {
248+
const firstAnyOf = schema.anyOf[0]
249+
250+
if (firstAnyOf) {
251+
logger.error(
252+
`server templates only support parsing the **first** 'anyOf' in query parameters.`,
253+
{anyOf: schema.anyOf},
254+
)
255+
return this.queryParameterRuntimeSchema(this.input.schema(firstAnyOf))
256+
}
257+
258+
const firstOneOf = schema.oneOf[0]
259+
260+
if (firstOneOf) {
261+
logger.error(
262+
`server templates only support parsing the **first** 'oneOf' in query parameters.`,
263+
{oneOf: schema.oneOf},
264+
)
265+
return this.queryParameterRuntimeSchema(this.input.schema(firstOneOf))
266+
}
267+
268+
if (schema.allOf.length) {
269+
logger.warn(
270+
`server templates do not support allOf in query parameters. Consider keeping it simple.`,
271+
{schema},
272+
)
273+
throw new Error(
274+
"server templates do not support allOf in query parameters.",
275+
)
276+
}
277+
243278
const properties: Record<string, SchemaStructure> = {}
244279

245280
for (const key in schema.properties) {
@@ -254,7 +289,7 @@ export class ServerOperationBuilder {
254289
}
255290
}
256291
default: {
257-
throw new Error(`unsupported query parameter type ${type}`)
292+
throw new Error(`unsupported query parameter schema type '${type}'`)
258293
}
259294
}
260295
}

packages/typescript-koa-runtime/src/query-parser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ export function parseQueryParameter(
162162
switch (type) {
163163
case "object":
164164
return parseObjectQueryParameter(name, schema, encoding, query)
165+
165166
case "array":
166167
return parseArrayQueryParameter(name, schema, encoding, query)
167168

0 commit comments

Comments
 (0)