@morojs/moro 1.0.0 → 1.0.2

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.
Files changed (284) hide show
  1. package/README.md +1 -1
  2. package/dist/core/config/index.d.ts +5 -5
  3. package/dist/core/config/index.js +1 -1
  4. package/dist/core/config/index.js.map +1 -1
  5. package/dist/core/config/loader.d.ts +1 -1
  6. package/dist/core/config/loader.js +58 -82
  7. package/dist/core/config/loader.js.map +1 -1
  8. package/dist/core/config/schema.d.ts +1 -1
  9. package/dist/core/config/schema.js +52 -111
  10. package/dist/core/config/schema.js.map +1 -1
  11. package/dist/core/config/utils.d.ts +2 -2
  12. package/dist/core/config/utils.js +18 -18
  13. package/dist/core/config/utils.js.map +1 -1
  14. package/dist/core/database/adapters/drizzle.d.ts +1 -1
  15. package/dist/core/database/adapters/drizzle.js +39 -55
  16. package/dist/core/database/adapters/drizzle.js.map +1 -1
  17. package/dist/core/database/adapters/index.d.ts +7 -7
  18. package/dist/core/database/adapters/index.js +11 -11
  19. package/dist/core/database/adapters/index.js.map +1 -1
  20. package/dist/core/database/adapters/mongodb.d.ts +1 -1
  21. package/dist/core/database/adapters/mongodb.js +19 -23
  22. package/dist/core/database/adapters/mongodb.js.map +1 -1
  23. package/dist/core/database/adapters/mysql.d.ts +1 -1
  24. package/dist/core/database/adapters/mysql.js +31 -27
  25. package/dist/core/database/adapters/mysql.js.map +1 -1
  26. package/dist/core/database/adapters/postgresql.d.ts +1 -1
  27. package/dist/core/database/adapters/postgresql.js +27 -35
  28. package/dist/core/database/adapters/postgresql.js.map +1 -1
  29. package/dist/core/database/adapters/redis.d.ts +1 -1
  30. package/dist/core/database/adapters/redis.js +24 -24
  31. package/dist/core/database/adapters/redis.js.map +1 -1
  32. package/dist/core/database/adapters/sqlite.d.ts +1 -1
  33. package/dist/core/database/adapters/sqlite.js +36 -36
  34. package/dist/core/database/adapters/sqlite.js.map +1 -1
  35. package/dist/core/database/index.d.ts +2 -2
  36. package/dist/core/docs/index.d.ts +7 -7
  37. package/dist/core/docs/index.js +13 -15
  38. package/dist/core/docs/index.js.map +1 -1
  39. package/dist/core/docs/openapi-generator.d.ts +5 -5
  40. package/dist/core/docs/openapi-generator.js +93 -94
  41. package/dist/core/docs/openapi-generator.js.map +1 -1
  42. package/dist/core/docs/simple-docs.d.ts +1 -1
  43. package/dist/core/docs/simple-docs.js +25 -28
  44. package/dist/core/docs/simple-docs.js.map +1 -1
  45. package/dist/core/docs/swagger-ui.d.ts +2 -2
  46. package/dist/core/docs/swagger-ui.js +46 -51
  47. package/dist/core/docs/swagger-ui.js.map +1 -1
  48. package/dist/core/docs/zod-to-openapi.d.ts +1 -1
  49. package/dist/core/docs/zod-to-openapi.js +115 -125
  50. package/dist/core/docs/zod-to-openapi.js.map +1 -1
  51. package/dist/core/events/event-bus.d.ts +1 -1
  52. package/dist/core/events/event-bus.js +15 -21
  53. package/dist/core/events/event-bus.js.map +1 -1
  54. package/dist/core/events/index.d.ts +2 -2
  55. package/dist/core/framework.d.ts +5 -5
  56. package/dist/core/framework.js +55 -60
  57. package/dist/core/framework.js.map +1 -1
  58. package/dist/core/http/http-server.d.ts +2 -2
  59. package/dist/core/http/http-server.js +228 -261
  60. package/dist/core/http/http-server.js.map +1 -1
  61. package/dist/core/http/index.d.ts +3 -3
  62. package/dist/core/http/router.d.ts +1 -1
  63. package/dist/core/http/router.js +15 -17
  64. package/dist/core/http/router.js.map +1 -1
  65. package/dist/core/logger/filters.d.ts +1 -1
  66. package/dist/core/logger/filters.js +16 -16
  67. package/dist/core/logger/filters.js.map +1 -1
  68. package/dist/core/logger/index.d.ts +3 -3
  69. package/dist/core/logger/logger.d.ts +1 -1
  70. package/dist/core/logger/logger.js +48 -59
  71. package/dist/core/logger/logger.js.map +1 -1
  72. package/dist/core/logger/outputs.d.ts +4 -4
  73. package/dist/core/logger/outputs.js +16 -20
  74. package/dist/core/logger/outputs.js.map +1 -1
  75. package/dist/core/middleware/built-in/adapters/cache/file.d.ts +1 -1
  76. package/dist/core/middleware/built-in/adapters/cache/file.js +19 -19
  77. package/dist/core/middleware/built-in/adapters/cache/file.js.map +1 -1
  78. package/dist/core/middleware/built-in/adapters/cache/index.d.ts +4 -4
  79. package/dist/core/middleware/built-in/adapters/cache/index.js +3 -3
  80. package/dist/core/middleware/built-in/adapters/cache/index.js.map +1 -1
  81. package/dist/core/middleware/built-in/adapters/cache/memory.d.ts +1 -1
  82. package/dist/core/middleware/built-in/adapters/cache/memory.js +5 -5
  83. package/dist/core/middleware/built-in/adapters/cache/memory.js.map +1 -1
  84. package/dist/core/middleware/built-in/adapters/cache/redis.d.ts +1 -1
  85. package/dist/core/middleware/built-in/adapters/cache/redis.js +18 -18
  86. package/dist/core/middleware/built-in/adapters/cache/redis.js.map +1 -1
  87. package/dist/core/middleware/built-in/adapters/cdn/azure.d.ts +1 -1
  88. package/dist/core/middleware/built-in/adapters/cdn/azure.js +8 -8
  89. package/dist/core/middleware/built-in/adapters/cdn/azure.js.map +1 -1
  90. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.d.ts +1 -1
  91. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js +14 -14
  92. package/dist/core/middleware/built-in/adapters/cdn/cloudflare.js.map +1 -1
  93. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.d.ts +1 -1
  94. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js +13 -15
  95. package/dist/core/middleware/built-in/adapters/cdn/cloudfront.js.map +1 -1
  96. package/dist/core/middleware/built-in/adapters/cdn/index.d.ts +4 -4
  97. package/dist/core/middleware/built-in/adapters/cdn/index.js +3 -3
  98. package/dist/core/middleware/built-in/adapters/index.d.ts +4 -4
  99. package/dist/core/middleware/built-in/auth.d.ts +1 -1
  100. package/dist/core/middleware/built-in/auth.js +14 -14
  101. package/dist/core/middleware/built-in/cache.d.ts +2 -2
  102. package/dist/core/middleware/built-in/cache.js +43 -45
  103. package/dist/core/middleware/built-in/cache.js.map +1 -1
  104. package/dist/core/middleware/built-in/cdn.d.ts +2 -2
  105. package/dist/core/middleware/built-in/cdn.js +27 -29
  106. package/dist/core/middleware/built-in/cdn.js.map +1 -1
  107. package/dist/core/middleware/built-in/cookie.d.ts +2 -2
  108. package/dist/core/middleware/built-in/cookie.js +17 -17
  109. package/dist/core/middleware/built-in/cookie.js.map +1 -1
  110. package/dist/core/middleware/built-in/cors.d.ts +1 -1
  111. package/dist/core/middleware/built-in/cors.js +13 -13
  112. package/dist/core/middleware/built-in/csp.d.ts +1 -1
  113. package/dist/core/middleware/built-in/csp.js +22 -25
  114. package/dist/core/middleware/built-in/csp.js.map +1 -1
  115. package/dist/core/middleware/built-in/csrf.d.ts +1 -1
  116. package/dist/core/middleware/built-in/csrf.js +21 -24
  117. package/dist/core/middleware/built-in/csrf.js.map +1 -1
  118. package/dist/core/middleware/built-in/error-tracker.js +2 -2
  119. package/dist/core/middleware/built-in/index.d.ts +14 -14
  120. package/dist/core/middleware/built-in/performance-monitor.js +2 -2
  121. package/dist/core/middleware/built-in/rate-limit.d.ts +1 -1
  122. package/dist/core/middleware/built-in/rate-limit.js +12 -12
  123. package/dist/core/middleware/built-in/request-logger.js.map +1 -1
  124. package/dist/core/middleware/built-in/session.d.ts +5 -5
  125. package/dist/core/middleware/built-in/session.js +35 -38
  126. package/dist/core/middleware/built-in/session.js.map +1 -1
  127. package/dist/core/middleware/built-in/sse.d.ts +1 -1
  128. package/dist/core/middleware/built-in/sse.js +20 -22
  129. package/dist/core/middleware/built-in/sse.js.map +1 -1
  130. package/dist/core/middleware/built-in/validation.d.ts +1 -1
  131. package/dist/core/middleware/built-in/validation.js +13 -13
  132. package/dist/core/middleware/index.d.ts +5 -5
  133. package/dist/core/middleware/index.js +16 -16
  134. package/dist/core/middleware/index.js.map +1 -1
  135. package/dist/core/modules/auto-discovery.d.ts +2 -2
  136. package/dist/core/modules/auto-discovery.js +12 -13
  137. package/dist/core/modules/auto-discovery.js.map +1 -1
  138. package/dist/core/modules/index.d.ts +2 -2
  139. package/dist/core/modules/index.js.map +1 -1
  140. package/dist/core/modules/modules.d.ts +3 -3
  141. package/dist/core/modules/modules.js +3 -6
  142. package/dist/core/modules/modules.js.map +1 -1
  143. package/dist/core/networking/index.d.ts +2 -2
  144. package/dist/core/networking/index.js.map +1 -1
  145. package/dist/core/networking/service-discovery.d.ts +2 -2
  146. package/dist/core/networking/service-discovery.js +27 -27
  147. package/dist/core/networking/service-discovery.js.map +1 -1
  148. package/dist/core/networking/websocket-manager.d.ts +3 -3
  149. package/dist/core/networking/websocket-manager.js +15 -16
  150. package/dist/core/networking/websocket-manager.js.map +1 -1
  151. package/dist/core/routing/app-integration.d.ts +2 -2
  152. package/dist/core/routing/app-integration.js +13 -13
  153. package/dist/core/routing/app-integration.js.map +1 -1
  154. package/dist/core/routing/index.d.ts +3 -3
  155. package/dist/core/routing/index.js +43 -52
  156. package/dist/core/routing/index.js.map +1 -1
  157. package/dist/core/runtime/aws-lambda-adapter.d.ts +3 -3
  158. package/dist/core/runtime/aws-lambda-adapter.js +14 -16
  159. package/dist/core/runtime/aws-lambda-adapter.js.map +1 -1
  160. package/dist/core/runtime/base-adapter.d.ts +2 -2
  161. package/dist/core/runtime/base-adapter.js +11 -12
  162. package/dist/core/runtime/base-adapter.js.map +1 -1
  163. package/dist/core/runtime/cloudflare-workers-adapter.d.ts +3 -3
  164. package/dist/core/runtime/cloudflare-workers-adapter.js +20 -21
  165. package/dist/core/runtime/cloudflare-workers-adapter.js.map +1 -1
  166. package/dist/core/runtime/index.d.ts +9 -9
  167. package/dist/core/runtime/index.js +4 -4
  168. package/dist/core/runtime/index.js.map +1 -1
  169. package/dist/core/runtime/node-adapter.d.ts +5 -5
  170. package/dist/core/runtime/node-adapter.js +35 -35
  171. package/dist/core/runtime/node-adapter.js.map +1 -1
  172. package/dist/core/runtime/vercel-edge-adapter.d.ts +3 -3
  173. package/dist/core/runtime/vercel-edge-adapter.js +12 -15
  174. package/dist/core/runtime/vercel-edge-adapter.js.map +1 -1
  175. package/dist/core/utilities/circuit-breaker.js +6 -6
  176. package/dist/core/utilities/container.d.ts +1 -1
  177. package/dist/core/utilities/container.js +17 -22
  178. package/dist/core/utilities/container.js.map +1 -1
  179. package/dist/core/utilities/hooks.d.ts +3 -3
  180. package/dist/core/utilities/hooks.js +11 -11
  181. package/dist/core/utilities/hooks.js.map +1 -1
  182. package/dist/core/utilities/index.d.ts +4 -4
  183. package/dist/core/validation/index.d.ts +3 -3
  184. package/dist/core/validation/index.js +15 -15
  185. package/dist/core/validation/index.js.map +1 -1
  186. package/dist/index.d.ts +41 -30
  187. package/dist/index.js +50 -1
  188. package/dist/index.js.map +1 -1
  189. package/dist/moro.d.ts +14 -14
  190. package/dist/moro.js +79 -88
  191. package/dist/moro.js.map +1 -1
  192. package/dist/types/cache.d.ts +1 -1
  193. package/dist/types/core.d.ts +2 -2
  194. package/dist/types/events.d.ts +19 -19
  195. package/dist/types/hooks.d.ts +1 -1
  196. package/dist/types/http.d.ts +2 -2
  197. package/dist/types/logger.d.ts +3 -3
  198. package/dist/types/module.d.ts +2 -2
  199. package/dist/types/runtime.d.ts +2 -2
  200. package/dist/types/session.d.ts +4 -4
  201. package/package.json +183 -165
  202. package/src/core/config/index.ts +7 -9
  203. package/src/core/config/loader.ts +86 -158
  204. package/src/core/config/schema.ts +59 -122
  205. package/src/core/config/utils.ts +27 -45
  206. package/src/core/database/adapters/drizzle.ts +53 -75
  207. package/src/core/database/adapters/index.ts +26 -29
  208. package/src/core/database/adapters/mongodb.ts +31 -54
  209. package/src/core/database/adapters/mysql.ts +40 -50
  210. package/src/core/database/adapters/postgresql.ts +32 -42
  211. package/src/core/database/adapters/redis.ts +31 -36
  212. package/src/core/database/adapters/sqlite.ts +43 -51
  213. package/src/core/database/index.ts +2 -2
  214. package/src/core/docs/index.ts +25 -39
  215. package/src/core/docs/openapi-generator.ts +104 -117
  216. package/src/core/docs/simple-docs.ts +29 -39
  217. package/src/core/docs/swagger-ui.ts +57 -76
  218. package/src/core/docs/zod-to-openapi.ts +121 -153
  219. package/src/core/events/event-bus.ts +22 -45
  220. package/src/core/events/index.ts +2 -2
  221. package/src/core/framework.ts +119 -197
  222. package/src/core/http/http-server.ts +260 -360
  223. package/src/core/http/index.ts +3 -8
  224. package/src/core/http/router.ts +19 -31
  225. package/src/core/logger/filters.ts +19 -22
  226. package/src/core/logger/index.ts +3 -3
  227. package/src/core/logger/logger.ts +59 -100
  228. package/src/core/logger/outputs.ts +23 -27
  229. package/src/core/middleware/built-in/adapters/cache/file.ts +21 -23
  230. package/src/core/middleware/built-in/adapters/cache/index.ts +11 -14
  231. package/src/core/middleware/built-in/adapters/cache/memory.ts +7 -7
  232. package/src/core/middleware/built-in/adapters/cache/redis.ts +21 -24
  233. package/src/core/middleware/built-in/adapters/cdn/azure.ts +10 -18
  234. package/src/core/middleware/built-in/adapters/cdn/cloudflare.ts +19 -36
  235. package/src/core/middleware/built-in/adapters/cdn/cloudfront.ts +17 -26
  236. package/src/core/middleware/built-in/adapters/cdn/index.ts +10 -10
  237. package/src/core/middleware/built-in/adapters/index.ts +4 -4
  238. package/src/core/middleware/built-in/auth.ts +16 -16
  239. package/src/core/middleware/built-in/cache.ts +50 -67
  240. package/src/core/middleware/built-in/cdn.ts +34 -61
  241. package/src/core/middleware/built-in/cookie.ts +23 -28
  242. package/src/core/middleware/built-in/cors.ts +17 -17
  243. package/src/core/middleware/built-in/csp.ts +25 -31
  244. package/src/core/middleware/built-in/csrf.ts +24 -29
  245. package/src/core/middleware/built-in/error-tracker.ts +3 -3
  246. package/src/core/middleware/built-in/index.ts +28 -28
  247. package/src/core/middleware/built-in/performance-monitor.ts +4 -4
  248. package/src/core/middleware/built-in/rate-limit.ts +15 -15
  249. package/src/core/middleware/built-in/request-logger.ts +1 -3
  250. package/src/core/middleware/built-in/session.ts +47 -70
  251. package/src/core/middleware/built-in/sse.ts +23 -28
  252. package/src/core/middleware/built-in/validation.ts +15 -15
  253. package/src/core/middleware/index.ts +26 -37
  254. package/src/core/modules/auto-discovery.ts +21 -31
  255. package/src/core/modules/index.ts +2 -5
  256. package/src/core/modules/modules.ts +11 -20
  257. package/src/core/networking/index.ts +2 -6
  258. package/src/core/networking/service-discovery.ts +41 -61
  259. package/src/core/networking/websocket-manager.ts +27 -36
  260. package/src/core/routing/app-integration.ts +19 -32
  261. package/src/core/routing/index.ts +57 -88
  262. package/src/core/runtime/aws-lambda-adapter.ts +20 -30
  263. package/src/core/runtime/base-adapter.ts +17 -27
  264. package/src/core/runtime/cloudflare-workers-adapter.ts +28 -42
  265. package/src/core/runtime/index.ts +21 -33
  266. package/src/core/runtime/node-adapter.ts +59 -73
  267. package/src/core/runtime/vercel-edge-adapter.ts +18 -29
  268. package/src/core/utilities/circuit-breaker.ts +7 -7
  269. package/src/core/utilities/container.ts +52 -89
  270. package/src/core/utilities/hooks.ts +17 -23
  271. package/src/core/utilities/index.ts +4 -4
  272. package/src/core/validation/index.ts +25 -51
  273. package/src/index.ts +104 -60
  274. package/src/moro.ts +119 -191
  275. package/src/types/cache.ts +1 -1
  276. package/src/types/core.ts +2 -2
  277. package/src/types/database.ts +2 -10
  278. package/src/types/events.ts +23 -31
  279. package/src/types/hooks.ts +1 -1
  280. package/src/types/http.ts +5 -8
  281. package/src/types/logger.ts +7 -23
  282. package/src/types/module.ts +2 -2
  283. package/src/types/runtime.ts +6 -21
  284. package/src/types/session.ts +4 -4
