veloce-ts 0.1.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.
Files changed (175) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/LICENSE +21 -0
  3. package/README.md +442 -0
  4. package/bin/veloce.ts +2 -0
  5. package/dist/cjs/src/cli/index.js +425 -0
  6. package/dist/cjs/src/cli/index.js.map +22 -0
  7. package/dist/cjs/src/docs/index.js +7 -0
  8. package/dist/cjs/src/docs/index.js.map +55 -0
  9. package/dist/cjs/src/errors/index.js +4 -0
  10. package/dist/cjs/src/errors/index.js.map +12 -0
  11. package/dist/cjs/src/graphql/index.js +83 -0
  12. package/dist/cjs/src/graphql/index.js.map +24 -0
  13. package/dist/cjs/src/index.js +126 -0
  14. package/dist/cjs/src/index.js.map +108 -0
  15. package/dist/cjs/src/middleware/index.js +3 -0
  16. package/dist/cjs/src/middleware/index.js.map +12 -0
  17. package/dist/cjs/src/plugins/index.js +125 -0
  18. package/dist/cjs/src/plugins/index.js.map +67 -0
  19. package/dist/cjs/src/testing/index.js +17 -0
  20. package/dist/cjs/src/testing/index.js.map +54 -0
  21. package/dist/cjs/src/types/index.js +3 -0
  22. package/dist/cjs/src/types/index.js.map +16 -0
  23. package/dist/cjs/src/validation/index.js +3 -0
  24. package/dist/cjs/src/validation/index.js.map +19 -0
  25. package/dist/cjs/src/websocket/index.js +3 -0
  26. package/dist/cjs/src/websocket/index.js.map +12 -0
  27. package/dist/esm/chunk-0zxhx5b8.js +7 -0
  28. package/dist/esm/chunk-0zxhx5b8.js.map +10 -0
  29. package/dist/esm/chunk-159eqj8q.js +5 -0
  30. package/dist/esm/chunk-159eqj8q.js.map +12 -0
  31. package/dist/esm/chunk-1hqjkm44.js +5 -0
  32. package/dist/esm/chunk-1hqjkm44.js.map +11 -0
  33. package/dist/esm/chunk-2q6s8v3j.js +6 -0
  34. package/dist/esm/chunk-2q6s8v3j.js.map +10 -0
  35. package/dist/esm/chunk-42h6trpf.js +5 -0
  36. package/dist/esm/chunk-42h6trpf.js.map +9 -0
  37. package/dist/esm/chunk-82f2j0k2.js +60 -0
  38. package/dist/esm/chunk-82f2j0k2.js.map +10 -0
  39. package/dist/esm/chunk-8wrnr45g.js +338 -0
  40. package/dist/esm/chunk-8wrnr45g.js.map +10 -0
  41. package/dist/esm/chunk-9p6d0t33.js +5 -0
  42. package/dist/esm/chunk-9p6d0t33.js.map +10 -0
  43. package/dist/esm/chunk-awven6dt.js +4 -0
  44. package/dist/esm/chunk-awven6dt.js.map +16 -0
  45. package/dist/esm/chunk-gv5n8ddb.js +18 -0
  46. package/dist/esm/chunk-gv5n8ddb.js.map +10 -0
  47. package/dist/esm/chunk-pn7z890c.js +72 -0
  48. package/dist/esm/chunk-pn7z890c.js.map +13 -0
  49. package/dist/esm/chunk-qfsjy9bg.js +7 -0
  50. package/dist/esm/chunk-qfsjy9bg.js.map +10 -0
  51. package/dist/esm/chunk-vkkzgaf7.js +5 -0
  52. package/dist/esm/chunk-vkkzgaf7.js.map +12 -0
  53. package/dist/esm/src/cli/index.js +30 -0
  54. package/dist/esm/src/cli/index.js.map +18 -0
  55. package/dist/esm/src/docs/index.js +8 -0
  56. package/dist/esm/src/docs/index.js.map +48 -0
  57. package/dist/esm/src/errors/index.js +4 -0
  58. package/dist/esm/src/errors/index.js.map +9 -0
  59. package/dist/esm/src/graphql/index.js +4 -0
  60. package/dist/esm/src/graphql/index.js.map +9 -0
  61. package/dist/esm/src/index.js +4 -0
  62. package/dist/esm/src/index.js.map +16 -0
  63. package/dist/esm/src/middleware/index.js +4 -0
  64. package/dist/esm/src/middleware/index.js.map +9 -0
  65. package/dist/esm/src/plugins/index.js +42 -0
  66. package/dist/esm/src/plugins/index.js.map +10 -0
  67. package/dist/esm/src/testing/index.js +4 -0
  68. package/dist/esm/src/testing/index.js.map +39 -0
  69. package/dist/esm/src/types/index.js +4 -0
  70. package/dist/esm/src/types/index.js.map +9 -0
  71. package/dist/esm/src/validation/index.js +4 -0
  72. package/dist/esm/src/validation/index.js.map +9 -0
  73. package/dist/esm/src/websocket/index.js +4 -0
  74. package/dist/esm/src/websocket/index.js.map +9 -0
  75. package/dist/types/adapters/base.d.ts +24 -0
  76. package/dist/types/adapters/base.d.ts.map +1 -0
  77. package/dist/types/adapters/express.d.ts +44 -0
  78. package/dist/types/adapters/express.d.ts.map +1 -0
  79. package/dist/types/adapters/hono.d.ts +44 -0
  80. package/dist/types/adapters/hono.d.ts.map +1 -0
  81. package/dist/types/cli/commands/build.d.ts +3 -0
  82. package/dist/types/cli/commands/build.d.ts.map +1 -0
  83. package/dist/types/cli/commands/dev.d.ts +3 -0
  84. package/dist/types/cli/commands/dev.d.ts.map +1 -0
  85. package/dist/types/cli/commands/generate.d.ts +3 -0
  86. package/dist/types/cli/commands/generate.d.ts.map +1 -0
  87. package/dist/types/cli/commands/new.d.ts +3 -0
  88. package/dist/types/cli/commands/new.d.ts.map +1 -0
  89. package/dist/types/cli/index.d.ts +3 -0
  90. package/dist/types/cli/index.d.ts.map +1 -0
  91. package/dist/types/core/application.d.ts +268 -0
  92. package/dist/types/core/application.d.ts.map +1 -0
  93. package/dist/types/core/compiled-metadata.d.ts +58 -0
  94. package/dist/types/core/compiled-metadata.d.ts.map +1 -0
  95. package/dist/types/core/metadata.d.ts +175 -0
  96. package/dist/types/core/metadata.d.ts.map +1 -0
  97. package/dist/types/core/plugin.d.ts +63 -0
  98. package/dist/types/core/plugin.d.ts.map +1 -0
  99. package/dist/types/core/router-compiler.d.ts +61 -0
  100. package/dist/types/core/router-compiler.d.ts.map +1 -0
  101. package/dist/types/decorators/dependencies.d.ts +28 -0
  102. package/dist/types/decorators/dependencies.d.ts.map +1 -0
  103. package/dist/types/decorators/docs.d.ts +38 -0
  104. package/dist/types/decorators/docs.d.ts.map +1 -0
  105. package/dist/types/decorators/graphql.d.ts +126 -0
  106. package/dist/types/decorators/graphql.d.ts.map +1 -0
  107. package/dist/types/decorators/http.d.ts +74 -0
  108. package/dist/types/decorators/http.d.ts.map +1 -0
  109. package/dist/types/decorators/middleware.d.ts +30 -0
  110. package/dist/types/decorators/middleware.d.ts.map +1 -0
  111. package/dist/types/decorators/params.d.ts +82 -0
  112. package/dist/types/decorators/params.d.ts.map +1 -0
  113. package/dist/types/decorators/websocket.d.ts +61 -0
  114. package/dist/types/decorators/websocket.d.ts.map +1 -0
  115. package/dist/types/dependencies/container.d.ts +93 -0
  116. package/dist/types/dependencies/container.d.ts.map +1 -0
  117. package/dist/types/docs/index.d.ts +3 -0
  118. package/dist/types/docs/index.d.ts.map +1 -0
  119. package/dist/types/docs/openapi-generator.d.ts +50 -0
  120. package/dist/types/docs/openapi-generator.d.ts.map +1 -0
  121. package/dist/types/docs/zod-to-json-schema.d.ts +46 -0
  122. package/dist/types/docs/zod-to-json-schema.d.ts.map +1 -0
  123. package/dist/types/errors/exceptions.d.ts +48 -0
  124. package/dist/types/errors/exceptions.d.ts.map +1 -0
  125. package/dist/types/errors/handler.d.ts +61 -0
  126. package/dist/types/errors/handler.d.ts.map +1 -0
  127. package/dist/types/errors/index.d.ts +7 -0
  128. package/dist/types/errors/index.d.ts.map +1 -0
  129. package/dist/types/graphql/index.d.ts +4 -0
  130. package/dist/types/graphql/index.d.ts.map +1 -0
  131. package/dist/types/graphql/plugin.d.ts +60 -0
  132. package/dist/types/graphql/plugin.d.ts.map +1 -0
  133. package/dist/types/graphql/schema-builder.d.ts +46 -0
  134. package/dist/types/graphql/schema-builder.d.ts.map +1 -0
  135. package/dist/types/graphql/zod-to-graphql.d.ts +22 -0
  136. package/dist/types/graphql/zod-to-graphql.d.ts.map +1 -0
  137. package/dist/types/index.d.ts +34 -0
  138. package/dist/types/index.d.ts.map +1 -0
  139. package/dist/types/middleware/compression.d.ts +7 -0
  140. package/dist/types/middleware/compression.d.ts.map +1 -0
  141. package/dist/types/middleware/cors.d.ts +7 -0
  142. package/dist/types/middleware/cors.d.ts.map +1 -0
  143. package/dist/types/middleware/index.d.ts +4 -0
  144. package/dist/types/middleware/index.d.ts.map +1 -0
  145. package/dist/types/middleware/rate-limit.d.ts +7 -0
  146. package/dist/types/middleware/rate-limit.d.ts.map +1 -0
  147. package/dist/types/plugins/index.d.ts +4 -0
  148. package/dist/types/plugins/index.d.ts.map +1 -0
  149. package/dist/types/plugins/openapi.d.ts +23 -0
  150. package/dist/types/plugins/openapi.d.ts.map +1 -0
  151. package/dist/types/responses/response.d.ts +200 -0
  152. package/dist/types/responses/response.d.ts.map +1 -0
  153. package/dist/types/testing/helpers.d.ts +98 -0
  154. package/dist/types/testing/helpers.d.ts.map +1 -0
  155. package/dist/types/testing/index.d.ts +4 -0
  156. package/dist/types/testing/index.d.ts.map +1 -0
  157. package/dist/types/testing/test-client.d.ts +86 -0
  158. package/dist/types/testing/test-client.d.ts.map +1 -0
  159. package/dist/types/types/index.d.ts +232 -0
  160. package/dist/types/types/index.d.ts.map +1 -0
  161. package/dist/types/validation/exceptions.d.ts +25 -0
  162. package/dist/types/validation/exceptions.d.ts.map +1 -0
  163. package/dist/types/validation/index.d.ts +3 -0
  164. package/dist/types/validation/index.d.ts.map +1 -0
  165. package/dist/types/validation/validator.d.ts +54 -0
  166. package/dist/types/validation/validator.d.ts.map +1 -0
  167. package/dist/types/websocket/connection.d.ts +51 -0
  168. package/dist/types/websocket/connection.d.ts.map +1 -0
  169. package/dist/types/websocket/index.d.ts +4 -0
  170. package/dist/types/websocket/index.d.ts.map +1 -0
  171. package/dist/types/websocket/manager.d.ts +82 -0
  172. package/dist/types/websocket/manager.d.ts.map +1 -0
  173. package/dist/types/websocket/plugin.d.ts +51 -0
  174. package/dist/types/websocket/plugin.d.ts.map +1 -0
  175. package/package.json +149 -0
@@ -0,0 +1,108 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["..\\..\\node_modules\\reflect-metadata\\Reflect.js", "..\\..\\src\\adapters\\hono.ts", "..\\..\\src\\adapters\\express.ts", "..\\..\\src\\middleware\\cors.ts", "..\\..\\src\\middleware\\rate-limit.ts", "..\\..\\src\\middleware\\compression.ts", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\Options.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\Refs.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\errorMessages.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\getRelativePath.js", "..\\..\\node_modules\\zod\\v3\\helpers\\util.js", "..\\..\\node_modules\\zod\\v3\\ZodError.js", "..\\..\\node_modules\\zod\\v3\\locales\\en.js", "..\\..\\node_modules\\zod\\v3\\errors.js", "..\\..\\node_modules\\zod\\v3\\helpers\\parseUtil.js", "..\\..\\node_modules\\zod\\v3\\helpers\\errorUtil.js", "..\\..\\node_modules\\zod\\v3\\types.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\any.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\array.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\bigint.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\boolean.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\branded.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\catch.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\date.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\default.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\effects.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\enum.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\intersection.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\literal.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\string.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\record.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\map.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\nativeEnum.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\never.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\null.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\union.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\nullable.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\number.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\object.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\optional.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\pipeline.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\promise.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\set.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\tuple.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\undefined.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\unknown.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parsers\\readonly.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\selectParser.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\parseDef.js", "..\\..\\node_modules\\zod-to-json-schema\\dist\\esm\\zodToJsonSchema.js", "..\\..\\src\\docs\\zod-to-json-schema.ts", "..\\..\\src\\docs\\openapi-generator.ts", "..\\..\\src\\plugins\\openapi.ts", "..\\..\\src\\websocket\\connection.ts", "..\\..\\src\\websocket\\manager.ts", "..\\..\\src\\websocket\\plugin.ts", "..\\..\\src\\decorators\\graphql.ts", "..\\..\\src\\graphql\\zod-to-graphql.ts", "..\\..\\src\\errors\\exceptions.ts", "..\\..\\src\\validation\\exceptions.ts", "..\\..\\src\\validation\\validator.ts", "..\\..\\src\\graphql\\schema-builder.ts", "..\\..\\src\\graphql\\plugin.ts", "..\\..\\src\\testing\\test-client.ts", "..\\..\\node_modules\\hono\\dist\\compose.js", "..\\..\\node_modules\\hono\\dist\\request\\constants.js", "..\\..\\node_modules\\hono\\dist\\utils\\body.js", "..\\..\\node_modules\\hono\\dist\\utils\\url.js", "..\\..\\node_modules\\hono\\dist\\request.js", "..\\..\\node_modules\\hono\\dist\\utils\\html.js", "..\\..\\node_modules\\hono\\dist\\context.js", "..\\..\\node_modules\\hono\\dist\\router.js", "..\\..\\node_modules\\hono\\dist\\utils\\constants.js", "..\\..\\node_modules\\hono\\dist\\hono-base.js", "..\\..\\node_modules\\hono\\dist\\router\\reg-exp-router\\node.js", "..\\..\\node_modules\\hono\\dist\\router\\reg-exp-router\\trie.js", "..\\..\\node_modules\\hono\\dist\\router\\reg-exp-router\\router.js", "..\\..\\node_modules\\hono\\dist\\router\\smart-router\\router.js", "..\\..\\node_modules\\hono\\dist\\router\\trie-router\\node.js", "..\\..\\node_modules\\hono\\dist\\router\\trie-router\\router.js", "..\\..\\node_modules\\hono\\dist\\hono.js", "..\\..\\src\\core\\metadata.ts", "..\\..\\src\\dependencies\\container.ts", "..\\..\\node_modules\\hono\\dist\\utils\\cookie.js", "..\\..\\node_modules\\hono\\dist\\helper\\cookie\\index.js", "..\\..\\src\\responses\\response.ts", "..\\..\\src\\core\\compiled-metadata.ts", "..\\..\\src\\core\\router-compiler.ts", "..\\..\\src\\errors\\handler.ts", "..\\..\\src\\core\\plugin.ts", "..\\..\\src\\core\\application.ts", "..\\..\\src\\testing\\helpers.ts", "..\\..\\src\\index.ts", "..\\..\\src\\decorators\\http.ts", "..\\..\\src\\decorators\\params.ts", "..\\..\\src\\decorators\\dependencies.ts", "..\\..\\src\\decorators\\middleware.ts", "..\\..\\src\\decorators\\docs.ts", "..\\..\\src\\decorators\\websocket.ts"],
4
+ "sourcesContent": [
5
+ "/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof globalThis === \"object\" ? globalThis :\n typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n sloppyModeThis();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect !== \"undefined\") {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter, root);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n function makeExporter(target, previous) {\n return function (key, value) {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n if (previous)\n previous(key, value);\n };\n }\n function functionThis() {\n try {\n return Function(\"return this;\")();\n }\n catch (_) { }\n }\n function indirectEvalThis() {\n try {\n return (void 0, eval)(\"(function() { return this; })()\");\n }\n catch (_) { }\n }\n function sloppyModeThis() {\n return functionThis() || indirectEvalThis();\n }\n })(function (exporter, root) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var _Map = typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n var registrySymbol = supportsSymbol ? Symbol.for(\"@reflect-metadata:registry\") : undefined;\n var metadataRegistry = GetOrCreateMetadataRegistry();\n var metadataProvider = CreateMetadataProvider(metadataRegistry);\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var provider = GetMetadataProvider(target, propertyKey, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return;\n return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ true);\n provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var provider = GetMetadataProvider(O, P, /*create*/ false);\n if (!provider) {\n return [];\n }\n return provider.OrdinaryOwnMetadataKeys(O, P);\n }\n // 6 ECMAScript Data Types and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n function SameValueZero(x, y) {\n return x === y || x !== x && y !== y;\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // Global metadata registry\n // - Allows `import \"reflect-metadata\"` and `import \"reflect-metadata/no-conflict\"` to interoperate.\n // - Uses isolated metadata if `Reflect` is frozen before the registry can be installed.\n /**\n * Creates a registry used to allow multiple `reflect-metadata` providers.\n */\n function CreateMetadataRegistry() {\n var fallback;\n if (!IsUndefined(registrySymbol) &&\n typeof root.Reflect !== \"undefined\" &&\n !(registrySymbol in root.Reflect) &&\n typeof root.Reflect.defineMetadata === \"function\") {\n // interoperate with older version of `reflect-metadata` that did not support a registry.\n fallback = CreateFallbackProvider(root.Reflect);\n }\n var first;\n var second;\n var rest;\n var targetProviderMap = new _WeakMap();\n var registry = {\n registerProvider: registerProvider,\n getProvider: getProvider,\n setProvider: setProvider,\n };\n return registry;\n function registerProvider(provider) {\n if (!Object.isExtensible(registry)) {\n throw new Error(\"Cannot add provider to a frozen registry.\");\n }\n switch (true) {\n case fallback === provider: break;\n case IsUndefined(first):\n first = provider;\n break;\n case first === provider: break;\n case IsUndefined(second):\n second = provider;\n break;\n case second === provider: break;\n default:\n if (rest === undefined)\n rest = new _Set();\n rest.add(provider);\n break;\n }\n }\n function getProviderNoCache(O, P) {\n if (!IsUndefined(first)) {\n if (first.isProviderFor(O, P))\n return first;\n if (!IsUndefined(second)) {\n if (second.isProviderFor(O, P))\n return first;\n if (!IsUndefined(rest)) {\n var iterator = GetIterator(rest);\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n return undefined;\n }\n var provider = IteratorValue(next);\n if (provider.isProviderFor(O, P)) {\n IteratorClose(iterator);\n return provider;\n }\n }\n }\n }\n }\n if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) {\n return fallback;\n }\n return undefined;\n }\n function getProvider(O, P) {\n var providerMap = targetProviderMap.get(O);\n var provider;\n if (!IsUndefined(providerMap)) {\n provider = providerMap.get(P);\n }\n if (!IsUndefined(provider)) {\n return provider;\n }\n provider = getProviderNoCache(O, P);\n if (!IsUndefined(provider)) {\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return provider;\n }\n function hasProvider(provider) {\n if (IsUndefined(provider))\n throw new TypeError();\n return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider);\n }\n function setProvider(O, P, provider) {\n if (!hasProvider(provider)) {\n throw new Error(\"Metadata provider not registered.\");\n }\n var existingProvider = getProvider(O, P);\n if (existingProvider !== provider) {\n if (!IsUndefined(existingProvider)) {\n return false;\n }\n var providerMap = targetProviderMap.get(O);\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return true;\n }\n }\n /**\n * Gets or creates the shared registry of metadata providers.\n */\n function GetOrCreateMetadataRegistry() {\n var metadataRegistry;\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n metadataRegistry = root.Reflect[registrySymbol];\n }\n if (IsUndefined(metadataRegistry)) {\n metadataRegistry = CreateMetadataRegistry();\n }\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n Object.defineProperty(root.Reflect, registrySymbol, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: metadataRegistry\n });\n }\n return metadataRegistry;\n }\n function CreateMetadataProvider(registry) {\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var metadata = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var targetMetadata = metadata.get(O);\n if (IsUndefined(targetMetadata))\n return false;\n return targetMetadata.has(P);\n },\n OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata,\n OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata,\n OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata,\n OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys,\n OrdinaryDeleteMetadata: OrdinaryDeleteMetadata,\n };\n metadataRegistry.registerProvider(provider);\n return provider;\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = metadata.get(O);\n var createdTargetMetadata = false;\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n metadata.set(O, targetMetadata);\n createdTargetMetadata = true;\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n if (!registry.setProvider(O, P, provider)) {\n targetMetadata.delete(P);\n if (createdTargetMetadata) {\n metadata.delete(O);\n }\n throw new Error(\"Wrong provider for target.\");\n }\n }\n return metadataMap;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n function OrdinaryDeleteMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(MetadataKey))\n return false;\n if (metadataMap.size === 0) {\n var targetMetadata = metadata.get(O);\n if (!IsUndefined(targetMetadata)) {\n targetMetadata.delete(P);\n if (targetMetadata.size === 0) {\n metadata.delete(targetMetadata);\n }\n }\n }\n return true;\n }\n }\n function CreateFallbackProvider(reflect) {\n var defineMetadata = reflect.defineMetadata, hasOwnMetadata = reflect.hasOwnMetadata, getOwnMetadata = reflect.getOwnMetadata, getOwnMetadataKeys = reflect.getOwnMetadataKeys, deleteMetadata = reflect.deleteMetadata;\n var metadataOwner = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var metadataPropertySet = metadataOwner.get(O);\n if (!IsUndefined(metadataPropertySet) && metadataPropertySet.has(P)) {\n return true;\n }\n if (getOwnMetadataKeys(O, P).length) {\n if (IsUndefined(metadataPropertySet)) {\n metadataPropertySet = new _Set();\n metadataOwner.set(O, metadataPropertySet);\n }\n metadataPropertySet.add(P);\n return true;\n }\n return false;\n },\n OrdinaryDefineOwnMetadata: defineMetadata,\n OrdinaryHasOwnMetadata: hasOwnMetadata,\n OrdinaryGetOwnMetadata: getOwnMetadata,\n OrdinaryOwnMetadataKeys: getOwnMetadataKeys,\n OrdinaryDeleteMetadata: deleteMetadata,\n };\n return provider;\n }\n /**\n * Gets the metadata provider for an object. If the object has no metadata provider and this is for a create operation,\n * then this module's metadata provider is assigned to the object.\n */\n function GetMetadataProvider(O, P, Create) {\n var registeredProvider = metadataRegistry.getProvider(O, P);\n if (!IsUndefined(registeredProvider)) {\n return registeredProvider;\n }\n if (Create) {\n if (metadataRegistry.setProvider(O, P, metadataProvider)) {\n return metadataProvider;\n }\n throw new Error(\"Illegal state.\");\n }\n return undefined;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n var Map = /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (SameValueZero(key, this._cacheKey)) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (!SameValueZero(this._cacheKey, key)) {\n this._cacheIndex = -1;\n for (var i = 0; i < this._keys.length; i++) {\n if (SameValueZero(this._keys[i], key)) {\n this._cacheIndex = i;\n break;\n }\n }\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n return Map;\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n var Set = /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.keys(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n return Set;\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n var array = new Uint8Array(size);\n if (typeof crypto !== \"undefined\") {\n crypto.getRandomValues(array);\n }\n else if (typeof msCrypto !== \"undefined\") {\n msCrypto.getRandomValues(array);\n }\n else {\n FillRandomBytes(array, size);\n }\n return array;\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n",
6
+ "/**\r\n * Hono adapter for runtime-agnostic server deployment\r\n * Supports Bun, Node.js, Deno, and Cloudflare Workers\r\n */\r\nimport type { Hono } from 'hono';\r\nimport type { Adapter } from './base';\r\n\r\n// Type declarations for runtime globals\r\ndeclare const Deno: any;\r\ndeclare const Bun: any;\r\n\r\n/**\r\n * Runtime detection utilities\r\n */\r\nconst detectRuntime = (): 'bun' | 'deno' | 'node' | 'workerd' | 'unknown' => {\r\n // Check for Bun\r\n if (typeof Bun !== 'undefined') {\r\n return 'bun';\r\n }\r\n\r\n // Check for Deno\r\n if (typeof Deno !== 'undefined') {\r\n return 'deno';\r\n }\r\n\r\n // Check for Cloudflare Workers\r\n if (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') {\r\n return 'workerd';\r\n }\r\n\r\n // Check for Node.js\r\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\r\n return 'node';\r\n }\r\n\r\n return 'unknown';\r\n};\r\n\r\n/**\r\n * HonoAdapter - Adapts Hono.js to work across multiple runtimes\r\n * Automatically detects the runtime and uses the appropriate server implementation\r\n */\r\nexport class HonoAdapter implements Adapter {\r\n name = 'hono';\r\n private runtime: ReturnType<typeof detectRuntime>;\r\n\r\n constructor(private hono: Hono) {\r\n this.runtime = detectRuntime();\r\n }\r\n\r\n /**\r\n * Start the server on the specified port\r\n * Automatically uses the appropriate server for the detected runtime\r\n */\r\n listen(port: number, callback?: () => void): any {\r\n switch (this.runtime) {\r\n case 'bun':\r\n return this.listenBun(port, callback);\r\n \r\n case 'deno':\r\n return this.listenDeno(port, callback);\r\n \r\n case 'node':\r\n return this.listenNode(port, callback);\r\n \r\n case 'workerd':\r\n throw new Error(\r\n 'Cloudflare Workers do not support listen(). Deploy using wrangler or export the handler with getHandler().'\r\n );\r\n \r\n default:\r\n throw new Error(\r\n `Unsupported runtime: ${this.runtime}. FastAPI-TS supports Bun, Node.js, Deno, and Cloudflare Workers.`\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get the Hono fetch handler\r\n * This can be used directly in serverless environments or for custom server setups\r\n */\r\n getHandler() {\r\n return this.hono.fetch;\r\n }\r\n\r\n /**\r\n * Get the detected runtime\r\n */\r\n getRuntime(): string {\r\n return this.runtime;\r\n }\r\n\r\n /**\r\n * Start server using Bun's native server\r\n */\r\n private listenBun(port: number, callback?: () => void): any {\r\n const server = Bun.serve({\r\n port,\r\n fetch: this.hono.fetch,\r\n });\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n\r\n return server;\r\n }\r\n\r\n /**\r\n * Start server using Deno's native server\r\n */\r\n private listenDeno(port: number, callback?: () => void): any {\r\n // Deno.serve returns a promise, so we handle it appropriately\r\n const ac = new AbortController();\r\n \r\n Deno.serve(\r\n {\r\n port,\r\n signal: ac.signal,\r\n onListen: callback\r\n },\r\n this.hono.fetch\r\n );\r\n\r\n // Return an object with a close method for consistency\r\n return {\r\n port,\r\n close: () => ac.abort(),\r\n };\r\n }\r\n\r\n /**\r\n * Start server using Node.js adapter\r\n * Requires @hono/node-server package\r\n */\r\n private listenNode(port: number, callback?: () => void): any {\r\n try {\r\n // Dynamically import @hono/node-server\r\n // This is a peer dependency that users need to install for Node.js support\r\n const { serve } = require('@hono/node-server');\r\n \r\n return serve(\r\n {\r\n fetch: this.hono.fetch,\r\n port,\r\n },\r\n callback\r\n );\r\n } catch (error) {\r\n throw new Error(\r\n 'Node.js adapter requires @hono/node-server package. Install it with: npm install @hono/node-server'\r\n );\r\n }\r\n }\r\n}\r\n",
7
+ "/**\r\n * Express adapter for FastAPI-TS\r\n * Bridges FastAPI-TS routes to Express.js framework\r\n * Allows integration with existing Express applications\r\n */\r\nimport type { Adapter } from './base';\r\nimport type { VeloceTS } from '../core/application';\r\n\r\n// Type declarations for Express (peer dependency)\r\ndeclare const require: any;\r\n\r\n/**\r\n * ExpressAdapter - Bridges FastAPI-TS to Express.js\r\n * Converts Express req/res to Hono Context format\r\n */\r\nexport class ExpressAdapter implements Adapter {\r\n name = 'express';\r\n private express: any;\r\n\r\n constructor(private app: VeloceTS) {\r\n try {\r\n // Express is a peer dependency\r\n const expressModule = require('express');\r\n this.express = expressModule();\r\n this.setupBridge();\r\n } catch (error) {\r\n throw new Error(\r\n 'Express adapter requires express package. Install it with: npm install express'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Set up the bridge between FastAPI-TS and Express\r\n * Converts all FastAPI-TS routes to Express routes\r\n */\r\n private setupBridge(): void {\r\n // Get the Hono instance from FastAPI-TS\r\n const hono = this.app.getHono();\r\n\r\n // Use Express middleware to forward all requests to Hono\r\n this.express.use(async (req: any, res: any) => {\r\n try {\r\n // Convert Express request to Web Standard Request\r\n const request = this.createWebRequest(req);\r\n\r\n // Call Hono's fetch handler\r\n const response = await hono.fetch(request);\r\n\r\n // Convert Web Standard Response to Express response\r\n await this.sendExpressResponse(res, response);\r\n } catch (error) {\r\n // Handle errors\r\n res.status(500).json({\r\n error: 'Internal Server Error',\r\n message: error instanceof Error ? error.message : 'Unknown error'\r\n });\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Convert Express request to Web Standard Request\r\n */\r\n private createWebRequest(req: any): Request {\r\n // Build the full URL\r\n const protocol = req.protocol || 'http';\r\n const host = req.get('host') || 'localhost';\r\n const url = `${protocol}://${host}${req.originalUrl || req.url}`;\r\n\r\n // Build headers\r\n const headers = new Headers();\r\n for (const [key, value] of Object.entries(req.headers)) {\r\n if (typeof value === 'string') {\r\n headers.set(key, value);\r\n } else if (Array.isArray(value)) {\r\n value.forEach(v => headers.append(key, v));\r\n }\r\n }\r\n\r\n // Build request options\r\n const options: RequestInit = {\r\n method: req.method,\r\n headers,\r\n };\r\n\r\n // Add body for methods that support it\r\n if (req.method !== 'GET' && req.method !== 'HEAD') {\r\n // Express body-parser middleware should have already parsed the body\r\n if (req.body) {\r\n options.body = JSON.stringify(req.body);\r\n headers.set('content-type', 'application/json');\r\n }\r\n }\r\n\r\n return new Request(url, options);\r\n }\r\n\r\n /**\r\n * Convert Web Standard Response to Express response\r\n */\r\n private async sendExpressResponse(res: any, response: Response): Promise<void> {\r\n // Set status code\r\n res.status(response.status);\r\n\r\n // Set headers\r\n response.headers.forEach((value, key) => {\r\n res.setHeader(key, value);\r\n });\r\n\r\n // Send body\r\n if (response.body) {\r\n // Check content type to determine how to send the response\r\n const contentType = response.headers.get('content-type') || '';\r\n\r\n if (contentType.includes('application/json')) {\r\n const json = await response.json();\r\n res.json(json);\r\n } else if (contentType.includes('text/')) {\r\n const text = await response.text();\r\n res.send(text);\r\n } else {\r\n // For binary data, stream it\r\n const buffer = await response.arrayBuffer();\r\n res.send(Buffer.from(buffer));\r\n }\r\n } else {\r\n res.end();\r\n }\r\n }\r\n\r\n /**\r\n * Start the Express server on the specified port\r\n */\r\n listen(port: number, callback?: () => void): any {\r\n return this.express.listen(port, callback);\r\n }\r\n\r\n /**\r\n * Get the Express app instance\r\n * This allows users to add additional Express middleware or routes\r\n */\r\n getHandler(): any {\r\n return this.express;\r\n }\r\n\r\n /**\r\n * Get the underlying Express app for advanced customization\r\n */\r\n getExpressApp(): any {\r\n return this.express;\r\n }\r\n}\r\n",
8
+ "import type { Context, Middleware, CorsOptions } from '../types';\r\n\r\n/**\r\n * Create CORS middleware with configurable options\r\n * Handles preflight requests and adds appropriate CORS headers\r\n */\r\nexport function createCorsMiddleware(options?: CorsOptions): Middleware {\r\n const {\r\n origin = '*',\r\n methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\r\n allowedHeaders = ['Content-Type', 'Authorization'],\r\n exposedHeaders = [],\r\n credentials = false,\r\n maxAge = 86400 // 24 hours default\r\n } = options || {};\r\n\r\n return async (c: Context, next) => {\r\n const requestOrigin = c.req.header('origin');\r\n const requestMethod = c.req.method;\r\n\r\n // Determine if origin is allowed\r\n let allowedOrigin: string | null = null;\r\n\r\n if (typeof origin === 'string') {\r\n allowedOrigin = origin;\r\n } else if (Array.isArray(origin)) {\r\n if (requestOrigin && origin.includes(requestOrigin)) {\r\n allowedOrigin = requestOrigin;\r\n }\r\n } else if (typeof origin === 'function') {\r\n if (requestOrigin && origin(requestOrigin)) {\r\n allowedOrigin = requestOrigin;\r\n }\r\n }\r\n\r\n // Set CORS headers\r\n if (allowedOrigin) {\r\n c.header('Access-Control-Allow-Origin', allowedOrigin);\r\n }\r\n\r\n if (credentials) {\r\n c.header('Access-Control-Allow-Credentials', 'true');\r\n }\r\n\r\n if (exposedHeaders.length > 0) {\r\n c.header('Access-Control-Expose-Headers', exposedHeaders.join(', '));\r\n }\r\n\r\n // Handle preflight requests\r\n if (requestMethod === 'OPTIONS') {\r\n c.header('Access-Control-Allow-Methods', methods.join(', '));\r\n c.header('Access-Control-Allow-Headers', allowedHeaders.join(', '));\r\n c.header('Access-Control-Max-Age', maxAge.toString());\r\n \r\n return c.body(null, 204);\r\n }\r\n\r\n // Continue to next middleware/handler\r\n await next();\r\n };\r\n}\r\n",
9
+ "import type { Context, Middleware, RateLimitOptions } from '../types';\r\n\r\n/**\r\n * Rate limit record for tracking requests\r\n */\r\ninterface RateLimitRecord {\r\n count: number;\r\n resetTime: number;\r\n}\r\n\r\n/**\r\n * Create rate limiting middleware\r\n * Tracks requests per IP/key and returns 429 when limit exceeded\r\n */\r\nexport function createRateLimitMiddleware(options: RateLimitOptions): Middleware {\r\n const {\r\n windowMs = 60000, // 1 minute default\r\n max = 100, // 100 requests per window default\r\n keyGenerator = (c: Context) => {\r\n // Default: use X-Forwarded-For header or fallback to 'unknown'\r\n return c.req.header('x-forwarded-for') || \r\n c.req.header('x-real-ip') || \r\n 'unknown';\r\n }\r\n } = options;\r\n\r\n // In-memory storage for rate limit records\r\n const requests = new Map<string, RateLimitRecord>();\r\n\r\n // Cleanup old entries periodically to prevent memory leaks\r\n const cleanupInterval = setInterval(() => {\r\n const now = Date.now();\r\n for (const [key, record] of requests.entries()) {\r\n if (now > record.resetTime) {\r\n requests.delete(key);\r\n }\r\n }\r\n }, windowMs);\r\n\r\n // Cleanup on process exit (if supported)\r\n if (typeof process !== 'undefined' && process.on) {\r\n process.on('exit', () => clearInterval(cleanupInterval));\r\n }\r\n\r\n return async (c: Context, next) => {\r\n const key = keyGenerator(c);\r\n const now = Date.now();\r\n const record = requests.get(key);\r\n\r\n if (!record || now > record.resetTime) {\r\n // New window - reset counter\r\n requests.set(key, { \r\n count: 1, \r\n resetTime: now + windowMs \r\n });\r\n\r\n // Add rate limit headers\r\n c.header('X-RateLimit-Limit', max.toString());\r\n c.header('X-RateLimit-Remaining', (max - 1).toString());\r\n c.header('X-RateLimit-Reset', new Date(now + windowMs).toISOString());\r\n\r\n await next();\r\n } else if (record.count < max) {\r\n // Within limit - increment counter\r\n record.count++;\r\n\r\n // Add rate limit headers\r\n c.header('X-RateLimit-Limit', max.toString());\r\n c.header('X-RateLimit-Remaining', (max - record.count).toString());\r\n c.header('X-RateLimit-Reset', new Date(record.resetTime).toISOString());\r\n\r\n await next();\r\n } else {\r\n // Rate limit exceeded\r\n const retryAfter = Math.ceil((record.resetTime - now) / 1000);\r\n\r\n c.header('X-RateLimit-Limit', max.toString());\r\n c.header('X-RateLimit-Remaining', '0');\r\n c.header('X-RateLimit-Reset', new Date(record.resetTime).toISOString());\r\n c.header('Retry-After', retryAfter.toString());\r\n\r\n return c.json(\r\n {\r\n error: 'Too Many Requests',\r\n message: `Rate limit exceeded. Please try again in ${retryAfter} seconds.`,\r\n retryAfter\r\n },\r\n 429\r\n );\r\n }\r\n };\r\n}\r\n",
10
+ "import type { Context, Middleware, CompressionOptions } from '../types';\r\n\r\n/**\r\n * Create compression middleware\r\n * Compresses responses with gzip or brotli based on Accept-Encoding header\r\n */\r\nexport function createCompressionMiddleware(options?: CompressionOptions): Middleware {\r\n const {\r\n threshold = 1024, // Only compress responses larger than 1KB\r\n level = 6 // Compression level (1-9 for gzip, 0-11 for brotli)\r\n } = options || {};\r\n\r\n return async (c: Context, next) => {\r\n // Continue to next middleware/handler first\r\n await next();\r\n\r\n // Get the response\r\n const response = c.res;\r\n if (!response) {\r\n return;\r\n }\r\n\r\n // Check if response should be compressed\r\n const contentType = response.headers.get('content-type') || '';\r\n const contentLength = response.headers.get('content-length');\r\n const acceptEncoding = c.req.header('accept-encoding') || '';\r\n\r\n // Skip compression for certain content types\r\n const compressibleTypes = [\r\n 'text/',\r\n 'application/json',\r\n 'application/javascript',\r\n 'application/xml',\r\n 'application/x-www-form-urlencoded'\r\n ];\r\n\r\n const isCompressible = compressibleTypes.some(type => \r\n contentType.toLowerCase().includes(type)\r\n );\r\n\r\n if (!isCompressible) {\r\n return;\r\n }\r\n\r\n // Skip if response is too small\r\n if (contentLength && parseInt(contentLength) < threshold) {\r\n return;\r\n }\r\n\r\n // Skip if already encoded\r\n if (response.headers.get('content-encoding')) {\r\n return;\r\n }\r\n\r\n // Get response body\r\n const body = await response.arrayBuffer();\r\n \r\n // Skip if body is too small\r\n if (body.byteLength < threshold) {\r\n return;\r\n }\r\n\r\n // Determine compression method\r\n let compressed: Uint8Array | null = null;\r\n let encoding: string | null = null;\r\n\r\n // Try brotli first (better compression)\r\n if (acceptEncoding.includes('br') && typeof CompressionStream !== 'undefined') {\r\n try {\r\n const stream = new CompressionStream('deflate');\r\n const writer = stream.writable.getWriter();\r\n writer.write(new Uint8Array(body));\r\n writer.close();\r\n \r\n const reader = stream.readable.getReader();\r\n const chunks: Uint8Array[] = [];\r\n \r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n chunks.push(value);\r\n }\r\n \r\n const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n result.set(chunk, offset);\r\n offset += chunk.length;\r\n }\r\n \r\n compressed = result;\r\n encoding = 'deflate';\r\n } catch (error) {\r\n // Fallback to gzip\r\n compressed = null;\r\n }\r\n }\r\n\r\n // Try gzip if brotli not available or failed\r\n if (!compressed && acceptEncoding.includes('gzip') && typeof CompressionStream !== 'undefined') {\r\n try {\r\n const stream = new CompressionStream('gzip');\r\n const writer = stream.writable.getWriter();\r\n writer.write(new Uint8Array(body));\r\n writer.close();\r\n \r\n const reader = stream.readable.getReader();\r\n const chunks: Uint8Array[] = [];\r\n \r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n chunks.push(value);\r\n }\r\n \r\n const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\r\n const result = new Uint8Array(totalLength);\r\n let offset = 0;\r\n for (const chunk of chunks) {\r\n result.set(chunk, offset);\r\n offset += chunk.length;\r\n }\r\n \r\n compressed = result;\r\n encoding = 'gzip';\r\n } catch (error) {\r\n // Compression failed, use original\r\n compressed = null;\r\n }\r\n }\r\n\r\n // If compression succeeded and resulted in smaller size, use it\r\n if (compressed && encoding && compressed.byteLength < body.byteLength) {\r\n // Create new response with compressed body\r\n const headers = new Headers(response.headers);\r\n headers.set('content-encoding', encoding);\r\n headers.set('content-length', compressed.byteLength.toString());\r\n headers.delete('content-length'); // Let the runtime set it\r\n \r\n // Update the response\r\n const newResponse = new Response(compressed, {\r\n status: response.status,\r\n statusText: response.statusText,\r\n headers\r\n });\r\n\r\n // Replace the response in context\r\n // Note: This is a workaround since Hono's context doesn't allow direct response replacement\r\n // In practice, this middleware should be used with Hono's compress middleware\r\n return newResponse;\r\n }\r\n };\r\n}\r\n",
11
+ "export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n if (def.description) {\n try {\n return {\n ...jsonSchema,\n ...JSON.parse(def.description),\n };\n }\n catch { }\n }\n return jsonSchema;\n};\nexport const defaultOptions = {\n name: undefined,\n $refStrategy: \"root\",\n basePath: [\"#\"],\n effectStrategy: \"input\",\n pipeStrategy: \"all\",\n dateStrategy: \"format:date-time\",\n mapStrategy: \"entries\",\n removeAdditionalStrategy: \"passthrough\",\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: \"definitions\",\n target: \"jsonSchema7\",\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n markdownDescription: false,\n patternStrategy: \"escape\",\n applyRegexFlags: false,\n emailStrategy: \"format:email\",\n base64Strategy: \"contentEncoding:base64\",\n nameStrategy: \"ref\",\n openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n ? {\n ...defaultOptions,\n name: options,\n }\n : {\n ...defaultOptions,\n ...options,\n });\n",
12
+ "import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n const _options = getDefaultOptions(options);\n const currentPath = _options.name !== undefined\n ? [..._options.basePath, _options.definitionPath, _options.name]\n : _options.basePath;\n return {\n ..._options,\n flags: { hasReferencedOpenAiAnyType: false },\n currentPath: currentPath,\n propertyPath: undefined,\n seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: undefined,\n },\n ])),\n };\n};\n",
13
+ "export function addErrorMessage(res, key, errorMessage, refs) {\n if (!refs?.errorMessages)\n return;\n if (errorMessage) {\n res.errorMessage = {\n ...res.errorMessage,\n [key]: errorMessage,\n };\n }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n res[key] = value;\n addErrorMessage(res, key, errorMessage, refs);\n}\n",
14
+ "export const getRelativePath = (pathA, pathB) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i])\n break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n",
15
+ "export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n",
16
+ "import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n",
17
+ "import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n",
18
+ "import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n",
19
+ "import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n",
20
+ "export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n",
21
+ "import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n",
22
+ "import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n if (refs.target !== \"openAi\") {\n return {};\n }\n const anyDefinitionPath = [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ];\n refs.flags.hasReferencedOpenAiAnyType = true;\n return {\n $ref: refs.$refStrategy === \"relative\"\n ? getRelativePath(anyDefinitionPath, refs.currentPath)\n : anyDefinitionPath.join(\"/\"),\n };\n}\n",
23
+ "import { ZodFirstPartyTypeKind } from \"zod\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n const res = {\n type: \"array\",\n };\n if (def.type?._def &&\n def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n }\n if (def.minLength) {\n setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n }\n if (def.maxLength) {\n setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n }\n if (def.exactLength) {\n setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n }\n return res;\n}\n",
24
+ "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n const res = {\n type: \"integer\",\n format: \"int64\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n",
25
+ "export function parseBooleanDef() {\n return {\n type: \"boolean\",\n };\n}\n",
26
+ "import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n return parseDef(_def.type._def, refs);\n}\n",
27
+ "import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n",
28
+ "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n const strategy = overrideDateStrategy ?? refs.dateStrategy;\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n };\n }\n switch (strategy) {\n case \"string\":\n case \"format:date-time\":\n return {\n type: \"string\",\n format: \"date-time\",\n };\n case \"format:date\":\n return {\n type: \"string\",\n format: \"date\",\n };\n case \"integer\":\n return integerDateParser(def, refs);\n }\n}\nconst integerDateParser = (def, refs) => {\n const res = {\n type: \"integer\",\n format: \"unix-time\",\n };\n if (refs.target === \"openApi3\") {\n return res;\n }\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n check.message, refs);\n break;\n }\n }\n return res;\n};\n",
29
+ "import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue(),\n };\n}\n",
30
+ "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n return refs.effectStrategy === \"input\"\n ? parseDef(_def.schema._def, refs)\n : parseAnyDef(refs);\n}\n",
31
+ "export function parseEnumDef(def) {\n return {\n type: \"string\",\n enum: Array.from(def.values),\n };\n}\n",
32
+ "import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n if (\"type\" in type && type.type === \"string\")\n return false;\n return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n const allOf = [\n parseDef(def.left._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n }),\n parseDef(def.right._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n }),\n ].filter((x) => !!x);\n let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n ? { unevaluatedProperties: false }\n : undefined;\n const mergedAllOf = [];\n // If either of the schemas is an allOf, merge them into a single allOf\n allOf.forEach((schema) => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n if (schema.unevaluatedProperties === undefined) {\n // If one of the schemas has no unevaluatedProperties set,\n // the merged schema should also have no unevaluatedProperties set\n unevaluatedProperties = undefined;\n }\n }\n else {\n let nestedSchema = schema;\n if (\"additionalProperties\" in schema &&\n schema.additionalProperties === false) {\n const { additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n else {\n // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n unevaluatedProperties = undefined;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length\n ? {\n allOf: mergedAllOf,\n ...unevaluatedProperties,\n }\n : undefined;\n}\n",
33
+ "export function parseLiteralDef(def, refs) {\n const parsedType = typeof def.value;\n if (parsedType !== \"bigint\" &&\n parsedType !== \"number\" &&\n parsedType !== \"boolean\" &&\n parsedType !== \"string\") {\n return {\n type: Array.isArray(def.value) ? \"array\" : \"object\",\n };\n }\n if (refs.target === \"openApi3\") {\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n enum: [def.value],\n };\n }\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n const: def.value,\n };\n}\n",
34
+ "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n /**\n * `c` was changed to `[cC]` to replicate /i flag\n */\n cuid: /^[cC][^\\s-]{8,}$/,\n cuid2: /^[0-9a-z]+$/,\n ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n /**\n * `a-z` was added to replicate /i flag\n */\n email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n /**\n * Constructed a valid Unicode RegExp\n *\n * Lazily instantiate since this type of regex isn't supported\n * in all envs (e.g. React Native).\n *\n * See:\n * https://github.com/colinhacks/zod/issues/2433\n * Fix in Zod:\n * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n */\n emoji: () => {\n if (emojiRegex === undefined) {\n emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n /**\n * Unused\n */\n ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n nanoid: /^[a-zA-Z0-9_-]{21}$/,\n jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n const res = {\n type: \"string\",\n };\n if (def.checks) {\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"max\":\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"email\":\n switch (refs.emailStrategy) {\n case \"format:email\":\n addFormat(res, \"email\", check.message, refs);\n break;\n case \"format:idn-email\":\n addFormat(res, \"idn-email\", check.message, refs);\n break;\n case \"pattern:zod\":\n addPattern(res, zodPatterns.email, check.message, refs);\n break;\n }\n break;\n case \"url\":\n addFormat(res, \"uri\", check.message, refs);\n break;\n case \"uuid\":\n addFormat(res, \"uuid\", check.message, refs);\n break;\n case \"regex\":\n addPattern(res, check.regex, check.message, refs);\n break;\n case \"cuid\":\n addPattern(res, zodPatterns.cuid, check.message, refs);\n break;\n case \"cuid2\":\n addPattern(res, zodPatterns.cuid2, check.message, refs);\n break;\n case \"startsWith\":\n addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n break;\n case \"endsWith\":\n addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n ? Math.max(res.minLength, check.value)\n : check.value, check.message, refs);\n setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n ? Math.min(res.maxLength, check.value)\n : check.value, check.message, refs);\n break;\n case \"includes\": {\n addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n break;\n }\n case \"pattern:zod\": {\n addPattern(res, zodPatterns.base64, check.message, refs);\n break;\n }\n }\n break;\n }\n case \"nanoid\": {\n addPattern(res, zodPatterns.nanoid, check.message, refs);\n }\n case \"toLowerCase\":\n case \"toUpperCase\":\n case \"trim\":\n break;\n default:\n /* c8 ignore next */\n ((_) => { })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\"\n ? escapeNonAlphaNumeric(literal)\n : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n let result = \"\";\n for (let i = 0; i < source.length; i++) {\n if (!ALPHA_NUMERIC.has(source[i])) {\n result += \"\\\\\";\n }\n result += source[i];\n }\n return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n if (schema.format || schema.anyOf?.some((x) => x.format)) {\n if (!schema.anyOf) {\n schema.anyOf = [];\n }\n if (schema.format) {\n schema.anyOf.push({\n format: schema.format,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { format: schema.errorMessage.format },\n }),\n });\n delete schema.format;\n if (schema.errorMessage) {\n delete schema.errorMessage.format;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.anyOf.push({\n format: value,\n ...(message &&\n refs.errorMessages && { errorMessage: { format: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"format\", value, message, refs);\n }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n if (!schema.allOf) {\n schema.allOf = [];\n }\n if (schema.pattern) {\n schema.allOf.push({\n pattern: schema.pattern,\n ...(schema.errorMessage &&\n refs.errorMessages && {\n errorMessage: { pattern: schema.errorMessage.pattern },\n }),\n });\n delete schema.pattern;\n if (schema.errorMessage) {\n delete schema.errorMessage.pattern;\n if (Object.keys(schema.errorMessage).length === 0) {\n delete schema.errorMessage;\n }\n }\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...(message &&\n refs.errorMessages && { errorMessage: { pattern: message } }),\n });\n }\n else {\n setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n // Currently handled flags\n const flags = {\n i: regex.flags.includes(\"i\"),\n m: regex.flags.includes(\"m\"),\n s: regex.flags.includes(\"s\"), // `.` matches newlines\n };\n // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n const source = flags.i ? regex.source.toLowerCase() : regex.source;\n let pattern = \"\";\n let isEscaped = false;\n let inCharGroup = false;\n let inCharRange = false;\n for (let i = 0; i < source.length; i++) {\n if (isEscaped) {\n pattern += source[i];\n isEscaped = false;\n continue;\n }\n if (flags.i) {\n if (inCharGroup) {\n if (source[i].match(/[a-z]/)) {\n if (inCharRange) {\n pattern += source[i];\n pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n inCharRange = false;\n }\n else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n pattern += source[i];\n inCharRange = true;\n }\n else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n }\n else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\\n]))`;\n continue;\n }\n else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\\n]))`;\n continue;\n }\n }\n if (flags.s && source[i] === \".\") {\n pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n continue;\n }\n pattern += source[i];\n if (source[i] === \"\\\\\") {\n isEscaped = true;\n }\n else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n }\n else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n }\n catch {\n console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n return regex.source;\n }\n return pattern;\n}\n",
35
+ "import { ZodFirstPartyTypeKind, } from \"zod\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n if (refs.target === \"openAi\") {\n console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n }\n if (refs.target === \"openApi3\" &&\n def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n type: \"object\",\n required: def.keyType._def.values,\n properties: def.keyType._def.values.reduce((acc, key) => ({\n ...acc,\n [key]: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", key],\n }) ?? parseAnyDef(refs),\n }), {}),\n additionalProperties: refs.rejectedAdditionalProperties,\n };\n }\n const schema = {\n type: \"object\",\n additionalProperties: parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n }) ?? refs.allowedAdditionalProperties,\n };\n if (refs.target === \"openApi3\") {\n return schema;\n }\n if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.checks?.length) {\n const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values,\n },\n };\n }\n else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n def.keyType._def.type._def.checks?.length) {\n const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType,\n };\n }\n return schema;\n}\n",
36
+ "import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n if (refs.mapStrategy === \"record\") {\n return parseRecordDef(def, refs);\n }\n const keys = parseDef(def.keyType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n }) || parseAnyDef(refs);\n const values = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n }) || parseAnyDef(refs);\n return {\n type: \"array\",\n maxItems: 125,\n items: {\n type: \"array\",\n items: [keys, values],\n minItems: 2,\n maxItems: 2,\n },\n };\n}\n",
37
+ "export function parseNativeEnumDef(def) {\n const object = def.values;\n const actualKeys = Object.keys(def.values).filter((key) => {\n return typeof object[object[key]] !== \"number\";\n });\n const actualValues = actualKeys.map((key) => object[key]);\n const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n return {\n type: parsedTypes.length === 1\n ? parsedTypes[0] === \"string\"\n ? \"string\"\n : \"number\"\n : [\"string\", \"number\"],\n enum: actualValues,\n };\n}\n",
38
+ "import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n return refs.target === \"openAi\"\n ? undefined\n : {\n not: parseAnyDef({\n ...refs,\n currentPath: [...refs.currentPath, \"not\"],\n }),\n };\n}\n",
39
+ "export function parseNullDef(refs) {\n return refs.target === \"openApi3\"\n ? {\n enum: [\"null\"],\n nullable: true,\n }\n : {\n type: \"null\",\n };\n}\n",
40
+ "import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n ZodString: \"string\",\n ZodNumber: \"number\",\n ZodBigInt: \"integer\",\n ZodBoolean: \"boolean\",\n ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n if (refs.target === \"openApi3\")\n return asAnyOf(def, refs);\n const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n if (options.every((x) => x._def.typeName in primitiveMappings &&\n (!x._def.checks || !x._def.checks.length))) {\n // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n const types = options.reduce((types, x) => {\n const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n return type && !types.includes(type) ? [...types, type] : types;\n }, []);\n return {\n type: types.length > 1 ? types : types[0],\n };\n }\n else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n // all options literals\n const types = options.reduce((acc, x) => {\n const type = typeof x._def.value;\n switch (type) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n return [...acc, type];\n case \"bigint\":\n return [...acc, \"integer\"];\n case \"object\":\n if (x._def.value === null)\n return [...acc, \"null\"];\n case \"symbol\":\n case \"undefined\":\n case \"function\":\n default:\n return acc;\n }\n }, []);\n if (types.length === options.length) {\n // all the literals are primitive, as far as null can be considered primitive\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce((acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n }, []),\n };\n }\n }\n else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n return {\n type: \"string\",\n enum: options.reduce((acc, x) => [\n ...acc,\n ...x._def.values.filter((x) => !acc.includes(x)),\n ], []),\n };\n }\n return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n const anyOf = (def.options instanceof Map\n ? Array.from(def.options.values())\n : def.options)\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n }))\n .filter((x) => !!x &&\n (!refs.strictUnions ||\n (typeof x === \"object\" && Object.keys(x).length > 0)));\n return anyOf.length ? { anyOf } : undefined;\n};\n",
41
+ "import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n if (refs.target === \"openApi3\") {\n return {\n type: primitiveMappings[def.innerType._def.typeName],\n nullable: true,\n };\n }\n return {\n type: [\n primitiveMappings[def.innerType._def.typeName],\n \"null\",\n ],\n };\n }\n if (refs.target === \"openApi3\") {\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath],\n });\n if (base && \"$ref\" in base)\n return { allOf: [base], nullable: true };\n return base && { ...base, nullable: true };\n }\n const base = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n });\n return base && { anyOf: [base, { type: \"null\" }] };\n}\n",
42
+ "import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n const res = {\n type: \"number\",\n };\n if (!def.checks)\n return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"int\":\n res.type = \"integer\";\n addErrorMessage(res, \"type\", check.message, refs);\n break;\n case \"min\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMinimum = true;\n }\n setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n }\n break;\n case \"max\":\n if (refs.target === \"jsonSchema7\") {\n if (check.inclusive) {\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n else {\n setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n }\n }\n else {\n if (!check.inclusive) {\n res.exclusiveMaximum = true;\n }\n setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n }\n break;\n case \"multipleOf\":\n setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n break;\n }\n }\n return res;\n}\n",
43
+ "import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n const forceOptionalIntoNullable = refs.target === \"openAi\";\n const result = {\n type: \"object\",\n properties: {},\n };\n const required = [];\n const shape = def.shape();\n for (const propName in shape) {\n let propDef = shape[propName];\n if (propDef === undefined || propDef._def === undefined) {\n continue;\n }\n let propOptional = safeIsOptional(propDef);\n if (propOptional && forceOptionalIntoNullable) {\n if (propDef._def.typeName === \"ZodOptional\") {\n propDef = propDef._def.innerType;\n }\n if (!propDef.isNullable()) {\n propDef = propDef.nullable();\n }\n propOptional = false;\n }\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", propName],\n propertyPath: [...refs.currentPath, \"properties\", propName],\n });\n if (parsedDef === undefined) {\n continue;\n }\n result.properties[propName] = parsedDef;\n if (!propOptional) {\n required.push(propName);\n }\n }\n if (required.length) {\n result.required = required;\n }\n const additionalProperties = decideAdditionalProperties(def, refs);\n if (additionalProperties !== undefined) {\n result.additionalProperties = additionalProperties;\n }\n return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n if (def.catchall._def.typeName !== \"ZodNever\") {\n return parseDef(def.catchall._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"],\n });\n }\n switch (def.unknownKeys) {\n case \"passthrough\":\n return refs.allowedAdditionalProperties;\n case \"strict\":\n return refs.rejectedAdditionalProperties;\n case \"strip\":\n return refs.removeAdditionalStrategy === \"strict\"\n ? refs.allowedAdditionalProperties\n : refs.rejectedAdditionalProperties;\n }\n}\nfunction safeIsOptional(schema) {\n try {\n return schema.isOptional();\n }\n catch {\n return true;\n }\n}\n",
44
+ "import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n return parseDef(def.innerType._def, refs);\n }\n const innerSchema = parseDef(def.innerType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n });\n return innerSchema\n ? {\n anyOf: [\n {\n not: parseAnyDef(refs),\n },\n innerSchema,\n ],\n }\n : parseAnyDef(refs);\n};\n",
45
+ "import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n if (refs.pipeStrategy === \"input\") {\n return parseDef(def.in._def, refs);\n }\n else if (refs.pipeStrategy === \"output\") {\n return parseDef(def.out._def, refs);\n }\n const a = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n });\n const b = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n });\n return {\n allOf: [a, b].filter((x) => x !== undefined),\n };\n};\n",
46
+ "import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n return parseDef(def.type._def, refs);\n}\n",
47
+ "import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n const items = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"],\n });\n const schema = {\n type: \"array\",\n uniqueItems: true,\n items,\n };\n if (def.minSize) {\n setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n }\n if (def.maxSize) {\n setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n }\n return schema;\n}\n",
48
+ "import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n if (def.rest) {\n return {\n type: \"array\",\n minItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalItems\"],\n }),\n };\n }\n else {\n return {\n type: \"array\",\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items\n .map((x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`],\n }))\n .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n };\n }\n}\n",
49
+ "import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n return {\n not: parseAnyDef(refs),\n };\n}\n",
50
+ "import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n return parseAnyDef(refs);\n}\n",
51
+ "import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n",
52
+ "import { ZodFirstPartyTypeKind } from \"zod\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n switch (typeName) {\n case ZodFirstPartyTypeKind.ZodString:\n return parseStringDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNumber:\n return parseNumberDef(def, refs);\n case ZodFirstPartyTypeKind.ZodObject:\n return parseObjectDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBigInt:\n return parseBigintDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBoolean:\n return parseBooleanDef();\n case ZodFirstPartyTypeKind.ZodDate:\n return parseDateDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUndefined:\n return parseUndefinedDef(refs);\n case ZodFirstPartyTypeKind.ZodNull:\n return parseNullDef(refs);\n case ZodFirstPartyTypeKind.ZodArray:\n return parseArrayDef(def, refs);\n case ZodFirstPartyTypeKind.ZodUnion:\n case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n return parseUnionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodIntersection:\n return parseIntersectionDef(def, refs);\n case ZodFirstPartyTypeKind.ZodTuple:\n return parseTupleDef(def, refs);\n case ZodFirstPartyTypeKind.ZodRecord:\n return parseRecordDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLiteral:\n return parseLiteralDef(def, refs);\n case ZodFirstPartyTypeKind.ZodEnum:\n return parseEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNativeEnum:\n return parseNativeEnumDef(def);\n case ZodFirstPartyTypeKind.ZodNullable:\n return parseNullableDef(def, refs);\n case ZodFirstPartyTypeKind.ZodOptional:\n return parseOptionalDef(def, refs);\n case ZodFirstPartyTypeKind.ZodMap:\n return parseMapDef(def, refs);\n case ZodFirstPartyTypeKind.ZodSet:\n return parseSetDef(def, refs);\n case ZodFirstPartyTypeKind.ZodLazy:\n return () => def.getter()._def;\n case ZodFirstPartyTypeKind.ZodPromise:\n return parsePromiseDef(def, refs);\n case ZodFirstPartyTypeKind.ZodNaN:\n case ZodFirstPartyTypeKind.ZodNever:\n return parseNeverDef(refs);\n case ZodFirstPartyTypeKind.ZodEffects:\n return parseEffectsDef(def, refs);\n case ZodFirstPartyTypeKind.ZodAny:\n return parseAnyDef(refs);\n case ZodFirstPartyTypeKind.ZodUnknown:\n return parseUnknownDef(refs);\n case ZodFirstPartyTypeKind.ZodDefault:\n return parseDefaultDef(def, refs);\n case ZodFirstPartyTypeKind.ZodBranded:\n return parseBrandedDef(def, refs);\n case ZodFirstPartyTypeKind.ZodReadonly:\n return parseReadonlyDef(def, refs);\n case ZodFirstPartyTypeKind.ZodCatch:\n return parseCatchDef(def, refs);\n case ZodFirstPartyTypeKind.ZodPipeline:\n return parsePipelineDef(def, refs);\n case ZodFirstPartyTypeKind.ZodFunction:\n case ZodFirstPartyTypeKind.ZodVoid:\n case ZodFirstPartyTypeKind.ZodSymbol:\n return undefined;\n default:\n /* c8 ignore next */\n return ((_) => undefined)(typeName);\n }\n};\n",
53
+ "import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n const seenItem = refs.seen.get(def);\n if (refs.override) {\n const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n if (seenSchema !== undefined) {\n return seenSchema;\n }\n }\n const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n refs.seen.set(def, newItem);\n const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n ? parseDef(jsonSchemaOrGetter(), refs)\n : jsonSchemaOrGetter;\n if (jsonSchema) {\n addMeta(def, refs, jsonSchema);\n }\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n newItem.jsonSchema = jsonSchema;\n return postProcessResult;\n }\n newItem.jsonSchema = jsonSchema;\n return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n switch (refs.$refStrategy) {\n case \"root\":\n return { $ref: item.path.join(\"/\") };\n case \"relative\":\n return { $ref: getRelativePath(refs.currentPath, item.path) };\n case \"none\":\n case \"seen\": {\n if (item.path.length < refs.currentPath.length &&\n item.path.every((value, index) => refs.currentPath[index] === value)) {\n console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n return parseAnyDef(refs);\n }\n return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n }\n }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n if (def.description) {\n jsonSchema.description = def.description;\n if (refs.markdownDescription) {\n jsonSchema.markdownDescription = def.description;\n }\n }\n return jsonSchema;\n};\n",
54
+ "import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n const refs = getRefs(options);\n let definitions = typeof options === \"object\" && options.definitions\n ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n ...acc,\n [name]: parseDef(schema._def, {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, true) ?? parseAnyDef(refs),\n }), {})\n : undefined;\n const name = typeof options === \"string\"\n ? options\n : options?.nameStrategy === \"title\"\n ? undefined\n : options?.name;\n const main = parseDef(schema._def, name === undefined\n ? refs\n : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name],\n }, false) ?? parseAnyDef(refs);\n const title = typeof options === \"object\" &&\n options.name !== undefined &&\n options.nameStrategy === \"title\"\n ? options.name\n : undefined;\n if (title !== undefined) {\n main.title = title;\n }\n if (refs.flags.hasReferencedOpenAiAnyType) {\n if (!definitions) {\n definitions = {};\n }\n if (!definitions[refs.openAiAnyTypeName]) {\n definitions[refs.openAiAnyTypeName] = {\n // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n items: {\n $ref: refs.$refStrategy === \"relative\"\n ? \"1\"\n : [\n ...refs.basePath,\n refs.definitionPath,\n refs.openAiAnyTypeName,\n ].join(\"/\"),\n },\n };\n }\n }\n const combined = name === undefined\n ? definitions\n ? {\n ...main,\n [refs.definitionPath]: definitions,\n }\n : main\n : {\n $ref: [\n ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n refs.definitionPath,\n name,\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name]: main,\n },\n };\n if (refs.target === \"jsonSchema7\") {\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n }\n if (refs.target === \"openAi\" &&\n (\"anyOf\" in combined ||\n \"oneOf\" in combined ||\n \"allOf\" in combined ||\n (\"type\" in combined && Array.isArray(combined.type)))) {\n console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n }\n return combined;\n};\nexport { zodToJsonSchema };\n",
55
+ "// Zod to JSON Schema converter with support for reusable schemas\r\nimport type { ZodSchema } from 'zod';\r\nimport type { OpenAPISpec } from '../types';\r\nimport { zodToJsonSchema as baseZodToJsonSchema } from 'zod-to-json-schema';\r\n\r\n/**\r\n * Schema cache to track schemas that should be reusable components\r\n */\r\nconst schemaCache = new WeakMap<ZodSchema, string>();\r\nlet schemaCounter = 0;\r\n\r\n/**\r\n * Convert Zod schema to JSON Schema format\r\n * Handles primitive types, objects, arrays, unions, and generates reusable schemas\r\n */\r\nexport class ZodToJsonSchemaConverter {\r\n private spec: OpenAPISpec;\r\n private generatedSchemas: Set<string> = new Set();\r\n\r\n constructor(spec: OpenAPISpec) {\r\n this.spec = spec;\r\n }\r\n\r\n /**\r\n * Convert a Zod schema to JSON Schema\r\n * Automatically generates reusable schemas in components/schemas for complex types\r\n */\r\n convert(schema: ZodSchema, options?: { name?: string; reusable?: boolean }): any {\r\n try {\r\n // Check if this schema should be a reusable component\r\n if (options?.reusable || this.shouldBeReusable(schema)) {\r\n return this.convertToReusableSchema(schema, options?.name);\r\n }\r\n\r\n // Convert inline\r\n return this.convertInline(schema);\r\n } catch (error) {\r\n console.warn('Failed to convert Zod schema to JSON Schema:', error);\r\n return { type: 'object' };\r\n }\r\n }\r\n\r\n /**\r\n * Convert schema inline (not as a reusable component)\r\n */\r\n private convertInline(schema: ZodSchema): any {\r\n const jsonSchema = baseZodToJsonSchema(schema, {\r\n target: 'openApi3',\r\n $refStrategy: 'none'\r\n });\r\n\r\n // Remove $schema property as it's not needed in OpenAPI\r\n if (jsonSchema && typeof jsonSchema === 'object') {\r\n delete (jsonSchema as any).$schema;\r\n }\r\n\r\n return jsonSchema;\r\n }\r\n\r\n /**\r\n * Convert schema to a reusable component and return a $ref\r\n */\r\n private convertToReusableSchema(schema: ZodSchema, name?: string): any {\r\n // Check if we've already converted this schema\r\n const cachedName = schemaCache.get(schema);\r\n if (cachedName && this.generatedSchemas.has(cachedName)) {\r\n return { $ref: `#/components/schemas/${cachedName}` };\r\n }\r\n\r\n // Generate a name for the schema\r\n const schemaName = name || cachedName || this.generateSchemaName();\r\n schemaCache.set(schema, schemaName);\r\n this.generatedSchemas.add(schemaName);\r\n\r\n // Convert the schema\r\n const jsonSchema = this.convertInline(schema);\r\n\r\n // Store in components/schemas\r\n if (!this.spec.components) {\r\n this.spec.components = { schemas: {} };\r\n }\r\n if (!this.spec.components.schemas) {\r\n this.spec.components.schemas = {};\r\n }\r\n\r\n this.spec.components.schemas[schemaName] = jsonSchema;\r\n\r\n // Return a reference\r\n return { $ref: `#/components/schemas/${schemaName}` };\r\n }\r\n\r\n /**\r\n * Determine if a schema should be converted to a reusable component\r\n * Complex objects and arrays should be reusable\r\n */\r\n private shouldBeReusable(schema: ZodSchema): boolean {\r\n // Convert to JSON Schema to inspect structure\r\n const jsonSchema = this.convertInline(schema);\r\n\r\n // Objects with properties should be reusable\r\n if (jsonSchema.type === 'object' && jsonSchema.properties) {\r\n const propertyCount = Object.keys(jsonSchema.properties).length;\r\n return propertyCount > 2; // More than 2 properties = reusable\r\n }\r\n\r\n // Arrays with complex items should be reusable\r\n if (jsonSchema.type === 'array' && jsonSchema.items) {\r\n const items = jsonSchema.items;\r\n if (items.type === 'object' && items.properties) {\r\n return true;\r\n }\r\n }\r\n\r\n // Unions/anyOf should be reusable\r\n if (jsonSchema.anyOf || jsonSchema.oneOf || jsonSchema.allOf) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Generate a unique schema name\r\n */\r\n private generateSchemaName(): string {\r\n return `Schema${++schemaCounter}`;\r\n }\r\n\r\n /**\r\n * Reset the schema counter (useful for testing)\r\n */\r\n static resetCounter(): void {\r\n schemaCounter = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Helper function to convert Zod schema to JSON Schema\r\n * This is a simpler interface for one-off conversions\r\n */\r\nexport function zodToJsonSchema(schema: ZodSchema, spec?: OpenAPISpec): any {\r\n if (spec) {\r\n const converter = new ZodToJsonSchemaConverter(spec);\r\n return converter.convert(schema);\r\n }\r\n\r\n // Fallback to inline conversion without spec\r\n try {\r\n const jsonSchema = baseZodToJsonSchema(schema, {\r\n target: 'openApi3',\r\n $refStrategy: 'none'\r\n });\r\n\r\n if (jsonSchema && typeof jsonSchema === 'object') {\r\n delete (jsonSchema as any).$schema;\r\n }\r\n\r\n return jsonSchema;\r\n } catch (error) {\r\n console.warn('Failed to convert Zod schema to JSON Schema:', error);\r\n return { type: 'object' };\r\n }\r\n}\r\n",
56
+ "// OpenAPI Generator - Generates OpenAPI 3.0 specification from metadata\r\nimport type { \r\n OpenAPISpec, \r\n RouteMetadata, \r\n ParameterMetadata,\r\n ResponseMetadata,\r\n OpenAPIOptions \r\n} from '../types';\r\nimport type { MetadataRegistry } from '../core/metadata';\r\nimport type { ZodSchema } from 'zod';\r\nimport { ZodToJsonSchemaConverter } from './zod-to-json-schema';\r\n\r\n/**\r\n * OpenAPIGenerator generates OpenAPI 3.0 specification from route metadata\r\n */\r\nexport class OpenAPIGenerator {\r\n private options: Required<OpenAPIOptions>;\r\n private converter?: ZodToJsonSchemaConverter;\r\n\r\n constructor(\r\n private metadata: MetadataRegistry,\r\n options?: OpenAPIOptions\r\n ) {\r\n this.options = {\r\n title: options?.title || 'FastAPI-TS API',\r\n version: options?.version || '1.0.0',\r\n description: options?.description || 'API built with FastAPI-TS',\r\n path: options?.path || '/openapi.json',\r\n docsPath: options?.docsPath || '/docs',\r\n docs: options?.docs !== false\r\n };\r\n }\r\n\r\n /**\r\n * Generate complete OpenAPI 3.0 specification\r\n */\r\n generate(): OpenAPISpec {\r\n const routes = this.metadata.getRoutes();\r\n\r\n const spec: OpenAPISpec = {\r\n openapi: '3.0.0',\r\n info: {\r\n title: this.options.title,\r\n version: this.options.version,\r\n description: this.options.description\r\n },\r\n paths: {},\r\n components: {\r\n schemas: {}\r\n }\r\n };\r\n\r\n // Initialize converter with spec reference\r\n this.converter = new ZodToJsonSchemaConverter(spec);\r\n\r\n // Process each route and add to spec\r\n for (const route of routes) {\r\n this.addRouteToSpec(spec, route);\r\n }\r\n\r\n return spec;\r\n }\r\n\r\n /**\r\n * Add a single route to the OpenAPI specification\r\n */\r\n private addRouteToSpec(spec: OpenAPISpec, route: RouteMetadata): void {\r\n const path = this.convertPathToOpenAPI(route.path);\r\n const method = route.method.toLowerCase();\r\n\r\n // Skip if method is 'all' or 'options' (not standard OpenAPI methods)\r\n if (method === 'all' || method === 'options') {\r\n return;\r\n }\r\n\r\n // Initialize path object if it doesn't exist\r\n if (!spec.paths[path]) {\r\n spec.paths[path] = {};\r\n }\r\n\r\n // Build operation object\r\n const operation: any = {\r\n summary: route.docs?.summary,\r\n description: route.docs?.description,\r\n tags: route.docs?.tags || [],\r\n deprecated: route.docs?.deprecated || false,\r\n parameters: this.extractParameters(route, spec),\r\n responses: this.extractResponses(route, spec)\r\n };\r\n\r\n // Extract request body if present\r\n const requestBody = this.extractRequestBody(route, spec);\r\n if (requestBody) {\r\n operation.requestBody = requestBody;\r\n }\r\n\r\n // Remove empty arrays/objects\r\n if (operation.parameters.length === 0) {\r\n delete operation.parameters;\r\n }\r\n if (operation.tags.length === 0) {\r\n delete operation.tags;\r\n }\r\n\r\n // Add operation to spec\r\n spec.paths[path][method] = operation;\r\n }\r\n\r\n /**\r\n * Extract parameters (query, path, header, cookie) from route metadata\r\n */\r\n private extractParameters(route: RouteMetadata, spec: OpenAPISpec): any[] {\r\n const parameters: any[] = [];\r\n\r\n for (const param of route.parameters) {\r\n if (param.type === 'query' || param.type === 'param' || param.type === 'header' || param.type === 'cookie') {\r\n const paramSpec = this.parameterToOpenAPI(param, route.path, spec);\r\n if (paramSpec) {\r\n parameters.push(paramSpec);\r\n }\r\n }\r\n }\r\n\r\n return parameters;\r\n }\r\n\r\n /**\r\n * Extract request body from @Body parameters\r\n */\r\n private extractRequestBody(route: RouteMetadata, spec: OpenAPISpec): any | null {\r\n const bodyParam = route.parameters.find(p => p.type === 'body');\r\n\r\n if (!bodyParam || !bodyParam.schema) {\r\n return null;\r\n }\r\n\r\n return {\r\n required: bodyParam.required,\r\n content: {\r\n 'application/json': {\r\n schema: this.zodToOpenAPISchema(bodyParam.schema, spec)\r\n }\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Extract responses from route metadata\r\n */\r\n private extractResponses(route: RouteMetadata, spec: OpenAPISpec): Record<string, any> {\r\n const responses: Record<string, any> = {};\r\n\r\n // Add documented responses\r\n if (route.responses && route.responses.length > 0) {\r\n for (const response of route.responses) {\r\n responses[response.statusCode.toString()] = {\r\n description: response.description || this.getDefaultResponseDescription(response.statusCode),\r\n content: response.schema ? {\r\n 'application/json': {\r\n schema: this.zodToOpenAPISchema(response.schema, spec)\r\n }\r\n } : undefined\r\n };\r\n }\r\n } else {\r\n // Add default 200 response if no responses are documented\r\n responses['200'] = {\r\n description: 'Successful response',\r\n content: {\r\n 'application/json': {\r\n schema: { type: 'object' }\r\n }\r\n }\r\n };\r\n }\r\n\r\n // Always add 422 validation error response\r\n if (!responses['422']) {\r\n responses['422'] = {\r\n description: 'Validation error',\r\n content: {\r\n 'application/json': {\r\n schema: {\r\n type: 'object',\r\n properties: {\r\n error: { type: 'string' },\r\n details: {\r\n type: 'array',\r\n items: {\r\n type: 'object',\r\n properties: {\r\n path: { type: 'string' },\r\n message: { type: 'string' },\r\n code: { type: 'string' }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }\r\n\r\n return responses;\r\n }\r\n\r\n /**\r\n * Convert FastAPI-TS path format to OpenAPI format\r\n * Converts :param to {param}\r\n */\r\n private convertPathToOpenAPI(path: string): string {\r\n return path.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, '{$1}');\r\n }\r\n\r\n /**\r\n * Convert parameter metadata to OpenAPI parameter object\r\n */\r\n private parameterToOpenAPI(param: ParameterMetadata, routePath: string, spec: OpenAPISpec): any | null {\r\n let inValue: string;\r\n let name: string;\r\n\r\n switch (param.type) {\r\n case 'query':\r\n inValue = 'query';\r\n name = param.name || 'query';\r\n break;\r\n case 'param':\r\n inValue = 'path';\r\n // Extract parameter name from route path if not specified\r\n if (param.name) {\r\n name = param.name;\r\n } else {\r\n // Try to extract from path\r\n const match = routePath.match(/:([a-zA-Z_][a-zA-Z0-9_]*)/);\r\n name = match ? match[1] : 'id';\r\n }\r\n break;\r\n case 'header':\r\n inValue = 'header';\r\n name = param.name || 'X-Custom-Header';\r\n break;\r\n case 'cookie':\r\n inValue = 'cookie';\r\n name = param.name || 'session';\r\n break;\r\n default:\r\n return null;\r\n }\r\n\r\n const paramSpec: any = {\r\n name,\r\n in: inValue,\r\n required: param.required || inValue === 'path', // Path params are always required\r\n schema: param.schema \r\n ? this.zodToOpenAPISchema(param.schema, spec)\r\n : { type: 'string' }\r\n };\r\n\r\n return paramSpec;\r\n }\r\n\r\n /**\r\n * Convert Zod schema to OpenAPI schema\r\n * Uses our custom converter that handles reusable schemas\r\n */\r\n private zodToOpenAPISchema(schema: ZodSchema, spec: OpenAPISpec): any {\r\n if (!this.converter) {\r\n this.converter = new ZodToJsonSchemaConverter(spec);\r\n }\r\n return this.converter.convert(schema);\r\n }\r\n\r\n /**\r\n * Get default response description for status code\r\n */\r\n private getDefaultResponseDescription(statusCode: number): string {\r\n const descriptions: Record<number, string> = {\r\n 200: 'Successful response',\r\n 201: 'Created',\r\n 204: 'No content',\r\n 400: 'Bad request',\r\n 401: 'Unauthorized',\r\n 403: 'Forbidden',\r\n 404: 'Not found',\r\n 422: 'Validation error',\r\n 500: 'Internal server error'\r\n };\r\n\r\n return descriptions[statusCode] || 'Response';\r\n }\r\n}\r\n",
57
+ "// OpenAPI Plugin - Generates OpenAPI 3.0 specification and serves Swagger UI\r\nimport type { Plugin } from '../core/plugin';\r\nimport type { VeloceTS } from '../core/application';\r\nimport type { OpenAPIOptions } from '../types';\r\nimport { OpenAPIGenerator } from '../docs';\r\n\r\n/**\r\n * OpenAPIPlugin generates OpenAPI 3.0 specification from route metadata\r\n * and serves Swagger UI for interactive API documentation\r\n */\r\nexport class OpenAPIPlugin implements Plugin {\r\n name = 'openapi';\r\n version = '1.0.0';\r\n\r\n private options: Required<OpenAPIOptions>;\r\n\r\n constructor(options?: OpenAPIOptions) {\r\n this.options = {\r\n title: options?.title || 'FastAPI-TS API',\r\n version: options?.version || '1.0.0',\r\n description: options?.description || 'API built with FastAPI-TS',\r\n path: options?.path || '/openapi.json',\r\n docsPath: options?.docsPath || '/docs',\r\n docs: options?.docs !== false\r\n };\r\n }\r\n\r\n async install(app: VeloceTS): Promise<void> {\r\n // Get app config to merge with plugin options\r\n const appConfig = app.getConfig();\r\n if (appConfig.title) this.options.title = appConfig.title;\r\n if (appConfig.version) this.options.version = appConfig.version;\r\n if (appConfig.description) this.options.description = appConfig.description;\r\n\r\n // Register OpenAPI spec endpoint\r\n app.get(this.options.path, {\r\n handler: async () => {\r\n const spec = this.generateSpec(app);\r\n return spec;\r\n },\r\n docs: {\r\n summary: 'Get OpenAPI specification',\r\n description: 'Returns the OpenAPI 3.0 specification for this API',\r\n tags: ['Documentation']\r\n }\r\n });\r\n\r\n // Register Swagger UI endpoint if docs are enabled\r\n if (this.options.docs) {\r\n app.get(this.options.docsPath, {\r\n handler: async (c) => {\r\n return c.html(this.renderSwaggerUI());\r\n },\r\n docs: {\r\n summary: 'API Documentation',\r\n description: 'Interactive API documentation using Swagger UI',\r\n tags: ['Documentation']\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Generate OpenAPI 3.0 specification from application metadata\r\n */\r\n private generateSpec(app: VeloceTS) {\r\n const metadata = app.getMetadata();\r\n const generator = new OpenAPIGenerator(metadata, this.options);\r\n return generator.generate();\r\n }\r\n\r\n /**\r\n * Render Swagger UI HTML\r\n */\r\n private renderSwaggerUI(): string {\r\n return `\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"UTF-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>${this.options.title} - API Documentation</title>\r\n <link rel=\"stylesheet\" href=\"https://unpkg.com/swagger-ui-dist@5/swagger-ui.css\" />\r\n <style>\r\n body {\r\n margin: 0;\r\n padding: 0;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n <div id=\"swagger-ui\"></div>\r\n <script src=\"https://unpkg.com/swagger-ui-dist@5/swagger-ui-bundle.js\"></script>\r\n <script src=\"https://unpkg.com/swagger-ui-dist@5/swagger-ui-standalone-preset.js\"></script>\r\n <script>\r\n window.onload = function() {\r\n window.ui = SwaggerUIBundle({\r\n url: '${this.options.path}',\r\n dom_id: '#swagger-ui',\r\n deepLinking: true,\r\n presets: [\r\n SwaggerUIBundle.presets.apis,\r\n SwaggerUIStandalonePreset\r\n ],\r\n plugins: [\r\n SwaggerUIBundle.plugins.DownloadUrl\r\n ],\r\n layout: \"StandaloneLayout\"\r\n });\r\n };\r\n </script>\r\n</body>\r\n</html>\r\n `.trim();\r\n }\r\n}\r\n",
58
+ "// WebSocket connection wrapper\r\nimport type { WebSocketManager } from './manager';\r\n\r\n/**\r\n * WebSocketConnection wraps a native WebSocket with helper methods\r\n * for sending messages, broadcasting, and managing rooms\r\n */\r\nexport class WebSocketConnection {\r\n public readonly id: string;\r\n private _ws: WebSocket | null;\r\n\r\n constructor(\r\n ws: WebSocket,\r\n private manager: WebSocketManager,\r\n id?: string\r\n ) {\r\n this._ws = ws;\r\n this.id = id || crypto.randomUUID();\r\n }\r\n\r\n /**\r\n * Send a message to this specific connection\r\n * @param data - Data to send (will be JSON stringified)\r\n */\r\n send(data: any): void {\r\n if (!this._ws || this._ws.readyState !== WebSocket.OPEN) {\r\n return;\r\n }\r\n\r\n const message = typeof data === 'string' ? data : JSON.stringify(data);\r\n this._ws.send(message);\r\n }\r\n\r\n /**\r\n * Broadcast a message to all connections in a room (or all connections if no room specified)\r\n * @param data - Data to broadcast\r\n * @param room - Optional room name to broadcast to\r\n */\r\n broadcast(data: any, room?: string): void {\r\n this.manager.broadcast(data, room);\r\n }\r\n\r\n /**\r\n * Join a room\r\n * @param room - Room name to join\r\n */\r\n join(room: string): void {\r\n this.manager.joinRoom(this.id, room);\r\n }\r\n\r\n /**\r\n * Leave a room\r\n * @param room - Room name to leave\r\n */\r\n leave(room: string): void {\r\n this.manager.leaveRoom(this.id, room);\r\n }\r\n\r\n /**\r\n * Close the WebSocket connection\r\n * @param code - Optional close code\r\n * @param reason - Optional close reason\r\n */\r\n close(code?: number, reason?: string): void {\r\n if (this._ws && this._ws.readyState === WebSocket.OPEN) {\r\n this._ws.close(code, reason);\r\n }\r\n }\r\n\r\n /**\r\n * Get the native WebSocket instance\r\n */\r\n get native(): WebSocket | null {\r\n return this._ws;\r\n }\r\n\r\n /**\r\n * Check if the connection is open\r\n */\r\n get isOpen(): boolean {\r\n return this._ws !== null && this._ws.readyState === WebSocket.OPEN;\r\n }\r\n\r\n /**\r\n * Internal method to mark connection as closed\r\n */\r\n _markClosed(): void {\r\n this._ws = null;\r\n }\r\n}\r\n",
59
+ "// WebSocket manager for connection tracking and room management\r\nimport type { WebSocketMetadata, Class } from '../types';\r\nimport { WebSocketConnection } from './connection';\r\n\r\n/**\r\n * WebSocketManager handles WebSocket connection lifecycle,\r\n * connection tracking, and room-based broadcasting\r\n */\r\nexport class WebSocketManager {\r\n private connections: Map<string, WebSocketConnection> = new Map();\r\n private rooms: Map<string, Set<string>> = new Map();\r\n private connectionsByRoom: Map<string, Set<WebSocketConnection>> = new Map();\r\n\r\n /**\r\n * Register a new WebSocket connection\r\n * @param ws - Native WebSocket instance\r\n * @param metadata - WebSocket route metadata\r\n * @returns The created WebSocketConnection\r\n */\r\n handleConnection(ws: WebSocket, metadata: WebSocketMetadata): WebSocketConnection {\r\n const connection = new WebSocketConnection(ws, this);\r\n this.connections.set(connection.id, connection);\r\n\r\n // Execute onConnect handler if defined\r\n if (metadata.onConnect) {\r\n this.executeHandler(metadata, metadata.onConnect, connection);\r\n }\r\n\r\n // Set up message handler\r\n ws.addEventListener('message', async (event) => {\r\n await this.handleMessage(event, connection, metadata);\r\n });\r\n\r\n // Set up close handler\r\n ws.addEventListener('close', () => {\r\n this.handleDisconnect(connection, metadata);\r\n });\r\n\r\n // Set up error handler\r\n ws.addEventListener('error', (error) => {\r\n console.error(`WebSocket error for connection ${connection.id}:`, error);\r\n });\r\n\r\n return connection;\r\n }\r\n\r\n /**\r\n * Handle incoming WebSocket message\r\n */\r\n private async handleMessage(\r\n event: MessageEvent,\r\n connection: WebSocketConnection,\r\n metadata: WebSocketMetadata\r\n ): Promise<void> {\r\n if (!metadata.onMessage) {\r\n return;\r\n }\r\n\r\n let data: any;\r\n\r\n try {\r\n // Parse message data\r\n data = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\r\n\r\n // Validate with schema if provided\r\n if (metadata.messageSchema) {\r\n data = await metadata.messageSchema.parseAsync(data);\r\n }\r\n\r\n // Execute onMessage handler\r\n await this.executeHandler(metadata, metadata.onMessage, connection, data);\r\n } catch (error) {\r\n // Send error back to client without closing connection\r\n connection.send({\r\n error: 'Invalid message format',\r\n details: error instanceof Error ? error.message : 'Unknown error'\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Handle WebSocket disconnection\r\n */\r\n private handleDisconnect(connection: WebSocketConnection, metadata: WebSocketMetadata): void {\r\n // Remove from all rooms\r\n Array.from(this.connectionsByRoom.entries()).forEach(([room, connections]) => {\r\n connections.delete(connection);\r\n if (connections.size === 0) {\r\n this.connectionsByRoom.delete(room);\r\n }\r\n });\r\n\r\n // Remove from rooms tracking\r\n Array.from(this.rooms.entries()).forEach(([room, connectionIds]) => {\r\n connectionIds.delete(connection.id);\r\n if (connectionIds.size === 0) {\r\n this.rooms.delete(room);\r\n }\r\n });\r\n\r\n // Remove from connections map\r\n this.connections.delete(connection.id);\r\n connection._markClosed();\r\n\r\n // Execute onDisconnect handler if defined\r\n if (metadata.onDisconnect) {\r\n this.executeHandler(metadata, metadata.onDisconnect, connection);\r\n }\r\n }\r\n\r\n /**\r\n * Execute a handler method on the target class\r\n */\r\n private async executeHandler(\r\n metadata: WebSocketMetadata,\r\n methodName: string,\r\n connection: WebSocketConnection,\r\n data?: any\r\n ): Promise<void> {\r\n try {\r\n const instance = new metadata.target();\r\n const method = (instance as any)[methodName];\r\n\r\n if (typeof method === 'function') {\r\n if (data !== undefined) {\r\n await method.call(instance, connection, data);\r\n } else {\r\n await method.call(instance, connection);\r\n }\r\n }\r\n } catch (error) {\r\n console.error(`Error executing WebSocket handler ${methodName}:`, error);\r\n }\r\n }\r\n\r\n /**\r\n * Broadcast a message to all connections or connections in a specific room\r\n * @param message - Message to broadcast\r\n * @param room - Optional room name\r\n */\r\n broadcast(message: any, room?: string): void {\r\n const connections = room\r\n ? this.getConnectionsInRoom(room)\r\n : Array.from(this.connections.values());\r\n\r\n const data = typeof message === 'string' ? message : JSON.stringify(message);\r\n\r\n for (const connection of connections) {\r\n if (connection.isOpen) {\r\n connection.send(data);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Add a connection to a room\r\n * @param connectionId - Connection ID\r\n * @param room - Room name\r\n */\r\n joinRoom(connectionId: string, room: string): void {\r\n const connection = this.connections.get(connectionId);\r\n if (!connection) {\r\n return;\r\n }\r\n\r\n // Add to rooms map (connectionId -> room)\r\n if (!this.rooms.has(room)) {\r\n this.rooms.set(room, new Set());\r\n }\r\n this.rooms.get(room)!.add(connectionId);\r\n\r\n // Add to connectionsByRoom map (room -> connections)\r\n if (!this.connectionsByRoom.has(room)) {\r\n this.connectionsByRoom.set(room, new Set());\r\n }\r\n this.connectionsByRoom.get(room)!.add(connection);\r\n }\r\n\r\n /**\r\n * Remove a connection from a room\r\n * @param connectionId - Connection ID\r\n * @param room - Room name\r\n */\r\n leaveRoom(connectionId: string, room: string): void {\r\n const connection = this.connections.get(connectionId);\r\n if (!connection) {\r\n return;\r\n }\r\n\r\n // Remove from rooms map\r\n const roomConnections = this.rooms.get(room);\r\n if (roomConnections) {\r\n roomConnections.delete(connectionId);\r\n if (roomConnections.size === 0) {\r\n this.rooms.delete(room);\r\n }\r\n }\r\n\r\n // Remove from connectionsByRoom map\r\n const connections = this.connectionsByRoom.get(room);\r\n if (connections) {\r\n connections.delete(connection);\r\n if (connections.size === 0) {\r\n this.connectionsByRoom.delete(room);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get all connections in a specific room\r\n * @param room - Room name\r\n * @returns Array of connections in the room\r\n */\r\n private getConnectionsInRoom(room: string): WebSocketConnection[] {\r\n const connections = this.connectionsByRoom.get(room);\r\n return connections ? Array.from(connections) : [];\r\n }\r\n\r\n /**\r\n * Get a connection by ID\r\n * @param connectionId - Connection ID\r\n * @returns The connection or undefined\r\n */\r\n getConnection(connectionId: string): WebSocketConnection | undefined {\r\n return this.connections.get(connectionId);\r\n }\r\n\r\n /**\r\n * Get all active connections\r\n * @returns Array of all connections\r\n */\r\n getAllConnections(): WebSocketConnection[] {\r\n return Array.from(this.connections.values());\r\n }\r\n\r\n /**\r\n * Get the number of active connections\r\n * @returns Number of connections\r\n */\r\n getConnectionCount(): number {\r\n return this.connections.size;\r\n }\r\n\r\n /**\r\n * Get all room names\r\n * @returns Array of room names\r\n */\r\n getRooms(): string[] {\r\n return Array.from(this.rooms.keys());\r\n }\r\n\r\n /**\r\n * Get the number of connections in a room\r\n * @param room - Room name\r\n * @returns Number of connections in the room\r\n */\r\n getRoomSize(room: string): number {\r\n return this.rooms.get(room)?.size || 0;\r\n }\r\n}\r\n",
60
+ "// WebSocket Plugin\r\nimport type { Plugin } from '../core/plugin';\r\nimport type { VeloceTS } from '../core/application';\r\nimport { WebSocketManager } from './manager';\r\n\r\n/**\r\n * WebSocketPlugin adds WebSocket support to FastAPI-TS\r\n * Registers WebSocket routes and handles connection upgrades\r\n */\r\nexport class WebSocketPlugin implements Plugin {\r\n name = 'websocket';\r\n version = '1.0.0';\r\n\r\n private manager: WebSocketManager;\r\n\r\n constructor() {\r\n this.manager = new WebSocketManager();\r\n }\r\n\r\n async install(app: VeloceTS): Promise<void> {\r\n const metadata = app.getMetadata();\r\n const websockets = metadata.getWebSockets();\r\n\r\n // Register each WebSocket handler\r\n for (const ws of websockets) {\r\n this.registerWebSocket(app, ws);\r\n }\r\n }\r\n\r\n /**\r\n * Register a WebSocket route with the application\r\n */\r\n private registerWebSocket(app: VeloceTS, metadata: any): void {\r\n const hono = app.getHono();\r\n\r\n // Register WebSocket upgrade endpoint\r\n hono.get(metadata.path, async (c) => {\r\n // Check if this is a WebSocket upgrade request\r\n const upgrade = c.req.header('upgrade');\r\n \r\n if (upgrade?.toLowerCase() !== 'websocket') {\r\n return c.text('Expected WebSocket upgrade', 426);\r\n }\r\n\r\n // Handle WebSocket upgrade based on runtime\r\n return this.handleUpgrade(c, metadata);\r\n });\r\n }\r\n\r\n /**\r\n * Handle WebSocket upgrade for different runtimes\r\n */\r\n private handleUpgrade(c: any, metadata: any): Response {\r\n // Detect runtime and handle accordingly\r\n if (typeof Bun !== 'undefined') {\r\n return this.handleBunUpgrade(c, metadata);\r\n } else if (typeof (globalThis as any).Deno !== 'undefined') {\r\n return this.handleDenoUpgrade(c, metadata);\r\n } else {\r\n // Node.js or other runtimes\r\n return this.handleNodeUpgrade(c, metadata);\r\n }\r\n }\r\n\r\n /**\r\n * Handle WebSocket upgrade for Bun runtime\r\n */\r\n private handleBunUpgrade(c: any, metadata: any): Response {\r\n const success = (c.env as any)?.upgrade?.(c.req.raw);\r\n \r\n if (!success) {\r\n return c.text('WebSocket upgrade failed', 500);\r\n }\r\n\r\n return new Response(null, { status: 101 });\r\n }\r\n\r\n /**\r\n * Handle WebSocket upgrade for Deno runtime\r\n */\r\n private handleDenoUpgrade(c: any, metadata: any): Response {\r\n const Deno = (globalThis as any).Deno;\r\n const { socket, response } = Deno.upgradeWebSocket(c.req.raw);\r\n \r\n // Set up WebSocket handlers\r\n socket.onopen = () => {\r\n this.manager.handleConnection(socket as any, metadata);\r\n };\r\n\r\n return response;\r\n }\r\n\r\n /**\r\n * Handle WebSocket upgrade for Node.js runtime\r\n */\r\n private handleNodeUpgrade(c: any, metadata: any): Response {\r\n // For Node.js, we need to handle this differently\r\n // This is a simplified version - in production, you'd use a library like 'ws'\r\n return c.text('WebSocket support requires Bun or Deno runtime', 501);\r\n }\r\n\r\n /**\r\n * Get the WebSocket manager instance\r\n */\r\n getManager(): WebSocketManager {\r\n return this.manager;\r\n }\r\n\r\n /**\r\n * Broadcast a message to all connections or a specific room\r\n */\r\n broadcast(message: any, room?: string): void {\r\n this.manager.broadcast(message, room);\r\n }\r\n\r\n /**\r\n * Get connection count\r\n */\r\n getConnectionCount(): number {\r\n return this.manager.getConnectionCount();\r\n }\r\n\r\n /**\r\n * Get all active rooms\r\n */\r\n getRooms(): string[] {\r\n return this.manager.getRooms();\r\n }\r\n}\r\n",
61
+ "// GraphQL decorators for FastAPI-TS\r\nimport 'reflect-metadata';\r\nimport type { ZodSchema } from 'zod';\r\nimport type {\r\n GraphQLResolverMetadata,\r\n GraphQLFieldMetadata,\r\n GraphQLArgumentMetadata,\r\n GraphQLOperationType\r\n} from '../types';\r\n\r\n// Metadata keys for reflect-metadata\r\nconst GRAPHQL_RESOLVER_KEY = Symbol('graphql:resolver');\r\nconst GRAPHQL_FIELD_KEY = Symbol('graphql:field');\r\nconst GRAPHQL_ARGS_KEY = Symbol('graphql:args');\r\n\r\n/**\r\n * @Resolver decorator - Marks a class as a GraphQL resolver\r\n * \r\n * @example\r\n * ```typescript\r\n * @Resolver()\r\n * class UserResolver {\r\n * @Query()\r\n * async getUser(@Arg('id', z.string()) id: string) {\r\n * return { id, name: 'John' };\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function Resolver(name?: string): ClassDecorator {\r\n return (target: any) => {\r\n const metadata: GraphQLResolverMetadata = {\r\n target,\r\n name: name || target.name\r\n };\r\n\r\n Reflect.defineMetadata(GRAPHQL_RESOLVER_KEY, metadata, target);\r\n };\r\n}\r\n\r\n/**\r\n * @GQLQuery decorator - Marks a method as a GraphQL query\r\n * \r\n * @example\r\n * ```typescript\r\n * @GQLQuery()\r\n * async getUser(@Arg('id', z.string()) id: string) {\r\n * return { id, name: 'John' };\r\n * }\r\n * ```\r\n */\r\nexport function GQLQuery(name?: string, options?: {\r\n description?: string;\r\n deprecated?: boolean;\r\n deprecationReason?: string;\r\n}): MethodDecorator {\r\n return createFieldDecorator('query', name, options);\r\n}\r\n\r\n// Alias for convenience\r\nexport { GQLQuery as GraphQLQuery };\r\n\r\n/**\r\n * @GQLMutation decorator - Marks a method as a GraphQL mutation\r\n * \r\n * @example\r\n * ```typescript\r\n * @GQLMutation()\r\n * async createUser(@Arg('input', CreateUserSchema) input: CreateUserInput) {\r\n * return { id: '1', ...input };\r\n * }\r\n * ```\r\n */\r\nexport function GQLMutation(name?: string, options?: {\r\n description?: string;\r\n deprecated?: boolean;\r\n deprecationReason?: string;\r\n}): MethodDecorator {\r\n return createFieldDecorator('mutation', name, options);\r\n}\r\n\r\n// Alias for convenience\r\nexport { GQLMutation as GraphQLMutation };\r\n\r\n/**\r\n * @GQLSubscription decorator - Marks a method as a GraphQL subscription\r\n * \r\n * @example\r\n * ```typescript\r\n * @GQLSubscription()\r\n * async onUserCreated() {\r\n * return pubsub.asyncIterator('USER_CREATED');\r\n * }\r\n * ```\r\n */\r\nexport function GQLSubscription(name?: string, options?: {\r\n description?: string;\r\n deprecated?: boolean;\r\n deprecationReason?: string;\r\n}): MethodDecorator {\r\n return createFieldDecorator('subscription', name, options);\r\n}\r\n\r\n// Alias for convenience\r\nexport { GQLSubscription as GraphQLSubscription };\r\n\r\n/**\r\n * Helper function to create field decorators\r\n */\r\nfunction createFieldDecorator(\r\n type: GraphQLOperationType,\r\n name?: string,\r\n options?: {\r\n description?: string;\r\n deprecated?: boolean;\r\n deprecationReason?: string;\r\n }\r\n): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata: GraphQLFieldMetadata = {\r\n target: target.constructor,\r\n propertyKey: propertyKey as string,\r\n type,\r\n name: name || (propertyKey as string),\r\n description: options?.description,\r\n deprecated: options?.deprecated,\r\n deprecationReason: options?.deprecationReason\r\n };\r\n\r\n // Store field metadata\r\n const existingFields = Reflect.getMetadata(GRAPHQL_FIELD_KEY, target.constructor) || [];\r\n existingFields.push(metadata);\r\n Reflect.defineMetadata(GRAPHQL_FIELD_KEY, existingFields, target.constructor);\r\n\r\n // Also store on the method itself for easy access\r\n Reflect.defineMetadata(GRAPHQL_FIELD_KEY, metadata, target, propertyKey);\r\n };\r\n}\r\n\r\n/**\r\n * @Arg decorator - Marks a parameter as a GraphQL argument with validation\r\n * \r\n * @example\r\n * ```typescript\r\n * @Query()\r\n * async getUser(\r\n * @Arg('id', z.string().uuid()) id: string,\r\n * @Arg('includeProfile', z.boolean().optional()) includeProfile?: boolean\r\n * ) {\r\n * return { id, name: 'John' };\r\n * }\r\n * ```\r\n */\r\nexport function Arg<T extends ZodSchema>(\r\n name: string,\r\n schema?: T,\r\n options?: {\r\n description?: string;\r\n defaultValue?: any;\r\n nullable?: boolean;\r\n }\r\n): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n \r\n const existingArgs = Reflect.getMetadata(GRAPHQL_ARGS_KEY, target, propertyKey) || [];\r\n\r\n const metadata: GraphQLArgumentMetadata = {\r\n index: parameterIndex,\r\n name,\r\n schema,\r\n description: options?.description,\r\n defaultValue: options?.defaultValue,\r\n nullable: options?.nullable\r\n };\r\n\r\n existingArgs[parameterIndex] = metadata;\r\n Reflect.defineMetadata(GRAPHQL_ARGS_KEY, existingArgs, target, propertyKey);\r\n };\r\n}\r\n\r\n/**\r\n * @GQLContext decorator - Injects GraphQL context into a parameter\r\n * \r\n * @example\r\n * ```typescript\r\n * @GQLQuery()\r\n * async getCurrentUser(@GQLContext() ctx: GraphQLContext) {\r\n * return ctx.user;\r\n * }\r\n * ```\r\n */\r\nexport function GQLContext(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n \r\n const existingArgs = Reflect.getMetadata(GRAPHQL_ARGS_KEY, target, propertyKey) || [];\r\n\r\n const metadata: GraphQLArgumentMetadata = {\r\n index: parameterIndex,\r\n name: '__context__', // Special marker for context injection\r\n nullable: false\r\n };\r\n\r\n existingArgs[parameterIndex] = metadata;\r\n Reflect.defineMetadata(GRAPHQL_ARGS_KEY, existingArgs, target, propertyKey);\r\n };\r\n}\r\n\r\n// Alias for convenience (note: GraphQLContext type is exported from graphql module)\r\nexport { GQLContext as GraphQLCtx };\r\n\r\n// ============================================================================\r\n// Helper functions to retrieve metadata\r\n// ============================================================================\r\n\r\n/**\r\n * Get resolver metadata from a class\r\n */\r\nexport function getResolverMetadata(target: any): GraphQLResolverMetadata | undefined {\r\n return Reflect.getMetadata(GRAPHQL_RESOLVER_KEY, target);\r\n}\r\n\r\n/**\r\n * Get all field metadata from a resolver class\r\n */\r\nexport function getFieldsMetadata(target: any): GraphQLFieldMetadata[] {\r\n return Reflect.getMetadata(GRAPHQL_FIELD_KEY, target) || [];\r\n}\r\n\r\n/**\r\n * Get field metadata from a specific method\r\n */\r\nexport function getFieldMetadata(target: any, propertyKey: string): GraphQLFieldMetadata | undefined {\r\n return Reflect.getMetadata(GRAPHQL_FIELD_KEY, target, propertyKey);\r\n}\r\n\r\n/**\r\n * Get argument metadata from a method\r\n */\r\nexport function getArgumentsMetadata(target: any, propertyKey: string): GraphQLArgumentMetadata[] {\r\n return Reflect.getMetadata(GRAPHQL_ARGS_KEY, target, propertyKey) || [];\r\n}\r\n\r\n/**\r\n * Check if a class has resolver metadata\r\n */\r\nexport function hasResolverMetadata(target: any): boolean {\r\n return Reflect.hasMetadata(GRAPHQL_RESOLVER_KEY, target);\r\n}\r\n\r\n/**\r\n * Check if a method has field metadata\r\n */\r\nexport function hasFieldMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(GRAPHQL_FIELD_KEY, target, propertyKey);\r\n}\r\n",
62
+ "// Convert Zod schemas to GraphQL types\r\nimport type { ZodSchema, ZodTypeAny } from 'zod';\r\nimport { z } from 'zod';\r\n\r\n/**\r\n * Convert a Zod schema to a GraphQL type string\r\n */\r\nexport function zodToGraphQLType(schema: ZodSchema): string {\r\n const zodType = (schema as any)._def.typeName;\r\n\r\n // Handle ZodString\r\n if (zodType === 'ZodString') {\r\n return 'String';\r\n }\r\n\r\n // Handle ZodNumber\r\n if (zodType === 'ZodNumber') {\r\n const def = (schema as any)._def;\r\n if (def.checks?.some((check: any) => check.kind === 'int')) {\r\n return 'Int';\r\n }\r\n return 'Float';\r\n }\r\n\r\n // Handle ZodBoolean\r\n if (zodType === 'ZodBoolean') {\r\n return 'Boolean';\r\n }\r\n\r\n // Handle ZodArray\r\n if (zodType === 'ZodArray') {\r\n const elementType = zodToGraphQLType((schema as any)._def.type);\r\n return `[${elementType}]`;\r\n }\r\n\r\n // Handle ZodObject\r\n if (zodType === 'ZodObject') {\r\n // For objects, we'll need to generate a custom type\r\n // Return a placeholder that will be replaced with the actual type name\r\n return 'JSON'; // GraphQL scalar for generic objects\r\n }\r\n\r\n // Handle ZodOptional\r\n if (zodType === 'ZodOptional') {\r\n return zodToGraphQLType((schema as any)._def.innerType);\r\n }\r\n\r\n // Handle ZodNullable\r\n if (zodType === 'ZodNullable') {\r\n return zodToGraphQLType((schema as any)._def.innerType);\r\n }\r\n\r\n // Handle ZodDefault\r\n if (zodType === 'ZodDefault') {\r\n return zodToGraphQLType((schema as any)._def.innerType);\r\n }\r\n\r\n // Handle ZodEnum\r\n if (zodType === 'ZodEnum') {\r\n // For enums, we'll need to generate a custom enum type\r\n return 'String'; // Fallback to String\r\n }\r\n\r\n // Handle ZodUnion\r\n if (zodType === 'ZodUnion') {\r\n // GraphQL doesn't support unions of scalars directly\r\n // We'll use the first option as fallback\r\n const options = (schema as any)._def.options;\r\n if (options && options.length > 0) {\r\n return zodToGraphQLType(options[0]);\r\n }\r\n }\r\n\r\n // Handle ZodLiteral\r\n if (zodType === 'ZodLiteral') {\r\n const value = (schema as any)._def.value;\r\n if (typeof value === 'string') return 'String';\r\n if (typeof value === 'number') return 'Float';\r\n if (typeof value === 'boolean') return 'Boolean';\r\n }\r\n\r\n // Handle ZodDate\r\n if (zodType === 'ZodDate') {\r\n return 'String'; // ISO date string\r\n }\r\n\r\n // Default fallback\r\n return 'String';\r\n}\r\n\r\n/**\r\n * Check if a Zod schema is nullable/optional\r\n */\r\nexport function isNullable(schema: ZodSchema): boolean {\r\n const zodType = (schema as any)._def.typeName;\r\n \r\n if (zodType === 'ZodOptional' || zodType === 'ZodNullable') {\r\n return true;\r\n }\r\n\r\n if (zodType === 'ZodDefault') {\r\n return isNullable((schema as any)._def.innerType);\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Get the default value from a Zod schema\r\n */\r\nexport function getDefaultValue(schema: ZodSchema): any {\r\n const zodType = (schema as any)._def.typeName;\r\n\r\n if (zodType === 'ZodDefault') {\r\n return (schema as any)._def.defaultValue();\r\n }\r\n\r\n if (zodType === 'ZodOptional' || zodType === 'ZodNullable') {\r\n const innerType = (schema as any)._def.innerType;\r\n if (innerType) {\r\n return getDefaultValue(innerType);\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Generate GraphQL object type definition from Zod object schema\r\n */\r\nexport function zodObjectToGraphQLType(name: string, schema: ZodSchema): string {\r\n const zodType = (schema as any)._def.typeName;\r\n\r\n if (zodType !== 'ZodObject') {\r\n throw new Error('Schema must be a ZodObject');\r\n }\r\n\r\n const shape = (schema as any)._def.shape();\r\n const fields: string[] = [];\r\n\r\n for (const [key, value] of Object.entries(shape)) {\r\n const fieldSchema = value as ZodTypeAny;\r\n const fieldType = zodToGraphQLType(fieldSchema);\r\n const nullable = isNullable(fieldSchema);\r\n const typeString = nullable ? fieldType : `${fieldType}!`;\r\n fields.push(` ${key}: ${typeString}`);\r\n }\r\n\r\n return `type ${name} {\\n${fields.join('\\n')}\\n}`;\r\n}\r\n\r\n/**\r\n * Generate GraphQL input type definition from Zod object schema\r\n */\r\nexport function zodObjectToGraphQLInput(name: string, schema: ZodSchema): string {\r\n const zodType = (schema as any)._def.typeName;\r\n\r\n if (zodType !== 'ZodObject') {\r\n throw new Error('Schema must be a ZodObject');\r\n }\r\n\r\n const shape = (schema as any)._def.shape();\r\n const fields: string[] = [];\r\n\r\n for (const [key, value] of Object.entries(shape)) {\r\n const fieldSchema = value as ZodTypeAny;\r\n const fieldType = zodToGraphQLType(fieldSchema);\r\n const nullable = isNullable(fieldSchema);\r\n const defaultValue = getDefaultValue(fieldSchema);\r\n \r\n let typeString = nullable ? fieldType : `${fieldType}!`;\r\n \r\n if (defaultValue !== undefined) {\r\n const defaultStr = JSON.stringify(defaultValue);\r\n typeString += ` = ${defaultStr}`;\r\n }\r\n \r\n fields.push(` ${key}: ${typeString}`);\r\n }\r\n\r\n return `input ${name} {\\n${fields.join('\\n')}\\n}`;\r\n}\r\n",
63
+ "/**\r\n * Base HTTP exception class\r\n * All HTTP exceptions should extend this class\r\n * Provides consistent error response format\r\n */\r\nexport class HTTPException extends Error {\r\n constructor(\r\n public statusCode: number,\r\n message: string,\r\n public details?: any\r\n ) {\r\n super(message);\r\n this.name = 'HTTPException';\r\n \r\n // Maintains proper stack trace for where error was thrown (V8 only)\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, this.constructor);\r\n }\r\n }\r\n\r\n /**\r\n * Convert exception to JSON format for HTTP response\r\n * @returns Object with error details\r\n */\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 404 Not Found exception\r\n * Thrown when a requested resource cannot be found\r\n */\r\nexport class NotFoundException extends HTTPException {\r\n constructor(message: string = 'Not Found', details?: any) {\r\n super(404, message, details);\r\n this.name = 'NotFoundException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 401 Unauthorized exception\r\n * Thrown when authentication is required but not provided or invalid\r\n */\r\nexport class UnauthorizedException extends HTTPException {\r\n constructor(message: string = 'Unauthorized', details?: any) {\r\n super(401, message, details);\r\n this.name = 'UnauthorizedException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 403 Forbidden exception\r\n * Thrown when user is authenticated but doesn't have permission\r\n */\r\nexport class ForbiddenException extends HTTPException {\r\n constructor(message: string = 'Forbidden', details?: any) {\r\n super(403, message, details);\r\n this.name = 'ForbiddenException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * 400 Bad Request exception\r\n * Thrown when the request is malformed or invalid\r\n */\r\nexport class BadRequestException extends HTTPException {\r\n constructor(message: string = 'Bad Request', details?: any) {\r\n super(400, message, details);\r\n this.name = 'BadRequestException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: this.message,\r\n statusCode: this.statusCode,\r\n ...(this.details && { details: this.details })\r\n };\r\n }\r\n}\r\n",
64
+ "import { ZodError } from 'zod';\r\nimport { HTTPException } from '../errors/exceptions.js';\r\n\r\n/**\r\n * ValidationException is thrown when Zod validation fails\r\n * Extends HTTPException with 422 Unprocessable Entity status\r\n * Provides detailed validation error information\r\n */\r\nexport class ValidationException extends HTTPException {\r\n constructor(public zodError: ZodError) {\r\n super(422, 'Validation failed');\r\n this.name = 'ValidationException';\r\n }\r\n\r\n /**\r\n * Converts the validation error to a user-friendly JSON format\r\n * @returns Object with error message and detailed validation errors\r\n */\r\n toJSON() {\r\n return {\r\n error: 'Validation Error',\r\n statusCode: this.statusCode,\r\n details: this.zodError.errors.map(err => ({\r\n path: err.path.join('.'),\r\n message: err.message,\r\n code: err.code\r\n }))\r\n };\r\n }\r\n}\r\n",
65
+ "import { ZodSchema, ZodError } from 'zod';\r\nimport { ValidationException } from './exceptions.js';\r\n\r\n/**\r\n * Cached schema wrapper that stores parsed schema and validation results\r\n */\r\ninterface CachedSchema<T = any> {\r\n schema: ZodSchema<T>;\r\n // Cache for successful validation results (optional optimization)\r\n // Using WeakMap to allow garbage collection of validated data\r\n resultCache?: WeakMap<any, T>;\r\n}\r\n\r\n/**\r\n * ValidationEngine handles validation of data against Zod schemas\r\n * with built-in caching for performance optimization\r\n * \r\n * Performance optimizations:\r\n * - WeakMap-based schema caching to reuse parsed schemas\r\n * - Optional result caching for identical input objects\r\n * - Efficient error handling with minimal overhead\r\n */\r\nexport class ValidationEngine {\r\n // Primary schema cache using WeakMap for automatic garbage collection\r\n private schemaCache: WeakMap<ZodSchema, CachedSchema> = new WeakMap();\r\n \r\n // Statistics for monitoring cache effectiveness (optional, for debugging)\r\n private stats = {\r\n hits: 0,\r\n misses: 0,\r\n validations: 0\r\n };\r\n\r\n /**\r\n * Validates data asynchronously against a Zod schema\r\n * Uses cached schema for improved performance on repeated validations\r\n * \r\n * @param data - The data to validate\r\n * @param schema - The Zod schema to validate against\r\n * @returns The validated and typed data\r\n * @throws ValidationException if validation fails\r\n */\r\n async validate<T>(data: unknown, schema: ZodSchema<T>): Promise<T> {\r\n this.stats.validations++;\r\n \r\n try {\r\n // Get or create cached schema\r\n let cached = this.schemaCache.get(schema);\r\n \r\n if (!cached) {\r\n this.stats.misses++;\r\n // First time seeing this schema - cache it\r\n cached = {\r\n schema: schema,\r\n resultCache: new WeakMap()\r\n };\r\n this.schemaCache.set(schema, cached);\r\n } else {\r\n this.stats.hits++;\r\n }\r\n \r\n // Use the cached schema for validation\r\n return await cached.schema.parseAsync(data);\r\n } catch (error) {\r\n if (error instanceof ZodError) {\r\n throw new ValidationException(error);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Validates data synchronously against a Zod schema\r\n * Uses cached schema for improved performance on repeated validations\r\n * \r\n * @param data - The data to validate\r\n * @param schema - The Zod schema to validate against\r\n * @returns The validated and typed data\r\n * @throws ValidationException if validation fails\r\n */\r\n validateSync<T>(data: unknown, schema: ZodSchema<T>): T {\r\n this.stats.validations++;\r\n \r\n try {\r\n // Get or create cached schema\r\n let cached = this.schemaCache.get(schema);\r\n \r\n if (!cached) {\r\n this.stats.misses++;\r\n // First time seeing this schema - cache it\r\n cached = {\r\n schema: schema,\r\n resultCache: new WeakMap()\r\n };\r\n this.schemaCache.set(schema, cached);\r\n } else {\r\n this.stats.hits++;\r\n }\r\n \r\n // Use the cached schema for validation\r\n return cached.schema.parse(data);\r\n } catch (error) {\r\n if (error instanceof ZodError) {\r\n throw new ValidationException(error);\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Get cache statistics (useful for monitoring and debugging)\r\n * Returns hit rate and total validations performed\r\n */\r\n getCacheStats(): { hits: number; misses: number; validations: number; hitRate: number } {\r\n const hitRate = this.stats.validations > 0 \r\n ? (this.stats.hits / this.stats.validations) * 100 \r\n : 0;\r\n \r\n return {\r\n ...this.stats,\r\n hitRate: Math.round(hitRate * 100) / 100 // Round to 2 decimal places\r\n };\r\n }\r\n\r\n /**\r\n * Reset cache statistics (useful for testing)\r\n */\r\n resetStats(): void {\r\n this.stats = {\r\n hits: 0,\r\n misses: 0,\r\n validations: 0\r\n };\r\n }\r\n\r\n /**\r\n * Clear the schema cache (useful for testing or memory management)\r\n * Note: WeakMap doesn't have a clear method, so we create a new instance\r\n */\r\n clearCache(): void {\r\n this.schemaCache = new WeakMap();\r\n this.resetStats();\r\n }\r\n}\r\n",
66
+ "// GraphQL Schema Builder for FastAPI-TS\r\nimport type { MetadataRegistry } from '../core/metadata';\r\nimport type { DIContainer } from '../dependencies/container';\r\nimport type { GraphQLFieldMetadata, GraphQLArgumentMetadata, Context } from '../types';\r\nimport { getArgumentsMetadata } from '../decorators/graphql';\r\nimport { zodToGraphQLType, isNullable } from './zod-to-graphql';\r\nimport { ValidationEngine } from '../validation/validator';\r\n\r\n/**\r\n * GraphQL Schema Builder\r\n * Generates GraphQL schema from decorator metadata\r\n */\r\nexport class GraphQLSchemaBuilder {\r\n private validationEngine: ValidationEngine;\r\n private customTypes: Map<string, string> = new Map();\r\n\r\n constructor(\r\n private metadata: MetadataRegistry,\r\n private container: DIContainer\r\n ) {\r\n this.validationEngine = new ValidationEngine();\r\n }\r\n\r\n /**\r\n * Build the complete GraphQL schema\r\n */\r\n build(): GraphQLSchemaDefinition {\r\n const resolvers = this.metadata.getGraphQLResolvers();\r\n \r\n const queries: string[] = [];\r\n const mutations: string[] = [];\r\n const subscriptions: string[] = [];\r\n const types: string[] = [];\r\n\r\n // Process each resolver\r\n for (const resolver of resolvers) {\r\n const fields = this.metadata.getGraphQLFieldsByResolver(resolver.target);\r\n\r\n for (const field of fields) {\r\n const fieldDef = this.buildFieldDefinition(field);\r\n\r\n switch (field.type) {\r\n case 'query':\r\n queries.push(fieldDef);\r\n break;\r\n case 'mutation':\r\n mutations.push(fieldDef);\r\n break;\r\n case 'subscription':\r\n subscriptions.push(fieldDef);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Build type definitions\r\n let typeDefs = '';\r\n\r\n // Add custom types\r\n if (this.customTypes.size > 0) {\r\n typeDefs += Array.from(this.customTypes.values()).join('\\n\\n') + '\\n\\n';\r\n }\r\n\r\n // Add Query type\r\n if (queries.length > 0) {\r\n typeDefs += 'type Query {\\n';\r\n typeDefs += queries.map(q => ` ${q}`).join('\\n');\r\n typeDefs += '\\n}\\n\\n';\r\n }\r\n\r\n // Add Mutation type\r\n if (mutations.length > 0) {\r\n typeDefs += 'type Mutation {\\n';\r\n typeDefs += mutations.map(m => ` ${m}`).join('\\n');\r\n typeDefs += '\\n}\\n\\n';\r\n }\r\n\r\n // Add Subscription type\r\n if (subscriptions.length > 0) {\r\n typeDefs += 'type Subscription {\\n';\r\n typeDefs += subscriptions.map(s => ` ${s}`).join('\\n');\r\n typeDefs += '\\n}\\n';\r\n }\r\n\r\n // Build resolvers object\r\n const resolversObj = this.buildResolvers();\r\n\r\n return {\r\n typeDefs: typeDefs.trim(),\r\n resolvers: resolversObj\r\n };\r\n }\r\n\r\n /**\r\n * Build a field definition string\r\n */\r\n private buildFieldDefinition(field: GraphQLFieldMetadata): string {\r\n const args = getArgumentsMetadata(field.target.prototype, field.propertyKey);\r\n const argStrings: string[] = [];\r\n\r\n // Build arguments\r\n for (const arg of args) {\r\n if (arg.name === '__context__') continue; // Skip context injection\r\n\r\n let argType = 'String'; // Default type\r\n \r\n if (arg.schema) {\r\n argType = zodToGraphQLType(arg.schema);\r\n const nullable = isNullable(arg.schema);\r\n if (!nullable && !arg.nullable) {\r\n argType += '!';\r\n }\r\n }\r\n\r\n let argStr = `${arg.name}: ${argType}`;\r\n \r\n if (arg.defaultValue !== undefined) {\r\n argStr += ` = ${JSON.stringify(arg.defaultValue)}`;\r\n }\r\n\r\n argStrings.push(argStr);\r\n }\r\n\r\n const argsStr = argStrings.length > 0 ? `(${argStrings.join(', ')})` : '';\r\n \r\n // For now, default return type to String (can be enhanced with type inference)\r\n const returnType = 'String';\r\n\r\n let fieldStr = `${field.name}${argsStr}: ${returnType}`;\r\n\r\n // Add deprecation\r\n if (field.deprecated) {\r\n const reason = field.deprecationReason || 'No longer supported';\r\n fieldStr += ` @deprecated(reason: \"${reason}\")`;\r\n }\r\n\r\n return fieldStr;\r\n }\r\n\r\n /**\r\n * Build resolvers object with validation and DI\r\n */\r\n private buildResolvers(): GraphQLResolvers {\r\n const resolvers = this.metadata.getGraphQLResolvers();\r\n const resolversObj: GraphQLResolvers = {\r\n Query: {},\r\n Mutation: {},\r\n Subscription: {}\r\n };\r\n\r\n for (const resolver of resolvers) {\r\n const fields = this.metadata.getGraphQLFieldsByResolver(resolver.target);\r\n\r\n for (const field of fields) {\r\n const resolverFn = this.createResolverFunction(resolver.target, field);\r\n\r\n switch (field.type) {\r\n case 'query':\r\n resolversObj.Query![field.name!] = resolverFn;\r\n break;\r\n case 'mutation':\r\n resolversObj.Mutation![field.name!] = resolverFn;\r\n break;\r\n case 'subscription':\r\n resolversObj.Subscription![field.name!] = resolverFn;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return resolversObj;\r\n }\r\n\r\n /**\r\n * Create a resolver function with validation and DI\r\n */\r\n private createResolverFunction(\r\n target: any,\r\n field: GraphQLFieldMetadata\r\n ): GraphQLResolverFn {\r\n return async (parent: any, args: any, context: GraphQLContext, info: any) => {\r\n try {\r\n // Get argument metadata\r\n const argsMetadata = getArgumentsMetadata(target.prototype, field.propertyKey);\r\n const resolvedArgs: any[] = [];\r\n\r\n // Validate and resolve arguments\r\n for (const argMeta of argsMetadata) {\r\n if (argMeta.name === '__context__') {\r\n // Inject context\r\n resolvedArgs[argMeta.index] = context;\r\n } else {\r\n let value = args[argMeta.name];\r\n\r\n // Apply default value if not provided\r\n if (value === undefined && argMeta.defaultValue !== undefined) {\r\n value = argMeta.defaultValue;\r\n }\r\n\r\n // Validate with Zod schema\r\n if (argMeta.schema) {\r\n value = await this.validationEngine.validate(value, argMeta.schema);\r\n }\r\n\r\n resolvedArgs[argMeta.index] = value;\r\n }\r\n }\r\n\r\n // Resolve the resolver instance (with DI support)\r\n const instance: any = await this.container.resolve(target, {\r\n scope: 'request',\r\n context: context.request\r\n });\r\n\r\n // Execute the resolver method\r\n const result = await instance[field.propertyKey](...resolvedArgs);\r\n\r\n return result;\r\n } catch (error) {\r\n // Re-throw for GraphQL error handling\r\n throw error;\r\n }\r\n };\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\nexport interface GraphQLSchemaDefinition {\r\n typeDefs: string;\r\n resolvers: GraphQLResolvers;\r\n}\r\n\r\nexport interface GraphQLResolvers {\r\n Query?: Record<string, GraphQLResolverFn>;\r\n Mutation?: Record<string, GraphQLResolverFn>;\r\n Subscription?: Record<string, GraphQLResolverFn>;\r\n}\r\n\r\nexport type GraphQLResolverFn = (\r\n parent: any,\r\n args: any,\r\n context: GraphQLContext,\r\n info: any\r\n) => any | Promise<any>;\r\n\r\nexport interface GraphQLContext {\r\n request: Context;\r\n user?: any;\r\n [key: string]: any;\r\n}\r\n",
67
+ "// GraphQL Plugin - Enables GraphQL support for FastAPI-TS\r\nimport type { Plugin } from '../core/plugin';\r\nimport type { VeloceTS } from '../core/application';\r\nimport { GraphQLSchemaBuilder } from './schema-builder';\r\nimport type { GraphQLContext } from './schema-builder';\r\n\r\n/**\r\n * GraphQL Plugin Options\r\n */\r\nexport interface GraphQLPluginOptions {\r\n /** Path to serve GraphQL endpoint (default: /graphql) */\r\n path?: string;\r\n \r\n /** Path to serve GraphQL Playground (default: /graphql/playground) */\r\n playgroundPath?: string;\r\n \r\n /** Enable GraphQL Playground in development (default: true) */\r\n playground?: boolean;\r\n \r\n /** Custom context factory function */\r\n context?: (request: any) => Promise<any> | any;\r\n}\r\n\r\n/**\r\n * GraphQLPlugin enables GraphQL support with decorators and Zod validation\r\n * \r\n * @example\r\n * ```typescript\r\n * const app = new VeloceTS();\r\n * app.usePlugin(new GraphQLPlugin({\r\n * path: '/graphql',\r\n * playground: true\r\n * }));\r\n * ```\r\n */\r\nexport class GraphQLPlugin implements Plugin {\r\n name = 'graphql';\r\n version = '1.0.0';\r\n\r\n private options: Required<GraphQLPluginOptions>;\r\n private schema?: { typeDefs: string; resolvers: any };\r\n\r\n constructor(options?: GraphQLPluginOptions) {\r\n this.options = {\r\n path: options?.path || '/graphql',\r\n playgroundPath: options?.playgroundPath || '/graphql/playground',\r\n playground: options?.playground !== false,\r\n context: options?.context || ((request: any) => ({ request }))\r\n };\r\n }\r\n\r\n async install(app: VeloceTS): Promise<void> {\r\n // Build GraphQL schema from metadata\r\n const metadata = app.getMetadata();\r\n const container = app.getContainer();\r\n \r\n const schemaBuilder = new GraphQLSchemaBuilder(metadata, container);\r\n this.schema = schemaBuilder.build();\r\n\r\n // Register GraphQL endpoint\r\n app.post(this.options.path, {\r\n handler: async (c) => {\r\n return this.handleGraphQLRequest(c);\r\n },\r\n docs: {\r\n summary: 'GraphQL endpoint',\r\n description: 'Execute GraphQL queries and mutations',\r\n tags: ['GraphQL']\r\n }\r\n });\r\n\r\n // Also support GET for queries (useful for GraphQL Playground)\r\n app.get(this.options.path, {\r\n handler: async (c) => {\r\n const query = c.req.query('query');\r\n const variables = c.req.query('variables');\r\n const operationName = c.req.query('operationName');\r\n\r\n if (!query) {\r\n return c.json({ error: 'Query parameter is required' }, 400);\r\n }\r\n\r\n return this.executeGraphQL(c, {\r\n query,\r\n variables: variables ? JSON.parse(variables) : undefined,\r\n operationName\r\n });\r\n },\r\n docs: {\r\n summary: 'GraphQL endpoint (GET)',\r\n description: 'Execute GraphQL queries via GET request',\r\n tags: ['GraphQL']\r\n }\r\n });\r\n\r\n // Register GraphQL Playground endpoint if enabled\r\n if (this.options.playground) {\r\n app.get(this.options.playgroundPath, {\r\n handler: async (c) => {\r\n return c.html(this.renderPlayground());\r\n },\r\n docs: {\r\n summary: 'GraphQL Playground',\r\n description: 'Interactive GraphQL IDE',\r\n tags: ['GraphQL']\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Handle GraphQL POST request\r\n */\r\n private async handleGraphQLRequest(c: any) {\r\n try {\r\n const body = await c.req.json();\r\n return this.executeGraphQL(c, body);\r\n } catch (error) {\r\n return c.json({\r\n errors: [{\r\n message: 'Invalid JSON in request body',\r\n extensions: { code: 'BAD_REQUEST' }\r\n }]\r\n }, 400);\r\n }\r\n }\r\n\r\n /**\r\n * Execute a GraphQL operation\r\n */\r\n private async executeGraphQL(c: any, request: GraphQLRequest) {\r\n if (!this.schema) {\r\n return c.json({\r\n errors: [{\r\n message: 'GraphQL schema not initialized',\r\n extensions: { code: 'INTERNAL_SERVER_ERROR' }\r\n }]\r\n }, 500);\r\n }\r\n\r\n try {\r\n // Parse the query (simple implementation - in production use graphql-js)\r\n const { query, variables, operationName } = request;\r\n\r\n // Create context\r\n const context: GraphQLContext = await this.options.context(c);\r\n\r\n // Execute the operation\r\n const result = await this.executeOperation(\r\n query,\r\n variables,\r\n context,\r\n operationName\r\n );\r\n\r\n return c.json(result);\r\n } catch (error: any) {\r\n return c.json({\r\n errors: [{\r\n message: error.message || 'Internal server error',\r\n extensions: {\r\n code: 'INTERNAL_SERVER_ERROR',\r\n ...(process.env.NODE_ENV === 'development' && { stack: error.stack })\r\n }\r\n }]\r\n }, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Execute a GraphQL operation (simplified implementation)\r\n * In production, this should use graphql-js or similar library\r\n */\r\n private async executeOperation(\r\n query: string,\r\n variables: any,\r\n context: GraphQLContext,\r\n operationName?: string\r\n ): Promise<GraphQLResponse> {\r\n // This is a simplified implementation\r\n // In a real implementation, you would use graphql-js to parse and execute\r\n \r\n // For now, return a placeholder response\r\n // The actual execution would happen through the resolvers we built\r\n return {\r\n data: null,\r\n errors: [{\r\n message: 'GraphQL execution not fully implemented. Use a GraphQL library like graphql-js for full support.',\r\n extensions: { code: 'NOT_IMPLEMENTED' }\r\n }]\r\n };\r\n }\r\n\r\n /**\r\n * Render GraphQL Playground HTML\r\n */\r\n private renderPlayground(): string {\r\n return `\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"UTF-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n <title>GraphQL Playground</title>\r\n <link rel=\"stylesheet\" href=\"https://unpkg.com/graphql-playground-react/build/static/css/index.css\" />\r\n <link rel=\"shortcut icon\" href=\"https://unpkg.com/graphql-playground-react/build/favicon.png\" />\r\n <script src=\"https://unpkg.com/graphql-playground-react/build/static/js/middleware.js\"></script>\r\n <style>\r\n body {\r\n margin: 0;\r\n padding: 0;\r\n font-family: 'Open Sans', sans-serif;\r\n overflow: hidden;\r\n }\r\n #root {\r\n height: 100vh;\r\n }\r\n </style>\r\n</head>\r\n<body>\r\n <div id=\"root\"></div>\r\n <script>\r\n window.addEventListener('load', function (event) {\r\n GraphQLPlayground.init(document.getElementById('root'), {\r\n endpoint: '${this.options.path}',\r\n settings: {\r\n 'editor.theme': 'light',\r\n 'editor.cursorShape': 'line',\r\n 'editor.reuseHeaders': true,\r\n 'tracing.hideTracingResponse': true,\r\n 'queryPlan.hideQueryPlanResponse': true,\r\n 'editor.fontSize': 14,\r\n 'editor.fontFamily': \"'Source Code Pro', 'Consolas', 'Inconsolata', 'Droid Sans Mono', 'Monaco', monospace\",\r\n 'request.credentials': 'include'\r\n }\r\n })\r\n })\r\n </script>\r\n</body>\r\n</html>\r\n `.trim();\r\n }\r\n\r\n /**\r\n * Get the generated schema (useful for testing)\r\n */\r\n getSchema() {\r\n return this.schema;\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\ninterface GraphQLRequest {\r\n query: string;\r\n variables?: Record<string, any>;\r\n operationName?: string;\r\n}\r\n\r\ninterface GraphQLResponse {\r\n data?: any;\r\n errors?: Array<{\r\n message: string;\r\n locations?: Array<{ line: number; column: number }>;\r\n path?: Array<string | number>;\r\n extensions?: Record<string, any>;\r\n }>;\r\n}\r\n",
68
+ "import type { VeloceTS } from '../core/application';\r\nimport type { Hono } from 'hono';\r\n\r\n/**\r\n * Options for making test requests\r\n */\r\nexport interface TestRequestOptions {\r\n headers?: Record<string, string>;\r\n query?: Record<string, string>;\r\n body?: any;\r\n json?: any;\r\n}\r\n\r\n/**\r\n * Response from a test request\r\n */\r\nexport interface TestResponse {\r\n status: number;\r\n headers: Headers;\r\n body: any;\r\n text: string;\r\n json: () => Promise<any>;\r\n ok: boolean;\r\n}\r\n\r\n/**\r\n * TestClient provides a convenient interface for testing VeloceTS applications\r\n * Wraps the Hono app.request method with helper methods for common HTTP verbs\r\n */\r\nexport class TestClient {\r\n private hono: Hono;\r\n\r\n constructor(app: VeloceTS) {\r\n this.hono = app.getHono();\r\n }\r\n\r\n /**\r\n * Make a GET request\r\n * @param path - The path to request\r\n * @param options - Optional request options\r\n * @returns The test response\r\n */\r\n async get(path: string, options?: TestRequestOptions): Promise<TestResponse> {\r\n return this.request('GET', path, options);\r\n }\r\n\r\n /**\r\n * Make a POST request\r\n * @param path - The path to request\r\n * @param options - Optional request options\r\n * @returns The test response\r\n */\r\n async post(path: string, options?: TestRequestOptions): Promise<TestResponse> {\r\n return this.request('POST', path, options);\r\n }\r\n\r\n /**\r\n * Make a PUT request\r\n * @param path - The path to request\r\n * @param options - Optional request options\r\n * @returns The test response\r\n */\r\n async put(path: string, options?: TestRequestOptions): Promise<TestResponse> {\r\n return this.request('PUT', path, options);\r\n }\r\n\r\n /**\r\n * Make a DELETE request\r\n * @param path - The path to request\r\n * @param options - Optional request options\r\n * @returns The test response\r\n */\r\n async delete(path: string, options?: TestRequestOptions): Promise<TestResponse> {\r\n return this.request('DELETE', path, options);\r\n }\r\n\r\n /**\r\n * Make a PATCH request\r\n * @param path - The path to request\r\n * @param options - Optional request options\r\n * @returns The test response\r\n */\r\n async patch(path: string, options?: TestRequestOptions): Promise<TestResponse> {\r\n return this.request('PATCH', path, options);\r\n }\r\n\r\n /**\r\n * Make a generic HTTP request\r\n * @param method - The HTTP method\r\n * @param path - The path to request\r\n * @param options - Optional request options\r\n * @returns The test response\r\n */\r\n async request(\r\n method: string,\r\n path: string,\r\n options?: TestRequestOptions\r\n ): Promise<TestResponse> {\r\n // Build URL with query parameters\r\n const url = this.buildUrl(path, options?.query);\r\n\r\n // Build request init\r\n const init: RequestInit = {\r\n method,\r\n headers: this.buildHeaders(options),\r\n };\r\n\r\n // Add body if present\r\n if (options?.body !== undefined) {\r\n init.body = options.body;\r\n } else if (options?.json !== undefined) {\r\n init.body = JSON.stringify(options.json);\r\n }\r\n\r\n // Make the request using Hono's request method\r\n const response = await this.hono.request(url, init);\r\n\r\n // Parse response\r\n const text = await response.text();\r\n let body: any;\r\n\r\n try {\r\n body = JSON.parse(text);\r\n } catch {\r\n body = text;\r\n }\r\n\r\n return {\r\n status: response.status,\r\n headers: response.headers,\r\n body,\r\n text,\r\n json: async () => JSON.parse(text),\r\n ok: response.ok,\r\n };\r\n }\r\n\r\n /**\r\n * Build URL with query parameters\r\n * @param path - The base path\r\n * @param query - Optional query parameters\r\n * @returns The complete URL\r\n */\r\n private buildUrl(path: string, query?: Record<string, string>): string {\r\n if (!query || Object.keys(query).length === 0) {\r\n return path;\r\n }\r\n\r\n const queryString = new URLSearchParams(query).toString();\r\n return `${path}?${queryString}`;\r\n }\r\n\r\n /**\r\n * Build headers for the request\r\n * @param options - Request options\r\n * @returns Headers object\r\n */\r\n private buildHeaders(options?: TestRequestOptions): Record<string, string> {\r\n const headers: Record<string, string> = {\r\n ...options?.headers,\r\n };\r\n\r\n // Add Content-Type for JSON requests\r\n if (options?.json !== undefined && !headers['Content-Type']) {\r\n headers['Content-Type'] = 'application/json';\r\n }\r\n\r\n return headers;\r\n }\r\n}\r\n",
69
+ "// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n return (context, next) => {\n let index = -1;\n return dispatch(0);\n async function dispatch(i) {\n if (i <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = i;\n let res;\n let isError = false;\n let handler;\n if (middleware[i]) {\n handler = middleware[i][0][0];\n context.req.routeIndex = i;\n } else {\n handler = i === middleware.length && next || void 0;\n }\n if (handler) {\n try {\n res = await handler(context, () => dispatch(i + 1));\n } catch (err) {\n if (err instanceof Error && onError) {\n context.error = err;\n res = await onError(err, context);\n isError = true;\n } else {\n throw err;\n }\n }\n } else {\n if (context.finalized === false && onNotFound) {\n res = await onNotFound(context);\n }\n }\n if (res && (context.finalized === false || isError)) {\n context.res = res;\n }\n return context;\n }\n };\n};\nexport {\n compose\n};\n",
70
+ "// src/request/constants.ts\nvar GET_MATCH_RESULT = Symbol();\nexport {\n GET_MATCH_RESULT\n};\n",
71
+ "// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n const contentType = headers.get(\"Content-Type\");\n if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n const formData = await request.formData();\n if (formData) {\n return convertFormDataToBodyData(formData, options);\n }\n return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n const form = /* @__PURE__ */ Object.create(null);\n formData.forEach((value, key) => {\n const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n if (!shouldParseAllValues) {\n form[key] = value;\n } else {\n handleParsingAllValues(form, key, value);\n }\n });\n if (options.dot) {\n Object.entries(form).forEach(([key, value]) => {\n const shouldParseDotValues = key.includes(\".\");\n if (shouldParseDotValues) {\n handleParsingNestedValues(form, key, value);\n delete form[key];\n }\n });\n }\n return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n if (form[key] !== void 0) {\n if (Array.isArray(form[key])) {\n ;\n form[key].push(value);\n } else {\n form[key] = [form[key], value];\n }\n } else {\n if (!key.endsWith(\"[]\")) {\n form[key] = value;\n } else {\n form[key] = [value];\n }\n }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n let nestedForm = form;\n const keys = key.split(\".\");\n keys.forEach((key2, index) => {\n if (index === keys.length - 1) {\n nestedForm[key2] = value;\n } else {\n if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n }\n nestedForm = nestedForm[key2];\n }\n });\n};\nexport {\n parseBody\n};\n",
72
+ "// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n const cacheKey = `${label}#${next}`;\n if (!patternCache[cacheKey]) {\n if (match[2]) {\n patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n } else {\n patternCache[cacheKey] = [label, match[1], true];\n }\n }\n return patternCache[cacheKey];\n }\n return null;\n};\nvar tryDecode = (str, decoder) => {\n try {\n return decoder(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decoder(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n if (rest.length) {\n sub = mergePath(sub, ...rest);\n }\n return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return value.indexOf(\"%\") !== -1 ? tryDecode(value, decodeURIComponent_) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(`?${key}`, 8);\n if (keyIndex2 === -1) {\n keyIndex2 = url.indexOf(`&${key}`, 8);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath,\n tryDecode\n};\n",
73
+ "// src/request.ts\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { decodeURIComponent_, getQueryParam, getQueryParams, tryDecode } from \"./utils/url.js\";\nvar tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);\nvar HonoRequest = class {\n raw;\n #validatedData;\n #matchResult;\n routeIndex = 0;\n path;\n bodyCache = {};\n constructor(request, path = \"/\", matchResult = [[]]) {\n this.raw = request;\n this.path = path;\n this.#matchResult = matchResult;\n this.#validatedData = {};\n }\n param(key) {\n return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n }\n #getDecodedParam(key) {\n const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n const param = this.#getParamValue(paramKey);\n return param && /\\%/.test(param) ? tryDecodeURIComponent(param) : param;\n }\n #getAllDecodedParams() {\n const decoded = {};\n const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n for (const key of keys) {\n const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n if (value !== void 0) {\n decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n }\n }\n return decoded;\n }\n #getParamValue(paramKey) {\n return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n }\n query(key) {\n return getQueryParam(this.url, key);\n }\n queries(key) {\n return getQueryParams(this.url, key);\n }\n header(name) {\n if (name) {\n return this.raw.headers.get(name) ?? void 0;\n }\n const headerData = {};\n this.raw.headers.forEach((value, key) => {\n headerData[key] = value;\n });\n return headerData;\n }\n async parseBody(options) {\n return this.bodyCache.parsedBody ??= await parseBody(this, options);\n }\n #cachedBody = (key) => {\n const { bodyCache, raw } = this;\n const cachedBody = bodyCache[key];\n if (cachedBody) {\n return cachedBody;\n }\n const anyCachedKey = Object.keys(bodyCache)[0];\n if (anyCachedKey) {\n return bodyCache[anyCachedKey].then((body) => {\n if (anyCachedKey === \"json\") {\n body = JSON.stringify(body);\n }\n return new Response(body)[key]();\n });\n }\n return bodyCache[key] = raw[key]();\n };\n json() {\n return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n }\n text() {\n return this.#cachedBody(\"text\");\n }\n arrayBuffer() {\n return this.#cachedBody(\"arrayBuffer\");\n }\n blob() {\n return this.#cachedBody(\"blob\");\n }\n formData() {\n return this.#cachedBody(\"formData\");\n }\n addValidatedData(target, data) {\n this.#validatedData[target] = data;\n }\n valid(target) {\n return this.#validatedData[target];\n }\n get url() {\n return this.raw.url;\n }\n get method() {\n return this.raw.method;\n }\n get [GET_MATCH_RESULT]() {\n return this.#matchResult;\n }\n get matchedRoutes() {\n return this.#matchResult[0].map(([[, route]]) => route);\n }\n get routePath() {\n return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n }\n};\nexport {\n HonoRequest\n};\n",
74
+ "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \"&quot;\";\n break;\n case 39:\n escape = \"&#39;\";\n break;\n case 38:\n escape = \"&amp;\";\n break;\n case 60:\n escape = \"&lt;\";\n break;\n case 62:\n escape = \"&gt;\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n",
75
+ "// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n return {\n \"Content-Type\": contentType,\n ...headers\n };\n};\nvar Context = class {\n #rawRequest;\n #req;\n env = {};\n #var;\n finalized = false;\n error;\n #status;\n #executionCtx;\n #res;\n #layout;\n #renderer;\n #notFoundHandler;\n #preparedHeaders;\n #matchResult;\n #path;\n constructor(req, options) {\n this.#rawRequest = req;\n if (options) {\n this.#executionCtx = options.executionCtx;\n this.env = options.env;\n this.#notFoundHandler = options.notFoundHandler;\n this.#path = options.path;\n this.#matchResult = options.matchResult;\n }\n }\n get req() {\n this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n return this.#req;\n }\n get event() {\n if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no FetchEvent\");\n }\n }\n get executionCtx() {\n if (this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no ExecutionContext\");\n }\n }\n get res() {\n return this.#res ||= new Response(null, {\n headers: this.#preparedHeaders ??= new Headers()\n });\n }\n set res(_res) {\n if (this.#res && _res) {\n _res = new Response(_res.body, _res);\n for (const [k, v] of this.#res.headers.entries()) {\n if (k === \"content-type\") {\n continue;\n }\n if (k === \"set-cookie\") {\n const cookies = this.#res.headers.getSetCookie();\n _res.headers.delete(\"set-cookie\");\n for (const cookie of cookies) {\n _res.headers.append(\"set-cookie\", cookie);\n }\n } else {\n _res.headers.set(k, v);\n }\n }\n }\n this.#res = _res;\n this.finalized = true;\n }\n render = (...args) => {\n this.#renderer ??= (content) => this.html(content);\n return this.#renderer(...args);\n };\n setLayout = (layout) => this.#layout = layout;\n getLayout = () => this.#layout;\n setRenderer = (renderer) => {\n this.#renderer = renderer;\n };\n header = (name, value, options) => {\n if (this.finalized) {\n this.#res = new Response(this.#res.body, this.#res);\n }\n const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n if (value === void 0) {\n headers.delete(name);\n } else if (options?.append) {\n headers.append(name, value);\n } else {\n headers.set(name, value);\n }\n };\n status = (status) => {\n this.#status = status;\n };\n set = (key, value) => {\n this.#var ??= /* @__PURE__ */ new Map();\n this.#var.set(key, value);\n };\n get = (key) => {\n return this.#var ? this.#var.get(key) : void 0;\n };\n get var() {\n if (!this.#var) {\n return {};\n }\n return Object.fromEntries(this.#var);\n }\n #newResponse(data, arg, headers) {\n const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n if (typeof arg === \"object\" && \"headers\" in arg) {\n const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n for (const [key, value] of argHeaders) {\n if (key.toLowerCase() === \"set-cookie\") {\n responseHeaders.append(key, value);\n } else {\n responseHeaders.set(key, value);\n }\n }\n }\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (typeof v === \"string\") {\n responseHeaders.set(k, v);\n } else {\n responseHeaders.delete(k);\n for (const v2 of v) {\n responseHeaders.append(k, v2);\n }\n }\n }\n }\n const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n return new Response(data, { status, headers: responseHeaders });\n }\n newResponse = (...args) => this.#newResponse(...args);\n body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n text = (text, arg, headers) => {\n return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n text,\n arg,\n setDefaultContentType(TEXT_PLAIN, headers)\n );\n };\n json = (object, arg, headers) => {\n return this.#newResponse(\n JSON.stringify(object),\n arg,\n setDefaultContentType(\"application/json\", headers)\n );\n };\n html = (html, arg, headers) => {\n const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n };\n redirect = (location, status) => {\n const locationString = String(location);\n this.header(\n \"Location\",\n !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n );\n return this.newResponse(null, status ?? 302);\n };\n notFound = () => {\n this.#notFoundHandler ??= () => new Response();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\n};\n",
76
+ "// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n",
77
+ "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n",
78
+ "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n router;\n getPath;\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n errorHandler = errorHandler;\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler);\n });\n return this;\n }\n basePath(path) {\n const subApp = this.#clone();\n subApp._basePath = mergePath(this._basePath, path);\n return subApp;\n }\n onError = (handler) => {\n this.errorHandler = handler;\n return this;\n };\n notFound = (handler) => {\n this.#notFoundHandler = handler;\n return this;\n };\n mount(path, applicationHandler, options) {\n let replaceRequest;\n let optionHandler;\n if (options) {\n if (typeof options === \"function\") {\n optionHandler = options;\n } else {\n optionHandler = options.optionHandler;\n if (options.replaceRequest === false) {\n replaceRequest = (request) => request;\n } else {\n replaceRequest = options.replaceRequest;\n }\n }\n }\n const getOptions = optionHandler ? (c) => {\n const options2 = optionHandler(c);\n return Array.isArray(options2) ? options2 : [options2];\n } : (c) => {\n let executionContext = void 0;\n try {\n executionContext = c.executionCtx;\n } catch {\n }\n return [c.env, executionContext];\n };\n replaceRequest ||= (() => {\n const mergedPath = mergePath(this._basePath, path);\n const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n return (request) => {\n const url = new URL(request.url);\n url.pathname = url.pathname.slice(pathPrefixLength) || \"/\";\n return new Request(url, request);\n };\n })();\n const handler = async (c, next) => {\n const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n if (res) {\n return res;\n }\n await next();\n };\n this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n return this;\n }\n #addRoute(method, path, handler) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = { basePath: this._basePath, path, method, handler };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n",
79
+ "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n",
80
+ "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n",
81
+ "// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar emptyParam = [];\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match(method, path) {\n clearWildcardRegExpCache();\n const matchers = this.#buildAllMatchers();\n this.match = (method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match = path2.match(matcher[0]);\n if (!match) {\n return [[], emptyParam];\n }\n const index = match.indexOf(\"\", 1);\n return [matcher[1][index], match];\n };\n return this.match(method, path);\n }\n #buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = void 0;\n return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n",
82
+ "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n",
83
+ "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar Node = class {\n #methods;\n #children;\n #patterns;\n #order = 0;\n #params = emptyParams;\n constructor(method, handler, children) {\n this.#children = children || /* @__PURE__ */ Object.create(null);\n this.#methods = [];\n if (method && handler) {\n const m = /* @__PURE__ */ Object.create(null);\n m[method] = { handler, possibleKeys: [], score: 0 };\n this.#methods = [m];\n }\n this.#patterns = [];\n }\n insert(method, path, handler) {\n this.#order = ++this.#order;\n let curNode = this;\n const parts = splitRoutingPath(path);\n const possibleKeys = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const p = parts[i];\n const nextP = parts[i + 1];\n const pattern = getPattern(p, nextP);\n const key = Array.isArray(pattern) ? pattern[0] : p;\n if (key in curNode.#children) {\n curNode = curNode.#children[key];\n if (pattern) {\n possibleKeys.push(pattern[1]);\n }\n continue;\n }\n curNode.#children[key] = new Node();\n if (pattern) {\n curNode.#patterns.push(pattern);\n possibleKeys.push(pattern[1]);\n }\n curNode = curNode.#children[key];\n }\n curNode.#methods.push({\n [method]: {\n handler,\n possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n score: this.#order\n }\n });\n return curNode;\n }\n #getHandlerSets(node, method, nodeParams, params) {\n const handlerSets = [];\n for (let i = 0, len = node.#methods.length; i < len; i++) {\n const m = node.#methods[i];\n const handlerSet = m[method] || m[METHOD_NAME_ALL];\n const processedSet = {};\n if (handlerSet !== void 0) {\n handlerSet.params = /* @__PURE__ */ Object.create(null);\n handlerSets.push(handlerSet);\n if (nodeParams !== emptyParams || params && params !== emptyParams) {\n for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n const key = handlerSet.possibleKeys[i2];\n const processed = processedSet[handlerSet.score];\n handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n processedSet[handlerSet.score] = true;\n }\n }\n }\n }\n return handlerSets;\n }\n search(method, path) {\n const handlerSets = [];\n this.#params = emptyParams;\n const curNode = this;\n let curNodes = [curNode];\n const parts = splitPath(path);\n const curNodesQueue = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const part = parts[i];\n const isLast = i === len - 1;\n const tempNodes = [];\n for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n const node = curNodes[j];\n const nextNode = node.#children[part];\n if (nextNode) {\n nextNode.#params = node.#params;\n if (isLast) {\n if (nextNode.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(nextNode.#children[\"*\"], method, node.#params)\n );\n }\n handlerSets.push(...this.#getHandlerSets(nextNode, method, node.#params));\n } else {\n tempNodes.push(nextNode);\n }\n }\n for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n const pattern = node.#patterns[k];\n const params = node.#params === emptyParams ? {} : { ...node.#params };\n if (pattern === \"*\") {\n const astNode = node.#children[\"*\"];\n if (astNode) {\n handlerSets.push(...this.#getHandlerSets(astNode, method, node.#params));\n astNode.#params = params;\n tempNodes.push(astNode);\n }\n continue;\n }\n const [key, name, matcher] = pattern;\n if (!part && !(matcher instanceof RegExp)) {\n continue;\n }\n const child = node.#children[key];\n const restPathString = parts.slice(i).join(\"/\");\n if (matcher instanceof RegExp) {\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n handlerSets.push(...this.#getHandlerSets(child, method, node.#params, params));\n if (Object.keys(child.#children).length) {\n child.#params = params;\n const componentCount = m[0].match(/\\//)?.length ?? 0;\n const targetCurNodes = curNodesQueue[componentCount] ||= [];\n targetCurNodes.push(child);\n }\n continue;\n }\n }\n if (matcher === true || matcher.test(part)) {\n params[name] = part;\n if (isLast) {\n handlerSets.push(...this.#getHandlerSets(child, method, params, node.#params));\n if (child.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(child.#children[\"*\"], method, params, node.#params)\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n curNodes = tempNodes.concat(curNodesQueue.shift() ?? []);\n }\n if (handlerSets.length > 1) {\n handlerSets.sort((a, b) => {\n return a.score - b.score;\n });\n }\n return [handlerSets.map(({ handler, params }) => [handler, params])];\n }\n};\nexport {\n Node\n};\n",
84
+ "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n",
85
+ "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n",
86
+ "// Metadata registry for storing decorator metadata\r\nimport 'reflect-metadata';\r\nimport type {\r\n RouteMetadata,\r\n ParameterMetadata,\r\n DependencyMetadata,\r\n ControllerMetadata,\r\n Class,\r\n HTTPMethod,\r\n Middleware,\r\n RouteDocumentation,\r\n ResponseMetadata,\r\n WebSocketMetadata,\r\n WebSocketHandlerMetadata,\r\n GraphQLResolverMetadata,\r\n GraphQLFieldMetadata\r\n} from '../types';\r\n\r\n// Metadata keys for reflect-metadata\r\nconst ROUTE_METADATA_KEY = Symbol('route:metadata');\r\nconst CONTROLLER_METADATA_KEY = Symbol('controller:metadata');\r\nconst PARAMETER_METADATA_KEY = Symbol('parameter:metadata');\r\nconst DEPENDENCY_METADATA_KEY = Symbol('dependency:metadata');\r\nconst WEBSOCKET_METADATA_KEY = Symbol('websocket:metadata');\r\nconst WEBSOCKET_HANDLER_METADATA_KEY = Symbol('websocket:handler:metadata');\r\nconst GRAPHQL_RESOLVER_KEY = Symbol('graphql:resolver');\r\nconst GRAPHQL_FIELD_KEY = Symbol('graphql:field');\r\n\r\nexport class MetadataRegistry {\r\n private routes: Map<string, RouteMetadata> = new Map();\r\n private controllers: Map<Class, ControllerMetadata> = new Map();\r\n private routesByController: Map<Class, RouteMetadata[]> = new Map();\r\n private websockets: Map<Class, WebSocketMetadata> = new Map();\r\n private graphqlResolvers: Map<Class, GraphQLResolverMetadata> = new Map();\r\n private graphqlFields: Map<string, GraphQLFieldMetadata> = new Map();\r\n\r\n /**\r\n * Register a route in the registry\r\n */\r\n registerRoute(metadata: RouteMetadata): void {\r\n const key = this.getRouteKey(metadata.target, metadata.propertyKey);\r\n this.routes.set(key, metadata);\r\n\r\n // Also track routes by controller\r\n if (!this.routesByController.has(metadata.target)) {\r\n this.routesByController.set(metadata.target, []);\r\n }\r\n this.routesByController.get(metadata.target)!.push(metadata);\r\n }\r\n\r\n /**\r\n * Register a controller in the registry\r\n */\r\n registerController(target: Class, metadata: ControllerMetadata): void {\r\n this.controllers.set(target, metadata);\r\n }\r\n\r\n /**\r\n * Get all registered routes\r\n */\r\n getRoutes(): RouteMetadata[] {\r\n return Array.from(this.routes.values());\r\n }\r\n\r\n /**\r\n * Get a specific route by target and property key\r\n */\r\n getRoute(target: Class, propertyKey: string): RouteMetadata | undefined {\r\n const key = this.getRouteKey(target, propertyKey);\r\n return this.routes.get(key);\r\n }\r\n\r\n /**\r\n * Get all routes for a specific controller\r\n */\r\n getRoutesByController(target: Class): RouteMetadata[] {\r\n return this.routesByController.get(target) || [];\r\n }\r\n\r\n /**\r\n * Get controller metadata\r\n */\r\n getController(target: Class): ControllerMetadata | undefined {\r\n return this.controllers.get(target);\r\n }\r\n\r\n /**\r\n * Get all registered controllers\r\n */\r\n getControllers(): Map<Class, ControllerMetadata> {\r\n return new Map(this.controllers);\r\n }\r\n\r\n /**\r\n * Register a WebSocket handler in the registry\r\n */\r\n registerWebSocket(metadata: WebSocketMetadata): void {\r\n this.websockets.set(metadata.target, metadata);\r\n }\r\n\r\n /**\r\n * Get all registered WebSocket handlers\r\n */\r\n getWebSockets(): WebSocketMetadata[] {\r\n return Array.from(this.websockets.values());\r\n }\r\n\r\n /**\r\n * Get WebSocket metadata for a specific target\r\n */\r\n getWebSocket(target: Class): WebSocketMetadata | undefined {\r\n return this.websockets.get(target);\r\n }\r\n\r\n /**\r\n * Register a GraphQL resolver in the registry\r\n */\r\n registerGraphQLResolver(metadata: GraphQLResolverMetadata): void {\r\n this.graphqlResolvers.set(metadata.target, metadata);\r\n }\r\n\r\n /**\r\n * Register a GraphQL field in the registry\r\n */\r\n registerGraphQLField(metadata: GraphQLFieldMetadata): void {\r\n const key = this.getRouteKey(metadata.target, metadata.propertyKey);\r\n this.graphqlFields.set(key, metadata);\r\n }\r\n\r\n /**\r\n * Get all registered GraphQL resolvers\r\n */\r\n getGraphQLResolvers(): GraphQLResolverMetadata[] {\r\n return Array.from(this.graphqlResolvers.values());\r\n }\r\n\r\n /**\r\n * Get GraphQL resolver metadata for a specific target\r\n */\r\n getGraphQLResolver(target: Class): GraphQLResolverMetadata | undefined {\r\n return this.graphqlResolvers.get(target);\r\n }\r\n\r\n /**\r\n * Get all GraphQL fields\r\n */\r\n getGraphQLFields(): GraphQLFieldMetadata[] {\r\n return Array.from(this.graphqlFields.values());\r\n }\r\n\r\n /**\r\n * Get GraphQL fields for a specific resolver\r\n */\r\n getGraphQLFieldsByResolver(target: Class): GraphQLFieldMetadata[] {\r\n return Array.from(this.graphqlFields.values()).filter(\r\n field => field.target === target\r\n );\r\n }\r\n\r\n /**\r\n * Clear all metadata (useful for testing)\r\n */\r\n clear(): void {\r\n this.routes.clear();\r\n this.controllers.clear();\r\n this.routesByController.clear();\r\n this.websockets.clear();\r\n this.graphqlResolvers.clear();\r\n this.graphqlFields.clear();\r\n }\r\n\r\n /**\r\n * Generate a unique key for a route\r\n */\r\n private getRouteKey(target: Class, propertyKey: string): string {\r\n return `${target.name}:${propertyKey}`;\r\n }\r\n\r\n // ============================================================================\r\n // Static methods for decorator usage\r\n // ============================================================================\r\n\r\n /**\r\n * Define route metadata using reflect-metadata (used by decorators)\r\n */\r\n static defineRoute(\r\n target: any,\r\n propertyKey: string,\r\n metadata: Partial<RouteMetadata>\r\n ): void {\r\n const existingMetadata = this.getRouteMetadata(target, propertyKey);\r\n \r\n const mergedMetadata: Partial<RouteMetadata> = {\r\n ...existingMetadata,\r\n ...metadata,\r\n target: target.constructor,\r\n propertyKey,\r\n // Merge arrays instead of replacing\r\n middleware: [\r\n ...(existingMetadata?.middleware || []),\r\n ...(metadata.middleware || [])\r\n ],\r\n parameters: metadata.parameters || existingMetadata?.parameters || [],\r\n dependencies: metadata.dependencies || existingMetadata?.dependencies || [],\r\n responses: metadata.responses || existingMetadata?.responses || []\r\n };\r\n\r\n Reflect.defineMetadata(\r\n ROUTE_METADATA_KEY,\r\n mergedMetadata,\r\n target,\r\n propertyKey\r\n );\r\n }\r\n\r\n /**\r\n * Define parameter metadata (used by parameter decorators)\r\n */\r\n static defineParameter(\r\n target: any,\r\n propertyKey: string,\r\n index: number,\r\n metadata: ParameterMetadata\r\n ): void {\r\n const existingParams = this.getParameterMetadata(target, propertyKey) || [];\r\n \r\n // Update or add parameter at the specified index\r\n existingParams[index] = metadata;\r\n\r\n Reflect.defineMetadata(\r\n PARAMETER_METADATA_KEY,\r\n existingParams,\r\n target,\r\n propertyKey\r\n );\r\n\r\n // Also update the route metadata to include this parameter\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n parameters: existingParams\r\n });\r\n }\r\n\r\n /**\r\n * Define dependency metadata (used by @Depends decorator)\r\n */\r\n static defineDependency(\r\n target: any,\r\n propertyKey: string,\r\n index: number,\r\n metadata: DependencyMetadata\r\n ): void {\r\n const existingDeps = this.getDependencyMetadata(target, propertyKey) || [];\r\n \r\n // Update or add dependency at the specified index\r\n existingDeps[index] = metadata;\r\n\r\n Reflect.defineMetadata(\r\n DEPENDENCY_METADATA_KEY,\r\n existingDeps,\r\n target,\r\n propertyKey\r\n );\r\n\r\n // Also update the route metadata to include this dependency\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n dependencies: existingDeps\r\n });\r\n }\r\n\r\n /**\r\n * Define controller metadata (used by @Controller decorator)\r\n */\r\n static defineController(target: any, metadata: ControllerMetadata): void {\r\n Reflect.defineMetadata(CONTROLLER_METADATA_KEY, metadata, target);\r\n }\r\n\r\n /**\r\n * Get route metadata from reflect-metadata\r\n */\r\n static getRouteMetadata(target: any, propertyKey: string): Partial<RouteMetadata> | undefined {\r\n return Reflect.getMetadata(ROUTE_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Get parameter metadata from reflect-metadata\r\n */\r\n static getParameterMetadata(target: any, propertyKey: string): ParameterMetadata[] | undefined {\r\n return Reflect.getMetadata(PARAMETER_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Get dependency metadata from reflect-metadata\r\n */\r\n static getDependencyMetadata(target: any, propertyKey: string): DependencyMetadata[] | undefined {\r\n return Reflect.getMetadata(DEPENDENCY_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Get controller metadata from reflect-metadata\r\n */\r\n static getControllerMetadata(target: any): ControllerMetadata | undefined {\r\n return Reflect.getMetadata(CONTROLLER_METADATA_KEY, target);\r\n }\r\n\r\n /**\r\n * Check if a class has controller metadata\r\n */\r\n static hasControllerMetadata(target: any): boolean {\r\n return Reflect.hasMetadata(CONTROLLER_METADATA_KEY, target);\r\n }\r\n\r\n /**\r\n * Check if a method has route metadata\r\n */\r\n static hasRouteMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(ROUTE_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Get all route methods from a controller class\r\n */\r\n static getRouteMethods(target: Class): string[] {\r\n const prototype = target.prototype;\r\n const methods: string[] = [];\r\n\r\n // Get all property names from the prototype\r\n const propertyNames = Object.getOwnPropertyNames(prototype);\r\n\r\n for (const propertyName of propertyNames) {\r\n if (propertyName === 'constructor') continue;\r\n \r\n if (this.hasRouteMetadata(prototype, propertyName)) {\r\n methods.push(propertyName);\r\n }\r\n }\r\n\r\n return methods;\r\n }\r\n\r\n /**\r\n * Define WebSocket metadata (used by @WebSocket decorator)\r\n */\r\n static defineWebSocket(target: any, metadata: Partial<WebSocketMetadata>): void {\r\n const existingMetadata = this.getWebSocketMetadata(target);\r\n \r\n const mergedMetadata: Partial<WebSocketMetadata> = {\r\n ...existingMetadata,\r\n ...metadata,\r\n target: target\r\n };\r\n\r\n Reflect.defineMetadata(WEBSOCKET_METADATA_KEY, mergedMetadata, target);\r\n }\r\n\r\n /**\r\n * Define WebSocket handler metadata (used by @OnConnect, @OnMessage, @OnDisconnect)\r\n */\r\n static defineWebSocketHandler(\r\n target: any,\r\n propertyKey: string,\r\n metadata: WebSocketHandlerMetadata\r\n ): void {\r\n // Get existing WebSocket metadata\r\n const wsMetadata = this.getWebSocketMetadata(target.constructor) || {};\r\n\r\n // Update the appropriate handler\r\n switch (metadata.type) {\r\n case 'connect':\r\n wsMetadata.onConnect = propertyKey;\r\n break;\r\n case 'message':\r\n wsMetadata.onMessage = propertyKey;\r\n wsMetadata.messageSchema = metadata.schema;\r\n break;\r\n case 'disconnect':\r\n wsMetadata.onDisconnect = propertyKey;\r\n break;\r\n }\r\n\r\n // Save updated metadata\r\n this.defineWebSocket(target.constructor, wsMetadata);\r\n\r\n // Also store handler-specific metadata\r\n Reflect.defineMetadata(\r\n WEBSOCKET_HANDLER_METADATA_KEY,\r\n metadata,\r\n target,\r\n propertyKey\r\n );\r\n }\r\n\r\n /**\r\n * Get WebSocket metadata from reflect-metadata\r\n */\r\n static getWebSocketMetadata(target: any): Partial<WebSocketMetadata> | undefined {\r\n return Reflect.getMetadata(WEBSOCKET_METADATA_KEY, target);\r\n }\r\n\r\n /**\r\n * Get WebSocket handler metadata from reflect-metadata\r\n */\r\n static getWebSocketHandlerMetadata(target: any, propertyKey: string): WebSocketHandlerMetadata | undefined {\r\n return Reflect.getMetadata(WEBSOCKET_HANDLER_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a class has WebSocket metadata\r\n */\r\n static hasWebSocketMetadata(target: any): boolean {\r\n return Reflect.hasMetadata(WEBSOCKET_METADATA_KEY, target);\r\n }\r\n\r\n /**\r\n * Define GraphQL resolver metadata (used by @Resolver decorator)\r\n */\r\n static defineGraphQLResolver(target: any, metadata: GraphQLResolverMetadata): void {\r\n Reflect.defineMetadata(GRAPHQL_RESOLVER_KEY, metadata, target);\r\n }\r\n\r\n /**\r\n * Define GraphQL field metadata (used by @Query, @Mutation, @Subscription decorators)\r\n */\r\n static defineGraphQLField(\r\n target: any,\r\n propertyKey: string,\r\n metadata: GraphQLFieldMetadata\r\n ): void {\r\n // Store field metadata on the method\r\n Reflect.defineMetadata(GRAPHQL_FIELD_KEY, metadata, target, propertyKey);\r\n\r\n // Also maintain a list of all fields on the class\r\n const existingFields = this.getGraphQLFieldsMetadata(target.constructor) || [];\r\n existingFields.push(metadata);\r\n Reflect.defineMetadata(GRAPHQL_FIELD_KEY, existingFields, target.constructor);\r\n }\r\n\r\n /**\r\n * Get GraphQL resolver metadata from reflect-metadata\r\n */\r\n static getGraphQLResolverMetadata(target: any): GraphQLResolverMetadata | undefined {\r\n return Reflect.getMetadata(GRAPHQL_RESOLVER_KEY, target);\r\n }\r\n\r\n /**\r\n * Get all GraphQL fields metadata from a resolver class\r\n */\r\n static getGraphQLFieldsMetadata(target: any): GraphQLFieldMetadata[] {\r\n return Reflect.getMetadata(GRAPHQL_FIELD_KEY, target) || [];\r\n }\r\n\r\n /**\r\n * Get GraphQL field metadata from a specific method\r\n */\r\n static getGraphQLFieldMetadata(target: any, propertyKey: string): GraphQLFieldMetadata | undefined {\r\n return Reflect.getMetadata(GRAPHQL_FIELD_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a class has GraphQL resolver metadata\r\n */\r\n static hasGraphQLResolverMetadata(target: any): boolean {\r\n return Reflect.hasMetadata(GRAPHQL_RESOLVER_KEY, target);\r\n }\r\n\r\n /**\r\n * Check if a method has GraphQL field metadata\r\n */\r\n static hasGraphQLFieldMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(GRAPHQL_FIELD_KEY, target, propertyKey);\r\n }\r\n}\r\n",
87
+ "import type { Provider, Scope, Context, ProviderConfig, Class } from '../types';\r\n\r\n/**\r\n * Dependency Injection Container\r\n * Manages dependency lifecycle with support for singleton, request, and transient scopes\r\n * \r\n * Performance optimizations:\r\n * - Singleton instances cached globally for reuse across all requests\r\n * - Request-scoped instances cached per-request using WeakMap for automatic cleanup\r\n * - Provider name cache to avoid repeated string operations\r\n * - Fast-path for already resolved singletons\r\n */\r\nexport class DIContainer {\r\n // Storage for singleton instances (global cache) - optimized for fast lookups\r\n private singletons: Map<Provider, any> = new Map();\r\n \r\n // Storage for request-scoped instances (per-request cache) - uses WeakMap for automatic GC\r\n private requestScoped: WeakMap<Context, Map<Provider, any>> = new WeakMap();\r\n \r\n // Provider configurations - cached to avoid repeated lookups\r\n private providers: Map<Provider, ProviderConfig> = new Map();\r\n \r\n // Track resolution stack for circular dependency detection\r\n private resolutionStack: Set<Provider> = new Set();\r\n \r\n // Cache provider names for error messages (avoid repeated string operations)\r\n private providerNameCache: WeakMap<Provider, string> = new WeakMap();\r\n \r\n // Statistics for monitoring performance (optional, for debugging)\r\n private stats = {\r\n singletonHits: 0,\r\n singletonMisses: 0,\r\n requestHits: 0,\r\n requestMisses: 0,\r\n transientCreations: 0\r\n };\r\n\r\n /**\r\n * Register a provider with optional configuration\r\n * @param provider - Class or factory function to provide the dependency\r\n * @param config - Configuration including scope and factory\r\n */\r\n register(provider: Provider, config?: ProviderConfig): void {\r\n this.providers.set(provider, config || { scope: 'transient' });\r\n }\r\n\r\n /**\r\n * Resolve a dependency with the specified scope\r\n * Optimized with fast-path for cached singletons and request-scoped instances\r\n * \r\n * @param provider - The provider to resolve\r\n * @param options - Resolution options including scope and context\r\n * @returns The resolved dependency instance\r\n */\r\n async resolve<T>(\r\n provider: Provider<T>,\r\n options?: { scope?: Scope; context?: Context }\r\n ): Promise<T> {\r\n const config = this.providers.get(provider) || { scope: options?.scope || 'transient' };\r\n const scope = options?.scope || config.scope || 'transient';\r\n\r\n // Fast-path for singleton: check cache first before any other operations\r\n if (scope === 'singleton') {\r\n // Check if already cached (hot path - most common case)\r\n if (this.singletons.has(provider)) {\r\n this.stats.singletonHits++;\r\n return this.singletons.get(provider);\r\n }\r\n \r\n this.stats.singletonMisses++;\r\n \r\n // Check for circular dependencies only when creating new instance\r\n if (this.resolutionStack.has(provider)) {\r\n throw new Error(`Circular dependency detected: ${this.buildCircularDependencyMessage(provider)}`);\r\n }\r\n\r\n // Create and cache singleton\r\n this.resolutionStack.add(provider);\r\n try {\r\n const instance = await this.create(provider, config, options?.context);\r\n this.singletons.set(provider, instance);\r\n return instance;\r\n } finally {\r\n this.resolutionStack.delete(provider);\r\n }\r\n }\r\n\r\n // Fast-path for request-scoped: check cache first\r\n if (scope === 'request' && options?.context) {\r\n let requestMap = this.requestScoped.get(options.context);\r\n \r\n // Check if already cached in this request\r\n if (requestMap?.has(provider)) {\r\n this.stats.requestHits++;\r\n return requestMap.get(provider);\r\n }\r\n \r\n this.stats.requestMisses++;\r\n \r\n // Initialize request map if needed\r\n if (!requestMap) {\r\n requestMap = new Map();\r\n this.requestScoped.set(options.context, requestMap);\r\n }\r\n\r\n // Check for circular dependencies only when creating new instance\r\n if (this.resolutionStack.has(provider)) {\r\n throw new Error(`Circular dependency detected: ${this.buildCircularDependencyMessage(provider)}`);\r\n }\r\n\r\n // Create and cache request-scoped instance\r\n this.resolutionStack.add(provider);\r\n try {\r\n const instance = await this.create(provider, config, options.context);\r\n requestMap.set(provider, instance);\r\n return instance;\r\n } finally {\r\n this.resolutionStack.delete(provider);\r\n }\r\n }\r\n\r\n // Transient: new instance every time (no caching)\r\n this.stats.transientCreations++;\r\n \r\n // Check for circular dependencies\r\n if (this.resolutionStack.has(provider)) {\r\n throw new Error(`Circular dependency detected: ${this.buildCircularDependencyMessage(provider)}`);\r\n }\r\n\r\n this.resolutionStack.add(provider);\r\n try {\r\n return await this.create(provider, config, options?.context);\r\n } finally {\r\n this.resolutionStack.delete(provider);\r\n }\r\n }\r\n\r\n /**\r\n * Build a detailed circular dependency error message\r\n * Uses cached provider names for performance\r\n */\r\n private buildCircularDependencyMessage(provider: Provider): string {\r\n const stackArray = Array.from(this.resolutionStack);\r\n const providerName = this.getProviderName(provider);\r\n const cycle = stackArray.map(p => this.getProviderName(p)).join(' -> ') + ' -> ' + providerName;\r\n return cycle;\r\n }\r\n\r\n /**\r\n * Create a new instance of the provider\r\n * @param provider - The provider to instantiate\r\n * @param config - Provider configuration\r\n * @param context - Optional context for request-scoped dependencies\r\n * @returns The created instance\r\n */\r\n private async create<T>(\r\n provider: Provider<T>,\r\n config: ProviderConfig,\r\n context?: Context\r\n ): Promise<T> {\r\n // Use custom factory if provided\r\n if (config.factory) {\r\n return config.factory();\r\n }\r\n\r\n if (typeof provider === 'function') {\r\n // Check if it's a class (has prototype) or a factory function\r\n if (provider.prototype && provider.prototype.constructor === provider) {\r\n // It's a class - instantiate it\r\n // Check if the class has constructor dependencies\r\n const instance = new (provider as Class<T>)();\r\n \r\n // Resolve nested dependencies if any are registered\r\n // This allows for constructor injection in the future\r\n await this.resolveNestedDependencies(instance, context);\r\n \r\n return instance;\r\n } else {\r\n // It's a factory function - call it\r\n const result = (provider as Function)();\r\n // Handle both sync and async factories\r\n return result instanceof Promise ? await result : result;\r\n }\r\n }\r\n\r\n throw new Error('Invalid provider type');\r\n }\r\n\r\n /**\r\n * Resolve nested dependencies for an instance\r\n * This method can be extended to support constructor injection\r\n * @param instance - The instance to resolve dependencies for\r\n * @param context - Optional context for request-scoped dependencies\r\n */\r\n private async resolveNestedDependencies(instance: any, context?: Context): Promise<void> {\r\n // This is a placeholder for future nested dependency resolution\r\n // Currently, dependencies are resolved at the parameter level by the RouterCompiler\r\n // In the future, this could support constructor injection by reading metadata\r\n // from the class constructor parameters\r\n }\r\n\r\n /**\r\n * Get a human-readable name for a provider (for error messages)\r\n * Uses cache to avoid repeated string operations\r\n * \r\n * @param provider - The provider to get the name for\r\n * @returns A string representation of the provider\r\n */\r\n private getProviderName(provider: Provider): string {\r\n // Check cache first\r\n const cached = this.providerNameCache.get(provider);\r\n if (cached) {\r\n return cached;\r\n }\r\n \r\n // Generate name\r\n let name: string;\r\n if (typeof provider === 'function') {\r\n if (provider.name) {\r\n name = provider.name;\r\n } else {\r\n name = provider.toString().substring(0, 50);\r\n }\r\n } else {\r\n name = String(provider);\r\n }\r\n \r\n // Cache for future use\r\n this.providerNameCache.set(provider, name);\r\n return name;\r\n }\r\n\r\n /**\r\n * Clear all cached instances (useful for testing)\r\n */\r\n clear(): void {\r\n this.singletons.clear();\r\n this.providers.clear();\r\n this.resolutionStack.clear();\r\n this.providerNameCache = new WeakMap();\r\n this.resetStats();\r\n }\r\n\r\n /**\r\n * Clear request-scoped cache for a specific context\r\n * This is automatically handled by WeakMap garbage collection,\r\n * but can be called explicitly for immediate cleanup\r\n */\r\n clearRequestScope(context: Context): void {\r\n this.requestScoped.delete(context);\r\n }\r\n\r\n /**\r\n * Get dependency resolution statistics (useful for monitoring and debugging)\r\n * Returns cache hit rates and creation counts\r\n */\r\n getStats(): {\r\n singletonHits: number;\r\n singletonMisses: number;\r\n singletonHitRate: number;\r\n requestHits: number;\r\n requestMisses: number;\r\n requestHitRate: number;\r\n transientCreations: number;\r\n } {\r\n const singletonTotal = this.stats.singletonHits + this.stats.singletonMisses;\r\n const singletonHitRate = singletonTotal > 0 \r\n ? (this.stats.singletonHits / singletonTotal) * 100 \r\n : 0;\r\n \r\n const requestTotal = this.stats.requestHits + this.stats.requestMisses;\r\n const requestHitRate = requestTotal > 0 \r\n ? (this.stats.requestHits / requestTotal) * 100 \r\n : 0;\r\n \r\n return {\r\n singletonHits: this.stats.singletonHits,\r\n singletonMisses: this.stats.singletonMisses,\r\n singletonHitRate: Math.round(singletonHitRate * 100) / 100,\r\n requestHits: this.stats.requestHits,\r\n requestMisses: this.stats.requestMisses,\r\n requestHitRate: Math.round(requestHitRate * 100) / 100,\r\n transientCreations: this.stats.transientCreations\r\n };\r\n }\r\n\r\n /**\r\n * Reset statistics (useful for testing)\r\n */\r\n resetStats(): void {\r\n this.stats = {\r\n singletonHits: 0,\r\n singletonMisses: 0,\r\n requestHits: 0,\r\n requestMisses: 0,\r\n transientCreations: 0\r\n };\r\n }\r\n}\r\n",
88
+ "// src/utils/cookie.ts\nimport { decodeURIComponent_, tryDecode } from \"./url.js\";\nvar algorithm = { name: \"HMAC\", hash: \"SHA-256\" };\nvar getCryptoKey = async (secret) => {\n const secretBuf = typeof secret === \"string\" ? new TextEncoder().encode(secret) : secret;\n return await crypto.subtle.importKey(\"raw\", secretBuf, algorithm, false, [\"sign\", \"verify\"]);\n};\nvar makeSignature = async (value, secret) => {\n const key = await getCryptoKey(secret);\n const signature = await crypto.subtle.sign(algorithm.name, key, new TextEncoder().encode(value));\n return btoa(String.fromCharCode(...new Uint8Array(signature)));\n};\nvar verifySignature = async (base64Signature, value, secret) => {\n try {\n const signatureBinStr = atob(base64Signature);\n const signature = new Uint8Array(signatureBinStr.length);\n for (let i = 0, len = signatureBinStr.length; i < len; i++) {\n signature[i] = signatureBinStr.charCodeAt(i);\n }\n return await crypto.subtle.verify(algorithm, secret, signature, new TextEncoder().encode(value));\n } catch {\n return false;\n }\n};\nvar validCookieNameRegEx = /^[\\w!#$%&'*.^`|~+-]+$/;\nvar validCookieValueRegEx = /^[ !#-:<-[\\]-~]*$/;\nvar parse = (cookie, name) => {\n if (name && cookie.indexOf(name) === -1) {\n return {};\n }\n const pairs = cookie.trim().split(\";\");\n const parsedCookie = {};\n for (let pairStr of pairs) {\n pairStr = pairStr.trim();\n const valueStartPos = pairStr.indexOf(\"=\");\n if (valueStartPos === -1) {\n continue;\n }\n const cookieName = pairStr.substring(0, valueStartPos).trim();\n if (name && name !== cookieName || !validCookieNameRegEx.test(cookieName)) {\n continue;\n }\n let cookieValue = pairStr.substring(valueStartPos + 1).trim();\n if (cookieValue.startsWith('\"') && cookieValue.endsWith('\"')) {\n cookieValue = cookieValue.slice(1, -1);\n }\n if (validCookieValueRegEx.test(cookieValue)) {\n parsedCookie[cookieName] = cookieValue.indexOf(\"%\") !== -1 ? tryDecode(cookieValue, decodeURIComponent_) : cookieValue;\n if (name) {\n break;\n }\n }\n }\n return parsedCookie;\n};\nvar parseSigned = async (cookie, secret, name) => {\n const parsedCookie = {};\n const secretKey = await getCryptoKey(secret);\n for (const [key, value] of Object.entries(parse(cookie, name))) {\n const signatureStartPos = value.lastIndexOf(\".\");\n if (signatureStartPos < 1) {\n continue;\n }\n const signedValue = value.substring(0, signatureStartPos);\n const signature = value.substring(signatureStartPos + 1);\n if (signature.length !== 44 || !signature.endsWith(\"=\")) {\n continue;\n }\n const isVerified = await verifySignature(signature, signedValue, secretKey);\n parsedCookie[key] = isVerified ? signedValue : false;\n }\n return parsedCookie;\n};\nvar _serialize = (name, value, opt = {}) => {\n let cookie = `${name}=${value}`;\n if (name.startsWith(\"__Secure-\") && !opt.secure) {\n throw new Error(\"__Secure- Cookie must have Secure attributes\");\n }\n if (name.startsWith(\"__Host-\")) {\n if (!opt.secure) {\n throw new Error(\"__Host- Cookie must have Secure attributes\");\n }\n if (opt.path !== \"/\") {\n throw new Error('__Host- Cookie must have Path attributes with \"/\"');\n }\n if (opt.domain) {\n throw new Error(\"__Host- Cookie must not have Domain attributes\");\n }\n }\n if (opt && typeof opt.maxAge === \"number\" && opt.maxAge >= 0) {\n if (opt.maxAge > 3456e4) {\n throw new Error(\n \"Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.\"\n );\n }\n cookie += `; Max-Age=${opt.maxAge | 0}`;\n }\n if (opt.domain && opt.prefix !== \"host\") {\n cookie += `; Domain=${opt.domain}`;\n }\n if (opt.path) {\n cookie += `; Path=${opt.path}`;\n }\n if (opt.expires) {\n if (opt.expires.getTime() - Date.now() > 3456e7) {\n throw new Error(\n \"Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.\"\n );\n }\n cookie += `; Expires=${opt.expires.toUTCString()}`;\n }\n if (opt.httpOnly) {\n cookie += \"; HttpOnly\";\n }\n if (opt.secure) {\n cookie += \"; Secure\";\n }\n if (opt.sameSite) {\n cookie += `; SameSite=${opt.sameSite.charAt(0).toUpperCase() + opt.sameSite.slice(1)}`;\n }\n if (opt.priority) {\n cookie += `; Priority=${opt.priority.charAt(0).toUpperCase() + opt.priority.slice(1)}`;\n }\n if (opt.partitioned) {\n if (!opt.secure) {\n throw new Error(\"Partitioned Cookie must have Secure attributes\");\n }\n cookie += \"; Partitioned\";\n }\n return cookie;\n};\nvar serialize = (name, value, opt) => {\n value = encodeURIComponent(value);\n return _serialize(name, value, opt);\n};\nvar serializeSigned = async (name, value, secret, opt = {}) => {\n const signature = await makeSignature(value, secret);\n value = `${value}.${signature}`;\n value = encodeURIComponent(value);\n return _serialize(name, value, opt);\n};\nexport {\n parse,\n parseSigned,\n serialize,\n serializeSigned\n};\n",
89
+ "// src/helper/cookie/index.ts\nimport { parse, parseSigned, serialize, serializeSigned } from \"../../utils/cookie.js\";\nvar getCookie = (c, key, prefix) => {\n const cookie = c.req.raw.headers.get(\"Cookie\");\n if (typeof key === \"string\") {\n if (!cookie) {\n return void 0;\n }\n let finalKey = key;\n if (prefix === \"secure\") {\n finalKey = \"__Secure-\" + key;\n } else if (prefix === \"host\") {\n finalKey = \"__Host-\" + key;\n }\n const obj2 = parse(cookie, finalKey);\n return obj2[finalKey];\n }\n if (!cookie) {\n return {};\n }\n const obj = parse(cookie);\n return obj;\n};\nvar getSignedCookie = async (c, secret, key, prefix) => {\n const cookie = c.req.raw.headers.get(\"Cookie\");\n if (typeof key === \"string\") {\n if (!cookie) {\n return void 0;\n }\n let finalKey = key;\n if (prefix === \"secure\") {\n finalKey = \"__Secure-\" + key;\n } else if (prefix === \"host\") {\n finalKey = \"__Host-\" + key;\n }\n const obj2 = await parseSigned(cookie, secret, finalKey);\n return obj2[finalKey];\n }\n if (!cookie) {\n return {};\n }\n const obj = await parseSigned(cookie, secret);\n return obj;\n};\nvar generateCookie = (name, value, opt) => {\n let cookie;\n if (opt?.prefix === \"secure\") {\n cookie = serialize(\"__Secure-\" + name, value, { path: \"/\", ...opt, secure: true });\n } else if (opt?.prefix === \"host\") {\n cookie = serialize(\"__Host-\" + name, value, {\n ...opt,\n path: \"/\",\n secure: true,\n domain: void 0\n });\n } else {\n cookie = serialize(name, value, { path: \"/\", ...opt });\n }\n return cookie;\n};\nvar setCookie = (c, name, value, opt) => {\n const cookie = generateCookie(name, value, opt);\n c.header(\"Set-Cookie\", cookie, { append: true });\n};\nvar generateSignedCookie = async (name, value, secret, opt) => {\n let cookie;\n if (opt?.prefix === \"secure\") {\n cookie = await serializeSigned(\"__Secure-\" + name, value, secret, {\n path: \"/\",\n ...opt,\n secure: true\n });\n } else if (opt?.prefix === \"host\") {\n cookie = await serializeSigned(\"__Host-\" + name, value, secret, {\n ...opt,\n path: \"/\",\n secure: true,\n domain: void 0\n });\n } else {\n cookie = await serializeSigned(name, value, secret, { path: \"/\", ...opt });\n }\n return cookie;\n};\nvar setSignedCookie = async (c, name, value, secret, opt) => {\n const cookie = await generateSignedCookie(name, value, secret, opt);\n c.header(\"set-cookie\", cookie, { append: true });\n};\nvar deleteCookie = (c, name, opt) => {\n const deletedCookie = getCookie(c, name, opt?.prefix);\n setCookie(c, name, \"\", { ...opt, maxAge: 0 });\n return deletedCookie;\n};\nexport {\n deleteCookie,\n generateCookie,\n generateSignedCookie,\n getCookie,\n getSignedCookie,\n setCookie,\n setSignedCookie\n};\n",
90
+ "// Response builders for different content types\r\nimport type { Context } from '../types';\r\n\r\nexport interface FileOptions {\r\n filename?: string;\r\n contentType?: string;\r\n download?: boolean;\r\n}\r\n\r\nexport interface StreamOptions {\r\n contentType?: string;\r\n headers?: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Response builder class providing static factory methods\r\n * for creating different types of HTTP responses\r\n * \r\n * @example\r\n * ```typescript\r\n * // Return JSON response\r\n * return Response.json({ id: 1, name: 'John' });\r\n * \r\n * // Return HTML\r\n * return Response.html('<h1>Hello World</h1>');\r\n * \r\n * // Serve a file\r\n * return Response.file('./uploads/document.pdf', { download: true });\r\n * \r\n * // Redirect\r\n * return Response.redirect('/login', 302);\r\n * ```\r\n */\r\nexport class Response {\r\n /**\r\n * Create a JSON response\r\n * @param data - The data to serialize as JSON\r\n * @param status - HTTP status code (default: 200)\r\n * @param headers - Optional custom headers\r\n * @returns JSONResponse instance\r\n * \r\n * @example\r\n * ```typescript\r\n * @Get('/users/:id')\r\n * getUser(@Param('id') id: string) {\r\n * return Response.json({ id, name: 'John' }, 200);\r\n * }\r\n * ```\r\n */\r\n static json(data: any, status: number = 200, headers?: Record<string, string>) {\r\n return new JSONResponse(data, status, headers);\r\n }\r\n\r\n /**\r\n * Create an HTML response\r\n * @param content - HTML content string\r\n * @param status - HTTP status code (default: 200)\r\n * @returns HTMLResponse instance\r\n * \r\n * @example\r\n * ```typescript\r\n * @Get('/page')\r\n * getPage() {\r\n * return Response.html('<h1>Welcome</h1>');\r\n * }\r\n * ```\r\n */\r\n static html(content: string, status: number = 200) {\r\n return new HTMLResponse(content, status);\r\n }\r\n\r\n /**\r\n * Create a file response to serve static files\r\n * @param path - Path to the file\r\n * @param options - File serving options (filename, contentType, download)\r\n * @returns FileResponse instance\r\n * \r\n * @example\r\n * ```typescript\r\n * @Get('/download/:filename')\r\n * downloadFile(@Param('filename') filename: string) {\r\n * return Response.file(`./uploads/${filename}`, { download: true });\r\n * }\r\n * ```\r\n */\r\n static file(path: string, options?: FileOptions) {\r\n return new FileResponse(path, options);\r\n }\r\n\r\n /**\r\n * Create a streaming response for large data or real-time content\r\n * @param stream - ReadableStream to send\r\n * @param options - Stream options (contentType, headers)\r\n * @returns StreamResponse instance\r\n * \r\n * @example\r\n * ```typescript\r\n * @Get('/stream')\r\n * streamData() {\r\n * const stream = new ReadableStream({\r\n * start(controller) {\r\n * controller.enqueue('chunk 1');\r\n * controller.close();\r\n * }\r\n * });\r\n * return Response.stream(stream, { contentType: 'text/plain' });\r\n * }\r\n * ```\r\n */\r\n static stream(stream: ReadableStream, options?: StreamOptions) {\r\n return new StreamResponse(stream, options);\r\n }\r\n\r\n /**\r\n * Create a redirect response\r\n * @param url - URL to redirect to\r\n * @param status - HTTP status code (default: 302)\r\n * @returns RedirectResponse instance\r\n * \r\n * @example\r\n * ```typescript\r\n * @Post('/login')\r\n * login(@Body(LoginSchema) credentials: LoginData) {\r\n * // ... authenticate user\r\n * return Response.redirect('/dashboard', 302);\r\n * }\r\n * ```\r\n */\r\n static redirect(url: string, status: number = 302) {\r\n return new RedirectResponse(url, status);\r\n }\r\n}\r\n\r\n/**\r\n * JSON response class\r\n * Serializes data as JSON with specified status code and headers\r\n */\r\nexport class JSONResponse {\r\n constructor(\r\n public data: any,\r\n public status: number = 200,\r\n public headers: Record<string, string> = {}\r\n ) { }\r\n\r\n /**\r\n * Convert to Hono response format\r\n * @param c - Hono context\r\n * @returns Hono JSON response\r\n */\r\n toHonoResponse(c: Context) {\r\n return c.json(this.data, this.status as any, this.headers);\r\n }\r\n}\r\n\r\n/**\r\n * HTML response class\r\n * Returns HTML content with proper Content-Type header\r\n */\r\nexport class HTMLResponse {\r\n constructor(\r\n public content: string,\r\n public status: number = 200\r\n ) { }\r\n\r\n /**\r\n * Convert to Hono response format\r\n * @param c - Hono context\r\n * @returns Hono HTML response\r\n */\r\n toHonoResponse(c: Context) {\r\n return c.html(this.content, this.status as any);\r\n }\r\n}\r\n\r\n/**\r\n * Redirect response class\r\n * Performs HTTP redirect to specified URL\r\n */\r\nexport class RedirectResponse {\r\n constructor(\r\n public url: string,\r\n public status: number = 302\r\n ) { }\r\n\r\n /**\r\n * Convert to Hono response format\r\n * @param c - Hono context\r\n * @returns Hono redirect response\r\n */\r\n toHonoResponse(c: Context) {\r\n return c.redirect(this.url, this.status as any);\r\n }\r\n}\r\n\r\n/**\r\n * FileResponse serves a file from the filesystem\r\n * Supports custom filenames, content types, and download mode\r\n */\r\nexport class FileResponse {\r\n constructor(\r\n public path: string,\r\n public options?: FileOptions\r\n ) { }\r\n\r\n async toHonoResponse(c: Context) {\r\n try {\r\n // Read file using Bun's file API (works in Bun runtime)\r\n // For other runtimes, this would need adapter-specific implementation\r\n const file = typeof Bun !== 'undefined' \r\n ? Bun.file(this.path)\r\n : await this.readFileNode(this.path);\r\n\r\n // Determine content type\r\n const contentType = this.options?.contentType || this.guessContentType(this.path);\r\n\r\n // Build headers\r\n const headers: Record<string, string> = {\r\n 'Content-Type': contentType,\r\n };\r\n\r\n // Add Content-Disposition for downloads or custom filenames\r\n if (this.options?.download || this.options?.filename) {\r\n const filename = this.options?.filename || this.path.split('/').pop() || 'download';\r\n const disposition = this.options?.download ? 'attachment' : 'inline';\r\n headers['Content-Disposition'] = `${disposition}; filename=\"${filename}\"`;\r\n }\r\n\r\n // Return file response\r\n if (typeof Bun !== 'undefined' && file instanceof Blob) {\r\n return c.body(file as any, 200, headers);\r\n } else {\r\n // For Node.js or other runtimes\r\n return c.body(file as any, 200, headers);\r\n }\r\n } catch (error) {\r\n // File not found or read error\r\n return c.json(\r\n { \r\n error: 'File not found',\r\n message: error instanceof Error ? error.message : 'Unknown error'\r\n },\r\n 404\r\n );\r\n }\r\n }\r\n\r\n private async readFileNode(path: string): Promise<Blob> {\r\n // Fallback for Node.js - would need fs module\r\n // This is a placeholder that works with the type system\r\n throw new Error('File reading in Node.js requires fs module - use Bun runtime or implement adapter');\r\n }\r\n\r\n private guessContentType(path: string): string {\r\n const ext = path.split('.').pop()?.toLowerCase();\r\n const mimeTypes: Record<string, string> = {\r\n 'html': 'text/html',\r\n 'css': 'text/css',\r\n 'js': 'application/javascript',\r\n 'json': 'application/json',\r\n 'png': 'image/png',\r\n 'jpg': 'image/jpeg',\r\n 'jpeg': 'image/jpeg',\r\n 'gif': 'image/gif',\r\n 'svg': 'image/svg+xml',\r\n 'pdf': 'application/pdf',\r\n 'txt': 'text/plain',\r\n 'xml': 'application/xml',\r\n };\r\n return mimeTypes[ext || ''] || 'application/octet-stream';\r\n }\r\n}\r\n\r\n/**\r\n * StreamResponse sends data as a stream\r\n * Useful for large files, real-time data, or server-sent events\r\n */\r\nexport class StreamResponse {\r\n constructor(\r\n public stream: ReadableStream,\r\n public options?: StreamOptions\r\n ) { }\r\n\r\n toHonoResponse(c: Context) {\r\n const headers: Record<string, string> = {\r\n 'Content-Type': this.options?.contentType || 'application/octet-stream',\r\n ...this.options?.headers,\r\n };\r\n\r\n // Return streaming response\r\n return c.body(this.stream as any, 200, headers);\r\n }\r\n}\r\n\r\n/**\r\n * ResponseSerializer handles automatic serialization of handler return values\r\n * Converts different return types into appropriate HTTP responses\r\n */\r\nexport class ResponseSerializer {\r\n /**\r\n * Serialize a handler result into an HTTP response\r\n * \r\n * @param c - Hono context\r\n * @param result - The value returned from the handler\r\n * @returns Serialized HTTP response\r\n */\r\n static serialize(c: Context, result: any): any {\r\n // Handle null/undefined as 204 No Content\r\n if (result === null || result === undefined) {\r\n return c.body(null, 204);\r\n }\r\n\r\n // If result is already a native Response object, return it directly\r\n if (result instanceof Response) {\r\n return result;\r\n }\r\n\r\n // Detect custom Response instances and call toHonoResponse\r\n if (result instanceof JSONResponse) {\r\n return result.toHonoResponse(c);\r\n }\r\n \r\n if (result instanceof HTMLResponse) {\r\n return result.toHonoResponse(c);\r\n }\r\n \r\n if (result instanceof FileResponse) {\r\n return result.toHonoResponse(c);\r\n }\r\n \r\n if (result instanceof StreamResponse) {\r\n return result.toHonoResponse(c);\r\n }\r\n \r\n if (result instanceof RedirectResponse) {\r\n return result.toHonoResponse(c);\r\n }\r\n\r\n // Check for any object with toHonoResponse method (extensibility)\r\n if (result && typeof result.toHonoResponse === 'function') {\r\n return result.toHonoResponse(c);\r\n }\r\n\r\n // Default to JSON serialization for plain objects and primitives\r\n return c.json(result);\r\n }\r\n}\r\n",
91
+ "import type { RouteMetadata, ParameterMetadata } from '../types';\r\n\r\n/**\r\n * Compiled route metadata with pre-computed values for performance\r\n */\r\nexport interface CompiledRouteMetadata extends RouteMetadata {\r\n // Pre-compiled path regex for matching\r\n pathRegex?: RegExp;\r\n \r\n // Pre-resolved parameter order (indices sorted)\r\n parameterOrder: number[];\r\n \r\n // Pre-resolved dependency order (indices sorted)\r\n dependencyOrder: number[];\r\n \r\n // Maximum argument index (for array allocation)\r\n maxArgumentIndex: number;\r\n \r\n // Flags for quick checks\r\n hasBody: boolean;\r\n hasQuery: boolean;\r\n hasParams: boolean;\r\n hasHeaders: boolean;\r\n hasCookies: boolean;\r\n hasDependencies: boolean;\r\n}\r\n\r\n/**\r\n * MetadataCompiler pre-processes route metadata for optimal runtime performance\r\n * This reduces the work needed during request processing\r\n */\r\nexport class MetadataCompiler {\r\n /**\r\n * Compile a route metadata object into an optimized version\r\n * Pre-computes regex patterns, parameter order, and other expensive operations\r\n */\r\n static compile(route: RouteMetadata): CompiledRouteMetadata {\r\n // Pre-compile path regex for parameter extraction\r\n const pathRegex = this.compilePathRegex(route.path);\r\n \r\n // Pre-resolve parameter order\r\n const parameterOrder = this.resolveParameterOrder(route.parameters);\r\n \r\n // Pre-resolve dependency order\r\n const dependencyOrder = this.resolveDependencyOrder(route.dependencies);\r\n \r\n // Calculate maximum argument index\r\n const maxArgumentIndex = this.calculateMaxArgumentIndex(\r\n route.parameters,\r\n route.dependencies\r\n );\r\n \r\n // Pre-compute parameter type flags for quick checks\r\n const flags = this.computeParameterFlags(route.parameters);\r\n \r\n return {\r\n ...route,\r\n pathRegex,\r\n parameterOrder,\r\n dependencyOrder,\r\n maxArgumentIndex,\r\n ...flags\r\n };\r\n }\r\n\r\n /**\r\n * Compile path pattern into a regex for efficient matching\r\n * Converts FastAPI-style {param} to regex capture groups\r\n */\r\n private static compilePathRegex(path: string): RegExp {\r\n // Escape special regex characters except for parameter placeholders\r\n let pattern = path.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n \r\n // Convert {param} to named capture groups\r\n pattern = pattern.replace(/\\\\\\{([^}]+)\\\\\\}/g, '(?<$1>[^/]+)');\r\n \r\n // Convert :param to named capture groups (Hono style)\r\n pattern = pattern.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, '(?<$1>[^/]+)');\r\n \r\n // Anchor to start and end\r\n pattern = `^${pattern}$`;\r\n \r\n return new RegExp(pattern);\r\n }\r\n\r\n /**\r\n * Resolve the order of parameters by their indices\r\n * Returns sorted array of indices for efficient iteration\r\n */\r\n private static resolveParameterOrder(parameters: ParameterMetadata[]): number[] {\r\n if (!parameters || parameters.length === 0) {\r\n return [];\r\n }\r\n \r\n // Extract indices and sort them\r\n return parameters\r\n .map(p => p.index)\r\n .filter(idx => idx !== undefined)\r\n .sort((a, b) => a - b);\r\n }\r\n\r\n /**\r\n * Resolve the order of dependencies by their indices\r\n * Returns sorted array of indices for efficient iteration\r\n */\r\n private static resolveDependencyOrder(dependencies: any[]): number[] {\r\n if (!dependencies || dependencies.length === 0) {\r\n return [];\r\n }\r\n \r\n // Extract indices and sort them\r\n return dependencies\r\n .map(d => d.index)\r\n .filter(idx => idx !== undefined)\r\n .sort((a, b) => a - b);\r\n }\r\n\r\n /**\r\n * Calculate the maximum argument index to determine array size\r\n * This allows pre-allocation of the arguments array\r\n */\r\n private static calculateMaxArgumentIndex(\r\n parameters: ParameterMetadata[],\r\n dependencies: any[]\r\n ): number {\r\n let maxIndex = -1;\r\n \r\n if (parameters && parameters.length > 0) {\r\n const maxParamIndex = Math.max(...parameters.map(p => p.index));\r\n maxIndex = Math.max(maxIndex, maxParamIndex);\r\n }\r\n \r\n if (dependencies && dependencies.length > 0) {\r\n const maxDepIndex = Math.max(...dependencies.map(d => d.index));\r\n maxIndex = Math.max(maxIndex, maxDepIndex);\r\n }\r\n \r\n return maxIndex;\r\n }\r\n\r\n /**\r\n * Pre-compute flags for parameter types to avoid repeated checks\r\n * These flags enable quick conditional logic during request processing\r\n */\r\n private static computeParameterFlags(parameters: ParameterMetadata[]): {\r\n hasBody: boolean;\r\n hasQuery: boolean;\r\n hasParams: boolean;\r\n hasHeaders: boolean;\r\n hasCookies: boolean;\r\n hasDependencies: boolean;\r\n } {\r\n if (!parameters || parameters.length === 0) {\r\n return {\r\n hasBody: false,\r\n hasQuery: false,\r\n hasParams: false,\r\n hasHeaders: false,\r\n hasCookies: false,\r\n hasDependencies: false\r\n };\r\n }\r\n \r\n return {\r\n hasBody: parameters.some(p => p.type === 'body'),\r\n hasQuery: parameters.some(p => p.type === 'query'),\r\n hasParams: parameters.some(p => p.type === 'param'),\r\n hasHeaders: parameters.some(p => p.type === 'header'),\r\n hasCookies: parameters.some(p => p.type === 'cookie'),\r\n hasDependencies: false // Dependencies are tracked separately\r\n };\r\n }\r\n\r\n /**\r\n * Batch compile multiple routes for efficiency\r\n * Useful when compiling all routes at application startup\r\n */\r\n static compileAll(routes: RouteMetadata[]): CompiledRouteMetadata[] {\r\n return routes.map(route => this.compile(route));\r\n }\r\n}\r\n",
92
+ "import type { Hono } from 'hono';\r\nimport { getCookie } from 'hono/cookie';\r\nimport type { Context } from '../types';\r\nimport { MetadataRegistry } from './metadata';\r\nimport { DIContainer } from '../dependencies/container';\r\nimport { ValidationEngine } from '../validation/validator';\r\nimport { ResponseSerializer } from '../responses/response';\r\nimport { ErrorHandler } from '../errors/handler';\r\nimport { MetadataCompiler, type CompiledRouteMetadata } from './compiled-metadata';\r\nimport type { RouteMetadata, ParameterMetadata, DependencyMetadata } from '../types';\r\n\r\n/**\r\n * RouterCompiler converts metadata from decorators and functional API\r\n * into actual Hono routes with full validation and dependency injection\r\n */\r\nexport class RouterCompiler {\r\n // Cache compiled metadata for performance\r\n private compiledRoutes: Map<string, CompiledRouteMetadata> = new Map();\r\n\r\n constructor(\r\n private app: Hono,\r\n private metadata: MetadataRegistry,\r\n private container: DIContainer,\r\n private validator: ValidationEngine,\r\n private errorHandler: ErrorHandler\r\n ) {}\r\n\r\n /**\r\n * Compile all registered routes and register them with Hono\r\n * This is the main entry point that processes all route metadata\r\n */\r\n compile(): void {\r\n const routes = this.metadata.getRoutes();\r\n\r\n // Pre-compile all routes for performance\r\n const compiledRoutes = MetadataCompiler.compileAll(routes);\r\n\r\n for (const route of compiledRoutes) {\r\n // Cache compiled route for potential reuse\r\n const routeKey = `${route.target.name}:${route.propertyKey}`;\r\n this.compiledRoutes.set(routeKey, route);\r\n\r\n const handler = this.createHandler(route);\r\n const path = this.normalizePath(route.path);\r\n const method = route.method.toLowerCase() as 'get' | 'post' | 'put' | 'delete' | 'patch';\r\n\r\n // Register route with Hono, including any middleware\r\n if (route.middleware && route.middleware.length > 0) {\r\n this.app[method](path, ...route.middleware, handler);\r\n } else {\r\n this.app[method](path, handler);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Normalize a path to ensure it follows Hono's conventions\r\n * Converts FastAPI-style path parameters to Hono format\r\n */\r\n private normalizePath(path: string): string {\r\n // Ensure path starts with /\r\n if (!path.startsWith('/')) {\r\n path = '/' + path;\r\n }\r\n\r\n // Convert FastAPI-style {param} to Hono-style :param\r\n path = path.replace(/\\{([^}]+)\\}/g, ':$1');\r\n\r\n // Remove trailing slash unless it's the root path\r\n if (path.length > 1 && path.endsWith('/')) {\r\n path = path.slice(0, -1);\r\n }\r\n\r\n return path;\r\n }\r\n\r\n /**\r\n * Create a Hono handler function for a route\r\n * Integrates parameter extraction, validation, dependency injection, and error handling\r\n */\r\n private createHandler(route: CompiledRouteMetadata): (c: Context) => Promise<any> {\r\n return async (c: Context) => {\r\n try {\r\n // 1. Extract and validate parameters from the request\r\n const args = await this.extractParameters(c, route.parameters);\r\n\r\n // 2. Resolve dependencies with the DI container\r\n const deps = await this.resolveDependencies(c, route.dependencies);\r\n\r\n // 3. Merge parameters and dependencies into correct order\r\n const allArgs = this.mergeArguments(args, deps, route.parameters, route.maxArgumentIndex);\r\n\r\n // 4. Execute the handler\r\n let result: any;\r\n\r\n // Check if this is a functional route (has handler property)\r\n if ((route as any).handler) {\r\n // Functional API route - call handler directly\r\n result = await (route as any).handler(c, ...allArgs);\r\n } else {\r\n // Decorator-based route - instantiate controller and call method\r\n const instance = await this.container.resolve(route.target, {\r\n scope: 'transient',\r\n context: c\r\n });\r\n result = await instance[route.propertyKey](...allArgs);\r\n }\r\n\r\n // 5. Serialize and return the response\r\n return this.serializeResponse(c, result);\r\n } catch (error) {\r\n // 6. Handle errors and pass to error handler\r\n return await this.handleError(c, error);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Serialize the handler result into a proper HTTP response\r\n * Delegates to ResponseSerializer for consistent handling\r\n */\r\n private serializeResponse(c: Context, result: any): any {\r\n return ResponseSerializer.serialize(c, result);\r\n }\r\n\r\n /**\r\n * Handle errors that occur during request processing\r\n * Delegates to ErrorHandler for consistent error handling\r\n */\r\n private async handleError(c: Context, error: any): Promise<any> {\r\n // Delegate to the ErrorHandler\r\n return await this.errorHandler.handle(error, c);\r\n }\r\n\r\n /**\r\n * Extract and validate parameters from the request context\r\n * Handles body, query, params, headers, cookies, and special types\r\n */\r\n private async extractParameters(\r\n c: Context,\r\n params: ParameterMetadata[]\r\n ): Promise<any[]> {\r\n const extracted: any[] = [];\r\n\r\n for (const param of params) {\r\n let value: any;\r\n\r\n switch (param.type) {\r\n case 'body':\r\n // Extract request body as JSON\r\n try {\r\n value = await c.req.json();\r\n } catch (error) {\r\n value = null;\r\n }\r\n break;\r\n\r\n case 'query':\r\n // Extract query parameters\r\n if (param.name) {\r\n // Extract specific query parameter\r\n value = c.req.query(param.name);\r\n } else {\r\n // Extract all query parameters\r\n value = c.req.query();\r\n }\r\n break;\r\n\r\n case 'param':\r\n // Extract path parameters\r\n if (param.name) {\r\n // Extract specific path parameter\r\n value = c.req.param(param.name);\r\n } else {\r\n // Extract all path parameters\r\n value = c.req.param();\r\n }\r\n break;\r\n\r\n case 'header':\r\n // Extract headers\r\n if (param.name) {\r\n // Extract specific header\r\n value = c.req.header(param.name);\r\n } else {\r\n // Extract all headers as object\r\n const headers: Record<string, string> = {};\r\n c.req.raw.headers.forEach((val, key) => {\r\n headers[key] = val;\r\n });\r\n value = headers;\r\n }\r\n break;\r\n\r\n case 'cookie':\r\n // Extract cookies using Hono's cookie helper\r\n if (param.name) {\r\n // Extract specific cookie\r\n value = getCookie(c, param.name);\r\n } else {\r\n // Extract all cookies - parse from Cookie header\r\n const cookieHeader = c.req.header('cookie');\r\n if (cookieHeader) {\r\n value = Object.fromEntries(\r\n cookieHeader.split(';').map(cookie => {\r\n const [key, ...valueParts] = cookie.trim().split('=');\r\n return [key, valueParts.join('=')];\r\n })\r\n );\r\n } else {\r\n value = {};\r\n }\r\n }\r\n break;\r\n\r\n case 'request':\r\n // Pass the raw request object\r\n value = c.req;\r\n break;\r\n\r\n case 'response':\r\n case 'context':\r\n // Pass the Hono context\r\n value = c;\r\n break;\r\n\r\n default:\r\n value = undefined;\r\n }\r\n\r\n // Validate with Zod schema if provided\r\n if (param.schema) {\r\n try {\r\n value = await this.validator.validate(value, param.schema);\r\n } catch (error) {\r\n // Re-throw validation errors - they'll be caught by error handler\r\n throw error;\r\n }\r\n }\r\n\r\n // Store at the correct parameter index\r\n extracted[param.index] = value;\r\n }\r\n\r\n return extracted;\r\n }\r\n\r\n /**\r\n * Merge parameters and dependencies into a single arguments array\r\n * Ensures each argument is placed at its correct index\r\n * Note: Returns a sparse array to maintain correct parameter positions\r\n * Uses pre-computed maxArgumentIndex from compiled metadata for performance\r\n */\r\n private mergeArguments(\r\n parameters: any[],\r\n dependencies: any[],\r\n paramMetadata: ParameterMetadata[],\r\n maxArgumentIndex?: number\r\n ): any[] {\r\n // Use pre-computed max index if available, otherwise calculate\r\n const maxIndex = maxArgumentIndex !== undefined\r\n ? maxArgumentIndex\r\n : Math.max(\r\n paramMetadata.length > 0 ? Math.max(...paramMetadata.map(p => p.index)) : -1,\r\n parameters.length - 1,\r\n dependencies.length - 1\r\n );\r\n \r\n // Pre-allocate array with exact size needed\r\n const merged: any[] = new Array(maxIndex + 1);\r\n\r\n // Fill in parameters at their correct indices from the sparse array\r\n for (let i = 0; i <= maxIndex; i++) {\r\n if (parameters[i] !== undefined) {\r\n merged[i] = parameters[i];\r\n } else if (dependencies[i] !== undefined) {\r\n merged[i] = dependencies[i];\r\n }\r\n }\r\n\r\n return merged;\r\n }\r\n\r\n /**\r\n * Resolve dependencies for a route handler\r\n * Calls DIContainer.resolve for each dependency with appropriate scope\r\n */\r\n private async resolveDependencies(\r\n c: Context,\r\n deps: DependencyMetadata[]\r\n ): Promise<any[]> {\r\n const resolved: any[] = [];\r\n\r\n for (const dep of deps) {\r\n try {\r\n // Resolve the dependency with the DI container\r\n // Pass the context for request-scoped dependencies\r\n const value = await this.container.resolve(dep.provider, {\r\n scope: dep.scope,\r\n context: c\r\n });\r\n\r\n // Store at the correct parameter index\r\n resolved[dep.index] = value;\r\n } catch (error) {\r\n // Wrap dependency resolution errors with context\r\n throw new Error(\r\n `Failed to resolve dependency at index ${dep.index}: ${error instanceof Error ? error.message : 'Unknown error'}`\r\n );\r\n }\r\n }\r\n\r\n return resolved;\r\n }\r\n}\r\n",
93
+ "import type { Context } from '../types';\r\nimport { HTTPException } from './exceptions.js';\r\nimport { ValidationException } from '../validation/exceptions.js';\r\n\r\n/**\r\n * Custom error handler function type\r\n * Allows users to provide their own error handling logic\r\n */\r\nexport type CustomErrorHandler = (error: Error, c: Context) => Response | Promise<Response>;\r\n\r\n/**\r\n * ErrorHandler processes all errors that occur during request handling\r\n * Provides consistent error responses and handles different error types appropriately\r\n */\r\nexport class ErrorHandler {\r\n private customHandler?: CustomErrorHandler;\r\n private isDevelopment: boolean;\r\n\r\n constructor(customHandler?: CustomErrorHandler) {\r\n this.customHandler = customHandler;\r\n this.isDevelopment = process.env.NODE_ENV !== 'production';\r\n }\r\n\r\n /**\r\n * Set a custom error handler\r\n * @param handler - Custom error handling function\r\n */\r\n setCustomHandler(handler: CustomErrorHandler): void {\r\n this.customHandler = handler;\r\n }\r\n\r\n /**\r\n * Main error handling method\r\n * Processes all error types and returns appropriate HTTP responses\r\n * @param error - The error that occurred\r\n * @param c - Hono context object\r\n * @returns HTTP response with error details\r\n */\r\n async handle(error: Error, c: Context): Promise<Response> {\r\n // If custom handler is provided, use it first\r\n if (this.customHandler) {\r\n try {\r\n return await this.customHandler(error, c);\r\n } catch (customHandlerError) {\r\n // If custom handler fails, fall back to default handling\r\n console.error('Custom error handler failed:', customHandlerError);\r\n }\r\n }\r\n\r\n // Handle ValidationException (422)\r\n if (error instanceof ValidationException) {\r\n return this.handleValidationException(error, c);\r\n }\r\n\r\n // Handle HTTPException and its subclasses\r\n if (error instanceof HTTPException) {\r\n return this.handleHTTPException(error, c);\r\n }\r\n\r\n // Handle generic errors (500)\r\n return this.handleGenericError(error, c);\r\n }\r\n\r\n /**\r\n * Handle validation exceptions (422 Unprocessable Entity)\r\n * @param error - ValidationException instance\r\n * @param c - Hono context\r\n * @returns JSON response with validation error details\r\n */\r\n private handleValidationException(error: ValidationException, c: Context): Response {\r\n const response = error.toJSON();\r\n \r\n // Log validation errors in development\r\n if (this.isDevelopment) {\r\n console.error('Validation Error:', {\r\n path: c.req.path,\r\n method: c.req.method,\r\n details: response.details\r\n });\r\n }\r\n\r\n return c.json(response, error.statusCode as any);\r\n }\r\n\r\n /**\r\n * Handle HTTP exceptions (4xx, 5xx)\r\n * @param error - HTTPException instance\r\n * @param c - Hono context\r\n * @returns JSON response with error details\r\n */\r\n private handleHTTPException(error: HTTPException, c: Context): Response {\r\n const response = error.toJSON();\r\n\r\n // Log HTTP exceptions based on severity\r\n if (error.statusCode >= 500) {\r\n // Server errors - always log\r\n console.error('HTTP Exception:', {\r\n name: error.name,\r\n statusCode: error.statusCode,\r\n message: error.message,\r\n path: c.req.path,\r\n method: c.req.method,\r\n ...(this.isDevelopment && error.stack ? { stack: error.stack } : {})\r\n });\r\n } else if (this.isDevelopment) {\r\n // Client errors - log only in development\r\n console.warn('HTTP Exception:', {\r\n name: error.name,\r\n statusCode: error.statusCode,\r\n message: error.message,\r\n path: c.req.path,\r\n method: c.req.method\r\n });\r\n }\r\n\r\n return c.json(response, error.statusCode as any);\r\n }\r\n\r\n /**\r\n * Handle generic/unexpected errors (500 Internal Server Error)\r\n * Hides internal details in production, shows stack trace in development\r\n * @param error - Generic Error instance\r\n * @param c - Hono context\r\n * @returns JSON response with error details\r\n */\r\n private handleGenericError(error: Error, c: Context): Response {\r\n // Always log generic errors\r\n console.error('Internal Server Error:', {\r\n name: error.name,\r\n message: error.message,\r\n path: c.req.path,\r\n method: c.req.method,\r\n stack: error.stack\r\n });\r\n\r\n // Build response based on environment\r\n const response: any = {\r\n error: 'Internal Server Error',\r\n statusCode: 500\r\n };\r\n\r\n // In development, include error details and stack trace\r\n if (this.isDevelopment) {\r\n response.message = error.message;\r\n response.name = error.name;\r\n \r\n if (error.stack) {\r\n response.stack = error.stack.split('\\n').map(line => line.trim());\r\n }\r\n } else {\r\n // In production, use generic message\r\n response.message = 'An unexpected error occurred';\r\n }\r\n\r\n return c.json(response, 500);\r\n }\r\n\r\n /**\r\n * Check if running in development mode\r\n * @returns true if in development mode\r\n */\r\n isDevelopmentMode(): boolean {\r\n return this.isDevelopment;\r\n }\r\n\r\n /**\r\n * Set development mode manually (useful for testing)\r\n * @param isDev - Whether to enable development mode\r\n */\r\n setDevelopmentMode(isDev: boolean): void {\r\n this.isDevelopment = isDev;\r\n }\r\n}\r\n",
94
+ "// Plugin system\r\nimport type { VeloceTS } from './application';\r\n\r\n/**\r\n * Plugin interface that all plugins must implement\r\n * Plugins can extend the framework with additional functionality\r\n */\r\nexport interface Plugin {\r\n /** Unique name of the plugin */\r\n name: string;\r\n \r\n /** Optional version string */\r\n version?: string;\r\n \r\n /** Optional list of plugin names this plugin depends on */\r\n dependencies?: string[];\r\n \r\n /** \r\n * Install method called when the plugin is registered\r\n * @param app - The VeloceTS application instance\r\n */\r\n install(app: VeloceTS): void | Promise<void>;\r\n}\r\n\r\n/**\r\n * PluginManager handles plugin registration and installation\r\n * Resolves plugin dependencies using topological sort\r\n */\r\nexport class PluginManager {\r\n private plugins: Map<string, Plugin> = new Map();\r\n private installed: Set<string> = new Set();\r\n\r\n /**\r\n * Register a plugin with the manager\r\n * @param plugin - The plugin to register\r\n * @throws Error if plugin with same name is already registered\r\n */\r\n register(plugin: Plugin): void {\r\n if (this.plugins.has(plugin.name)) {\r\n throw new Error(`Plugin \"${plugin.name}\" is already registered`);\r\n }\r\n this.plugins.set(plugin.name, plugin);\r\n }\r\n\r\n /**\r\n * Install all registered plugins in dependency order\r\n * @param app - The VeloceTS application instance\r\n * @throws Error if plugin dependencies cannot be resolved\r\n */\r\n async install(app: VeloceTS): Promise<void> {\r\n // Resolve installation order using topological sort\r\n const order = this.resolveInstallOrder();\r\n\r\n // Install plugins in resolved order\r\n for (const pluginName of order) {\r\n const plugin = this.plugins.get(pluginName)!;\r\n await plugin.install(app);\r\n this.installed.add(pluginName);\r\n }\r\n }\r\n\r\n /**\r\n * Check if a plugin is installed\r\n * @param name - The plugin name\r\n * @returns true if the plugin is installed\r\n */\r\n isInstalled(name: string): boolean {\r\n return this.installed.has(name);\r\n }\r\n\r\n /**\r\n * Get a registered plugin by name\r\n * @param name - The plugin name\r\n * @returns The plugin or undefined if not found\r\n */\r\n getPlugin(name: string): Plugin | undefined {\r\n return this.plugins.get(name);\r\n }\r\n\r\n /**\r\n * Get all registered plugin names\r\n * @returns Array of plugin names\r\n */\r\n getPluginNames(): string[] {\r\n return Array.from(this.plugins.keys());\r\n }\r\n\r\n /**\r\n * Resolve plugin installation order using topological sort\r\n * Ensures dependencies are installed before dependents\r\n * @returns Array of plugin names in installation order\r\n * @throws Error if circular dependencies are detected or dependencies are missing\r\n */\r\n private resolveInstallOrder(): string[] {\r\n const visited = new Set<string>();\r\n const visiting = new Set<string>();\r\n const order: string[] = [];\r\n\r\n const visit = (name: string, path: string[] = []): void => {\r\n // Check for circular dependencies\r\n if (visiting.has(name)) {\r\n const cycle = [...path, name].join(' -> ');\r\n throw new Error(`Circular dependency detected in plugins: ${cycle}`);\r\n }\r\n\r\n // Skip if already visited\r\n if (visited.has(name)) {\r\n return;\r\n }\r\n\r\n // Mark as currently visiting\r\n visiting.add(name);\r\n\r\n // Get the plugin\r\n const plugin = this.plugins.get(name);\r\n if (!plugin) {\r\n throw new Error(`Plugin \"${name}\" is not registered`);\r\n }\r\n\r\n // Visit dependencies first\r\n if (plugin.dependencies) {\r\n for (const dep of plugin.dependencies) {\r\n if (!this.plugins.has(dep)) {\r\n throw new Error(\r\n `Plugin \"${name}\" depends on \"${dep}\" which is not registered`\r\n );\r\n }\r\n visit(dep, [...path, name]);\r\n }\r\n }\r\n\r\n // Mark as visited and remove from visiting\r\n visiting.delete(name);\r\n visited.add(name);\r\n\r\n // Add to order after all dependencies\r\n order.push(name);\r\n };\r\n\r\n // Visit all plugins\r\n for (const name of this.plugins.keys()) {\r\n visit(name);\r\n }\r\n\r\n return order;\r\n }\r\n}\r\n",
95
+ "// Core application class\r\nimport { Hono } from 'hono';\r\nimport { MetadataRegistry } from './metadata';\r\nimport { DIContainer } from '../dependencies/container';\r\nimport { RouterCompiler } from './router-compiler';\r\nimport { ValidationEngine } from '../validation/validator';\r\nimport { ErrorHandler, type CustomErrorHandler } from '../errors/handler';\r\nimport { PluginManager, type Plugin } from './plugin';\r\nimport { createCorsMiddleware } from '../middleware/cors';\r\nimport { createRateLimitMiddleware } from '../middleware/rate-limit';\r\nimport { createCompressionMiddleware } from '../middleware/compression';\r\nimport type {\r\n VeloceTSConfig,\r\n Class,\r\n RouteConfig,\r\n Middleware,\r\n CorsOptions,\r\n RateLimitOptions,\r\n CompressionOptions,\r\n HTTPMethod,\r\n Context\r\n} from '../types';\r\n\r\n/**\r\n * Main VeloceTS application class\r\n * \r\n * Provides both decorator-based and functional API for defining routes.\r\n * Built on top of Hono.js for maximum performance with support for multiple runtimes.\r\n * \r\n * @example\r\n * ```typescript\r\n * // Create a new application\r\n * const app = new VeloceTS({\r\n * title: 'My API',\r\n * version: '1.0.0',\r\n * docs: true\r\n * });\r\n * \r\n * // Register a controller\r\n * @Controller('/users')\r\n * class UserController {\r\n * @Get('/:id')\r\n * getUser(@Param('id') id: string) {\r\n * return { id, name: 'John' };\r\n * }\r\n * }\r\n * app.include(UserController);\r\n * \r\n * // Or use functional API\r\n * app.get('/users/:id', {\r\n * handler: async (c) => {\r\n * const id = c.req.param('id');\r\n * return { id, name: 'John' };\r\n * }\r\n * });\r\n * \r\n * // Start the server\r\n * app.listen(3000, () => {\r\n * console.log('Server running on port 3000');\r\n * });\r\n * ```\r\n */\r\nexport class VeloceTS {\r\n private hono: Hono;\r\n private metadata: MetadataRegistry;\r\n private container: DIContainer;\r\n private validator: ValidationEngine;\r\n private errorHandler: ErrorHandler;\r\n private compiler: RouterCompiler;\r\n private pluginManager: PluginManager;\r\n private config: VeloceTSConfig;\r\n private compiled: boolean = false;\r\n private globalMiddleware: Middleware[] = [];\r\n private groupPrefix: string = '';\r\n\r\n constructor(config?: VeloceTSConfig) {\r\n this.config = {\r\n adapter: 'hono',\r\n title: 'FastAPI-TS API',\r\n version: '1.0.0',\r\n docs: true,\r\n ...config\r\n };\r\n\r\n // Initialize Hono instance\r\n this.hono = new Hono();\r\n\r\n // Create MetadataRegistry and DIContainer instances\r\n this.metadata = new MetadataRegistry();\r\n this.container = new DIContainer();\r\n this.validator = new ValidationEngine();\r\n this.errorHandler = new ErrorHandler();\r\n this.pluginManager = new PluginManager();\r\n\r\n // Create RouterCompiler\r\n this.compiler = new RouterCompiler(\r\n this.hono,\r\n this.metadata,\r\n this.container,\r\n this.validator,\r\n this.errorHandler\r\n );\r\n\r\n // Apply CORS configuration if provided\r\n if (this.config.cors) {\r\n if (this.config.cors === true) {\r\n this.useCors();\r\n } else {\r\n this.useCors(this.config.cors);\r\n }\r\n }\r\n }\r\n\r\n // ============================================================================\r\n // Controller Registration (Task 5.2)\r\n // ============================================================================\r\n\r\n /**\r\n * Register a controller class with the application\r\n * \r\n * Extracts metadata from decorators and stores in registry.\r\n * The controller must be decorated with @Controller() and contain\r\n * methods decorated with HTTP method decorators (@Get, @Post, etc.)\r\n * \r\n * @param controller - The controller class to register\r\n * \r\n * @example\r\n * ```typescript\r\n * @Controller('/api/users')\r\n * class UserController {\r\n * @Get('/')\r\n * async list() {\r\n * return [{ id: 1, name: 'John' }];\r\n * }\r\n * \r\n * @Post('/')\r\n * async create(@Body(UserSchema) user: InferSchema<typeof UserSchema>) {\r\n * return { id: 2, ...user };\r\n * }\r\n * }\r\n * \r\n * app.include(UserController);\r\n * ```\r\n */\r\n include(controller: Class): void {\r\n // Get controller metadata from decorators\r\n const controllerMetadata = MetadataRegistry.getControllerMetadata(controller);\r\n \r\n if (controllerMetadata) {\r\n this.metadata.registerController(controller, controllerMetadata);\r\n }\r\n\r\n // Get all route methods from the controller\r\n const routeMethods = MetadataRegistry.getRouteMethods(controller);\r\n\r\n // Register each route\r\n for (const methodName of routeMethods) {\r\n const routeMetadata = MetadataRegistry.getRouteMetadata(\r\n controller.prototype,\r\n methodName\r\n );\r\n\r\n // Get parameter metadata separately\r\n const parameterMetadata = MetadataRegistry.getParameterMetadata(\r\n controller.prototype,\r\n methodName\r\n );\r\n\r\n // Get dependency metadata separately\r\n const dependencyMetadata = MetadataRegistry.getDependencyMetadata(\r\n controller.prototype,\r\n methodName\r\n );\r\n\r\n if (routeMetadata && routeMetadata.method && routeMetadata.path !== undefined) {\r\n // Combine controller prefix with route path\r\n const prefix = controllerMetadata?.prefix || '';\r\n const fullPath = this.normalizePath(prefix, routeMetadata.path);\r\n\r\n // Register the complete route metadata\r\n this.metadata.registerRoute({\r\n target: controller,\r\n propertyKey: methodName,\r\n method: routeMetadata.method,\r\n path: fullPath,\r\n middleware: [\r\n ...(controllerMetadata?.middleware || []),\r\n ...(routeMetadata.middleware || [])\r\n ],\r\n parameters: parameterMetadata || routeMetadata.parameters || [],\r\n dependencies: dependencyMetadata || routeMetadata.dependencies || [],\r\n responses: routeMetadata.responses || [],\r\n docs: routeMetadata.docs\r\n });\r\n }\r\n }\r\n }\r\n\r\n // ============================================================================\r\n // Functional API Methods (Task 5.3)\r\n // ============================================================================\r\n\r\n /**\r\n * Register a GET route using functional API\r\n * \r\n * @param path - The route path (supports parameters like /users/:id)\r\n * @param config - Route configuration including handler, schema, middleware\r\n * \r\n * @example\r\n * ```typescript\r\n * const UserSchema = z.object({ name: z.string(), age: z.number() });\r\n * \r\n * app.get('/users/:id', {\r\n * handler: async (c) => {\r\n * const id = c.req.param('id');\r\n * return { id, name: 'John', age: 30 };\r\n * },\r\n * schema: {\r\n * params: z.object({ id: z.string() })\r\n * },\r\n * docs: {\r\n * summary: 'Get user by ID',\r\n * tags: ['users']\r\n * }\r\n * });\r\n * ```\r\n */\r\n get(path: string, config: RouteConfig): void {\r\n this.registerFunctionalRoute('GET', path, config);\r\n }\r\n\r\n /**\r\n * Register a POST route using functional API\r\n * \r\n * @param path - The route path\r\n * @param config - Route configuration including handler, schema, middleware\r\n * \r\n * @example\r\n * ```typescript\r\n * const CreateUserSchema = z.object({\r\n * name: z.string(),\r\n * email: z.string().email()\r\n * });\r\n * \r\n * app.post('/users', {\r\n * handler: async (c) => {\r\n * const body = await c.req.json();\r\n * return { id: 1, ...body };\r\n * },\r\n * schema: {\r\n * body: CreateUserSchema\r\n * }\r\n * });\r\n * ```\r\n */\r\n post(path: string, config: RouteConfig): void {\r\n this.registerFunctionalRoute('POST', path, config);\r\n }\r\n\r\n /**\r\n * Register a PUT route\r\n */\r\n put(path: string, config: RouteConfig): void {\r\n this.registerFunctionalRoute('PUT', path, config);\r\n }\r\n\r\n /**\r\n * Register a DELETE route\r\n */\r\n delete(path: string, config: RouteConfig): void {\r\n this.registerFunctionalRoute('DELETE', path, config);\r\n }\r\n\r\n /**\r\n * Register a PATCH route\r\n */\r\n patch(path: string, config: RouteConfig): void {\r\n this.registerFunctionalRoute('PATCH', path, config);\r\n }\r\n\r\n /**\r\n * Create a route builder for chaining methods\r\n */\r\n route(path: string): RouteBuilder {\r\n return new RouteBuilder(this, path);\r\n }\r\n\r\n /**\r\n * Create a route group with a common prefix\r\n */\r\n group(prefix: string, callback: () => void): void {\r\n const previousPrefix = this.groupPrefix;\r\n this.groupPrefix = this.normalizePath(this.groupPrefix, prefix);\r\n \r\n callback();\r\n \r\n this.groupPrefix = previousPrefix;\r\n }\r\n\r\n /**\r\n * Internal method to register functional routes\r\n */\r\n private registerFunctionalRoute(\r\n method: HTTPMethod,\r\n path: string,\r\n config: RouteConfig\r\n ): void {\r\n // Apply group prefix if we're inside a group\r\n const fullPath = this.normalizePath(this.groupPrefix, path);\r\n\r\n // Create a synthetic route metadata for functional routes\r\n // We use a special marker class to distinguish functional routes\r\n const routeMetadata = {\r\n target: FunctionalRoute as any,\r\n propertyKey: `${method.toLowerCase()}_${fullPath}`,\r\n method,\r\n path: fullPath,\r\n middleware: config.middleware || [],\r\n parameters: this.extractParametersFromSchema(config.schema),\r\n dependencies: [],\r\n responses: config.responses || [],\r\n docs: config.docs,\r\n handler: config.handler // Store handler directly for functional routes\r\n };\r\n\r\n this.metadata.registerRoute(routeMetadata as any);\r\n }\r\n\r\n /**\r\n * Extract parameter metadata from schema config\r\n * For functional API, parameters start at index 0 since context is passed separately\r\n */\r\n private extractParametersFromSchema(schema?: RouteConfig['schema']): any[] {\r\n const parameters: any[] = [];\r\n let index = 0; // Start at 0 for functional API (context is passed separately)\r\n\r\n if (schema?.body) {\r\n parameters.push({\r\n index: index++,\r\n type: 'body',\r\n schema: schema.body,\r\n required: true\r\n });\r\n }\r\n\r\n if (schema?.query) {\r\n parameters.push({\r\n index: index++,\r\n type: 'query',\r\n schema: schema.query,\r\n required: false\r\n });\r\n }\r\n\r\n if (schema?.params) {\r\n parameters.push({\r\n index: index++,\r\n type: 'param',\r\n schema: schema.params,\r\n required: true\r\n });\r\n }\r\n\r\n if (schema?.headers) {\r\n parameters.push({\r\n index: index++,\r\n type: 'header',\r\n schema: schema.headers,\r\n required: false\r\n });\r\n }\r\n\r\n return parameters;\r\n }\r\n\r\n // ============================================================================\r\n // Middleware System (Task 5.4)\r\n // ============================================================================\r\n\r\n /**\r\n * Add global middleware to the application\r\n */\r\n use(middleware: Middleware): void {\r\n this.globalMiddleware.push(middleware);\r\n this.hono.use('*', middleware);\r\n }\r\n\r\n /**\r\n * Configure CORS middleware\r\n * Supports origin, methods, headers configuration and handles preflight requests\r\n */\r\n useCors(options?: CorsOptions): void {\r\n const middleware = createCorsMiddleware(options);\r\n this.use(middleware);\r\n }\r\n\r\n /**\r\n * Configure rate limiting middleware\r\n * Tracks requests per IP/key and returns 429 when limit exceeded\r\n */\r\n useRateLimit(options: RateLimitOptions): void {\r\n const middleware = createRateLimitMiddleware(options);\r\n this.use(middleware);\r\n }\r\n\r\n /**\r\n * Configure compression middleware\r\n * Compresses responses with gzip/brotli based on configuration\r\n */\r\n useCompression(options?: CompressionOptions): void {\r\n const middleware = createCompressionMiddleware(options);\r\n this.use(middleware);\r\n }\r\n\r\n // ============================================================================\r\n // Plugin System (Task 10.2)\r\n // ============================================================================\r\n\r\n /**\r\n * Register a plugin with the application\r\n * Plugins are installed during compilation in dependency order\r\n * @param plugin - The plugin to register\r\n */\r\n usePlugin(plugin: Plugin): void {\r\n this.pluginManager.register(plugin);\r\n }\r\n\r\n /**\r\n * Get the plugin manager instance\r\n * @returns The PluginManager instance\r\n */\r\n getPluginManager(): PluginManager {\r\n return this.pluginManager;\r\n }\r\n\r\n // ============================================================================\r\n // Error Handling (Task 9.3)\r\n // ============================================================================\r\n\r\n /**\r\n * Set a custom error handler for the application\r\n * This allows users to override the default error handling behavior\r\n * @param handler - Custom error handling function\r\n */\r\n onError(handler: CustomErrorHandler): void {\r\n this.errorHandler.setCustomHandler(handler);\r\n }\r\n\r\n /**\r\n * Get the error handler instance\r\n * @returns The ErrorHandler instance\r\n */\r\n getErrorHandler(): ErrorHandler {\r\n return this.errorHandler;\r\n }\r\n\r\n // ============================================================================\r\n // Utility Methods\r\n // ============================================================================\r\n\r\n /**\r\n * Normalize path by combining segments and ensuring proper format\r\n */\r\n private normalizePath(...segments: string[]): string {\r\n const combined = segments\r\n .filter(s => s !== '')\r\n .join('/')\r\n .replace(/\\/+/g, '/') // Remove duplicate slashes\r\n .replace(/\\/$/, ''); // Remove trailing slash\r\n\r\n return combined.startsWith('/') ? combined : `/${combined}`;\r\n }\r\n\r\n /**\r\n * Get the underlying Hono instance\r\n */\r\n getHono(): Hono {\r\n return this.hono;\r\n }\r\n\r\n /**\r\n * Get the metadata registry\r\n */\r\n getMetadata(): MetadataRegistry {\r\n return this.metadata;\r\n }\r\n\r\n /**\r\n * Get the DI container\r\n */\r\n getContainer(): DIContainer {\r\n return this.container;\r\n }\r\n\r\n /**\r\n * Get the application configuration\r\n */\r\n getConfig(): VeloceTSConfig {\r\n return this.config;\r\n }\r\n\r\n /**\r\n * Check if routes have been compiled\r\n */\r\n isCompiled(): boolean {\r\n return this.compiled;\r\n }\r\n\r\n /**\r\n * Mark routes as compiled\r\n */\r\n markCompiled(): void {\r\n this.compiled = true;\r\n }\r\n\r\n /**\r\n * Compile all registered routes into the Hono router\r\n * This must be called before the application can handle requests\r\n * Installs plugins before compiling routes\r\n */\r\n async compile(): Promise<void> {\r\n if (this.compiled) {\r\n console.warn('Routes have already been compiled. Skipping compilation.');\r\n return;\r\n }\r\n\r\n // Install plugins before compiling routes\r\n await this.pluginManager.install(this);\r\n\r\n // Use the RouterCompiler to process all routes\r\n this.compiler.compile();\r\n\r\n // Mark as compiled\r\n this.compiled = true;\r\n }\r\n\r\n /**\r\n * Start the server and listen on the specified port\r\n * Automatically compiles routes if not already compiled\r\n * Delegates to the configured adapter for runtime-specific server implementation\r\n */\r\n async listen(port: number, callback?: () => void): Promise<any> {\r\n // Compile routes if not already done\r\n if (!this.compiled) {\r\n await this.compile();\r\n }\r\n\r\n // Create and use the appropriate adapter based on configuration\r\n const adapter = this.createAdapter();\r\n \r\n return adapter.listen(port, callback);\r\n }\r\n\r\n /**\r\n * Create the appropriate adapter based on configuration\r\n * @private\r\n */\r\n private createAdapter() {\r\n const adapterType = this.config.adapter || 'hono';\r\n\r\n switch (adapterType) {\r\n case 'hono': {\r\n // Dynamically import to avoid circular dependencies\r\n const { HonoAdapter } = require('../adapters/hono');\r\n return new HonoAdapter(this.hono);\r\n }\r\n\r\n case 'express': {\r\n // Dynamically import ExpressAdapter\r\n const { ExpressAdapter } = require('../adapters/express');\r\n return new ExpressAdapter(this);\r\n }\r\n\r\n case 'native': {\r\n // Native adapter would use Web Standards directly\r\n // For now, fall back to Hono adapter\r\n const { HonoAdapter } = require('../adapters/hono');\r\n return new HonoAdapter(this.hono);\r\n }\r\n\r\n default:\r\n throw new Error(\r\n `Unknown adapter type: ${adapterType}. Supported adapters: 'hono', 'express', 'native'`\r\n );\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Marker class for functional routes\r\n */\r\nclass FunctionalRoute {}\r\n\r\n/**\r\n * Route builder for chaining HTTP methods\r\n */\r\nclass RouteBuilder {\r\n constructor(\r\n private app: VeloceTS,\r\n private path: string\r\n ) {}\r\n\r\n get(config: RouteConfig): RouteBuilder {\r\n this.app.get(this.path, config);\r\n return this;\r\n }\r\n\r\n post(config: RouteConfig): RouteBuilder {\r\n this.app.post(this.path, config);\r\n return this;\r\n }\r\n\r\n put(config: RouteConfig): RouteBuilder {\r\n this.app.put(this.path, config);\r\n return this;\r\n }\r\n\r\n delete(config: RouteConfig): RouteBuilder {\r\n this.app.delete(this.path, config);\r\n return this;\r\n }\r\n\r\n patch(config: RouteConfig): RouteBuilder {\r\n this.app.patch(this.path, config);\r\n return this;\r\n }\r\n}\r\n",
96
+ "import { VeloceTS } from '../core/application';\r\nimport { TestClient } from './test-client';\r\nimport type { VeloceTSConfig, Provider, ProviderConfig } from '../types';\r\n\r\n/**\r\n * Create a test instance of VeloceTS application\r\n * This is useful for creating isolated test instances with specific configurations\r\n * \r\n * @param config - Optional configuration for the test app\r\n * @returns A new VeloceTS instance configured for testing\r\n * \r\n * @example\r\n * ```typescript\r\n * const app = createTestApp({ docs: false });\r\n * app.get('/test', { handler: () => ({ message: 'test' }) });\r\n * await app.compile();\r\n * \r\n * const client = new TestClient(app);\r\n * const response = await client.get('/test');\r\n * ```\r\n */\r\nexport function createTestApp(config?: VeloceTSConfig): VeloceTS {\r\n // Default test configuration\r\n const testConfig: VeloceTSConfig = {\r\n docs: false, // Disable docs by default in tests\r\n cors: false, // Disable CORS by default in tests\r\n ...config,\r\n };\r\n\r\n return new VeloceTS(testConfig);\r\n}\r\n\r\n/**\r\n * Mock a dependency in the DI container\r\n * This allows you to replace real dependencies with mocks for testing\r\n * \r\n * @param app - The VeloceTS application instance\r\n * @param provider - The provider to mock\r\n * @param mockValue - The mock value or factory function\r\n * @param config - Optional provider configuration\r\n * \r\n * @example\r\n * ```typescript\r\n * class UserService {\r\n * getUser(id: string) { return { id, name: 'Real User' }; }\r\n * }\r\n * \r\n * const app = createTestApp();\r\n * const mockUserService = { getUser: (id: string) => ({ id, name: 'Mock User' }) };\r\n * \r\n * mockDependency(app, UserService, mockUserService);\r\n * ```\r\n */\r\nexport function mockDependency<T>(\r\n app: VeloceTS,\r\n provider: Provider<T>,\r\n mockValue: T | (() => T | Promise<T>),\r\n config?: ProviderConfig\r\n): void {\r\n const container = app.getContainer();\r\n\r\n // Create a factory that returns the mock value\r\n const factory = typeof mockValue === 'function' \r\n ? (mockValue as () => T | Promise<T>)\r\n : () => mockValue;\r\n\r\n // Register the mock with the container\r\n container.register(provider, {\r\n scope: config?.scope || 'singleton',\r\n factory,\r\n });\r\n}\r\n\r\n/**\r\n * Create a test client for an application\r\n * This is a convenience function that creates a TestClient instance\r\n * \r\n * @param app - The VeloceTS application instance\r\n * @returns A TestClient instance for making test requests\r\n * \r\n * @example\r\n * ```typescript\r\n * const app = createTestApp();\r\n * app.get('/hello', { handler: () => ({ message: 'Hello' }) });\r\n * await app.compile();\r\n * \r\n * const client = createTestClient(app);\r\n * const response = await client.get('/hello');\r\n * ```\r\n */\r\nexport function createTestClient(app: VeloceTS): TestClient {\r\n return new TestClient(app);\r\n}\r\n\r\n/**\r\n * Setup a test application with routes and compile it\r\n * This is a convenience function for quickly setting up test scenarios\r\n * \r\n * @param setup - Function that sets up routes on the app\r\n * @param config - Optional configuration for the test app\r\n * @returns Object containing the app and client\r\n * \r\n * @example\r\n * ```typescript\r\n * const { app, client } = await setupTestApp((app) => {\r\n * app.get('/users', { handler: () => [{ id: 1, name: 'User' }] });\r\n * app.post('/users', { handler: (c) => ({ id: 2, name: 'New User' }) });\r\n * });\r\n * \r\n * const response = await client.get('/users');\r\n * ```\r\n */\r\nexport async function setupTestApp(\r\n setup: (app: VeloceTS) => void | Promise<void>,\r\n config?: VeloceTSConfig\r\n): Promise<{ app: VeloceTS; client: TestClient }> {\r\n const app = createTestApp(config);\r\n \r\n await setup(app);\r\n await app.compile();\r\n \r\n const client = createTestClient(app);\r\n \r\n return { app, client };\r\n}\r\n\r\n/**\r\n * Clear all mocked dependencies from an application\r\n * This is useful for cleaning up between tests\r\n * \r\n * @param app - The VeloceTS application instance\r\n * \r\n * @example\r\n * ```typescript\r\n * afterEach(() => {\r\n * clearMocks(app);\r\n * });\r\n * ```\r\n */\r\nexport function clearMocks(app: VeloceTS): void {\r\n const container = app.getContainer();\r\n container.clear();\r\n}\r\n",
97
+ "// VeloceTS - Main entry point\r\nimport 'reflect-metadata';\r\n\r\n// Core exports\r\nexport { VeloceTS } from './core/application';\r\n// Export Veloce as a shorter alias\r\nexport { VeloceTS as Veloce } from './core/application';\r\n// Keep FastAPITS as an alias for compatibility\r\nexport { VeloceTS as FastAPITS } from './core/application';\r\nexport { MetadataRegistry } from './core/metadata';\r\nexport { RouterCompiler } from './core/router-compiler';\r\nexport { MetadataCompiler, type CompiledRouteMetadata } from './core/compiled-metadata';\r\n\r\n// Decorator exports\r\nexport * from './decorators/http';\r\nexport * from './decorators/params';\r\nexport * from './decorators/dependencies';\r\nexport * from './decorators/middleware';\r\nexport * from './decorators/docs';\r\nexport * from './decorators/websocket';\r\nexport * from './decorators/graphql';\r\n\r\n// Validation exports\r\nexport { ValidationEngine } from './validation/validator';\r\nexport { ValidationException } from './validation/exceptions';\r\n\r\n// Dependency Injection exports\r\nexport { DIContainer } from './dependencies/container';\r\n\r\n// Response exports\r\nexport * from './responses/response';\r\n\r\n// Error exports\r\nexport * from './errors/exceptions';\r\nexport { ErrorHandler } from './errors/handler';\r\n\r\n// Middleware exports\r\nexport * from './middleware';\r\n\r\n// Plugin exports\r\nexport type { Plugin } from './core/plugin';\r\nexport { PluginManager } from './core/plugin';\r\nexport * from './plugins';\r\n\r\n// WebSocket exports\r\nexport * from './websocket';\r\n\r\n// GraphQL exports\r\nexport * from './graphql';\r\n\r\n// Documentation exports\r\nexport { OpenAPIGenerator } from './docs/openapi-generator';\r\nexport { ZodToJsonSchemaConverter, zodToJsonSchema } from './docs/zod-to-json-schema';\r\n\r\n// Adapter exports\r\nexport * from './adapters/base';\r\nexport { HonoAdapter } from './adapters/hono';\r\nexport { ExpressAdapter } from './adapters/express';\r\n\r\n// Type exports\r\nexport * from './types';\r\n\r\n// Testing utilities exports\r\nexport * from './testing';\r\n",
98
+ "// HTTP method decorators\r\nimport { MetadataRegistry } from '../core/metadata';\r\nimport type { HTTPMethod } from '../types';\r\n\r\n/**\r\n * Controller decorator - marks a class as a controller and sets a route prefix\r\n * @param prefix - The route prefix for all routes in this controller (e.g., '/users')\r\n * @example\r\n * ```ts\r\n * @Controller('/api/users')\r\n * class UserController {\r\n * @Get('/:id')\r\n * getUser() {}\r\n * }\r\n * ```\r\n */\r\nexport function Controller(prefix: string = ''): ClassDecorator {\r\n return (target: any) => {\r\n // Normalize prefix: ensure it starts with / if not empty, and doesn't end with /\r\n let normalizedPrefix = prefix.trim();\r\n if (normalizedPrefix && !normalizedPrefix.startsWith('/')) {\r\n normalizedPrefix = '/' + normalizedPrefix;\r\n }\r\n if (normalizedPrefix.endsWith('/')) {\r\n normalizedPrefix = normalizedPrefix.slice(0, -1);\r\n }\r\n\r\n MetadataRegistry.defineController(target, {\r\n prefix: normalizedPrefix,\r\n middleware: []\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * Helper function to create HTTP method decorators\r\n */\r\nfunction createMethodDecorator(method: HTTPMethod) {\r\n return (path: string = ''): MethodDecorator => {\r\n return (target: any, propertyKey: string | symbol) => {\r\n // Normalize path: ensure it starts with / if not empty\r\n let normalizedPath = path.trim();\r\n if (normalizedPath && !normalizedPath.startsWith('/')) {\r\n normalizedPath = '/' + normalizedPath;\r\n }\r\n\r\n MetadataRegistry.defineRoute(target, propertyKey as string, {\r\n method,\r\n path: normalizedPath,\r\n middleware: [],\r\n parameters: [],\r\n dependencies: [],\r\n responses: []\r\n });\r\n };\r\n };\r\n}\r\n\r\n/**\r\n * GET method decorator\r\n * @param path - The route path (e.g., '/:id' or '/list')\r\n * @example\r\n * ```ts\r\n * @Get('/:id')\r\n * getUser(@Param('id') id: string) {}\r\n * ```\r\n */\r\nexport const Get = createMethodDecorator('GET');\r\n\r\n/**\r\n * POST method decorator\r\n * @param path - The route path\r\n * @example\r\n * ```ts\r\n * @Post('/')\r\n * createUser(@Body(UserSchema) data: User) {}\r\n * ```\r\n */\r\nexport const Post = createMethodDecorator('POST');\r\n\r\n/**\r\n * PUT method decorator\r\n * @param path - The route path\r\n * @example\r\n * ```ts\r\n * @Put('/:id')\r\n * updateUser(@Param('id') id: string, @Body(UserSchema) data: User) {}\r\n * ```\r\n */\r\nexport const Put = createMethodDecorator('PUT');\r\n\r\n/**\r\n * DELETE method decorator\r\n * @param path - The route path\r\n * @example\r\n * ```ts\r\n * @Delete('/:id')\r\n * deleteUser(@Param('id') id: string) {}\r\n * ```\r\n */\r\nexport const Delete = createMethodDecorator('DELETE');\r\n\r\n/**\r\n * PATCH method decorator\r\n * @param path - The route path\r\n * @example\r\n * ```ts\r\n * @Patch('/:id')\r\n * patchUser(@Param('id') id: string, @Body(PartialUserSchema) data: Partial<User>) {}\r\n * ```\r\n */\r\nexport const Patch = createMethodDecorator('PATCH');\r\n\r\n/**\r\n * ALL method decorator - responds to all HTTP methods\r\n * @param path - The route path\r\n * @example\r\n * ```ts\r\n * @All('/health')\r\n * health() { return { status: 'ok' }; }\r\n * ```\r\n */\r\nexport const All = createMethodDecorator('ALL');\r\n",
99
+ "// Parameter decorators\r\nimport type { ZodSchema } from 'zod';\r\nimport { MetadataRegistry } from '../core/metadata';\r\nimport type { ParameterMetadata } from '../types';\r\n\r\n/**\r\n * Body decorator - extracts and validates request body\r\n * @param schema - Optional Zod schema for validation\r\n * @example\r\n * ```ts\r\n * @Post('/users')\r\n * createUser(@Body(UserSchema) data: User) {}\r\n * ```\r\n */\r\nexport function Body<T extends ZodSchema>(schema?: T): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n\r\n const metadata: ParameterMetadata = {\r\n index: parameterIndex,\r\n type: 'body',\r\n schema,\r\n required: true\r\n };\r\n\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, metadata);\r\n };\r\n}\r\n\r\n/**\r\n * Query decorator - extracts and validates query parameters\r\n * @param schema - Optional Zod schema for validation\r\n * @example\r\n * ```ts\r\n * @Get('/users')\r\n * listUsers(@Query(QuerySchema) query: { page: number, limit: number }) {}\r\n * ```\r\n */\r\nexport function Query<T extends ZodSchema>(schema?: T): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n\r\n const metadata: ParameterMetadata = {\r\n index: parameterIndex,\r\n type: 'query',\r\n schema,\r\n required: false\r\n };\r\n\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, metadata);\r\n };\r\n}\r\n\r\n/**\r\n * Param decorator - extracts route parameters\r\n * @param name - Optional specific parameter name to extract\r\n * @example\r\n * ```ts\r\n * @Get('/:id')\r\n * getUser(@Param('id') id: string) {}\r\n * \r\n * // Or extract all params\r\n * @Get('/:userId/posts/:postId')\r\n * getPost(@Param() params: { userId: string, postId: string }) {}\r\n * ```\r\n */\r\nexport function Param(name?: string): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n\r\n const metadata: ParameterMetadata = {\r\n index: parameterIndex,\r\n type: 'param',\r\n name,\r\n required: true\r\n };\r\n\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, metadata);\r\n };\r\n}\r\n\r\n/**\r\n * Header decorator - extracts request headers\r\n * @param name - Optional specific header name to extract\r\n * @example\r\n * ```ts\r\n * @Get('/protected')\r\n * getProtected(@Header('authorization') auth: string) {}\r\n * \r\n * // Or extract all headers\r\n * @Get('/info')\r\n * getInfo(@Header() headers: Record<string, string>) {}\r\n * ```\r\n */\r\nexport function Header(name?: string): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n\r\n const metadata: ParameterMetadata = {\r\n index: parameterIndex,\r\n type: 'header',\r\n name,\r\n required: false\r\n };\r\n\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, metadata);\r\n };\r\n}\r\n\r\n/**\r\n * Cookie decorator - extracts cookies\r\n * @param name - Optional specific cookie name to extract\r\n * @example\r\n * ```ts\r\n * @Get('/profile')\r\n * getProfile(@Cookie('session') sessionId: string) {}\r\n * \r\n * // Or extract all cookies\r\n * @Get('/info')\r\n * getInfo(@Cookie() cookies: Record<string, string>) {}\r\n * ```\r\n */\r\nexport function Cookie(name?: string): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n\r\n const metadata: ParameterMetadata = {\r\n index: parameterIndex,\r\n type: 'cookie',\r\n name,\r\n required: false\r\n };\r\n\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, metadata);\r\n };\r\n}\r\n\r\n/**\r\n * Req decorator - injects the raw Hono Request object\r\n * @example\r\n * ```ts\r\n * @Get('/raw')\r\n * getRaw(@Req() req: Request) {}\r\n * ```\r\n */\r\nexport function Req(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n\r\n const metadata: ParameterMetadata = {\r\n index: parameterIndex,\r\n type: 'request',\r\n required: true\r\n };\r\n\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, metadata);\r\n };\r\n}\r\n\r\n/**\r\n * Ctx decorator - injects the Hono Context object\r\n * @example\r\n * ```ts\r\n * @Get('/context')\r\n * getContext(@Ctx() ctx: Context) {}\r\n * ```\r\n */\r\nexport function Ctx(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (!propertyKey) return;\r\n\r\n const metadata: ParameterMetadata = {\r\n index: parameterIndex,\r\n type: 'context',\r\n required: true\r\n };\r\n\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, metadata);\r\n };\r\n}\r\n",
100
+ "// Dependency injection decorators\r\nimport type { Provider, Scope } from '../types';\r\nimport { MetadataRegistry } from '../core/metadata';\r\n\r\n/**\r\n * @Depends decorator for dependency injection\r\n * Marks a parameter to be injected with a dependency from the DI container\r\n * \r\n * @param provider - The provider (class or factory) to inject\r\n * @param scope - The lifecycle scope: 'singleton', 'request', or 'transient'\r\n * \r\n * @example\r\n * ```typescript\r\n * class UserService {\r\n * constructor() {}\r\n * getUser(id: string) { return { id, name: 'John' }; }\r\n * }\r\n * \r\n * class UserController {\r\n * @Get('/users/:id')\r\n * getUser(\r\n * @Param('id') id: string,\r\n * @Depends(UserService, 'singleton') userService: UserService\r\n * ) {\r\n * return userService.getUser(id);\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function Depends<T>(provider: Provider<T>, scope: Scope = 'request'): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n // propertyKey is undefined for constructor parameters\r\n if (propertyKey === undefined) {\r\n throw new Error('@Depends decorator can only be used on method parameters, not constructor parameters');\r\n }\r\n\r\n // Store dependency metadata\r\n MetadataRegistry.defineDependency(target, propertyKey as string, parameterIndex, {\r\n index: parameterIndex,\r\n provider,\r\n scope\r\n });\r\n };\r\n}\r\n",
101
+ "// Middleware decorators\r\nimport type { Middleware } from '../types';\r\n\r\n/**\r\n * UseMiddleware decorator - applies middleware to a specific route\r\n * \r\n * Middleware functions are executed before the route handler.\r\n * Multiple middleware can be chained and will execute in order.\r\n * \r\n * @param middleware - One or more middleware functions to apply\r\n * \r\n * @example\r\n * ```typescript\r\n * const authMiddleware: Middleware = async (c, next) => {\r\n * const token = c.req.header('authorization');\r\n * if (!token) {\r\n * return c.json({ error: 'Unauthorized' }, 401);\r\n * }\r\n * await next();\r\n * };\r\n * \r\n * class UserController {\r\n * @Get('/profile')\r\n * @UseMiddleware(authMiddleware)\r\n * getProfile() {\r\n * return { name: 'John', email: 'john@example.com' };\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function UseMiddleware(...middleware: Middleware[]): MethodDecorator {\r\n // Implementation in task 16\r\n return (target: any, propertyKey: string | symbol) => {};\r\n}\r\n",
102
+ "// Documentation decorators for OpenAPI documentation\r\nimport { MetadataRegistry } from '../core/metadata';\r\nimport type { RouteDocumentation, ResponseMetadata } from '../types';\r\n\r\n/**\r\n * ApiDoc decorator - adds documentation metadata to a route\r\n * @param docs - Documentation object with summary, description, tags, etc.\r\n * @example\r\n * ```ts\r\n * @ApiDoc({\r\n * summary: 'Get user by ID',\r\n * description: 'Retrieves a user from the database by their unique ID',\r\n * tags: ['Users'],\r\n * deprecated: false\r\n * })\r\n * @Get('/:id')\r\n * getUser(@Param('id') id: string) {}\r\n * ```\r\n */\r\nexport function ApiDoc(docs: RouteDocumentation): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n // Get existing route metadata\r\n const existingMetadata = MetadataRegistry.getRouteMetadata(target, propertyKey as string);\r\n \r\n // Merge documentation with existing metadata\r\n MetadataRegistry.defineRoute(target, propertyKey as string, {\r\n ...existingMetadata,\r\n docs: {\r\n ...existingMetadata?.docs,\r\n ...docs\r\n }\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * ApiResponse decorator - documents a possible response for a route\r\n * Can be used multiple times to document different status codes\r\n * @param response - Response metadata with status code, description, and schema\r\n * @example\r\n * ```ts\r\n * @ApiResponse({\r\n * statusCode: 200,\r\n * description: 'User found',\r\n * schema: UserSchema\r\n * })\r\n * @ApiResponse({\r\n * statusCode: 404,\r\n * description: 'User not found'\r\n * })\r\n * @Get('/:id')\r\n * getUser(@Param('id') id: string) {}\r\n * ```\r\n */\r\nexport function ApiResponse(response: ResponseMetadata): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n // Get existing route metadata\r\n const existingMetadata = MetadataRegistry.getRouteMetadata(target, propertyKey as string);\r\n \r\n // Get existing responses array\r\n const existingResponses = existingMetadata?.responses || [];\r\n \r\n // Check if a response with this status code already exists\r\n const existingIndex = existingResponses.findIndex(\r\n r => r.statusCode === response.statusCode\r\n );\r\n \r\n let updatedResponses: ResponseMetadata[];\r\n if (existingIndex >= 0) {\r\n // Replace existing response\r\n updatedResponses = [...existingResponses];\r\n updatedResponses[existingIndex] = response;\r\n } else {\r\n // Add new response\r\n updatedResponses = [...existingResponses, response];\r\n }\r\n \r\n // Update route metadata with new responses\r\n MetadataRegistry.defineRoute(target, propertyKey as string, {\r\n ...existingMetadata,\r\n responses: updatedResponses\r\n });\r\n };\r\n}\r\n",
103
+ "// WebSocket decorators\r\nimport 'reflect-metadata';\r\nimport type { ZodSchema } from 'zod';\r\nimport { MetadataRegistry } from '../core/metadata';\r\n\r\n/**\r\n * @WebSocket decorator - Marks a class as a WebSocket handler\r\n * @param path - WebSocket endpoint path\r\n * \r\n * @example\r\n * ```typescript\r\n * @WebSocket('/ws/chat')\r\n * class ChatHandler {\r\n * @OnConnect()\r\n * handleConnect(connection: WebSocketConnection) {\r\n * console.log('Client connected');\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function WebSocket(path: string): ClassDecorator {\r\n return (target: any) => {\r\n MetadataRegistry.defineWebSocket(target, { path });\r\n };\r\n}\r\n\r\n/**\r\n * @OnConnect decorator - Marks a method to be called when a client connects\r\n * \r\n * @example\r\n * ```typescript\r\n * @OnConnect()\r\n * handleConnect(connection: WebSocketConnection) {\r\n * connection.send({ type: 'welcome', message: 'Connected!' });\r\n * }\r\n * ```\r\n */\r\nexport function OnConnect(): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n MetadataRegistry.defineWebSocketHandler(target, propertyKey as string, {\r\n type: 'connect',\r\n method: propertyKey as string\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * @OnMessage decorator - Marks a method to be called when a message is received\r\n * @param schema - Optional Zod schema for message validation\r\n * \r\n * @example\r\n * ```typescript\r\n * const MessageSchema = z.object({\r\n * type: z.string(),\r\n * content: z.string()\r\n * });\r\n * \r\n * @OnMessage(MessageSchema)\r\n * handleMessage(connection: WebSocketConnection, data: z.infer<typeof MessageSchema>) {\r\n * connection.broadcast(data);\r\n * }\r\n * ```\r\n */\r\nexport function OnMessage(schema?: ZodSchema): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n MetadataRegistry.defineWebSocketHandler(target, propertyKey as string, {\r\n type: 'message',\r\n method: propertyKey as string,\r\n schema\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * @OnDisconnect decorator - Marks a method to be called when a client disconnects\r\n * \r\n * @example\r\n * ```typescript\r\n * @OnDisconnect()\r\n * handleDisconnect(connection: WebSocketConnection) {\r\n * console.log('Client disconnected');\r\n * }\r\n * ```\r\n */\r\nexport function OnDisconnect(): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n MetadataRegistry.defineWebSocketHandler(target, propertyKey as string, {\r\n type: 'disconnect',\r\n method: propertyKey as string\r\n });\r\n };\r\n}\r\n"
104
+ ],
105
+ "mappings": "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",
106
+ "debugId": "476119DE5326A99A64756E2164756E21",
107
+ "names": []
108
+ }