@rexeus/typeweaver-core 0.2.1 → 0.3.0

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/dist/index.cjs ADDED
@@ -0,0 +1,431 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ HttpMethod: () => HttpMethod,
24
+ HttpOperationDefinition: () => HttpOperationDefinition,
25
+ HttpRequestDefinition: () => HttpRequestDefinition,
26
+ HttpResponse: () => HttpResponse,
27
+ HttpResponseDefinition: () => HttpResponseDefinition,
28
+ HttpStatusCode: () => HttpStatusCode,
29
+ HttpStatusCodeNameMap: () => HttpStatusCodeNameMap,
30
+ RequestValidationError: () => RequestValidationError,
31
+ ResponseValidationError: () => ResponseValidationError,
32
+ UnknownResponse: () => UnknownResponse
33
+ });
34
+ module.exports = __toCommonJS(index_exports);
35
+
36
+ // src/HttpStatusCode.ts
37
+ var HttpStatusCode = /* @__PURE__ */ ((HttpStatusCode3) => {
38
+ HttpStatusCode3[HttpStatusCode3["OK"] = 200] = "OK";
39
+ HttpStatusCode3[HttpStatusCode3["CREATED"] = 201] = "CREATED";
40
+ HttpStatusCode3[HttpStatusCode3["ACCEPTED"] = 202] = "ACCEPTED";
41
+ HttpStatusCode3[HttpStatusCode3["NO_CONTENT"] = 204] = "NO_CONTENT";
42
+ HttpStatusCode3[HttpStatusCode3["RESET_CONTENT"] = 205] = "RESET_CONTENT";
43
+ HttpStatusCode3[HttpStatusCode3["PARTIAL_CONTENT"] = 206] = "PARTIAL_CONTENT";
44
+ HttpStatusCode3[HttpStatusCode3["MULTI_STATUS"] = 207] = "MULTI_STATUS";
45
+ HttpStatusCode3[HttpStatusCode3["ALREADY_REPORTED"] = 208] = "ALREADY_REPORTED";
46
+ HttpStatusCode3[HttpStatusCode3["IM_USED"] = 226] = "IM_USED";
47
+ HttpStatusCode3[HttpStatusCode3["MULTIPLE_CHOICES"] = 300] = "MULTIPLE_CHOICES";
48
+ HttpStatusCode3[HttpStatusCode3["MOVED_PERMANENTLY"] = 301] = "MOVED_PERMANENTLY";
49
+ HttpStatusCode3[HttpStatusCode3["FOUND"] = 302] = "FOUND";
50
+ HttpStatusCode3[HttpStatusCode3["SEE_OTHER"] = 303] = "SEE_OTHER";
51
+ HttpStatusCode3[HttpStatusCode3["NOT_MODIFIED"] = 304] = "NOT_MODIFIED";
52
+ HttpStatusCode3[HttpStatusCode3["TEMPORARY_REDIRECT"] = 307] = "TEMPORARY_REDIRECT";
53
+ HttpStatusCode3[HttpStatusCode3["PERMANENT_REDIRECT"] = 308] = "PERMANENT_REDIRECT";
54
+ HttpStatusCode3[HttpStatusCode3["BAD_REQUEST"] = 400] = "BAD_REQUEST";
55
+ HttpStatusCode3[HttpStatusCode3["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
56
+ HttpStatusCode3[HttpStatusCode3["PAYMENT_REQUIRED"] = 402] = "PAYMENT_REQUIRED";
57
+ HttpStatusCode3[HttpStatusCode3["FORBIDDEN"] = 403] = "FORBIDDEN";
58
+ HttpStatusCode3[HttpStatusCode3["NOT_FOUND"] = 404] = "NOT_FOUND";
59
+ HttpStatusCode3[HttpStatusCode3["METHOD_NOT_ALLOWED"] = 405] = "METHOD_NOT_ALLOWED";
60
+ HttpStatusCode3[HttpStatusCode3["NOT_ACCEPTABLE"] = 406] = "NOT_ACCEPTABLE";
61
+ HttpStatusCode3[HttpStatusCode3["PROXY_AUTHENTICATION_REQUIRED"] = 407] = "PROXY_AUTHENTICATION_REQUIRED";
62
+ HttpStatusCode3[HttpStatusCode3["REQUEST_TIMEOUT"] = 408] = "REQUEST_TIMEOUT";
63
+ HttpStatusCode3[HttpStatusCode3["CONFLICT"] = 409] = "CONFLICT";
64
+ HttpStatusCode3[HttpStatusCode3["GONE"] = 410] = "GONE";
65
+ HttpStatusCode3[HttpStatusCode3["LENGTH_REQUIRED"] = 411] = "LENGTH_REQUIRED";
66
+ HttpStatusCode3[HttpStatusCode3["PRECONDITION_FAILED"] = 412] = "PRECONDITION_FAILED";
67
+ HttpStatusCode3[HttpStatusCode3["PAYLOAD_TOO_LARGE"] = 413] = "PAYLOAD_TOO_LARGE";
68
+ HttpStatusCode3[HttpStatusCode3["URI_TOO_LONG"] = 414] = "URI_TOO_LONG";
69
+ HttpStatusCode3[HttpStatusCode3["UNSUPPORTED_MEDIA_TYPE"] = 415] = "UNSUPPORTED_MEDIA_TYPE";
70
+ HttpStatusCode3[HttpStatusCode3["RANGE_NOT_SATISFIABLE"] = 416] = "RANGE_NOT_SATISFIABLE";
71
+ HttpStatusCode3[HttpStatusCode3["EXPECTATION_FAILED"] = 417] = "EXPECTATION_FAILED";
72
+ HttpStatusCode3[HttpStatusCode3["IM_A_TEAPOT"] = 418] = "IM_A_TEAPOT";
73
+ HttpStatusCode3[HttpStatusCode3["MISDIRECTED_REQUEST"] = 421] = "MISDIRECTED_REQUEST";
74
+ HttpStatusCode3[HttpStatusCode3["UNPROCESSABLE_ENTITY"] = 422] = "UNPROCESSABLE_ENTITY";
75
+ HttpStatusCode3[HttpStatusCode3["LOCKED"] = 423] = "LOCKED";
76
+ HttpStatusCode3[HttpStatusCode3["FAILED_DEPENDENCY"] = 424] = "FAILED_DEPENDENCY";
77
+ HttpStatusCode3[HttpStatusCode3["UPGRADE_REQUIRED"] = 426] = "UPGRADE_REQUIRED";
78
+ HttpStatusCode3[HttpStatusCode3["PRECONDITION_REQUIRED"] = 428] = "PRECONDITION_REQUIRED";
79
+ HttpStatusCode3[HttpStatusCode3["TOO_MANY_REQUESTS"] = 429] = "TOO_MANY_REQUESTS";
80
+ HttpStatusCode3[HttpStatusCode3["REQUEST_HEADER_FIELDS_TOO_LARGE"] = 431] = "REQUEST_HEADER_FIELDS_TOO_LARGE";
81
+ HttpStatusCode3[HttpStatusCode3["UNAVAILABLE_FOR_LEGAL_REASONS"] = 451] = "UNAVAILABLE_FOR_LEGAL_REASONS";
82
+ HttpStatusCode3[HttpStatusCode3["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
83
+ HttpStatusCode3[HttpStatusCode3["NOT_IMPLEMENTED"] = 501] = "NOT_IMPLEMENTED";
84
+ HttpStatusCode3[HttpStatusCode3["BAD_GATEWAY"] = 502] = "BAD_GATEWAY";
85
+ HttpStatusCode3[HttpStatusCode3["SERVICE_UNAVAILABLE"] = 503] = "SERVICE_UNAVAILABLE";
86
+ HttpStatusCode3[HttpStatusCode3["GATEWAY_TIMEOUT"] = 504] = "GATEWAY_TIMEOUT";
87
+ HttpStatusCode3[HttpStatusCode3["HTTP_VERSION_NOT_SUPPORTED"] = 505] = "HTTP_VERSION_NOT_SUPPORTED";
88
+ HttpStatusCode3[HttpStatusCode3["VARIANT_ALSO_NEGOTIATES"] = 506] = "VARIANT_ALSO_NEGOTIATES";
89
+ HttpStatusCode3[HttpStatusCode3["INSUFFICIENT_STORAGE"] = 507] = "INSUFFICIENT_STORAGE";
90
+ HttpStatusCode3[HttpStatusCode3["LOOP_DETECTED"] = 508] = "LOOP_DETECTED";
91
+ HttpStatusCode3[HttpStatusCode3["NOT_EXTENDED"] = 510] = "NOT_EXTENDED";
92
+ HttpStatusCode3[HttpStatusCode3["NETWORK_AUTHENTICATION_REQUIRED"] = 511] = "NETWORK_AUTHENTICATION_REQUIRED";
93
+ return HttpStatusCode3;
94
+ })(HttpStatusCode || {});
95
+ var HttpStatusCodeNameMap = {
96
+ [200 /* OK */]: "Ok",
97
+ [201 /* CREATED */]: "Created",
98
+ [202 /* ACCEPTED */]: "Accepted",
99
+ [204 /* NO_CONTENT */]: "NoContent",
100
+ [205 /* RESET_CONTENT */]: "ResetContent",
101
+ [206 /* PARTIAL_CONTENT */]: "PartialContent",
102
+ [207 /* MULTI_STATUS */]: "MultiStatus",
103
+ [208 /* ALREADY_REPORTED */]: "AlreadyReported",
104
+ [226 /* IM_USED */]: "ImUsed",
105
+ [300 /* MULTIPLE_CHOICES */]: "MultipleChoices",
106
+ [301 /* MOVED_PERMANENTLY */]: "MovedPermanently",
107
+ [302 /* FOUND */]: "Found",
108
+ [303 /* SEE_OTHER */]: "SeeOther",
109
+ [304 /* NOT_MODIFIED */]: "NotModified",
110
+ [307 /* TEMPORARY_REDIRECT */]: "TemporaryRedirect",
111
+ [308 /* PERMANENT_REDIRECT */]: "PermanentRedirect",
112
+ [400 /* BAD_REQUEST */]: "BadRequest",
113
+ [401 /* UNAUTHORIZED */]: "Unauthorized",
114
+ [402 /* PAYMENT_REQUIRED */]: "PaymentRequired",
115
+ [403 /* FORBIDDEN */]: "Forbidden",
116
+ [404 /* NOT_FOUND */]: "NotFound",
117
+ [405 /* METHOD_NOT_ALLOWED */]: "MethodNotAllowed",
118
+ [406 /* NOT_ACCEPTABLE */]: "NotAcceptable",
119
+ [407 /* PROXY_AUTHENTICATION_REQUIRED */]: "ProxyAuthenticationRequired",
120
+ [408 /* REQUEST_TIMEOUT */]: "RequestTimeout",
121
+ [409 /* CONFLICT */]: "Conflict",
122
+ [410 /* GONE */]: "Gone",
123
+ [411 /* LENGTH_REQUIRED */]: "LengthRequired",
124
+ [412 /* PRECONDITION_FAILED */]: "PreconditionFailed",
125
+ [413 /* PAYLOAD_TOO_LARGE */]: "PayloadTooLarge",
126
+ [414 /* URI_TOO_LONG */]: "UriTooLong",
127
+ [415 /* UNSUPPORTED_MEDIA_TYPE */]: "UnsupportedMediaType",
128
+ [416 /* RANGE_NOT_SATISFIABLE */]: "RangeNotSatisfiable",
129
+ [417 /* EXPECTATION_FAILED */]: "ExpectationFailed",
130
+ [418 /* IM_A_TEAPOT */]: "ImATeapot",
131
+ [421 /* MISDIRECTED_REQUEST */]: "MisdirectedRequest",
132
+ [422 /* UNPROCESSABLE_ENTITY */]: "UnprocessableEntity",
133
+ [423 /* LOCKED */]: "Locked",
134
+ [424 /* FAILED_DEPENDENCY */]: "FailedDependency",
135
+ [426 /* UPGRADE_REQUIRED */]: "UpgradeRequired",
136
+ [428 /* PRECONDITION_REQUIRED */]: "PreconditionRequired",
137
+ [429 /* TOO_MANY_REQUESTS */]: "TooManyRequests",
138
+ [431 /* REQUEST_HEADER_FIELDS_TOO_LARGE */]: "RequestHeaderFieldsTooLarge",
139
+ [451 /* UNAVAILABLE_FOR_LEGAL_REASONS */]: "UnavailableForLegalReasons",
140
+ [500 /* INTERNAL_SERVER_ERROR */]: "InternalServerError",
141
+ [501 /* NOT_IMPLEMENTED */]: "NotImplemented",
142
+ [502 /* BAD_GATEWAY */]: "BadGateway",
143
+ [503 /* SERVICE_UNAVAILABLE */]: "ServiceUnavailable",
144
+ [504 /* GATEWAY_TIMEOUT */]: "GatewayTimeout",
145
+ [505 /* HTTP_VERSION_NOT_SUPPORTED */]: "HttpVersionNotSupported",
146
+ [506 /* VARIANT_ALSO_NEGOTIATES */]: "VariantAlsoNegotiates",
147
+ [507 /* INSUFFICIENT_STORAGE */]: "InsufficientStorage",
148
+ [508 /* LOOP_DETECTED */]: "LoopDetected",
149
+ [510 /* NOT_EXTENDED */]: "NotExtended",
150
+ [511 /* NETWORK_AUTHENTICATION_REQUIRED */]: "NetworkAuthenticationRequired"
151
+ };
152
+
153
+ // src/HttpResponse.ts
154
+ var HttpResponse = class {
155
+ constructor(statusCode, header, body) {
156
+ this.statusCode = statusCode;
157
+ this.header = header;
158
+ this.body = body;
159
+ }
160
+ };
161
+
162
+ // src/HttpMethod.ts
163
+ var HttpMethod = /* @__PURE__ */ ((HttpMethod3) => {
164
+ HttpMethod3["GET"] = "GET";
165
+ HttpMethod3["POST"] = "POST";
166
+ HttpMethod3["PUT"] = "PUT";
167
+ HttpMethod3["DELETE"] = "DELETE";
168
+ HttpMethod3["PATCH"] = "PATCH";
169
+ HttpMethod3["OPTIONS"] = "OPTIONS";
170
+ HttpMethod3["HEAD"] = "HEAD";
171
+ return HttpMethod3;
172
+ })(HttpMethod || {});
173
+
174
+ // src/HttpOperationDefinition.ts
175
+ var HttpOperationDefinition = class {
176
+ operationId;
177
+ path;
178
+ method;
179
+ summary;
180
+ request;
181
+ responses;
182
+ constructor(definition) {
183
+ this.operationId = definition.operationId;
184
+ this.path = definition.path;
185
+ this.method = definition.method;
186
+ this.summary = definition.summary;
187
+ this.request = definition.request;
188
+ this.responses = definition.responses;
189
+ }
190
+ };
191
+
192
+ // src/HttpRequestDefinition.ts
193
+ var HttpRequestDefinition = class {
194
+ header;
195
+ param;
196
+ query;
197
+ body;
198
+ constructor(definition) {
199
+ this.header = definition.header;
200
+ this.param = definition.param;
201
+ this.query = definition.query;
202
+ this.body = definition.body;
203
+ }
204
+ };
205
+
206
+ // src/HttpResponseDefinition.ts
207
+ var import_zod = require("zod");
208
+ var HttpResponseDefinition = class _HttpResponseDefinition {
209
+ constructor(definition) {
210
+ this.definition = definition;
211
+ this.name = definition.name;
212
+ this.statusCode = definition.statusCode;
213
+ this.description = definition.description;
214
+ this.header = definition.header;
215
+ this.body = definition.body;
216
+ }
217
+ name;
218
+ statusCode;
219
+ description;
220
+ header;
221
+ body;
222
+ extend(definition) {
223
+ const mergedHeader = (() => {
224
+ if (this.header instanceof import_zod.z.ZodRecord || definition.header instanceof import_zod.z.ZodRecord || this.header instanceof import_zod.z.ZodOptional && this.header.unwrap() instanceof import_zod.z.ZodRecord || definition.header instanceof import_zod.z.ZodOptional && definition.header.unwrap() instanceof import_zod.z.ZodRecord) {
225
+ throw new Error("Cannot merge ZodRecord headers");
226
+ }
227
+ if (!this.header && !definition.header) return void 0;
228
+ if (!this.header) return definition.header;
229
+ if (!definition.header) return this.header;
230
+ const mergedHeader2 = import_zod.z.object({
231
+ ...this.header instanceof import_zod.z.ZodObject ? this.header.shape : this.header.unwrap().shape,
232
+ ...definition.header instanceof import_zod.z.ZodObject ? definition.header.shape : definition.header.unwrap().shape
233
+ });
234
+ if (Object.values(mergedHeader2.shape).every(
235
+ (schema) => schema instanceof import_zod.z.ZodOptional
236
+ )) {
237
+ return mergedHeader2.optional();
238
+ }
239
+ return mergedHeader2;
240
+ })();
241
+ const mergedBody = (() => {
242
+ if (!this.body && !definition.body) return void 0;
243
+ if (!this.body) return definition.body;
244
+ if (!definition.body) return this.body;
245
+ if (this.body instanceof import_zod.z.ZodObject && definition.body instanceof import_zod.z.ZodObject) {
246
+ return import_zod.z.object({
247
+ ...this.body.shape,
248
+ ...definition.body.shape
249
+ });
250
+ }
251
+ return definition.body;
252
+ })();
253
+ const baseDefinition = {
254
+ ...this.definition,
255
+ name: definition.name,
256
+ statusCode: definition.statusCode ?? this.statusCode,
257
+ description: definition.description ?? this.description,
258
+ header: mergedHeader,
259
+ body: mergedBody
260
+ };
261
+ return new _HttpResponseDefinition(baseDefinition);
262
+ }
263
+ };
264
+
265
+ // src/RequestValidationError.ts
266
+ var RequestValidationError = class extends Error {
267
+ message;
268
+ /** Validation issues found in HTTP headers */
269
+ headerIssues = [];
270
+ /** Validation issues found in request body */
271
+ bodyIssues = [];
272
+ /** Validation issues found in query parameters */
273
+ queryIssues = [];
274
+ /** Validation issues found in path parameters */
275
+ pathParamIssues = [];
276
+ constructor(input) {
277
+ const message = "Invalid request";
278
+ super(message);
279
+ this.message = message;
280
+ if (input?.headerIssues) {
281
+ this.headerIssues = input.headerIssues;
282
+ }
283
+ if (input?.bodyIssues) {
284
+ this.bodyIssues = input.bodyIssues;
285
+ }
286
+ if (input?.queryIssues) {
287
+ this.queryIssues = input.queryIssues;
288
+ }
289
+ if (input?.pathParamIssues) {
290
+ this.pathParamIssues = input.pathParamIssues;
291
+ }
292
+ }
293
+ /**
294
+ * Adds header validation issues to the error.
295
+ * @param issues - Array of Zod validation issues
296
+ */
297
+ addHeaderIssues(issues) {
298
+ this.headerIssues.push(...issues);
299
+ }
300
+ /**
301
+ * Adds body validation issues to the error.
302
+ * @param issues - Array of Zod validation issues
303
+ */
304
+ addBodyIssues(issues) {
305
+ this.bodyIssues.push(...issues);
306
+ }
307
+ /**
308
+ * Adds query parameter validation issues to the error.
309
+ * @param issues - Array of Zod validation issues
310
+ */
311
+ addQueryIssues(issues) {
312
+ this.queryIssues.push(...issues);
313
+ }
314
+ /**
315
+ * Adds path parameter validation issues to the error.
316
+ * @param issues - Array of Zod validation issues
317
+ */
318
+ addPathParamIssues(issues) {
319
+ this.pathParamIssues.push(...issues);
320
+ }
321
+ /**
322
+ * Checks if this error contains any validation issues.
323
+ * @returns true if any category has issues, false otherwise
324
+ */
325
+ hasIssues() {
326
+ return this.headerIssues.length > 0 || this.bodyIssues.length > 0 || this.queryIssues.length > 0 || this.pathParamIssues.length > 0;
327
+ }
328
+ };
329
+
330
+ // src/ResponseValidationError.ts
331
+ var ResponseValidationError = class extends Error {
332
+ constructor(statusCode, input) {
333
+ const message = `Response validation failed for status code '${statusCode}'`;
334
+ super(message);
335
+ this.statusCode = statusCode;
336
+ this.message = message;
337
+ this.issues = input?.issues ?? [];
338
+ }
339
+ message;
340
+ issues;
341
+ addHeaderIssues(responseName, issues) {
342
+ this.addResponseIssues(responseName, issues);
343
+ }
344
+ addBodyIssues(responseName, issues) {
345
+ this.addResponseIssues(responseName, [], issues);
346
+ }
347
+ addResponseIssues(responseName, headerIssues = [], bodyIssues = []) {
348
+ if (headerIssues.length === 0 && bodyIssues.length === 0) {
349
+ return;
350
+ }
351
+ const issue = this.issues.find(
352
+ (i) => i.type === "INVALID_RESPONSE" && i.responseName === responseName
353
+ );
354
+ if (!issue) {
355
+ this.issues.push({
356
+ type: "INVALID_RESPONSE",
357
+ responseName,
358
+ headerIssues,
359
+ bodyIssues
360
+ });
361
+ return;
362
+ }
363
+ if (headerIssues.length > 0) {
364
+ issue.headerIssues.push(...headerIssues);
365
+ }
366
+ if (bodyIssues.length > 0) {
367
+ issue.bodyIssues.push(...bodyIssues);
368
+ }
369
+ }
370
+ addStatusCodeIssue(expectedStatusCodes) {
371
+ const statusCodeIssue = this.issues.find(
372
+ (i) => i.type === "INVALID_STATUS_CODE"
373
+ );
374
+ if (statusCodeIssue) {
375
+ statusCodeIssue.expectedStatusCodes.push(...expectedStatusCodes);
376
+ } else {
377
+ this.issues.push({
378
+ type: "INVALID_STATUS_CODE",
379
+ invalidStatusCode: this.statusCode,
380
+ expectedStatusCodes
381
+ });
382
+ }
383
+ }
384
+ getResponseHeaderIssues(responseName) {
385
+ const issue = this.issues.find(
386
+ (i) => i.type === "INVALID_RESPONSE" && i.responseName === responseName
387
+ );
388
+ return issue ? issue.headerIssues : [];
389
+ }
390
+ getResponseBodyIssues(responseName) {
391
+ const issue = this.issues.find(
392
+ (i) => i.type === "INVALID_RESPONSE" && i.responseName === responseName
393
+ );
394
+ return issue ? issue.bodyIssues : [];
395
+ }
396
+ hasResponseIssues(responseName) {
397
+ if (responseName) {
398
+ return this.issues.some(
399
+ (issue) => issue.type === "INVALID_RESPONSE" && issue.responseName === responseName
400
+ );
401
+ }
402
+ return this.issues.some((issue) => issue.type === "INVALID_RESPONSE");
403
+ }
404
+ hasStatusCodeIssues() {
405
+ return this.issues.some((issue) => issue.type === "INVALID_STATUS_CODE");
406
+ }
407
+ hasIssues() {
408
+ return this.issues.length > 0;
409
+ }
410
+ };
411
+
412
+ // src/UnknownResponse.ts
413
+ var UnknownResponse = class extends HttpResponse {
414
+ constructor(statusCode, header, body, validationError) {
415
+ super(statusCode, header, body);
416
+ this.validationError = validationError;
417
+ }
418
+ };
419
+ // Annotate the CommonJS export names for ESM import in node:
420
+ 0 && (module.exports = {
421
+ HttpMethod,
422
+ HttpOperationDefinition,
423
+ HttpRequestDefinition,
424
+ HttpResponse,
425
+ HttpResponseDefinition,
426
+ HttpStatusCode,
427
+ HttpStatusCodeNameMap,
428
+ RequestValidationError,
429
+ ResponseValidationError,
430
+ UnknownResponse
431
+ });
@@ -0,0 +1,355 @@
1
+ import { ZodType, ZodObject, ZodString, ZodStringFormat, ZodLiteral, ZodEnum, ZodOptional, ZodArray, ZodRecord } from 'zod';
2
+ import { $ZodIssue } from 'zod/v4/core';
3
+
4
+ type IHttpBody = any | undefined;
5
+ type HttpBodySchema = ZodType;
6
+
7
+ type IHttpHeader = Record<string, string | string[]> | undefined;
8
+ type ZodStringType$1 = ZodString | ZodStringFormat | ZodLiteral<string> | ZodEnum<Record<string, string>>;
9
+ type HttpHeaderValue = ZodStringType$1 | ZodOptional<ZodStringType$1> | ZodArray<ZodStringType$1> | ZodOptional<ZodArray<ZodStringType$1>>;
10
+ type HttpHeaderObject = ZodObject<Record<string, HttpHeaderValue>> | ZodRecord<ZodStringType$1, HttpHeaderValue>;
11
+ type HttpHeaderSchema = HttpHeaderObject | ZodOptional<HttpHeaderObject>;
12
+
13
+ declare enum HttpMethod {
14
+ GET = "GET",
15
+ POST = "POST",
16
+ PUT = "PUT",
17
+ DELETE = "DELETE",
18
+ PATCH = "PATCH",
19
+ OPTIONS = "OPTIONS",
20
+ HEAD = "HEAD"
21
+ }
22
+
23
+ type IHttpParam = Record<string, string> | undefined;
24
+ type HttpParamValue = ZodString | ZodStringFormat | ZodLiteral<string> | ZodEnum<Record<string, string>>;
25
+ type HttpParamSchema = ZodObject<Record<string, HttpParamValue>>;
26
+
27
+ type IHttpQuery = Record<string, string | string[]> | undefined;
28
+ type ZodStringType = ZodString | ZodStringFormat | ZodLiteral<string> | ZodEnum<Record<string, string>>;
29
+ type HttpQueryValue = ZodStringType | ZodOptional<ZodStringType> | ZodArray<ZodStringType> | ZodOptional<ZodArray<ZodStringType>>;
30
+ type HttpQueryObject = ZodObject<Record<string, HttpQueryValue>> | ZodRecord<ZodStringType, HttpQueryValue>;
31
+ type HttpQuerySchema = HttpQueryObject | ZodOptional<HttpQueryObject>;
32
+
33
+ type IHttpRequest<Header extends IHttpHeader = IHttpHeader, Param extends IHttpParam = IHttpParam, Query extends IHttpQuery = IHttpQuery, Body extends IHttpBody = IHttpBody> = {
34
+ body?: Body;
35
+ query?: Query;
36
+ param?: Param;
37
+ header?: Header;
38
+ path: string;
39
+ method: HttpMethod;
40
+ };
41
+
42
+ declare enum HttpStatusCode {
43
+ OK = 200,
44
+ CREATED = 201,
45
+ ACCEPTED = 202,
46
+ NO_CONTENT = 204,
47
+ RESET_CONTENT = 205,
48
+ PARTIAL_CONTENT = 206,
49
+ MULTI_STATUS = 207,
50
+ ALREADY_REPORTED = 208,
51
+ IM_USED = 226,
52
+ MULTIPLE_CHOICES = 300,
53
+ MOVED_PERMANENTLY = 301,
54
+ FOUND = 302,
55
+ SEE_OTHER = 303,
56
+ NOT_MODIFIED = 304,
57
+ TEMPORARY_REDIRECT = 307,
58
+ PERMANENT_REDIRECT = 308,
59
+ BAD_REQUEST = 400,
60
+ UNAUTHORIZED = 401,
61
+ PAYMENT_REQUIRED = 402,
62
+ FORBIDDEN = 403,
63
+ NOT_FOUND = 404,
64
+ METHOD_NOT_ALLOWED = 405,
65
+ NOT_ACCEPTABLE = 406,
66
+ PROXY_AUTHENTICATION_REQUIRED = 407,
67
+ REQUEST_TIMEOUT = 408,
68
+ CONFLICT = 409,
69
+ GONE = 410,
70
+ LENGTH_REQUIRED = 411,
71
+ PRECONDITION_FAILED = 412,
72
+ PAYLOAD_TOO_LARGE = 413,
73
+ URI_TOO_LONG = 414,
74
+ UNSUPPORTED_MEDIA_TYPE = 415,
75
+ RANGE_NOT_SATISFIABLE = 416,
76
+ EXPECTATION_FAILED = 417,
77
+ IM_A_TEAPOT = 418,
78
+ MISDIRECTED_REQUEST = 421,
79
+ UNPROCESSABLE_ENTITY = 422,
80
+ LOCKED = 423,
81
+ FAILED_DEPENDENCY = 424,
82
+ UPGRADE_REQUIRED = 426,
83
+ PRECONDITION_REQUIRED = 428,
84
+ TOO_MANY_REQUESTS = 429,
85
+ REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
86
+ UNAVAILABLE_FOR_LEGAL_REASONS = 451,
87
+ INTERNAL_SERVER_ERROR = 500,
88
+ NOT_IMPLEMENTED = 501,
89
+ BAD_GATEWAY = 502,
90
+ SERVICE_UNAVAILABLE = 503,
91
+ GATEWAY_TIMEOUT = 504,
92
+ HTTP_VERSION_NOT_SUPPORTED = 505,
93
+ VARIANT_ALSO_NEGOTIATES = 506,
94
+ INSUFFICIENT_STORAGE = 507,
95
+ LOOP_DETECTED = 508,
96
+ NOT_EXTENDED = 510,
97
+ NETWORK_AUTHENTICATION_REQUIRED = 511
98
+ }
99
+ type HttpStatusCodeNameMapKey = (typeof HttpStatusCode)[keyof typeof HttpStatusCode];
100
+ declare const HttpStatusCodeNameMap: Record<HttpStatusCodeNameMapKey, string>;
101
+
102
+ type IHttpResponse<Header extends IHttpHeader = IHttpHeader, Body extends IHttpBody = IHttpBody> = {
103
+ statusCode: HttpStatusCode;
104
+ header?: Header;
105
+ body?: Body;
106
+ };
107
+ declare class HttpResponse<Header extends IHttpHeader = IHttpHeader, Body extends IHttpBody = IHttpBody> implements IHttpResponse<Header, Body> {
108
+ readonly statusCode: HttpStatusCode;
109
+ readonly header: Header;
110
+ readonly body: Body;
111
+ constructor(statusCode: HttpStatusCode, header: Header, body: Body);
112
+ }
113
+
114
+ type IHttpRequestDefinition<THeader extends HttpHeaderSchema | undefined = HttpHeaderSchema | undefined, TParam extends HttpParamSchema | undefined = HttpParamSchema | undefined, TQuery extends HttpQuerySchema | undefined = HttpQuerySchema | undefined, TBody extends HttpBodySchema | undefined = HttpBodySchema | undefined> = {
115
+ header?: THeader;
116
+ param?: TParam;
117
+ query?: TQuery;
118
+ body?: TBody;
119
+ };
120
+ declare class HttpRequestDefinition<THeader extends HttpHeaderSchema | undefined, TParam extends HttpParamSchema | undefined, TQuery extends HttpQuerySchema | undefined, TBody extends HttpBodySchema | undefined> implements IHttpRequestDefinition<THeader, TParam, TQuery, TBody> {
121
+ readonly header?: THeader;
122
+ readonly param?: TParam;
123
+ readonly query?: TQuery;
124
+ readonly body?: TBody;
125
+ constructor(definition: IHttpRequestDefinition<THeader, TParam, TQuery, TBody>);
126
+ }
127
+
128
+ type IHttpResponseDefinition<TName extends string = string, TStatusCode extends HttpStatusCode = HttpStatusCode, TDescription extends string = string, THeader extends HttpHeaderSchema | undefined = HttpHeaderSchema | undefined, TBody extends HttpBodySchema | undefined = HttpBodySchema | undefined> = {
129
+ name: TName;
130
+ statusCode: TStatusCode;
131
+ description: TDescription;
132
+ header?: THeader;
133
+ body?: TBody;
134
+ };
135
+ type IExtendHttpResponseDefinition<TName extends string, TStatusCode extends HttpStatusCode, TDescription extends string, THeader extends HttpHeaderSchema | undefined, TBody extends HttpBodySchema | undefined> = Partial<IHttpResponseDefinition<TName, TStatusCode, TDescription, THeader, TBody>> & Pick<IHttpResponseDefinition<TName, TStatusCode, TDescription, THeader, TBody>, "name">;
136
+ declare class HttpResponseDefinition<TName extends string, TStatusCode extends HttpStatusCode, TDescription extends string, THeader extends HttpHeaderSchema | undefined, TBody extends HttpBodySchema | undefined, TIsShared extends boolean> {
137
+ private definition;
138
+ name: TName;
139
+ statusCode: TStatusCode;
140
+ description: TDescription;
141
+ header?: THeader;
142
+ body?: TBody;
143
+ constructor(definition: IHttpResponseDefinition<TName, TStatusCode, TDescription, THeader, TBody>);
144
+ extend<EName extends string, EStatusCode extends HttpStatusCode = TStatusCode, EDescription extends string = TDescription, EHeader extends HttpHeaderSchema | undefined = THeader, EBody extends HttpBodySchema | undefined = TBody, EIsShared extends boolean = TIsShared>(definition: IExtendHttpResponseDefinition<EName, EStatusCode, EDescription, EHeader, EBody>): HttpResponseDefinition<EName, EStatusCode, EDescription, THeader extends undefined ? EHeader : EHeader extends undefined ? THeader : THeader & EHeader, TBody extends undefined ? EBody : EBody extends undefined ? TBody : TBody & EBody, EIsShared>;
145
+ }
146
+
147
+ /**
148
+ * Interface for HTTP operation definitions.
149
+ *
150
+ * Represents a complete HTTP API operation with:
151
+ * - Unique operation identifier
152
+ * - HTTP method and path
153
+ * - Request definition (headers, params, query, body)
154
+ * - Response definitions for different status codes
155
+ *
156
+ * @template TOperationId - The operation identifier literal type
157
+ * @template TPath - The URL path literal type
158
+ * @template TMethod - The HTTP method type
159
+ * @template TSummary - The operation summary literal type
160
+ * @template THeader - The header schema type
161
+ * @template TParam - The path parameter schema type
162
+ * @template TQuery - The query parameter schema type
163
+ * @template TBody - The request body schema type
164
+ * @template TRequest - The complete request definition type
165
+ * @template TResponses - The array of response definitions
166
+ */
167
+ type IHttpOperationDefinition<TOperationId extends string = string, TPath extends string = string, TMethod extends HttpMethod = HttpMethod, TSummary extends string = string, THeader extends HttpHeaderSchema | undefined = HttpHeaderSchema | undefined, TParam extends HttpParamSchema | undefined = HttpParamSchema | undefined, TQuery extends HttpQuerySchema | undefined = HttpQuerySchema | undefined, TBody extends HttpBodySchema | undefined = HttpBodySchema | undefined, TRequest extends IHttpRequestDefinition<THeader, TParam, TQuery, TBody> = IHttpRequestDefinition<THeader, TParam, TQuery, TBody>, TResponses extends IHttpResponseDefinition[] = IHttpResponseDefinition[]> = {
168
+ operationId: TOperationId;
169
+ path: TPath;
170
+ method: TMethod;
171
+ summary: TSummary;
172
+ request: TRequest;
173
+ responses: TResponses;
174
+ };
175
+ /**
176
+ * Concrete implementation of HTTP operation definition.
177
+ *
178
+ * This class provides a type-safe way to define HTTP API operations with:
179
+ * - Full TypeScript type inference for all components
180
+ * - Integration with Zod schemas for runtime validation
181
+ * - Support for multiple response definitions per operation
182
+ * - OpenAPI-compatible structure
183
+ *
184
+ * The extensive generic parameters enable complete type safety from
185
+ * definition through to runtime execution and code generation.
186
+ *
187
+ * @template TOperationId - The operation identifier literal type
188
+ * @template TPath - The URL path literal type
189
+ * @template TMethod - The HTTP method type
190
+ * @template TSummary - The operation summary literal type
191
+ * @template THeader - The header schema type
192
+ * @template TParam - The path parameter schema type
193
+ * @template TQuery - The query parameter schema type
194
+ * @template TBody - The request body schema type
195
+ * @template TRequest - The complete request definition type
196
+ * @template TResponses - The array of response definitions
197
+ */
198
+ declare class HttpOperationDefinition<TOperationId extends string, TPath extends string, TMethod extends HttpMethod, TSummary extends string, THeader extends HttpHeaderSchema | undefined, TParam extends HttpParamSchema | undefined, TQuery extends HttpQuerySchema | undefined, TBody extends HttpBodySchema | undefined, TRequest extends IHttpRequestDefinition<THeader, TParam, TQuery, TBody>, TResponses extends IHttpResponseDefinition[]> implements IHttpOperationDefinition<TOperationId, TPath, TMethod, TSummary, THeader, TParam, TQuery, TBody, TRequest, TResponses> {
199
+ readonly operationId: TOperationId;
200
+ readonly path: TPath;
201
+ readonly method: TMethod;
202
+ readonly summary: TSummary;
203
+ readonly request: TRequest;
204
+ readonly responses: TResponses;
205
+ constructor(definition: IHttpOperationDefinition<TOperationId, TPath, TMethod, TSummary, THeader, TParam, TQuery, TBody, TRequest, TResponses>);
206
+ }
207
+
208
+ /**
209
+ * Input configuration for RequestValidationError.
210
+ */
211
+ type RequestValidationErrorInput = {
212
+ /** Validation issues found in HTTP headers */
213
+ headerIssues?: $ZodIssue[];
214
+ /** Validation issues found in request body */
215
+ bodyIssues?: $ZodIssue[];
216
+ /** Validation issues found in query parameters */
217
+ queryIssues?: $ZodIssue[];
218
+ /** Validation issues found in path parameters */
219
+ pathParamIssues?: $ZodIssue[];
220
+ };
221
+ /**
222
+ * Error thrown when HTTP request validation fails.
223
+ *
224
+ * This error provides detailed information about validation failures across
225
+ * different parts of an HTTP request. Each category of issues is stored
226
+ * separately for precise error reporting and debugging.
227
+ *
228
+ * The error integrates with Zod's issue format, making it compatible with
229
+ * Zod schema validation while maintaining flexibility for custom validators.
230
+ */
231
+ declare class RequestValidationError extends Error {
232
+ readonly message: string;
233
+ /** Validation issues found in HTTP headers */
234
+ readonly headerIssues: $ZodIssue[];
235
+ /** Validation issues found in request body */
236
+ readonly bodyIssues: $ZodIssue[];
237
+ /** Validation issues found in query parameters */
238
+ readonly queryIssues: $ZodIssue[];
239
+ /** Validation issues found in path parameters */
240
+ readonly pathParamIssues: $ZodIssue[];
241
+ constructor(input?: RequestValidationErrorInput);
242
+ /**
243
+ * Adds header validation issues to the error.
244
+ * @param issues - Array of Zod validation issues
245
+ */
246
+ addHeaderIssues(issues: $ZodIssue[]): void;
247
+ /**
248
+ * Adds body validation issues to the error.
249
+ * @param issues - Array of Zod validation issues
250
+ */
251
+ addBodyIssues(issues: $ZodIssue[]): void;
252
+ /**
253
+ * Adds query parameter validation issues to the error.
254
+ * @param issues - Array of Zod validation issues
255
+ */
256
+ addQueryIssues(issues: $ZodIssue[]): void;
257
+ /**
258
+ * Adds path parameter validation issues to the error.
259
+ * @param issues - Array of Zod validation issues
260
+ */
261
+ addPathParamIssues(issues: $ZodIssue[]): void;
262
+ /**
263
+ * Checks if this error contains any validation issues.
264
+ * @returns true if any category has issues, false otherwise
265
+ */
266
+ hasIssues(): boolean;
267
+ }
268
+
269
+ type ValidationSuccessResult$1<T> = {
270
+ isValid: true;
271
+ data: T;
272
+ };
273
+ type ValidationFailureResult$1 = {
274
+ isValid: false;
275
+ error: RequestValidationError;
276
+ };
277
+ type SafeRequestValidationResult<T> = ValidationSuccessResult$1<T> | ValidationFailureResult$1;
278
+ /**
279
+ * Interface for HTTP request validators.
280
+ */
281
+ type IRequestValidator = {
282
+ /**
283
+ * Validates a request and returns a result object.
284
+ * Does not throw errors.
285
+ */
286
+ safeValidate(request: IHttpRequest): SafeRequestValidationResult<IHttpRequest>;
287
+ /**
288
+ * Validates a request and returns the validated request.
289
+ * @throws {RequestValidationError} If validation fails
290
+ */
291
+ validate(request: IHttpRequest): IHttpRequest;
292
+ };
293
+
294
+ type InvalidResponseIssue = {
295
+ readonly type: "INVALID_RESPONSE";
296
+ readonly responseName: string;
297
+ readonly headerIssues: $ZodIssue[];
298
+ readonly bodyIssues: $ZodIssue[];
299
+ };
300
+ type InvalidStatusCodeIssue = {
301
+ readonly type: "INVALID_STATUS_CODE";
302
+ readonly invalidStatusCode: HttpStatusCode;
303
+ readonly expectedStatusCodes: HttpStatusCode[];
304
+ };
305
+ type ValidationIssue = InvalidResponseIssue | InvalidStatusCodeIssue;
306
+ type ResponseValidationErrorInput = {
307
+ readonly issues?: ValidationIssue[];
308
+ };
309
+ declare class ResponseValidationError extends Error {
310
+ readonly statusCode: HttpStatusCode;
311
+ readonly message: string;
312
+ readonly issues: ValidationIssue[];
313
+ constructor(statusCode: HttpStatusCode, input?: ResponseValidationErrorInput);
314
+ addHeaderIssues(responseName: string, issues: $ZodIssue[]): void;
315
+ addBodyIssues(responseName: string, issues: $ZodIssue[]): void;
316
+ addResponseIssues(responseName: string, headerIssues?: $ZodIssue[], bodyIssues?: $ZodIssue[]): void;
317
+ addStatusCodeIssue(expectedStatusCodes: HttpStatusCode[]): void;
318
+ getResponseHeaderIssues(responseName: string): $ZodIssue[];
319
+ getResponseBodyIssues(responseName: string): $ZodIssue[];
320
+ hasResponseIssues(responseName?: string | undefined): boolean;
321
+ hasStatusCodeIssues(): boolean;
322
+ hasIssues(): boolean;
323
+ }
324
+
325
+ type ValidationSuccessResult<T> = {
326
+ readonly isValid: true;
327
+ readonly data: T;
328
+ };
329
+ type ValidationFailureResult = {
330
+ readonly isValid: false;
331
+ readonly error: ResponseValidationError;
332
+ };
333
+ type SafeResponseValidationResult<T> = ValidationSuccessResult<T> | ValidationFailureResult;
334
+ /**
335
+ * Interface for HTTP response validators.
336
+ */
337
+ type IResponseValidator = {
338
+ /**
339
+ * Validates a response and returns a result object.
340
+ * Does not throw errors.
341
+ */
342
+ safeValidate(response: IHttpResponse): SafeResponseValidationResult<IHttpResponse>;
343
+ /**
344
+ * Validates a response and returns the validated response.
345
+ * @throws {ResponseValidationError} If validation fails
346
+ */
347
+ validate(response: IHttpResponse): IHttpResponse;
348
+ };
349
+
350
+ declare class UnknownResponse<Header extends IHttpHeader = IHttpHeader, Body extends IHttpBody = unknown> extends HttpResponse<Header, Body> {
351
+ readonly validationError: ResponseValidationError;
352
+ constructor(statusCode: HttpStatusCode, header: Header, body: Body, validationError: ResponseValidationError);
353
+ }
354
+
355
+ export { type HttpBodySchema, type HttpHeaderSchema, HttpMethod, HttpOperationDefinition, type HttpParamSchema, type HttpQuerySchema, HttpRequestDefinition, HttpResponse, HttpResponseDefinition, HttpStatusCode, HttpStatusCodeNameMap, type IExtendHttpResponseDefinition, type IHttpBody, type IHttpHeader, type IHttpOperationDefinition, type IHttpParam, type IHttpQuery, type IHttpRequest, type IHttpRequestDefinition, type IHttpResponse, type IHttpResponseDefinition, type IRequestValidator, type IResponseValidator, type InvalidResponseIssue, type InvalidStatusCodeIssue, RequestValidationError, type RequestValidationErrorInput, ResponseValidationError, type ResponseValidationErrorInput, type SafeRequestValidationResult, type SafeResponseValidationResult, UnknownResponse, type ValidationIssue };
package/dist/index.d.ts CHANGED
@@ -352,5 +352,4 @@ declare class UnknownResponse<Header extends IHttpHeader = IHttpHeader, Body ext
352
352
  constructor(statusCode: HttpStatusCode, header: Header, body: Body, validationError: ResponseValidationError);
353
353
  }
354
354
 
355
- export { HttpMethod, HttpOperationDefinition, HttpRequestDefinition, HttpResponse, HttpResponseDefinition, HttpStatusCode, HttpStatusCodeNameMap, RequestValidationError, ResponseValidationError, UnknownResponse };
356
- export type { HttpBodySchema, HttpHeaderSchema, HttpParamSchema, HttpQuerySchema, IExtendHttpResponseDefinition, IHttpBody, IHttpHeader, IHttpOperationDefinition, IHttpParam, IHttpQuery, IHttpRequest, IHttpRequestDefinition, IHttpResponse, IHttpResponseDefinition, IRequestValidator, IResponseValidator, InvalidResponseIssue, InvalidStatusCodeIssue, RequestValidationErrorInput, ResponseValidationErrorInput, SafeRequestValidationResult, SafeResponseValidationResult, ValidationIssue };
355
+ export { type HttpBodySchema, type HttpHeaderSchema, HttpMethod, HttpOperationDefinition, type HttpParamSchema, type HttpQuerySchema, HttpRequestDefinition, HttpResponse, HttpResponseDefinition, HttpStatusCode, HttpStatusCodeNameMap, type IExtendHttpResponseDefinition, type IHttpBody, type IHttpHeader, type IHttpOperationDefinition, type IHttpParam, type IHttpQuery, type IHttpRequest, type IHttpRequestDefinition, type IHttpResponse, type IHttpResponseDefinition, type IRequestValidator, type IResponseValidator, type InvalidResponseIssue, type InvalidStatusCodeIssue, RequestValidationError, type RequestValidationErrorInput, ResponseValidationError, type ResponseValidationErrorInput, type SafeRequestValidationResult, type SafeResponseValidationResult, UnknownResponse, type ValidationIssue };
package/dist/index.js CHANGED
@@ -1,64 +1,63 @@
1
- import { z } from 'zod';
2
-
3
- var HttpStatusCode = /* @__PURE__ */ ((HttpStatusCode2) => {
4
- HttpStatusCode2[HttpStatusCode2["OK"] = 200] = "OK";
5
- HttpStatusCode2[HttpStatusCode2["CREATED"] = 201] = "CREATED";
6
- HttpStatusCode2[HttpStatusCode2["ACCEPTED"] = 202] = "ACCEPTED";
7
- HttpStatusCode2[HttpStatusCode2["NO_CONTENT"] = 204] = "NO_CONTENT";
8
- HttpStatusCode2[HttpStatusCode2["RESET_CONTENT"] = 205] = "RESET_CONTENT";
9
- HttpStatusCode2[HttpStatusCode2["PARTIAL_CONTENT"] = 206] = "PARTIAL_CONTENT";
10
- HttpStatusCode2[HttpStatusCode2["MULTI_STATUS"] = 207] = "MULTI_STATUS";
11
- HttpStatusCode2[HttpStatusCode2["ALREADY_REPORTED"] = 208] = "ALREADY_REPORTED";
12
- HttpStatusCode2[HttpStatusCode2["IM_USED"] = 226] = "IM_USED";
13
- HttpStatusCode2[HttpStatusCode2["MULTIPLE_CHOICES"] = 300] = "MULTIPLE_CHOICES";
14
- HttpStatusCode2[HttpStatusCode2["MOVED_PERMANENTLY"] = 301] = "MOVED_PERMANENTLY";
15
- HttpStatusCode2[HttpStatusCode2["FOUND"] = 302] = "FOUND";
16
- HttpStatusCode2[HttpStatusCode2["SEE_OTHER"] = 303] = "SEE_OTHER";
17
- HttpStatusCode2[HttpStatusCode2["NOT_MODIFIED"] = 304] = "NOT_MODIFIED";
18
- HttpStatusCode2[HttpStatusCode2["TEMPORARY_REDIRECT"] = 307] = "TEMPORARY_REDIRECT";
19
- HttpStatusCode2[HttpStatusCode2["PERMANENT_REDIRECT"] = 308] = "PERMANENT_REDIRECT";
20
- HttpStatusCode2[HttpStatusCode2["BAD_REQUEST"] = 400] = "BAD_REQUEST";
21
- HttpStatusCode2[HttpStatusCode2["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
22
- HttpStatusCode2[HttpStatusCode2["PAYMENT_REQUIRED"] = 402] = "PAYMENT_REQUIRED";
23
- HttpStatusCode2[HttpStatusCode2["FORBIDDEN"] = 403] = "FORBIDDEN";
24
- HttpStatusCode2[HttpStatusCode2["NOT_FOUND"] = 404] = "NOT_FOUND";
25
- HttpStatusCode2[HttpStatusCode2["METHOD_NOT_ALLOWED"] = 405] = "METHOD_NOT_ALLOWED";
26
- HttpStatusCode2[HttpStatusCode2["NOT_ACCEPTABLE"] = 406] = "NOT_ACCEPTABLE";
27
- HttpStatusCode2[HttpStatusCode2["PROXY_AUTHENTICATION_REQUIRED"] = 407] = "PROXY_AUTHENTICATION_REQUIRED";
28
- HttpStatusCode2[HttpStatusCode2["REQUEST_TIMEOUT"] = 408] = "REQUEST_TIMEOUT";
29
- HttpStatusCode2[HttpStatusCode2["CONFLICT"] = 409] = "CONFLICT";
30
- HttpStatusCode2[HttpStatusCode2["GONE"] = 410] = "GONE";
31
- HttpStatusCode2[HttpStatusCode2["LENGTH_REQUIRED"] = 411] = "LENGTH_REQUIRED";
32
- HttpStatusCode2[HttpStatusCode2["PRECONDITION_FAILED"] = 412] = "PRECONDITION_FAILED";
33
- HttpStatusCode2[HttpStatusCode2["PAYLOAD_TOO_LARGE"] = 413] = "PAYLOAD_TOO_LARGE";
34
- HttpStatusCode2[HttpStatusCode2["URI_TOO_LONG"] = 414] = "URI_TOO_LONG";
35
- HttpStatusCode2[HttpStatusCode2["UNSUPPORTED_MEDIA_TYPE"] = 415] = "UNSUPPORTED_MEDIA_TYPE";
36
- HttpStatusCode2[HttpStatusCode2["RANGE_NOT_SATISFIABLE"] = 416] = "RANGE_NOT_SATISFIABLE";
37
- HttpStatusCode2[HttpStatusCode2["EXPECTATION_FAILED"] = 417] = "EXPECTATION_FAILED";
38
- HttpStatusCode2[HttpStatusCode2["IM_A_TEAPOT"] = 418] = "IM_A_TEAPOT";
39
- HttpStatusCode2[HttpStatusCode2["MISDIRECTED_REQUEST"] = 421] = "MISDIRECTED_REQUEST";
40
- HttpStatusCode2[HttpStatusCode2["UNPROCESSABLE_ENTITY"] = 422] = "UNPROCESSABLE_ENTITY";
41
- HttpStatusCode2[HttpStatusCode2["LOCKED"] = 423] = "LOCKED";
42
- HttpStatusCode2[HttpStatusCode2["FAILED_DEPENDENCY"] = 424] = "FAILED_DEPENDENCY";
43
- HttpStatusCode2[HttpStatusCode2["UPGRADE_REQUIRED"] = 426] = "UPGRADE_REQUIRED";
44
- HttpStatusCode2[HttpStatusCode2["PRECONDITION_REQUIRED"] = 428] = "PRECONDITION_REQUIRED";
45
- HttpStatusCode2[HttpStatusCode2["TOO_MANY_REQUESTS"] = 429] = "TOO_MANY_REQUESTS";
46
- HttpStatusCode2[HttpStatusCode2["REQUEST_HEADER_FIELDS_TOO_LARGE"] = 431] = "REQUEST_HEADER_FIELDS_TOO_LARGE";
47
- HttpStatusCode2[HttpStatusCode2["UNAVAILABLE_FOR_LEGAL_REASONS"] = 451] = "UNAVAILABLE_FOR_LEGAL_REASONS";
48
- HttpStatusCode2[HttpStatusCode2["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
49
- HttpStatusCode2[HttpStatusCode2["NOT_IMPLEMENTED"] = 501] = "NOT_IMPLEMENTED";
50
- HttpStatusCode2[HttpStatusCode2["BAD_GATEWAY"] = 502] = "BAD_GATEWAY";
51
- HttpStatusCode2[HttpStatusCode2["SERVICE_UNAVAILABLE"] = 503] = "SERVICE_UNAVAILABLE";
52
- HttpStatusCode2[HttpStatusCode2["GATEWAY_TIMEOUT"] = 504] = "GATEWAY_TIMEOUT";
53
- HttpStatusCode2[HttpStatusCode2["HTTP_VERSION_NOT_SUPPORTED"] = 505] = "HTTP_VERSION_NOT_SUPPORTED";
54
- HttpStatusCode2[HttpStatusCode2["VARIANT_ALSO_NEGOTIATES"] = 506] = "VARIANT_ALSO_NEGOTIATES";
55
- HttpStatusCode2[HttpStatusCode2["INSUFFICIENT_STORAGE"] = 507] = "INSUFFICIENT_STORAGE";
56
- HttpStatusCode2[HttpStatusCode2["LOOP_DETECTED"] = 508] = "LOOP_DETECTED";
57
- HttpStatusCode2[HttpStatusCode2["NOT_EXTENDED"] = 510] = "NOT_EXTENDED";
58
- HttpStatusCode2[HttpStatusCode2["NETWORK_AUTHENTICATION_REQUIRED"] = 511] = "NETWORK_AUTHENTICATION_REQUIRED";
59
- return HttpStatusCode2;
1
+ // src/HttpStatusCode.ts
2
+ var HttpStatusCode = /* @__PURE__ */ ((HttpStatusCode3) => {
3
+ HttpStatusCode3[HttpStatusCode3["OK"] = 200] = "OK";
4
+ HttpStatusCode3[HttpStatusCode3["CREATED"] = 201] = "CREATED";
5
+ HttpStatusCode3[HttpStatusCode3["ACCEPTED"] = 202] = "ACCEPTED";
6
+ HttpStatusCode3[HttpStatusCode3["NO_CONTENT"] = 204] = "NO_CONTENT";
7
+ HttpStatusCode3[HttpStatusCode3["RESET_CONTENT"] = 205] = "RESET_CONTENT";
8
+ HttpStatusCode3[HttpStatusCode3["PARTIAL_CONTENT"] = 206] = "PARTIAL_CONTENT";
9
+ HttpStatusCode3[HttpStatusCode3["MULTI_STATUS"] = 207] = "MULTI_STATUS";
10
+ HttpStatusCode3[HttpStatusCode3["ALREADY_REPORTED"] = 208] = "ALREADY_REPORTED";
11
+ HttpStatusCode3[HttpStatusCode3["IM_USED"] = 226] = "IM_USED";
12
+ HttpStatusCode3[HttpStatusCode3["MULTIPLE_CHOICES"] = 300] = "MULTIPLE_CHOICES";
13
+ HttpStatusCode3[HttpStatusCode3["MOVED_PERMANENTLY"] = 301] = "MOVED_PERMANENTLY";
14
+ HttpStatusCode3[HttpStatusCode3["FOUND"] = 302] = "FOUND";
15
+ HttpStatusCode3[HttpStatusCode3["SEE_OTHER"] = 303] = "SEE_OTHER";
16
+ HttpStatusCode3[HttpStatusCode3["NOT_MODIFIED"] = 304] = "NOT_MODIFIED";
17
+ HttpStatusCode3[HttpStatusCode3["TEMPORARY_REDIRECT"] = 307] = "TEMPORARY_REDIRECT";
18
+ HttpStatusCode3[HttpStatusCode3["PERMANENT_REDIRECT"] = 308] = "PERMANENT_REDIRECT";
19
+ HttpStatusCode3[HttpStatusCode3["BAD_REQUEST"] = 400] = "BAD_REQUEST";
20
+ HttpStatusCode3[HttpStatusCode3["UNAUTHORIZED"] = 401] = "UNAUTHORIZED";
21
+ HttpStatusCode3[HttpStatusCode3["PAYMENT_REQUIRED"] = 402] = "PAYMENT_REQUIRED";
22
+ HttpStatusCode3[HttpStatusCode3["FORBIDDEN"] = 403] = "FORBIDDEN";
23
+ HttpStatusCode3[HttpStatusCode3["NOT_FOUND"] = 404] = "NOT_FOUND";
24
+ HttpStatusCode3[HttpStatusCode3["METHOD_NOT_ALLOWED"] = 405] = "METHOD_NOT_ALLOWED";
25
+ HttpStatusCode3[HttpStatusCode3["NOT_ACCEPTABLE"] = 406] = "NOT_ACCEPTABLE";
26
+ HttpStatusCode3[HttpStatusCode3["PROXY_AUTHENTICATION_REQUIRED"] = 407] = "PROXY_AUTHENTICATION_REQUIRED";
27
+ HttpStatusCode3[HttpStatusCode3["REQUEST_TIMEOUT"] = 408] = "REQUEST_TIMEOUT";
28
+ HttpStatusCode3[HttpStatusCode3["CONFLICT"] = 409] = "CONFLICT";
29
+ HttpStatusCode3[HttpStatusCode3["GONE"] = 410] = "GONE";
30
+ HttpStatusCode3[HttpStatusCode3["LENGTH_REQUIRED"] = 411] = "LENGTH_REQUIRED";
31
+ HttpStatusCode3[HttpStatusCode3["PRECONDITION_FAILED"] = 412] = "PRECONDITION_FAILED";
32
+ HttpStatusCode3[HttpStatusCode3["PAYLOAD_TOO_LARGE"] = 413] = "PAYLOAD_TOO_LARGE";
33
+ HttpStatusCode3[HttpStatusCode3["URI_TOO_LONG"] = 414] = "URI_TOO_LONG";
34
+ HttpStatusCode3[HttpStatusCode3["UNSUPPORTED_MEDIA_TYPE"] = 415] = "UNSUPPORTED_MEDIA_TYPE";
35
+ HttpStatusCode3[HttpStatusCode3["RANGE_NOT_SATISFIABLE"] = 416] = "RANGE_NOT_SATISFIABLE";
36
+ HttpStatusCode3[HttpStatusCode3["EXPECTATION_FAILED"] = 417] = "EXPECTATION_FAILED";
37
+ HttpStatusCode3[HttpStatusCode3["IM_A_TEAPOT"] = 418] = "IM_A_TEAPOT";
38
+ HttpStatusCode3[HttpStatusCode3["MISDIRECTED_REQUEST"] = 421] = "MISDIRECTED_REQUEST";
39
+ HttpStatusCode3[HttpStatusCode3["UNPROCESSABLE_ENTITY"] = 422] = "UNPROCESSABLE_ENTITY";
40
+ HttpStatusCode3[HttpStatusCode3["LOCKED"] = 423] = "LOCKED";
41
+ HttpStatusCode3[HttpStatusCode3["FAILED_DEPENDENCY"] = 424] = "FAILED_DEPENDENCY";
42
+ HttpStatusCode3[HttpStatusCode3["UPGRADE_REQUIRED"] = 426] = "UPGRADE_REQUIRED";
43
+ HttpStatusCode3[HttpStatusCode3["PRECONDITION_REQUIRED"] = 428] = "PRECONDITION_REQUIRED";
44
+ HttpStatusCode3[HttpStatusCode3["TOO_MANY_REQUESTS"] = 429] = "TOO_MANY_REQUESTS";
45
+ HttpStatusCode3[HttpStatusCode3["REQUEST_HEADER_FIELDS_TOO_LARGE"] = 431] = "REQUEST_HEADER_FIELDS_TOO_LARGE";
46
+ HttpStatusCode3[HttpStatusCode3["UNAVAILABLE_FOR_LEGAL_REASONS"] = 451] = "UNAVAILABLE_FOR_LEGAL_REASONS";
47
+ HttpStatusCode3[HttpStatusCode3["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
48
+ HttpStatusCode3[HttpStatusCode3["NOT_IMPLEMENTED"] = 501] = "NOT_IMPLEMENTED";
49
+ HttpStatusCode3[HttpStatusCode3["BAD_GATEWAY"] = 502] = "BAD_GATEWAY";
50
+ HttpStatusCode3[HttpStatusCode3["SERVICE_UNAVAILABLE"] = 503] = "SERVICE_UNAVAILABLE";
51
+ HttpStatusCode3[HttpStatusCode3["GATEWAY_TIMEOUT"] = 504] = "GATEWAY_TIMEOUT";
52
+ HttpStatusCode3[HttpStatusCode3["HTTP_VERSION_NOT_SUPPORTED"] = 505] = "HTTP_VERSION_NOT_SUPPORTED";
53
+ HttpStatusCode3[HttpStatusCode3["VARIANT_ALSO_NEGOTIATES"] = 506] = "VARIANT_ALSO_NEGOTIATES";
54
+ HttpStatusCode3[HttpStatusCode3["INSUFFICIENT_STORAGE"] = 507] = "INSUFFICIENT_STORAGE";
55
+ HttpStatusCode3[HttpStatusCode3["LOOP_DETECTED"] = 508] = "LOOP_DETECTED";
56
+ HttpStatusCode3[HttpStatusCode3["NOT_EXTENDED"] = 510] = "NOT_EXTENDED";
57
+ HttpStatusCode3[HttpStatusCode3["NETWORK_AUTHENTICATION_REQUIRED"] = 511] = "NETWORK_AUTHENTICATION_REQUIRED";
58
+ return HttpStatusCode3;
60
59
  })(HttpStatusCode || {});
61
- const HttpStatusCodeNameMap = {
60
+ var HttpStatusCodeNameMap = {
62
61
  [200 /* OK */]: "Ok",
63
62
  [201 /* CREATED */]: "Created",
64
63
  [202 /* ACCEPTED */]: "Accepted",
@@ -116,26 +115,29 @@ const HttpStatusCodeNameMap = {
116
115
  [511 /* NETWORK_AUTHENTICATION_REQUIRED */]: "NetworkAuthenticationRequired"
117
116
  };
118
117
 
119
- class HttpResponse {
118
+ // src/HttpResponse.ts
119
+ var HttpResponse = class {
120
120
  constructor(statusCode, header, body) {
121
121
  this.statusCode = statusCode;
122
122
  this.header = header;
123
123
  this.body = body;
124
124
  }
125
- }
125
+ };
126
126
 
127
- var HttpMethod = /* @__PURE__ */ ((HttpMethod2) => {
128
- HttpMethod2["GET"] = "GET";
129
- HttpMethod2["POST"] = "POST";
130
- HttpMethod2["PUT"] = "PUT";
131
- HttpMethod2["DELETE"] = "DELETE";
132
- HttpMethod2["PATCH"] = "PATCH";
133
- HttpMethod2["OPTIONS"] = "OPTIONS";
134
- HttpMethod2["HEAD"] = "HEAD";
135
- return HttpMethod2;
127
+ // src/HttpMethod.ts
128
+ var HttpMethod = /* @__PURE__ */ ((HttpMethod3) => {
129
+ HttpMethod3["GET"] = "GET";
130
+ HttpMethod3["POST"] = "POST";
131
+ HttpMethod3["PUT"] = "PUT";
132
+ HttpMethod3["DELETE"] = "DELETE";
133
+ HttpMethod3["PATCH"] = "PATCH";
134
+ HttpMethod3["OPTIONS"] = "OPTIONS";
135
+ HttpMethod3["HEAD"] = "HEAD";
136
+ return HttpMethod3;
136
137
  })(HttpMethod || {});
137
138
 
138
- class HttpOperationDefinition {
139
+ // src/HttpOperationDefinition.ts
140
+ var HttpOperationDefinition = class {
139
141
  operationId;
140
142
  path;
141
143
  method;
@@ -150,9 +152,10 @@ class HttpOperationDefinition {
150
152
  this.request = definition.request;
151
153
  this.responses = definition.responses;
152
154
  }
153
- }
155
+ };
154
156
 
155
- class HttpRequestDefinition {
157
+ // src/HttpRequestDefinition.ts
158
+ var HttpRequestDefinition = class {
156
159
  header;
157
160
  param;
158
161
  query;
@@ -163,9 +166,11 @@ class HttpRequestDefinition {
163
166
  this.query = definition.query;
164
167
  this.body = definition.body;
165
168
  }
166
- }
169
+ };
167
170
 
168
- class HttpResponseDefinition {
171
+ // src/HttpResponseDefinition.ts
172
+ import { z } from "zod";
173
+ var HttpResponseDefinition = class _HttpResponseDefinition {
169
174
  constructor(definition) {
170
175
  this.definition = definition;
171
176
  this.name = definition.name;
@@ -218,11 +223,12 @@ class HttpResponseDefinition {
218
223
  header: mergedHeader,
219
224
  body: mergedBody
220
225
  };
221
- return new HttpResponseDefinition(baseDefinition);
226
+ return new _HttpResponseDefinition(baseDefinition);
222
227
  }
223
- }
228
+ };
224
229
 
225
- class RequestValidationError extends Error {
230
+ // src/RequestValidationError.ts
231
+ var RequestValidationError = class extends Error {
226
232
  message;
227
233
  /** Validation issues found in HTTP headers */
228
234
  headerIssues = [];
@@ -284,9 +290,10 @@ class RequestValidationError extends Error {
284
290
  hasIssues() {
285
291
  return this.headerIssues.length > 0 || this.bodyIssues.length > 0 || this.queryIssues.length > 0 || this.pathParamIssues.length > 0;
286
292
  }
287
- }
293
+ };
288
294
 
289
- class ResponseValidationError extends Error {
295
+ // src/ResponseValidationError.ts
296
+ var ResponseValidationError = class extends Error {
290
297
  constructor(statusCode, input) {
291
298
  const message = `Response validation failed for status code '${statusCode}'`;
292
299
  super(message);
@@ -365,13 +372,24 @@ class ResponseValidationError extends Error {
365
372
  hasIssues() {
366
373
  return this.issues.length > 0;
367
374
  }
368
- }
375
+ };
369
376
 
370
- class UnknownResponse extends HttpResponse {
377
+ // src/UnknownResponse.ts
378
+ var UnknownResponse = class extends HttpResponse {
371
379
  constructor(statusCode, header, body, validationError) {
372
380
  super(statusCode, header, body);
373
381
  this.validationError = validationError;
374
382
  }
375
- }
376
-
377
- export { HttpMethod, HttpOperationDefinition, HttpRequestDefinition, HttpResponse, HttpResponseDefinition, HttpStatusCode, HttpStatusCodeNameMap, RequestValidationError, ResponseValidationError, UnknownResponse };
383
+ };
384
+ export {
385
+ HttpMethod,
386
+ HttpOperationDefinition,
387
+ HttpRequestDefinition,
388
+ HttpResponse,
389
+ HttpResponseDefinition,
390
+ HttpStatusCode,
391
+ HttpStatusCodeNameMap,
392
+ RequestValidationError,
393
+ ResponseValidationError,
394
+ UnknownResponse
395
+ };
package/package.json CHANGED
@@ -1,14 +1,21 @@
1
1
  {
2
2
  "name": "@rexeus/typeweaver-core",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Runtime utilities and shared types to drive type-safe API definitions. Powered by Typeweaver 🧵✨",
5
5
  "type": "module",
6
- "main": "dist/index.js",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.js",
7
8
  "types": "dist/index.d.ts",
8
9
  "exports": {
9
10
  ".": {
10
- "import": "./dist/index.js",
11
- "types": "./dist/index.d.ts"
11
+ "import": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "require": {
16
+ "types": "./dist/index.d.cts",
17
+ "default": "./dist/index.cjs"
18
+ }
12
19
  }
13
20
  },
14
21
  "files": [
@@ -39,15 +46,15 @@
39
46
  },
40
47
  "homepage": "https://github.com/rexeus/typeweaver#readme",
41
48
  "peerDependencies": {
42
- "zod": "^4.1.11"
49
+ "zod": "^4.3.5"
43
50
  },
44
51
  "devDependencies": {
45
- "zod": "^4.1.11"
52
+ "zod": "^4.3.5"
46
53
  },
47
54
  "scripts": {
48
55
  "typecheck": "tsc --noEmit",
49
56
  "format": "prettier --write .",
50
- "build": "pkgroll --clean-dist && cp ../../LICENSE ../../NOTICE ./dist/",
57
+ "build": "tsup && cp ../../LICENSE ../../NOTICE ./dist/",
51
58
  "preversion": "npm run build"
52
59
  }
53
60
  }