Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1e37761

Browse files
committed
feat(openapi3): add fully-dereferenced OpenAPI 3 types and replace custom guards
* Introduce `src/openapi3/dereferencedOpenApiv3.ts`, providing fully-dereferenced versions of core OpenAPI 3 objects (Document, OperationObject, SchemaObject, etc.). * Refactor `handleJson.ts` to consume the new types: * Remove bespoke type-guard helpers (`isParameter`, `isSchema`, ...). * Eliminate most explicit `as` casts and manual type-narrowing logic. * Simplify enum/array handling through shared helpers (`buildEnumObject`, `getArrayType`). Signed-off-by: J3m5 <5523410+J3m5@users.noreply.github.com>
1 parent 1e897ee commit 1e37761

File tree

2 files changed

+221
-120
lines changed

2 files changed

+221
-120
lines changed
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
// oxlint-disable consistent-indexed-object-style
2+
import type { OpenAPIV3 } from "openapi-types";
3+
4+
interface ArraySchemaObjectDereferenced extends BaseSchemaObjectDereferenced {
5+
type: OpenAPIV3.ArraySchemaObjectType;
6+
items: SchemaObjectDereferenced;
7+
}
8+
9+
interface NonArraySchemaObjectDereferenced
10+
extends BaseSchemaObjectDereferenced {
11+
type?: OpenAPIV3.NonArraySchemaObjectType;
12+
}
13+
14+
export type SchemaObjectDereferenced =
15+
| ArraySchemaObjectDereferenced
16+
| NonArraySchemaObjectDereferenced;
17+
18+
type BaseSchemaObjectDereferenced = Omit<
19+
OpenAPIV3.BaseSchemaObject,
20+
"additionalProperties" | "properties" | "allOf" | "oneOf" | "anyOf" | "not"
21+
> & {
22+
additionalProperties?: boolean | SchemaObjectDereferenced;
23+
properties?: {
24+
[name: string]: SchemaObjectDereferenced;
25+
};
26+
allOf?: SchemaObjectDereferenced[];
27+
oneOf?: SchemaObjectDereferenced[];
28+
anyOf?: SchemaObjectDereferenced[];
29+
not?: SchemaObjectDereferenced;
30+
};
31+
32+
type EncodingObjectDereferenced = Omit<OpenAPIV3.EncodingObject, "headers"> & {
33+
headers?: {
34+
[header: string]: HeaderObjectDereferenced;
35+
};
36+
};
37+
38+
type MediaTypeObjectDereferenced = Omit<
39+
OpenAPIV3.MediaTypeObject,
40+
"schema" | "encoding"
41+
> & {
42+
schema?: SchemaObjectDereferenced;
43+
encoding?: {
44+
[media: string]: EncodingObjectDereferenced;
45+
};
46+
};
47+
48+
type ParameterBaseObjectDereferenced = Omit<
49+
OpenAPIV3.ParameterObject,
50+
"schema" | "content"
51+
> & {
52+
schema?: SchemaObjectDereferenced;
53+
content?: {
54+
[media: string]: MediaTypeObjectDereferenced;
55+
};
56+
};
57+
58+
interface HeaderObjectDereferenced extends ParameterBaseObjectDereferenced {}
59+
60+
type RequestBodyObjectDereferenced = Omit<
61+
OpenAPIV3.RequestBodyObject,
62+
"content"
63+
> & {
64+
content: {
65+
[media: string]: MediaTypeObjectDereferenced;
66+
};
67+
};
68+
69+
type ResponseObjectDereferenced = Omit<
70+
OpenAPIV3.ResponseObject,
71+
"headers" | "content"
72+
> & {
73+
headers?: {
74+
[header: string]: HeaderObjectDereferenced;
75+
};
76+
content?: {
77+
[media: string]: MediaTypeObjectDereferenced;
78+
};
79+
};
80+
81+
interface ResponsesObjectDereferenced {
82+
[code: string]: ResponseObjectDereferenced;
83+
}
84+
85+
interface ParameterObjectDereferenced extends ParameterBaseObjectDereferenced {
86+
name: string;
87+
in: string;
88+
}
89+
90+
type PathItemObjectDereferenced<T extends object = object> = Omit<
91+
OpenAPIV3.PathItemObject,
92+
"parameters" | `${OpenAPIV3.HttpMethods}`
93+
> & {
94+
parameters?: ParameterObjectDereferenced[];
95+
} & {
96+
[method in OpenAPIV3.HttpMethods]?: OperationObjectDereferenced<T>;
97+
};
98+
interface CallbackObjectDereferenced {
99+
[url: string]: PathItemObjectDereferenced;
100+
}
101+
102+
export type OperationObjectDereferenced<T extends object = object> = Omit<
103+
OpenAPIV3.OperationObject,
104+
"parameters" | "requestBody" | "responses" | "callbacks"
105+
> & {
106+
parameters?: ParameterObjectDereferenced[];
107+
requestBody?: RequestBodyObjectDereferenced;
108+
responses: ResponsesObjectDereferenced;
109+
callbacks?: {
110+
[callback: string]: CallbackObjectDereferenced;
111+
};
112+
} & T;
113+
114+
interface PathsObjectDereferenced<
115+
T extends object = object,
116+
P extends object = object,
117+
> {
118+
[pattern: string]: (PathItemObjectDereferenced<T> & P) | undefined;
119+
}
120+
121+
type ComponentsObjectDereferenced = Omit<
122+
OpenAPIV3.ComponentsObject,
123+
| "schemas"
124+
| "responses"
125+
| "parameters"
126+
| "requestBodies"
127+
| "headers"
128+
| "callbacks"
129+
> & {
130+
schemas?: {
131+
[key: string]: SchemaObjectDereferenced;
132+
};
133+
responses?: {
134+
[key: string]: ResponseObjectDereferenced;
135+
};
136+
parameters?: {
137+
[key: string]: ParameterObjectDereferenced;
138+
};
139+
requestBodies?: {
140+
[key: string]: RequestBodyObjectDereferenced;
141+
};
142+
headers?: {
143+
[key: string]: HeaderObjectDereferenced;
144+
};
145+
callbacks?: {
146+
[key: string]: CallbackObjectDereferenced;
147+
};
148+
};
149+
150+
export type OpenAPIV3DocumentDereferenced<T extends object = object> = Omit<
151+
OpenAPIV3.Document,
152+
"paths" | "components"
153+
> & {
154+
paths: PathsObjectDereferenced<T>;
155+
components?: ComponentsObjectDereferenced;
156+
};

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /