Zodios v10.9.3 brakes path parameters
wilfried-huss opened this issue · 3 comments
wilfried-huss commented
With v10.9.3 I get a compilation error on API definitions that worked in previous zodios version.
Here is an abbreviated example that shows the problem:
import { makeApi, Zodios } from "@zodios/core";
import { z } from "zod";
const boosterEndpoints = makeApi([
{
method: "post",
path: "/boosters/:booster/:channel_index/:enabled",
requestFormat: "json",
parameters: [
{
name: "booster",
type: "Path",
schema: z.string(),
},
{
name: "channel_index",
type: "Path",
schema: z.number().int(),
},
{
name: "enabled",
type: "Path",
schema: z.boolean(),
},
],
response: z.string(),
},
]);
export const boosterApi = new Zodios(boosterEndpoints);
boosterApi.post("/boosters/:booster/:channel_index/:enabled", undefined, {
params: { enabled: true, booster: "booster0", channel_index: 0 },
});
This gives the follow compilation error:
src/api/client/booster.ts:36:7 - error TS2345: Argument of type '{ params: { enabled: boolean; booster: string; channel_index: number; }; }' is not assignable to parameter of type 'DeepReadonlyObject<{ headers?: AxiosHeaders | (Partial<RawAxiosHeaders & { Accept: AxiosHeaderValue; "Content-Length": AxiosHeaderValue; "User-Agent": AxiosHeaderValue; "Content-Encoding": AxiosHeaderValue; Authorization: AxiosHeaderValue; } & { 'Content-Type': ContentType; }> & Partial<{ head: AxiosHeaders; link: AxiosHeaders; get: AxiosHeaders; options: AxiosHeaders; post: AxiosHeaders; put: AxiosHeaders; patch: AxiosHeaders; delete: AxiosHeaders; purge: AxiosHeaders; unlink: AxiosHeaders; } & { common: AxiosHeaders; }>) | undefined; transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[] | undefined; transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[] | undefined; paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer | undefined; timeout?: number | undefined; timeoutErrorMessage?: string | undefined; withCredentials?: boolean | undefined; adapter?: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined; auth?: AxiosBasicCredentials | undefined; responseType?: ResponseType | undefined; responseEncoding?: string | undefined; xsrfCookieName?: string | undefined; xsrfHeaderName?: string | undefined; onUploadProgress?: ((progressEvent: AxiosProgressEvent) => void) | undefined; onDownloadProgress?: ((progressEvent: AxiosProgressEvent) => void) | undefined; maxContentLength?: number | undefined; validateStatus?: ((status: number) => boolean) | null | undefined; maxBodyLength?: number | undefined; maxRedirects?: number | undefined; maxRate?: number | [number, number] | undefined; beforeRedirect?: ((options: Record<string, any>, responseDetails: { headers: Record<string, string>; }) => void) | undefined; socketPath?: string | null | undefined; transport?: any; httpAgent?: any; httpsAgent?: any; proxy?: false | AxiosProxyConfig | undefined; cancelToken?: CancelToken | undefined; decompress?: boolean | undefined; transitional?: TransitionalOptions | undefined; signal?: GenericAbortSignal | undefined; insecureHTTPParser?: boolean | undefined; env?: { FormData?: (new (...args: any[]) => object) | undefined; } | undefined; formSerializer?: FormSerializerOptions | undefined; family?: 6 | 4 | undefined; lookup?: ((hostname: string, options: object, cb: (err: Error | null, address: string, family: number) => void) => void) | ((hostname: string, options: object) => Promise<string | [address: string, family: number]>) | undefined; }>'.
Object literal may only specify known properties, and 'params' does not exist in type 'DeepReadonlyObject<{ headers?: AxiosHeaders | (Partial<RawAxiosHeaders & { Accept: AxiosHeaderValue; "Content-Length": AxiosHeaderValue; "User-Agent": AxiosHeaderValue; "Content-Encoding": AxiosHeaderValue; Authorization: AxiosHeaderValue; } & { 'Content-Type': ContentType; }> & Partial<{ head: AxiosHeaders; link: AxiosHeaders; get: AxiosHeaders; options: AxiosHeaders; post: AxiosHeaders; put: AxiosHeaders; patch: AxiosHeaders; delete: AxiosHeaders; purge: AxiosHeaders; unlink: AxiosHeaders; } & { common: AxiosHeaders; }>) | undefined; transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[] | undefined; transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[] | undefined; paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer | undefined; timeout?: number | undefined; timeoutErrorMessage?: string | undefined; withCredentials?: boolean | undefined; adapter?: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined; auth?: AxiosBasicCredentials | undefined; responseType?: ResponseType | undefined; responseEncoding?: string | undefined; xsrfCookieName?: string | undefined; xsrfHeaderName?: string | undefined; onUploadProgress?: ((progressEvent: AxiosProgressEvent) => void) | undefined; onDownloadProgress?: ((progressEvent: AxiosProgressEvent) => void) | undefined; maxContentLength?: number | undefined; validateStatus?: ((status: number) => boolean) | null | undefined; maxBodyLength?: number | undefined; maxRedirects?: number | undefined; maxRate?: number | [number, number] | undefined; beforeRedirect?: ((options: Record<string, any>, responseDetails: { headers: Record<string, string>; }) => void) | undefined; socketPath?: string | null | undefined; transport?: any; httpAgent?: any; httpsAgent?: any; proxy?: false | AxiosProxyConfig | undefined; cancelToken?: CancelToken | undefined; decompress?: boolean | undefined; transitional?: TransitionalOptions | undefined; signal?: GenericAbortSignal | undefined; insecureHTTPParser?: boolean | undefined; env?: { FormData?: (new (...args: any[]) => object) | undefined; } | undefined; formSerializer?: FormSerializerOptions | undefined; family?: 6 | 4 | undefined; lookup?: ((hostname: string, options: object, cb: (err: Error | null, address: string, family: number) => void) => void) | ((hostname: string, options: object) => Promise<string | [address: string, family: number]>) | undefined; }>'.
36 { params: { enabled: true, booster: "booster0", channel_index: 0 } },
~~~~~~
With v10.9.2 the same code compiles without issues.
ecyrbe commented
thanks for the report, the bug seeams to happen when having a boolean defined. i'll fix that ASAP
ecyrbe commented
this is fixed in v10.9.4
, thanks again for the early report.
wilfried-huss commented
Thanks, for fixing the problem so fast.