@@ -14,10 +14,10 @@ import {
14
14
  ZodDefault,
15
15
  ZodUnion,
16
16
  ZodLiteral,
17
- } from "zod";
18
- import { createFrameworkLogger } from "../logger";
17
+ } from 'zod';
18
+ import { createFrameworkLogger } from '../logger';
19
19
 
20
- const logger = createFrameworkLogger("ZodToOpenAPI");
20
+ const logger = createFrameworkLogger('ZodToOpenAPI');
21
21
 
22
22
  // OpenAPI schema types
23
23
  export interface OpenAPISchema {
@@ -50,10 +50,7 @@ export interface ConversionOptions {
50
50
  }
51
51
 
52
52
  // Main conversion function
53
- export function zodToOpenAPI(
54
- schema: ZodSchema,
55
- options: ConversionOptions = {},
56
- ): OpenAPISchema {
53
+ export function zodToOpenAPI(schema: ZodSchema, options: ConversionOptions = {}): OpenAPISchema {
57
54
  const opts = {
58
55
  includeExamples: true,
59
56
  includeDescriptions: true,
@@ -64,14 +61,14 @@ export function zodToOpenAPI(
64
61
  try {
65
62
  return convertZodType(schema._def, opts);
66
63
  } catch (error) {
67
- logger.error("Failed to convert Zod schema to OpenAPI", "Conversion", {
64
+ logger.error('Failed to convert Zod schema to OpenAPI', 'Conversion', {
68
65
  error: error instanceof Error ? error.message : String(error),
69
66
  });
70
67
 
71
68
  // Return a basic schema as fallback
72
69
  return {
73
- type: "object",
74
- description: "Schema conversion failed",
70
+ type: 'object',
71
+ description: 'Schema conversion failed',
75
72
  additionalProperties: true,
76
73
  };
77
74
  }
@@ -79,84 +76,81 @@ export function zodToOpenAPI(
79
76
 
80
77
  // Convert Zod type definition to OpenAPI schema
81
78
  function convertZodType(def: any, options: ConversionOptions): OpenAPISchema {
82
- if (!def || typeof def !== "object") {
83
- logger.warn("Invalid Zod definition received", "Conversion", { def });
84
- return { type: "object", additionalProperties: true };
79
+ if (!def || typeof def !== 'object') {
80
+ logger.warn('Invalid Zod definition received', 'Conversion', { def });
81
+ return { type: 'object', additionalProperties: true };
85
82
  }
86
83
 
87
84
  // Handle newer Zod structure - check for 'type' field first, then 'typeName'
88
85
  const typeName = def.typeName || def.type;
89
86
 
90
87
  if (!typeName) {
91
- logger.warn("Missing typeName/type in Zod definition", "Conversion", {
88
+ logger.warn('Missing typeName/type in Zod definition', 'Conversion', {
92
89
  def: JSON.stringify(def).substring(0, 200),
93
90
  });
94
- return { type: "object", additionalProperties: true };
91
+ return { type: 'object', additionalProperties: true };
95
92
  }
96
93
 
97
94
  switch (typeName) {
98
- case "ZodString":
99
- case "string":
95
+ case 'ZodString':
96
+ case 'string':
100
97
  return convertZodString(def, options);
101
98
 
102
- case "ZodNumber":
103
- case "number":
99
+ case 'ZodNumber':
100
+ case 'number':
104
101
  return convertZodNumber(def, options);
105
102
 
106
- case "ZodBoolean":
107
- case "boolean":
103
+ case 'ZodBoolean':
104
+ case 'boolean':
108
105
  return convertZodBoolean(def, options);
109
106
 
110
- case "ZodObject":
111
- case "object":
107
+ case 'ZodObject':
108
+ case 'object':
112
109
  return convertZodObject(def, options);
113
110
 
114
- case "ZodArray":
115
- case "array":
111
+ case 'ZodArray':
112
+ case 'array':
116
113
  return convertZodArray(def, options);
117
114
 
118
- case "ZodEnum":
119
- case "enum":
115
+ case 'ZodEnum':
116
+ case 'enum':
120
117
  return convertZodEnum(def, options);
121
118
 
122
- case "ZodOptional":
123
- case "optional":
119
+ case 'ZodOptional':
120
+ case 'optional':
124
121
  return convertZodOptional(def, options);
125
122
 
126
- case "ZodDefault":
127
- case "default":
123
+ case 'ZodDefault':
124
+ case 'default':
128
125
  return convertZodDefault(def, options);
129
126
 
130
- case "ZodUnion":
131
- case "union":
127
+ case 'ZodUnion':
128
+ case 'union':
132
129
  return convertZodUnion(def, options);
133
130
 
134
- case "ZodLiteral":
135
- case "literal":
131
+ case 'ZodLiteral':
132
+ case 'literal':
136
133
  return convertZodLiteral(def, options);
137
134
 
138
- case "ZodDate":
135
+ case 'ZodDate':
139
136
  return {
140
- type: "string",
141
- format: "date-time",
142
- description: options.includeDescriptions
143
- ? "ISO 8601 date-time string"
144
- : undefined,
137
+ type: 'string',
138
+ format: 'date-time',
139
+ description: options.includeDescriptions ? 'ISO 8601 date-time string' : undefined,
145
140
  };
146
141
 
147
- case "ZodUUID":
142
+ case 'ZodUUID':
148
143
  return {
149
- type: "string",
150
- format: "uuid",
151
- pattern:
152
- "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
153
- description: options.includeDescriptions ? "UUID string" : undefined,
144
+ type: 'string',
145
+ format: 'uuid',
146
+ pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$',
147
+ description: options.includeDescriptions ? 'UUID string' : undefined,
154
148
  };
155
149
 
156
150
  default:
157
- logger.warn(`Unsupported Zod type: ${typeName}`, "Conversion");
151
+ logger.warn(`Unsupported Zod type: ${typeName}`, 'Conversion');
158
152
  return {
159
- type: "object",
153
+ type: 'object',
160
154
  description: `Unsupported type: ${typeName}`,
161
155
  additionalProperties: true,
162
156
  };
@@ -165,48 +159,47 @@ function convertZodType(def: any, options: ConversionOptions): OpenAPISchema {
165
159
 
166
160
  // Convert ZodString
167
161
  function convertZodString(def: any, options: ConversionOptions): OpenAPISchema {
168
- const schema: OpenAPISchema = { type: "string" };
162
+ const schema: OpenAPISchema = { type: 'string' };
169
163
 
170
164
  // Handle checks (validations)
171
165
  if (def.checks) {
172
166
  for (const check of def.checks) {
173
167
  switch (check.kind) {
174
- case "min":
168
+ case 'min':
175
169
  schema.minLength = check.value;
176
170
  break;
177
- case "max":
171
+ case 'max':
178
172
  schema.maxLength = check.value;
179
173
  break;
180
- case "email":
181
- schema.format = "email";
174
+ case 'email':
175
+ schema.format = 'email';
182
176
  break;
183
- case "url":
184
- schema.format = "uri";
177
+ case 'url':
178
+ schema.format = 'uri';
185
179
  break;
186
- case "uuid":
187
- schema.format = "uuid";
188
- schema.pattern =
189
- "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$";
180
+ case 'uuid':
181
+ schema.format = 'uuid';
182
+ schema.pattern = '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$';
190
183
  break;
191
- case "regex":
184
+ case 'regex':
192
185
  schema.pattern = check.regex.source;
193
186
  break;
194
- case "datetime":
195
- schema.format = "date-time";
187
+ case 'datetime':
188
+ schema.format = 'date-time';
196
189
  break;
197
190
  }
198
191
  }
199
192
  }
200
193
 
201
194
  if (options.includeExamples) {
202
- if (schema.format === "email") {
203
- schema.example = "user@example.com";
204
- } else if (schema.format === "uuid") {
205
- schema.example = "123e4567-e89b-12d3-a456-426614174000";
206
- } else if (schema.format === "date-time") {
207
- schema.example = "2023-12-01T10:00:00Z";
195
+ if (schema.format === 'email') {
196
+ schema.example = 'user@example.com';
197
+ } else if (schema.format === 'uuid') {
198
+ schema.example = '123e4567-e89b-12d3-a456-426614174000';
199
+ } else if (schema.format === 'date-time') {
200
+ schema.example = '2023-12-01T10:00:00Z';
208
201
  } else {
209
- schema.example = "string";
202
+ schema.example = 'string';
210
203
  }
211
204
  }
212
205
 
@@ -215,37 +208,34 @@ function convertZodString(def: any, options: ConversionOptions): OpenAPISchema {
215
208
 
216
209
  // Convert ZodNumber
217
210
  function convertZodNumber(def: any, options: ConversionOptions): OpenAPISchema {
218
- const schema: OpenAPISchema = { type: "number" };
211
+ const schema: OpenAPISchema = { type: 'number' };
219
212
 
220
213
  if (def.checks) {
221
214
  for (const check of def.checks) {
222
215
  switch (check.kind) {
223
- case "min":
216
+ case 'min':
224
217
  schema.minimum = check.value;
225
218
  break;
226
- case "max":
219
+ case 'max':
227
220
  schema.maximum = check.value;
228
221
  break;
229
- case "int":
230
- schema.type = "integer";
222
+ case 'int':
223
+ schema.type = 'integer';
231
224
  break;
232
225
  }
233
226
  }
234
227
  }
235
228
 
236
229
  if (options.includeExamples) {
237
- schema.example = schema.type === "integer" ? 42 : 3.14;
230
+ schema.example = schema.type === 'integer' ? 42 : 3.14;
238
231
  }
239
232
 
240
233
  return schema;
241
234
  }
242
235
 
243
236
  // Convert ZodBoolean
244
- function convertZodBoolean(
245
- def: any,
246
- options: ConversionOptions,
247
- ): OpenAPISchema {
248
- const schema: OpenAPISchema = { type: "boolean" };
237
+ function convertZodBoolean(def: any, options: ConversionOptions): OpenAPISchema {
238
+ const schema: OpenAPISchema = { type: 'boolean' };
249
239
 
250
240
  if (options.includeExamples) {
251
241
  schema.example = true;
@@ -257,20 +247,20 @@ function convertZodBoolean(
257
247
  // Convert ZodObject
258
248
  function convertZodObject(def: any, options: ConversionOptions): OpenAPISchema {
259
249
  const schema: OpenAPISchema = {
260
- type: "object",
250
+ type: 'object',
261
251
  properties: {},
262
252
  required: [],
263
253
  };
264
254
 
265
255
  // Handle both old and new Zod object structures
266
256
  let shape;
267
- if (typeof def.shape === "function") {
257
+ if (typeof def.shape === 'function') {
268
258
  shape = def.shape();
269
- } else if (def.shape && typeof def.shape === "object") {
259
+ } else if (def.shape && typeof def.shape === 'object') {
270
260
  shape = def.shape;
271
261
  } else {
272
- logger.warn("Could not extract shape from Zod object", "Conversion");
273
- return { type: "object", additionalProperties: true };
262
+ logger.warn('Could not extract shape from Zod object', 'Conversion');
263
+ return { type: 'object', additionalProperties: true };
274
264
  }
275
265
 
276
266
  for (const [key, value] of Object.entries(shape)) {
@@ -291,10 +281,10 @@ function convertZodObject(def: any, options: ConversionOptions): OpenAPISchema {
291
281
  // Check if field is required (not optional and no default)
292
282
  const typeStr = typeDef.typeName || typeDef.type;
293
283
  if (
294
- typeStr !== "optional" &&
295
- typeStr !== "ZodOptional" &&
296
- typeStr !== "default" &&
297
- typeStr !== "ZodDefault"
284
+ typeStr !== 'optional' &&
285
+ typeStr !== 'ZodOptional' &&
286
+ typeStr !== 'default' &&
287
+ typeStr !== 'ZodDefault'
298
288
  ) {
299
289
  schema.required!.push(key);
300
290
  }
@@ -311,25 +301,20 @@ function convertZodObject(def: any, options: ConversionOptions): OpenAPISchema {
311
301
  // Convert ZodArray
312
302
  function convertZodArray(def: any, options: ConversionOptions): OpenAPISchema {
313
303
  const schema: OpenAPISchema = {
314
- type: "array",
315
- items:
316
- def.type && def.type._def
317
- ? convertZodType(def.type._def, options)
318
- : { type: "string" },
304
+ type: 'array',
305
+ items: def.type && def.type._def ? convertZodType(def.type._def, options) : { type: 'string' },
319
306
  };
320
307
 
321
308
  // Handle array length constraints
322
309
  if (def.minLength !== null && def.minLength !== undefined) {
323
- schema.minLength =
324
- typeof def.minLength === "object" ? def.minLength.value : def.minLength;
310
+ schema.minLength = typeof def.minLength === 'object' ? def.minLength.value : def.minLength;
325
311
  }
326
312
  if (def.maxLength !== null && def.maxLength !== undefined) {
327
- schema.maxLength =
328
- typeof def.maxLength === "object" ? def.maxLength.value : def.maxLength;
313
+ schema.maxLength = typeof def.maxLength === 'object' ? def.maxLength.value : def.maxLength;
329
314
  }
330
315
 
331
316
  if (options.includeExamples && schema.items) {
332
- schema.example = [schema.items.example || "item"];
317
+ schema.example = [schema.items.example || 'item'];
333
318
  }
334
319
 
335
320
  return schema;
@@ -338,16 +323,11 @@ function convertZodArray(def: any, options: ConversionOptions): OpenAPISchema {
338
323
  // Convert ZodEnum
339
324
  function convertZodEnum(def: any, options: ConversionOptions): OpenAPISchema {
340
325
  const schema: OpenAPISchema = {
341
- type: "string",
326
+ type: 'string',
342
327
  enum: def.values || [],
343
328
  };
344
329
 
345
- if (
346
- options.includeExamples &&
347
- def.values &&
348
- Array.isArray(def.values) &&
349
- def.values.length > 0
350
- ) {
330
+ if (options.includeExamples && def.values && Array.isArray(def.values) && def.values.length > 0) {
351
331
  schema.example = def.values[0];
352
332
  }
353
333
 
@@ -355,26 +335,20 @@ function convertZodEnum(def: any, options: ConversionOptions): OpenAPISchema {
355
335
  }
356
336
 
357
337
  // Convert ZodOptional
358
- function convertZodOptional(
359
- def: any,
360
- options: ConversionOptions,
361
- ): OpenAPISchema {
338
+ function convertZodOptional(def: any, options: ConversionOptions): OpenAPISchema {
362
339
  return convertZodType(def.innerType._def, options);
363
340
  }
364
341
 
365
342
  // Convert ZodDefault
366
- function convertZodDefault(
367
- def: any,
368
- options: ConversionOptions,
369
- ): OpenAPISchema {
343
+ function convertZodDefault(def: any, options: ConversionOptions): OpenAPISchema {
370
344
  const schema = convertZodType(def.innerType._def, options);
371
345
 
372
346
  // Handle both function and property forms of defaultValue
373
- if (typeof def.defaultValue === "function") {
347
+ if (typeof def.defaultValue === 'function') {
374
348
  try {
375
349
  schema.default = def.defaultValue();
376
350
  } catch (error) {
377
- logger.warn("Failed to get default value from function", "Conversion", {
351
+ logger.warn('Failed to get default value from function', 'Conversion', {
378
352
  error,
379
353
  });
380
354
  schema.default = undefined;
@@ -382,7 +356,7 @@ function convertZodDefault(
382
356
  } else if (def.defaultValue !== undefined) {
383
357
  schema.default = def.defaultValue;
384
358
  } else {
385
- logger.warn("No default value found in ZodDefault", "Conversion");
359
+ logger.warn('No default value found in ZodDefault', 'Conversion');
386
360
  schema.default = undefined;
387
361
  }
388
362
 
@@ -391,9 +365,7 @@ function convertZodDefault(
391
365
 
392
366
  // Convert ZodUnion
393
367
  function convertZodUnion(def: any, options: ConversionOptions): OpenAPISchema {
394
- const schemas = def.options.map((option: ZodType) =>
395
- convertZodType(option._def, options),
396
- );
368
+ const schemas = def.options.map((option: ZodType) => convertZodType(option._def, options));
397
369
 
398
370
  return {
399
371
  oneOf: schemas,
@@ -401,10 +373,7 @@ function convertZodUnion(def: any, options: ConversionOptions): OpenAPISchema {
401
373
  }
402
374
 
403
375
  // Convert ZodLiteral
404
- function convertZodLiteral(
405
- def: any,
406
- options: ConversionOptions,
407
- ): OpenAPISchema {
376
+ function convertZodLiteral(def: any, options: ConversionOptions): OpenAPISchema {
408
377
  const value = def.value;
409
378
 
410
379
  return {
@@ -416,11 +385,11 @@ function convertZodLiteral(
416
385
 
417
386
  // Helper functions
418
387
  function isOptionalType(type: ZodType): boolean {
419
- return (type._def as any).typeName === "ZodOptional";
388
+ return (type._def as any).typeName === 'ZodOptional';
420
389
  }
421
390
 
422
391
  function hasDefault(type: ZodType): boolean {
423
- return (type._def as any).typeName === "ZodDefault";
392
+ return (type._def as any).typeName === 'ZodDefault';
424
393
  }
425
394
 
426
395
  // Generate example data from Zod schema
@@ -428,7 +397,7 @@ export function generateExampleFromSchema(schema: ZodSchema): any {
428
397
  try {
429
398
  return generateExample(schema._def);
430
399
  } catch (error) {
431
- logger.warn("Failed to generate example from schema", "ExampleGeneration", {
400
+ logger.warn('Failed to generate example from schema', 'ExampleGeneration', {
432
401
  error: error instanceof Error ? error.message : String(error),
433
402
  });
434
403
  return {};
@@ -439,32 +408,31 @@ function generateExample(def: any): any {
439
408
  const typeName = def.typeName;
440
409
 
441
410
  switch (typeName) {
442
- case "ZodString":
411
+ case 'ZodString':
443
412
  if (def.checks) {
444
413
  for (const check of def.checks) {
445
- if (check.kind === "email") return "user@example.com";
446
- if (check.kind === "uuid")
447
- return "123e4567-e89b-12d3-a456-426614174000";
448
- if (check.kind === "url") return "https://example.com";
449
- if (check.kind === "datetime") return "2023-12-01T10:00:00Z";
414
+ if (check.kind === 'email') return 'user@example.com';
415
+ if (check.kind === 'uuid') return '123e4567-e89b-12d3-a456-426614174000';
416
+ if (check.kind === 'url') return 'https://example.com';
417
+ if (check.kind === 'datetime') return '2023-12-01T10:00:00Z';
450
418
  }
451
419
  }
452
- return "string";
420
+ return 'string';
453
421
 
454
- case "ZodNumber":
422
+ case 'ZodNumber':
455
423
  return 42;
456
424
 
457
- case "ZodBoolean":
425
+ case 'ZodBoolean':
458
426
  return true;
459
427
 
460
- case "ZodObject": {
428
+ case 'ZodObject': {
461
429
  const example: any = {};
462
430
  let shape;
463
431
 
464
432
  try {
465
- if (typeof def.shape === "function") {
433
+ if (typeof def.shape === 'function') {
466
434
  shape = def.shape();
467
- } else if (def.shape && typeof def.shape === "object") {
435
+ } else if (def.shape && typeof def.shape === 'object') {
468
436
  shape = def.shape;
469
437
  } else {
470
438
  return {};
@@ -477,7 +445,7 @@ function generateExample(def: any): any {
477
445
  }
478
446
  }
479
447
  } catch (error) {
480
- logger.warn("Failed to generate object example", "ExampleGeneration", {
448
+ logger.warn('Failed to generate object example', 'ExampleGeneration', {
481
449
  error,
482
450
  });
483
451
  return {};
@@ -486,31 +454,31 @@ function generateExample(def: any): any {
486
454
  return example;
487
455
  }
488
456
 
489
- case "ZodArray":
457
+ case 'ZodArray':
490
458
  if (def.type && def.type._def) {
491
459
  const itemExample = generateExample(def.type._def);
492
460
  return [itemExample];
493
461
  }
494
- return ["item"];
462
+ return ['item'];
495
463
 
496
- case "ZodEnum":
464
+ case 'ZodEnum':
497
465
  return def.values && Array.isArray(def.values) && def.values.length > 0
498
466
  ? def.values[0]
499
- : "enum-value";
467
+ : 'enum-value';
500
468
 
501
- case "ZodOptional":
469
+ case 'ZodOptional':
502
470
  return generateExample(def.innerType._def);
503
471
 
504
- case "ZodDefault":
472
+ case 'ZodDefault':
505
473
  // Handle both function and property forms of defaultValue
506
- if (typeof def.defaultValue === "function") {
474
+ if (typeof def.defaultValue === 'function') {
507
475
  try {
508
476
  return def.defaultValue();
509
477
  } catch (error) {
510
478
  logger.warn(
511
- "Failed to get default value from function in example generation",
512
- "ExampleGeneration",
513
- { error },
479
+ 'Failed to get default value from function in example generation',
480
+ 'ExampleGeneration',
481
+ { error }
514
482
  );
515
483
  return null;
516
484
  }
@@ -520,10 +488,10 @@ function generateExample(def: any): any {
520
488
  return null;
521
489
  }
522
490
 
523
- case "ZodUnion":
491
+ case 'ZodUnion':
524
492
  return generateExample(def.options[0]._def);
525
493
 
526
- case "ZodLiteral":
494
+ case 'ZodLiteral':
527
495
  return def.value;
528
496
 
529
497
  default: