Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions express-zod-api/src/api-response.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { z } from "zod";

export type StatusCode = number | "1XX" | "2XX" | "3XX" | "4XX" | "5XX";

export const defaultStatusCodes = {
positive: 200,
negative: 400,
Expand All @@ -21,7 +23,7 @@ export interface ApiResponse<S extends z.ZodType> {
* @desc The status code(s) for this response.
* @default 200 for a positive response, 400 for a negative one
* */
statusCode?: number | [number, ...number[]];
statusCode?: StatusCode | [StatusCode, ...StatusCode[]];
/**
* @desc The MIME type(s) of the response.
* @default "application/json"
Expand All @@ -36,6 +38,6 @@ export interface ApiResponse<S extends z.ZodType> {
* */
export interface NormalizedResponse {
schema: z.ZodType;
statusCodes: [number, ...number[]];
statusCodes: [StatusCode, ...StatusCode[]];
mimeTypes: [string, ...string[]] | null;
}
8 changes: 6 additions & 2 deletions express-zod-api/src/documentation-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ import {
} from "openapi3-ts/oas31";
import * as R from "ramda";
import { z } from "zod";
import type { NormalizedResponse, ResponseVariant } from "./api-response";
import type {
NormalizedResponse,
ResponseVariant,
StatusCode,
} from "./api-response";
import { ezBufferBrand } from "./buffer-schema";
import {
type FlatObject,
Expand Down Expand Up @@ -446,7 +450,7 @@ export const depictResponse = ({
brandHandling?: BrandHandling;
mimeTypes: NormalizedResponse["mimeTypes"];
variant: ResponseVariant;
statusCode: number;
statusCode: StatusCode;
hasMultipleStatusCodes: boolean;
}): ResponseObject => {
if (!shouldHaveContent(method, mimeTypes)) return { description };
Expand Down
8 changes: 6 additions & 2 deletions express-zod-api/src/documentation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ import {
OpenApiBuilder,
} from "openapi3-ts/oas31";
import * as R from "ramda";
import { type ResponseVariant, responseVariants } from "./api-response";
import {
type ResponseVariant,
type StatusCode,
responseVariants,
} from "./api-response";
import { contentTypes } from "./content-type";
import { DocumentationError } from "./errors";
import { getInputSources, makeCleanId } from "./common-helpers";
Expand Down Expand Up @@ -41,7 +45,7 @@ type Component =
/** @desc user defined function that creates a component description from its properties */
type Descriptor = (
props: Record<"method" | "path" | "operationId", string> & {
statusCode?: number; // for response only
statusCode?: StatusCode; // for response only
},
) => string;

Expand Down
2 changes: 1 addition & 1 deletion express-zod-api/src/result-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ export const normalize = <A extends unknown[]>(
({ schema, statusCode, mimeType }) => ({
schema,
statusCodes:
typeof statusCode === "number"
typeof statusCode === "number" || typeof statusCode === "string"
? [statusCode]
: statusCode || fallback.statusCodes,
mimeTypes:
Expand Down