Skip to content
Open
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
7 changes: 7 additions & 0 deletions packages/openapi-ts-tests/main/test/3.0.x.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,13 @@ describe(`OpenAPI ${version}`, () => {
}),
description: 'handles snake_case identifier casing',
},
{
config: createConfig({
input: 'components-headers.yaml',
output: 'components-headers',
}),
description: 'handles reusable header and response components',
},
{
config: createConfig({
input: 'components-request-bodies.json',
Expand Down
7 changes: 7 additions & 0 deletions packages/openapi-ts-tests/main/test/3.1.x.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,13 @@ describe(`OpenAPI ${version}`, () => {
}),
description: 'handles snake_case identifier casing',
},
{
config: createConfig({
input: 'components-headers.yaml',
output: 'components-headers',
}),
description: 'handles reusable header and response components',
},
{
config: createConfig({
input: 'components-request-bodies.json',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// This file is auto-generated by @hey-api/openapi-ts

export type { ClientOptions, Foo, GetFooData, GetFooResponse, GetFooResponses, NotFound, XRateLimit } from './types.gen';
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// This file is auto-generated by @hey-api/openapi-ts

export type ClientOptions = {
baseUrl: `${string}://${string}` | (string & {});
};

export type XRateLimit = number;

/**
* Resource not found
*/
export type NotFound = {
code?: number;
message?: string;
};

export type Foo = {
rateLimit?: XRateLimit;
};

export type GetFooData = {
body?: never;
path?: never;
query?: never;
url: '/foo';
};

export type GetFooResponses = {
/**
* OK
*/
200: Foo;
};

export type GetFooResponse = GetFooResponses[keyof GetFooResponses];
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
// This file is auto-generated by @hey-api/openapi-ts

export type { _1, ClientOptions, Deep, ExternalAllOfSchema, ExternalAnyOfSchema, ExternalArraySchema, ExternalDeepParam, ExternalDoubleNestedNumeric, ExternalDoubleNestedProp, ExternalIdParam, ExternalMixedBody, ExternalMixedProperties, ExternalModelBody, ExternalNested, ExternalNestedBody, ExternalNestedNumeric, ExternalNestedNumericObjectA, ExternalNestedNumericObjectB, ExternalNestedObjectA, ExternalNestedObjectB, ExternalNumericParam, ExternalSchemaA, ExternalSchemaB, ExternalSchemaC, ExternalSchemaExternalProp, ExternalSchemaExternalPropAlias, ExternalSchemaPathA, ExternalSchemaPathB, ExternalSchemaPropertyA, ExternalSchemaPropertyB, ExternalSchemaPropertyC, ExternalSchemaPropertyD, ExternalSharedModel, ExternalSharedModelWithUuid, ExternalUnionSchema, ExternalUuidBody, ExternalUuidParam, GetExternalArrayData, GetExternalArrayResponse, GetExternalArrayResponses, GetExternalMixedData, GetExternalMixedResponse, GetExternalMixedResponses, GetExternalModelData, GetExternalModelError, GetExternalModelErrors, GetExternalModelResponse, GetExternalModelResponses, GetExternalNestedData, GetExternalNestedResponse, GetExternalNestedResponses, GetExternalPropertiesByIdData, GetExternalPropertiesByIdResponse, GetExternalPropertiesByIdResponses, GetExternalUnionData, GetExternalUnionResponse, GetExternalUnionResponses, GetExternalUuidData, GetExternalUuidResponse, GetExternalUuidResponses, Id, Name, PostExternalArrayData, PostExternalArrayResponse, PostExternalArrayResponses, PostExternalMixedData, PostExternalMixedResponse, PostExternalMixedResponses, PostExternalModelData, PostExternalModelError, PostExternalModelErrors, PostExternalModelResponse, PostExternalModelResponses, PostExternalNestedData, PostExternalNestedResponse, PostExternalNestedResponses, PostExternalUnionData, PostExternalUnionResponse, PostExternalUnionResponses, PutExternalUuidData, PutExternalUuidResponse, PutExternalUuidResponses } from './types.gen';
export type { _1, ClientOptions, Deep, ExternalAllOfSchema, ExternalAnyOfSchema, ExternalArrayResponse, ExternalArraySchema, ExternalDeepHeader, ExternalDeepParam, ExternalDoubleNestedNumeric, ExternalDoubleNestedProp, ExternalIdHeader, ExternalIdParam, ExternalMixedBody, ExternalMixedProperties, ExternalModelBody, ExternalModelResponse, ExternalNested, ExternalNestedBody, ExternalNestedNumeric, ExternalNestedNumericObjectA, ExternalNestedNumericObjectB, ExternalNestedObjectA, ExternalNestedObjectB, ExternalNestedResponse, ExternalNumericParam, ExternalSchemaA, ExternalSchemaB, ExternalSchemaC, ExternalSchemaExternalProp, ExternalSchemaExternalPropAlias, ExternalSchemaPathA, ExternalSchemaPathB, ExternalSchemaPropertyA, ExternalSchemaPropertyB, ExternalSchemaPropertyC, ExternalSchemaPropertyD, ExternalSharedModel, ExternalSharedModelWithUuid, ExternalUnionResponse, ExternalUnionSchema, ExternalUuidBody, ExternalUuidHeader, ExternalUuidParam, ExternalUuidResponse, GetExternalArrayData, GetExternalArrayResponse, GetExternalArrayResponses, GetExternalMixedData, GetExternalMixedResponse, GetExternalMixedResponses, GetExternalModelData, GetExternalModelError, GetExternalModelErrors, GetExternalModelResponse, GetExternalModelResponses, GetExternalNestedData, GetExternalNestedResponse, GetExternalNestedResponses, GetExternalPropertiesByIdData, GetExternalPropertiesByIdResponse, GetExternalPropertiesByIdResponses, GetExternalUnionData, GetExternalUnionResponse, GetExternalUnionResponses, GetExternalUuidData, GetExternalUuidResponse, GetExternalUuidResponses, Id, Name, PostExternalArrayData, PostExternalArrayResponse, PostExternalArrayResponses, PostExternalMixedData, PostExternalMixedResponse, PostExternalMixedResponses, PostExternalModelData, PostExternalModelError, PostExternalModelErrors, PostExternalModelResponse, PostExternalModelResponses, PostExternalNestedData, PostExternalNestedResponse, PostExternalNestedResponses, PostExternalUnionData, PostExternalUnionResponse, PostExternalUnionResponses, PutExternalUuidData, PutExternalUuidResponse, PutExternalUuidResponses } from './types.gen';
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,37 @@ export type ClientOptions = {
baseUrl: `${string}://${string}` | (string & {});
};

export type ExternalIdHeader = Id;

export type ExternalUuidHeader = ExternalSharedModelWithUuid;

export type ExternalDeepHeader = Deep;

/**
* Response using external model
*/
export type ExternalModelResponse = ExternalSharedModel;

/**
* Response using external UUID
*/
export type ExternalUuidResponse = ExternalSharedModelWithUuid;

/**
* Response using external nested object
*/
export type ExternalNestedResponse = ExternalNested;

/**
* Response with array of external models
*/
export type ExternalArrayResponse = Array<ExternalSharedModel>;

/**
* Response with union of external types
*/
export type ExternalUnionResponse = ExternalSharedModel | ExternalSharedModelWithUuid | ExternalNested;

export type _1 = string;

export type ExternalSchemaA = ExternalSharedModel;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// This file is auto-generated by @hey-api/openapi-ts

export type { ClientOptions, Foo, GetFooData, GetFooResponse, GetFooResponses, NotFound, XRateLimit } from './types.gen';
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
// This file is auto-generated by @hey-api/openapi-ts

export type ClientOptions = {
baseUrl: `${string}://${string}` | (string & {});
};

export type XRateLimit = number;

/**
* Resource not found
*/
export type NotFound = {
code?: number;
message?: string;
};

export type Foo = {
rateLimit?: XRateLimit;
};

export type GetFooData = {
body?: never;
path?: never;
query?: never;
url: '/foo';
};

export type GetFooResponses = {
/**
* OK
*/
200: Foo;
};

export type GetFooResponse = GetFooResponses[keyof GetFooResponses];
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
// This file is auto-generated by @hey-api/openapi-ts

export type { _1, ClientOptions, Deep, ExternalAllOfSchema, ExternalAnyOfSchema, ExternalArraySchema, ExternalDeepParam, ExternalDoubleNestedNumeric, ExternalDoubleNestedProp, ExternalIdParam, ExternalMixedBody, ExternalMixedProperties, ExternalModelBody, ExternalNested, ExternalNestedBody, ExternalNestedNumeric, ExternalNestedNumericObjectA, ExternalNestedNumericObjectB, ExternalNestedObjectA, ExternalNestedObjectB, ExternalNumericParam, ExternalSchemaA, ExternalSchemaB, ExternalSchemaC, ExternalSchemaExternalProp, ExternalSchemaExternalPropAlias, ExternalSchemaPathA, ExternalSchemaPathB, ExternalSchemaPropertyA, ExternalSchemaPropertyB, ExternalSchemaPropertyC, ExternalSchemaPropertyD, ExternalSharedModel, ExternalSharedModelWithUuid, ExternalUnionSchema, ExternalUuidBody, ExternalUuidParam, GetExternalArrayData, GetExternalArrayResponse, GetExternalArrayResponses, GetExternalMixedData, GetExternalMixedResponse, GetExternalMixedResponses, GetExternalModelData, GetExternalModelError, GetExternalModelErrors, GetExternalModelResponse, GetExternalModelResponses, GetExternalNestedData, GetExternalNestedResponse, GetExternalNestedResponses, GetExternalPropertiesByIdData, GetExternalPropertiesByIdResponse, GetExternalPropertiesByIdResponses, GetExternalUnionData, GetExternalUnionResponse, GetExternalUnionResponses, GetExternalUuidData, GetExternalUuidResponse, GetExternalUuidResponses, Id, Name, PostExternalArrayData, PostExternalArrayResponse, PostExternalArrayResponses, PostExternalMixedData, PostExternalMixedResponse, PostExternalMixedResponses, PostExternalModelData, PostExternalModelError, PostExternalModelErrors, PostExternalModelResponse, PostExternalModelResponses, PostExternalNestedData, PostExternalNestedResponse, PostExternalNestedResponses, PostExternalUnionData, PostExternalUnionResponse, PostExternalUnionResponses, PutExternalUuidData, PutExternalUuidResponse, PutExternalUuidResponses } from './types.gen';
export type { _1, ClientOptions, Deep, ExternalAllOfSchema, ExternalAnyOfSchema, ExternalArrayResponse, ExternalArraySchema, ExternalDeepHeader, ExternalDeepParam, ExternalDoubleNestedNumeric, ExternalDoubleNestedProp, ExternalIdHeader, ExternalIdParam, ExternalMixedBody, ExternalMixedProperties, ExternalModelBody, ExternalModelResponse, ExternalNested, ExternalNestedBody, ExternalNestedNumeric, ExternalNestedNumericObjectA, ExternalNestedNumericObjectB, ExternalNestedObjectA, ExternalNestedObjectB, ExternalNestedResponse, ExternalNumericParam, ExternalSchemaA, ExternalSchemaB, ExternalSchemaC, ExternalSchemaExternalProp, ExternalSchemaExternalPropAlias, ExternalSchemaPathA, ExternalSchemaPathB, ExternalSchemaPropertyA, ExternalSchemaPropertyB, ExternalSchemaPropertyC, ExternalSchemaPropertyD, ExternalSharedModel, ExternalSharedModelWithUuid, ExternalUnionResponse, ExternalUnionSchema, ExternalUuidBody, ExternalUuidHeader, ExternalUuidParam, ExternalUuidResponse, GetExternalArrayData, GetExternalArrayResponse, GetExternalArrayResponses, GetExternalMixedData, GetExternalMixedResponse, GetExternalMixedResponses, GetExternalModelData, GetExternalModelError, GetExternalModelErrors, GetExternalModelResponse, GetExternalModelResponses, GetExternalNestedData, GetExternalNestedResponse, GetExternalNestedResponses, GetExternalPropertiesByIdData, GetExternalPropertiesByIdResponse, GetExternalPropertiesByIdResponses, GetExternalUnionData, GetExternalUnionResponse, GetExternalUnionResponses, GetExternalUuidData, GetExternalUuidResponse, GetExternalUuidResponses, Id, Name, PostExternalArrayData, PostExternalArrayResponse, PostExternalArrayResponses, PostExternalMixedData, PostExternalMixedResponse, PostExternalMixedResponses, PostExternalModelData, PostExternalModelError, PostExternalModelErrors, PostExternalModelResponse, PostExternalModelResponses, PostExternalNestedData, PostExternalNestedResponse, PostExternalNestedResponses, PostExternalUnionData, PostExternalUnionResponse, PostExternalUnionResponses, PutExternalUuidData, PutExternalUuidResponse, PutExternalUuidResponses } from './types.gen';
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,37 @@ export type ClientOptions = {
baseUrl: `${string}://${string}` | (string & {});
};

export type ExternalIdHeader = Id;

export type ExternalUuidHeader = ExternalSharedModelWithUuid;

export type ExternalDeepHeader = Deep;

/**
* Response using external model
*/
export type ExternalModelResponse = ExternalSharedModel;

/**
* Response using external UUID
*/
export type ExternalUuidResponse = ExternalSharedModelWithUuid;

/**
* Response using external nested object
*/
export type ExternalNestedResponse = ExternalNested;

/**
* Response with array of external models
*/
export type ExternalArrayResponse = Array<ExternalSharedModel>;

/**
* Response with union of external types
*/
export type ExternalUnionResponse = ExternalSharedModel | ExternalSharedModelWithUuid | ExternalNested;

export type _1 = string;

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
// This file is auto-generated by @hey-api/openapi-ts

export type { Baz, ClientOptions, Foo, Foo2, PostFooReadData, PostFooReadResponse, PostFooReadResponses, PostFooReadWriteData, PostFooReadWriteResponse, PostFooReadWriteResponses, PostFooWriteData, PostFooWriteResponse, PostFooWriteResponses, PutFooWriteData, PutFooWriteResponse, PutFooWriteResponses, QuxAllRead, QuxAllWrite, ReadableBarRead, ReadableBarWrite, ReadableCorge, ReadableFooRead, ReadableFooReadWrite, ReadableFooReadWriteRef, ReadableFooReadWriteRef2, ReadableFooWrite, ReadableQuux, WritableBarRead, WritableBarWrite, WritableCorge, WritableFooRead, WritableFooReadWrite, WritableFooReadWriteRef, WritableFooReadWriteRef2, WritableFooWrite, WritableQuux } from './types.gen';
export type { Baz, ClientOptions, Foo, Foo2, Foo3, PostFooReadData, PostFooReadResponse, PostFooReadResponses, PostFooReadWriteData, PostFooReadWriteResponse, PostFooReadWriteResponses, PostFooWriteData, PostFooWriteResponse, PostFooWriteResponses, PutFooWriteData, PutFooWriteResponse, PutFooWriteResponses, QuxAllRead, QuxAllWrite, ReadableBarRead, ReadableBarWrite, ReadableCorge, ReadableFooRead, ReadableFooReadWrite, ReadableFooReadWriteRef, ReadableFooReadWriteRef2, ReadableFooWrite, ReadableQuux, WritableBarRead, WritableBarWrite, WritableCorge, WritableFooRead, WritableFooReadWrite, WritableFooReadWriteRef, WritableFooReadWriteRef2, WritableFooWrite, WritableQuux } from './types.gen';
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ export type ClientOptions = {
baseUrl: `${string}://${string}` | (string & {});
};

/**
* OK
*/
export type Foo = ReadableFooWrite;

export type Baz = {
baz?: string;
};
Expand Down Expand Up @@ -84,12 +89,12 @@ export type WritableFooReadWriteRef2 = WritableFooReadWrite;
/**
* Query parameter
*/
export type Foo = string;
export type Foo2 = string;

/**
* PUT /foo-write payload
*/
export type Foo2 = {
export type Foo3 = {
foo?: WritableBarRead;
};

Expand Down Expand Up @@ -145,7 +150,7 @@ export type PutFooWriteData = {
/**
* PUT /foo-write payload
*/
body: Foo2;
body: Foo3;
path?: never;
query?: {
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
// This file is auto-generated by @hey-api/openapi-ts

export type { BarRead, BarWrite, Baz, ClientOptions, Corge, Foo, Foo2, FooRead, FooReadWrite, FooReadWriteRef, FooReadWriteRef2, FooWrite, PostFooReadData, PostFooReadResponse, PostFooReadResponses, PostFooReadWriteData, PostFooReadWriteResponse, PostFooReadWriteResponses, PostFooWriteData, PostFooWriteResponse, PostFooWriteResponses, PutFooWriteData, PutFooWriteResponse, PutFooWriteResponses, Quux, QuxAllRead, QuxAllWrite } from './types.gen';
export type { BarRead, BarWrite, Baz, ClientOptions, Corge, Foo, Foo2, Foo3, FooRead, FooReadWrite, FooReadWriteRef, FooReadWriteRef2, FooWrite, PostFooReadData, PostFooReadResponse, PostFooReadResponses, PostFooReadWriteData, PostFooReadWriteResponse, PostFooReadWriteResponses, PostFooWriteData, PostFooWriteResponse, PostFooWriteResponses, PutFooWriteData, PutFooWriteResponse, PutFooWriteResponses, Quux, QuxAllRead, QuxAllWrite } from './types.gen';
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ export type ClientOptions = {
baseUrl: `${string}://${string}` | (string & {});
};

/**
* OK
*/
export type Foo = FooWrite;

export type FooReadWrite = BarRead & {
foo?: string;
};
Expand Down Expand Up @@ -60,12 +65,12 @@ export type FooReadWriteRef2 = FooReadWrite;
/**
* Query parameter
*/
export type Foo = string;
export type Foo2 = string;

/**
* PUT /foo-write payload
*/
export type Foo2 = {
export type Foo3 = {
foo?: BarRead;
};

Expand Down Expand Up @@ -121,7 +126,7 @@ export type PutFooWriteData = {
/**
* PUT /foo-write payload
*/
body: Foo2;
body: Foo3;
path?: never;
query?: {
/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
// This file is auto-generated by @hey-api/openapi-ts

export type { BarRead, BarReadWritable, BarWrite, BarWriteWritable, Baz, ClientOptions, Corge, CorgeWritable, Foo, Foo2, FooRead, FooReadWritable, FooReadWrite, FooReadWriteRef, FooReadWriteRef2, FooReadWriteRef2Writable, FooReadWriteRefWritable, FooReadWriteWritable, FooWrite, FooWriteWritable, PostFooReadData, PostFooReadResponse, PostFooReadResponses, PostFooReadWriteData, PostFooReadWriteResponse, PostFooReadWriteResponses, PostFooWriteData, PostFooWriteResponse, PostFooWriteResponses, PutFooWriteData, PutFooWriteResponse, PutFooWriteResponses, Quux, QuuxWritable, QuxAllRead, QuxAllWrite } from './types.gen';
export type { BarRead, BarReadWritable, BarWrite, BarWriteWritable, Baz, ClientOptions, Corge, CorgeWritable, Foo, Foo2, Foo3, FooRead, FooReadWritable, FooReadWrite, FooReadWriteRef, FooReadWriteRef2, FooReadWriteRef2Writable, FooReadWriteRefWritable, FooReadWriteWritable, FooWrite, FooWriteWritable, PostFooReadData, PostFooReadResponse, PostFooReadResponses, PostFooReadWriteData, PostFooReadWriteResponse, PostFooReadWriteResponses, PostFooWriteData, PostFooWriteResponse, PostFooWriteResponses, PutFooWriteData, PutFooWriteResponse, PutFooWriteResponses, Quux, QuuxWritable, QuxAllRead, QuxAllWrite } from './types.gen';
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@ export type ClientOptions = {
baseUrl: `${string}://${string}` | (string & {});
};

/**
* OK
*/
export type Foo = FooWrite;

export type FooReadWrite = BarRead;

export type FooRead = BarRead & {
Expand Down Expand Up @@ -84,12 +89,12 @@ export type FooReadWriteRef2Writable = FooReadWriteWritable;
/**
* Query parameter
*/
export type Foo = string;
export type Foo2 = string;

/**
* PUT /foo-write payload
*/
export type Foo2 = {
export type Foo3 = {
foo?: BarReadWritable;
};

Expand Down Expand Up @@ -145,7 +150,7 @@ export type PutFooWriteData = {
/**
* PUT /foo-write payload
*/
body: Foo2;
body: Foo3;
path?: never;
query?: {
/**
Expand Down
28 changes: 28 additions & 0 deletions packages/openapi-ts/src/plugins/@hey-api/typescript/v1/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,29 @@ export const handlerV1: HeyApiTypeScriptPlugin['Handler'] = ({ plugin }) => {
const processor = createProcessor(plugin);

plugin.forEach(
'header',
'operation',
'parameter',
'requestBody',
'response',
'schema',
'server',
'webhook',
(event) => {
switch (event.type) {
case 'header':
processor.process({
meta: {
resource: 'definition',
resourceId: pathToJsonPointer(event._path),
},
naming: plugin.config.definitions,
path: event._path,
plugin,
schema: event.schema,
tags: event.tags,
});
break;
case 'operation':
operationToType({
operation: event.operation,
Expand Down Expand Up @@ -61,6 +76,19 @@ export const handlerV1: HeyApiTypeScriptPlugin['Handler'] = ({ plugin }) => {
tags: event.tags,
});
break;
case 'response':
processor.process({
meta: {
resource: 'definition',
resourceId: pathToJsonPointer(event._path),
},
naming: plugin.config.definitions,
path: event._path,
plugin,
schema: event.response.schema,
tags: event.tags,
});
break;
case 'schema':
processor.process({
meta: {
Expand Down
Loading
Loading