@mandujs/core 0.13.0 → 0.13.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.ko.md +4 -4
- package/README.md +653 -653
- package/package.json +1 -1
- package/src/bundler/build.ts +91 -91
- package/src/bundler/css.ts +302 -302
- package/src/client/Link.tsx +227 -227
- package/src/client/globals.ts +44 -44
- package/src/client/hooks.ts +267 -267
- package/src/client/index.ts +5 -5
- package/src/client/island.ts +8 -8
- package/src/client/router.ts +435 -435
- package/src/client/runtime.ts +23 -23
- package/src/client/serialize.ts +404 -404
- package/src/client/window-state.ts +101 -101
- package/src/config/mandu.ts +9 -0
- package/src/config/validate.ts +12 -0
- package/src/config/watcher.ts +311 -311
- package/src/constants.ts +40 -40
- package/src/content/content-layer.ts +314 -314
- package/src/content/content.test.ts +433 -433
- package/src/content/data-store.ts +245 -245
- package/src/content/digest.ts +133 -133
- package/src/content/index.ts +164 -164
- package/src/content/loader-context.ts +172 -172
- package/src/content/loaders/api.ts +216 -216
- package/src/content/loaders/file.ts +169 -169
- package/src/content/loaders/glob.ts +252 -252
- package/src/content/loaders/index.ts +34 -34
- package/src/content/loaders/types.ts +137 -137
- package/src/content/meta-store.ts +209 -209
- package/src/content/types.ts +282 -282
- package/src/content/watcher.ts +135 -135
- package/src/contract/client-safe.test.ts +42 -42
- package/src/contract/client-safe.ts +114 -114
- package/src/contract/client.ts +16 -16
- package/src/contract/define.ts +459 -459
- package/src/contract/handler.ts +10 -10
- package/src/contract/normalize.test.ts +276 -276
- package/src/contract/normalize.ts +404 -404
- package/src/contract/registry.test.ts +206 -206
- package/src/contract/registry.ts +568 -568
- package/src/contract/schema.ts +48 -48
- package/src/contract/types.ts +58 -58
- package/src/contract/validator.ts +32 -32
- package/src/devtools/ai/context-builder.ts +375 -375
- package/src/devtools/ai/index.ts +25 -25
- package/src/devtools/ai/mcp-connector.ts +465 -465
- package/src/devtools/client/catchers/error-catcher.ts +327 -327
- package/src/devtools/client/catchers/index.ts +18 -18
- package/src/devtools/client/catchers/network-proxy.ts +363 -363
- package/src/devtools/client/components/index.ts +39 -39
- package/src/devtools/client/components/kitchen-root.tsx +362 -362
- package/src/devtools/client/components/mandu-character.tsx +241 -241
- package/src/devtools/client/components/overlay.tsx +368 -368
- package/src/devtools/client/components/panel/errors-panel.tsx +259 -259
- package/src/devtools/client/components/panel/guard-panel.tsx +244 -244
- package/src/devtools/client/components/panel/index.ts +32 -32
- package/src/devtools/client/components/panel/islands-panel.tsx +304 -304
- package/src/devtools/client/components/panel/network-panel.tsx +292 -292
- package/src/devtools/client/components/panel/panel-container.tsx +259 -259
- package/src/devtools/client/filters/context-filters.ts +282 -282
- package/src/devtools/client/filters/index.ts +16 -16
- package/src/devtools/client/index.ts +63 -63
- package/src/devtools/client/persistence.ts +335 -335
- package/src/devtools/client/state-manager.ts +478 -478
- package/src/devtools/design-tokens.ts +263 -263
- package/src/devtools/hook/create-hook.ts +207 -207
- package/src/devtools/hook/index.ts +13 -13
- package/src/devtools/index.ts +439 -439
- package/src/devtools/init.ts +266 -266
- package/src/devtools/protocol.ts +237 -237
- package/src/devtools/server/index.ts +17 -17
- package/src/devtools/server/source-context.ts +444 -444
- package/src/devtools/types.ts +319 -319
- package/src/devtools/worker/index.ts +25 -25
- package/src/devtools/worker/redaction-worker.ts +222 -222
- package/src/devtools/worker/worker-manager.ts +409 -409
- package/src/error/domains.ts +265 -265
- package/src/error/result.ts +46 -46
- package/src/error/types.ts +6 -6
- package/src/errors/extractor.ts +409 -409
- package/src/errors/index.ts +19 -19
- package/src/filling/auth.ts +308 -308
- package/src/filling/context.ts +24 -1
- package/src/filling/deps.ts +238 -238
- package/src/filling/index.ts +2 -0
- package/src/filling/sse.test.ts +168 -0
- package/src/filling/sse.ts +162 -0
- package/src/generator/index.ts +3 -3
- package/src/guard/analyzer.ts +360 -360
- package/src/guard/ast-analyzer.ts +806 -806
- package/src/guard/contract-guard.ts +9 -9
- package/src/guard/file-type.test.ts +24 -24
- package/src/guard/presets/atomic.ts +70 -70
- package/src/guard/presets/clean.ts +77 -77
- package/src/guard/presets/fsd.ts +79 -79
- package/src/guard/presets/hexagonal.ts +68 -68
- package/src/guard/presets/index.ts +291 -291
- package/src/guard/reporter.ts +445 -445
- package/src/guard/rules.ts +12 -12
- package/src/guard/statistics.ts +578 -578
- package/src/guard/suggestions.ts +358 -358
- package/src/guard/types.ts +348 -348
- package/src/guard/validator.ts +834 -834
- package/src/guard/watcher.ts +404 -404
- package/src/index.ts +6 -1
- package/src/intent/index.ts +310 -310
- package/src/island/index.ts +304 -304
- package/src/logging/index.ts +22 -22
- package/src/logging/transports.ts +365 -365
- package/src/plugins/index.ts +38 -38
- package/src/plugins/registry.ts +377 -377
- package/src/plugins/types.ts +363 -363
- package/src/report/index.ts +1 -1
- package/src/router/fs-patterns.ts +387 -387
- package/src/router/fs-scanner.ts +497 -497
- package/src/runtime/boundary.tsx +232 -232
- package/src/runtime/compose.ts +222 -222
- package/src/runtime/escape.ts +44 -0
- package/src/runtime/lifecycle.ts +381 -381
- package/src/runtime/logger.test.ts +345 -345
- package/src/runtime/logger.ts +677 -677
- package/src/runtime/router.test.ts +476 -476
- package/src/runtime/router.ts +105 -105
- package/src/runtime/security.ts +155 -155
- package/src/runtime/server.ts +257 -0
- package/src/runtime/session-key.ts +328 -328
- package/src/runtime/ssr.ts +16 -21
- package/src/runtime/streaming-ssr.ts +24 -33
- package/src/runtime/trace.ts +144 -144
- package/src/seo/index.ts +214 -214
- package/src/seo/integration/ssr.ts +307 -307
- package/src/seo/render/basic.ts +427 -427
- package/src/seo/render/index.ts +143 -143
- package/src/seo/render/jsonld.ts +539 -539
- package/src/seo/render/opengraph.ts +191 -191
- package/src/seo/render/robots.ts +116 -116
- package/src/seo/render/sitemap.ts +137 -137
- package/src/seo/render/twitter.ts +126 -126
- package/src/seo/resolve/index.ts +353 -353
- package/src/seo/resolve/opengraph.ts +143 -143
- package/src/seo/resolve/robots.ts +73 -73
- package/src/seo/resolve/title.ts +94 -94
- package/src/seo/resolve/twitter.ts +73 -73
- package/src/seo/resolve/url.ts +97 -97
- package/src/seo/routes/index.ts +290 -290
- package/src/seo/types.ts +575 -575
- package/src/slot/validator.ts +39 -39
- package/src/spec/index.ts +3 -3
- package/src/spec/load.ts +76 -76
- package/src/spec/lock.ts +56 -56
- package/src/utils/bun.ts +8 -8
- package/src/utils/lru-cache.ts +75 -75
- package/src/utils/safe-io.ts +188 -188
- package/src/utils/string-safe.ts +298 -298
package/src/contract/schema.ts
CHANGED
|
@@ -5,33 +5,33 @@
|
|
|
5
5
|
|
|
6
6
|
import type { z } from "zod";
|
|
7
7
|
|
|
8
|
-
/** HTTP Methods supported in contracts */
|
|
9
|
-
export type ContractMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Client-safe schema options
|
|
13
|
-
*/
|
|
14
|
-
export type ClientSafeRequestMap = Partial<Record<
|
|
15
|
-
ContractMethod,
|
|
16
|
-
{
|
|
17
|
-
query?: boolean;
|
|
18
|
-
body?: boolean;
|
|
19
|
-
params?: boolean;
|
|
20
|
-
headers?: boolean;
|
|
21
|
-
}
|
|
22
|
-
>>;
|
|
23
|
-
|
|
24
|
-
export type ClientSafeResponseMap = number[] | Partial<Record<number, boolean>>;
|
|
25
|
-
|
|
26
|
-
export interface ClientSafeOptions {
|
|
27
|
-
/** Request schema exposure */
|
|
28
|
-
request?: ClientSafeRequestMap;
|
|
29
|
-
/** Response schema exposure */
|
|
30
|
-
response?: ClientSafeResponseMap;
|
|
31
|
-
/** Include standard error responses if defined */
|
|
32
|
-
includeErrors?: boolean;
|
|
33
|
-
}
|
|
34
|
-
|
|
8
|
+
/** HTTP Methods supported in contracts */
|
|
9
|
+
export type ContractMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Client-safe schema options
|
|
13
|
+
*/
|
|
14
|
+
export type ClientSafeRequestMap = Partial<Record<
|
|
15
|
+
ContractMethod,
|
|
16
|
+
{
|
|
17
|
+
query?: boolean;
|
|
18
|
+
body?: boolean;
|
|
19
|
+
params?: boolean;
|
|
20
|
+
headers?: boolean;
|
|
21
|
+
}
|
|
22
|
+
>>;
|
|
23
|
+
|
|
24
|
+
export type ClientSafeResponseMap = number[] | Partial<Record<number, boolean>>;
|
|
25
|
+
|
|
26
|
+
export interface ClientSafeOptions {
|
|
27
|
+
/** Request schema exposure */
|
|
28
|
+
request?: ClientSafeRequestMap;
|
|
29
|
+
/** Response schema exposure */
|
|
30
|
+
response?: ClientSafeResponseMap;
|
|
31
|
+
/** Include standard error responses if defined */
|
|
32
|
+
includeErrors?: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
35
|
/** Example data for request/response documentation */
|
|
36
36
|
export interface SchemaExamples {
|
|
37
37
|
/** Example name → example data */
|
|
@@ -97,19 +97,19 @@ export interface ContractResponseSchema {
|
|
|
97
97
|
export type ContractNormalizeMode = "strip" | "strict" | "passthrough";
|
|
98
98
|
|
|
99
99
|
/** Full contract schema definition */
|
|
100
|
-
export interface ContractSchema {
|
|
101
|
-
/** Contract name (optional) */
|
|
102
|
-
name?: string;
|
|
103
|
-
/** Contract version (optional) */
|
|
104
|
-
version?: string;
|
|
105
|
-
/** Contract metadata (optional) */
|
|
106
|
-
meta?: Record<string, unknown>;
|
|
107
|
-
/** Client-safe schema config (optional) */
|
|
108
|
-
clientSafe?: ClientSafeOptions;
|
|
109
|
-
/** API description */
|
|
110
|
-
description?: string;
|
|
111
|
-
/** Tags for grouping (e.g., OpenAPI tags) */
|
|
112
|
-
tags?: string[];
|
|
100
|
+
export interface ContractSchema {
|
|
101
|
+
/** Contract name (optional) */
|
|
102
|
+
name?: string;
|
|
103
|
+
/** Contract version (optional) */
|
|
104
|
+
version?: string;
|
|
105
|
+
/** Contract metadata (optional) */
|
|
106
|
+
meta?: Record<string, unknown>;
|
|
107
|
+
/** Client-safe schema config (optional) */
|
|
108
|
+
clientSafe?: ClientSafeOptions;
|
|
109
|
+
/** API description */
|
|
110
|
+
description?: string;
|
|
111
|
+
/** Tags for grouping (e.g., OpenAPI tags) */
|
|
112
|
+
tags?: string[];
|
|
113
113
|
/** Request schemas by method */
|
|
114
114
|
request: ContractRequestSchema;
|
|
115
115
|
/** Response schemas by status code */
|
|
@@ -129,14 +129,14 @@ export interface ContractSchema {
|
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
/** Contract definition input (what user provides) */
|
|
132
|
-
export interface ContractDefinition {
|
|
133
|
-
name?: string;
|
|
134
|
-
version?: string;
|
|
135
|
-
meta?: Record<string, unknown>;
|
|
136
|
-
clientSafe?: ClientSafeOptions;
|
|
137
|
-
description?: string;
|
|
138
|
-
tags?: string[];
|
|
139
|
-
request: ContractRequestSchema;
|
|
132
|
+
export interface ContractDefinition {
|
|
133
|
+
name?: string;
|
|
134
|
+
version?: string;
|
|
135
|
+
meta?: Record<string, unknown>;
|
|
136
|
+
clientSafe?: ClientSafeOptions;
|
|
137
|
+
description?: string;
|
|
138
|
+
tags?: string[];
|
|
139
|
+
request: ContractRequestSchema;
|
|
140
140
|
response: ContractResponseSchema;
|
|
141
141
|
/** Normalize mode for request data */
|
|
142
142
|
normalize?: ContractNormalizeMode;
|
package/src/contract/types.ts
CHANGED
|
@@ -11,22 +11,22 @@ import type {
|
|
|
11
11
|
MethodRequestSchema,
|
|
12
12
|
} from "./schema";
|
|
13
13
|
|
|
14
|
-
/**
|
|
15
|
-
* Extract inferred type from Zod schema
|
|
16
|
-
*/
|
|
17
|
-
type InferZod<T> = T extends z.ZodTypeAny ? z.infer<T> : never;
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Extract inferred type from response schema (supports ResponseSchemaWithExamples)
|
|
21
|
-
*/
|
|
22
|
-
export type InferResponseSchema<T> =
|
|
23
|
-
T extends { schema: infer S }
|
|
24
|
-
? S extends z.ZodTypeAny
|
|
25
|
-
? z.infer<S>
|
|
26
|
-
: never
|
|
27
|
-
: T extends z.ZodTypeAny
|
|
28
|
-
? z.infer<T>
|
|
29
|
-
: never;
|
|
14
|
+
/**
|
|
15
|
+
* Extract inferred type from Zod schema
|
|
16
|
+
*/
|
|
17
|
+
type InferZod<T> = T extends z.ZodTypeAny ? z.infer<T> : never;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Extract inferred type from response schema (supports ResponseSchemaWithExamples)
|
|
21
|
+
*/
|
|
22
|
+
export type InferResponseSchema<T> =
|
|
23
|
+
T extends { schema: infer S }
|
|
24
|
+
? S extends z.ZodTypeAny
|
|
25
|
+
? z.infer<S>
|
|
26
|
+
: never
|
|
27
|
+
: T extends z.ZodTypeAny
|
|
28
|
+
? z.infer<T>
|
|
29
|
+
: never;
|
|
30
30
|
|
|
31
31
|
/**
|
|
32
32
|
* Infer request schema types for a single method
|
|
@@ -50,9 +50,9 @@ type InferContractRequest<T extends ContractRequestSchema> = {
|
|
|
50
50
|
/**
|
|
51
51
|
* Infer all response schemas
|
|
52
52
|
*/
|
|
53
|
-
type InferContractResponse<T extends ContractResponseSchema> = {
|
|
54
|
-
[K in keyof T]: InferResponseSchema<T[K]>;
|
|
55
|
-
};
|
|
53
|
+
type InferContractResponse<T extends ContractResponseSchema> = {
|
|
54
|
+
[K in keyof T]: InferResponseSchema<T[K]>;
|
|
55
|
+
};
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* Infer full contract types
|
|
@@ -115,34 +115,34 @@ export type InferBody<
|
|
|
115
115
|
/**
|
|
116
116
|
* Extract params type for a specific method
|
|
117
117
|
*/
|
|
118
|
-
export type InferParams<
|
|
119
|
-
T extends ContractSchema,
|
|
120
|
-
M extends keyof T["request"]
|
|
121
|
-
> = T["request"][M] extends MethodRequestSchema
|
|
122
|
-
? T["request"][M]["params"] extends z.ZodTypeAny
|
|
123
|
-
? z.infer<T["request"][M]["params"]>
|
|
124
|
-
: undefined
|
|
125
|
-
: undefined;
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Extract headers type for a specific method
|
|
129
|
-
*/
|
|
130
|
-
export type InferHeaders<
|
|
131
|
-
T extends ContractSchema,
|
|
132
|
-
M extends keyof T["request"]
|
|
133
|
-
> = T["request"][M] extends MethodRequestSchema
|
|
134
|
-
? T["request"][M]["headers"] extends z.ZodTypeAny
|
|
135
|
-
? z.infer<T["request"][M]["headers"]>
|
|
136
|
-
: undefined
|
|
137
|
-
: undefined;
|
|
118
|
+
export type InferParams<
|
|
119
|
+
T extends ContractSchema,
|
|
120
|
+
M extends keyof T["request"]
|
|
121
|
+
> = T["request"][M] extends MethodRequestSchema
|
|
122
|
+
? T["request"][M]["params"] extends z.ZodTypeAny
|
|
123
|
+
? z.infer<T["request"][M]["params"]>
|
|
124
|
+
: undefined
|
|
125
|
+
: undefined;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Extract headers type for a specific method
|
|
129
|
+
*/
|
|
130
|
+
export type InferHeaders<
|
|
131
|
+
T extends ContractSchema,
|
|
132
|
+
M extends keyof T["request"]
|
|
133
|
+
> = T["request"][M] extends MethodRequestSchema
|
|
134
|
+
? T["request"][M]["headers"] extends z.ZodTypeAny
|
|
135
|
+
? z.infer<T["request"][M]["headers"]>
|
|
136
|
+
: undefined
|
|
137
|
+
: undefined;
|
|
138
138
|
|
|
139
139
|
/**
|
|
140
140
|
* Extract response type for a specific status code
|
|
141
141
|
*/
|
|
142
|
-
export type InferResponse<
|
|
143
|
-
T extends ContractSchema,
|
|
144
|
-
S extends keyof T["response"]
|
|
145
|
-
> = InferResponseSchema<T["response"][S]>;
|
|
142
|
+
export type InferResponse<
|
|
143
|
+
T extends ContractSchema,
|
|
144
|
+
S extends keyof T["response"]
|
|
145
|
+
> = InferResponseSchema<T["response"][S]>;
|
|
146
146
|
|
|
147
147
|
/**
|
|
148
148
|
* Helper type to get all defined methods in a contract
|
|
@@ -183,20 +183,20 @@ export type RequiredFields<
|
|
|
183
183
|
/**
|
|
184
184
|
* Get the success response type (200 or 201)
|
|
185
185
|
*/
|
|
186
|
-
export type SuccessResponse<T extends ContractSchema> =
|
|
187
|
-
InferResponseSchema<T["response"][200]> extends never
|
|
188
|
-
? InferResponseSchema<T["response"][201]>
|
|
189
|
-
: InferResponseSchema<T["response"][200]>;
|
|
186
|
+
export type SuccessResponse<T extends ContractSchema> =
|
|
187
|
+
InferResponseSchema<T["response"][200]> extends never
|
|
188
|
+
? InferResponseSchema<T["response"][201]>
|
|
189
|
+
: InferResponseSchema<T["response"][200]>;
|
|
190
190
|
|
|
191
191
|
/**
|
|
192
192
|
* Get the error response type (400, 404, 500, etc.)
|
|
193
193
|
*/
|
|
194
|
-
export type ErrorResponse<T extends ContractSchema> =
|
|
195
|
-
| InferResponseSchema<T["response"][400]>
|
|
196
|
-
| InferResponseSchema<T["response"][401]>
|
|
197
|
-
| InferResponseSchema<T["response"][403]>
|
|
198
|
-
| InferResponseSchema<T["response"][404]>
|
|
199
|
-
| InferResponseSchema<T["response"][500]>;
|
|
194
|
+
export type ErrorResponse<T extends ContractSchema> =
|
|
195
|
+
| InferResponseSchema<T["response"][400]>
|
|
196
|
+
| InferResponseSchema<T["response"][401]>
|
|
197
|
+
| InferResponseSchema<T["response"][403]>
|
|
198
|
+
| InferResponseSchema<T["response"][404]>
|
|
199
|
+
| InferResponseSchema<T["response"][500]>;
|
|
200
200
|
|
|
201
201
|
/**
|
|
202
202
|
* Utility type for strict contract enforcement
|
|
@@ -233,8 +233,8 @@ export type ContractFetchOptions<
|
|
|
233
233
|
/**
|
|
234
234
|
* Response type union for a contract
|
|
235
235
|
*/
|
|
236
|
-
export type ContractResponseUnion<T extends ContractSchema> = {
|
|
237
|
-
[K in keyof T["response"]]: InferResponseSchema<T["response"][K]> extends never
|
|
238
|
-
? never
|
|
239
|
-
: { status: K; data: InferResponseSchema<T["response"][K]> };
|
|
240
|
-
}[keyof T["response"]];
|
|
236
|
+
export type ContractResponseUnion<T extends ContractSchema> = {
|
|
237
|
+
[K in keyof T["response"]]: InferResponseSchema<T["response"][K]> extends never
|
|
238
|
+
? never
|
|
239
|
+
: { status: K; data: InferResponseSchema<T["response"][K]> };
|
|
240
|
+
}[keyof T["response"]];
|
|
@@ -13,32 +13,32 @@
|
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
15
|
import type { z } from "zod";
|
|
16
|
-
import type {
|
|
17
|
-
ContractSchema,
|
|
18
|
-
ContractValidationResult,
|
|
19
|
-
ContractValidationError,
|
|
20
|
-
ContractValidationIssue,
|
|
21
|
-
MethodRequestSchema,
|
|
22
|
-
ContractNormalizeMode,
|
|
23
|
-
ResponseSchemaWithExamples,
|
|
24
|
-
} from "./schema";
|
|
16
|
+
import type {
|
|
17
|
+
ContractSchema,
|
|
18
|
+
ContractValidationResult,
|
|
19
|
+
ContractValidationError,
|
|
20
|
+
ContractValidationIssue,
|
|
21
|
+
MethodRequestSchema,
|
|
22
|
+
ContractNormalizeMode,
|
|
23
|
+
ResponseSchemaWithExamples,
|
|
24
|
+
} from "./schema";
|
|
25
25
|
import {
|
|
26
26
|
type NormalizeMode,
|
|
27
27
|
type NormalizeOptions,
|
|
28
28
|
normalizeSchema,
|
|
29
29
|
createCoerceSchema,
|
|
30
30
|
} from "./normalize";
|
|
31
|
-
import { ZodObject } from "zod";
|
|
32
|
-
|
|
33
|
-
function isResponseSchemaWithExamples(
|
|
34
|
-
schema: z.ZodTypeAny | ResponseSchemaWithExamples | undefined
|
|
35
|
-
): schema is ResponseSchemaWithExamples {
|
|
36
|
-
return (
|
|
37
|
-
schema !== undefined &&
|
|
38
|
-
typeof schema === "object" &&
|
|
39
|
-
"schema" in schema
|
|
40
|
-
);
|
|
41
|
-
}
|
|
31
|
+
import { ZodObject } from "zod";
|
|
32
|
+
|
|
33
|
+
function isResponseSchemaWithExamples(
|
|
34
|
+
schema: z.ZodTypeAny | ResponseSchemaWithExamples | undefined
|
|
35
|
+
): schema is ResponseSchemaWithExamples {
|
|
36
|
+
return (
|
|
37
|
+
schema !== undefined &&
|
|
38
|
+
typeof schema === "object" &&
|
|
39
|
+
"schema" in schema
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* Validator 옵션
|
|
@@ -453,18 +453,18 @@ export class ContractValidator {
|
|
|
453
453
|
* @param responseBody - The response body (already parsed)
|
|
454
454
|
* @param statusCode - HTTP status code
|
|
455
455
|
*/
|
|
456
|
-
validateResponse(responseBody: unknown, statusCode: number): ContractValidationResult {
|
|
457
|
-
const responseSchemaOrWithExamples = this.contract.response[statusCode];
|
|
458
|
-
if (!responseSchemaOrWithExamples) {
|
|
459
|
-
// No schema defined for this status code, pass through
|
|
460
|
-
return { success: true };
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
const responseSchema = isResponseSchemaWithExamples(responseSchemaOrWithExamples)
|
|
464
|
-
? responseSchemaOrWithExamples.schema
|
|
465
|
-
: responseSchemaOrWithExamples;
|
|
466
|
-
|
|
467
|
-
const result = responseSchema.safeParse(responseBody);
|
|
456
|
+
validateResponse(responseBody: unknown, statusCode: number): ContractValidationResult {
|
|
457
|
+
const responseSchemaOrWithExamples = this.contract.response[statusCode];
|
|
458
|
+
if (!responseSchemaOrWithExamples) {
|
|
459
|
+
// No schema defined for this status code, pass through
|
|
460
|
+
return { success: true };
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
const responseSchema = isResponseSchemaWithExamples(responseSchemaOrWithExamples)
|
|
464
|
+
? responseSchemaOrWithExamples.schema
|
|
465
|
+
: responseSchemaOrWithExamples;
|
|
466
|
+
|
|
467
|
+
const result = responseSchema.safeParse(responseBody);
|
|
468
468
|
if (!result.success) {
|
|
469
469
|
const errors: ContractValidationError[] = [
|
|
470
470
|
{
|