docs-util: support new query type argument (#10468)
* add support for second query argument * more fixes
This commit is contained in:
1 parent
e3459b1f2f
commit
abdd4c9e99
2 files changed
+65
-20
No files matched your search
@@ -37,6 +37,12 @@ class SchemaFactory {
|
|||||||
BigNumberValue: {
|
BigNumberValue: {
|
||||||
type: "number",
|
type: "number",
|
||||||
},
|
},
|
||||||
|
difference_due: {
|
||||||
|
type: "number",
|
||||||
|
},
|
||||||
|
refund_amount: {
|
||||||
|
type: "number",
|
||||||
|
},
|
||||||
File: {
|
File: {
|
||||||
type: "object",
|
type: "object",
|
||||||
description: "A File to upload.",
|
description: "A File to upload.",
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ class OasKindGenerator extends FunctionKindGenerator {
|
|||||||
"MedusaRequest",
|
"MedusaRequest",
|
||||||
"RequestWithContext",
|
"RequestWithContext",
|
||||||
"AuthenticatedMedusaRequest",
|
"AuthenticatedMedusaRequest",
|
||||||
|
"MedusaStoreRequest",
|
||||||
]
|
]
|
||||||
// as it's not always possible to detect authenticated request
|
// as it's not always possible to detect authenticated request
|
||||||
// use this to override the default detection logic.
|
// use this to override the default detection logic.
|
||||||
@@ -1015,13 +1016,19 @@ class OasKindGenerator extends FunctionKindGenerator {
|
|||||||
*/
|
*/
|
||||||
requestSchema?: OpenApiSchema
|
requestSchema?: OpenApiSchema
|
||||||
} {
|
} {
|
||||||
const parameters: OpenAPIV3.ParameterObject[] = []
|
const queryParameters: OpenAPIV3.ParameterObject[] = []
|
||||||
let requestSchema: OpenApiSchema | undefined
|
let requestSchema: OpenApiSchema | undefined
|
||||||
|
|
||||||
if (
|
if (
|
||||||
node.parameters[0].type &&
|
!node.parameters[0].type ||
|
||||||
ts.isTypeReferenceNode(node.parameters[0].type)
|
!ts.isTypeReferenceNode(node.parameters[0].type)
|
||||||
) {
|
) {
|
||||||
|
return {
|
||||||
|
queryParameters,
|
||||||
|
requestSchema,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const requestType = this.checker.getTypeFromTypeNode(
|
const requestType = this.checker.getTypeFromTypeNode(
|
||||||
node.parameters[0].type
|
node.parameters[0].type
|
||||||
) as ts.TypeReference
|
) as ts.TypeReference
|
||||||
@@ -1054,7 +1061,7 @@ class OasKindGenerator extends FunctionKindGenerator {
|
|||||||
symbol: property,
|
symbol: property,
|
||||||
nodeType: propertyType,
|
nodeType: propertyType,
|
||||||
}
|
}
|
||||||
parameters.push(
|
queryParameters.push(
|
||||||
this.getParameterObject({
|
this.getParameterObject({
|
||||||
name: propertyName,
|
name: propertyName,
|
||||||
type: "query",
|
type: "query",
|
||||||
@@ -1075,60 +1082,92 @@ class OasKindGenerator extends FunctionKindGenerator {
|
|||||||
const requestTypeArguments =
|
const requestTypeArguments =
|
||||||
requestType.typeArguments || requestType.aliasTypeArguments
|
requestType.typeArguments || requestType.aliasTypeArguments
|
||||||
|
|
||||||
if (requestTypeArguments?.length === 1) {
|
if (!requestTypeArguments || requestTypeArguments.length < 2) {
|
||||||
const zodObjectTypeName = getCorrectZodTypeName({
|
return {
|
||||||
|
queryParameters,
|
||||||
|
requestSchema,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Not all routes support a second type argument yet,
|
||||||
|
// so the query param may be passed in the first type argument
|
||||||
|
const hasQueryParams = requestTypeArguments[1].getProperties().length > 0
|
||||||
|
// Not all routes support a second type argument yet,
|
||||||
|
// so we have to support routes that pass the query parameters type
|
||||||
|
// in the first type argument
|
||||||
|
const isQuery = methodName === "get"
|
||||||
|
|
||||||
|
const zodObjectRequestBodyTypeName = getCorrectZodTypeName({
|
||||||
typeReferenceNode: node.parameters[0].type,
|
typeReferenceNode: node.parameters[0].type,
|
||||||
itemType: requestTypeArguments[0],
|
itemType: requestTypeArguments[0],
|
||||||
})
|
})
|
||||||
const isQuery = methodName === "get"
|
const zodObjectQueryTypeName = getCorrectZodTypeName({
|
||||||
const parameterSchema = this.typeToSchema({
|
typeReferenceNode: node.parameters[0].type,
|
||||||
|
itemType: requestTypeArguments[1],
|
||||||
|
})
|
||||||
|
|
||||||
|
const requestBodyParameterSchema = this.typeToSchema({
|
||||||
itemType: requestTypeArguments[0],
|
itemType: requestTypeArguments[0],
|
||||||
descriptionOptions: {
|
descriptionOptions: {
|
||||||
parentName: tagName,
|
parentName: tagName,
|
||||||
rawParentName: this.checker.typeToString(requestTypeArguments[0]),
|
rawParentName: this.checker.typeToString(requestTypeArguments[0]),
|
||||||
},
|
},
|
||||||
zodObjectTypeName: zodObjectTypeName,
|
zodObjectTypeName: zodObjectRequestBodyTypeName,
|
||||||
context: isQuery ? "query" : "request",
|
context: isQuery ? "query" : "request",
|
||||||
saveSchema: !forUpdate,
|
saveSchema: !forUpdate,
|
||||||
})
|
})
|
||||||
|
const queryParameterSchema = hasQueryParams
|
||||||
|
? this.typeToSchema({
|
||||||
|
itemType: requestTypeArguments[1],
|
||||||
|
descriptionOptions: {
|
||||||
|
parentName: tagName,
|
||||||
|
rawParentName: this.checker.typeToString(requestTypeArguments[1]),
|
||||||
|
},
|
||||||
|
zodObjectTypeName: zodObjectQueryTypeName,
|
||||||
|
context: "query",
|
||||||
|
saveSchema: !forUpdate,
|
||||||
|
})
|
||||||
|
: requestBodyParameterSchema
|
||||||
|
|
||||||
// If function is a GET function, add the type parameter to the
|
// If function is a GET function, add the type parameter to the
|
||||||
// query parameters instead of request parameters.
|
// query parameters instead of request parameters.
|
||||||
if (isQuery) {
|
if (
|
||||||
if (parameterSchema.type === "object" && parameterSchema.properties) {
|
(isQuery || hasQueryParams) &&
|
||||||
Object.entries(parameterSchema.properties).forEach(
|
queryParameterSchema.type === "object" &&
|
||||||
|
queryParameterSchema.properties
|
||||||
|
) {
|
||||||
|
Object.entries(queryParameterSchema.properties).forEach(
|
||||||
([key, propertySchema]) => {
|
([key, propertySchema]) => {
|
||||||
if ("$ref" in propertySchema) {
|
if ("$ref" in propertySchema) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if parameter is already added
|
// check if parameter is already added
|
||||||
const isAdded = parameters.some((param) => param.name === key)
|
const isAdded = queryParameters.some((param) => param.name === key)
|
||||||
|
|
||||||
if (isAdded) {
|
if (isAdded) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
parameters.push(
|
queryParameters.push(
|
||||||
this.getParameterObject({
|
this.getParameterObject({
|
||||||
name: key,
|
name: key,
|
||||||
type: "query",
|
type: "query",
|
||||||
description: propertySchema.description,
|
description: propertySchema.description,
|
||||||
required: parameterSchema.required?.includes(key) || false,
|
required: queryParameterSchema.required?.includes(key) || false,
|
||||||
schema: propertySchema,
|
schema: propertySchema,
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else if (methodName !== "delete") {
|
|
||||||
requestSchema = parameterSchema
|
if (methodName !== "delete" && methodName !== "get") {
|
||||||
}
|
requestSchema = requestBodyParameterSchema
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
queryParameters: parameters,
|
queryParameters,
|
||||||
requestSchema,
|
requestSchema,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user