@zudojs/openapi 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/openApiComponents/index.d.ts +9 -0
- package/dist/openApiComponents/index.d.ts.map +1 -0
- package/dist/openApiComponents/index.js +8 -0
- package/dist/openApiComponents/index.js.map +1 -0
- package/dist/openApiConstants/index.d.ts +5 -0
- package/dist/openApiConstants/index.d.ts.map +1 -0
- package/dist/openApiConstants/index.js +5 -0
- package/dist/openApiConstants/index.js.map +1 -0
- package/dist/openApiConstants/openApiConstants.core.d.ts +40 -0
- package/dist/openApiConstants/openApiConstants.core.d.ts.map +1 -0
- package/dist/openApiConstants/openApiConstants.core.js +40 -0
- package/dist/openApiConstants/openApiConstants.core.js.map +1 -0
- package/dist/openApiDocument/index.d.ts +8 -0
- package/dist/openApiDocument/index.d.ts.map +1 -0
- package/dist/openApiDocument/index.js +7 -0
- package/dist/openApiDocument/index.js.map +1 -0
- package/dist/openApiDocument/openApiDocument.builder.d.ts +60 -0
- package/dist/openApiDocument/openApiDocument.builder.d.ts.map +1 -0
- package/dist/openApiDocument/openApiDocument.builder.js +106 -0
- package/dist/openApiDocument/openApiDocument.builder.js.map +1 -0
- package/dist/openApiErrors/index.d.ts +8 -0
- package/dist/openApiErrors/index.d.ts.map +1 -0
- package/dist/openApiErrors/index.js +7 -0
- package/dist/openApiErrors/index.js.map +1 -0
- package/dist/openApiErrors/openApiError.base.d.ts +21 -0
- package/dist/openApiErrors/openApiError.base.d.ts.map +1 -0
- package/dist/openApiErrors/openApiError.base.js +28 -0
- package/dist/openApiErrors/openApiError.base.js.map +1 -0
- package/dist/openApiErrors/openApiError.core.d.ts +6 -0
- package/dist/openApiErrors/openApiError.core.d.ts.map +1 -0
- package/dist/openApiErrors/openApiError.core.js +6 -0
- package/dist/openApiErrors/openApiError.core.js.map +1 -0
- package/dist/openApiErrors/openApiError.types.d.ts +51 -0
- package/dist/openApiErrors/openApiError.types.d.ts.map +1 -0
- package/dist/openApiErrors/openApiError.types.js +125 -0
- package/dist/openApiErrors/openApiError.types.js.map +1 -0
- package/dist/openApiHttp/index.d.ts +7 -0
- package/dist/openApiHttp/index.d.ts.map +1 -0
- package/dist/openApiHttp/index.js +7 -0
- package/dist/openApiHttp/index.js.map +1 -0
- package/dist/openApiHttp/openApiHttpAdapter.core.d.ts +38 -0
- package/dist/openApiHttp/openApiHttpAdapter.core.d.ts.map +1 -0
- package/dist/openApiHttp/openApiHttpAdapter.core.js +61 -0
- package/dist/openApiHttp/openApiHttpAdapter.core.js.map +1 -0
- package/dist/openApiRegistry/index.d.ts +8 -0
- package/dist/openApiRegistry/index.d.ts.map +1 -0
- package/dist/openApiRegistry/index.js +7 -0
- package/dist/openApiRegistry/index.js.map +1 -0
- package/dist/openApiRegistry/openApiRegistry.core.d.ts +31 -0
- package/dist/openApiRegistry/openApiRegistry.core.d.ts.map +1 -0
- package/dist/openApiRegistry/openApiRegistry.core.js +150 -0
- package/dist/openApiRegistry/openApiRegistry.core.js.map +1 -0
- package/dist/openApiRegistry/openApiRegistry.type.d.ts +42 -0
- package/dist/openApiRegistry/openApiRegistry.type.d.ts.map +1 -0
- package/dist/openApiRegistry/openApiRegistry.type.js +3 -0
- package/dist/openApiRegistry/openApiRegistry.type.js.map +1 -0
- package/dist/openApiRouting/index.d.ts +9 -0
- package/dist/openApiRouting/index.d.ts.map +1 -0
- package/dist/openApiRouting/index.js +8 -0
- package/dist/openApiRouting/index.js.map +1 -0
- package/dist/openApiRouting/routeConverter.core.d.ts +23 -0
- package/dist/openApiRouting/routeConverter.core.d.ts.map +1 -0
- package/dist/openApiRouting/routeConverter.core.js +85 -0
- package/dist/openApiRouting/routeConverter.core.js.map +1 -0
- package/dist/openApiRouting/routeMetadata.type.d.ts +38 -0
- package/dist/openApiRouting/routeMetadata.type.d.ts.map +1 -0
- package/dist/openApiRouting/routeMetadata.type.js +2 -0
- package/dist/openApiRouting/routeMetadata.type.js.map +1 -0
- package/dist/openApiRouting/routeScanner.core.d.ts +57 -0
- package/dist/openApiRouting/routeScanner.core.d.ts.map +1 -0
- package/dist/openApiRouting/routeScanner.core.js +71 -0
- package/dist/openApiRouting/routeScanner.core.js.map +1 -0
- package/dist/openApiSchema/index.d.ts +11 -0
- package/dist/openApiSchema/index.d.ts.map +1 -0
- package/dist/openApiSchema/index.js +9 -0
- package/dist/openApiSchema/index.js.map +1 -0
- package/dist/openApiSchema/references.core.d.ts +9 -0
- package/dist/openApiSchema/references.core.d.ts.map +1 -0
- package/dist/openApiSchema/references.core.js +12 -0
- package/dist/openApiSchema/references.core.js.map +1 -0
- package/dist/openApiSchema/schemaConverter.core.d.ts +11 -0
- package/dist/openApiSchema/schemaConverter.core.d.ts.map +1 -0
- package/dist/openApiSchema/schemaConverter.core.js +141 -0
- package/dist/openApiSchema/schemaConverter.core.js.map +1 -0
- package/dist/openApiSchema/schemaRegistry.core.d.ts +28 -0
- package/dist/openApiSchema/schemaRegistry.core.d.ts.map +1 -0
- package/dist/openApiSchema/schemaRegistry.core.js +36 -0
- package/dist/openApiSchema/schemaRegistry.core.js.map +1 -0
- package/dist/openApiSerialization/index.d.ts +7 -0
- package/dist/openApiSerialization/index.d.ts.map +1 -0
- package/dist/openApiSerialization/index.js +7 -0
- package/dist/openApiSerialization/index.js.map +1 -0
- package/dist/openApiSerialization/openApiSerializer.core.d.ts +12 -0
- package/dist/openApiSerialization/openApiSerializer.core.d.ts.map +1 -0
- package/dist/openApiSerialization/openApiSerializer.core.js +26 -0
- package/dist/openApiSerialization/openApiSerializer.core.js.map +1 -0
- package/dist/openApiTypes/index.d.ts +7 -0
- package/dist/openApiTypes/index.d.ts.map +1 -0
- package/dist/openApiTypes/index.js +7 -0
- package/dist/openApiTypes/index.js.map +1 -0
- package/dist/openApiTypes/openApiComponent.type.d.ts +69 -0
- package/dist/openApiTypes/openApiComponent.type.d.ts.map +1 -0
- package/dist/openApiTypes/openApiComponent.type.js +5 -0
- package/dist/openApiTypes/openApiComponent.type.js.map +1 -0
- package/dist/openApiTypes/openApiDocument.type.d.ts +61 -0
- package/dist/openApiTypes/openApiDocument.type.d.ts.map +1 -0
- package/dist/openApiTypes/openApiDocument.type.js +5 -0
- package/dist/openApiTypes/openApiDocument.type.js.map +1 -0
- package/dist/openApiTypes/openApiPath.type.d.ts +48 -0
- package/dist/openApiTypes/openApiPath.type.d.ts.map +1 -0
- package/dist/openApiTypes/openApiPath.type.js +5 -0
- package/dist/openApiTypes/openApiPath.type.js.map +1 -0
- package/dist/openApiTypes/openApiSchema.type.d.ts +40 -0
- package/dist/openApiTypes/openApiSchema.type.d.ts.map +1 -0
- package/dist/openApiTypes/openApiSchema.type.js +5 -0
- package/dist/openApiTypes/openApiSchema.type.js.map +1 -0
- package/dist/openApiTypes/openApiSecurity.type.d.ts +29 -0
- package/dist/openApiTypes/openApiSecurity.type.d.ts.map +1 -0
- package/dist/openApiTypes/openApiSecurity.type.js +5 -0
- package/dist/openApiTypes/openApiSecurity.type.js.map +1 -0
- package/dist/openApiTypes/openApiTypes.core.d.ts +11 -0
- package/dist/openApiTypes/openApiTypes.core.d.ts.map +1 -0
- package/dist/openApiTypes/openApiTypes.core.js +11 -0
- package/dist/openApiTypes/openApiTypes.core.js.map +1 -0
- package/dist/openApiValidation/index.d.ts +8 -0
- package/dist/openApiValidation/index.d.ts.map +1 -0
- package/dist/openApiValidation/index.js +7 -0
- package/dist/openApiValidation/index.js.map +1 -0
- package/dist/openApiValidation/openApiValidator.core.d.ts +22 -0
- package/dist/openApiValidation/openApiValidator.core.d.ts.map +1 -0
- package/dist/openApiValidation/openApiValidator.core.js +114 -0
- package/dist/openApiValidation/openApiValidator.core.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI document, info, and server types.
|
|
3
|
+
*/
|
|
4
|
+
/** Supported OpenAPI specification versions. */
|
|
5
|
+
export type OpenAPIVersion = "3.0.0" | "3.0.1" | "3.0.2" | "3.0.3" | "3.1.0" | "3.1.1";
|
|
6
|
+
/** The root OpenAPI document object. */
|
|
7
|
+
export interface OpenAPIDocument {
|
|
8
|
+
readonly openapi: string;
|
|
9
|
+
readonly info: OpenAPIInfo;
|
|
10
|
+
readonly servers?: readonly OpenAPIServer[];
|
|
11
|
+
readonly paths: import("./openApiPath.type.js").OpenAPIPaths;
|
|
12
|
+
readonly components?: import("./openApiComponent.type.js").OpenAPIComponents;
|
|
13
|
+
readonly security?: readonly import("./openApiSecurity.type.js").OpenAPISecurityRequirement[];
|
|
14
|
+
readonly tags?: readonly OpenAPITag[];
|
|
15
|
+
readonly externalDocs?: OpenAPIExternalDocumentation;
|
|
16
|
+
}
|
|
17
|
+
/** OpenAPI info object. */
|
|
18
|
+
export interface OpenAPIInfo {
|
|
19
|
+
readonly title: string;
|
|
20
|
+
readonly version: string;
|
|
21
|
+
readonly description?: string;
|
|
22
|
+
readonly summary?: string;
|
|
23
|
+
readonly termsOfService?: string;
|
|
24
|
+
readonly contact?: OpenAPIContact;
|
|
25
|
+
readonly license?: OpenAPILicense;
|
|
26
|
+
}
|
|
27
|
+
export interface OpenAPIContact {
|
|
28
|
+
readonly name?: string;
|
|
29
|
+
readonly url?: string;
|
|
30
|
+
readonly email?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface OpenAPILicense {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
readonly url?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface OpenAPIServer {
|
|
37
|
+
readonly url: string;
|
|
38
|
+
readonly description?: string;
|
|
39
|
+
readonly variables?: Readonly<Record<string, OpenAPIServerVariable>>;
|
|
40
|
+
}
|
|
41
|
+
export interface OpenAPIServerVariable {
|
|
42
|
+
readonly enum?: readonly string[];
|
|
43
|
+
readonly default: string;
|
|
44
|
+
readonly description?: string;
|
|
45
|
+
}
|
|
46
|
+
export interface OpenAPIExternalDocumentation {
|
|
47
|
+
readonly description?: string;
|
|
48
|
+
readonly url: string;
|
|
49
|
+
}
|
|
50
|
+
export interface OpenAPITag {
|
|
51
|
+
readonly name: string;
|
|
52
|
+
readonly description?: string;
|
|
53
|
+
readonly externalDocs?: OpenAPIExternalDocumentation;
|
|
54
|
+
readonly extensions?: Readonly<Record<string, unknown>>;
|
|
55
|
+
}
|
|
56
|
+
export interface OpenAPIReference {
|
|
57
|
+
readonly $ref: string;
|
|
58
|
+
readonly summary?: string;
|
|
59
|
+
readonly description?: string;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=openApiDocument.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiDocument.type.d.ts","sourceRoot":"","sources":["../../src/openApiTypes/openApiDocument.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gDAAgD;AAChD,MAAM,MAAM,cAAc,GACxB,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5D,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,OAAO,uBAAuB,EAAE,YAAY,CAAC;IAC7D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,4BAA4B,EAAE,iBAAiB,CAAC;IAC7E,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,OAAO,2BAA2B,EAAE,0BAA0B,EAAE,CAAC;IAC9F,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,4BAA4B,CAAC;CACtD;AAED,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,4BAA4B,CAAC;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiDocument.type.js","sourceRoot":"","sources":["../../src/openApiTypes/openApiDocument.type.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI path, operation, and parameter types.
|
|
3
|
+
*/
|
|
4
|
+
export type OpenAPIPaths = Readonly<Record<string, OpenAPIPathItem | undefined>>;
|
|
5
|
+
export interface OpenAPIPathItem {
|
|
6
|
+
readonly summary?: string;
|
|
7
|
+
readonly description?: string;
|
|
8
|
+
readonly get?: OpenAPIOperation;
|
|
9
|
+
readonly put?: OpenAPIOperation;
|
|
10
|
+
readonly post?: OpenAPIOperation;
|
|
11
|
+
readonly delete?: OpenAPIOperation;
|
|
12
|
+
readonly options?: OpenAPIOperation;
|
|
13
|
+
readonly head?: OpenAPIOperation;
|
|
14
|
+
readonly patch?: OpenAPIOperation;
|
|
15
|
+
readonly trace?: OpenAPIOperation;
|
|
16
|
+
readonly parameters?: readonly OpenAPIParameter[];
|
|
17
|
+
readonly servers?: readonly import("./openApiDocument.type.js").OpenAPIServer[];
|
|
18
|
+
readonly $ref?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface OpenAPIOperation {
|
|
21
|
+
readonly tags?: readonly string[];
|
|
22
|
+
readonly summary?: string;
|
|
23
|
+
readonly description?: string;
|
|
24
|
+
readonly operationId?: string;
|
|
25
|
+
readonly parameters?: readonly OpenAPIParameter[];
|
|
26
|
+
readonly requestBody?: import("./openApiComponent.type.js").OpenAPIRequestBody;
|
|
27
|
+
readonly responses: OpenAPIResponses;
|
|
28
|
+
readonly callbacks?: Readonly<Record<string, Readonly<Record<string, OpenAPIPathItem>>>>;
|
|
29
|
+
readonly deprecated?: boolean;
|
|
30
|
+
readonly security?: readonly import("./openApiSecurity.type.js").OpenAPISecurityRequirement[];
|
|
31
|
+
readonly servers?: readonly import("./openApiDocument.type.js").OpenAPIServer[];
|
|
32
|
+
readonly externalDocs?: import("./openApiDocument.type.js").OpenAPIExternalDocumentation;
|
|
33
|
+
}
|
|
34
|
+
export type OpenAPIResponses = Readonly<Record<string, import("./openApiComponent.type.js").OpenAPIResponse>>;
|
|
35
|
+
export interface OpenAPIParameter {
|
|
36
|
+
readonly name: string;
|
|
37
|
+
readonly in: OpenAPIParameterLocation;
|
|
38
|
+
readonly description?: string;
|
|
39
|
+
readonly required?: boolean;
|
|
40
|
+
readonly deprecated?: boolean;
|
|
41
|
+
readonly allowEmptyValue?: boolean;
|
|
42
|
+
readonly schema?: unknown;
|
|
43
|
+
readonly example?: unknown;
|
|
44
|
+
readonly examples?: Readonly<Record<string, import("./openApiComponent.type.js").OpenAPIExample>>;
|
|
45
|
+
readonly content?: Readonly<Record<string, import("./openApiComponent.type.js").OpenAPIMediaType>>;
|
|
46
|
+
}
|
|
47
|
+
export type OpenAPIParameterLocation = "query" | "header" | "path" | "cookie";
|
|
48
|
+
//# sourceMappingURL=openApiPath.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiPath.type.d.ts","sourceRoot":"","sources":["../../src/openApiTypes/openApiPath.type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiPath.type.js","sourceRoot":"","sources":["../../src/openApiTypes/openApiPath.type.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI schema types.
|
|
3
|
+
*/
|
|
4
|
+
export interface OpenAPISchema {
|
|
5
|
+
readonly title?: string;
|
|
6
|
+
readonly type?: string;
|
|
7
|
+
readonly properties?: Readonly<Record<string, OpenAPISchema>>;
|
|
8
|
+
readonly required?: readonly string[];
|
|
9
|
+
readonly description?: string;
|
|
10
|
+
readonly format?: string;
|
|
11
|
+
readonly default?: unknown;
|
|
12
|
+
readonly nullable?: boolean;
|
|
13
|
+
readonly readOnly?: boolean;
|
|
14
|
+
readonly writeOnly?: boolean;
|
|
15
|
+
readonly deprecated?: boolean;
|
|
16
|
+
readonly example?: unknown;
|
|
17
|
+
readonly enum?: readonly unknown[];
|
|
18
|
+
readonly $ref?: string;
|
|
19
|
+
readonly allOf?: readonly OpenAPISchema[];
|
|
20
|
+
readonly oneOf?: readonly OpenAPISchema[];
|
|
21
|
+
readonly anyOf?: readonly OpenAPISchema[];
|
|
22
|
+
readonly items?: OpenAPISchema;
|
|
23
|
+
readonly additionalProperties?: OpenAPISchema | boolean;
|
|
24
|
+
readonly discriminator?: OpenAPIDiscriminator;
|
|
25
|
+
readonly xml?: OpenAPIXml;
|
|
26
|
+
readonly extensions?: Readonly<Record<string, unknown>>;
|
|
27
|
+
}
|
|
28
|
+
export interface OpenAPIDiscriminator {
|
|
29
|
+
readonly propertyName: string;
|
|
30
|
+
readonly mapping?: Readonly<Record<string, string>>;
|
|
31
|
+
readonly oneOf?: readonly OpenAPISchema[];
|
|
32
|
+
}
|
|
33
|
+
export interface OpenAPIXml {
|
|
34
|
+
readonly name?: string;
|
|
35
|
+
readonly namespace?: string;
|
|
36
|
+
readonly prefix?: string;
|
|
37
|
+
readonly attribute?: boolean;
|
|
38
|
+
readonly wrapped?: boolean;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=openApiSchema.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiSchema.type.d.ts","sourceRoot":"","sources":["../../src/openApiTypes/openApiSchema.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IAC9D,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAC;IAC9C,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiSchema.type.js","sourceRoot":"","sources":["../../src/openApiTypes/openApiSchema.type.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAPI security types.
|
|
3
|
+
*/
|
|
4
|
+
export interface OpenAPISecurityRequirement {
|
|
5
|
+
readonly [key: string]: readonly string[];
|
|
6
|
+
}
|
|
7
|
+
export interface OpenAPISecurityScheme {
|
|
8
|
+
readonly type: "apiKey" | "http" | "mutualTLS" | "oauth2" | "openIdConnect";
|
|
9
|
+
readonly description?: string;
|
|
10
|
+
readonly name?: string;
|
|
11
|
+
readonly in?: "query" | "header" | "cookie";
|
|
12
|
+
readonly scheme?: string;
|
|
13
|
+
readonly bearerFormat?: string;
|
|
14
|
+
readonly flows?: OpenAPIOAuthFlows;
|
|
15
|
+
readonly openIdConnectUrl?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface OpenAPIOAuthFlows {
|
|
18
|
+
readonly implicit?: OpenAPIOAuthFlow;
|
|
19
|
+
readonly password?: OpenAPIOAuthFlow;
|
|
20
|
+
readonly clientCredentials?: OpenAPIOAuthFlow;
|
|
21
|
+
readonly authorizationCode?: OpenAPIOAuthFlow;
|
|
22
|
+
}
|
|
23
|
+
export interface OpenAPIOAuthFlow {
|
|
24
|
+
readonly authorizationUrl?: string;
|
|
25
|
+
readonly tokenUrl?: string;
|
|
26
|
+
readonly refreshUrl?: string;
|
|
27
|
+
readonly scopes?: Readonly<Record<string, string>>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=openApiSecurity.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiSecurity.type.d.ts","sourceRoot":"","sources":["../../src/openApiTypes/openApiSecurity.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,eAAe,CAAC;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IAC9C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;CAC/C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiSecurity.type.js","sourceRoot":"","sources":["../../src/openApiTypes/openApiSecurity.type.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/openapi/openApiTypes
|
|
3
|
+
*
|
|
4
|
+
* All OpenAPI specification types re-exported from split modules.
|
|
5
|
+
*/
|
|
6
|
+
export * from "./openApiDocument.type.js";
|
|
7
|
+
export * from "./openApiPath.type.js";
|
|
8
|
+
export * from "./openApiComponent.type.js";
|
|
9
|
+
export * from "./openApiSchema.type.js";
|
|
10
|
+
export * from "./openApiSecurity.type.js";
|
|
11
|
+
//# sourceMappingURL=openApiTypes.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiTypes.core.d.ts","sourceRoot":"","sources":["../../src/openApiTypes/openApiTypes.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @zudojs/openapi/openApiTypes
|
|
3
|
+
*
|
|
4
|
+
* All OpenAPI specification types re-exported from split modules.
|
|
5
|
+
*/
|
|
6
|
+
export * from "./openApiDocument.type.js";
|
|
7
|
+
export * from "./openApiPath.type.js";
|
|
8
|
+
export * from "./openApiComponent.type.js";
|
|
9
|
+
export * from "./openApiSchema.type.js";
|
|
10
|
+
export * from "./openApiSecurity.type.js";
|
|
11
|
+
//# sourceMappingURL=openApiTypes.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiTypes.core.js","sourceRoot":"","sources":["../../src/openApiTypes/openApiTypes.core.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openApiValidation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/openApiValidation/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { OpenAPIDocument } from "../openApiTypes/openApiTypes.core.js";
|
|
2
|
+
import type { OpenAPIValidationIssue } from "../openApiErrors/openApiError.core.js";
|
|
3
|
+
export interface OpenAPIValidator {
|
|
4
|
+
validate(document: OpenAPIDocument): {
|
|
5
|
+
readonly valid: boolean;
|
|
6
|
+
readonly errors: readonly OpenAPIValidationIssue[];
|
|
7
|
+
readonly warnings: readonly OpenAPIValidationIssue[];
|
|
8
|
+
};
|
|
9
|
+
assertValid(document: OpenAPIDocument): void;
|
|
10
|
+
}
|
|
11
|
+
export declare class OpenAPIValidatorImpl implements OpenAPIValidator {
|
|
12
|
+
validate(document: OpenAPIDocument): {
|
|
13
|
+
readonly valid: boolean;
|
|
14
|
+
readonly errors: readonly OpenAPIValidationIssue[];
|
|
15
|
+
readonly warnings: readonly OpenAPIValidationIssue[];
|
|
16
|
+
};
|
|
17
|
+
assertValid(document: OpenAPIDocument): void;
|
|
18
|
+
private validateDocumentStructure;
|
|
19
|
+
private validatePaths;
|
|
20
|
+
private validateOperationIds;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=openApiValidator.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiValidator.core.d.ts","sourceRoot":"","sources":["../../src/openApiValidation/openApiValidator.core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAcpF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG;QACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;QACnD,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;KACtD,CAAC;IACF,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAC;CAC9C;AAED,qBAAa,oBAAqB,YAAW,gBAAgB;IACpD,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG;QAC1C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;QACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,sBAAsB,EAAE,CAAC;QACnD,QAAQ,CAAC,QAAQ,EAAE,SAAS,sBAAsB,EAAE,CAAC;KACtD,CAWA;IAEM,WAAW,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAOlD;IAED,OAAO,CAAC,yBAAyB;IAwCjC,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,oBAAoB;CAwB7B"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { OpenAPIValidationError } from "../openApiErrors/openApiError.core.js";
|
|
2
|
+
const OPERATIONS = [
|
|
3
|
+
"get",
|
|
4
|
+
"put",
|
|
5
|
+
"post",
|
|
6
|
+
"delete",
|
|
7
|
+
"options",
|
|
8
|
+
"head",
|
|
9
|
+
"patch",
|
|
10
|
+
"trace",
|
|
11
|
+
];
|
|
12
|
+
export class OpenAPIValidatorImpl {
|
|
13
|
+
validate(document) {
|
|
14
|
+
const errors = [];
|
|
15
|
+
const warnings = [];
|
|
16
|
+
this.validateDocumentStructure(document, errors, warnings);
|
|
17
|
+
this.validatePaths(document, errors, warnings);
|
|
18
|
+
this.validateOperationIds(document, errors, warnings);
|
|
19
|
+
return {
|
|
20
|
+
valid: errors.length === 0,
|
|
21
|
+
errors: Object.freeze([...errors]),
|
|
22
|
+
warnings: Object.freeze([...warnings]),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
assertValid(document) {
|
|
26
|
+
const result = this.validate(document);
|
|
27
|
+
if (!result.valid)
|
|
28
|
+
throw new OpenAPIValidationError("OpenAPI validation failed.", result.errors);
|
|
29
|
+
}
|
|
30
|
+
validateDocumentStructure(document, errors, warnings) {
|
|
31
|
+
if (!document.openapi)
|
|
32
|
+
errors.push({
|
|
33
|
+
path: ["openapi"],
|
|
34
|
+
message: "OpenAPI version is required.",
|
|
35
|
+
severity: "error",
|
|
36
|
+
});
|
|
37
|
+
if (!document.info) {
|
|
38
|
+
errors.push({
|
|
39
|
+
path: ["info"],
|
|
40
|
+
message: "Info object is required.",
|
|
41
|
+
severity: "error",
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (!document.info.title)
|
|
46
|
+
errors.push({
|
|
47
|
+
path: ["info", "title"],
|
|
48
|
+
message: "Info title is required.",
|
|
49
|
+
severity: "error",
|
|
50
|
+
});
|
|
51
|
+
if (!document.info.version)
|
|
52
|
+
errors.push({
|
|
53
|
+
path: ["info", "version"],
|
|
54
|
+
message: "Info version is required.",
|
|
55
|
+
severity: "error",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
if (!document.paths || Object.keys(document.paths).length === 0) {
|
|
59
|
+
warnings.push({
|
|
60
|
+
path: ["paths"],
|
|
61
|
+
message: "Document has no paths defined.",
|
|
62
|
+
severity: "warning",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
validatePaths(document, errors, _warnings) {
|
|
67
|
+
for (const [path, pathItem] of Object.entries(document.paths)) {
|
|
68
|
+
if (!pathItem)
|
|
69
|
+
continue;
|
|
70
|
+
if (path.includes(":") && !path.includes("{")) {
|
|
71
|
+
errors.push({
|
|
72
|
+
path: ["paths", path],
|
|
73
|
+
message: `Path "${path}" contains un-converted path parameters. Use "/users/{id}" instead of "/users/:id".`,
|
|
74
|
+
severity: "error",
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
for (const method of OPERATIONS) {
|
|
78
|
+
const operation = pathItem[method];
|
|
79
|
+
if (!operation)
|
|
80
|
+
continue;
|
|
81
|
+
for (const param of operation.parameters ?? []) {
|
|
82
|
+
if (param.in === "path" && !param.required) {
|
|
83
|
+
errors.push({
|
|
84
|
+
path: ["paths", path, method, "parameters"],
|
|
85
|
+
message: `Path parameter "${param.name}" must be required.`,
|
|
86
|
+
severity: "error",
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
validateOperationIds(document, errors, _warnings) {
|
|
94
|
+
const operationIds = new Set();
|
|
95
|
+
for (const [path, pathItem] of Object.entries(document.paths)) {
|
|
96
|
+
if (!pathItem)
|
|
97
|
+
continue;
|
|
98
|
+
for (const method of OPERATIONS) {
|
|
99
|
+
const operation = pathItem[method];
|
|
100
|
+
if (!operation?.operationId)
|
|
101
|
+
continue;
|
|
102
|
+
if (operationIds.has(operation.operationId)) {
|
|
103
|
+
errors.push({
|
|
104
|
+
path: ["paths", path, method, "operationId"],
|
|
105
|
+
message: `Duplicate operationId "${operation.operationId}".`,
|
|
106
|
+
severity: "error",
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
operationIds.add(operation.operationId);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=openApiValidator.core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openApiValidator.core.js","sourceRoot":"","sources":["../../src/openApiValidation/openApiValidator.core.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zudojs/openapi",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "OpenAPI 3.1 specification generation, validation, and SDK generation for Zudojs applications.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc -p tsconfig.json",
|
|
21
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
22
|
+
"clean": "rm -rf dist",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"test:watch": "vitest"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@zudojs/errors": "workspace:*",
|
|
28
|
+
"@zudojs/constants": "workspace:*",
|
|
29
|
+
"@zudojs/schema": "workspace:*"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^26.4.1",
|
|
33
|
+
"typescript": "^7.0.2",
|
|
34
|
+
"vitest": "^4.1.11"
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=24.0.0"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"zudojs",
|
|
44
|
+
"openapi",
|
|
45
|
+
"swagger",
|
|
46
|
+
"api-docs"
|
|
47
|
+
],
|
|
48
|
+
"homepage": "https://github.com/oyinlola-tech/zudo#readme",
|
|
49
|
+
"repository": {
|
|
50
|
+
"type": "git",
|
|
51
|
+
"url": "https://github.com/oyinlola-tech/zudo"
|
|
52
|
+
}
|
|
53
|
+
}
|