@engjts/nexus 0.1.8 → 0.1.9
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/package.json +1 -1
- package/BENCHMARK_REPORT.md +0 -343
- package/documentation/01-getting-started.md +0 -240
- package/documentation/02-context.md +0 -335
- package/documentation/03-routing.md +0 -397
- package/documentation/04-middleware.md +0 -483
- package/documentation/05-validation.md +0 -514
- package/documentation/06-error-handling.md +0 -465
- package/documentation/07-performance.md +0 -364
- package/documentation/08-adapters.md +0 -470
- package/documentation/09-api-reference.md +0 -548
- package/documentation/10-examples.md +0 -582
- package/documentation/11-deployment.md +0 -477
- package/documentation/12-sentry.md +0 -620
- package/documentation/13-sentry-data-storage.md +0 -996
- package/documentation/14-sentry-data-reference.md +0 -457
- package/documentation/15-sentry-summary.md +0 -409
- package/documentation/16-alerts-system.md +0 -745
- package/documentation/17-alert-adapters.md +0 -696
- package/documentation/18-alerts-implementation-summary.md +0 -385
- package/documentation/19-class-based-routing.md +0 -840
- package/documentation/20-websocket-realtime.md +0 -813
- package/documentation/21-cache-system.md +0 -510
- package/documentation/22-job-queue.md +0 -772
- package/documentation/23-sentry-plugin.md +0 -551
- package/documentation/24-testing-utilities.md +0 -1287
- package/documentation/25-api-versioning.md +0 -533
- package/documentation/26-context-store.md +0 -607
- package/documentation/27-dependency-injection.md +0 -329
- package/documentation/28-lifecycle-hooks.md +0 -521
- package/documentation/29-package-structure.md +0 -196
- package/documentation/30-plugin-system.md +0 -414
- package/documentation/31-jwt-authentication.md +0 -597
- package/documentation/32-cli.md +0 -268
- package/documentation/ALERTS-COMPLETE-SUMMARY.md +0 -429
- package/documentation/ALERTS-INDEX.md +0 -330
- package/documentation/ALERTS-QUICK-REFERENCE.md +0 -286
- package/documentation/README.md +0 -178
- package/documentation/index.html +0 -34
- package/modern_framework_paper.md +0 -1870
- package/public/css/style.css +0 -87
- package/public/index.html +0 -34
- package/public/js/app.js +0 -27
- package/src/advanced/cache/InMemoryCacheStore.ts +0 -68
- package/src/advanced/cache/MultiTierCache.ts +0 -194
- package/src/advanced/cache/RedisCacheStore.ts +0 -341
- package/src/advanced/cache/index.ts +0 -5
- package/src/advanced/cache/types.ts +0 -40
- package/src/advanced/graphql/SimpleDataLoader.ts +0 -42
- package/src/advanced/graphql/index.ts +0 -22
- package/src/advanced/graphql/server.ts +0 -252
- package/src/advanced/graphql/types.ts +0 -42
- package/src/advanced/jobs/InMemoryQueueStore.ts +0 -68
- package/src/advanced/jobs/JobQueue.ts +0 -556
- package/src/advanced/jobs/RedisQueueStore.ts +0 -367
- package/src/advanced/jobs/index.ts +0 -5
- package/src/advanced/jobs/types.ts +0 -70
- package/src/advanced/observability/APMManager.ts +0 -163
- package/src/advanced/observability/AlertManager.ts +0 -109
- package/src/advanced/observability/MetricRegistry.ts +0 -151
- package/src/advanced/observability/ObservabilityCenter.ts +0 -304
- package/src/advanced/observability/StructuredLogger.ts +0 -154
- package/src/advanced/observability/TracingManager.ts +0 -117
- package/src/advanced/observability/adapters.ts +0 -304
- package/src/advanced/observability/createObservabilityMiddleware.ts +0 -63
- package/src/advanced/observability/index.ts +0 -11
- package/src/advanced/observability/types.ts +0 -174
- package/src/advanced/playground/extractPathParams.ts +0 -6
- package/src/advanced/playground/generateFieldExample.ts +0 -31
- package/src/advanced/playground/generatePlaygroundHTML.ts +0 -1956
- package/src/advanced/playground/generateSummary.ts +0 -19
- package/src/advanced/playground/getTagFromPath.ts +0 -9
- package/src/advanced/playground/index.ts +0 -8
- package/src/advanced/playground/playground.ts +0 -250
- package/src/advanced/playground/types.ts +0 -49
- package/src/advanced/playground/zodToExample.ts +0 -16
- package/src/advanced/playground/zodToParams.ts +0 -15
- package/src/advanced/postman/buildAuth.ts +0 -31
- package/src/advanced/postman/buildBody.ts +0 -15
- package/src/advanced/postman/buildQueryParams.ts +0 -27
- package/src/advanced/postman/buildRequestItem.ts +0 -36
- package/src/advanced/postman/buildResponses.ts +0 -11
- package/src/advanced/postman/buildUrl.ts +0 -33
- package/src/advanced/postman/capitalize.ts +0 -4
- package/src/advanced/postman/generateCollection.ts +0 -59
- package/src/advanced/postman/generateEnvironment.ts +0 -34
- package/src/advanced/postman/generateExampleFromZod.ts +0 -21
- package/src/advanced/postman/generateFieldExample.ts +0 -45
- package/src/advanced/postman/generateName.ts +0 -20
- package/src/advanced/postman/generateUUID.ts +0 -11
- package/src/advanced/postman/getTagFromPath.ts +0 -10
- package/src/advanced/postman/index.ts +0 -28
- package/src/advanced/postman/postman.ts +0 -156
- package/src/advanced/postman/slugify.ts +0 -7
- package/src/advanced/postman/types.ts +0 -140
- package/src/advanced/realtime/index.ts +0 -18
- package/src/advanced/realtime/websocket.ts +0 -231
- package/src/advanced/sentry/index.ts +0 -1236
- package/src/advanced/sentry/types.ts +0 -355
- package/src/advanced/static/generateDirectoryListing.ts +0 -47
- package/src/advanced/static/generateETag.ts +0 -7
- package/src/advanced/static/getMimeType.ts +0 -9
- package/src/advanced/static/index.ts +0 -32
- package/src/advanced/static/isSafePath.ts +0 -13
- package/src/advanced/static/publicDir.ts +0 -21
- package/src/advanced/static/serveStatic.ts +0 -225
- package/src/advanced/static/spa.ts +0 -24
- package/src/advanced/static/types.ts +0 -159
- package/src/advanced/swagger/SwaggerGenerator.ts +0 -66
- package/src/advanced/swagger/buildOperation.ts +0 -61
- package/src/advanced/swagger/buildParameters.ts +0 -61
- package/src/advanced/swagger/buildRequestBody.ts +0 -21
- package/src/advanced/swagger/buildResponses.ts +0 -54
- package/src/advanced/swagger/capitalize.ts +0 -5
- package/src/advanced/swagger/convertPath.ts +0 -9
- package/src/advanced/swagger/createSwagger.ts +0 -12
- package/src/advanced/swagger/generateOperationId.ts +0 -21
- package/src/advanced/swagger/generateSpec.ts +0 -105
- package/src/advanced/swagger/generateSummary.ts +0 -24
- package/src/advanced/swagger/generateSwaggerUI.ts +0 -70
- package/src/advanced/swagger/generateThemeCss.ts +0 -53
- package/src/advanced/swagger/index.ts +0 -25
- package/src/advanced/swagger/swagger.ts +0 -237
- package/src/advanced/swagger/types.ts +0 -206
- package/src/advanced/swagger/zodFieldToOpenAPI.ts +0 -94
- package/src/advanced/swagger/zodSchemaToOpenAPI.ts +0 -50
- package/src/advanced/swagger/zodToOpenAPI.ts +0 -22
- package/src/advanced/testing/factory.ts +0 -509
- package/src/advanced/testing/harness.ts +0 -612
- package/src/advanced/testing/index.ts +0 -430
- package/src/advanced/testing/load-test.ts +0 -618
- package/src/advanced/testing/mock-server.ts +0 -498
- package/src/advanced/testing/mock.ts +0 -670
- package/src/cli/bin.ts +0 -9
- package/src/cli/cli.ts +0 -158
- package/src/cli/commands/add.ts +0 -178
- package/src/cli/commands/build.ts +0 -73
- package/src/cli/commands/create.ts +0 -166
- package/src/cli/commands/dev.ts +0 -85
- package/src/cli/commands/generate.ts +0 -99
- package/src/cli/commands/help.ts +0 -95
- package/src/cli/commands/init.ts +0 -91
- package/src/cli/commands/version.ts +0 -38
- package/src/cli/index.ts +0 -6
- package/src/cli/templates/generators.ts +0 -359
- package/src/cli/templates/index.ts +0 -680
- package/src/cli/utils/exec.ts +0 -52
- package/src/cli/utils/file-system.ts +0 -78
- package/src/cli/utils/logger.ts +0 -111
- package/src/core/adapter.ts +0 -88
- package/src/core/application.ts +0 -1453
- package/src/core/context-pool.ts +0 -79
- package/src/core/context.ts +0 -856
- package/src/core/index.ts +0 -94
- package/src/core/middleware.ts +0 -272
- package/src/core/performance/buffer-pool.ts +0 -108
- package/src/core/performance/middleware-optimizer.ts +0 -162
- package/src/core/plugin/PluginManager.ts +0 -435
- package/src/core/plugin/builder.ts +0 -358
- package/src/core/plugin/index.ts +0 -50
- package/src/core/plugin/types.ts +0 -214
- package/src/core/router/file-router.ts +0 -623
- package/src/core/router/index.ts +0 -260
- package/src/core/router/radix-tree.ts +0 -242
- package/src/core/serializer.ts +0 -397
- package/src/core/store/index.ts +0 -30
- package/src/core/store/registry.ts +0 -178
- package/src/core/store/request-store.ts +0 -240
- package/src/core/store/types.ts +0 -233
- package/src/core/types.ts +0 -616
- package/src/database/adapter.ts +0 -35
- package/src/database/adapters/index.ts +0 -1
- package/src/database/adapters/mysql.ts +0 -669
- package/src/database/database.ts +0 -70
- package/src/database/dialect.ts +0 -388
- package/src/database/index.ts +0 -12
- package/src/database/migrations.ts +0 -86
- package/src/database/optimizer.ts +0 -125
- package/src/database/query-builder.ts +0 -404
- package/src/database/realtime.ts +0 -53
- package/src/database/schema.ts +0 -71
- package/src/database/transactions.ts +0 -56
- package/src/database/types.ts +0 -87
- package/src/deployment/cluster.ts +0 -471
- package/src/deployment/config.ts +0 -454
- package/src/deployment/docker.ts +0 -599
- package/src/deployment/graceful-shutdown.ts +0 -373
- package/src/deployment/index.ts +0 -56
- package/src/index.ts +0 -281
- package/src/security/adapter.ts +0 -318
- package/src/security/auth/JWTPlugin.ts +0 -234
- package/src/security/auth/JWTProvider.ts +0 -316
- package/src/security/auth/adapter.ts +0 -12
- package/src/security/auth/jwt.ts +0 -234
- package/src/security/auth/middleware.ts +0 -188
- package/src/security/csrf.ts +0 -220
- package/src/security/headers.ts +0 -108
- package/src/security/index.ts +0 -60
- package/src/security/rate-limit/adapter.ts +0 -7
- package/src/security/rate-limit/memory.ts +0 -108
- package/src/security/rate-limit/middleware.ts +0 -181
- package/src/security/sanitization.ts +0 -75
- package/src/security/types.ts +0 -240
- package/src/security/utils.ts +0 -52
- package/tsconfig.json +0 -39
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import { Context } from 'vm';
|
|
2
|
-
import { Application } from '../../core/application';
|
|
3
|
-
import { HTTPMethod, SchemaConfig, RouteMeta, RouteConfig } from '../../core/types';
|
|
4
|
-
import { Plugin } from '../static/spa';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Extended Application interface for Swagger plugin
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
export interface SwaggerApplication extends Application {
|
|
11
|
-
swaggerSchema?: (name: string, schema: OpenAPISchema) => SwaggerApplication;
|
|
12
|
-
[key: string]: unknown;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// ============================================
|
|
16
|
-
// TYPES & INTERFACES
|
|
17
|
-
// ============================================
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* OpenAPI Info object
|
|
21
|
-
*/
|
|
22
|
-
export interface SwaggerInfo {
|
|
23
|
-
title?: string;
|
|
24
|
-
version?: string;
|
|
25
|
-
description?: string;
|
|
26
|
-
termsOfService?: string;
|
|
27
|
-
contact?: {
|
|
28
|
-
name?: string;
|
|
29
|
-
url?: string;
|
|
30
|
-
email?: string;
|
|
31
|
-
};
|
|
32
|
-
license?: {
|
|
33
|
-
name: string;
|
|
34
|
-
url?: string;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Custom theme for Swagger UI
|
|
40
|
-
*/
|
|
41
|
-
export interface SwaggerTheme {
|
|
42
|
-
primaryColor?: string;
|
|
43
|
-
backgroundColor?: string;
|
|
44
|
-
headerColor?: string;
|
|
45
|
-
textColor?: string;
|
|
46
|
-
fontFamily?: string;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Swagger configuration options
|
|
51
|
-
*/
|
|
52
|
-
export interface SwaggerConfig {
|
|
53
|
-
/** Path to serve Swagger UI (default: /docs) */
|
|
54
|
-
path?: string;
|
|
55
|
-
/** Path to serve OpenAPI JSON spec (default: /openapi.json) */
|
|
56
|
-
specPath?: string;
|
|
57
|
-
/** API info - auto-detected from package.json if not provided */
|
|
58
|
-
info?: SwaggerInfo;
|
|
59
|
-
/** Server URLs - auto-detected if not provided */
|
|
60
|
-
servers?: Array<{
|
|
61
|
-
url: string;
|
|
62
|
-
description?: string;
|
|
63
|
-
}>;
|
|
64
|
-
/** Security schemes */
|
|
65
|
-
securitySchemes?: Record<string, SecurityScheme>;
|
|
66
|
-
/** Default security for all routes */
|
|
67
|
-
security?: Array<Record<string, string[]>>;
|
|
68
|
-
/** External docs */
|
|
69
|
-
externalDocs?: {
|
|
70
|
-
description?: string;
|
|
71
|
-
url: string;
|
|
72
|
-
};
|
|
73
|
-
/** Custom CSS for Swagger UI */
|
|
74
|
-
customCss?: string;
|
|
75
|
-
/** Custom favicon URL */
|
|
76
|
-
favicon?: string;
|
|
77
|
-
/** Theme: 'light' | 'dark' | custom theme object */
|
|
78
|
-
theme?: 'light' | 'dark' | SwaggerTheme;
|
|
79
|
-
/** Tags to group endpoints */
|
|
80
|
-
tags?: Array<{ name: string; description?: string }>;
|
|
81
|
-
/** Hide routes that don't have meta.tags */
|
|
82
|
-
hideUntagged?: boolean;
|
|
83
|
-
/** Sort tags alphabetically */
|
|
84
|
-
sortTags?: boolean;
|
|
85
|
-
/** Expand operations by default: 'list' | 'full' | 'none' */
|
|
86
|
-
docExpansion?: 'list' | 'full' | 'none';
|
|
87
|
-
/** Filter operations by tag */
|
|
88
|
-
filter?: boolean;
|
|
89
|
-
/** Try it out enabled by default */
|
|
90
|
-
tryItOutEnabled?: boolean;
|
|
91
|
-
/** Persist authorization */
|
|
92
|
-
persistAuthorization?: boolean;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Security scheme types
|
|
97
|
-
*/
|
|
98
|
-
export interface SecurityScheme {
|
|
99
|
-
type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';
|
|
100
|
-
description?: string;
|
|
101
|
-
name?: string;
|
|
102
|
-
in?: 'query' | 'header' | 'cookie';
|
|
103
|
-
scheme?: string;
|
|
104
|
-
bearerFormat?: string;
|
|
105
|
-
flows?: OAuthFlows;
|
|
106
|
-
openIdConnectUrl?: string;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export interface OAuthFlows {
|
|
110
|
-
implicit?: OAuthFlow;
|
|
111
|
-
password?: OAuthFlow;
|
|
112
|
-
clientCredentials?: OAuthFlow;
|
|
113
|
-
authorizationCode?: OAuthFlow;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
export interface OAuthFlow {
|
|
117
|
-
authorizationUrl?: string;
|
|
118
|
-
tokenUrl?: string;
|
|
119
|
-
refreshUrl?: string;
|
|
120
|
-
scopes: Record<string, string>;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* OpenAPI Schema object
|
|
125
|
-
*/
|
|
126
|
-
export interface OpenAPISchema {
|
|
127
|
-
type?: string;
|
|
128
|
-
format?: string;
|
|
129
|
-
properties?: Record<string, OpenAPISchema>;
|
|
130
|
-
items?: OpenAPISchema;
|
|
131
|
-
required?: string[];
|
|
132
|
-
enum?: any[];
|
|
133
|
-
description?: string;
|
|
134
|
-
example?: any;
|
|
135
|
-
default?: any;
|
|
136
|
-
minimum?: number;
|
|
137
|
-
maximum?: number;
|
|
138
|
-
minLength?: number;
|
|
139
|
-
maxLength?: number;
|
|
140
|
-
pattern?: string;
|
|
141
|
-
nullable?: boolean;
|
|
142
|
-
$ref?: string;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* OpenAPI Operation object
|
|
147
|
-
*/
|
|
148
|
-
export interface OpenAPIOperation {
|
|
149
|
-
tags?: string[];
|
|
150
|
-
summary?: string;
|
|
151
|
-
description?: string;
|
|
152
|
-
operationId?: string;
|
|
153
|
-
parameters?: OpenAPIParameter[];
|
|
154
|
-
requestBody?: OpenAPIRequestBody;
|
|
155
|
-
responses: Record<string, OpenAPIResponse>;
|
|
156
|
-
deprecated?: boolean;
|
|
157
|
-
security?: Array<Record<string, string[]>>;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
export interface OpenAPIParameter {
|
|
161
|
-
name: string;
|
|
162
|
-
in: 'query' | 'header' | 'path' | 'cookie';
|
|
163
|
-
description?: string;
|
|
164
|
-
required?: boolean;
|
|
165
|
-
schema: OpenAPISchema;
|
|
166
|
-
example?: any;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
export interface OpenAPIRequestBody {
|
|
170
|
-
description?: string;
|
|
171
|
-
required?: boolean;
|
|
172
|
-
content: Record<string, { schema: OpenAPISchema; example?: any }>;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
export interface OpenAPIResponse {
|
|
176
|
-
description: string;
|
|
177
|
-
content?: Record<string, { schema: OpenAPISchema; example?: any }>;
|
|
178
|
-
headers?: Record<string, { description?: string; schema: OpenAPISchema }>;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
* Full OpenAPI specification
|
|
183
|
-
*/
|
|
184
|
-
export interface OpenAPISpec {
|
|
185
|
-
openapi: string;
|
|
186
|
-
info: SwaggerInfo & { title: string; version: string };
|
|
187
|
-
servers?: Array<{ url: string; description?: string }>;
|
|
188
|
-
paths: Record<string, Record<string, OpenAPIOperation>>;
|
|
189
|
-
components?: {
|
|
190
|
-
schemas?: Record<string, OpenAPISchema>;
|
|
191
|
-
securitySchemes?: Record<string, SecurityScheme>;
|
|
192
|
-
};
|
|
193
|
-
security?: Array<Record<string, string[]>>;
|
|
194
|
-
tags?: Array<{ name: string; description?: string }>;
|
|
195
|
-
externalDocs?: { description?: string; url: string };
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Internal route storage with full config
|
|
200
|
-
*/
|
|
201
|
-
export interface StoredRoute {
|
|
202
|
-
method: HTTPMethod;
|
|
203
|
-
path: string;
|
|
204
|
-
schema?: SchemaConfig;
|
|
205
|
-
meta?: RouteMeta;
|
|
206
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { OpenAPISchema } from './types';
|
|
2
|
-
import { zodSchemaToOpenAPI } from './zodSchemaToOpenAPI';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Convert individual Zod field to OpenAPI schema
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export function zodFieldToOpenAPI(field: any): OpenAPISchema {
|
|
10
|
-
if (!field?._def) {
|
|
11
|
-
return { type: 'string' };
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const def = field._def;
|
|
15
|
-
const typeName = def.typeName;
|
|
16
|
-
|
|
17
|
-
switch (typeName) {
|
|
18
|
-
case 'ZodString': {
|
|
19
|
-
const schema: OpenAPISchema = { type: 'string' };
|
|
20
|
-
|
|
21
|
-
// Extract string constraints
|
|
22
|
-
for (const check of def.checks || []) {
|
|
23
|
-
if (check.kind === 'email') schema.format = 'email';
|
|
24
|
-
if (check.kind === 'url') schema.format = 'uri';
|
|
25
|
-
if (check.kind === 'uuid') schema.format = 'uuid';
|
|
26
|
-
if (check.kind === 'min') schema.minLength = check.value;
|
|
27
|
-
if (check.kind === 'max') schema.maxLength = check.value;
|
|
28
|
-
if (check.kind === 'regex') schema.pattern = check.regex.source;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return schema;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
case 'ZodNumber': {
|
|
35
|
-
const schema: OpenAPISchema = { type: 'number' };
|
|
36
|
-
|
|
37
|
-
// Extract number constraints
|
|
38
|
-
for (const check of def.checks || []) {
|
|
39
|
-
if (check.kind === 'int') schema.type = 'integer';
|
|
40
|
-
if (check.kind === 'min') schema.minimum = check.value;
|
|
41
|
-
if (check.kind === 'max') schema.maximum = check.value;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return schema;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
case 'ZodBoolean':
|
|
48
|
-
return { type: 'boolean' };
|
|
49
|
-
|
|
50
|
-
case 'ZodArray':
|
|
51
|
-
return {
|
|
52
|
-
type: 'array',
|
|
53
|
-
items: zodFieldToOpenAPI(def.type)
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
case 'ZodObject':
|
|
57
|
-
return zodSchemaToOpenAPI(field);
|
|
58
|
-
|
|
59
|
-
case 'ZodEnum':
|
|
60
|
-
return {
|
|
61
|
-
type: 'string',
|
|
62
|
-
enum: def.values
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
case 'ZodOptional':
|
|
66
|
-
case 'ZodNullable':
|
|
67
|
-
return zodFieldToOpenAPI(def.innerType);
|
|
68
|
-
|
|
69
|
-
case 'ZodDefault':
|
|
70
|
-
const innerSchema = zodFieldToOpenAPI(def.innerType);
|
|
71
|
-
innerSchema.default = def.defaultValue();
|
|
72
|
-
return innerSchema;
|
|
73
|
-
|
|
74
|
-
case 'ZodLiteral':
|
|
75
|
-
return {
|
|
76
|
-
type: typeof def.value === 'number' ? 'number' :
|
|
77
|
-
typeof def.value === 'boolean' ? 'boolean' : 'string',
|
|
78
|
-
enum: [def.value]
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
case 'ZodUnion':
|
|
82
|
-
// For simple unions, just use the first type
|
|
83
|
-
if (def.options?.length > 0) {
|
|
84
|
-
return zodFieldToOpenAPI(def.options[0]);
|
|
85
|
-
}
|
|
86
|
-
return { type: 'string' };
|
|
87
|
-
|
|
88
|
-
case 'ZodDate':
|
|
89
|
-
return { type: 'string', format: 'date-time' };
|
|
90
|
-
|
|
91
|
-
default:
|
|
92
|
-
return { type: 'string' };
|
|
93
|
-
}
|
|
94
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { zodFieldToOpenAPI } from './zodFieldToOpenAPI';
|
|
2
|
-
import { OpenAPISchema } from './types';
|
|
3
|
-
|
|
4
|
-
// ============================================
|
|
5
|
-
// ZOD TO OPENAPI CONVERSION
|
|
6
|
-
// ============================================
|
|
7
|
-
/**
|
|
8
|
-
* Convert Zod schema to OpenAPI schema
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export function zodSchemaToOpenAPI(zodSchema: any): OpenAPISchema {
|
|
13
|
-
if (!zodSchema) {
|
|
14
|
-
return { type: 'object' };
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// If it's already an OpenAPI schema
|
|
18
|
-
if (zodSchema.type || zodSchema.$ref) {
|
|
19
|
-
return zodSchema;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
try {
|
|
23
|
-
const shape = zodSchema._def?.shape?.() || zodSchema.shape;
|
|
24
|
-
|
|
25
|
-
if (shape) {
|
|
26
|
-
const properties: Record<string, OpenAPISchema> = {};
|
|
27
|
-
const required: string[] = [];
|
|
28
|
-
|
|
29
|
-
for (const [key, value] of Object.entries(shape)) {
|
|
30
|
-
properties[key] = zodFieldToOpenAPI(value);
|
|
31
|
-
|
|
32
|
-
// Check if field is required
|
|
33
|
-
const def = (value as any)?._def;
|
|
34
|
-
if (def?.typeName !== 'ZodOptional' && def?.typeName !== 'ZodDefault') {
|
|
35
|
-
required.push(key);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return {
|
|
40
|
-
type: 'object',
|
|
41
|
-
properties,
|
|
42
|
-
required: required.length > 0 ? required : undefined
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
} catch {
|
|
46
|
-
// Fall through
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return { type: 'object' };
|
|
50
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { OpenAPISchema } from './types';
|
|
2
|
-
import { zodFieldToOpenAPI } from './zodFieldToOpenAPI';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Extract specific field from Zod schema
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export function zodToOpenAPI(zodSchema: any, fieldName: string): OpenAPISchema | null {
|
|
10
|
-
if (!zodSchema) return null;
|
|
11
|
-
|
|
12
|
-
try {
|
|
13
|
-
const shape = zodSchema._def?.shape?.() || zodSchema.shape;
|
|
14
|
-
if (shape && shape[fieldName]) {
|
|
15
|
-
return zodFieldToOpenAPI(shape[fieldName]);
|
|
16
|
-
}
|
|
17
|
-
} catch {
|
|
18
|
-
// Fall through
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return null;
|
|
22
|
-
}
|