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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/fluffy-guests-train.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@hey-api/openapi-ts': patch
---

Support `exactOptionalPropertyTypes`
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ export interface ResolvedRequestOptions<
ThrowOnError extends boolean = boolean,
Url extends string = string,
> extends RequestOptions<unknown, TResponseStyle, ThrowOnError, Url> {
serializedBody?: string;
serializedBody?: string | undefined;
}

export type RequestResult<
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ export interface Auth {
*
* @default 'header'
*/
in?: 'header' | 'query' | 'cookie';
in?: 'header' | 'query' | 'cookie' | undefined;
/**
* Header or query parameter name.
*
* @default 'Authorization'
*/
name?: string;
scheme?: 'basic' | 'bearer';
name?: string | undefined;
scheme?: 'basic' | 'bearer' | undefined;
type: 'apiKey' | 'http';
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@ export type QuerySerializer = (query: Record<string, unknown>) => string;
export type BodySerializer = (body: any) => any;

type QuerySerializerOptionsObject = {
allowReserved?: boolean;
array?: Partial<SerializerOptions<ArrayStyle>>;
object?: Partial<SerializerOptions<ObjectStyle>>;
allowReserved?: boolean | undefined;
array?: Partial<SerializerOptions<ArrayStyle>> | undefined;
object?: Partial<SerializerOptions<ObjectStyle>> | undefined;
};

export type QuerySerializerOptions = QuerySerializerOptionsObject & {
/**
* Per-parameter serialization overrides. When provided, these settings
* override the global array/object settings for specific parameter names.
*/
parameters?: Record<string, QuerySerializerOptionsObject>;
parameters?: Record<string, QuerySerializerOptionsObject> | undefined;
};

const serializeFormDataPair = (
Expand Down
12 changes: 6 additions & 6 deletions examples/openapi-ts-angular-common/src/client/core/params.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ export type Field =
* Field mapped name. This is the name we want to use in the request.
* If omitted, we use the same value as `key`.
*/
map?: string;
map?: string | undefined;
}
| {
in: Extract<Slot, 'body'>;
/**
* Key isn't required for bodies.
*/
key?: string;
map?: string;
key?: string | undefined;
map?: string | undefined;
}
| {
/**
Expand All @@ -36,8 +36,8 @@ export type Field =
};

export interface Fields {
allowExtra?: Partial<Record<Slot, boolean>>;
args?: ReadonlyArray<Field>;
allowExtra?: Partial<Record<Slot, boolean>> | undefined;
args?: ReadonlyArray<Field> | undefined;
}

export type FieldsConfig = ReadonlyArray<Field | Fields>;
Expand All @@ -54,7 +54,7 @@ type KeyMap = Map<
string,
| {
in: Slot;
map?: string;
map?: string | undefined;
}
| {
in?: never;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ interface SerializeOptions<T>
SerializerOptions<T> {}

interface SerializePrimitiveOptions {
allowReserved?: boolean;
allowReserved?: boolean | undefined;
name: string;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,21 @@ export type ServerSentEventsOptions<TData = unknown> = Omit<
*
* @default globalThis.fetch
*/
fetch?: typeof fetch;
fetch?: typeof fetch | undefined;
/**
* Implementing clients can call request interceptors inside this hook.
*/
onRequest?: (url: string, init: RequestInit) => Promise<Request>;
onRequest?:
| ((url: string, init: RequestInit) => Promise<Request>)
| undefined;
/**
* Callback invoked when a network or parsing error occurs during streaming.
*
* This option applies only if the endpoint returns a stream of events.
*
* @param error The error that occurred.
*/
onSseError?: (error: unknown) => void;
onSseError?: ((error: unknown) => void) | undefined;
/**
* Callback invoked when an event is streamed from the server.
*
Expand All @@ -34,20 +36,20 @@ export type ServerSentEventsOptions<TData = unknown> = Omit<
* @param event Event streamed from the server.
* @returns Nothing (void).
*/
onSseEvent?: (event: StreamEvent<TData>) => void;
serializedBody?: RequestInit['body'];
onSseEvent?: ((event: StreamEvent<TData>) => void) | undefined;
serializedBody?: RequestInit['body'] | undefined;
/**
* Default retry delay in milliseconds.
*
* This option applies only if the endpoint returns a stream of events.
*
* @default 3000
*/
sseDefaultRetryDelay?: number;
sseDefaultRetryDelay?: number | undefined;
/**
* Maximum number of retry attempts before giving up.
*/
sseMaxRetryAttempts?: number;
sseMaxRetryAttempts?: number | undefined;
/**
* Maximum retry delay in milliseconds.
*
Expand All @@ -57,21 +59,21 @@ export type ServerSentEventsOptions<TData = unknown> = Omit<
*
* @default 30000
*/
sseMaxRetryDelay?: number;
sseMaxRetryDelay?: number | undefined;
/**
* Optional sleep function for retry backoff.
*
* Defaults to using `setTimeout`.
*/
sseSleepFn?: (ms: number) => Promise<void>;
sseSleepFn?: ((ms: number) => Promise<void>) | undefined;
url: string;
};

export interface StreamEvent<TData = unknown> {
data: TData;
event?: string;
id?: string;
retry?: number;
event?: string | undefined;
id?: string | undefined;
retry?: number | undefined;
}

export type ServerSentEventsResult<
Expand Down
20 changes: 12 additions & 8 deletions examples/openapi-ts-angular-common/src/client/core/types.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,15 @@ export interface Config {
* Auth token or a function returning auth token. The resolved value will be
* added to the request payload as defined by its `security` array.
*/
auth?: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken;
auth?:
| ((auth: Auth) => Promise<AuthToken> | AuthToken)
| AuthToken
| undefined;
/**
* A function for serializing request body parameter. By default,
* {@link JSON.stringify()} will be used.
*/
bodySerializer?: BodySerializer | null;
bodySerializer?: BodySerializer | null | undefined;
/**
* An object containing any HTTP headers that you want to pre-populate your
* `Headers` object with.
Expand All @@ -66,13 +69,14 @@ export interface Config {
| null
| undefined
| unknown
>;
>
| undefined;
/**
* The request method.
*
* {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more}
*/
method?: Uppercase<HttpMethod>;
method?: Uppercase<HttpMethod> | undefined;
/**
* A function for serializing request query parameters. By default, arrays
* will be exploded in form style, objects will be exploded in deepObject
Expand All @@ -83,24 +87,24 @@ export interface Config {
*
* {@link https://swagger.io/docs/specification/serialization/#query View examples}
*/
querySerializer?: QuerySerializer | QuerySerializerOptions;
querySerializer?: QuerySerializer | QuerySerializerOptions | undefined;
/**
* A function validating request data. This is useful if you want to ensure
* the request conforms to the desired shape, so it can be safely sent to
* the server.
*/
requestValidator?: (data: unknown) => Promise<unknown>;
requestValidator?: (data: unknown) => Promise<unknown> | undefined;
/**
* A function transforming response data before it's returned. This is useful
* for post-processing data, e.g. converting ISO strings into Date objects.
*/
responseTransformer?: (data: unknown) => Promise<unknown>;
responseTransformer?: (data: unknown) => Promise<unknown> | undefined;
/**
* A function validating response data. This is useful if you want to ensure
* the response conforms to the desired shape, so it can be safely passed to
* the transformers and returned to the user.
*/
responseValidator?: (data: unknown) => Promise<unknown>;
responseValidator?: (data: unknown) => Promise<unknown> | undefined;
}

type IsExactlyNeverOrNeverUndefined<T> = [T] extends [never]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,9 @@ export const getUrl = ({
};

export function getValidRequestBody(options: {
body?: unknown;
bodySerializer?: BodySerializer | null;
serializedBody?: unknown;
body?: unknown | undefined;
bodySerializer?: BodySerializer | null | undefined;
serializedBody?: unknown | undefined;
}) {
const hasBody = options.body !== undefined;
const isSerializedBody = hasBody && options.bodySerializer;
Expand Down
2 changes: 1 addition & 1 deletion examples/openapi-ts-angular/src/client/client/types.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ export interface ResolvedRequestOptions<
ThrowOnError extends boolean = boolean,
Url extends string = string,
> extends RequestOptions<unknown, TResponseStyle, ThrowOnError, Url> {
serializedBody?: string;
serializedBody?: string | undefined;
}

export type RequestResult<
Expand Down
6 changes: 3 additions & 3 deletions examples/openapi-ts-angular/src/client/core/auth.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ export interface Auth {
*
* @default 'header'
*/
in?: 'header' | 'query' | 'cookie';
in?: 'header' | 'query' | 'cookie' | undefined;
/**
* Header or query parameter name.
*
* @default 'Authorization'
*/
name?: string;
scheme?: 'basic' | 'bearer';
name?: string | undefined;
scheme?: 'basic' | 'bearer' | undefined;
type: 'apiKey' | 'http';
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,17 @@ export type QuerySerializer = (query: Record<string, unknown>) => string;
export type BodySerializer = (body: any) => any;

type QuerySerializerOptionsObject = {
allowReserved?: boolean;
array?: Partial<SerializerOptions<ArrayStyle>>;
object?: Partial<SerializerOptions<ObjectStyle>>;
allowReserved?: boolean | undefined;
array?: Partial<SerializerOptions<ArrayStyle>> | undefined;
object?: Partial<SerializerOptions<ObjectStyle>> | undefined;
};

export type QuerySerializerOptions = QuerySerializerOptionsObject & {
/**
* Per-parameter serialization overrides. When provided, these settings
* override the global array/object settings for specific parameter names.
*/
parameters?: Record<string, QuerySerializerOptionsObject>;
parameters?: Record<string, QuerySerializerOptionsObject> | undefined;
};

const serializeFormDataPair = (
Expand Down
12 changes: 6 additions & 6 deletions examples/openapi-ts-angular/src/client/core/params.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ export type Field =
* Field mapped name. This is the name we want to use in the request.
* If omitted, we use the same value as `key`.
*/
map?: string;
map?: string | undefined;
}
| {
in: Extract<Slot, 'body'>;
/**
* Key isn't required for bodies.
*/
key?: string;
map?: string;
key?: string | undefined;
map?: string | undefined;
}
| {
/**
Expand All @@ -36,8 +36,8 @@ export type Field =
};

export interface Fields {
allowExtra?: Partial<Record<Slot, boolean>>;
args?: ReadonlyArray<Field>;
allowExtra?: Partial<Record<Slot, boolean>> | undefined;
args?: ReadonlyArray<Field> | undefined;
}

export type FieldsConfig = ReadonlyArray<Field | Fields>;
Expand All @@ -54,7 +54,7 @@ type KeyMap = Map<
string,
| {
in: Slot;
map?: string;
map?: string | undefined;
}
| {
in?: never;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ interface SerializeOptions<T>
SerializerOptions<T> {}

interface SerializePrimitiveOptions {
allowReserved?: boolean;
allowReserved?: boolean | undefined;
name: string;
}

Expand Down
Loading
Loading