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 9c54332

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 7634cdc commit 9c54332

File tree

3 files changed

+222
-121
lines changed

3 files changed

+222
-121
lines changed

‎src/hydra/parseHydraDocumentation.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import type {
1414
Entrypoint,
1515
ExpandedOperation,
1616
ExpandedRdfProperty,
17-
} from "./types.js";
17+
} from "./types.js";
1818
import type { RequestInitExtended } from "../types.js";
1919

2020
/**
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 によって変換されたページ (->オリジナル) /