veloce-ts 0.2.6 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/CHANGELOG.md +501 -240
  2. package/README.md +141 -1
  3. package/dist/cjs/src/cli/index.js +125 -74
  4. package/dist/cjs/src/cli/index.js.map +4 -4
  5. package/dist/cjs/src/index.js +66 -25
  6. package/dist/cjs/src/index.js.map +112 -10
  7. package/dist/cjs/src/middleware/index.js +28 -2
  8. package/dist/cjs/src/middleware/index.js.map +79 -4
  9. package/dist/cjs/src/plugins/index.js +49 -23
  10. package/dist/cjs/src/plugins/index.js.map +74 -4
  11. package/dist/cjs/src/testing/index.js +30 -4
  12. package/dist/cjs/src/testing/index.js.map +80 -7
  13. package/dist/cjs/src/websocket/index.js +3 -3
  14. package/dist/cjs/src/websocket/index.js.map +1 -1
  15. package/dist/esm/src/cli/index.js +561 -22
  16. package/dist/esm/src/cli/index.js.map +8 -4
  17. package/dist/esm/src/docs/index.js +6 -6
  18. package/dist/esm/src/docs/index.js.map +10 -3
  19. package/dist/esm/src/errors/index.js +3 -2
  20. package/dist/esm/src/errors/index.js.map +7 -3
  21. package/dist/esm/src/graphql/index.js +82 -2
  22. package/dist/esm/src/graphql/index.js.map +18 -3
  23. package/dist/esm/src/index.js +165 -3
  24. package/dist/esm/src/index.js.map +202 -6
  25. package/dist/esm/src/middleware/index.js +28 -2
  26. package/dist/esm/src/middleware/index.js.map +81 -3
  27. package/dist/esm/src/plugins/index.js +113 -3
  28. package/dist/esm/src/plugins/index.js.map +131 -4
  29. package/dist/esm/src/testing/index.js +42 -2
  30. package/dist/esm/src/testing/index.js.map +97 -7
  31. package/dist/esm/src/types/index.js +2 -2
  32. package/dist/esm/src/types/index.js.map +10 -3
  33. package/dist/esm/src/validation/index.js +2 -2
  34. package/dist/esm/src/validation/index.js.map +13 -3
  35. package/dist/esm/src/websocket/index.js +15 -2
  36. package/dist/esm/src/websocket/index.js.map +9 -4
  37. package/dist/types/adapters/base.d.ts +10 -2
  38. package/dist/types/adapters/base.d.ts.map +1 -1
  39. package/dist/types/adapters/hono.d.ts +2 -2
  40. package/dist/types/adapters/hono.d.ts.map +1 -1
  41. package/dist/types/auth/permissions.d.ts +10 -10
  42. package/dist/types/auth/session.d.ts +2 -2
  43. package/dist/types/cache/index.d.ts +9 -0
  44. package/dist/types/cache/index.d.ts.map +1 -0
  45. package/dist/types/cache/manager.d.ts +75 -0
  46. package/dist/types/cache/manager.d.ts.map +1 -0
  47. package/dist/types/cache/memory-store.d.ts +55 -0
  48. package/dist/types/cache/memory-store.d.ts.map +1 -0
  49. package/dist/types/cache/redis-store.d.ts +55 -0
  50. package/dist/types/cache/redis-store.d.ts.map +1 -0
  51. package/dist/types/cache/types.d.ts +92 -0
  52. package/dist/types/cache/types.d.ts.map +1 -0
  53. package/dist/types/cli/commands/new.d.ts.map +1 -1
  54. package/dist/types/context/request-context.d.ts +66 -0
  55. package/dist/types/context/request-context.d.ts.map +1 -0
  56. package/dist/types/core/application.d.ts +11 -0
  57. package/dist/types/core/application.d.ts.map +1 -1
  58. package/dist/types/core/router-compiler.d.ts +1 -1
  59. package/dist/types/core/router-compiler.d.ts.map +1 -1
  60. package/dist/types/decorators/cache.d.ts +56 -0
  61. package/dist/types/decorators/cache.d.ts.map +1 -0
  62. package/dist/types/decorators/params.d.ts +24 -0
  63. package/dist/types/decorators/params.d.ts.map +1 -1
  64. package/dist/types/dependencies/container.d.ts +1 -1
  65. package/dist/types/dependencies/container.d.ts.map +1 -1
  66. package/dist/types/index.d.ts +7 -1
  67. package/dist/types/index.d.ts.map +1 -1
  68. package/dist/types/logging/index.d.ts +10 -0
  69. package/dist/types/logging/index.d.ts.map +1 -0
  70. package/dist/types/logging/logger.d.ts +25 -0
  71. package/dist/types/logging/logger.d.ts.map +1 -0
  72. package/dist/types/logging/middleware.d.ts +15 -0
  73. package/dist/types/logging/middleware.d.ts.map +1 -0
  74. package/dist/types/logging/types.d.ts +22 -0
  75. package/dist/types/logging/types.d.ts.map +1 -0
  76. package/dist/types/middleware/cache.d.ts +54 -0
  77. package/dist/types/middleware/cache.d.ts.map +1 -0
  78. package/dist/types/middleware/index.d.ts +3 -0
  79. package/dist/types/middleware/index.d.ts.map +1 -1
  80. package/dist/types/middleware/request-context.d.ts +55 -0
  81. package/dist/types/middleware/request-context.d.ts.map +1 -0
  82. package/dist/types/orm/base-repository.d.ts +77 -0
  83. package/dist/types/orm/base-repository.d.ts.map +1 -0
  84. package/dist/types/orm/decorators.d.ts +35 -0
  85. package/dist/types/orm/decorators.d.ts.map +1 -0
  86. package/dist/types/orm/drizzle/index.d.ts +6 -0
  87. package/dist/types/orm/drizzle/index.d.ts.map +1 -0
  88. package/dist/types/orm/drizzle/plugin.d.ts +165 -0
  89. package/dist/types/orm/drizzle/plugin.d.ts.map +1 -0
  90. package/dist/types/orm/drizzle/repository.d.ts +61 -0
  91. package/dist/types/orm/drizzle/repository.d.ts.map +1 -0
  92. package/dist/types/orm/drizzle/schema-converter.d.ts +53 -0
  93. package/dist/types/orm/drizzle/schema-converter.d.ts.map +1 -0
  94. package/dist/types/orm/drizzle/transaction-manager.d.ts +58 -0
  95. package/dist/types/orm/drizzle/transaction-manager.d.ts.map +1 -0
  96. package/dist/types/orm/drizzle/types.d.ts +121 -0
  97. package/dist/types/orm/drizzle/types.d.ts.map +1 -0
  98. package/dist/types/orm/index.d.ts +16 -0
  99. package/dist/types/orm/index.d.ts.map +1 -0
  100. package/dist/types/orm/pagination.d.ts +147 -0
  101. package/dist/types/orm/pagination.d.ts.map +1 -0
  102. package/dist/types/orm/prisma/index.d.ts +6 -0
  103. package/dist/types/orm/prisma/index.d.ts.map +1 -0
  104. package/dist/types/orm/prisma/plugin.d.ts +68 -0
  105. package/dist/types/orm/prisma/plugin.d.ts.map +1 -0
  106. package/dist/types/orm/prisma/repository.d.ts +70 -0
  107. package/dist/types/orm/prisma/repository.d.ts.map +1 -0
  108. package/dist/types/orm/prisma/schema-generator.d.ts +45 -0
  109. package/dist/types/orm/prisma/schema-generator.d.ts.map +1 -0
  110. package/dist/types/orm/prisma/transaction-manager.d.ts +32 -0
  111. package/dist/types/orm/prisma/transaction-manager.d.ts.map +1 -0
  112. package/dist/types/orm/prisma/types.d.ts +67 -0
  113. package/dist/types/orm/prisma/types.d.ts.map +1 -0
  114. package/dist/types/orm/query-builder.d.ts +129 -0
  115. package/dist/types/orm/query-builder.d.ts.map +1 -0
  116. package/dist/types/orm/repository-factory.d.ts +130 -0
  117. package/dist/types/orm/repository-factory.d.ts.map +1 -0
  118. package/dist/types/orm/transaction-events.d.ts +122 -0
  119. package/dist/types/orm/transaction-events.d.ts.map +1 -0
  120. package/dist/types/orm/transaction-interceptor.d.ts +30 -0
  121. package/dist/types/orm/transaction-interceptor.d.ts.map +1 -0
  122. package/dist/types/orm/transaction-manager.d.ts +64 -0
  123. package/dist/types/orm/transaction-manager.d.ts.map +1 -0
  124. package/dist/types/orm/transaction-plugin.d.ts +117 -0
  125. package/dist/types/orm/transaction-plugin.d.ts.map +1 -0
  126. package/dist/types/orm/transaction-propagation.d.ts +49 -0
  127. package/dist/types/orm/transaction-propagation.d.ts.map +1 -0
  128. package/dist/types/orm/typeorm/decorators.d.ts +40 -0
  129. package/dist/types/orm/typeorm/decorators.d.ts.map +1 -0
  130. package/dist/types/orm/typeorm/index.d.ts +6 -0
  131. package/dist/types/orm/typeorm/index.d.ts.map +1 -0
  132. package/dist/types/orm/typeorm/plugin.d.ts +100 -0
  133. package/dist/types/orm/typeorm/plugin.d.ts.map +1 -0
  134. package/dist/types/orm/typeorm/repository.d.ts +58 -0
  135. package/dist/types/orm/typeorm/repository.d.ts.map +1 -0
  136. package/dist/types/orm/typeorm/transaction-manager.d.ts +48 -0
  137. package/dist/types/orm/typeorm/transaction-manager.d.ts.map +1 -0
  138. package/dist/types/orm/typeorm/types.d.ts +139 -0
  139. package/dist/types/orm/typeorm/types.d.ts.map +1 -0
  140. package/dist/types/plugins/health.d.ts +75 -0
  141. package/dist/types/plugins/health.d.ts.map +1 -0
  142. package/dist/types/plugins/index.d.ts +2 -0
  143. package/dist/types/plugins/index.d.ts.map +1 -1
  144. package/dist/types/types/index.d.ts +15 -2
  145. package/dist/types/types/index.d.ts.map +1 -1
  146. package/dist/types/websocket/index.d.ts +1 -1
  147. package/dist/types/websocket/index.d.ts.map +1 -1
  148. package/package.json +22 -2
  149. package/dist/esm/chunk-2100y16g.js +0 -5
  150. package/dist/esm/chunk-2100y16g.js.map +0 -10
  151. package/dist/esm/chunk-5q75d71c.js +0 -4
  152. package/dist/esm/chunk-5q75d71c.js.map +0 -16
  153. package/dist/esm/chunk-8dpc6an2.js +0 -7
  154. package/dist/esm/chunk-8dpc6an2.js.map +0 -10
  155. package/dist/esm/chunk-9v7atckx.js +0 -5
  156. package/dist/esm/chunk-9v7atckx.js.map +0 -10
  157. package/dist/esm/chunk-bvstdn0t.js +0 -60
  158. package/dist/esm/chunk-bvstdn0t.js.map +0 -10
  159. package/dist/esm/chunk-ctwpr5gr.js +0 -430
  160. package/dist/esm/chunk-ctwpr5gr.js.map +0 -10
  161. package/dist/esm/chunk-dtw2tbsd.js +0 -5
  162. package/dist/esm/chunk-dtw2tbsd.js.map +0 -12
  163. package/dist/esm/chunk-ef0vfd27.js +0 -72
  164. package/dist/esm/chunk-ef0vfd27.js.map +0 -13
  165. package/dist/esm/chunk-k66rn4fj.js +0 -18
  166. package/dist/esm/chunk-k66rn4fj.js.map +0 -10
  167. package/dist/esm/chunk-mky5qqg0.js +0 -5
  168. package/dist/esm/chunk-mky5qqg0.js.map +0 -10
  169. package/dist/esm/chunk-mznkhz9c.js +0 -5
  170. package/dist/esm/chunk-mznkhz9c.js.map +0 -12
  171. package/dist/esm/chunk-s5z0wb7e.js +0 -5
  172. package/dist/esm/chunk-s5z0wb7e.js.map +0 -10
  173. package/dist/esm/chunk-vh4sxcpe.js +0 -6
  174. package/dist/esm/chunk-vh4sxcpe.js.map +0 -10
  175. package/dist/esm/chunk-xa333k40.js +0 -7
  176. package/dist/esm/chunk-xa333k40.js.map +0 -10
  177. package/dist/esm/chunk-y262e56g.js +0 -5
  178. package/dist/esm/chunk-y262e56g.js.map +0 -9
  179. package/dist/esm/chunk-yq3gf9ts.js +0 -5
  180. package/dist/esm/chunk-yq3gf9ts.js.map +0 -10
@@ -1,7 +1,83 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["..\\..\\node_modules\\safe-buffer\\index.js", "..\\..\\node_modules\\jws\\lib\\data-stream.js", "..\\..\\node_modules\\ecdsa-sig-formatter\\src\\param-bytes-for-alg.js", "..\\..\\node_modules\\ecdsa-sig-formatter\\src\\ecdsa-sig-formatter.js", "..\\..\\node_modules\\buffer-equal-constant-time\\index.js", "..\\..\\node_modules\\jwa\\index.js", "..\\..\\node_modules\\jws\\lib\\tostring.js", "..\\..\\node_modules\\jws\\lib\\sign-stream.js", "..\\..\\node_modules\\jws\\lib\\verify-stream.js", "..\\..\\node_modules\\jws\\index.js", "..\\..\\node_modules\\jsonwebtoken\\decode.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\JsonWebTokenError.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\NotBeforeError.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\TokenExpiredError.js", "..\\..\\node_modules\\ms\\index.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\timespan.js", "..\\..\\node_modules\\semver\\internal\\constants.js", "..\\..\\node_modules\\semver\\internal\\debug.js", "..\\..\\node_modules\\semver\\internal\\re.js", "..\\..\\node_modules\\semver\\internal\\parse-options.js", "..\\..\\node_modules\\semver\\internal\\identifiers.js", "..\\..\\node_modules\\semver\\classes\\semver.js", "..\\..\\node_modules\\semver\\functions\\parse.js", "..\\..\\node_modules\\semver\\functions\\valid.js", "..\\..\\node_modules\\semver\\functions\\clean.js", "..\\..\\node_modules\\semver\\functions\\inc.js", "..\\..\\node_modules\\semver\\functions\\diff.js", "..\\..\\node_modules\\semver\\functions\\major.js", "..\\..\\node_modules\\semver\\functions\\minor.js", "..\\..\\node_modules\\semver\\functions\\patch.js", "..\\..\\node_modules\\semver\\functions\\prerelease.js", "..\\..\\node_modules\\semver\\functions\\compare.js", "..\\..\\node_modules\\semver\\functions\\rcompare.js", "..\\..\\node_modules\\semver\\functions\\compare-loose.js", "..\\..\\node_modules\\semver\\functions\\compare-build.js", "..\\..\\node_modules\\semver\\functions\\sort.js", "..\\..\\node_modules\\semver\\functions\\rsort.js", "..\\..\\node_modules\\semver\\functions\\gt.js", "..\\..\\node_modules\\semver\\functions\\lt.js", "..\\..\\node_modules\\semver\\functions\\eq.js", "..\\..\\node_modules\\semver\\functions\\neq.js", "..\\..\\node_modules\\semver\\functions\\gte.js", "..\\..\\node_modules\\semver\\functions\\lte.js", "..\\..\\node_modules\\semver\\functions\\cmp.js", "..\\..\\node_modules\\semver\\functions\\coerce.js", "..\\..\\node_modules\\semver\\internal\\lrucache.js", "..\\..\\node_modules\\semver\\classes\\range.js", "..\\..\\node_modules\\semver\\classes\\comparator.js", "..\\..\\node_modules\\semver\\functions\\satisfies.js", "..\\..\\node_modules\\semver\\ranges\\to-comparators.js", "..\\..\\node_modules\\semver\\ranges\\max-satisfying.js", "..\\..\\node_modules\\semver\\ranges\\min-satisfying.js", "..\\..\\node_modules\\semver\\ranges\\min-version.js", "..\\..\\node_modules\\semver\\ranges\\valid.js", "..\\..\\node_modules\\semver\\ranges\\outside.js", "..\\..\\node_modules\\semver\\ranges\\gtr.js", "..\\..\\node_modules\\semver\\ranges\\ltr.js", "..\\..\\node_modules\\semver\\ranges\\intersects.js", "..\\..\\node_modules\\semver\\ranges\\simplify.js", "..\\..\\node_modules\\semver\\ranges\\subset.js", "..\\..\\node_modules\\semver\\index.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\asymmetricKeyDetailsSupported.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\rsaPssKeyDetailsSupported.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\validateAsymmetricKey.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\psSupported.js", "..\\..\\node_modules\\jsonwebtoken\\verify.js", "..\\..\\node_modules\\lodash.includes\\index.js", "..\\..\\node_modules\\lodash.isboolean\\index.js", "..\\..\\node_modules\\lodash.isinteger\\index.js", "..\\..\\node_modules\\lodash.isnumber\\index.js", "..\\..\\node_modules\\lodash.isplainobject\\index.js", "..\\..\\node_modules\\lodash.isstring\\index.js", "..\\..\\node_modules\\lodash.once\\index.js", "..\\..\\node_modules\\jsonwebtoken\\sign.js", "..\\..\\node_modules\\jsonwebtoken\\index.js", "..\\..\\src\\index.ts", "..\\..\\src\\decorators\\http.ts", "..\\..\\src\\decorators\\params.ts", "..\\..\\src\\decorators\\dependencies.ts", "..\\..\\src\\decorators\\middleware.ts", "..\\..\\src\\decorators\\docs.ts", "..\\..\\src\\auth\\jwt-provider.ts", "..\\..\\src\\auth\\auth-service.ts", "..\\..\\src\\auth\\rbac.ts", "..\\..\\src\\auth\\decorators.ts", "..\\..\\src\\auth\\rbac-decorators.ts", "..\\..\\src\\auth\\rbac-plugin.ts", "..\\..\\src\\auth\\auth-plugin.ts", "..\\..\\src\\auth\\oauth-provider.ts", "..\\..\\src\\auth\\oauth-decorators.ts", "..\\..\\src\\auth\\session.ts", "..\\..\\src\\auth\\session-decorators.ts"],
3
+ "sources": ["..\\..\\src\\context\\request-context.ts", "..\\..\\node_modules\\pino-std-serializers\\lib\\err-helpers.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\err-proto.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\err.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\err-with-cause.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\req.js", "..\\..\\node_modules\\pino-std-serializers\\lib\\res.js", "..\\..\\node_modules\\pino-std-serializers\\index.js", "..\\..\\node_modules\\pino\\lib\\caller.js", "..\\..\\node_modules\\@pinojs\\redact\\index.js", "..\\..\\node_modules\\pino\\lib\\symbols.js", "..\\..\\node_modules\\pino\\lib\\redaction.js", "..\\..\\node_modules\\pino\\lib\\time.js", "..\\..\\node_modules\\quick-format-unescaped\\index.js", "..\\..\\node_modules\\atomic-sleep\\index.js", "..\\..\\node_modules\\sonic-boom\\index.js", "..\\..\\node_modules\\on-exit-leak-free\\index.js", "..\\..\\node_modules\\thread-stream\\lib\\wait.js", "..\\..\\node_modules\\thread-stream\\lib\\indexes.js", "..\\..\\node_modules\\thread-stream\\index.js", "..\\..\\node_modules\\pino\\lib\\transport.js", "..\\..\\node_modules\\pino\\lib\\tools.js", "..\\..\\node_modules\\pino\\lib\\constants.js", "..\\..\\node_modules\\pino\\lib\\levels.js", "..\\..\\node_modules\\pino\\lib\\meta.js", "..\\..\\node_modules\\pino\\lib\\proto.js", "..\\..\\node_modules\\safe-stable-stringify\\index.js", "..\\..\\node_modules\\pino\\lib\\multistream.js", "..\\..\\node_modules\\pino\\pino.js", "..\\..\\node_modules\\colorette\\index.cjs", "..\\..\\node_modules\\wrappy\\wrappy.js", "..\\..\\node_modules\\once\\once.js", "..\\..\\node_modules\\end-of-stream\\index.js", "..\\..\\node_modules\\pump\\index.js", "..\\..\\node_modules\\split2\\index.js", "..\\..\\node_modules\\pino-abstract-transport\\index.js", "..\\..\\node_modules\\pino-pretty\\lib\\constants.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\get-level-label-data.js", "..\\..\\node_modules\\pino-pretty\\lib\\colors.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\noop.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\build-safe-sonic-boom.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\is-valid-date.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\create-date.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\split-property-key.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\get-property-value.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\delete-log-property.js", "..\\..\\node_modules\\fast-copy\\dist\\cjs\\index.cjs", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\filter-log.js", "..\\..\\node_modules\\dateformat\\lib\\dateformat.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\format-time.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\handle-custom-levels-names-opts.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\handle-custom-levels-opts.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\interpret-conditionals.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\is-object.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\join-lines-with-indentation.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\parse-factory-options.js", "..\\..\\node_modules\\fast-safe-stringify\\index.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-error.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-object.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-error-log.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-level.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-message.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-metadata.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\prettify-time.js", "..\\..\\node_modules\\pino-pretty\\lib\\utils\\index.js", "..\\..\\node_modules\\secure-json-parse\\index.js", "..\\..\\node_modules\\pino-pretty\\lib\\pretty.js", "..\\..\\node_modules\\pino-pretty\\index.js", "..\\..\\src\\cache\\types.ts", "..\\..\\src\\cache\\memory-store.ts", "..\\..\\src\\cache\\manager.ts", "..\\..\\node_modules\\reflect-metadata\\Reflect.js", "..\\..\\src\\errors\\exceptions.ts", "..\\..\\src\\auth\\exceptions.ts", "..\\..\\src\\adapters\\hono.ts", "..\\..\\src\\adapters\\express.ts", "..\\..\\node_modules\\safe-buffer\\index.js", "..\\..\\node_modules\\jws\\lib\\data-stream.js", "..\\..\\node_modules\\ecdsa-sig-formatter\\src\\param-bytes-for-alg.js", "..\\..\\node_modules\\ecdsa-sig-formatter\\src\\ecdsa-sig-formatter.js", "..\\..\\node_modules\\buffer-equal-constant-time\\index.js", "..\\..\\node_modules\\jwa\\index.js", "..\\..\\node_modules\\jws\\lib\\tostring.js", "..\\..\\node_modules\\jws\\lib\\sign-stream.js", "..\\..\\node_modules\\jws\\lib\\verify-stream.js", "..\\..\\node_modules\\jws\\index.js", "..\\..\\node_modules\\jsonwebtoken\\decode.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\JsonWebTokenError.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\NotBeforeError.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\TokenExpiredError.js", "..\\..\\node_modules\\ms\\index.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\timespan.js", "..\\..\\node_modules\\semver\\internal\\constants.js", "..\\..\\node_modules\\semver\\internal\\debug.js", "..\\..\\node_modules\\semver\\internal\\re.js", "..\\..\\node_modules\\semver\\internal\\parse-options.js", "..\\..\\node_modules\\semver\\internal\\identifiers.js", "..\\..\\node_modules\\semver\\classes\\semver.js", "..\\..\\node_modules\\semver\\functions\\parse.js", "..\\..\\node_modules\\semver\\functions\\valid.js", "..\\..\\node_modules\\semver\\functions\\clean.js", "..\\..\\node_modules\\semver\\functions\\inc.js", "..\\..\\node_modules\\semver\\functions\\diff.js", "..\\..\\node_modules\\semver\\functions\\major.js", "..\\..\\node_modules\\semver\\functions\\minor.js", "..\\..\\node_modules\\semver\\functions\\patch.js", "..\\..\\node_modules\\semver\\functions\\prerelease.js", "..\\..\\node_modules\\semver\\functions\\compare.js", "..\\..\\node_modules\\semver\\functions\\rcompare.js", "..\\..\\node_modules\\semver\\functions\\compare-loose.js", "..\\..\\node_modules\\semver\\functions\\compare-build.js", "..\\..\\node_modules\\semver\\functions\\sort.js", "..\\..\\node_modules\\semver\\functions\\rsort.js", "..\\..\\node_modules\\semver\\functions\\gt.js", "..\\..\\node_modules\\semver\\functions\\lt.js", "..\\..\\node_modules\\semver\\functions\\eq.js", "..\\..\\node_modules\\semver\\functions\\neq.js", "..\\..\\node_modules\\semver\\functions\\gte.js", "..\\..\\node_modules\\semver\\functions\\lte.js", "..\\..\\node_modules\\semver\\functions\\cmp.js", "..\\..\\node_modules\\semver\\functions\\coerce.js", "..\\..\\node_modules\\semver\\internal\\lrucache.js", "..\\..\\node_modules\\semver\\classes\\range.js", "..\\..\\node_modules\\semver\\classes\\comparator.js", "..\\..\\node_modules\\semver\\functions\\satisfies.js", "..\\..\\node_modules\\semver\\ranges\\to-comparators.js", "..\\..\\node_modules\\semver\\ranges\\max-satisfying.js", "..\\..\\node_modules\\semver\\ranges\\min-satisfying.js", "..\\..\\node_modules\\semver\\ranges\\min-version.js", "..\\..\\node_modules\\semver\\ranges\\valid.js", "..\\..\\node_modules\\semver\\ranges\\outside.js", "..\\..\\node_modules\\semver\\ranges\\gtr.js", "..\\..\\node_modules\\semver\\ranges\\ltr.js", "..\\..\\node_modules\\semver\\ranges\\intersects.js", "..\\..\\node_modules\\semver\\ranges\\simplify.js", "..\\..\\node_modules\\semver\\ranges\\subset.js", "..\\..\\node_modules\\semver\\index.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\asymmetricKeyDetailsSupported.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\rsaPssKeyDetailsSupported.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\validateAsymmetricKey.js", "..\\..\\node_modules\\jsonwebtoken\\lib\\psSupported.js", "..\\..\\node_modules\\jsonwebtoken\\verify.js", "..\\..\\node_modules\\lodash.includes\\index.js", "..\\..\\node_modules\\lodash.isboolean\\index.js", "..\\..\\node_modules\\lodash.isinteger\\index.js", "..\\..\\node_modules\\lodash.isnumber\\index.js", "..\\..\\node_modules\\lodash.isplainobject\\index.js", "..\\..\\node_modules\\lodash.isstring\\index.js", "..\\..\\node_modules\\lodash.once\\index.js", "..\\..\\node_modules\\jsonwebtoken\\sign.js", "..\\..\\node_modules\\jsonwebtoken\\index.js", "..\\..\\src\\orm\\transaction-manager.ts", "..\\..\\src\\middleware\\cors.ts", "..\\..\\src\\middleware\\rate-limit.ts", "..\\..\\src\\middleware\\compression.ts", "..\\..\\src\\logging\\logger.ts", "..\\..\\src\\logging\\middleware.ts", "..\\..\\src\\middleware\\request-context.ts", "..\\..\\src\\middleware\\cache.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\\validation\\exceptions.ts", "..\\..\\src\\validation\\validator.ts", "..\\..\\src\\graphql\\schema-builder.ts", "..\\..\\src\\graphql\\plugin.ts", "..\\..\\src\\plugins\\health.ts", "..\\..\\src\\decorators\\websocket.ts", "..\\..\\src\\core\\metadata.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\\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\\cache.ts", "..\\..\\src\\auth\\jwt-provider.ts", "..\\..\\src\\auth\\auth-service.ts", "..\\..\\src\\auth\\rbac.ts", "..\\..\\src\\auth\\decorators.ts", "..\\..\\src\\auth\\rbac-decorators.ts", "..\\..\\src\\auth\\rbac-plugin.ts", "..\\..\\src\\auth\\auth-plugin.ts", "..\\..\\src\\auth\\oauth-provider.ts", "..\\..\\src\\auth\\oauth-decorators.ts", "..\\..\\src\\auth\\session.ts", "..\\..\\src\\auth\\session-decorators.ts", "..\\..\\src\\orm\\base-repository.ts", "..\\..\\src\\orm\\prisma\\repository.ts", "..\\..\\src\\orm\\typeorm\\repository.ts", "..\\..\\src\\orm\\drizzle\\repository.ts", "..\\..\\src\\orm\\repository-factory.ts", "..\\..\\src\\orm\\query-builder.ts", "..\\..\\src\\orm\\pagination.ts", "..\\..\\src\\orm\\index.ts", "..\\..\\src\\orm\\decorators.ts", "..\\..\\src\\orm\\transaction-interceptor.ts", "..\\..\\src\\orm\\transaction-propagation.ts", "..\\..\\src\\orm\\transaction-events.ts", "..\\..\\src\\orm\\transaction-plugin.ts", "..\\..\\src\\orm\\prisma\\schema-generator.ts", "..\\..\\src\\orm\\prisma\\transaction-manager.ts", "..\\..\\src\\orm\\prisma\\plugin.ts", "..\\..\\src\\orm\\typeorm\\transaction-manager.ts", "..\\..\\src\\orm\\typeorm\\plugin.ts", "..\\..\\src\\orm\\typeorm\\decorators.ts", "..\\..\\src\\orm\\drizzle\\transaction-manager.ts", "..\\..\\src\\orm\\drizzle\\plugin.ts", "..\\..\\src\\orm\\drizzle\\schema-converter.ts", "..\\..\\src\\cache\\redis-store.ts", "..\\..\\src\\cache\\index.ts"],
4
4
  "sourcesContent": [
5
+ "/**\r\n * Request Context for tracking request lifecycle\r\n * Provides Request ID, AbortSignal, timeouts, and shared context across middleware and handlers\r\n */\r\n\r\nimport type { Context } from '../types';\r\n\r\n/**\r\n * Request Context stored in Hono's context\r\n */\r\nexport interface RequestContext {\r\n requestId: string;\r\n startTime: number;\r\n abortSignal: AbortSignal;\r\n abortController: AbortController;\r\n timeout?: number;\r\n timeoutId?: ReturnType<typeof setTimeout>;\r\n metadata: Record<string, any>;\r\n}\r\n\r\nconst REQUEST_CONTEXT_KEY = 'veloce:request-context';\r\n\r\n/**\r\n * Generate a unique request ID\r\n */\r\nexport function generateRequestId(): string {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return crypto.randomUUID();\r\n }\r\n // Fallback for environments without crypto.randomUUID\r\n return `${Date.now()}-${Math.random().toString(36).substring(2, 15)}-${Math.random().toString(36).substring(2, 15)}`;\r\n}\r\n\r\n/**\r\n * Get request context from Hono context\r\n */\r\nexport function getRequestContext(c: Context): RequestContext | null {\r\n return c.get(REQUEST_CONTEXT_KEY) || null;\r\n}\r\n\r\n/**\r\n * Set request context in Hono context\r\n */\r\nexport function setRequestContext(c: Context, context: RequestContext): void {\r\n c.set(REQUEST_CONTEXT_KEY, context);\r\n}\r\n\r\n/**\r\n * Initialize request context for a new request\r\n * Creates a UUID, AbortSignal, and optionally sets up timeout\r\n */\r\nexport function initializeRequestContext(\r\n c: Context,\r\n options?: {\r\n requestId?: string;\r\n timeout?: number;\r\n }\r\n): RequestContext {\r\n const requestId = options?.requestId || generateRequestId();\r\n const abortController = new AbortController();\r\n \r\n const context: RequestContext = {\r\n requestId,\r\n startTime: Date.now(),\r\n abortSignal: abortController.signal,\r\n abortController,\r\n timeout: options?.timeout,\r\n metadata: {}\r\n };\r\n\r\n // Set up timeout if provided\r\n if (options?.timeout && options.timeout > 0) {\r\n context.timeoutId = setTimeout(() => {\r\n abortController.abort();\r\n }, options.timeout);\r\n }\r\n\r\n setRequestContext(c, context);\r\n return context;\r\n}\r\n\r\n/**\r\n * Get request ID from context\r\n */\r\nexport function getRequestId(c: Context): string | null {\r\n const ctx = getRequestContext(c);\r\n return ctx?.requestId || null;\r\n}\r\n\r\n/**\r\n * Get AbortSignal from context\r\n */\r\nexport function getAbortSignal(c: Context): AbortSignal | null {\r\n const ctx = getRequestContext(c);\r\n return ctx?.abortSignal || null;\r\n}\r\n\r\n/**\r\n * Abort the current request\r\n */\r\nexport function abortRequest(c: Context): void {\r\n const ctx = getRequestContext(c);\r\n if (ctx?.abortController && !ctx.abortSignal.aborted) {\r\n ctx.abortController.abort();\r\n }\r\n}\r\n\r\n/**\r\n * Set metadata in request context\r\n */\r\nexport function setRequestMetadata(c: Context, key: string, value: any): void {\r\n const ctx = getRequestContext(c);\r\n if (ctx) {\r\n ctx.metadata[key] = value;\r\n }\r\n}\r\n\r\n/**\r\n * Get metadata from request context\r\n */\r\nexport function getRequestMetadata(c: Context, key: string): any {\r\n const ctx = getRequestContext(c);\r\n return ctx?.metadata[key];\r\n}\r\n\r\n/**\r\n * Get request duration in milliseconds\r\n */\r\nexport function getRequestDuration(c: Context): number | null {\r\n const ctx = getRequestContext(c);\r\n if (!ctx) return null;\r\n return Date.now() - ctx.startTime;\r\n}\r\n\r\n/**\r\n * Clean up request context (clear timeout, etc.)\r\n */\r\nexport function cleanupRequestContext(c: Context): void {\r\n const ctx = getRequestContext(c);\r\n if (ctx?.timeoutId) {\r\n clearTimeout(ctx.timeoutId);\r\n }\r\n}\r\n",
6
+ "'use strict'\n\n// **************************************************************\n// * Code initially copied/adapted from \"pony-cause\" npm module *\n// * Please upstream improvements there *\n// **************************************************************\n\nconst isErrorLike = (err) => {\n return err && typeof err.message === 'string'\n}\n\n/**\n * @param {Error|{ cause?: unknown|(()=>err)}} err\n * @returns {Error|Object|undefined}\n */\nconst getErrorCause = (err) => {\n if (!err) return\n\n /** @type {unknown} */\n // @ts-ignore\n const cause = err.cause\n\n // VError / NError style causes\n if (typeof cause === 'function') {\n // @ts-ignore\n const causeResult = err.cause()\n\n return isErrorLike(causeResult)\n ? causeResult\n : undefined\n } else {\n return isErrorLike(cause)\n ? cause\n : undefined\n }\n}\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @returns {string}\n */\nconst _stackWithCauses = (err, seen) => {\n if (!isErrorLike(err)) return ''\n\n const stack = err.stack || ''\n\n // Ensure we don't go circular or crazily deep\n if (seen.has(err)) {\n return stack + '\\ncauses have become circular...'\n }\n\n const cause = getErrorCause(err)\n\n if (cause) {\n seen.add(err)\n return (stack + '\\ncaused by: ' + _stackWithCauses(cause, seen))\n } else {\n return stack\n }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst stackWithCauses = (err) => _stackWithCauses(err, new Set())\n\n/**\n * Internal method that keeps a track of which error we have already added, to avoid circular recursion\n *\n * @private\n * @param {Error} err\n * @param {Set<Error>} seen\n * @param {boolean} [skip]\n * @returns {string}\n */\nconst _messageWithCauses = (err, seen, skip) => {\n if (!isErrorLike(err)) return ''\n\n const message = skip ? '' : (err.message || '')\n\n // Ensure we don't go circular or crazily deep\n if (seen.has(err)) {\n return message + ': ...'\n }\n\n const cause = getErrorCause(err)\n\n if (cause) {\n seen.add(err)\n\n // @ts-ignore\n const skipIfVErrorStyleCause = typeof err.cause === 'function'\n\n return (message +\n (skipIfVErrorStyleCause ? '' : ': ') +\n _messageWithCauses(cause, seen, skipIfVErrorStyleCause))\n } else {\n return message\n }\n}\n\n/**\n * @param {Error} err\n * @returns {string}\n */\nconst messageWithCauses = (err) => _messageWithCauses(err, new Set())\n\nmodule.exports = {\n isErrorLike,\n getErrorCause,\n stackWithCauses,\n messageWithCauses\n}\n",
7
+ "'use strict'\n\nconst seen = Symbol('circular-ref-tag')\nconst rawSymbol = Symbol('pino-raw-err-ref')\n\nconst pinoErrProto = Object.create({}, {\n type: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n message: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n stack: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n aggregateErrors: {\n enumerable: true,\n writable: true,\n value: undefined\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoErrProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nmodule.exports = {\n pinoErrProto,\n pinoErrorSymbols: {\n seen,\n rawSymbol\n }\n}\n",
8
+ "'use strict'\n\nmodule.exports = errSerializer\n\nconst { messageWithCauses, stackWithCauses, isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errSerializer (err) {\n if (!isErrorLike(err)) {\n return err\n }\n\n err[seen] = undefined // tag to prevent re-looking at this\n const _err = Object.create(pinoErrProto)\n _err.type = toString.call(err.constructor) === '[object Function]'\n ? err.constructor.name\n : err.name\n _err.message = messageWithCauses(err)\n _err.stack = stackWithCauses(err)\n\n if (Array.isArray(err.errors)) {\n _err.aggregateErrors = err.errors.map(err => errSerializer(err))\n }\n\n for (const key in err) {\n if (_err[key] === undefined) {\n const val = err[key]\n if (isErrorLike(val)) {\n // We append cause messages and stacks to _err, therefore skipping causes here\n if (key !== 'cause' && !Object.prototype.hasOwnProperty.call(val, seen)) {\n _err[key] = errSerializer(val)\n }\n } else {\n _err[key] = val\n }\n }\n }\n\n delete err[seen] // clean up tag in case err is serialized again later\n _err.raw = err\n return _err\n}\n",
9
+ "'use strict'\n\nmodule.exports = errWithCauseSerializer\n\nconst { isErrorLike } = require('./err-helpers')\nconst { pinoErrProto, pinoErrorSymbols } = require('./err-proto')\nconst { seen } = pinoErrorSymbols\n\nconst { toString } = Object.prototype\n\nfunction errWithCauseSerializer (err) {\n if (!isErrorLike(err)) {\n return err\n }\n\n err[seen] = undefined // tag to prevent re-looking at this\n const _err = Object.create(pinoErrProto)\n _err.type = toString.call(err.constructor) === '[object Function]'\n ? err.constructor.name\n : err.name\n _err.message = err.message\n _err.stack = err.stack\n\n if (Array.isArray(err.errors)) {\n _err.aggregateErrors = err.errors.map(err => errWithCauseSerializer(err))\n }\n\n if (isErrorLike(err.cause) && !Object.prototype.hasOwnProperty.call(err.cause, seen)) {\n _err.cause = errWithCauseSerializer(err.cause)\n }\n\n for (const key in err) {\n if (_err[key] === undefined) {\n const val = err[key]\n if (isErrorLike(val)) {\n if (!Object.prototype.hasOwnProperty.call(val, seen)) {\n _err[key] = errWithCauseSerializer(val)\n }\n } else {\n _err[key] = val\n }\n }\n }\n\n delete err[seen] // clean up tag in case err is serialized again later\n _err.raw = err\n return _err\n}\n",
10
+ "'use strict'\n\nmodule.exports = {\n mapHttpRequest,\n reqSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-req-ref')\nconst pinoReqProto = Object.create({}, {\n id: {\n enumerable: true,\n writable: true,\n value: ''\n },\n method: {\n enumerable: true,\n writable: true,\n value: ''\n },\n url: {\n enumerable: true,\n writable: true,\n value: ''\n },\n query: {\n enumerable: true,\n writable: true,\n value: ''\n },\n params: {\n enumerable: true,\n writable: true,\n value: ''\n },\n headers: {\n enumerable: true,\n writable: true,\n value: {}\n },\n remoteAddress: {\n enumerable: true,\n writable: true,\n value: ''\n },\n remotePort: {\n enumerable: true,\n writable: true,\n value: ''\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoReqProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nfunction reqSerializer (req) {\n // req.info is for hapi compat.\n const connection = req.info || req.socket\n const _req = Object.create(pinoReqProto)\n _req.id = (typeof req.id === 'function' ? req.id() : (req.id || (req.info ? req.info.id : undefined)))\n _req.method = req.method\n // req.originalUrl is for expressjs compat.\n if (req.originalUrl) {\n _req.url = req.originalUrl\n } else {\n const path = req.path\n // path for safe hapi compat.\n _req.url = typeof path === 'string' ? path : (req.url ? req.url.path || req.url : undefined)\n }\n\n if (req.query) {\n _req.query = req.query\n }\n\n if (req.params) {\n _req.params = req.params\n }\n\n _req.headers = req.headers\n _req.remoteAddress = connection && connection.remoteAddress\n _req.remotePort = connection && connection.remotePort\n // req.raw is for hapi compat/equivalence\n _req.raw = req.raw || req\n return _req\n}\n\nfunction mapHttpRequest (req) {\n return {\n req: reqSerializer(req)\n }\n}\n",
11
+ "'use strict'\n\nmodule.exports = {\n mapHttpResponse,\n resSerializer\n}\n\nconst rawSymbol = Symbol('pino-raw-res-ref')\nconst pinoResProto = Object.create({}, {\n statusCode: {\n enumerable: true,\n writable: true,\n value: 0\n },\n headers: {\n enumerable: true,\n writable: true,\n value: ''\n },\n raw: {\n enumerable: false,\n get: function () {\n return this[rawSymbol]\n },\n set: function (val) {\n this[rawSymbol] = val\n }\n }\n})\nObject.defineProperty(pinoResProto, rawSymbol, {\n writable: true,\n value: {}\n})\n\nfunction resSerializer (res) {\n const _res = Object.create(pinoResProto)\n _res.statusCode = res.headersSent ? res.statusCode : null\n _res.headers = res.getHeaders ? res.getHeaders() : res._headers\n _res.raw = res\n return _res\n}\n\nfunction mapHttpResponse (res) {\n return {\n res: resSerializer(res)\n }\n}\n",
12
+ "'use strict'\n\nconst errSerializer = require('./lib/err')\nconst errWithCauseSerializer = require('./lib/err-with-cause')\nconst reqSerializers = require('./lib/req')\nconst resSerializers = require('./lib/res')\n\nmodule.exports = {\n err: errSerializer,\n errWithCause: errWithCauseSerializer,\n mapHttpRequest: reqSerializers.mapHttpRequest,\n mapHttpResponse: resSerializers.mapHttpResponse,\n req: reqSerializers.reqSerializer,\n res: resSerializers.resSerializer,\n\n wrapErrorSerializer: function wrapErrorSerializer (customSerializer) {\n if (customSerializer === errSerializer) return customSerializer\n return function wrapErrSerializer (err) {\n return customSerializer(errSerializer(err))\n }\n },\n\n wrapRequestSerializer: function wrapRequestSerializer (customSerializer) {\n if (customSerializer === reqSerializers.reqSerializer) return customSerializer\n return function wrappedReqSerializer (req) {\n return customSerializer(reqSerializers.reqSerializer(req))\n }\n },\n\n wrapResponseSerializer: function wrapResponseSerializer (customSerializer) {\n if (customSerializer === resSerializers.resSerializer) return customSerializer\n return function wrappedResSerializer (res) {\n return customSerializer(resSerializers.resSerializer(res))\n }\n }\n}\n",
13
+ "'use strict'\n\nfunction noOpPrepareStackTrace (_, stack) {\n return stack\n}\n\nmodule.exports = function getCallers () {\n const originalPrepare = Error.prepareStackTrace\n Error.prepareStackTrace = noOpPrepareStackTrace\n const stack = new Error().stack\n Error.prepareStackTrace = originalPrepare\n\n if (!Array.isArray(stack)) {\n return undefined\n }\n\n const entries = stack.slice(2)\n\n const fileNames = []\n\n for (const entry of entries) {\n if (!entry) {\n continue\n }\n\n fileNames.push(entry.getFileName())\n }\n\n return fileNames\n}\n",
14
+ "'use strict'\n\nfunction deepClone (obj) {\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime())\n }\n\n if (obj instanceof Array) {\n const cloned = []\n for (let i = 0; i < obj.length; i++) {\n cloned[i] = deepClone(obj[i])\n }\n return cloned\n }\n\n if (typeof obj === 'object') {\n const cloned = Object.create(Object.getPrototypeOf(obj))\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n cloned[key] = deepClone(obj[key])\n }\n }\n return cloned\n }\n\n return obj\n}\n\nfunction parsePath (path) {\n const parts = []\n let current = ''\n let inBrackets = false\n let inQuotes = false\n let quoteChar = ''\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i]\n\n if (!inBrackets && char === '.') {\n if (current) {\n parts.push(current)\n current = ''\n }\n } else if (char === '[') {\n if (current) {\n parts.push(current)\n current = ''\n }\n inBrackets = true\n } else if (char === ']' && inBrackets) {\n // Always push the current value when closing brackets, even if it's an empty string\n parts.push(current)\n current = ''\n inBrackets = false\n inQuotes = false\n } else if ((char === '\"' || char === \"'\") && inBrackets) {\n if (!inQuotes) {\n inQuotes = true\n quoteChar = char\n } else if (char === quoteChar) {\n inQuotes = false\n quoteChar = ''\n } else {\n current += char\n }\n } else {\n current += char\n }\n }\n\n if (current) {\n parts.push(current)\n }\n\n return parts\n}\n\nfunction setValue (obj, parts, value) {\n let current = obj\n\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current !== 'object' || current === null || !(key in current)) {\n return false // Path doesn't exist, don't create it\n }\n if (typeof current[key] !== 'object' || current[key] === null) {\n return false // Path doesn't exist properly\n }\n current = current[key]\n }\n\n const lastKey = parts[parts.length - 1]\n if (lastKey === '*') {\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n current[i] = value\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n current[key] = value\n }\n }\n }\n } else {\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n current[lastKey] = value\n }\n }\n return true\n}\n\nfunction removeKey (obj, parts) {\n let current = obj\n\n for (let i = 0; i < parts.length - 1; i++) {\n const key = parts[i]\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current !== 'object' || current === null || !(key in current)) {\n return false // Path doesn't exist, don't create it\n }\n if (typeof current[key] !== 'object' || current[key] === null) {\n return false // Path doesn't exist properly\n }\n current = current[key]\n }\n\n const lastKey = parts[parts.length - 1]\n if (lastKey === '*') {\n if (Array.isArray(current)) {\n // For arrays, we can't really \"remove\" all items as that would change indices\n // Instead, we set them to undefined which will be omitted by JSON.stringify\n for (let i = 0; i < current.length; i++) {\n current[i] = undefined\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n delete current[key]\n }\n }\n }\n } else {\n // Type safety: Check if current is an object before using 'in' operator\n if (typeof current === 'object' && current !== null && lastKey in current && Object.prototype.hasOwnProperty.call(current, lastKey)) {\n delete current[lastKey]\n }\n }\n return true\n}\n\n// Sentinel object to distinguish between undefined value and non-existent path\nconst PATH_NOT_FOUND = Symbol('PATH_NOT_FOUND')\n\nfunction getValueIfExists (obj, parts) {\n let current = obj\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return PATH_NOT_FOUND\n }\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) {\n return PATH_NOT_FOUND\n }\n // Check if the property exists before accessing it\n if (!(part in current)) {\n return PATH_NOT_FOUND\n }\n current = current[part]\n }\n\n return current\n}\n\nfunction getValue (obj, parts) {\n let current = obj\n\n for (const part of parts) {\n if (current === null || current === undefined) {\n return undefined\n }\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) {\n return undefined\n }\n current = current[part]\n }\n\n return current\n}\n\nfunction redactPaths (obj, paths, censor, remove = false) {\n for (const path of paths) {\n const parts = parsePath(path)\n\n if (parts.includes('*')) {\n redactWildcardPath(obj, parts, censor, path, remove)\n } else {\n if (remove) {\n removeKey(obj, parts)\n } else {\n // Get value only if path exists - single traversal\n const value = getValueIfExists(obj, parts)\n if (value === PATH_NOT_FOUND) {\n continue\n }\n\n const actualCensor = typeof censor === 'function'\n ? censor(value, parts)\n : censor\n setValue(obj, parts, actualCensor)\n }\n }\n }\n}\n\nfunction redactWildcardPath (obj, parts, censor, originalPath, remove = false) {\n const wildcardIndex = parts.indexOf('*')\n\n if (wildcardIndex === parts.length - 1) {\n const parentParts = parts.slice(0, -1)\n let current = obj\n\n for (const part of parentParts) {\n if (current === null || current === undefined) return\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) return\n current = current[part]\n }\n\n if (Array.isArray(current)) {\n if (remove) {\n // For arrays, set all items to undefined which will be omitted by JSON.stringify\n for (let i = 0; i < current.length; i++) {\n current[i] = undefined\n }\n } else {\n for (let i = 0; i < current.length; i++) {\n const indexPath = [...parentParts, i.toString()]\n const actualCensor = typeof censor === 'function'\n ? censor(current[i], indexPath)\n : censor\n current[i] = actualCensor\n }\n }\n } else if (typeof current === 'object' && current !== null) {\n if (remove) {\n // Collect keys to delete to avoid issues with deleting during iteration\n const keysToDelete = []\n for (const key in current) {\n if (Object.prototype.hasOwnProperty.call(current, key)) {\n keysToDelete.push(key)\n }\n }\n for (const key of keysToDelete) {\n delete current[key]\n }\n } else {\n for (const key in current) {\n const keyPath = [...parentParts, key]\n const actualCensor = typeof censor === 'function'\n ? censor(current[key], keyPath)\n : censor\n current[key] = actualCensor\n }\n }\n }\n } else {\n redactIntermediateWildcard(obj, parts, censor, wildcardIndex, originalPath, remove)\n }\n}\n\nfunction redactIntermediateWildcard (obj, parts, censor, wildcardIndex, originalPath, remove = false) {\n const beforeWildcard = parts.slice(0, wildcardIndex)\n const afterWildcard = parts.slice(wildcardIndex + 1)\n const pathArray = [] // Cached array to avoid allocations\n\n function traverse (current, pathLength) {\n if (pathLength === beforeWildcard.length) {\n if (Array.isArray(current)) {\n for (let i = 0; i < current.length; i++) {\n pathArray[pathLength] = i.toString()\n traverse(current[i], pathLength + 1)\n }\n } else if (typeof current === 'object' && current !== null) {\n for (const key in current) {\n pathArray[pathLength] = key\n traverse(current[key], pathLength + 1)\n }\n }\n } else if (pathLength < beforeWildcard.length) {\n const nextKey = beforeWildcard[pathLength]\n // Type safety: Check if current is an object before using 'in' operator\n if (current && typeof current === 'object' && current !== null && nextKey in current) {\n pathArray[pathLength] = nextKey\n traverse(current[nextKey], pathLength + 1)\n }\n } else {\n // Check if afterWildcard contains more wildcards\n if (afterWildcard.includes('*')) {\n // Recursively handle remaining wildcards\n // Wrap censor to prepend current path context\n const wrappedCensor = typeof censor === 'function'\n ? (value, path) => {\n const fullPath = [...pathArray.slice(0, pathLength), ...path]\n return censor(value, fullPath)\n }\n : censor\n redactWildcardPath(current, afterWildcard, wrappedCensor, originalPath, remove)\n } else {\n // No more wildcards, apply the redaction directly\n if (remove) {\n removeKey(current, afterWildcard)\n } else {\n const actualCensor = typeof censor === 'function'\n ? censor(getValue(current, afterWildcard), [...pathArray.slice(0, pathLength), ...afterWildcard])\n : censor\n setValue(current, afterWildcard, actualCensor)\n }\n }\n }\n }\n\n if (beforeWildcard.length === 0) {\n traverse(obj, 0)\n } else {\n let current = obj\n for (let i = 0; i < beforeWildcard.length; i++) {\n const part = beforeWildcard[i]\n if (current === null || current === undefined) return\n // Type safety: Check if current is an object before property access\n if (typeof current !== 'object' || current === null) return\n current = current[part]\n pathArray[i] = part\n }\n if (current !== null && current !== undefined) {\n traverse(current, beforeWildcard.length)\n }\n }\n}\n\nfunction buildPathStructure (pathsToClone) {\n if (pathsToClone.length === 0) {\n return null // No paths to redact\n }\n\n // Parse all paths and organize by depth\n const pathStructure = new Map()\n for (const path of pathsToClone) {\n const parts = parsePath(path)\n let current = pathStructure\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]\n if (!current.has(part)) {\n current.set(part, new Map())\n }\n current = current.get(part)\n }\n }\n return pathStructure\n}\n\nfunction selectiveClone (obj, pathStructure) {\n if (!pathStructure) {\n return obj // No paths to redact, return original\n }\n\n function cloneSelectively (source, pathMap, depth = 0) {\n if (!pathMap || pathMap.size === 0) {\n return source // No more paths to clone, return reference\n }\n\n if (source === null || typeof source !== 'object') {\n return source\n }\n\n if (source instanceof Date) {\n return new Date(source.getTime())\n }\n\n if (Array.isArray(source)) {\n const cloned = []\n for (let i = 0; i < source.length; i++) {\n const indexStr = i.toString()\n if (pathMap.has(indexStr) || pathMap.has('*')) {\n cloned[i] = cloneSelectively(source[i], pathMap.get(indexStr) || pathMap.get('*'))\n } else {\n cloned[i] = source[i] // Share reference for non-redacted items\n }\n }\n return cloned\n }\n\n // Handle objects\n const cloned = Object.create(Object.getPrototypeOf(source))\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (pathMap.has(key) || pathMap.has('*')) {\n cloned[key] = cloneSelectively(source[key], pathMap.get(key) || pathMap.get('*'))\n } else {\n cloned[key] = source[key] // Share reference for non-redacted properties\n }\n }\n }\n return cloned\n }\n\n return cloneSelectively(obj, pathStructure)\n}\n\nfunction validatePath (path) {\n if (typeof path !== 'string') {\n throw new Error('Paths must be (non-empty) strings')\n }\n\n if (path === '') {\n throw new Error('Invalid redaction path ()')\n }\n\n // Check for double dots\n if (path.includes('..')) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n\n // Check for comma-separated paths (invalid syntax)\n if (path.includes(',')) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n\n // Check for unmatched brackets\n let bracketCount = 0\n let inQuotes = false\n let quoteChar = ''\n\n for (let i = 0; i < path.length; i++) {\n const char = path[i]\n\n if ((char === '\"' || char === \"'\") && bracketCount > 0) {\n if (!inQuotes) {\n inQuotes = true\n quoteChar = char\n } else if (char === quoteChar) {\n inQuotes = false\n quoteChar = ''\n }\n } else if (char === '[' && !inQuotes) {\n bracketCount++\n } else if (char === ']' && !inQuotes) {\n bracketCount--\n if (bracketCount < 0) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n }\n }\n\n if (bracketCount !== 0) {\n throw new Error(`Invalid redaction path (${path})`)\n }\n}\n\nfunction validatePaths (paths) {\n if (!Array.isArray(paths)) {\n throw new TypeError('paths must be an array')\n }\n\n for (const path of paths) {\n validatePath(path)\n }\n}\n\nfunction slowRedact (options = {}) {\n const {\n paths = [],\n censor = '[REDACTED]',\n serialize = JSON.stringify,\n strict = true,\n remove = false\n } = options\n\n // Validate paths upfront to match fast-redact behavior\n validatePaths(paths)\n\n // Build path structure once during setup, not on every call\n const pathStructure = buildPathStructure(paths)\n\n return function redact (obj) {\n if (strict && (obj === null || typeof obj !== 'object')) {\n if (obj === null || obj === undefined) {\n return serialize ? serialize(obj) : obj\n }\n if (typeof obj !== 'object') {\n return serialize ? serialize(obj) : obj\n }\n }\n\n // Only clone paths that need redaction\n const cloned = selectiveClone(obj, pathStructure)\n const original = obj // Keep reference to original for restore\n\n let actualCensor = censor\n if (typeof censor === 'function') {\n actualCensor = censor\n }\n\n redactPaths(cloned, paths, actualCensor, remove)\n\n if (serialize === false) {\n cloned.restore = function () {\n return deepClone(original) // Full clone only when restore is called\n }\n return cloned\n }\n\n if (typeof serialize === 'function') {\n return serialize(cloned)\n }\n\n return JSON.stringify(cloned)\n }\n}\n\nmodule.exports = slowRedact\n",
15
+ "'use strict'\n\nconst setLevelSym = Symbol('pino.setLevel')\nconst getLevelSym = Symbol('pino.getLevel')\nconst levelValSym = Symbol('pino.levelVal')\nconst levelCompSym = Symbol('pino.levelComp')\nconst useLevelLabelsSym = Symbol('pino.useLevelLabels')\nconst useOnlyCustomLevelsSym = Symbol('pino.useOnlyCustomLevels')\nconst mixinSym = Symbol('pino.mixin')\n\nconst lsCacheSym = Symbol('pino.lsCache')\nconst chindingsSym = Symbol('pino.chindings')\n\nconst asJsonSym = Symbol('pino.asJson')\nconst writeSym = Symbol('pino.write')\nconst redactFmtSym = Symbol('pino.redactFmt')\n\nconst timeSym = Symbol('pino.time')\nconst timeSliceIndexSym = Symbol('pino.timeSliceIndex')\nconst streamSym = Symbol('pino.stream')\nconst stringifySym = Symbol('pino.stringify')\nconst stringifySafeSym = Symbol('pino.stringifySafe')\nconst stringifiersSym = Symbol('pino.stringifiers')\nconst endSym = Symbol('pino.end')\nconst formatOptsSym = Symbol('pino.formatOpts')\nconst messageKeySym = Symbol('pino.messageKey')\nconst errorKeySym = Symbol('pino.errorKey')\nconst nestedKeySym = Symbol('pino.nestedKey')\nconst nestedKeyStrSym = Symbol('pino.nestedKeyStr')\nconst mixinMergeStrategySym = Symbol('pino.mixinMergeStrategy')\nconst msgPrefixSym = Symbol('pino.msgPrefix')\n\nconst wildcardFirstSym = Symbol('pino.wildcardFirst')\n\n// public symbols, no need to use the same pino\n// version for these\nconst serializersSym = Symbol.for('pino.serializers')\nconst formattersSym = Symbol.for('pino.formatters')\nconst hooksSym = Symbol.for('pino.hooks')\nconst needsMetadataGsym = Symbol.for('pino.metadata')\n\nmodule.exports = {\n setLevelSym,\n getLevelSym,\n levelValSym,\n levelCompSym,\n useLevelLabelsSym,\n mixinSym,\n lsCacheSym,\n chindingsSym,\n asJsonSym,\n writeSym,\n serializersSym,\n redactFmtSym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n stringifySym,\n stringifySafeSym,\n stringifiersSym,\n endSym,\n formatOptsSym,\n messageKeySym,\n errorKeySym,\n nestedKeySym,\n wildcardFirstSym,\n needsMetadataGsym,\n useOnlyCustomLevelsSym,\n formattersSym,\n hooksSym,\n nestedKeyStrSym,\n mixinMergeStrategySym,\n msgPrefixSym\n}\n",
16
+ "'use strict'\n\nconst Redact = require('@pinojs/redact')\nconst { redactFmtSym, wildcardFirstSym } = require('./symbols')\n\n// Custom rx regex equivalent to fast-redact's rx\nconst rx = /[^.[\\]]+|\\[([^[\\]]*?)\\]/g\n\nconst CENSOR = '[Redacted]'\nconst strict = false // TODO should this be configurable?\n\nfunction redaction (opts, serialize) {\n const { paths, censor, remove } = handle(opts)\n\n const shape = paths.reduce((o, str) => {\n rx.lastIndex = 0\n const first = rx.exec(str)\n const next = rx.exec(str)\n\n // ns is the top-level path segment, brackets + quoting removed.\n let ns = first[1] !== undefined\n ? first[1].replace(/^(?:\"|'|`)(.*)(?:\"|'|`)$/, '$1')\n : first[0]\n\n if (ns === '*') {\n ns = wildcardFirstSym\n }\n\n // top level key:\n if (next === null) {\n o[ns] = null\n return o\n }\n\n // path with at least two segments:\n // if ns is already redacted at the top level, ignore lower level redactions\n if (o[ns] === null) {\n return o\n }\n\n const { index } = next\n const nextPath = `${str.substr(index, str.length - 1)}`\n\n o[ns] = o[ns] || []\n\n // shape is a mix of paths beginning with literal values and wildcard\n // paths [ \"a.b.c\", \"*.b.z\" ] should reduce to a shape of\n // { \"a\": [ \"b.c\", \"b.z\" ], *: [ \"b.z\" ] }\n // note: \"b.z\" is in both \"a\" and * arrays because \"a\" matches the wildcard.\n // (* entry has wildcardFirstSym as key)\n if (ns !== wildcardFirstSym && o[ns].length === 0) {\n // first time ns's get all '*' redactions so far\n o[ns].push(...(o[wildcardFirstSym] || []))\n }\n\n if (ns === wildcardFirstSym) {\n // new * path gets added to all previously registered literal ns's.\n Object.keys(o).forEach(function (k) {\n if (o[k]) {\n o[k].push(nextPath)\n }\n })\n }\n\n o[ns].push(nextPath)\n return o\n }, {})\n\n // the redactor assigned to the format symbol key\n // provides top level redaction for instances where\n // an object is interpolated into the msg string\n const result = {\n [redactFmtSym]: Redact({ paths, censor, serialize, strict, remove })\n }\n\n const topCensor = (...args) => {\n return typeof censor === 'function' ? serialize(censor(...args)) : serialize(censor)\n }\n\n return [...Object.keys(shape), ...Object.getOwnPropertySymbols(shape)].reduce((o, k) => {\n // top level key:\n if (shape[k] === null) {\n o[k] = (value) => topCensor(value, [k])\n } else {\n const wrappedCensor = typeof censor === 'function'\n ? (value, path) => {\n return censor(value, [k, ...path])\n }\n : censor\n o[k] = Redact({\n paths: shape[k],\n censor: wrappedCensor,\n serialize,\n strict,\n remove\n })\n }\n return o\n }, result)\n}\n\nfunction handle (opts) {\n if (Array.isArray(opts)) {\n opts = { paths: opts, censor: CENSOR }\n return opts\n }\n let { paths, censor = CENSOR, remove } = opts\n if (Array.isArray(paths) === false) { throw Error('pino – redact must contain an array of strings') }\n if (remove === true) censor = undefined\n\n return { paths, censor, remove }\n}\n\nmodule.exports = redaction\n",
17
+ "'use strict'\n\nconst nullTime = () => ''\n\nconst epochTime = () => `,\"time\":${Date.now()}`\n\nconst unixTime = () => `,\"time\":${Math.round(Date.now() / 1000.0)}`\n\nconst isoTime = () => `,\"time\":\"${new Date(Date.now()).toISOString()}\"` // using Date.now() for testability\n\nconst NS_PER_MS = 1_000_000n\nconst NS_PER_SEC = 1_000_000_000n\n\nconst startWallTimeNs = BigInt(Date.now()) * NS_PER_MS\nconst startHrTime = process.hrtime.bigint()\n\nconst isoTimeNano = () => {\n const elapsedNs = process.hrtime.bigint() - startHrTime\n const currentTimeNs = startWallTimeNs + elapsedNs\n\n const secondsSinceEpoch = currentTimeNs / NS_PER_SEC\n const nanosWithinSecond = currentTimeNs % NS_PER_SEC\n\n const msSinceEpoch = Number(secondsSinceEpoch * 1000n + nanosWithinSecond / 1_000_000n)\n const date = new Date(msSinceEpoch)\n\n const year = date.getUTCFullYear()\n const month = (date.getUTCMonth() + 1).toString().padStart(2, '0')\n const day = date.getUTCDate().toString().padStart(2, '0')\n const hours = date.getUTCHours().toString().padStart(2, '0')\n const minutes = date.getUTCMinutes().toString().padStart(2, '0')\n const seconds = date.getUTCSeconds().toString().padStart(2, '0')\n\n return `,\"time\":\"${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${nanosWithinSecond\n .toString()\n .padStart(9, '0')}Z\"`\n}\n\nmodule.exports = { nullTime, epochTime, unixTime, isoTime, isoTimeNano }\n",
18
+ "'use strict'\nfunction tryStringify (o) {\n try { return JSON.stringify(o) } catch(e) { return '\"[Circular]\"' }\n}\n\nmodule.exports = format\n\nfunction format(f, args, opts) {\n var ss = (opts && opts.stringify) || tryStringify\n var offset = 1\n if (typeof f === 'object' && f !== null) {\n var len = args.length + offset\n if (len === 1) return f\n var objects = new Array(len)\n objects[0] = ss(f)\n for (var index = 1; index < len; index++) {\n objects[index] = ss(args[index])\n }\n return objects.join(' ')\n }\n if (typeof f !== 'string') {\n return f\n }\n var argLen = args.length\n if (argLen === 0) return f\n var str = ''\n var a = 1 - offset\n var lastPos = -1\n var flen = (f && f.length) || 0\n for (var i = 0; i < flen;) {\n if (f.charCodeAt(i) === 37 && i + 1 < flen) {\n lastPos = lastPos > -1 ? lastPos : 0\n switch (f.charCodeAt(i + 1)) {\n case 100: // 'd'\n case 102: // 'f'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Number(args[a])\n lastPos = i + 2\n i++\n break\n case 105: // 'i'\n if (a >= argLen)\n break\n if (args[a] == null) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += Math.floor(Number(args[a]))\n lastPos = i + 2\n i++\n break\n case 79: // 'O'\n case 111: // 'o'\n case 106: // 'j'\n if (a >= argLen)\n break\n if (args[a] === undefined) break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n var type = typeof args[a]\n if (type === 'string') {\n str += '\\'' + args[a] + '\\''\n lastPos = i + 2\n i++\n break\n }\n if (type === 'function') {\n str += args[a].name || '<anonymous>'\n lastPos = i + 2\n i++\n break\n }\n str += ss(args[a])\n lastPos = i + 2\n i++\n break\n case 115: // 's'\n if (a >= argLen)\n break\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += String(args[a])\n lastPos = i + 2\n i++\n break\n case 37: // '%'\n if (lastPos < i)\n str += f.slice(lastPos, i)\n str += '%'\n lastPos = i + 2\n i++\n a--\n break\n }\n ++a\n }\n ++i\n }\n if (lastPos === -1)\n return f\n else if (lastPos < flen) {\n str += f.slice(lastPos)\n }\n\n return str\n}\n",
19
+ "'use strict'\n\n/* global SharedArrayBuffer, Atomics */\n\nif (typeof SharedArrayBuffer !== 'undefined' && typeof Atomics !== 'undefined') {\n const nil = new Int32Array(new SharedArrayBuffer(4))\n\n function sleep (ms) {\n // also filters out NaN, non-number types, including empty strings, but allows bigints\n const valid = ms > 0 && ms < Infinity \n if (valid === false) {\n if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n throw TypeError('sleep: ms must be a number')\n }\n throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n }\n\n Atomics.wait(nil, 0, 0, Number(ms))\n }\n module.exports = sleep\n} else {\n\n function sleep (ms) {\n // also filters out NaN, non-number types, including empty strings, but allows bigints\n const valid = ms > 0 && ms < Infinity \n if (valid === false) {\n if (typeof ms !== 'number' && typeof ms !== 'bigint') {\n throw TypeError('sleep: ms must be a number')\n }\n throw RangeError('sleep: ms must be a number that is greater than 0 but less than Infinity')\n }\n const target = Date.now() + Number(ms)\n while (target > Date.now()){}\n }\n\n module.exports = sleep\n\n}\n",
20
+ "'use strict'\n\nconst fs = require('fs')\nconst EventEmitter = require('events')\nconst inherits = require('util').inherits\nconst path = require('path')\nconst sleep = require('atomic-sleep')\nconst assert = require('assert')\n\nconst BUSY_WRITE_TIMEOUT = 100\nconst kEmptyBuffer = Buffer.allocUnsafe(0)\n\n// 16 KB. Don't write more than docker buffer size.\n// https://github.com/moby/moby/blob/513ec73831269947d38a644c278ce3cac36783b2/daemon/logger/copier.go#L13\nconst MAX_WRITE = 16 * 1024\n\nconst kContentModeBuffer = 'buffer'\nconst kContentModeUtf8 = 'utf8'\n\nconst [major, minor] = (process.versions.node || '0.0').split('.').map(Number)\nconst kCopyBuffer = major >= 22 && minor >= 7\n\nfunction openFile (file, sonic) {\n sonic._opening = true\n sonic._writing = true\n sonic._asyncDrainScheduled = false\n\n // NOTE: 'error' and 'ready' events emitted below only relevant when sonic.sync===false\n // for sync mode, there is no way to add a listener that will receive these\n\n function fileOpened (err, fd) {\n if (err) {\n sonic._reopening = false\n sonic._writing = false\n sonic._opening = false\n\n if (sonic.sync) {\n process.nextTick(() => {\n if (sonic.listenerCount('error') > 0) {\n sonic.emit('error', err)\n }\n })\n } else {\n sonic.emit('error', err)\n }\n return\n }\n\n const reopening = sonic._reopening\n\n sonic.fd = fd\n sonic.file = file\n sonic._reopening = false\n sonic._opening = false\n sonic._writing = false\n\n if (sonic.sync) {\n process.nextTick(() => sonic.emit('ready'))\n } else {\n sonic.emit('ready')\n }\n\n if (sonic.destroyed) {\n return\n }\n\n // start\n if ((!sonic._writing && sonic._len > sonic.minLength) || sonic._flushPending) {\n sonic._actualWrite()\n } else if (reopening) {\n process.nextTick(() => sonic.emit('drain'))\n }\n }\n\n const flags = sonic.append ? 'a' : 'w'\n const mode = sonic.mode\n\n if (sonic.sync) {\n try {\n if (sonic.mkdir) fs.mkdirSync(path.dirname(file), { recursive: true })\n const fd = fs.openSync(file, flags, mode)\n fileOpened(null, fd)\n } catch (err) {\n fileOpened(err)\n throw err\n }\n } else if (sonic.mkdir) {\n fs.mkdir(path.dirname(file), { recursive: true }, (err) => {\n if (err) return fileOpened(err)\n fs.open(file, flags, mode, fileOpened)\n })\n } else {\n fs.open(file, flags, mode, fileOpened)\n }\n}\n\nfunction SonicBoom (opts) {\n if (!(this instanceof SonicBoom)) {\n return new SonicBoom(opts)\n }\n\n let { fd, dest, minLength, maxLength, maxWrite, periodicFlush, sync, append = true, mkdir, retryEAGAIN, fsync, contentMode, mode } = opts || {}\n\n fd = fd || dest\n\n this._len = 0\n this.fd = -1\n this._bufs = []\n this._lens = []\n this._writing = false\n this._ending = false\n this._reopening = false\n this._asyncDrainScheduled = false\n this._flushPending = false\n this._hwm = Math.max(minLength || 0, 16387)\n this.file = null\n this.destroyed = false\n this.minLength = minLength || 0\n this.maxLength = maxLength || 0\n this.maxWrite = maxWrite || MAX_WRITE\n this._periodicFlush = periodicFlush || 0\n this._periodicFlushTimer = undefined\n this.sync = sync || false\n this.writable = true\n this._fsync = fsync || false\n this.append = append || false\n this.mode = mode\n this.retryEAGAIN = retryEAGAIN || (() => true)\n this.mkdir = mkdir || false\n\n let fsWriteSync\n let fsWrite\n if (contentMode === kContentModeBuffer) {\n this._writingBuf = kEmptyBuffer\n this.write = writeBuffer\n this.flush = flushBuffer\n this.flushSync = flushBufferSync\n this._actualWrite = actualWriteBuffer\n fsWriteSync = () => fs.writeSync(this.fd, this._writingBuf)\n fsWrite = () => fs.write(this.fd, this._writingBuf, this.release)\n } else if (contentMode === undefined || contentMode === kContentModeUtf8) {\n this._writingBuf = ''\n this.write = write\n this.flush = flush\n this.flushSync = flushSync\n this._actualWrite = actualWrite\n fsWriteSync = () => fs.writeSync(this.fd, this._writingBuf, 'utf8')\n fsWrite = () => fs.write(this.fd, this._writingBuf, 'utf8', this.release)\n } else {\n throw new Error(`SonicBoom supports \"${kContentModeUtf8}\" and \"${kContentModeBuffer}\", but passed ${contentMode}`)\n }\n\n if (typeof fd === 'number') {\n this.fd = fd\n process.nextTick(() => this.emit('ready'))\n } else if (typeof fd === 'string') {\n openFile(fd, this)\n } else {\n throw new Error('SonicBoom supports only file descriptors and files')\n }\n if (this.minLength >= this.maxWrite) {\n throw new Error(`minLength should be smaller than maxWrite (${this.maxWrite})`)\n }\n\n this.release = (err, n) => {\n if (err) {\n if ((err.code === 'EAGAIN' || err.code === 'EBUSY') && this.retryEAGAIN(err, this._writingBuf.length, this._len - this._writingBuf.length)) {\n if (this.sync) {\n // This error code should not happen in sync mode, because it is\n // not using the underlining operating system asynchronous functions.\n // However it happens, and so we handle it.\n // Ref: https://github.com/pinojs/pino/issues/783\n try {\n sleep(BUSY_WRITE_TIMEOUT)\n this.release(undefined, 0)\n } catch (err) {\n this.release(err)\n }\n } else {\n // Let's give the destination some time to process the chunk.\n setTimeout(fsWrite, BUSY_WRITE_TIMEOUT)\n }\n } else {\n this._writing = false\n\n this.emit('error', err)\n }\n return\n }\n\n this.emit('write', n)\n const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n this._len = releasedBufObj.len\n this._writingBuf = releasedBufObj.writingBuf\n\n if (this._writingBuf.length) {\n if (!this.sync) {\n fsWrite()\n return\n }\n\n try {\n do {\n const n = fsWriteSync()\n const releasedBufObj = releaseWritingBuf(this._writingBuf, this._len, n)\n this._len = releasedBufObj.len\n this._writingBuf = releasedBufObj.writingBuf\n } while (this._writingBuf.length)\n } catch (err) {\n this.release(err)\n return\n }\n }\n\n if (this._fsync) {\n fs.fsyncSync(this.fd)\n }\n\n const len = this._len\n if (this._reopening) {\n this._writing = false\n this._reopening = false\n this.reopen()\n } else if (len > this.minLength) {\n this._actualWrite()\n } else if (this._ending) {\n if (len > 0) {\n this._actualWrite()\n } else {\n this._writing = false\n actualClose(this)\n }\n } else {\n this._writing = false\n if (this.sync) {\n if (!this._asyncDrainScheduled) {\n this._asyncDrainScheduled = true\n process.nextTick(emitDrain, this)\n }\n } else {\n this.emit('drain')\n }\n }\n }\n\n this.on('newListener', function (name) {\n if (name === 'drain') {\n this._asyncDrainScheduled = false\n }\n })\n\n if (this._periodicFlush !== 0) {\n this._periodicFlushTimer = setInterval(() => this.flush(null), this._periodicFlush)\n this._periodicFlushTimer.unref()\n }\n}\n\n/**\n * Release the writingBuf after fs.write n bytes data\n * @param {string | Buffer} writingBuf - currently writing buffer, usually be instance._writingBuf.\n * @param {number} len - currently buffer length, usually be instance._len.\n * @param {number} n - number of bytes fs already written\n * @returns {{writingBuf: string | Buffer, len: number}} released writingBuf and length\n */\nfunction releaseWritingBuf (writingBuf, len, n) {\n // if Buffer.byteLength is equal to n, that means writingBuf contains no multi-byte character\n if (typeof writingBuf === 'string' && Buffer.byteLength(writingBuf) !== n) {\n // Since the fs.write callback parameter `n` means how many bytes the passed of string\n // We calculate the original string length for avoiding the multi-byte character issue\n n = Buffer.from(writingBuf).subarray(0, n).toString().length\n }\n len = Math.max(len - n, 0)\n writingBuf = writingBuf.slice(n)\n return { writingBuf, len }\n}\n\nfunction emitDrain (sonic) {\n const hasListeners = sonic.listenerCount('drain') > 0\n if (!hasListeners) return\n sonic._asyncDrainScheduled = false\n sonic.emit('drain')\n}\n\ninherits(SonicBoom, EventEmitter)\n\nfunction mergeBuf (bufs, len) {\n if (bufs.length === 0) {\n return kEmptyBuffer\n }\n\n if (bufs.length === 1) {\n return bufs[0]\n }\n\n return Buffer.concat(bufs, len)\n}\n\nfunction write (data) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n const len = this._len + data.length\n const bufs = this._bufs\n\n if (this.maxLength && len > this.maxLength) {\n this.emit('drop', data)\n return this._len < this._hwm\n }\n\n if (\n bufs.length === 0 ||\n bufs[bufs.length - 1].length + data.length > this.maxWrite\n ) {\n bufs.push('' + data)\n } else {\n bufs[bufs.length - 1] += data\n }\n\n this._len = len\n\n if (!this._writing && this._len >= this.minLength) {\n this._actualWrite()\n }\n\n return this._len < this._hwm\n}\n\nfunction writeBuffer (data) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n const len = this._len + data.length\n const bufs = this._bufs\n const lens = this._lens\n\n if (this.maxLength && len > this.maxLength) {\n this.emit('drop', data)\n return this._len < this._hwm\n }\n\n if (\n bufs.length === 0 ||\n lens[lens.length - 1] + data.length > this.maxWrite\n ) {\n bufs.push([data])\n lens.push(data.length)\n } else {\n bufs[bufs.length - 1].push(data)\n lens[lens.length - 1] += data.length\n }\n\n this._len = len\n\n if (!this._writing && this._len >= this.minLength) {\n this._actualWrite()\n }\n\n return this._len < this._hwm\n}\n\nfunction callFlushCallbackOnDrain (cb) {\n this._flushPending = true\n const onDrain = () => {\n // only if _fsync is false to avoid double fsync\n if (!this._fsync) {\n try {\n fs.fsync(this.fd, (err) => {\n this._flushPending = false\n cb(err)\n })\n } catch (err) {\n cb(err)\n }\n } else {\n this._flushPending = false\n cb()\n }\n this.off('error', onError)\n }\n const onError = (err) => {\n this._flushPending = false\n cb(err)\n this.off('drain', onDrain)\n }\n\n this.once('drain', onDrain)\n this.once('error', onError)\n}\n\nfunction flush (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw new Error('flush cb must be a function')\n }\n\n if (this.destroyed) {\n const error = new Error('SonicBoom destroyed')\n if (cb) {\n cb(error)\n return\n }\n\n throw error\n }\n\n if (this.minLength <= 0) {\n cb?.()\n return\n }\n\n if (cb) {\n callFlushCallbackOnDrain.call(this, cb)\n }\n\n if (this._writing) {\n return\n }\n\n if (this._bufs.length === 0) {\n this._bufs.push('')\n }\n\n this._actualWrite()\n}\n\nfunction flushBuffer (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw new Error('flush cb must be a function')\n }\n\n if (this.destroyed) {\n const error = new Error('SonicBoom destroyed')\n if (cb) {\n cb(error)\n return\n }\n\n throw error\n }\n\n if (this.minLength <= 0) {\n cb?.()\n return\n }\n\n if (cb) {\n callFlushCallbackOnDrain.call(this, cb)\n }\n\n if (this._writing) {\n return\n }\n\n if (this._bufs.length === 0) {\n this._bufs.push([])\n this._lens.push(0)\n }\n\n this._actualWrite()\n}\n\nSonicBoom.prototype.reopen = function (file) {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this._opening) {\n this.once('ready', () => {\n this.reopen(file)\n })\n return\n }\n\n if (this._ending) {\n return\n }\n\n if (!this.file) {\n throw new Error('Unable to reopen a file descriptor, you must pass a file to SonicBoom')\n }\n\n if (file) {\n this.file = file\n }\n this._reopening = true\n\n if (this._writing) {\n return\n }\n\n const fd = this.fd\n this.once('ready', () => {\n if (fd !== this.fd) {\n fs.close(fd, (err) => {\n if (err) {\n return this.emit('error', err)\n }\n })\n }\n })\n\n openFile(this.file, this)\n}\n\nSonicBoom.prototype.end = function () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this._opening) {\n this.once('ready', () => {\n this.end()\n })\n return\n }\n\n if (this._ending) {\n return\n }\n\n this._ending = true\n\n if (this._writing) {\n return\n }\n\n if (this._len > 0 && this.fd >= 0) {\n this._actualWrite()\n } else {\n actualClose(this)\n }\n}\n\nfunction flushSync () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this.fd < 0) {\n throw new Error('sonic boom is not ready yet')\n }\n\n if (!this._writing && this._writingBuf.length > 0) {\n this._bufs.unshift(this._writingBuf)\n this._writingBuf = ''\n }\n\n let buf = ''\n while (this._bufs.length || buf) {\n if (buf.length <= 0) {\n buf = this._bufs[0]\n }\n try {\n const n = fs.writeSync(this.fd, buf, 'utf8')\n const releasedBufObj = releaseWritingBuf(buf, this._len, n)\n buf = releasedBufObj.writingBuf\n this._len = releasedBufObj.len\n if (buf.length <= 0) {\n this._bufs.shift()\n }\n } catch (err) {\n const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n throw err\n }\n\n sleep(BUSY_WRITE_TIMEOUT)\n }\n }\n\n try {\n fs.fsyncSync(this.fd)\n } catch {\n // Skip the error. The fd might not support fsync.\n }\n}\n\nfunction flushBufferSync () {\n if (this.destroyed) {\n throw new Error('SonicBoom destroyed')\n }\n\n if (this.fd < 0) {\n throw new Error('sonic boom is not ready yet')\n }\n\n if (!this._writing && this._writingBuf.length > 0) {\n this._bufs.unshift([this._writingBuf])\n this._writingBuf = kEmptyBuffer\n }\n\n let buf = kEmptyBuffer\n while (this._bufs.length || buf.length) {\n if (buf.length <= 0) {\n buf = mergeBuf(this._bufs[0], this._lens[0])\n }\n try {\n const n = fs.writeSync(this.fd, buf)\n buf = buf.subarray(n)\n this._len = Math.max(this._len - n, 0)\n if (buf.length <= 0) {\n this._bufs.shift()\n this._lens.shift()\n }\n } catch (err) {\n const shouldRetry = err.code === 'EAGAIN' || err.code === 'EBUSY'\n if (shouldRetry && !this.retryEAGAIN(err, buf.length, this._len - buf.length)) {\n throw err\n }\n\n sleep(BUSY_WRITE_TIMEOUT)\n }\n }\n}\n\nSonicBoom.prototype.destroy = function () {\n if (this.destroyed) {\n return\n }\n actualClose(this)\n}\n\nfunction actualWrite () {\n const release = this.release\n this._writing = true\n this._writingBuf = this._writingBuf || this._bufs.shift() || ''\n\n if (this.sync) {\n try {\n const written = fs.writeSync(this.fd, this._writingBuf, 'utf8')\n release(null, written)\n } catch (err) {\n release(err)\n }\n } else {\n fs.write(this.fd, this._writingBuf, 'utf8', release)\n }\n}\n\nfunction actualWriteBuffer () {\n const release = this.release\n this._writing = true\n this._writingBuf = this._writingBuf.length ? this._writingBuf : mergeBuf(this._bufs.shift(), this._lens.shift())\n\n if (this.sync) {\n try {\n const written = fs.writeSync(this.fd, this._writingBuf)\n release(null, written)\n } catch (err) {\n release(err)\n }\n } else {\n // fs.write will need to copy string to buffer anyway so\n // we do it here to avoid the overhead of calculating the buffer size\n // in releaseWritingBuf.\n if (kCopyBuffer) {\n this._writingBuf = Buffer.from(this._writingBuf)\n }\n fs.write(this.fd, this._writingBuf, release)\n }\n}\n\nfunction actualClose (sonic) {\n if (sonic.fd === -1) {\n sonic.once('ready', actualClose.bind(null, sonic))\n return\n }\n\n if (sonic._periodicFlushTimer !== undefined) {\n clearInterval(sonic._periodicFlushTimer)\n }\n\n sonic.destroyed = true\n sonic._bufs = []\n sonic._lens = []\n\n assert(typeof sonic.fd === 'number', `sonic.fd must be a number, got ${typeof sonic.fd}`)\n try {\n fs.fsync(sonic.fd, closeWrapped)\n } catch {\n }\n\n function closeWrapped () {\n // We skip errors in fsync\n\n if (sonic.fd !== 1 && sonic.fd !== 2) {\n fs.close(sonic.fd, done)\n } else {\n done()\n }\n }\n\n function done (err) {\n if (err) {\n sonic.emit('error', err)\n return\n }\n\n if (sonic._ending && !sonic._writing) {\n sonic.emit('finish')\n }\n sonic.emit('close')\n }\n}\n\n/**\n * These export configurations enable JS and TS developers\n * to consumer SonicBoom in whatever way best suits their needs.\n * Some examples of supported import syntax includes:\n * - `const SonicBoom = require('SonicBoom')`\n * - `const { SonicBoom } = require('SonicBoom')`\n * - `import * as SonicBoom from 'SonicBoom'`\n * - `import { SonicBoom } from 'SonicBoom'`\n * - `import SonicBoom from 'SonicBoom'`\n */\nSonicBoom.SonicBoom = SonicBoom\nSonicBoom.default = SonicBoom\nmodule.exports = SonicBoom\n",
21
+ "'use strict'\n\nconst refs = {\n exit: [],\n beforeExit: []\n}\nconst functions = {\n exit: onExit,\n beforeExit: onBeforeExit\n}\n\nlet registry\n\nfunction ensureRegistry () {\n if (registry === undefined) {\n registry = new FinalizationRegistry(clear)\n }\n}\n\nfunction install (event) {\n if (refs[event].length > 0) {\n return\n }\n\n process.on(event, functions[event])\n}\n\nfunction uninstall (event) {\n if (refs[event].length > 0) {\n return\n }\n process.removeListener(event, functions[event])\n if (refs.exit.length === 0 && refs.beforeExit.length === 0) {\n registry = undefined\n }\n}\n\nfunction onExit () {\n callRefs('exit')\n}\n\nfunction onBeforeExit () {\n callRefs('beforeExit')\n}\n\nfunction callRefs (event) {\n for (const ref of refs[event]) {\n const obj = ref.deref()\n const fn = ref.fn\n\n // This should always happen, however GC is\n // undeterministic so it might not happen.\n /* istanbul ignore else */\n if (obj !== undefined) {\n fn(obj, event)\n }\n }\n refs[event] = []\n}\n\nfunction clear (ref) {\n for (const event of ['exit', 'beforeExit']) {\n const index = refs[event].indexOf(ref)\n refs[event].splice(index, index + 1)\n uninstall(event)\n }\n}\n\nfunction _register (event, obj, fn) {\n if (obj === undefined) {\n throw new Error('the object can\\'t be undefined')\n }\n install(event)\n const ref = new WeakRef(obj)\n ref.fn = fn\n\n ensureRegistry()\n registry.register(obj, ref)\n refs[event].push(ref)\n}\n\nfunction register (obj, fn) {\n _register('exit', obj, fn)\n}\n\nfunction registerBeforeExit (obj, fn) {\n _register('beforeExit', obj, fn)\n}\n\nfunction unregister (obj) {\n if (registry === undefined) {\n return\n }\n registry.unregister(obj)\n for (const event of ['exit', 'beforeExit']) {\n refs[event] = refs[event].filter((ref) => {\n const _obj = ref.deref()\n return _obj && _obj !== obj\n })\n uninstall(event)\n }\n}\n\nmodule.exports = {\n register,\n registerBeforeExit,\n unregister\n}\n",
22
+ "'use strict'\n\nconst MAX_TIMEOUT = 1000\n\nfunction wait (state, index, expected, timeout, done) {\n const max = Date.now() + timeout\n let current = Atomics.load(state, index)\n if (current === expected) {\n done(null, 'ok')\n return\n }\n let prior = current\n const check = (backoff) => {\n if (Date.now() > max) {\n done(null, 'timed-out')\n } else {\n setTimeout(() => {\n prior = current\n current = Atomics.load(state, index)\n if (current === prior) {\n check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n } else {\n if (current === expected) done(null, 'ok')\n else done(null, 'not-equal')\n }\n }, backoff)\n }\n }\n check(1)\n}\n\n// let waitDiffCount = 0\nfunction waitDiff (state, index, expected, timeout, done) {\n // const id = waitDiffCount++\n // process._rawDebug(`>>> waitDiff ${id}`)\n const max = Date.now() + timeout\n let current = Atomics.load(state, index)\n if (current !== expected) {\n done(null, 'ok')\n return\n }\n const check = (backoff) => {\n // process._rawDebug(`${id} ${index} current ${current} expected ${expected}`)\n // process._rawDebug('' + backoff)\n if (Date.now() > max) {\n done(null, 'timed-out')\n } else {\n setTimeout(() => {\n current = Atomics.load(state, index)\n if (current !== expected) {\n done(null, 'ok')\n } else {\n check(backoff >= MAX_TIMEOUT ? MAX_TIMEOUT : backoff * 2)\n }\n }, backoff)\n }\n }\n check(1)\n}\n\nmodule.exports = { wait, waitDiff }\n",
23
+ "'use strict'\n\nconst WRITE_INDEX = 4\nconst READ_INDEX = 8\n\nmodule.exports = {\n WRITE_INDEX,\n READ_INDEX\n}\n",
24
+ "'use strict'\n\nconst { version } = require('./package.json')\nconst { EventEmitter } = require('events')\nconst { Worker } = require('worker_threads')\nconst { join } = require('path')\nconst { pathToFileURL } = require('url')\nconst { wait } = require('./lib/wait')\nconst {\n WRITE_INDEX,\n READ_INDEX\n} = require('./lib/indexes')\nconst buffer = require('buffer')\nconst assert = require('assert')\n\nconst kImpl = Symbol('kImpl')\n\n// V8 limit for string size\nconst MAX_STRING = buffer.constants.MAX_STRING_LENGTH\n\nclass FakeWeakRef {\n constructor (value) {\n this._value = value\n }\n\n deref () {\n return this._value\n }\n}\n\nclass FakeFinalizationRegistry {\n register () {}\n\n unregister () {}\n}\n\n// Currently using FinalizationRegistry with code coverage breaks the world\n// Ref: https://github.com/nodejs/node/issues/49344\nconst FinalizationRegistry = process.env.NODE_V8_COVERAGE ? FakeFinalizationRegistry : global.FinalizationRegistry || FakeFinalizationRegistry\nconst WeakRef = process.env.NODE_V8_COVERAGE ? FakeWeakRef : global.WeakRef || FakeWeakRef\n\nconst registry = new FinalizationRegistry((worker) => {\n if (worker.exited) {\n return\n }\n worker.terminate()\n})\n\nfunction createWorker (stream, opts) {\n const { filename, workerData } = opts\n\n const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n const toExecute = bundlerOverrides['thread-stream-worker'] || join(__dirname, 'lib', 'worker.js')\n\n const worker = new Worker(toExecute, {\n ...opts.workerOpts,\n trackUnmanagedFds: false,\n workerData: {\n filename: filename.indexOf('file://') === 0\n ? filename\n : pathToFileURL(filename).href,\n dataBuf: stream[kImpl].dataBuf,\n stateBuf: stream[kImpl].stateBuf,\n workerData: {\n $context: {\n threadStreamVersion: version\n },\n ...workerData\n }\n }\n })\n\n // We keep a strong reference for now,\n // we need to start writing first\n worker.stream = new FakeWeakRef(stream)\n\n worker.on('message', onWorkerMessage)\n worker.on('exit', onWorkerExit)\n registry.register(stream, worker)\n\n return worker\n}\n\nfunction drain (stream) {\n assert(!stream[kImpl].sync)\n if (stream[kImpl].needDrain) {\n stream[kImpl].needDrain = false\n stream.emit('drain')\n }\n}\n\nfunction nextFlush (stream) {\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n let leftover = stream[kImpl].data.length - writeIndex\n\n if (leftover > 0) {\n if (stream[kImpl].buf.length === 0) {\n stream[kImpl].flushing = false\n\n if (stream[kImpl].ending) {\n end(stream)\n } else if (stream[kImpl].needDrain) {\n process.nextTick(drain, stream)\n }\n\n return\n }\n\n let toWrite = stream[kImpl].buf.slice(0, leftover)\n let toWriteBytes = Buffer.byteLength(toWrite)\n if (toWriteBytes <= leftover) {\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n // process._rawDebug('writing ' + toWrite.length)\n write(stream, toWrite, nextFlush.bind(null, stream))\n } else {\n // multi-byte utf-8\n stream.flush(() => {\n // err is already handled in flush()\n if (stream.destroyed) {\n return\n }\n\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n // Find a toWrite length that fits the buffer\n // it must exists as the buffer is at least 4 bytes length\n // and the max utf-8 length for a char is 4 bytes.\n while (toWriteBytes > stream[kImpl].data.length) {\n leftover = leftover / 2\n toWrite = stream[kImpl].buf.slice(0, leftover)\n toWriteBytes = Buffer.byteLength(toWrite)\n }\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n write(stream, toWrite, nextFlush.bind(null, stream))\n })\n }\n } else if (leftover === 0) {\n if (writeIndex === 0 && stream[kImpl].buf.length === 0) {\n // we had a flushSync in the meanwhile\n return\n }\n stream.flush(() => {\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n nextFlush(stream)\n })\n } else {\n // This should never happen\n destroy(stream, new Error('overwritten'))\n }\n}\n\nfunction onWorkerMessage (msg) {\n const stream = this.stream.deref()\n if (stream === undefined) {\n this.exited = true\n // Terminate the worker.\n this.terminate()\n return\n }\n\n switch (msg.code) {\n case 'READY':\n // Replace the FakeWeakRef with a\n // proper one.\n this.stream = new WeakRef(stream)\n\n stream.flush(() => {\n stream[kImpl].ready = true\n stream.emit('ready')\n })\n break\n case 'ERROR':\n destroy(stream, msg.err)\n break\n case 'EVENT':\n if (Array.isArray(msg.args)) {\n stream.emit(msg.name, ...msg.args)\n } else {\n stream.emit(msg.name, msg.args)\n }\n break\n case 'WARNING':\n process.emitWarning(msg.err)\n break\n default:\n destroy(stream, new Error('this should not happen: ' + msg.code))\n }\n}\n\nfunction onWorkerExit (code) {\n const stream = this.stream.deref()\n if (stream === undefined) {\n // Nothing to do, the worker already exit\n return\n }\n registry.unregister(stream)\n stream.worker.exited = true\n stream.worker.off('exit', onWorkerExit)\n destroy(stream, code !== 0 ? new Error('the worker thread exited') : null)\n}\n\nclass ThreadStream extends EventEmitter {\n constructor (opts = {}) {\n super()\n\n if (opts.bufferSize < 4) {\n throw new Error('bufferSize must at least fit a 4-byte utf-8 char')\n }\n\n this[kImpl] = {}\n this[kImpl].stateBuf = new SharedArrayBuffer(128)\n this[kImpl].state = new Int32Array(this[kImpl].stateBuf)\n this[kImpl].dataBuf = new SharedArrayBuffer(opts.bufferSize || 4 * 1024 * 1024)\n this[kImpl].data = Buffer.from(this[kImpl].dataBuf)\n this[kImpl].sync = opts.sync || false\n this[kImpl].ending = false\n this[kImpl].ended = false\n this[kImpl].needDrain = false\n this[kImpl].destroyed = false\n this[kImpl].flushing = false\n this[kImpl].ready = false\n this[kImpl].finished = false\n this[kImpl].errored = null\n this[kImpl].closed = false\n this[kImpl].buf = ''\n\n // TODO (fix): Make private?\n this.worker = createWorker(this, opts) // TODO (fix): make private\n this.on('message', (message, transferList) => {\n this.worker.postMessage(message, transferList)\n })\n }\n\n write (data) {\n if (this[kImpl].destroyed) {\n error(this, new Error('the worker has exited'))\n return false\n }\n\n if (this[kImpl].ending) {\n error(this, new Error('the worker is ending'))\n return false\n }\n\n if (this[kImpl].flushing && this[kImpl].buf.length + data.length >= MAX_STRING) {\n try {\n writeSync(this)\n this[kImpl].flushing = true\n } catch (err) {\n destroy(this, err)\n return false\n }\n }\n\n this[kImpl].buf += data\n\n if (this[kImpl].sync) {\n try {\n writeSync(this)\n return true\n } catch (err) {\n destroy(this, err)\n return false\n }\n }\n\n if (!this[kImpl].flushing) {\n this[kImpl].flushing = true\n setImmediate(nextFlush, this)\n }\n\n this[kImpl].needDrain = this[kImpl].data.length - this[kImpl].buf.length - Atomics.load(this[kImpl].state, WRITE_INDEX) <= 0\n return !this[kImpl].needDrain\n }\n\n end () {\n if (this[kImpl].destroyed) {\n return\n }\n\n this[kImpl].ending = true\n end(this)\n }\n\n flush (cb) {\n if (this[kImpl].destroyed) {\n if (typeof cb === 'function') {\n process.nextTick(cb, new Error('the worker has exited'))\n }\n return\n }\n\n // TODO write all .buf\n const writeIndex = Atomics.load(this[kImpl].state, WRITE_INDEX)\n // process._rawDebug(`(flush) readIndex (${Atomics.load(this.state, READ_INDEX)}) writeIndex (${Atomics.load(this.state, WRITE_INDEX)})`)\n wait(this[kImpl].state, READ_INDEX, writeIndex, Infinity, (err, res) => {\n if (err) {\n destroy(this, err)\n process.nextTick(cb, err)\n return\n }\n if (res === 'not-equal') {\n // TODO handle deadlock\n this.flush(cb)\n return\n }\n process.nextTick(cb)\n })\n }\n\n flushSync () {\n if (this[kImpl].destroyed) {\n return\n }\n\n writeSync(this)\n flushSync(this)\n }\n\n unref () {\n this.worker.unref()\n }\n\n ref () {\n this.worker.ref()\n }\n\n get ready () {\n return this[kImpl].ready\n }\n\n get destroyed () {\n return this[kImpl].destroyed\n }\n\n get closed () {\n return this[kImpl].closed\n }\n\n get writable () {\n return !this[kImpl].destroyed && !this[kImpl].ending\n }\n\n get writableEnded () {\n return this[kImpl].ending\n }\n\n get writableFinished () {\n return this[kImpl].finished\n }\n\n get writableNeedDrain () {\n return this[kImpl].needDrain\n }\n\n get writableObjectMode () {\n return false\n }\n\n get writableErrored () {\n return this[kImpl].errored\n }\n}\n\nfunction error (stream, err) {\n setImmediate(() => {\n stream.emit('error', err)\n })\n}\n\nfunction destroy (stream, err) {\n if (stream[kImpl].destroyed) {\n return\n }\n stream[kImpl].destroyed = true\n\n if (err) {\n stream[kImpl].errored = err\n error(stream, err)\n }\n\n if (!stream.worker.exited) {\n stream.worker.terminate()\n .catch(() => {})\n .then(() => {\n stream[kImpl].closed = true\n stream.emit('close')\n })\n } else {\n setImmediate(() => {\n stream[kImpl].closed = true\n stream.emit('close')\n })\n }\n}\n\nfunction write (stream, data, cb) {\n // data is smaller than the shared buffer length\n const current = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n const length = Buffer.byteLength(data)\n stream[kImpl].data.write(data, current)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, current + length)\n Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n cb()\n return true\n}\n\nfunction end (stream) {\n if (stream[kImpl].ended || !stream[kImpl].ending || stream[kImpl].flushing) {\n return\n }\n stream[kImpl].ended = true\n\n try {\n stream.flushSync()\n\n let readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n // process._rawDebug('writing index')\n Atomics.store(stream[kImpl].state, WRITE_INDEX, -1)\n // process._rawDebug(`(end) readIndex (${Atomics.load(stream.state, READ_INDEX)}) writeIndex (${Atomics.load(stream.state, WRITE_INDEX)})`)\n Atomics.notify(stream[kImpl].state, WRITE_INDEX)\n\n // Wait for the process to complete\n let spins = 0\n while (readIndex !== -1) {\n // process._rawDebug(`read = ${read}`)\n Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n if (readIndex === -2) {\n destroy(stream, new Error('end() failed'))\n return\n }\n\n if (++spins === 10) {\n destroy(stream, new Error('end() took too long (10s)'))\n return\n }\n }\n\n process.nextTick(() => {\n stream[kImpl].finished = true\n stream.emit('finish')\n })\n } catch (err) {\n destroy(stream, err)\n }\n // process._rawDebug('end finished...')\n}\n\nfunction writeSync (stream) {\n const cb = () => {\n if (stream[kImpl].ending) {\n end(stream)\n } else if (stream[kImpl].needDrain) {\n process.nextTick(drain, stream)\n }\n }\n stream[kImpl].flushing = false\n\n while (stream[kImpl].buf.length !== 0) {\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n let leftover = stream[kImpl].data.length - writeIndex\n if (leftover === 0) {\n flushSync(stream)\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n continue\n } else if (leftover < 0) {\n // stream should never happen\n throw new Error('overwritten')\n }\n\n let toWrite = stream[kImpl].buf.slice(0, leftover)\n let toWriteBytes = Buffer.byteLength(toWrite)\n if (toWriteBytes <= leftover) {\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n // process._rawDebug('writing ' + toWrite.length)\n write(stream, toWrite, cb)\n } else {\n // multi-byte utf-8\n flushSync(stream)\n Atomics.store(stream[kImpl].state, READ_INDEX, 0)\n Atomics.store(stream[kImpl].state, WRITE_INDEX, 0)\n\n // Find a toWrite length that fits the buffer\n // it must exists as the buffer is at least 4 bytes length\n // and the max utf-8 length for a char is 4 bytes.\n while (toWriteBytes > stream[kImpl].buf.length) {\n leftover = leftover / 2\n toWrite = stream[kImpl].buf.slice(0, leftover)\n toWriteBytes = Buffer.byteLength(toWrite)\n }\n stream[kImpl].buf = stream[kImpl].buf.slice(leftover)\n write(stream, toWrite, cb)\n }\n }\n}\n\nfunction flushSync (stream) {\n if (stream[kImpl].flushing) {\n throw new Error('unable to flush while flushing')\n }\n\n // process._rawDebug('flushSync started')\n\n const writeIndex = Atomics.load(stream[kImpl].state, WRITE_INDEX)\n\n let spins = 0\n\n // TODO handle deadlock\n while (true) {\n const readIndex = Atomics.load(stream[kImpl].state, READ_INDEX)\n\n if (readIndex === -2) {\n throw Error('_flushSync failed')\n }\n\n // process._rawDebug(`(flushSync) readIndex (${readIndex}) writeIndex (${writeIndex})`)\n if (readIndex !== writeIndex) {\n // TODO stream timeouts for some reason.\n Atomics.wait(stream[kImpl].state, READ_INDEX, readIndex, 1000)\n } else {\n break\n }\n\n if (++spins === 10) {\n throw new Error('_flushSync took too long (10s)')\n }\n }\n // process._rawDebug('flushSync finished')\n}\n\nmodule.exports = ThreadStream\n",
25
+ "'use strict'\n\nconst { createRequire } = require('module')\nconst getCallers = require('./caller')\nconst { join, isAbsolute, sep } = require('node:path')\nconst sleep = require('atomic-sleep')\nconst onExit = require('on-exit-leak-free')\nconst ThreadStream = require('thread-stream')\n\nfunction setupOnExit (stream) {\n // This is leak free, it does not leave event handlers\n onExit.register(stream, autoEnd)\n onExit.registerBeforeExit(stream, flush)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n}\n\nfunction buildStream (filename, workerData, workerOpts, sync) {\n const stream = new ThreadStream({\n filename,\n workerData,\n workerOpts,\n sync\n })\n\n stream.on('ready', onReady)\n stream.on('close', function () {\n process.removeListener('exit', onExit)\n })\n\n process.on('exit', onExit)\n\n function onReady () {\n process.removeListener('exit', onExit)\n stream.unref()\n\n if (workerOpts.autoEnd !== false) {\n setupOnExit(stream)\n }\n }\n\n function onExit () {\n /* istanbul ignore next */\n if (stream.closed) {\n return\n }\n stream.flushSync()\n // Apparently there is a very sporadic race condition\n // that in certain OS would prevent the messages to be flushed\n // because the thread might not have been created still.\n // Unfortunately we need to sleep(100) in this case.\n sleep(100)\n stream.end()\n }\n\n return stream\n}\n\nfunction autoEnd (stream) {\n stream.ref()\n stream.flushSync()\n stream.end()\n stream.once('close', function () {\n stream.unref()\n })\n}\n\nfunction flush (stream) {\n stream.flushSync()\n}\n\nfunction transport (fullOptions) {\n const { pipeline, targets, levels, dedupe, worker = {}, caller = getCallers(), sync = false } = fullOptions\n\n const options = {\n ...fullOptions.options\n }\n\n // Backwards compatibility\n const callers = typeof caller === 'string' ? [caller] : caller\n\n // This will be eventually modified by bundlers\n const bundlerOverrides = '__bundlerPathsOverrides' in globalThis ? globalThis.__bundlerPathsOverrides : {}\n\n let target = fullOptions.target\n\n if (target && targets) {\n throw new Error('only one of target or targets can be specified')\n }\n\n if (targets) {\n target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n options.targets = targets.filter(dest => dest.target).map((dest) => {\n return {\n ...dest,\n target: fixTarget(dest.target)\n }\n })\n options.pipelines = targets.filter(dest => dest.pipeline).map((dest) => {\n return dest.pipeline.map((t) => {\n return {\n ...t,\n level: dest.level, // duplicate the pipeline `level` property defined in the upper level\n target: fixTarget(t.target)\n }\n })\n })\n } else if (pipeline) {\n target = bundlerOverrides['pino-worker'] || join(__dirname, 'worker.js')\n options.pipelines = [pipeline.map((dest) => {\n return {\n ...dest,\n target: fixTarget(dest.target)\n }\n })]\n }\n\n if (levels) {\n options.levels = levels\n }\n\n if (dedupe) {\n options.dedupe = dedupe\n }\n\n options.pinoWillSendConfig = true\n\n return buildStream(fixTarget(target), options, worker, sync)\n\n function fixTarget (origin) {\n origin = bundlerOverrides[origin] || origin\n\n if (isAbsolute(origin) || origin.indexOf('file://') === 0) {\n return origin\n }\n\n if (origin === 'pino/file') {\n return join(__dirname, '..', 'file.js')\n }\n\n let fixTarget\n\n for (const filePath of callers) {\n try {\n const context = filePath === 'node:repl'\n ? process.cwd() + sep\n : filePath\n\n fixTarget = createRequire(context).resolve(origin)\n break\n } catch (err) {\n // Silent catch\n continue\n }\n }\n\n if (!fixTarget) {\n throw new Error(`unable to determine transport target for \"${origin}\"`)\n }\n\n return fixTarget\n }\n}\n\nmodule.exports = transport\n",
26
+ "'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst diagChan = require('node:diagnostics_channel')\nconst format = require('quick-format-unescaped')\nconst { mapHttpRequest, mapHttpResponse } = require('pino-std-serializers')\nconst SonicBoom = require('sonic-boom')\nconst onExit = require('on-exit-leak-free')\nconst {\n lsCacheSym,\n chindingsSym,\n writeSym,\n serializersSym,\n formatOptsSym,\n endSym,\n stringifiersSym,\n stringifySym,\n stringifySafeSym,\n wildcardFirstSym,\n nestedKeySym,\n formattersSym,\n messageKeySym,\n errorKeySym,\n nestedKeyStrSym,\n msgPrefixSym\n} = require('./symbols')\nconst { isMainThread } = require('worker_threads')\nconst transport = require('./transport')\n\nconst asJsonChan = diagChan.tracingChannel('pino_asJson')\n\nfunction noop () {\n}\n\nfunction genLog (level, hook) {\n if (!hook) return LOG\n\n return function hookWrappedLog (...args) {\n hook.call(this, args, LOG, level)\n }\n\n function LOG (o, ...n) {\n if (typeof o === 'object') {\n let msg = o\n if (o !== null) {\n if (o.method && o.headers && o.socket) {\n o = mapHttpRequest(o)\n } else if (typeof o.setHeader === 'function') {\n o = mapHttpResponse(o)\n }\n }\n let formatParams\n if (msg === null && n.length === 0) {\n formatParams = [null]\n } else {\n msg = n.shift()\n formatParams = n\n }\n // We do not use a coercive check for `msg` as it is\n // measurably slower than the explicit checks.\n if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n msg = this[msgPrefixSym] + msg\n }\n this[writeSym](o, format(msg, formatParams, this[formatOptsSym]), level)\n } else {\n let msg = o === undefined ? n.shift() : o\n\n // We do not use a coercive check for `msg` as it is\n // measurably slower than the explicit checks.\n if (typeof this[msgPrefixSym] === 'string' && msg !== undefined && msg !== null) {\n msg = this[msgPrefixSym] + msg\n }\n this[writeSym](null, format(msg, n, this[formatOptsSym]), level)\n }\n }\n}\n\n// magically escape strings for json\n// relying on their charCodeAt\n// everything below 32 needs JSON.stringify()\n// 34 and 92 happens all the time, so we\n// have a fast case for them\nfunction asString (str) {\n let result = ''\n let last = 0\n let found = false\n let point = 255\n const l = str.length\n if (l > 100) {\n return JSON.stringify(str)\n }\n for (var i = 0; i < l && point >= 32; i++) {\n point = str.charCodeAt(i)\n if (point === 34 || point === 92) {\n result += str.slice(last, i) + '\\\\'\n last = i\n found = true\n }\n }\n if (!found) {\n result = str\n } else {\n result += str.slice(last)\n }\n return point < 32 ? JSON.stringify(str) : '\"' + result + '\"'\n}\n\n/**\n * `asJson` wraps `_asJson` in order to facilitate generating diagnostics.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string}\n */\nfunction asJson (obj, msg, num, time) {\n if (asJsonChan.hasSubscribers === false) {\n return _asJson.call(this, obj, msg, num, time)\n }\n\n const store = { instance: this, arguments }\n return asJsonChan.traceSync(_asJson, store, this, obj, msg, num, time)\n}\n\n/**\n * `_asJson` parses all collected data and generates the finalized newline\n * delimited JSON string.\n *\n * @param {object} obj The merging object passed to the log method.\n * @param {string} msg The log message passed to the log method.\n * @param {number} num The log level number.\n * @param {number} time The log time in milliseconds.\n *\n * @returns {string} The finalized log string terminated with a newline.\n * @private\n */\nfunction _asJson (obj, msg, num, time) {\n const stringify = this[stringifySym]\n const stringifySafe = this[stringifySafeSym]\n const stringifiers = this[stringifiersSym]\n const end = this[endSym]\n const chindings = this[chindingsSym]\n const serializers = this[serializersSym]\n const formatters = this[formattersSym]\n const messageKey = this[messageKeySym]\n const errorKey = this[errorKeySym]\n let data = this[lsCacheSym][num] + time\n\n // we need the child bindings added to the output first so instance logged\n // objects can take precedence when JSON.parse-ing the resulting log line\n data = data + chindings\n\n let value\n if (formatters.log) {\n obj = formatters.log(obj)\n }\n const wildcardStringifier = stringifiers[wildcardFirstSym]\n let propStr = ''\n for (const key in obj) {\n value = obj[key]\n if (Object.prototype.hasOwnProperty.call(obj, key) && value !== undefined) {\n if (serializers[key]) {\n value = serializers[key](value)\n } else if (key === errorKey && serializers.err) {\n value = serializers.err(value)\n }\n\n const stringifier = stringifiers[key] || wildcardStringifier\n\n switch (typeof value) {\n case 'undefined':\n case 'function':\n continue\n case 'number':\n /* eslint no-fallthrough: \"off\" */\n if (Number.isFinite(value) === false) {\n value = null\n }\n // this case explicitly falls through to the next one\n case 'boolean':\n if (stringifier) value = stringifier(value)\n break\n case 'string':\n value = (stringifier || asString)(value)\n break\n default:\n value = (stringifier || stringify)(value, stringifySafe)\n }\n if (value === undefined) continue\n const strKey = asString(key)\n propStr += ',' + strKey + ':' + value\n }\n }\n\n let msgStr = ''\n if (msg !== undefined) {\n value = serializers[messageKey] ? serializers[messageKey](msg) : msg\n const stringifier = stringifiers[messageKey] || wildcardStringifier\n\n switch (typeof value) {\n case 'function':\n break\n case 'number':\n if (Number.isFinite(value) === false) {\n value = null\n }\n // this case explicitly falls through to the next one\n case 'boolean':\n if (stringifier) value = stringifier(value)\n msgStr = ',\"' + messageKey + '\":' + value\n break\n case 'string':\n value = (stringifier || asString)(value)\n msgStr = ',\"' + messageKey + '\":' + value\n break\n default:\n value = (stringifier || stringify)(value, stringifySafe)\n msgStr = ',\"' + messageKey + '\":' + value\n }\n }\n\n if (this[nestedKeySym] && propStr) {\n // place all the obj properties under the specified key\n // the nested key is already formatted from the constructor\n return data + this[nestedKeyStrSym] + propStr.slice(1) + '}' + msgStr + end\n } else {\n return data + propStr + msgStr + end\n }\n}\n\nfunction asChindings (instance, bindings) {\n let value\n let data = instance[chindingsSym]\n const stringify = instance[stringifySym]\n const stringifySafe = instance[stringifySafeSym]\n const stringifiers = instance[stringifiersSym]\n const wildcardStringifier = stringifiers[wildcardFirstSym]\n const serializers = instance[serializersSym]\n const formatter = instance[formattersSym].bindings\n bindings = formatter(bindings)\n\n for (const key in bindings) {\n value = bindings[key]\n const valid = (key.length < 5 || (key !== 'level' &&\n key !== 'serializers' &&\n key !== 'formatters' &&\n key !== 'customLevels')) &&\n bindings.hasOwnProperty(key) &&\n value !== undefined\n if (valid === true) {\n value = serializers[key] ? serializers[key](value) : value\n value = (stringifiers[key] || wildcardStringifier || stringify)(value, stringifySafe)\n if (value === undefined) continue\n data += ',\"' + key + '\":' + value\n }\n }\n return data\n}\n\nfunction hasBeenTampered (stream) {\n return stream.write !== stream.constructor.prototype.write\n}\n\nfunction buildSafeSonicBoom (opts) {\n const stream = new SonicBoom(opts)\n stream.on('error', filterBrokenPipe)\n // If we are sync: false, we must flush on exit\n if (!opts.sync && isMainThread) {\n onExit.register(stream, autoEnd)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n }\n return stream\n\n function filterBrokenPipe (err) {\n // Impossible to replicate across all operating systems\n /* istanbul ignore next */\n if (err.code === 'EPIPE') {\n // If we get EPIPE, we should stop logging here\n // however we have no control to the consumer of\n // SonicBoom, so we just overwrite the write method\n stream.write = noop\n stream.end = noop\n stream.flushSync = noop\n stream.destroy = noop\n return\n }\n stream.removeListener('error', filterBrokenPipe)\n stream.emit('error', err)\n }\n}\n\nfunction autoEnd (stream, eventName) {\n // This check is needed only on some platforms\n /* istanbul ignore next */\n if (stream.destroyed) {\n return\n }\n\n if (eventName === 'beforeExit') {\n // We still have an event loop, let's use it\n stream.flush()\n stream.on('drain', function () {\n stream.end()\n })\n } else {\n // For some reason istanbul is not detecting this, but it's there\n /* istanbul ignore next */\n // We do not have an event loop, so flush synchronously\n stream.flushSync()\n }\n}\n\nfunction createArgsNormalizer (defaultOptions) {\n return function normalizeArgs (instance, caller, opts = {}, stream) {\n // support stream as a string\n if (typeof opts === 'string') {\n stream = buildSafeSonicBoom({ dest: opts })\n opts = {}\n } else if (typeof stream === 'string') {\n if (opts && opts.transport) {\n throw Error('only one of option.transport or stream can be specified')\n }\n stream = buildSafeSonicBoom({ dest: stream })\n } else if (opts instanceof SonicBoom || opts.writable || opts._writableState) {\n stream = opts\n opts = {}\n } else if (opts.transport) {\n if (opts.transport instanceof SonicBoom || opts.transport.writable || opts.transport._writableState) {\n throw Error('option.transport do not allow stream, please pass to option directly. e.g. pino(transport)')\n }\n if (opts.transport.targets && opts.transport.targets.length && opts.formatters && typeof opts.formatters.level === 'function') {\n throw Error('option.transport.targets do not allow custom level formatters')\n }\n\n let customLevels\n if (opts.customLevels) {\n customLevels = opts.useOnlyCustomLevels ? opts.customLevels : Object.assign({}, opts.levels, opts.customLevels)\n }\n stream = transport({ caller, ...opts.transport, levels: customLevels })\n }\n opts = Object.assign({}, defaultOptions, opts)\n opts.serializers = Object.assign({}, defaultOptions.serializers, opts.serializers)\n opts.formatters = Object.assign({}, defaultOptions.formatters, opts.formatters)\n\n if (opts.prettyPrint) {\n throw new Error('prettyPrint option is no longer supported, see the pino-pretty package (https://github.com/pinojs/pino-pretty)')\n }\n\n const { enabled, onChild } = opts\n if (enabled === false) opts.level = 'silent'\n if (!onChild) opts.onChild = noop\n if (!stream) {\n if (!hasBeenTampered(process.stdout)) {\n // If process.stdout.fd is undefined, it means that we are running\n // in a worker thread. Let's assume we are logging to file descriptor 1.\n stream = buildSafeSonicBoom({ fd: process.stdout.fd || 1 })\n } else {\n stream = process.stdout\n }\n }\n return { opts, stream }\n }\n}\n\nfunction stringify (obj, stringifySafeFn) {\n try {\n return JSON.stringify(obj)\n } catch (_) {\n try {\n const stringify = stringifySafeFn || this[stringifySafeSym]\n return stringify(obj)\n } catch (_) {\n return '\"[unable to serialize, circular reference is too complex to analyze]\"'\n }\n }\n}\n\nfunction buildFormatters (level, bindings, log) {\n return {\n level,\n bindings,\n log\n }\n}\n\n/**\n * Convert a string integer file descriptor to a proper native integer\n * file descriptor.\n *\n * @param {string} destination The file descriptor string to attempt to convert.\n *\n * @returns {Number}\n */\nfunction normalizeDestFileDescriptor (destination) {\n const fd = Number(destination)\n if (typeof destination === 'string' && Number.isFinite(fd)) {\n return fd\n }\n // destination could be undefined if we are in a worker\n if (destination === undefined) {\n // This is stdout in UNIX systems\n return 1\n }\n return destination\n}\n\nmodule.exports = {\n noop,\n buildSafeSonicBoom,\n asChindings,\n asJson,\n genLog,\n createArgsNormalizer,\n stringify,\n buildFormatters,\n normalizeDestFileDescriptor\n}\n",
27
+ "/**\n * Represents default log level values\n *\n * @enum {number}\n */\nconst DEFAULT_LEVELS = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60\n}\n\n/**\n * Represents sort order direction: `ascending` or `descending`\n *\n * @enum {string}\n */\nconst SORTING_ORDER = {\n ASC: 'ASC',\n DESC: 'DESC'\n}\n\nmodule.exports = {\n DEFAULT_LEVELS,\n SORTING_ORDER\n}\n",
28
+ "'use strict'\n/* eslint no-prototype-builtins: 0 */\nconst {\n lsCacheSym,\n levelValSym,\n useOnlyCustomLevelsSym,\n streamSym,\n formattersSym,\n hooksSym,\n levelCompSym\n} = require('./symbols')\nconst { noop, genLog } = require('./tools')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./constants')\n\nconst levelMethods = {\n fatal: (hook) => {\n const logFatal = genLog(DEFAULT_LEVELS.fatal, hook)\n return function (...args) {\n const stream = this[streamSym]\n logFatal.call(this, ...args)\n if (typeof stream.flushSync === 'function') {\n try {\n stream.flushSync()\n } catch (e) {\n // https://github.com/pinojs/pino/pull/740#discussion_r346788313\n }\n }\n }\n },\n error: (hook) => genLog(DEFAULT_LEVELS.error, hook),\n warn: (hook) => genLog(DEFAULT_LEVELS.warn, hook),\n info: (hook) => genLog(DEFAULT_LEVELS.info, hook),\n debug: (hook) => genLog(DEFAULT_LEVELS.debug, hook),\n trace: (hook) => genLog(DEFAULT_LEVELS.trace, hook)\n}\n\nconst nums = Object.keys(DEFAULT_LEVELS).reduce((o, k) => {\n o[DEFAULT_LEVELS[k]] = k\n return o\n}, {})\n\nconst initialLsCache = Object.keys(nums).reduce((o, k) => {\n o[k] = '{\"level\":' + Number(k)\n return o\n}, {})\n\nfunction genLsCache (instance) {\n const formatter = instance[formattersSym].level\n const { labels } = instance.levels\n const cache = {}\n for (const label in labels) {\n const level = formatter(labels[label], Number(label))\n cache[label] = JSON.stringify(level).slice(0, -1)\n }\n instance[lsCacheSym] = cache\n return instance\n}\n\nfunction isStandardLevel (level, useOnlyCustomLevels) {\n if (useOnlyCustomLevels) {\n return false\n }\n\n switch (level) {\n case 'fatal':\n case 'error':\n case 'warn':\n case 'info':\n case 'debug':\n case 'trace':\n return true\n default:\n return false\n }\n}\n\nfunction setLevel (level) {\n const { labels, values } = this.levels\n if (typeof level === 'number') {\n if (labels[level] === undefined) throw Error('unknown level value' + level)\n level = labels[level]\n }\n if (values[level] === undefined) throw Error('unknown level ' + level)\n const preLevelVal = this[levelValSym]\n const levelVal = this[levelValSym] = values[level]\n const useOnlyCustomLevelsVal = this[useOnlyCustomLevelsSym]\n const levelComparison = this[levelCompSym]\n const hook = this[hooksSym].logMethod\n\n for (const key in values) {\n if (levelComparison(values[key], levelVal) === false) {\n this[key] = noop\n continue\n }\n this[key] = isStandardLevel(key, useOnlyCustomLevelsVal) ? levelMethods[key](hook) : genLog(values[key], hook)\n }\n\n this.emit(\n 'level-change',\n level,\n levelVal,\n labels[preLevelVal],\n preLevelVal,\n this\n )\n}\n\nfunction getLevel (level) {\n const { levels, levelVal } = this\n // protection against potential loss of Pino scope from serializers (edge case with circular refs - https://github.com/pinojs/pino/issues/833)\n return (levels && levels.labels) ? levels.labels[levelVal] : ''\n}\n\nfunction isLevelEnabled (logLevel) {\n const { values } = this.levels\n const logLevelVal = values[logLevel]\n return logLevelVal !== undefined && this[levelCompSym](logLevelVal, this[levelValSym])\n}\n\n/**\n * Determine if the given `current` level is enabled by comparing it\n * against the current threshold (`expected`).\n *\n * @param {SORTING_ORDER} direction comparison direction \"ASC\" or \"DESC\"\n * @param {number} current current log level number representation\n * @param {number} expected threshold value to compare with\n * @returns {boolean}\n */\nfunction compareLevel (direction, current, expected) {\n if (direction === SORTING_ORDER.DESC) {\n return current <= expected\n }\n\n return current >= expected\n}\n\n/**\n * Create a level comparison function based on `levelComparison`\n * it could a default function which compares levels either in \"ascending\" or \"descending\" order or custom comparison function\n *\n * @param {SORTING_ORDER | Function} levelComparison sort levels order direction or custom comparison function\n * @returns Function\n */\nfunction genLevelComparison (levelComparison) {\n if (typeof levelComparison === 'string') {\n return compareLevel.bind(null, levelComparison)\n }\n\n return levelComparison\n}\n\nfunction mappings (customLevels = null, useOnlyCustomLevels = false) {\n const customNums = customLevels\n /* eslint-disable */\n ? Object.keys(customLevels).reduce((o, k) => {\n o[customLevels[k]] = k\n return o\n }, {})\n : null\n /* eslint-enable */\n\n const labels = Object.assign(\n Object.create(Object.prototype, { Infinity: { value: 'silent' } }),\n useOnlyCustomLevels ? null : nums,\n customNums\n )\n const values = Object.assign(\n Object.create(Object.prototype, { silent: { value: Infinity } }),\n useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n customLevels\n )\n return { labels, values }\n}\n\nfunction assertDefaultLevelFound (defaultLevel, customLevels, useOnlyCustomLevels) {\n if (typeof defaultLevel === 'number') {\n const values = [].concat(\n Object.keys(customLevels || {}).map(key => customLevels[key]),\n useOnlyCustomLevels ? [] : Object.keys(nums).map(level => +level),\n Infinity\n )\n if (!values.includes(defaultLevel)) {\n throw Error(`default level:${defaultLevel} must be included in custom levels`)\n }\n return\n }\n\n const labels = Object.assign(\n Object.create(Object.prototype, { silent: { value: Infinity } }),\n useOnlyCustomLevels ? null : DEFAULT_LEVELS,\n customLevels\n )\n if (!(defaultLevel in labels)) {\n throw Error(`default level:${defaultLevel} must be included in custom levels`)\n }\n}\n\nfunction assertNoLevelCollisions (levels, customLevels) {\n const { labels, values } = levels\n for (const k in customLevels) {\n if (k in values) {\n throw Error('levels cannot be overridden')\n }\n if (customLevels[k] in labels) {\n throw Error('pre-existing level values cannot be used for new levels')\n }\n }\n}\n\n/**\n * Validates whether `levelComparison` is correct\n *\n * @throws Error\n * @param {SORTING_ORDER | Function} levelComparison - value to validate\n * @returns\n */\nfunction assertLevelComparison (levelComparison) {\n if (typeof levelComparison === 'function') {\n return\n }\n\n if (typeof levelComparison === 'string' && Object.values(SORTING_ORDER).includes(levelComparison)) {\n return\n }\n\n throw new Error('Levels comparison should be one of \"ASC\", \"DESC\" or \"function\" type')\n}\n\nmodule.exports = {\n initialLsCache,\n genLsCache,\n levelMethods,\n getLevel,\n setLevel,\n isLevelEnabled,\n mappings,\n assertNoLevelCollisions,\n assertDefaultLevelFound,\n genLevelComparison,\n assertLevelComparison\n}\n",
29
+ "'use strict'\n\nmodule.exports = { version: '10.1.0' }\n",
30
+ "'use strict'\n\n/* eslint no-prototype-builtins: 0 */\n\nconst { EventEmitter } = require('node:events')\nconst {\n lsCacheSym,\n levelValSym,\n setLevelSym,\n getLevelSym,\n chindingsSym,\n mixinSym,\n asJsonSym,\n writeSym,\n mixinMergeStrategySym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n serializersSym,\n formattersSym,\n errorKeySym,\n messageKeySym,\n useOnlyCustomLevelsSym,\n needsMetadataGsym,\n redactFmtSym,\n stringifySym,\n formatOptsSym,\n stringifiersSym,\n msgPrefixSym,\n hooksSym\n} = require('./symbols')\nconst {\n getLevel,\n setLevel,\n isLevelEnabled,\n mappings,\n initialLsCache,\n genLsCache,\n assertNoLevelCollisions\n} = require('./levels')\nconst {\n asChindings,\n asJson,\n buildFormatters,\n stringify,\n noop\n} = require('./tools')\nconst {\n version\n} = require('./meta')\nconst redaction = require('./redaction')\n\n// note: use of class is satirical\n// https://github.com/pinojs/pino/pull/433#pullrequestreview-127703127\nconst constructor = class Pino {}\nconst prototype = {\n constructor,\n child,\n bindings,\n setBindings,\n flush,\n isLevelEnabled,\n version,\n get level () { return this[getLevelSym]() },\n set level (lvl) { this[setLevelSym](lvl) },\n get levelVal () { return this[levelValSym] },\n set levelVal (n) { throw Error('levelVal is read-only') },\n get msgPrefix () { return this[msgPrefixSym] },\n get [Symbol.toStringTag] () { return 'Pino' },\n [lsCacheSym]: initialLsCache,\n [writeSym]: write,\n [asJsonSym]: asJson,\n [getLevelSym]: getLevel,\n [setLevelSym]: setLevel\n}\n\nObject.setPrototypeOf(prototype, EventEmitter.prototype)\n\n// exporting and consuming the prototype object using factory pattern fixes scoping issues with getters when serializing\nmodule.exports = function () {\n return Object.create(prototype)\n}\n\nconst resetChildingsFormatter = bindings => bindings\nfunction child (bindings, options) {\n if (!bindings) {\n throw Error('missing bindings for child Pino')\n }\n const serializers = this[serializersSym]\n const formatters = this[formattersSym]\n const instance = Object.create(this)\n\n // If an `options` object was not supplied, we can improve\n // the performance of child creation by skipping\n // the checks for set options and simply return\n // a baseline instance.\n if (options == null) {\n if (instance[formattersSym].bindings !== resetChildingsFormatter) {\n instance[formattersSym] = buildFormatters(\n formatters.level,\n resetChildingsFormatter,\n formatters.log\n )\n }\n\n instance[chindingsSym] = asChindings(instance, bindings)\n\n if (this.onChild !== noop) {\n this.onChild(instance)\n }\n\n return instance\n }\n\n if (options.hasOwnProperty('serializers') === true) {\n instance[serializersSym] = Object.create(null)\n\n for (const k in serializers) {\n instance[serializersSym][k] = serializers[k]\n }\n const parentSymbols = Object.getOwnPropertySymbols(serializers)\n /* eslint no-var: off */\n for (var i = 0; i < parentSymbols.length; i++) {\n const ks = parentSymbols[i]\n instance[serializersSym][ks] = serializers[ks]\n }\n\n for (const bk in options.serializers) {\n instance[serializersSym][bk] = options.serializers[bk]\n }\n const bindingsSymbols = Object.getOwnPropertySymbols(options.serializers)\n for (var bi = 0; bi < bindingsSymbols.length; bi++) {\n const bks = bindingsSymbols[bi]\n instance[serializersSym][bks] = options.serializers[bks]\n }\n } else instance[serializersSym] = serializers\n if (options.hasOwnProperty('formatters')) {\n const { level, bindings: chindings, log } = options.formatters\n instance[formattersSym] = buildFormatters(\n level || formatters.level,\n chindings || resetChildingsFormatter,\n log || formatters.log\n )\n } else {\n instance[formattersSym] = buildFormatters(\n formatters.level,\n resetChildingsFormatter,\n formatters.log\n )\n }\n if (options.hasOwnProperty('customLevels') === true) {\n assertNoLevelCollisions(this.levels, options.customLevels)\n instance.levels = mappings(options.customLevels, instance[useOnlyCustomLevelsSym])\n genLsCache(instance)\n }\n\n // redact must place before asChindings and only replace if exist\n if ((typeof options.redact === 'object' && options.redact !== null) || Array.isArray(options.redact)) {\n instance.redact = options.redact // replace redact directly\n const stringifiers = redaction(instance.redact, stringify)\n const formatOpts = { stringify: stringifiers[redactFmtSym] }\n instance[stringifySym] = stringify\n instance[stringifiersSym] = stringifiers\n instance[formatOptsSym] = formatOpts\n }\n\n if (typeof options.msgPrefix === 'string') {\n instance[msgPrefixSym] = (this[msgPrefixSym] || '') + options.msgPrefix\n }\n\n instance[chindingsSym] = asChindings(instance, bindings)\n if ((options.level !== undefined && options.level !== this.level) || options.hasOwnProperty('customLevels')) {\n const childLevel = options.level || this.level\n instance[setLevelSym](childLevel)\n }\n this.onChild(instance)\n return instance\n}\n\nfunction bindings () {\n const chindings = this[chindingsSym]\n const chindingsJson = `{${chindings.substr(1)}}` // at least contains ,\"pid\":7068,\"hostname\":\"myMac\"\n const bindingsFromJson = JSON.parse(chindingsJson)\n delete bindingsFromJson.pid\n delete bindingsFromJson.hostname\n return bindingsFromJson\n}\n\nfunction setBindings (newBindings) {\n const chindings = asChindings(this, newBindings)\n this[chindingsSym] = chindings\n}\n\n/**\n * Default strategy for creating `mergeObject` from arguments and the result from `mixin()`.\n * Fields from `mergeObject` have higher priority in this strategy.\n *\n * @param {Object} mergeObject The object a user has supplied to the logging function.\n * @param {Object} mixinObject The result of the `mixin` method.\n * @return {Object}\n */\nfunction defaultMixinMergeStrategy (mergeObject, mixinObject) {\n return Object.assign(mixinObject, mergeObject)\n}\n\nfunction write (_obj, msg, num) {\n const t = this[timeSym]()\n const mixin = this[mixinSym]\n const errorKey = this[errorKeySym]\n const messageKey = this[messageKeySym]\n const mixinMergeStrategy = this[mixinMergeStrategySym] || defaultMixinMergeStrategy\n let obj\n const streamWriteHook = this[hooksSym].streamWrite\n\n if (_obj === undefined || _obj === null) {\n obj = {}\n } else if (_obj instanceof Error) {\n obj = { [errorKey]: _obj }\n if (msg === undefined) {\n msg = _obj.message\n }\n } else {\n obj = _obj\n if (msg === undefined && _obj[messageKey] === undefined && _obj[errorKey]) {\n msg = _obj[errorKey].message\n }\n }\n\n if (mixin) {\n obj = mixinMergeStrategy(obj, mixin(obj, num, this))\n }\n\n const s = this[asJsonSym](obj, msg, num, t)\n\n const stream = this[streamSym]\n if (stream[needsMetadataGsym] === true) {\n stream.lastLevel = num\n stream.lastObj = obj\n stream.lastMsg = msg\n stream.lastTime = t.slice(this[timeSliceIndexSym])\n stream.lastLogger = this // for child loggers\n }\n stream.write(streamWriteHook ? streamWriteHook(s) : s)\n}\n\nfunction flush (cb) {\n if (cb != null && typeof cb !== 'function') {\n throw Error('callback must be a function')\n }\n\n const stream = this[streamSym]\n\n if (typeof stream.flush === 'function') {\n stream.flush(cb || noop)\n } else if (cb) cb()\n}\n",
31
+ "'use strict'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst stringify = configure()\n\n// @ts-expect-error\nstringify.configure = configure\n// @ts-expect-error\nstringify.stringify = stringify\n\n// @ts-expect-error\nstringify.default = stringify\n\n// @ts-expect-error used for named export\nexports.stringify = stringify\n// @ts-expect-error used for named export\nexports.configure = configure\n\nmodule.exports = stringify\n\n// eslint-disable-next-line no-control-regex\nconst strEscapeSequencesRegExp = /[\\u0000-\\u001f\\u0022\\u005c\\ud800-\\udfff]/\n\n// Escape C0 control characters, double quotes, the backslash and every code\n// unit with a numeric value in the inclusive range 0xD800 to 0xDFFF.\nfunction strEscape (str) {\n // Some magic numbers that worked out fine while benchmarking with v8 8.0\n if (str.length < 5000 && !strEscapeSequencesRegExp.test(str)) {\n return `\"${str}\"`\n }\n return JSON.stringify(str)\n}\n\nfunction sort (array, comparator) {\n // Insertion sort is very efficient for small input sizes, but it has a bad\n // worst case complexity. Thus, use native array sort for bigger values.\n if (array.length > 2e2 || comparator) {\n return array.sort(comparator)\n }\n for (let i = 1; i < array.length; i++) {\n const currentValue = array[i]\n let position = i\n while (position !== 0 && array[position - 1] > currentValue) {\n array[position] = array[position - 1]\n position--\n }\n array[position] = currentValue\n }\n return array\n}\n\nconst typedArrayPrototypeGetSymbolToStringTag =\n Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(\n Object.getPrototypeOf(\n new Int8Array()\n )\n ),\n Symbol.toStringTag\n ).get\n\nfunction isTypedArrayWithEntries (value) {\n return typedArrayPrototypeGetSymbolToStringTag.call(value) !== undefined && value.length !== 0\n}\n\nfunction stringifyTypedArray (array, separator, maximumBreadth) {\n if (array.length < maximumBreadth) {\n maximumBreadth = array.length\n }\n const whitespace = separator === ',' ? '' : ' '\n let res = `\"0\":${whitespace}${array[0]}`\n for (let i = 1; i < maximumBreadth; i++) {\n res += `${separator}\"${i}\":${whitespace}${array[i]}`\n }\n return res\n}\n\nfunction getCircularValueOption (options) {\n if (hasOwnProperty.call(options, 'circularValue')) {\n const circularValue = options.circularValue\n if (typeof circularValue === 'string') {\n return `\"${circularValue}\"`\n }\n if (circularValue == null) {\n return circularValue\n }\n if (circularValue === Error || circularValue === TypeError) {\n return {\n toString () {\n throw new TypeError('Converting circular structure to JSON')\n }\n }\n }\n throw new TypeError('The \"circularValue\" argument must be of type string or the value null or undefined')\n }\n return '\"[Circular]\"'\n}\n\nfunction getDeterministicOption (options) {\n let value\n if (hasOwnProperty.call(options, 'deterministic')) {\n value = options.deterministic\n if (typeof value !== 'boolean' && typeof value !== 'function') {\n throw new TypeError('The \"deterministic\" argument must be of type boolean or comparator function')\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getBooleanOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'boolean') {\n throw new TypeError(`The \"${key}\" argument must be of type boolean`)\n }\n }\n return value === undefined ? true : value\n}\n\nfunction getPositiveIntegerOption (options, key) {\n let value\n if (hasOwnProperty.call(options, key)) {\n value = options[key]\n if (typeof value !== 'number') {\n throw new TypeError(`The \"${key}\" argument must be of type number`)\n }\n if (!Number.isInteger(value)) {\n throw new TypeError(`The \"${key}\" argument must be an integer`)\n }\n if (value < 1) {\n throw new RangeError(`The \"${key}\" argument must be >= 1`)\n }\n }\n return value === undefined ? Infinity : value\n}\n\nfunction getItemCount (number) {\n if (number === 1) {\n return '1 item'\n }\n return `${number} items`\n}\n\nfunction getUniqueReplacerSet (replacerArray) {\n const replacerSet = new Set()\n for (const value of replacerArray) {\n if (typeof value === 'string' || typeof value === 'number') {\n replacerSet.add(String(value))\n }\n }\n return replacerSet\n}\n\nfunction getStrictOption (options) {\n if (hasOwnProperty.call(options, 'strict')) {\n const value = options.strict\n if (typeof value !== 'boolean') {\n throw new TypeError('The \"strict\" argument must be of type boolean')\n }\n if (value) {\n return (value) => {\n let message = `Object can not safely be stringified. Received type ${typeof value}`\n if (typeof value !== 'function') message += ` (${value.toString()})`\n throw new Error(message)\n }\n }\n }\n}\n\nfunction configure (options) {\n options = { ...options }\n const fail = getStrictOption(options)\n if (fail) {\n if (options.bigint === undefined) {\n options.bigint = false\n }\n if (!('circularValue' in options)) {\n options.circularValue = Error\n }\n }\n const circularValue = getCircularValueOption(options)\n const bigint = getBooleanOption(options, 'bigint')\n const deterministic = getDeterministicOption(options)\n const comparator = typeof deterministic === 'function' ? deterministic : undefined\n const maximumDepth = getPositiveIntegerOption(options, 'maximumDepth')\n const maximumBreadth = getPositiveIntegerOption(options, 'maximumBreadth')\n\n function stringifyFnReplacer (key, parent, stack, replacer, spacer, indentation) {\n let value = parent[key]\n\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n value = replacer.call(parent, key, value)\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n let join = ','\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyFnReplacer(String(i), value, stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let whitespace = ''\n let separator = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n const maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (deterministic && !isTypedArrayWithEntries(value)) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyFnReplacer(key, value, stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":${whitespace}\"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyArrayReplacer (key, value, stack, replacer, spacer, indentation) {\n if (typeof value === 'object' && value !== null && typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n }\n\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n const originalIndentation = indentation\n let res = ''\n let join = ','\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n if (spacer !== '') {\n indentation += spacer\n res += `\\n${indentation}`\n join = `,\\n${indentation}`\n }\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyArrayReplacer(String(i), value[i], stack, replacer, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n if (spacer !== '') {\n res += `\\n${originalIndentation}`\n }\n stack.pop()\n return `[${res}]`\n }\n stack.push(value)\n let whitespace = ''\n if (spacer !== '') {\n indentation += spacer\n join = `,\\n${indentation}`\n whitespace = ' '\n }\n let separator = ''\n for (const key of replacer) {\n const tmp = stringifyArrayReplacer(key, value[key], stack, replacer, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${whitespace}${tmp}`\n separator = join\n }\n }\n if (spacer !== '' && separator.length > 1) {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifyIndent (key, value, stack, spacer, indentation) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again.\n if (typeof value !== 'object') {\n return stringifyIndent(key, value, stack, spacer, indentation)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n const originalIndentation = indentation\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n indentation += spacer\n let res = `\\n${indentation}`\n const join = `,\\n${indentation}`\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n res += join\n }\n const tmp = stringifyIndent(String(i), value[i], stack, spacer, indentation)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `${join}\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n res += `\\n${originalIndentation}`\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n indentation += spacer\n const join = `,\\n${indentation}`\n let res = ''\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, join, maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = join\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifyIndent(key, value[key], stack, spacer, indentation)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}: ${tmp}`\n separator = join\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\": \"${getItemCount(removedKeys)} not stringified\"`\n separator = join\n }\n if (separator !== '') {\n res = `\\n${indentation}${res}\\n${originalIndentation}`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringifySimple (key, value, stack) {\n switch (typeof value) {\n case 'string':\n return strEscape(value)\n case 'object': {\n if (value === null) {\n return 'null'\n }\n if (typeof value.toJSON === 'function') {\n value = value.toJSON(key)\n // Prevent calling `toJSON` again\n if (typeof value !== 'object') {\n return stringifySimple(key, value, stack)\n }\n if (value === null) {\n return 'null'\n }\n }\n if (stack.indexOf(value) !== -1) {\n return circularValue\n }\n\n let res = ''\n\n const hasLength = value.length !== undefined\n if (hasLength && Array.isArray(value)) {\n if (value.length === 0) {\n return '[]'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Array]\"'\n }\n stack.push(value)\n const maximumValuesToStringify = Math.min(value.length, maximumBreadth)\n let i = 0\n for (; i < maximumValuesToStringify - 1; i++) {\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n res += ','\n }\n const tmp = stringifySimple(String(i), value[i], stack)\n res += tmp !== undefined ? tmp : 'null'\n if (value.length - 1 > maximumBreadth) {\n const removedKeys = value.length - maximumBreadth - 1\n res += `,\"... ${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `[${res}]`\n }\n\n let keys = Object.keys(value)\n const keyLength = keys.length\n if (keyLength === 0) {\n return '{}'\n }\n if (maximumDepth < stack.length + 1) {\n return '\"[Object]\"'\n }\n let separator = ''\n let maximumPropertiesToStringify = Math.min(keyLength, maximumBreadth)\n if (hasLength && isTypedArrayWithEntries(value)) {\n res += stringifyTypedArray(value, ',', maximumBreadth)\n keys = keys.slice(value.length)\n maximumPropertiesToStringify -= value.length\n separator = ','\n }\n if (deterministic) {\n keys = sort(keys, comparator)\n }\n stack.push(value)\n for (let i = 0; i < maximumPropertiesToStringify; i++) {\n const key = keys[i]\n const tmp = stringifySimple(key, value[key], stack)\n if (tmp !== undefined) {\n res += `${separator}${strEscape(key)}:${tmp}`\n separator = ','\n }\n }\n if (keyLength > maximumBreadth) {\n const removedKeys = keyLength - maximumBreadth\n res += `${separator}\"...\":\"${getItemCount(removedKeys)} not stringified\"`\n }\n stack.pop()\n return `{${res}}`\n }\n case 'number':\n return isFinite(value) ? String(value) : fail ? fail(value) : 'null'\n case 'boolean':\n return value === true ? 'true' : 'false'\n case 'undefined':\n return undefined\n case 'bigint':\n if (bigint) {\n return String(value)\n }\n // fallthrough\n default:\n return fail ? fail(value) : undefined\n }\n }\n\n function stringify (value, replacer, space) {\n if (arguments.length > 1) {\n let spacer = ''\n if (typeof space === 'number') {\n spacer = ' '.repeat(Math.min(space, 10))\n } else if (typeof space === 'string') {\n spacer = space.slice(0, 10)\n }\n if (replacer != null) {\n if (typeof replacer === 'function') {\n return stringifyFnReplacer('', { '': value }, [], replacer, spacer, '')\n }\n if (Array.isArray(replacer)) {\n return stringifyArrayReplacer('', value, [], getUniqueReplacerSet(replacer), spacer, '')\n }\n }\n if (spacer.length !== 0) {\n return stringifyIndent('', value, [], spacer, '')\n }\n }\n return stringifySimple('', value, [])\n }\n\n return stringify\n}\n",
32
+ "'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst { DEFAULT_LEVELS } = require('./constants')\n\nconst DEFAULT_INFO_LEVEL = DEFAULT_LEVELS.info\n\nfunction multistream (streamsArray, opts) {\n streamsArray = streamsArray || []\n opts = opts || { dedupe: false }\n\n const streamLevels = Object.create(DEFAULT_LEVELS)\n streamLevels.silent = Infinity\n if (opts.levels && typeof opts.levels === 'object') {\n Object.keys(opts.levels).forEach(i => {\n streamLevels[i] = opts.levels[i]\n })\n }\n\n const res = {\n write,\n add,\n remove,\n emit,\n flushSync,\n end,\n minLevel: 0,\n lastId: 0,\n streams: [],\n clone,\n [metadata]: true,\n streamLevels\n }\n\n if (Array.isArray(streamsArray)) {\n streamsArray.forEach(add, res)\n } else {\n add.call(res, streamsArray)\n }\n\n // clean this object up\n // or it will stay allocated forever\n // as it is closed on the following closures\n streamsArray = null\n\n return res\n\n // we can exit early because the streams are ordered by level\n function write (data) {\n let dest\n const level = this.lastLevel\n const { streams } = this\n // for handling situation when several streams has the same level\n let recordedLevel = 0\n let stream\n\n // if dedupe set to true we send logs to the stream with the highest level\n // therefore, we have to change sorting order\n for (let i = initLoopVar(streams.length, opts.dedupe); checkLoopVar(i, streams.length, opts.dedupe); i = adjustLoopVar(i, opts.dedupe)) {\n dest = streams[i]\n if (dest.level <= level) {\n if (recordedLevel !== 0 && recordedLevel !== dest.level) {\n break\n }\n stream = dest.stream\n if (stream[metadata]) {\n const { lastTime, lastMsg, lastObj, lastLogger } = this\n stream.lastLevel = level\n stream.lastTime = lastTime\n stream.lastMsg = lastMsg\n stream.lastObj = lastObj\n stream.lastLogger = lastLogger\n }\n stream.write(data)\n if (opts.dedupe) {\n recordedLevel = dest.level\n }\n } else if (!opts.dedupe) {\n break\n }\n }\n }\n\n function emit (...args) {\n for (const { stream } of this.streams) {\n if (typeof stream.emit === 'function') {\n stream.emit(...args)\n }\n }\n }\n\n function flushSync () {\n for (const { stream } of this.streams) {\n if (typeof stream.flushSync === 'function') {\n stream.flushSync()\n }\n }\n }\n\n function add (dest) {\n if (!dest) {\n return res\n }\n\n // Check that dest implements either StreamEntry or DestinationStream\n const isStream = typeof dest.write === 'function' || dest.stream\n const stream_ = dest.write ? dest : dest.stream\n // This is necessary to provide a meaningful error message, otherwise it throws somewhere inside write()\n if (!isStream) {\n throw Error('stream object needs to implement either StreamEntry or DestinationStream interface')\n }\n\n const { streams, streamLevels } = this\n\n let level\n if (typeof dest.levelVal === 'number') {\n level = dest.levelVal\n } else if (typeof dest.level === 'string') {\n level = streamLevels[dest.level]\n } else if (typeof dest.level === 'number') {\n level = dest.level\n } else {\n level = DEFAULT_INFO_LEVEL\n }\n\n const dest_ = {\n stream: stream_,\n level,\n levelVal: undefined,\n id: ++res.lastId\n }\n\n streams.unshift(dest_)\n streams.sort(compareByLevel)\n\n this.minLevel = streams[0].level\n\n return res\n }\n\n function remove (id) {\n const { streams } = this\n const index = streams.findIndex(s => s.id === id)\n\n if (index >= 0) {\n streams.splice(index, 1)\n streams.sort(compareByLevel)\n this.minLevel = streams.length > 0 ? streams[0].level : -1\n }\n\n return res\n }\n\n function end () {\n for (const { stream } of this.streams) {\n if (typeof stream.flushSync === 'function') {\n stream.flushSync()\n }\n stream.end()\n }\n }\n\n function clone (level) {\n const streams = new Array(this.streams.length)\n\n for (let i = 0; i < streams.length; i++) {\n streams[i] = {\n level,\n stream: this.streams[i].stream\n }\n }\n\n return {\n write,\n add,\n remove,\n minLevel: level,\n streams,\n clone,\n emit,\n flushSync,\n [metadata]: true\n }\n }\n}\n\nfunction compareByLevel (a, b) {\n return a.level - b.level\n}\n\nfunction initLoopVar (length, dedupe) {\n return dedupe ? length - 1 : 0\n}\n\nfunction adjustLoopVar (i, dedupe) {\n return dedupe ? i - 1 : i + 1\n}\n\nfunction checkLoopVar (i, length, dedupe) {\n return dedupe ? i >= 0 : i < length\n}\n\nmodule.exports = multistream\n",
33
+ "'use strict'\n\nconst os = require('node:os')\nconst stdSerializers = require('pino-std-serializers')\nconst caller = require('./lib/caller')\nconst redaction = require('./lib/redaction')\nconst time = require('./lib/time')\nconst proto = require('./lib/proto')\nconst symbols = require('./lib/symbols')\nconst { configure } = require('safe-stable-stringify')\nconst { assertDefaultLevelFound, mappings, genLsCache, genLevelComparison, assertLevelComparison } = require('./lib/levels')\nconst { DEFAULT_LEVELS, SORTING_ORDER } = require('./lib/constants')\nconst {\n createArgsNormalizer,\n asChindings,\n buildSafeSonicBoom,\n buildFormatters,\n stringify,\n normalizeDestFileDescriptor,\n noop\n} = require('./lib/tools')\nconst { version } = require('./lib/meta')\nconst {\n chindingsSym,\n redactFmtSym,\n serializersSym,\n timeSym,\n timeSliceIndexSym,\n streamSym,\n stringifySym,\n stringifySafeSym,\n stringifiersSym,\n setLevelSym,\n endSym,\n formatOptsSym,\n messageKeySym,\n errorKeySym,\n nestedKeySym,\n mixinSym,\n levelCompSym,\n useOnlyCustomLevelsSym,\n formattersSym,\n hooksSym,\n nestedKeyStrSym,\n mixinMergeStrategySym,\n msgPrefixSym\n} = symbols\nconst { epochTime, nullTime } = time\nconst { pid } = process\nconst hostname = os.hostname()\nconst defaultErrorSerializer = stdSerializers.err\nconst defaultOptions = {\n level: 'info',\n levelComparison: SORTING_ORDER.ASC,\n levels: DEFAULT_LEVELS,\n messageKey: 'msg',\n errorKey: 'err',\n nestedKey: null,\n enabled: true,\n base: { pid, hostname },\n serializers: Object.assign(Object.create(null), {\n err: defaultErrorSerializer\n }),\n formatters: Object.assign(Object.create(null), {\n bindings (bindings) {\n return bindings\n },\n level (label, number) {\n return { level: number }\n }\n }),\n hooks: {\n logMethod: undefined,\n streamWrite: undefined\n },\n timestamp: epochTime,\n name: undefined,\n redact: null,\n customLevels: null,\n useOnlyCustomLevels: false,\n depthLimit: 5,\n edgeLimit: 100\n}\n\nconst normalize = createArgsNormalizer(defaultOptions)\n\nconst serializers = Object.assign(Object.create(null), stdSerializers)\n\nfunction pino (...args) {\n const instance = {}\n const { opts, stream } = normalize(instance, caller(), ...args)\n\n if (opts.level && typeof opts.level === 'string' && DEFAULT_LEVELS[opts.level.toLowerCase()] !== undefined) opts.level = opts.level.toLowerCase()\n\n const {\n redact,\n crlf,\n serializers,\n timestamp,\n messageKey,\n errorKey,\n nestedKey,\n base,\n name,\n level,\n customLevels,\n levelComparison,\n mixin,\n mixinMergeStrategy,\n useOnlyCustomLevels,\n formatters,\n hooks,\n depthLimit,\n edgeLimit,\n onChild,\n msgPrefix\n } = opts\n\n const stringifySafe = configure({\n maximumDepth: depthLimit,\n maximumBreadth: edgeLimit\n })\n\n const allFormatters = buildFormatters(\n formatters.level,\n formatters.bindings,\n formatters.log\n )\n\n const stringifyFn = stringify.bind({\n [stringifySafeSym]: stringifySafe\n })\n const stringifiers = redact ? redaction(redact, stringifyFn) : {}\n const formatOpts = redact\n ? { stringify: stringifiers[redactFmtSym] }\n : { stringify: stringifyFn }\n const end = '}' + (crlf ? '\\r\\n' : '\\n')\n const coreChindings = asChindings.bind(null, {\n [chindingsSym]: '',\n [serializersSym]: serializers,\n [stringifiersSym]: stringifiers,\n [stringifySym]: stringify,\n [stringifySafeSym]: stringifySafe,\n [formattersSym]: allFormatters\n })\n\n let chindings = ''\n if (base !== null) {\n if (name === undefined) {\n chindings = coreChindings(base)\n } else {\n chindings = coreChindings(Object.assign({}, base, { name }))\n }\n }\n\n const time = (timestamp instanceof Function)\n ? timestamp\n : (timestamp ? epochTime : nullTime)\n const timeSliceIndex = time().indexOf(':') + 1\n\n if (useOnlyCustomLevels && !customLevels) throw Error('customLevels is required if useOnlyCustomLevels is set true')\n if (mixin && typeof mixin !== 'function') throw Error(`Unknown mixin type \"${typeof mixin}\" - expected \"function\"`)\n if (msgPrefix && typeof msgPrefix !== 'string') throw Error(`Unknown msgPrefix type \"${typeof msgPrefix}\" - expected \"string\"`)\n\n assertDefaultLevelFound(level, customLevels, useOnlyCustomLevels)\n const levels = mappings(customLevels, useOnlyCustomLevels)\n\n if (typeof stream.emit === 'function') {\n stream.emit('message', { code: 'PINO_CONFIG', config: { levels, messageKey, errorKey } })\n }\n\n assertLevelComparison(levelComparison)\n const levelCompFunc = genLevelComparison(levelComparison)\n\n Object.assign(instance, {\n levels,\n [levelCompSym]: levelCompFunc,\n [useOnlyCustomLevelsSym]: useOnlyCustomLevels,\n [streamSym]: stream,\n [timeSym]: time,\n [timeSliceIndexSym]: timeSliceIndex,\n [stringifySym]: stringify,\n [stringifySafeSym]: stringifySafe,\n [stringifiersSym]: stringifiers,\n [endSym]: end,\n [formatOptsSym]: formatOpts,\n [messageKeySym]: messageKey,\n [errorKeySym]: errorKey,\n [nestedKeySym]: nestedKey,\n // protect against injection\n [nestedKeyStrSym]: nestedKey ? `,${JSON.stringify(nestedKey)}:{` : '',\n [serializersSym]: serializers,\n [mixinSym]: mixin,\n [mixinMergeStrategySym]: mixinMergeStrategy,\n [chindingsSym]: chindings,\n [formattersSym]: allFormatters,\n [hooksSym]: hooks,\n silent: noop,\n onChild,\n [msgPrefixSym]: msgPrefix\n })\n\n Object.setPrototypeOf(instance, proto())\n\n genLsCache(instance)\n\n instance[setLevelSym](level)\n\n return instance\n}\n\nmodule.exports = pino\n\nmodule.exports.destination = (dest = process.stdout.fd) => {\n if (typeof dest === 'object') {\n dest.dest = normalizeDestFileDescriptor(dest.dest || process.stdout.fd)\n return buildSafeSonicBoom(dest)\n } else {\n return buildSafeSonicBoom({ dest: normalizeDestFileDescriptor(dest), minLength: 0 })\n }\n}\n\nmodule.exports.transport = require('./lib/transport')\nmodule.exports.multistream = require('./lib/multistream')\n\nmodule.exports.levels = mappings()\nmodule.exports.stdSerializers = serializers\nmodule.exports.stdTimeFunctions = Object.assign({}, time)\nmodule.exports.symbols = symbols\nmodule.exports.version = version\n\n// Enables default and name export with TypeScript and Babel\nmodule.exports.default = pino\nmodule.exports.pino = pino\n",
34
+ "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar tty = require('tty');\n\nfunction _interopNamespace(e) {\n if (e && e.__esModule) return e;\n var n = Object.create(null);\n if (e) {\n Object.keys(e).forEach(function (k) {\n if (k !== 'default') {\n var d = Object.getOwnPropertyDescriptor(e, k);\n Object.defineProperty(n, k, d.get ? d : {\n enumerable: true,\n get: function () { return e[k]; }\n });\n }\n });\n }\n n[\"default\"] = e;\n return Object.freeze(n);\n}\n\nvar tty__namespace = /*#__PURE__*/_interopNamespace(tty);\n\nconst {\n env = {},\n argv = [],\n platform = \"\",\n} = typeof process === \"undefined\" ? {} : process;\n\nconst isDisabled = \"NO_COLOR\" in env || argv.includes(\"--no-color\");\nconst isForced = \"FORCE_COLOR\" in env || argv.includes(\"--color\");\nconst isWindows = platform === \"win32\";\nconst isDumbTerminal = env.TERM === \"dumb\";\n\nconst isCompatibleTerminal =\n tty__namespace && tty__namespace.isatty && tty__namespace.isatty(1) && env.TERM && !isDumbTerminal;\n\nconst isCI =\n \"CI\" in env &&\n (\"GITHUB_ACTIONS\" in env || \"GITLAB_CI\" in env || \"CIRCLECI\" in env);\n\nconst isColorSupported =\n !isDisabled &&\n (isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI);\n\nconst replaceClose = (\n index,\n string,\n close,\n replace,\n head = string.substring(0, index) + replace,\n tail = string.substring(index + close.length),\n next = tail.indexOf(close)\n) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace));\n\nconst clearBleed = (index, string, open, close, replace) =>\n index < 0\n ? open + string + close\n : open + replaceClose(index, string, close, replace) + close;\n\nconst filterEmpty =\n (open, close, replace = open, at = open.length + 1) =>\n (string) =>\n string || !(string === \"\" || string === undefined)\n ? clearBleed(\n (\"\" + string).indexOf(close, at),\n string,\n open,\n close,\n replace\n )\n : \"\";\n\nconst init = (open, close, replace) =>\n filterEmpty(`\\x1b[${open}m`, `\\x1b[${close}m`, replace);\n\nconst colors = {\n reset: init(0, 0),\n bold: init(1, 22, \"\\x1b[22m\\x1b[1m\"),\n dim: init(2, 22, \"\\x1b[22m\\x1b[2m\"),\n italic: init(3, 23),\n underline: init(4, 24),\n inverse: init(7, 27),\n hidden: init(8, 28),\n strikethrough: init(9, 29),\n black: init(30, 39),\n red: init(31, 39),\n green: init(32, 39),\n yellow: init(33, 39),\n blue: init(34, 39),\n magenta: init(35, 39),\n cyan: init(36, 39),\n white: init(37, 39),\n gray: init(90, 39),\n bgBlack: init(40, 49),\n bgRed: init(41, 49),\n bgGreen: init(42, 49),\n bgYellow: init(43, 49),\n bgBlue: init(44, 49),\n bgMagenta: init(45, 49),\n bgCyan: init(46, 49),\n bgWhite: init(47, 49),\n blackBright: init(90, 39),\n redBright: init(91, 39),\n greenBright: init(92, 39),\n yellowBright: init(93, 39),\n blueBright: init(94, 39),\n magentaBright: init(95, 39),\n cyanBright: init(96, 39),\n whiteBright: init(97, 39),\n bgBlackBright: init(100, 49),\n bgRedBright: init(101, 49),\n bgGreenBright: init(102, 49),\n bgYellowBright: init(103, 49),\n bgBlueBright: init(104, 49),\n bgMagentaBright: init(105, 49),\n bgCyanBright: init(106, 49),\n bgWhiteBright: init(107, 49),\n};\n\nconst createColors = ({ useColor = isColorSupported } = {}) =>\n useColor\n ? colors\n : Object.keys(colors).reduce(\n (colors, key) => ({ ...colors, [key]: String }),\n {}\n );\n\nconst {\n reset,\n bold,\n dim,\n italic,\n underline,\n inverse,\n hidden,\n strikethrough,\n black,\n red,\n green,\n yellow,\n blue,\n magenta,\n cyan,\n white,\n gray,\n bgBlack,\n bgRed,\n bgGreen,\n bgYellow,\n bgBlue,\n bgMagenta,\n bgCyan,\n bgWhite,\n blackBright,\n redBright,\n greenBright,\n yellowBright,\n blueBright,\n magentaBright,\n cyanBright,\n whiteBright,\n bgBlackBright,\n bgRedBright,\n bgGreenBright,\n bgYellowBright,\n bgBlueBright,\n bgMagentaBright,\n bgCyanBright,\n bgWhiteBright,\n} = createColors();\n\nexports.bgBlack = bgBlack;\nexports.bgBlackBright = bgBlackBright;\nexports.bgBlue = bgBlue;\nexports.bgBlueBright = bgBlueBright;\nexports.bgCyan = bgCyan;\nexports.bgCyanBright = bgCyanBright;\nexports.bgGreen = bgGreen;\nexports.bgGreenBright = bgGreenBright;\nexports.bgMagenta = bgMagenta;\nexports.bgMagentaBright = bgMagentaBright;\nexports.bgRed = bgRed;\nexports.bgRedBright = bgRedBright;\nexports.bgWhite = bgWhite;\nexports.bgWhiteBright = bgWhiteBright;\nexports.bgYellow = bgYellow;\nexports.bgYellowBright = bgYellowBright;\nexports.black = black;\nexports.blackBright = blackBright;\nexports.blue = blue;\nexports.blueBright = blueBright;\nexports.bold = bold;\nexports.createColors = createColors;\nexports.cyan = cyan;\nexports.cyanBright = cyanBright;\nexports.dim = dim;\nexports.gray = gray;\nexports.green = green;\nexports.greenBright = greenBright;\nexports.hidden = hidden;\nexports.inverse = inverse;\nexports.isColorSupported = isColorSupported;\nexports.italic = italic;\nexports.magenta = magenta;\nexports.magentaBright = magentaBright;\nexports.red = red;\nexports.redBright = redBright;\nexports.reset = reset;\nexports.strikethrough = strikethrough;\nexports.underline = underline;\nexports.white = white;\nexports.whiteBright = whiteBright;\nexports.yellow = yellow;\nexports.yellowBright = yellowBright;\n",
35
+ "// Returns a wrapper function that returns a wrapped callback\n// The wrapper function should do some stuff, and return a\n// presumably different callback function.\n// This makes sure that own properties are retained, so that\n// decorations and such are not lost along the way.\nmodule.exports = wrappy\nfunction wrappy (fn, cb) {\n if (fn && cb) return wrappy(fn)(cb)\n\n if (typeof fn !== 'function')\n throw new TypeError('need wrapper function')\n\n Object.keys(fn).forEach(function (k) {\n wrapper[k] = fn[k]\n })\n\n return wrapper\n\n function wrapper() {\n var args = new Array(arguments.length)\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n var ret = fn.apply(this, args)\n var cb = args[args.length-1]\n if (typeof ret === 'function' && ret !== cb) {\n Object.keys(cb).forEach(function (k) {\n ret[k] = cb[k]\n })\n }\n return ret\n }\n}\n",
36
+ "var wrappy = require('wrappy')\nmodule.exports = wrappy(once)\nmodule.exports.strict = wrappy(onceStrict)\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n\n Object.defineProperty(Function.prototype, 'onceStrict', {\n value: function () {\n return onceStrict(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var f = function () {\n if (f.called) return f.value\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n f.called = false\n return f\n}\n\nfunction onceStrict (fn) {\n var f = function () {\n if (f.called)\n throw new Error(f.onceError)\n f.called = true\n return f.value = fn.apply(this, arguments)\n }\n var name = fn.name || 'Function wrapped with `once`'\n f.onceError = name + \" shouldn't be called more than once\"\n f.called = false\n return f\n}\n",
37
+ "var once = require('once');\n\nvar noop = function() {};\n\nvar qnt = global.Bare ? queueMicrotask : process.nextTick.bind(process);\n\nvar isRequest = function(stream) {\n\treturn stream.setHeader && typeof stream.abort === 'function';\n};\n\nvar isChildProcess = function(stream) {\n\treturn stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3\n};\n\nvar eos = function(stream, opts, callback) {\n\tif (typeof opts === 'function') return eos(stream, null, opts);\n\tif (!opts) opts = {};\n\n\tcallback = once(callback || noop);\n\n\tvar ws = stream._writableState;\n\tvar rs = stream._readableState;\n\tvar readable = opts.readable || (opts.readable !== false && stream.readable);\n\tvar writable = opts.writable || (opts.writable !== false && stream.writable);\n\tvar cancelled = false;\n\n\tvar onlegacyfinish = function() {\n\t\tif (!stream.writable) onfinish();\n\t};\n\n\tvar onfinish = function() {\n\t\twritable = false;\n\t\tif (!readable) callback.call(stream);\n\t};\n\n\tvar onend = function() {\n\t\treadable = false;\n\t\tif (!writable) callback.call(stream);\n\t};\n\n\tvar onexit = function(exitCode) {\n\t\tcallback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);\n\t};\n\n\tvar onerror = function(err) {\n\t\tcallback.call(stream, err);\n\t};\n\n\tvar onclose = function() {\n\t\tqnt(onclosenexttick);\n\t};\n\n\tvar onclosenexttick = function() {\n\t\tif (cancelled) return;\n\t\tif (readable && !(rs && (rs.ended && !rs.destroyed))) return callback.call(stream, new Error('premature close'));\n\t\tif (writable && !(ws && (ws.ended && !ws.destroyed))) return callback.call(stream, new Error('premature close'));\n\t};\n\n\tvar onrequest = function() {\n\t\tstream.req.on('finish', onfinish);\n\t};\n\n\tif (isRequest(stream)) {\n\t\tstream.on('complete', onfinish);\n\t\tstream.on('abort', onclose);\n\t\tif (stream.req) onrequest();\n\t\telse stream.on('request', onrequest);\n\t} else if (writable && !ws) { // legacy streams\n\t\tstream.on('end', onlegacyfinish);\n\t\tstream.on('close', onlegacyfinish);\n\t}\n\n\tif (isChildProcess(stream)) stream.on('exit', onexit);\n\n\tstream.on('end', onend);\n\tstream.on('finish', onfinish);\n\tif (opts.error !== false) stream.on('error', onerror);\n\tstream.on('close', onclose);\n\n\treturn function() {\n\t\tcancelled = true;\n\t\tstream.removeListener('complete', onfinish);\n\t\tstream.removeListener('abort', onclose);\n\t\tstream.removeListener('request', onrequest);\n\t\tif (stream.req) stream.req.removeListener('finish', onfinish);\n\t\tstream.removeListener('end', onlegacyfinish);\n\t\tstream.removeListener('close', onlegacyfinish);\n\t\tstream.removeListener('finish', onfinish);\n\t\tstream.removeListener('exit', onexit);\n\t\tstream.removeListener('end', onend);\n\t\tstream.removeListener('error', onerror);\n\t\tstream.removeListener('close', onclose);\n\t};\n};\n\nmodule.exports = eos;\n",
38
+ "var once = require('once')\nvar eos = require('end-of-stream')\nvar fs\n\ntry {\n fs = require('fs') // we only need fs to get the ReadStream and WriteStream prototypes\n} catch (e) {}\n\nvar noop = function () {}\nvar ancient = typeof process === 'undefined' ? false : /^v?\\.0/.test(process.version)\n\nvar isFn = function (fn) {\n return typeof fn === 'function'\n}\n\nvar isFS = function (stream) {\n if (!ancient) return false // newer node version do not need to care about fs is a special way\n if (!fs) return false // browser\n return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)\n}\n\nvar isRequest = function (stream) {\n return stream.setHeader && isFn(stream.abort)\n}\n\nvar destroyer = function (stream, reading, writing, callback) {\n callback = once(callback)\n\n var closed = false\n stream.on('close', function () {\n closed = true\n })\n\n eos(stream, {readable: reading, writable: writing}, function (err) {\n if (err) return callback(err)\n closed = true\n callback()\n })\n\n var destroyed = false\n return function (err) {\n if (closed) return\n if (destroyed) return\n destroyed = true\n\n if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks\n if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want\n\n if (isFn(stream.destroy)) return stream.destroy()\n\n callback(err || new Error('stream was destroyed'))\n }\n}\n\nvar call = function (fn) {\n fn()\n}\n\nvar pipe = function (from, to) {\n return from.pipe(to)\n}\n\nvar pump = function () {\n var streams = Array.prototype.slice.call(arguments)\n var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop\n\n if (Array.isArray(streams[0])) streams = streams[0]\n if (streams.length < 2) throw new Error('pump requires two streams per minimum')\n\n var error\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1\n var writing = i > 0\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err\n if (err) destroys.forEach(call)\n if (reading) return\n destroys.forEach(call)\n callback(error)\n })\n })\n\n return streams.reduce(pipe)\n}\n\nmodule.exports = pump\n",
39
+ "/*\nCopyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\n'use strict'\n\nconst { Transform } = require('stream')\nconst { StringDecoder } = require('string_decoder')\nconst kLast = Symbol('last')\nconst kDecoder = Symbol('decoder')\n\nfunction transform (chunk, enc, cb) {\n let list\n if (this.overflow) { // Line buffer is full. Skip to start of next line.\n const buf = this[kDecoder].write(chunk)\n list = buf.split(this.matcher)\n\n if (list.length === 1) return cb() // Line ending not found. Discard entire chunk.\n\n // Line ending found. Discard trailing fragment of previous line and reset overflow state.\n list.shift()\n this.overflow = false\n } else {\n this[kLast] += this[kDecoder].write(chunk)\n list = this[kLast].split(this.matcher)\n }\n\n this[kLast] = list.pop()\n\n for (let i = 0; i < list.length; i++) {\n try {\n push(this, this.mapper(list[i]))\n } catch (error) {\n return cb(error)\n }\n }\n\n this.overflow = this[kLast].length > this.maxLength\n if (this.overflow && !this.skipOverflow) {\n cb(new Error('maximum buffer reached'))\n return\n }\n\n cb()\n}\n\nfunction flush (cb) {\n // forward any gibberish left in there\n this[kLast] += this[kDecoder].end()\n\n if (this[kLast]) {\n try {\n push(this, this.mapper(this[kLast]))\n } catch (error) {\n return cb(error)\n }\n }\n\n cb()\n}\n\nfunction push (self, val) {\n if (val !== undefined) {\n self.push(val)\n }\n}\n\nfunction noop (incoming) {\n return incoming\n}\n\nfunction split (matcher, mapper, options) {\n // Set defaults for any arguments not supplied.\n matcher = matcher || /\\r?\\n/\n mapper = mapper || noop\n options = options || {}\n\n // Test arguments explicitly.\n switch (arguments.length) {\n case 1:\n // If mapper is only argument.\n if (typeof matcher === 'function') {\n mapper = matcher\n matcher = /\\r?\\n/\n // If options is only argument.\n } else if (typeof matcher === 'object' && !(matcher instanceof RegExp) && !matcher[Symbol.split]) {\n options = matcher\n matcher = /\\r?\\n/\n }\n break\n\n case 2:\n // If mapper and options are arguments.\n if (typeof matcher === 'function') {\n options = mapper\n mapper = matcher\n matcher = /\\r?\\n/\n // If matcher and options are arguments.\n } else if (typeof mapper === 'object') {\n options = mapper\n mapper = noop\n }\n }\n\n options = Object.assign({}, options)\n options.autoDestroy = true\n options.transform = transform\n options.flush = flush\n options.readableObjectMode = true\n\n const stream = new Transform(options)\n\n stream[kLast] = ''\n stream[kDecoder] = new StringDecoder('utf8')\n stream.matcher = matcher\n stream.mapper = mapper\n stream.maxLength = options.maxLength\n stream.skipOverflow = options.skipOverflow || false\n stream.overflow = false\n stream._destroy = function (err, cb) {\n // Weird Node v12 bug that we need to work around\n this._writableState.errorEmitted = false\n cb(err)\n }\n\n return stream\n}\n\nmodule.exports = split\n",
40
+ "'use strict'\n\nconst metadata = Symbol.for('pino.metadata')\nconst split = require('split2')\nconst { Duplex } = require('stream')\nconst { parentPort, workerData } = require('worker_threads')\n\nfunction createDeferred () {\n let resolve\n let reject\n const promise = new Promise((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n })\n promise.resolve = resolve\n promise.reject = reject\n return promise\n}\n\nmodule.exports = function build (fn, opts = {}) {\n const waitForConfig = opts.expectPinoConfig === true && workerData?.workerData?.pinoWillSendConfig === true\n const parseLines = opts.parse === 'lines'\n const parseLine = typeof opts.parseLine === 'function' ? opts.parseLine : JSON.parse\n const close = opts.close || defaultClose\n const stream = split(function (line) {\n let value\n\n try {\n value = parseLine(line)\n } catch (error) {\n this.emit('unknown', line, error)\n return\n }\n\n if (value === null) {\n this.emit('unknown', line, 'Null value ignored')\n return\n }\n\n if (typeof value !== 'object') {\n value = {\n data: value,\n time: Date.now()\n }\n }\n\n if (stream[metadata]) {\n stream.lastTime = value.time\n stream.lastLevel = value.level\n stream.lastObj = value\n }\n\n if (parseLines) {\n return line\n }\n\n return value\n }, { autoDestroy: true })\n\n stream._destroy = function (err, cb) {\n const promise = close(err, cb)\n if (promise && typeof promise.then === 'function') {\n promise.then(cb, cb)\n }\n }\n\n if (opts.expectPinoConfig === true && workerData?.workerData?.pinoWillSendConfig !== true) {\n setImmediate(() => {\n stream.emit('error', new Error('This transport is not compatible with the current version of pino. Please upgrade pino to the latest version.'))\n })\n }\n\n if (opts.metadata !== false) {\n stream[metadata] = true\n stream.lastTime = 0\n stream.lastLevel = 0\n stream.lastObj = null\n }\n\n if (waitForConfig) {\n let pinoConfig = {}\n const configReceived = createDeferred()\n parentPort.on('message', function handleMessage (message) {\n if (message.code === 'PINO_CONFIG') {\n pinoConfig = message.config\n configReceived.resolve()\n parentPort.off('message', handleMessage)\n }\n })\n\n Object.defineProperties(stream, {\n levels: {\n get () { return pinoConfig.levels }\n },\n messageKey: {\n get () { return pinoConfig.messageKey }\n },\n errorKey: {\n get () { return pinoConfig.errorKey }\n }\n })\n\n return configReceived.then(finish)\n }\n\n return finish()\n\n function finish () {\n let res = fn(stream)\n\n if (res && typeof res.catch === 'function') {\n res.catch((err) => {\n stream.destroy(err)\n })\n\n // set it to null to not retain a reference to the promise\n res = null\n } else if (opts.enablePipelining && res) {\n return Duplex.from({ writable: stream, readable: res })\n }\n\n return stream\n }\n}\n\nfunction defaultClose (err, cb) {\n process.nextTick(cb, err)\n}\n",
41
+ "'use strict'\n\n/**\n * A set of property names that indicate the value represents an error object.\n *\n * @typedef {string[]} K_ERROR_LIKE_KEYS\n */\n\nmodule.exports = {\n DATE_FORMAT: 'yyyy-mm-dd HH:MM:ss.l o',\n DATE_FORMAT_SIMPLE: 'HH:MM:ss.l',\n\n /**\n * @type {K_ERROR_LIKE_KEYS}\n */\n ERROR_LIKE_KEYS: ['err', 'error'],\n\n MESSAGE_KEY: 'msg',\n\n LEVEL_KEY: 'level',\n\n LEVEL_LABEL: 'levelLabel',\n\n TIMESTAMP_KEY: 'time',\n\n LEVELS: {\n default: 'USERLVL',\n 60: 'FATAL',\n 50: 'ERROR',\n 40: 'WARN',\n 30: 'INFO',\n 20: 'DEBUG',\n 10: 'TRACE'\n },\n\n LEVEL_NAMES: {\n fatal: 60,\n error: 50,\n warn: 40,\n info: 30,\n debug: 20,\n trace: 10\n },\n\n // Object keys that probably came from a logger like Pino or Bunyan.\n LOGGER_KEYS: [\n 'pid',\n 'hostname',\n 'name',\n 'level',\n 'time',\n 'timestamp',\n 'caller'\n ]\n}\n",
42
+ "'use strict'\n\nmodule.exports = getLevelLabelData\nconst { LEVELS, LEVEL_NAMES } = require('../constants')\n\n/**\n * Given initial settings for custom levels/names and use of only custom props\n * get the level label that corresponds with a given level number\n *\n * @param {boolean} useOnlyCustomProps\n * @param {object} customLevels\n * @param {object} customLevelNames\n *\n * @returns {function} A function that takes a number level and returns the level's label string\n */\nfunction getLevelLabelData (useOnlyCustomProps, customLevels, customLevelNames) {\n const levels = useOnlyCustomProps ? customLevels || LEVELS : Object.assign({}, LEVELS, customLevels)\n const levelNames = useOnlyCustomProps ? customLevelNames || LEVEL_NAMES : Object.assign({}, LEVEL_NAMES, customLevelNames)\n return function (level) {\n let levelNum = 'default'\n if (Number.isInteger(+level)) {\n levelNum = Object.prototype.hasOwnProperty.call(levels, level) ? level : levelNum\n } else {\n levelNum = Object.prototype.hasOwnProperty.call(levelNames, level.toLowerCase()) ? levelNames[level.toLowerCase()] : levelNum\n }\n\n return [levels[levelNum], levelNum]\n }\n}\n",
43
+ "'use strict'\n\nconst nocolor = input => input\nconst plain = {\n default: nocolor,\n 60: nocolor,\n 50: nocolor,\n 40: nocolor,\n 30: nocolor,\n 20: nocolor,\n 10: nocolor,\n message: nocolor,\n greyMessage: nocolor,\n property: nocolor\n}\n\nconst { createColors } = require('colorette')\nconst getLevelLabelData = require('./utils/get-level-label-data')\nconst availableColors = createColors({ useColor: true })\nconst { white, bgRed, red, yellow, green, blue, gray, cyan, magenta } = availableColors\n\nconst colored = {\n default: white,\n 60: bgRed,\n 50: red,\n 40: yellow,\n 30: green,\n 20: blue,\n 10: gray,\n message: cyan,\n greyMessage: gray,\n property: magenta\n}\n\nfunction resolveCustomColoredColorizer (customColors) {\n return customColors.reduce(\n function (agg, [level, color]) {\n agg[level] = typeof availableColors[color] === 'function' ? availableColors[color] : white\n\n return agg\n },\n { default: white, message: cyan, greyMessage: gray, property: magenta }\n )\n}\n\nfunction colorizeLevel (useOnlyCustomProps) {\n return function (level, colorizer, { customLevels, customLevelNames } = {}) {\n const [levelStr, levelNum] = getLevelLabelData(useOnlyCustomProps, customLevels, customLevelNames)(level)\n\n return Object.prototype.hasOwnProperty.call(colorizer, levelNum) ? colorizer[levelNum](levelStr) : colorizer.default(levelStr)\n }\n}\n\nfunction plainColorizer (useOnlyCustomProps) {\n const newPlainColorizer = colorizeLevel(useOnlyCustomProps)\n const customColoredColorizer = function (level, opts) {\n return newPlainColorizer(level, plain, opts)\n }\n customColoredColorizer.message = plain.message\n customColoredColorizer.greyMessage = plain.greyMessage\n customColoredColorizer.property = plain.property\n customColoredColorizer.colors = createColors({ useColor: false })\n return customColoredColorizer\n}\n\nfunction coloredColorizer (useOnlyCustomProps) {\n const newColoredColorizer = colorizeLevel(useOnlyCustomProps)\n const customColoredColorizer = function (level, opts) {\n return newColoredColorizer(level, colored, opts)\n }\n customColoredColorizer.message = colored.message\n customColoredColorizer.property = colored.property\n customColoredColorizer.greyMessage = colored.greyMessage\n customColoredColorizer.colors = availableColors\n return customColoredColorizer\n}\n\nfunction customColoredColorizerFactory (customColors, useOnlyCustomProps) {\n const onlyCustomColored = resolveCustomColoredColorizer(customColors)\n const customColored = useOnlyCustomProps ? onlyCustomColored : Object.assign({}, colored, onlyCustomColored)\n const colorizeLevelCustom = colorizeLevel(useOnlyCustomProps)\n\n const customColoredColorizer = function (level, opts) {\n return colorizeLevelCustom(level, customColored, opts)\n }\n customColoredColorizer.colors = availableColors\n customColoredColorizer.message = customColoredColorizer.message || customColored.message\n customColoredColorizer.property = customColoredColorizer.property || customColored.property\n customColoredColorizer.greyMessage = customColoredColorizer.greyMessage || customColored.greyMessage\n\n return customColoredColorizer\n}\n\n/**\n * Applies colorization, if possible, to a string representing the passed in\n * `level`. For example, the default colorizer will return a \"green\" colored\n * string for the \"info\" level.\n *\n * @typedef {function} ColorizerFunc\n * @param {string|number} level In either case, the input will map to a color\n * for the specified level or to the color for `USERLVL` if the level is not\n * recognized.\n * @property {function} message Accepts one string parameter that will be\n * colorized to a predefined color.\n * @property {Colorette.Colorette} colors Available color functions based on `useColor` (or `colorize`) context\n */\n\n/**\n * Factory function get a function to colorized levels. The returned function\n * also includes a `.message(str)` method to colorize strings.\n *\n * @param {boolean} [useColors=false] When `true` a function that applies standard\n * terminal colors is returned.\n * @param {array[]} [customColors] Tuple where first item of each array is the\n * level index and the second item is the color\n * @param {boolean} [useOnlyCustomProps] When `true`, only use the provided\n * custom colors provided and not fallback to default\n *\n * @returns {ColorizerFunc} `function (level) {}` has a `.message(str)` method to\n * apply colorization to a string. The core function accepts either an integer\n * `level` or a `string` level. The integer level will map to a known level\n * string or to `USERLVL` if not known. The string `level` will map to the same\n * colors as the integer `level` and will also default to `USERLVL` if the given\n * string is not a recognized level name.\n */\nmodule.exports = function getColorizer (useColors = false, customColors, useOnlyCustomProps) {\n if (useColors && customColors !== undefined) {\n return customColoredColorizerFactory(customColors, useOnlyCustomProps)\n } else if (useColors) {\n return coloredColorizer(useOnlyCustomProps)\n }\n\n return plainColorizer(useOnlyCustomProps)\n}\n",
44
+ "'use strict'\n\nmodule.exports = function noop () {}\n",
45
+ "'use strict'\n\nmodule.exports = buildSafeSonicBoom\n\nconst { isMainThread } = require('node:worker_threads')\nconst SonicBoom = require('sonic-boom')\nconst noop = require('./noop')\n\n/**\n * Creates a safe SonicBoom instance\n *\n * @param {object} opts Options for SonicBoom\n *\n * @returns {object} A new SonicBoom stream\n */\nfunction buildSafeSonicBoom (opts) {\n const stream = new SonicBoom(opts)\n stream.on('error', filterBrokenPipe)\n // if we are sync: false, we must flush on exit\n if (!opts.sync && isMainThread) {\n setupOnExit(stream)\n }\n return stream\n\n function filterBrokenPipe (err) {\n if (err.code === 'EPIPE') {\n stream.write = noop\n stream.end = noop\n stream.flushSync = noop\n stream.destroy = noop\n return\n }\n stream.removeListener('error', filterBrokenPipe)\n }\n}\n\nfunction setupOnExit (stream) {\n /* istanbul ignore next */\n if (global.WeakRef && global.WeakMap && global.FinalizationRegistry) {\n // This is leak free, it does not leave event handlers\n const onExit = require('on-exit-leak-free')\n\n onExit.register(stream, autoEnd)\n\n stream.on('close', function () {\n onExit.unregister(stream)\n })\n }\n}\n\n/* istanbul ignore next */\nfunction autoEnd (stream, eventName) {\n // This check is needed only on some platforms\n\n if (stream.destroyed) {\n return\n }\n\n if (eventName === 'beforeExit') {\n // We still have an event loop, let's use it\n stream.flush()\n stream.on('drain', function () {\n stream.end()\n })\n } else {\n // We do not have an event loop, so flush synchronously\n stream.flushSync()\n }\n}\n",
46
+ "'use strict'\n\nmodule.exports = isValidDate\n\n/**\n * Checks if the argument is a JS Date and not 'Invalid Date'.\n *\n * @param {Date} date The date to check.\n *\n * @returns {boolean} true if the argument is a JS Date and not 'Invalid Date'.\n */\nfunction isValidDate (date) {\n return date instanceof Date && !Number.isNaN(date.getTime())\n}\n",
47
+ "'use strict'\n\nmodule.exports = createDate\n\nconst isValidDate = require('./is-valid-date')\n\n/**\n * Constructs a JS Date from a number or string. Accepts any single number\n * or single string argument that is valid for the Date() constructor,\n * or an epoch as a string.\n *\n * @param {string|number} epoch The representation of the Date.\n *\n * @returns {Date} The constructed Date.\n */\nfunction createDate (epoch) {\n // If epoch is already a valid argument, return the valid Date\n let date = new Date(epoch)\n if (isValidDate(date)) {\n return date\n }\n\n // Convert to a number to permit epoch as a string\n date = new Date(+epoch)\n return date\n}\n",
48
+ "'use strict'\n\nmodule.exports = splitPropertyKey\n\n/**\n * Splits the property key delimited by a dot character but not when it is preceded\n * by a backslash.\n *\n * @param {string} key A string identifying the property.\n *\n * @returns {string[]} Returns a list of string containing each delimited property.\n * e.g. `'prop2\\.domain\\.corp.prop2'` should return [ 'prop2.domain.com', 'prop2' ]\n */\nfunction splitPropertyKey (key) {\n const result = []\n let backslash = false\n let segment = ''\n\n for (let i = 0; i < key.length; i++) {\n const c = key.charAt(i)\n\n if (c === '\\\\') {\n backslash = true\n continue\n }\n\n if (backslash) {\n backslash = false\n segment += c\n continue\n }\n\n /* Non-escaped dot, push to result */\n if (c === '.') {\n result.push(segment)\n segment = ''\n continue\n }\n\n segment += c\n }\n\n /* Push last entry to result */\n if (segment.length) {\n result.push(segment)\n }\n\n return result\n}\n",
49
+ "'use strict'\n\nmodule.exports = getPropertyValue\n\nconst splitPropertyKey = require('./split-property-key')\n\n/**\n * Gets a specified property from an object if it exists.\n *\n * @param {object} obj The object to be searched.\n * @param {string|string[]} property A string, or an array of strings, identifying\n * the property to be retrieved from the object.\n * Accepts nested properties delimited by a `.`.\n * Delimiter can be escaped to preserve property names that contain the delimiter.\n * e.g. `'prop1.prop2'` or `'prop2\\.domain\\.corp.prop2'`.\n *\n * @returns {*}\n */\nfunction getPropertyValue (obj, property) {\n const props = Array.isArray(property) ? property : splitPropertyKey(property)\n\n for (const prop of props) {\n if (!Object.prototype.hasOwnProperty.call(obj, prop)) {\n return\n }\n obj = obj[prop]\n }\n\n return obj\n}\n",
50
+ "'use strict'\n\nmodule.exports = deleteLogProperty\n\nconst getPropertyValue = require('./get-property-value')\nconst splitPropertyKey = require('./split-property-key')\n\n/**\n * Deletes a specified property from a log object if it exists.\n * This function mutates the passed in `log` object.\n *\n * @param {object} log The log object to be modified.\n * @param {string} property A string identifying the property to be deleted from\n * the log object. Accepts nested properties delimited by a `.`\n * Delimiter can be escaped to preserve property names that contain the delimiter.\n * e.g. `'prop1.prop2'` or `'prop2\\.domain\\.corp.prop2'`\n */\nfunction deleteLogProperty (log, property) {\n const props = splitPropertyKey(property)\n const propToDelete = props.pop()\n\n log = getPropertyValue(log, props)\n\n /* istanbul ignore else */\n if (log !== null && typeof log === 'object' && Object.prototype.hasOwnProperty.call(log, propToDelete)) {\n delete log[propToDelete]\n }\n}\n",
51
+ "'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar toStringFunction = Function.prototype.toString;\nvar create = Object.create;\nvar toStringObject = Object.prototype.toString;\n/**\n * @classdesc Fallback cache for when WeakMap is not natively supported\n */\nvar LegacyCache = /** @class */ (function () {\n function LegacyCache() {\n this._keys = [];\n this._values = [];\n }\n LegacyCache.prototype.has = function (key) {\n return !!~this._keys.indexOf(key);\n };\n LegacyCache.prototype.get = function (key) {\n return this._values[this._keys.indexOf(key)];\n };\n LegacyCache.prototype.set = function (key, value) {\n this._keys.push(key);\n this._values.push(value);\n };\n return LegacyCache;\n}());\nfunction createCacheLegacy() {\n return new LegacyCache();\n}\nfunction createCacheModern() {\n return new WeakMap();\n}\n/**\n * Get a new cache object to prevent circular references.\n */\nvar createCache = typeof WeakMap !== 'undefined' ? createCacheModern : createCacheLegacy;\n/**\n * Get an empty version of the object with the same prototype it has.\n */\nfunction getCleanClone(prototype) {\n if (!prototype) {\n return create(null);\n }\n var Constructor = prototype.constructor;\n if (Constructor === Object) {\n return prototype === Object.prototype ? {} : create(prototype);\n }\n if (Constructor &&\n ~toStringFunction.call(Constructor).indexOf('[native code]')) {\n try {\n return new Constructor();\n }\n catch (_a) { }\n }\n return create(prototype);\n}\nfunction getRegExpFlagsLegacy(regExp) {\n var flags = '';\n if (regExp.global) {\n flags += 'g';\n }\n if (regExp.ignoreCase) {\n flags += 'i';\n }\n if (regExp.multiline) {\n flags += 'm';\n }\n if (regExp.unicode) {\n flags += 'u';\n }\n if (regExp.sticky) {\n flags += 'y';\n }\n return flags;\n}\nfunction getRegExpFlagsModern(regExp) {\n return regExp.flags;\n}\n/**\n * Get the flags to apply to the copied regexp.\n */\nvar getRegExpFlags = /test/g.flags === 'g' ? getRegExpFlagsModern : getRegExpFlagsLegacy;\nfunction getTagLegacy(value) {\n var type = toStringObject.call(value);\n return type.substring(8, type.length - 1);\n}\nfunction getTagModern(value) {\n return value[Symbol.toStringTag] || getTagLegacy(value);\n}\n/**\n * Get the tag of the value passed, so that the correct copier can be used.\n */\nvar getTag = typeof Symbol !== 'undefined' ? getTagModern : getTagLegacy;\n\nvar defineProperty = Object.defineProperty, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor, getOwnPropertyNames = Object.getOwnPropertyNames, getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar _a = Object.prototype, hasOwnProperty = _a.hasOwnProperty, propertyIsEnumerable = _a.propertyIsEnumerable;\nvar SUPPORTS_SYMBOL = typeof getOwnPropertySymbols === 'function';\nfunction getStrictPropertiesModern(object) {\n return getOwnPropertyNames(object).concat(getOwnPropertySymbols(object));\n}\n/**\n * Get the properites used when copying objects strictly. This includes both keys and symbols.\n */\nvar getStrictProperties = SUPPORTS_SYMBOL\n ? getStrictPropertiesModern\n : getOwnPropertyNames;\n/**\n * Striclty copy all properties contained on the object.\n */\nfunction copyOwnPropertiesStrict(value, clone, state) {\n var properties = getStrictProperties(value);\n for (var index = 0, length_1 = properties.length, property = void 0, descriptor = void 0; index < length_1; ++index) {\n property = properties[index];\n if (property === 'callee' || property === 'caller') {\n continue;\n }\n descriptor = getOwnPropertyDescriptor(value, property);\n if (!descriptor) {\n // In extra edge cases where the property descriptor cannot be retrived, fall back to\n // the loose assignment.\n clone[property] = state.copier(value[property], state);\n continue;\n }\n // Only clone the value if actually a value, not a getter / setter.\n if (!descriptor.get && !descriptor.set) {\n descriptor.value = state.copier(descriptor.value, state);\n }\n try {\n defineProperty(clone, property, descriptor);\n }\n catch (error) {\n // Tee above can fail on node in edge cases, so fall back to the loose assignment.\n clone[property] = descriptor.value;\n }\n }\n return clone;\n}\n/**\n * Deeply copy the indexed values in the array.\n */\nfunction copyArrayLoose(array, state) {\n var clone = new state.Constructor();\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(array, clone);\n for (var index = 0, length_2 = array.length; index < length_2; ++index) {\n clone[index] = state.copier(array[index], state);\n }\n return clone;\n}\n/**\n * Deeply copy the indexed values in the array, as well as any custom properties.\n */\nfunction copyArrayStrict(array, state) {\n var clone = new state.Constructor();\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(array, clone);\n return copyOwnPropertiesStrict(array, clone, state);\n}\n/**\n * Copy the contents of the ArrayBuffer.\n */\nfunction copyArrayBuffer(arrayBuffer, _state) {\n return arrayBuffer.slice(0);\n}\n/**\n * Create a new Blob with the contents of the original.\n */\nfunction copyBlob(blob, _state) {\n return blob.slice(0, blob.size, blob.type);\n}\n/**\n * Create a new DataView with the contents of the original.\n */\nfunction copyDataView(dataView, state) {\n return new state.Constructor(copyArrayBuffer(dataView.buffer));\n}\n/**\n * Create a new Date based on the time of the original.\n */\nfunction copyDate(date, state) {\n return new state.Constructor(date.getTime());\n}\n/**\n * Deeply copy the keys and values of the original.\n */\nfunction copyMapLoose(map, state) {\n var clone = new state.Constructor();\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(map, clone);\n map.forEach(function (value, key) {\n clone.set(key, state.copier(value, state));\n });\n return clone;\n}\n/**\n * Deeply copy the keys and values of the original, as well as any custom properties.\n */\nfunction copyMapStrict(map, state) {\n return copyOwnPropertiesStrict(map, copyMapLoose(map, state), state);\n}\nfunction copyObjectLooseLegacy(object, state) {\n var clone = getCleanClone(state.prototype);\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(object, clone);\n for (var key in object) {\n if (hasOwnProperty.call(object, key)) {\n clone[key] = state.copier(object[key], state);\n }\n }\n return clone;\n}\nfunction copyObjectLooseModern(object, state) {\n var clone = getCleanClone(state.prototype);\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(object, clone);\n for (var key in object) {\n if (hasOwnProperty.call(object, key)) {\n clone[key] = state.copier(object[key], state);\n }\n }\n var symbols = getOwnPropertySymbols(object);\n for (var index = 0, length_3 = symbols.length, symbol = void 0; index < length_3; ++index) {\n symbol = symbols[index];\n if (propertyIsEnumerable.call(object, symbol)) {\n clone[symbol] = state.copier(object[symbol], state);\n }\n }\n return clone;\n}\n/**\n * Deeply copy the properties (keys and symbols) and values of the original.\n */\nvar copyObjectLoose = SUPPORTS_SYMBOL\n ? copyObjectLooseModern\n : copyObjectLooseLegacy;\n/**\n * Deeply copy the properties (keys and symbols) and values of the original, as well\n * as any hidden or non-enumerable properties.\n */\nfunction copyObjectStrict(object, state) {\n var clone = getCleanClone(state.prototype);\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(object, clone);\n return copyOwnPropertiesStrict(object, clone, state);\n}\n/**\n * Create a new primitive wrapper from the value of the original.\n */\nfunction copyPrimitiveWrapper(primitiveObject, state) {\n return new state.Constructor(primitiveObject.valueOf());\n}\n/**\n * Create a new RegExp based on the value and flags of the original.\n */\nfunction copyRegExp(regExp, state) {\n var clone = new state.Constructor(regExp.source, getRegExpFlags(regExp));\n clone.lastIndex = regExp.lastIndex;\n return clone;\n}\n/**\n * Return the original value (an identity function).\n *\n * @note\n * THis is used for objects that cannot be copied, such as WeakMap.\n */\nfunction copySelf(value, _state) {\n return value;\n}\n/**\n * Deeply copy the values of the original.\n */\nfunction copySetLoose(set, state) {\n var clone = new state.Constructor();\n // set in the cache immediately to be able to reuse the object recursively\n state.cache.set(set, clone);\n set.forEach(function (value) {\n clone.add(state.copier(value, state));\n });\n return clone;\n}\n/**\n * Deeply copy the values of the original, as well as any custom properties.\n */\nfunction copySetStrict(set, state) {\n return copyOwnPropertiesStrict(set, copySetLoose(set, state), state);\n}\n\nvar isArray = Array.isArray;\nvar assign = Object.assign;\nvar getPrototypeOf = Object.getPrototypeOf || (function (obj) { return obj.__proto__; });\nvar DEFAULT_LOOSE_OPTIONS = {\n array: copyArrayLoose,\n arrayBuffer: copyArrayBuffer,\n blob: copyBlob,\n dataView: copyDataView,\n date: copyDate,\n error: copySelf,\n map: copyMapLoose,\n object: copyObjectLoose,\n regExp: copyRegExp,\n set: copySetLoose,\n};\nvar DEFAULT_STRICT_OPTIONS = assign({}, DEFAULT_LOOSE_OPTIONS, {\n array: copyArrayStrict,\n map: copyMapStrict,\n object: copyObjectStrict,\n set: copySetStrict,\n});\n/**\n * Get the copiers used for each specific object tag.\n */\nfunction getTagSpecificCopiers(options) {\n return {\n Arguments: options.object,\n Array: options.array,\n ArrayBuffer: options.arrayBuffer,\n Blob: options.blob,\n Boolean: copyPrimitiveWrapper,\n DataView: options.dataView,\n Date: options.date,\n Error: options.error,\n Float32Array: options.arrayBuffer,\n Float64Array: options.arrayBuffer,\n Int8Array: options.arrayBuffer,\n Int16Array: options.arrayBuffer,\n Int32Array: options.arrayBuffer,\n Map: options.map,\n Number: copyPrimitiveWrapper,\n Object: options.object,\n Promise: copySelf,\n RegExp: options.regExp,\n Set: options.set,\n String: copyPrimitiveWrapper,\n WeakMap: copySelf,\n WeakSet: copySelf,\n Uint8Array: options.arrayBuffer,\n Uint8ClampedArray: options.arrayBuffer,\n Uint16Array: options.arrayBuffer,\n Uint32Array: options.arrayBuffer,\n Uint64Array: options.arrayBuffer,\n };\n}\n/**\n * Create a custom copier based on the object-specific copy methods passed.\n */\nfunction createCopier(options) {\n var normalizedOptions = assign({}, DEFAULT_LOOSE_OPTIONS, options);\n var tagSpecificCopiers = getTagSpecificCopiers(normalizedOptions);\n var array = tagSpecificCopiers.Array, object = tagSpecificCopiers.Object;\n function copier(value, state) {\n state.prototype = state.Constructor = undefined;\n if (!value || typeof value !== 'object') {\n return value;\n }\n if (state.cache.has(value)) {\n return state.cache.get(value);\n }\n state.prototype = getPrototypeOf(value);\n state.Constructor = state.prototype && state.prototype.constructor;\n // plain objects\n if (!state.Constructor || state.Constructor === Object) {\n return object(value, state);\n }\n // arrays\n if (isArray(value)) {\n return array(value, state);\n }\n var tagSpecificCopier = tagSpecificCopiers[getTag(value)];\n if (tagSpecificCopier) {\n return tagSpecificCopier(value, state);\n }\n return typeof value.then === 'function' ? value : object(value, state);\n }\n return function copy(value) {\n return copier(value, {\n Constructor: undefined,\n cache: createCache(),\n copier: copier,\n prototype: undefined,\n });\n };\n}\n/**\n * Create a custom copier based on the object-specific copy methods passed, defaulting to the\n * same internals as `copyStrict`.\n */\nfunction createStrictCopier(options) {\n return createCopier(assign({}, DEFAULT_STRICT_OPTIONS, options));\n}\n/**\n * Copy an value deeply as much as possible, where strict recreation of object properties\n * are maintained. All properties (including non-enumerable ones) are copied with their\n * original property descriptors on both objects and arrays.\n */\nvar copyStrict = createStrictCopier({});\n/**\n * Copy an value deeply as much as possible.\n */\nvar index = createCopier({});\n\nexports.copyStrict = copyStrict;\nexports.createCopier = createCopier;\nexports.createStrictCopier = createStrictCopier;\nexports.default = index;\n//# sourceMappingURL=index.cjs.map\n",
52
+ "'use strict'\n\nmodule.exports = filterLog\n\nconst { createCopier } = require('fast-copy')\nconst fastCopy = createCopier({})\n\nconst deleteLogProperty = require('./delete-log-property')\n\n/**\n * @typedef {object} FilterLogParams\n * @property {object} log The log object to be modified.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Filter a log object by removing or including keys accordingly.\n * When `includeKeys` is passed, `ignoredKeys` will be ignored.\n * One of ignoreKeys or includeKeys must be pass in.\n *\n * @param {FilterLogParams} input\n *\n * @returns {object} A new `log` object instance that\n * either only includes the keys in ignoreKeys\n * or does not include those in ignoredKeys.\n */\nfunction filterLog ({ log, context }) {\n const { ignoreKeys, includeKeys } = context\n const logCopy = fastCopy(log)\n\n if (includeKeys) {\n const logIncluded = {}\n\n includeKeys.forEach((key) => {\n logIncluded[key] = logCopy[key]\n })\n return logIncluded\n }\n\n ignoreKeys.forEach((ignoreKey) => {\n deleteLogProperty(logCopy, ignoreKey)\n })\n return logCopy\n}\n",
53
+ "\"use strict\";function _typeof(obj){\"@babel/helpers - typeof\";if(typeof Symbol===\"function\"&&typeof Symbol.iterator===\"symbol\"){_typeof=function _typeof(obj){return typeof obj}}else{_typeof=function _typeof(obj){return obj&&typeof Symbol===\"function\"&&obj.constructor===Symbol&&obj!==Symbol.prototype?\"symbol\":typeof obj}}return _typeof(obj)}(function(global){var _arguments=arguments;var dateFormat=function(){var token=/d{1,4}|D{3,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\\1?|W{1,2}|[LlopSZN]|\"[^\"]*\"|'[^']*'/g;var timezone=/\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g;var timezoneClip=/[^-+\\dA-Z]/g;return function(date,mask,utc,gmt){if(_arguments.length===1&&kindOf(date)===\"string\"&&!/\\d/.test(date)){mask=date;date=undefined}date=date||date===0?date:new Date;if(!(date instanceof Date)){date=new Date(date)}if(isNaN(date)){throw TypeError(\"Invalid date\")}mask=String(dateFormat.masks[mask]||mask||dateFormat.masks[\"default\"]);var maskSlice=mask.slice(0,4);if(maskSlice===\"UTC:\"||maskSlice===\"GMT:\"){mask=mask.slice(4);utc=true;if(maskSlice===\"GMT:\"){gmt=true}}var _=function _(){return utc?\"getUTC\":\"get\"};var _d=function d(){return date[_()+\"Date\"]()};var D=function D(){return date[_()+\"Day\"]()};var _m=function m(){return date[_()+\"Month\"]()};var y=function y(){return date[_()+\"FullYear\"]()};var _H=function H(){return date[_()+\"Hours\"]()};var _M=function M(){return date[_()+\"Minutes\"]()};var _s=function s(){return date[_()+\"Seconds\"]()};var _L=function L(){return date[_()+\"Milliseconds\"]()};var _o=function o(){return utc?0:date.getTimezoneOffset()};var _W=function W(){return getWeek(date)};var _N=function N(){return getDayOfWeek(date)};var flags={d:function d(){return _d()},dd:function dd(){return pad(_d())},ddd:function ddd(){return dateFormat.i18n.dayNames[D()]},DDD:function DDD(){return getDayName({y:y(),m:_m(),d:_d(),_:_(),dayName:dateFormat.i18n.dayNames[D()],short:true})},dddd:function dddd(){return dateFormat.i18n.dayNames[D()+7]},DDDD:function DDDD(){return getDayName({y:y(),m:_m(),d:_d(),_:_(),dayName:dateFormat.i18n.dayNames[D()+7]})},m:function m(){return _m()+1},mm:function mm(){return pad(_m()+1)},mmm:function mmm(){return dateFormat.i18n.monthNames[_m()]},mmmm:function mmmm(){return dateFormat.i18n.monthNames[_m()+12]},yy:function yy(){return String(y()).slice(2)},yyyy:function yyyy(){return pad(y(),4)},h:function h(){return _H()%12||12},hh:function hh(){return pad(_H()%12||12)},H:function H(){return _H()},HH:function HH(){return pad(_H())},M:function M(){return _M()},MM:function MM(){return pad(_M())},s:function s(){return _s()},ss:function ss(){return pad(_s())},l:function l(){return pad(_L(),3)},L:function L(){return pad(Math.floor(_L()/10))},t:function t(){return _H()<12?dateFormat.i18n.timeNames[0]:dateFormat.i18n.timeNames[1]},tt:function tt(){return _H()<12?dateFormat.i18n.timeNames[2]:dateFormat.i18n.timeNames[3]},T:function T(){return _H()<12?dateFormat.i18n.timeNames[4]:dateFormat.i18n.timeNames[5]},TT:function TT(){return _H()<12?dateFormat.i18n.timeNames[6]:dateFormat.i18n.timeNames[7]},Z:function Z(){return gmt?\"GMT\":utc?\"UTC\":(String(date).match(timezone)||[\"\"]).pop().replace(timezoneClip,\"\").replace(/GMT\\+0000/g,\"UTC\")},o:function o(){return(_o()>0?\"-\":\"+\")+pad(Math.floor(Math.abs(_o())/60)*100+Math.abs(_o())%60,4)},p:function p(){return(_o()>0?\"-\":\"+\")+pad(Math.floor(Math.abs(_o())/60),2)+\":\"+pad(Math.floor(Math.abs(_o())%60),2)},S:function S(){return[\"th\",\"st\",\"nd\",\"rd\"][_d()%10>3?0:(_d()%100-_d()%10!=10)*_d()%10]},W:function W(){return _W()},WW:function WW(){return pad(_W())},N:function N(){return _N()}};return mask.replace(token,function(match){if(match in flags){return flags[match]()}return match.slice(1,match.length-1)})}}();dateFormat.masks={default:\"ddd mmm dd yyyy HH:MM:ss\",shortDate:\"m/d/yy\",paddedShortDate:\"mm/dd/yyyy\",mediumDate:\"mmm d, yyyy\",longDate:\"mmmm d, yyyy\",fullDate:\"dddd, mmmm d, yyyy\",shortTime:\"h:MM TT\",mediumTime:\"h:MM:ss TT\",longTime:\"h:MM:ss TT Z\",isoDate:\"yyyy-mm-dd\",isoTime:\"HH:MM:ss\",isoDateTime:\"yyyy-mm-dd'T'HH:MM:sso\",isoUtcDateTime:\"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\",expiresHeaderFormat:\"ddd, dd mmm yyyy HH:MM:ss Z\"};dateFormat.i18n={dayNames:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\",\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],monthNames:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\",\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],timeNames:[\"a\",\"p\",\"am\",\"pm\",\"A\",\"P\",\"AM\",\"PM\"]};var pad=function pad(val,len){val=String(val);len=len||2;while(val.length<len){val=\"0\"+val}return val};var getDayName=function getDayName(_ref){var y=_ref.y,m=_ref.m,d=_ref.d,_=_ref._,dayName=_ref.dayName,_ref$short=_ref[\"short\"],_short=_ref$short===void 0?false:_ref$short;var today=new Date;var yesterday=new Date;yesterday.setDate(yesterday[_+\"Date\"]()-1);var tomorrow=new Date;tomorrow.setDate(tomorrow[_+\"Date\"]()+1);var today_d=function today_d(){return today[_+\"Date\"]()};var today_m=function today_m(){return today[_+\"Month\"]()};var today_y=function today_y(){return today[_+\"FullYear\"]()};var yesterday_d=function yesterday_d(){return yesterday[_+\"Date\"]()};var yesterday_m=function yesterday_m(){return yesterday[_+\"Month\"]()};var yesterday_y=function yesterday_y(){return yesterday[_+\"FullYear\"]()};var tomorrow_d=function tomorrow_d(){return tomorrow[_+\"Date\"]()};var tomorrow_m=function tomorrow_m(){return tomorrow[_+\"Month\"]()};var tomorrow_y=function tomorrow_y(){return tomorrow[_+\"FullYear\"]()};if(today_y()===y&&today_m()===m&&today_d()===d){return _short?\"Tdy\":\"Today\"}else if(yesterday_y()===y&&yesterday_m()===m&&yesterday_d()===d){return _short?\"Ysd\":\"Yesterday\"}else if(tomorrow_y()===y&&tomorrow_m()===m&&tomorrow_d()===d){return _short?\"Tmw\":\"Tomorrow\"}return dayName};var getWeek=function getWeek(date){var targetThursday=new Date(date.getFullYear(),date.getMonth(),date.getDate());targetThursday.setDate(targetThursday.getDate()-(targetThursday.getDay()+6)%7+3);var firstThursday=new Date(targetThursday.getFullYear(),0,4);firstThursday.setDate(firstThursday.getDate()-(firstThursday.getDay()+6)%7+3);var ds=targetThursday.getTimezoneOffset()-firstThursday.getTimezoneOffset();targetThursday.setHours(targetThursday.getHours()-ds);var weekDiff=(targetThursday-firstThursday)/(864e5*7);return 1+Math.floor(weekDiff)};var getDayOfWeek=function getDayOfWeek(date){var dow=date.getDay();if(dow===0){dow=7}return dow};var kindOf=function kindOf(val){if(val===null){return\"null\"}if(val===undefined){return\"undefined\"}if(_typeof(val)!==\"object\"){return _typeof(val)}if(Array.isArray(val)){return\"array\"}return{}.toString.call(val).slice(8,-1).toLowerCase()};if(typeof define===\"function\"&&define.amd){define(function(){return dateFormat})}else if((typeof exports===\"undefined\"?\"undefined\":_typeof(exports))===\"object\"){module.exports=dateFormat}else{global.dateFormat=dateFormat}})(void 0);",
54
+ "'use strict'\n\nmodule.exports = formatTime\n\nconst {\n DATE_FORMAT,\n DATE_FORMAT_SIMPLE\n} = require('../constants')\n\nconst dateformat = require('dateformat')\nconst createDate = require('./create-date')\nconst isValidDate = require('./is-valid-date')\n\n/**\n * Converts a given `epoch` to a desired display format.\n *\n * @param {number|string} epoch The time to convert. May be any value that is\n * valid for `new Date()`.\n * @param {boolean|string} [translateTime=false] When `false`, the given `epoch`\n * will simply be returned. When `true`, the given `epoch` will be converted\n * to a string at UTC using the `DATE_FORMAT` constant. If `translateTime` is\n * a string, the following rules are available:\n *\n * - `<format string>`: The string is a literal format string. This format\n * string will be used to interpret the `epoch` and return a display string\n * at UTC.\n * - `SYS:STANDARD`: The returned display string will follow the `DATE_FORMAT`\n * constant at the system's local timezone.\n * - `SYS:<format string>`: The returned display string will follow the given\n * `<format string>` at the system's local timezone.\n * - `UTC:<format string>`: The returned display string will follow the given\n * `<format string>` at UTC.\n *\n * @returns {number|string} The formatted time.\n */\nfunction formatTime (epoch, translateTime = false) {\n if (translateTime === false) {\n return epoch\n }\n\n const instant = createDate(epoch)\n\n // If the Date is invalid, do not attempt to format\n if (!isValidDate(instant)) {\n return epoch\n }\n\n if (translateTime === true) {\n return dateformat(instant, DATE_FORMAT_SIMPLE)\n }\n\n const upperFormat = translateTime.toUpperCase()\n if (upperFormat === 'SYS:STANDARD') {\n return dateformat(instant, DATE_FORMAT)\n }\n\n const prefix = upperFormat.substr(0, 4)\n if (prefix === 'SYS:' || prefix === 'UTC:') {\n if (prefix === 'UTC:') {\n return dateformat(instant, translateTime)\n }\n return dateformat(instant, translateTime.slice(4))\n }\n\n return dateformat(instant, `UTC:${translateTime}`)\n}\n",
55
+ "'use strict'\n\nmodule.exports = handleCustomLevelsNamesOpts\n\n/**\n * Parse a CSV string or options object that maps level\n * labels to level values.\n *\n * @param {string|object} cLevels An object mapping level\n * names to level values, e.g. `{ info: 30, debug: 65 }`, or a\n * CSV string in the format `level_name:level_value`, e.g.\n * `info:30,debug:65`.\n *\n * @returns {object} An object mapping levels names to level values\n * e.g. `{ info: 30, debug: 65 }`.\n */\nfunction handleCustomLevelsNamesOpts (cLevels) {\n if (!cLevels) return {}\n\n if (typeof cLevels === 'string') {\n return cLevels\n .split(',')\n .reduce((agg, value, idx) => {\n const [levelName, levelNum = idx] = value.split(':')\n agg[levelName.toLowerCase()] = levelNum\n return agg\n }, {})\n } else if (Object.prototype.toString.call(cLevels) === '[object Object]') {\n return Object\n .keys(cLevels)\n .reduce((agg, levelName) => {\n agg[levelName.toLowerCase()] = cLevels[levelName]\n return agg\n }, {})\n } else {\n return {}\n }\n}\n",
56
+ "'use strict'\n\nmodule.exports = handleCustomLevelsOpts\n\n/**\n * Parse a CSV string or options object that specifies\n * configuration for custom levels.\n *\n * @param {string|object} cLevels An object mapping level\n * names to values, e.g. `{ info: 30, debug: 65 }`, or a\n * CSV string in the format `level_name:level_value`, e.g.\n * `info:30,debug:65`.\n *\n * @returns {object} An object mapping levels to labels that\n * appear in logs, e.g. `{ '30': 'INFO', '65': 'DEBUG' }`.\n */\nfunction handleCustomLevelsOpts (cLevels) {\n if (!cLevels) return {}\n\n if (typeof cLevels === 'string') {\n return cLevels\n .split(',')\n .reduce((agg, value, idx) => {\n const [levelName, levelNum = idx] = value.split(':')\n agg[levelNum] = levelName.toUpperCase()\n return agg\n },\n { default: 'USERLVL' })\n } else if (Object.prototype.toString.call(cLevels) === '[object Object]') {\n return Object\n .keys(cLevels)\n .reduce((agg, levelName) => {\n agg[cLevels[levelName]] = levelName.toUpperCase()\n return agg\n }, { default: 'USERLVL' })\n } else {\n return {}\n }\n}\n",
57
+ "'use strict'\n\nmodule.exports = interpretConditionals\n\nconst getPropertyValue = require('./get-property-value')\n\n/**\n * Translates all conditional blocks from within the messageFormat. Translates\n * any matching {if key}{key}{end} statements and returns everything between\n * if and else blocks if the key provided was found in log.\n *\n * @param {MessageFormatString|MessageFormatFunction} messageFormat A format\n * string or function that defines how the logged message should be\n * conditionally formatted.\n * @param {object} log The log object to be modified.\n *\n * @returns {string} The parsed messageFormat.\n */\nfunction interpretConditionals (messageFormat, log) {\n messageFormat = messageFormat.replace(/{if (.*?)}(.*?){end}/g, replacer)\n\n // Remove non-terminated if blocks\n messageFormat = messageFormat.replace(/{if (.*?)}/g, '')\n // Remove floating end blocks\n messageFormat = messageFormat.replace(/{end}/g, '')\n\n return messageFormat.replace(/\\s+/g, ' ').trim()\n\n function replacer (_, key, value) {\n const propertyValue = getPropertyValue(log, key)\n if (propertyValue && value.includes(key)) {\n return value.replace(new RegExp('{' + key + '}', 'g'), propertyValue)\n } else {\n return ''\n }\n }\n}\n",
58
+ "'use strict'\n\nmodule.exports = isObject\n\nfunction isObject (input) {\n return Object.prototype.toString.apply(input) === '[object Object]'\n}\n",
59
+ "'use strict'\n\nmodule.exports = joinLinesWithIndentation\n\n/**\n * @typedef {object} JoinLinesWithIndentationParams\n * @property {string} input The string to split and reformat.\n * @property {string} [ident] The indentation string. Default: ` ` (4 spaces).\n * @property {string} [eol] The end of line sequence to use when rejoining\n * the lines. Default: `'\\n'`.\n */\n\n/**\n * Given a string with line separators, either `\\r\\n` or `\\n`, add indentation\n * to all lines subsequent to the first line and rejoin the lines using an\n * end of line sequence.\n *\n * @param {JoinLinesWithIndentationParams} input\n *\n * @returns {string} A string with lines subsequent to the first indented\n * with the given indentation sequence.\n */\nfunction joinLinesWithIndentation ({ input, ident = ' ', eol = '\\n' }) {\n const lines = input.split(/\\r?\\n/)\n for (let i = 1; i < lines.length; i += 1) {\n lines[i] = ident + lines[i]\n }\n return lines.join(eol)\n}\n",
60
+ "'use strict'\n\nmodule.exports = parseFactoryOptions\n\nconst {\n LEVEL_NAMES\n} = require('../constants')\nconst colors = require('../colors')\nconst handleCustomLevelsOpts = require('./handle-custom-levels-opts')\nconst handleCustomLevelsNamesOpts = require('./handle-custom-levels-names-opts')\nconst handleLevelLabelData = require('./get-level-label-data')\n\n/**\n * A `PrettyContext` is an object to be used by the various functions that\n * process log data. It is derived from the provided {@link PinoPrettyOptions}.\n * It may be used as a `this` context.\n *\n * @typedef {object} PrettyContext\n * @property {string} EOL The escape sequence chosen as the line terminator.\n * @property {string} IDENT The string to use as the indentation sequence.\n * @property {ColorizerFunc} colorizer A configured colorizer function.\n * @property {Array[Array<number, string>]} customColors A set of custom color\n * names associated with level numbers.\n * @property {object} customLevelNames A hash of level numbers to level names,\n * e.g. `{ 30: \"info\" }`.\n * @property {object} customLevels A hash of level names to level numbers,\n * e.g. `{ info: 30 }`.\n * @property {CustomPrettifiers} customPrettifiers A hash of custom prettifier\n * functions.\n * @property {object} customProperties Comprised of `customLevels` and\n * `customLevelNames` if such options are provided.\n * @property {string[]} errorLikeObjectKeys The key names in the log data that\n * should be considered as holding error objects.\n * @property {string[]} errorProps A list of error object keys that should be\n * included in the output.\n * @property {function} getLevelLabelData Pass a numeric level to return [levelLabelString,levelNum]\n * @property {boolean} hideObject Indicates the prettifier should omit objects\n * in the output.\n * @property {string[]} ignoreKeys Set of log data keys to omit.\n * @property {string[]} includeKeys Opposite of `ignoreKeys`.\n * @property {boolean} levelFirst Indicates the level should be printed first.\n * @property {string} levelKey Name of the key in the log data that contains\n * the message.\n * @property {string} levelLabel Format token to represent the position of the\n * level name in the output string.\n * @property {MessageFormatString|MessageFormatFunction} messageFormat\n * @property {string} messageKey Name of the key in the log data that contains\n * the message.\n * @property {string|number} minimumLevel The minimum log level to process\n * and output.\n * @property {ColorizerFunc} objectColorizer\n * @property {boolean} singleLine Indicates objects should be printed on a\n * single output line.\n * @property {string} timestampKey The name of the key in the log data that\n * contains the log timestamp.\n * @property {boolean} translateTime Indicates if timestamps should be\n * translated to a human-readable string.\n * @property {boolean} useOnlyCustomProps\n */\n\n/**\n * @param {PinoPrettyOptions} options The user supplied object of options.\n *\n * @returns {PrettyContext}\n */\nfunction parseFactoryOptions (options) {\n const EOL = options.crlf ? '\\r\\n' : '\\n'\n const IDENT = ' '\n const {\n customPrettifiers,\n errorLikeObjectKeys,\n hideObject,\n levelFirst,\n levelKey,\n levelLabel,\n messageFormat,\n messageKey,\n minimumLevel,\n singleLine,\n timestampKey,\n translateTime\n } = options\n const errorProps = options.errorProps.split(',')\n const useOnlyCustomProps = typeof options.useOnlyCustomProps === 'boolean'\n ? options.useOnlyCustomProps\n : (options.useOnlyCustomProps === 'true')\n const customLevels = handleCustomLevelsOpts(options.customLevels)\n const customLevelNames = handleCustomLevelsNamesOpts(options.customLevels)\n const getLevelLabelData = handleLevelLabelData(useOnlyCustomProps, customLevels, customLevelNames)\n\n let customColors\n if (options.customColors) {\n if (typeof options.customColors === 'string') {\n customColors = options.customColors.split(',').reduce((agg, value) => {\n const [level, color] = value.split(':')\n const condition = useOnlyCustomProps\n ? options.customLevels\n : customLevelNames[level] !== undefined\n const levelNum = condition\n ? customLevelNames[level]\n : LEVEL_NAMES[level]\n const colorIdx = levelNum !== undefined\n ? levelNum\n : level\n agg.push([colorIdx, color])\n return agg\n }, [])\n } else if (typeof options.customColors === 'object') {\n customColors = Object.keys(options.customColors).reduce((agg, value) => {\n const [level, color] = [value, options.customColors[value]]\n const condition = useOnlyCustomProps\n ? options.customLevels\n : customLevelNames[level] !== undefined\n const levelNum = condition\n ? customLevelNames[level]\n : LEVEL_NAMES[level]\n const colorIdx = levelNum !== undefined\n ? levelNum\n : level\n agg.push([colorIdx, color])\n return agg\n }, [])\n } else {\n throw new Error('options.customColors must be of type string or object.')\n }\n }\n\n const customProperties = { customLevels, customLevelNames }\n if (useOnlyCustomProps === true && !options.customLevels) {\n customProperties.customLevels = undefined\n customProperties.customLevelNames = undefined\n }\n\n const includeKeys = options.include !== undefined\n ? new Set(options.include.split(','))\n : undefined\n const ignoreKeys = (!includeKeys && options.ignore)\n ? new Set(options.ignore.split(','))\n : undefined\n\n const colorizer = colors(options.colorize, customColors, useOnlyCustomProps)\n const objectColorizer = options.colorizeObjects\n ? colorizer\n : colors(false, [], false)\n\n return {\n EOL,\n IDENT,\n colorizer,\n customColors,\n customLevelNames,\n customLevels,\n customPrettifiers,\n customProperties,\n errorLikeObjectKeys,\n errorProps,\n getLevelLabelData,\n hideObject,\n ignoreKeys,\n includeKeys,\n levelFirst,\n levelKey,\n levelLabel,\n messageFormat,\n messageKey,\n minimumLevel,\n objectColorizer,\n singleLine,\n timestampKey,\n translateTime,\n useOnlyCustomProps\n }\n}\n",
61
+ "module.exports = stringify\nstringify.default = stringify\nstringify.stable = deterministicStringify\nstringify.stableStringify = deterministicStringify\n\nvar LIMIT_REPLACE_NODE = '[...]'\nvar CIRCULAR_REPLACE_NODE = '[Circular]'\n\nvar arr = []\nvar replacerStack = []\n\nfunction defaultOptions () {\n return {\n depthLimit: Number.MAX_SAFE_INTEGER,\n edgesLimit: Number.MAX_SAFE_INTEGER\n }\n}\n\n// Regular stringify\nfunction stringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n decirc(obj, '', 0, [], undefined, 0, options)\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(obj, replacer, spacer)\n } else {\n res = JSON.stringify(obj, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction setReplace (replace, val, k, parent) {\n var propertyDescriptor = Object.getOwnPropertyDescriptor(parent, k)\n if (propertyDescriptor.get !== undefined) {\n if (propertyDescriptor.configurable) {\n Object.defineProperty(parent, k, { value: replace })\n arr.push([parent, k, val, propertyDescriptor])\n } else {\n replacerStack.push([val, k, replace])\n }\n } else {\n parent[k] = replace\n arr.push([parent, k, val])\n }\n}\n\nfunction decirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n decirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n var keys = Object.keys(val)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n decirc(val[key], key, i, stack, val, depth, options)\n }\n }\n stack.pop()\n }\n}\n\n// Stable-stringify\nfunction compareFunction (a, b) {\n if (a < b) {\n return -1\n }\n if (a > b) {\n return 1\n }\n return 0\n}\n\nfunction deterministicStringify (obj, replacer, spacer, options) {\n if (typeof options === 'undefined') {\n options = defaultOptions()\n }\n\n var tmp = deterministicDecirc(obj, '', 0, [], undefined, 0, options) || obj\n var res\n try {\n if (replacerStack.length === 0) {\n res = JSON.stringify(tmp, replacer, spacer)\n } else {\n res = JSON.stringify(tmp, replaceGetterValues(replacer), spacer)\n }\n } catch (_) {\n return JSON.stringify('[unable to serialize, circular reference is too complex to analyze]')\n } finally {\n // Ensure that we restore the object as it was.\n while (arr.length !== 0) {\n var part = arr.pop()\n if (part.length === 4) {\n Object.defineProperty(part[0], part[1], part[3])\n } else {\n part[0][part[1]] = part[2]\n }\n }\n }\n return res\n}\n\nfunction deterministicDecirc (val, k, edgeIndex, stack, parent, depth, options) {\n depth += 1\n var i\n if (typeof val === 'object' && val !== null) {\n for (i = 0; i < stack.length; i++) {\n if (stack[i] === val) {\n setReplace(CIRCULAR_REPLACE_NODE, val, k, parent)\n return\n }\n }\n try {\n if (typeof val.toJSON === 'function') {\n return\n }\n } catch (_) {\n return\n }\n\n if (\n typeof options.depthLimit !== 'undefined' &&\n depth > options.depthLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n if (\n typeof options.edgesLimit !== 'undefined' &&\n edgeIndex + 1 > options.edgesLimit\n ) {\n setReplace(LIMIT_REPLACE_NODE, val, k, parent)\n return\n }\n\n stack.push(val)\n // Optimize for Arrays. Big arrays could kill the performance otherwise!\n if (Array.isArray(val)) {\n for (i = 0; i < val.length; i++) {\n deterministicDecirc(val[i], i, i, stack, val, depth, options)\n }\n } else {\n // Create a temporary object in the required way\n var tmp = {}\n var keys = Object.keys(val).sort(compareFunction)\n for (i = 0; i < keys.length; i++) {\n var key = keys[i]\n deterministicDecirc(val[key], key, i, stack, val, depth, options)\n tmp[key] = val[key]\n }\n if (typeof parent !== 'undefined') {\n arr.push([parent, k, val])\n parent[k] = tmp\n } else {\n return tmp\n }\n }\n stack.pop()\n }\n}\n\n// wraps replacer function to handle values we couldn't replace\n// and mark them as replaced value\nfunction replaceGetterValues (replacer) {\n replacer =\n typeof replacer !== 'undefined'\n ? replacer\n : function (k, v) {\n return v\n }\n return function (key, val) {\n if (replacerStack.length > 0) {\n for (var i = 0; i < replacerStack.length; i++) {\n var part = replacerStack[i]\n if (part[1] === key && part[0] === val) {\n val = part[2]\n replacerStack.splice(i, 1)\n break\n }\n }\n }\n return replacer.call(this, key, val)\n }\n}\n",
62
+ "'use strict'\n\nmodule.exports = prettifyError\n\nconst joinLinesWithIndentation = require('./join-lines-with-indentation')\n\n/**\n * @typedef {object} PrettifyErrorParams\n * @property {string} keyName The key assigned to this error in the log object.\n * @property {string} lines The STRINGIFIED error. If the error field has a\n * custom prettifier, that should be pre-applied as well.\n * @property {string} ident The indentation sequence to use.\n * @property {string} eol The EOL sequence to use.\n */\n\n/**\n * Prettifies an error string into a multi-line format.\n *\n * @param {PrettifyErrorParams} input\n *\n * @returns {string}\n */\nfunction prettifyError ({ keyName, lines, eol, ident }) {\n let result = ''\n const joinedLines = joinLinesWithIndentation({ input: lines, ident, eol })\n const splitLines = `${ident}${keyName}: ${joinedLines}${eol}`.split(eol)\n\n for (let j = 0; j < splitLines.length; j += 1) {\n if (j !== 0) result += eol\n\n const line = splitLines[j]\n if (/^\\s*\"stack\"/.test(line)) {\n const matches = /^(\\s*\"stack\":)\\s*(\".*\"),?$/.exec(line)\n /* istanbul ignore else */\n if (matches && matches.length === 3) {\n const indentSize = /^\\s*/.exec(line)[0].length + 4\n const indentation = ' '.repeat(indentSize)\n const stackMessage = matches[2]\n result += matches[1] + eol + indentation + JSON.parse(stackMessage).replace(/\\n/g, eol + indentation)\n } else {\n result += line\n }\n } else {\n result += line\n }\n }\n\n return result\n}\n",
63
+ "'use strict'\n\nmodule.exports = prettifyObject\n\nconst {\n LOGGER_KEYS\n} = require('../constants')\n\nconst stringifySafe = require('fast-safe-stringify')\nconst joinLinesWithIndentation = require('./join-lines-with-indentation')\nconst prettifyError = require('./prettify-error')\n\n/**\n * @typedef {object} PrettifyObjectParams\n * @property {object} log The object to prettify.\n * @property {boolean} [excludeLoggerKeys] Indicates if known logger specific\n * keys should be excluded from prettification. Default: `true`.\n * @property {string[]} [skipKeys] A set of object keys to exclude from the\n * * prettified result. Default: `[]`.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Prettifies a standard object. Special care is taken when processing the object\n * to handle child objects that are attached to keys known to contain error\n * objects.\n *\n * @param {PrettifyObjectParams} input\n *\n * @returns {string} The prettified string. This can be as little as `''` if\n * there was nothing to prettify.\n */\nfunction prettifyObject ({\n log,\n excludeLoggerKeys = true,\n skipKeys = [],\n context\n}) {\n const {\n EOL: eol,\n IDENT: ident,\n customPrettifiers,\n errorLikeObjectKeys: errorLikeKeys,\n objectColorizer,\n singleLine,\n colorizer\n } = context\n const keysToIgnore = [].concat(skipKeys)\n\n /* istanbul ignore else */\n if (excludeLoggerKeys === true) Array.prototype.push.apply(keysToIgnore, LOGGER_KEYS)\n\n let result = ''\n\n // Split object keys into two categories: error and non-error\n const { plain, errors } = Object.entries(log).reduce(({ plain, errors }, [k, v]) => {\n if (keysToIgnore.includes(k) === false) {\n // Pre-apply custom prettifiers, because all 3 cases below will need this\n const pretty = typeof customPrettifiers[k] === 'function'\n ? customPrettifiers[k](v, k, log, { colors: colorizer.colors })\n : v\n if (errorLikeKeys.includes(k)) {\n errors[k] = pretty\n } else {\n plain[k] = pretty\n }\n }\n return { plain, errors }\n }, { plain: {}, errors: {} })\n\n if (singleLine) {\n // Stringify the entire object as a single JSON line\n /* istanbul ignore else */\n if (Object.keys(plain).length > 0) {\n result += objectColorizer.greyMessage(stringifySafe(plain))\n }\n result += eol\n // Avoid printing the escape character on escaped backslashes.\n result = result.replace(/\\\\\\\\/gi, '\\\\')\n } else {\n // Put each object entry on its own line\n Object.entries(plain).forEach(([keyName, keyValue]) => {\n // custom prettifiers are already applied above, so we can skip it now\n let lines = typeof customPrettifiers[keyName] === 'function'\n ? keyValue\n : stringifySafe(keyValue, null, 2)\n\n if (lines === undefined) return\n\n // Avoid printing the escape character on escaped backslashes.\n lines = lines.replace(/\\\\\\\\/gi, '\\\\')\n\n const joinedLines = joinLinesWithIndentation({ input: lines, ident, eol })\n result += `${ident}${objectColorizer.property(keyName)}:${joinedLines.startsWith(eol) ? '' : ' '}${joinedLines}${eol}`\n })\n }\n\n // Errors\n Object.entries(errors).forEach(([keyName, keyValue]) => {\n // custom prettifiers are already applied above, so we can skip it now\n const lines = typeof customPrettifiers[keyName] === 'function'\n ? keyValue\n : stringifySafe(keyValue, null, 2)\n\n if (lines === undefined) return\n\n result += prettifyError({ keyName, lines, eol, ident })\n })\n\n return result\n}\n",
64
+ "'use strict'\n\nmodule.exports = prettifyErrorLog\n\nconst {\n LOGGER_KEYS\n} = require('../constants')\n\nconst isObject = require('./is-object')\nconst joinLinesWithIndentation = require('./join-lines-with-indentation')\nconst prettifyObject = require('./prettify-object')\n\n/**\n * @typedef {object} PrettifyErrorLogParams\n * @property {object} log The error log to prettify.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Given a log object that has a `type: 'Error'` key, prettify the object and\n * return the result. In other\n *\n * @param {PrettifyErrorLogParams} input\n *\n * @returns {string} A string that represents the prettified error log.\n */\nfunction prettifyErrorLog ({ log, context }) {\n const {\n EOL: eol,\n IDENT: ident,\n errorProps: errorProperties,\n messageKey\n } = context\n const stack = log.stack\n const joinedLines = joinLinesWithIndentation({ input: stack, ident, eol })\n let result = `${ident}${joinedLines}${eol}`\n\n if (errorProperties.length > 0) {\n const excludeProperties = LOGGER_KEYS.concat(messageKey, 'type', 'stack')\n let propertiesToPrint\n if (errorProperties[0] === '*') {\n // Print all sibling properties except for the standard exclusions.\n propertiesToPrint = Object.keys(log).filter(k => excludeProperties.includes(k) === false)\n } else {\n // Print only specified properties unless the property is a standard exclusion.\n propertiesToPrint = errorProperties.filter(k => excludeProperties.includes(k) === false)\n }\n\n for (let i = 0; i < propertiesToPrint.length; i += 1) {\n const key = propertiesToPrint[i]\n if (key in log === false) continue\n if (isObject(log[key])) {\n // The nested object may have \"logger\" type keys but since they are not\n // at the root level of the object being processed, we want to print them.\n // Thus, we invoke with `excludeLoggerKeys: false`.\n const prettifiedObject = prettifyObject({\n log: log[key],\n excludeLoggerKeys: false,\n context: {\n ...context,\n IDENT: ident + ident\n }\n })\n result = `${result}${ident}${key}: {${eol}${prettifiedObject}${ident}}${eol}`\n continue\n }\n result = `${result}${ident}${key}: ${log[key]}${eol}`\n }\n }\n\n return result\n}\n",
65
+ "'use strict'\n\nmodule.exports = prettifyLevel\n\nconst getPropertyValue = require('./get-property-value')\n\n/**\n * @typedef {object} PrettifyLevelParams\n * @property {object} log The log object.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Checks if the passed in log has a `level` value and returns a prettified\n * string for that level if so.\n *\n * @param {PrettifyLevelParams} input\n *\n * @returns {undefined|string} If `log` does not have a `level` property then\n * `undefined` will be returned. Otherwise, a string from the specified\n * `colorizer` is returned.\n */\nfunction prettifyLevel ({ log, context }) {\n const {\n colorizer,\n customLevels,\n customLevelNames,\n levelKey,\n getLevelLabelData\n } = context\n const prettifier = context.customPrettifiers?.level\n const output = getPropertyValue(log, levelKey)\n if (output === undefined) return undefined\n const labelColorized = colorizer(output, { customLevels, customLevelNames })\n if (prettifier) {\n const [label] = getLevelLabelData(output)\n return prettifier(output, levelKey, log, { label, labelColorized, colors: colorizer.colors })\n }\n return labelColorized\n}\n",
66
+ "'use strict'\n\nmodule.exports = prettifyMessage\n\nconst {\n LEVELS\n} = require('../constants')\n\nconst getPropertyValue = require('./get-property-value')\nconst interpretConditionals = require('./interpret-conditionals')\n\n/**\n * @typedef {object} PrettifyMessageParams\n * @property {object} log The log object with the message to colorize.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Prettifies a message string if the given `log` has a message property.\n *\n * @param {PrettifyMessageParams} input\n *\n * @returns {undefined|string} If the message key is not found, or the message\n * key is not a string, then `undefined` will be returned. Otherwise, a string\n * that is the prettified message.\n */\nfunction prettifyMessage ({ log, context }) {\n const {\n colorizer,\n customLevels,\n levelKey,\n levelLabel,\n messageFormat,\n messageKey,\n useOnlyCustomProps\n } = context\n if (messageFormat && typeof messageFormat === 'string') {\n const parsedMessageFormat = interpretConditionals(messageFormat, log)\n\n const message = String(parsedMessageFormat).replace(\n /{([^{}]+)}/g,\n function (match, p1) {\n // return log level as string instead of int\n let level\n if (p1 === levelLabel && (level = getPropertyValue(log, levelKey)) !== undefined) {\n const condition = useOnlyCustomProps ? customLevels === undefined : customLevels[level] === undefined\n return condition ? LEVELS[level] : customLevels[level]\n }\n\n // Parse nested key access, e.g. `{keyA.subKeyB}`.\n return getPropertyValue(log, p1) || ''\n })\n return colorizer.message(message)\n }\n if (messageFormat && typeof messageFormat === 'function') {\n const msg = messageFormat(log, messageKey, levelLabel, { colors: colorizer.colors })\n return colorizer.message(msg)\n }\n if (messageKey in log === false) return undefined\n if (typeof log[messageKey] !== 'string' && typeof log[messageKey] !== 'number' && typeof log[messageKey] !== 'boolean') return undefined\n return colorizer.message(log[messageKey])\n}\n",
67
+ "'use strict'\n\nmodule.exports = prettifyMetadata\n\n/**\n * @typedef {object} PrettifyMetadataParams\n * @property {object} log The log that may or may not contain metadata to\n * be prettified.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Prettifies metadata that is usually present in a Pino log line. It looks for\n * fields `name`, `pid`, `hostname`, and `caller` and returns a formatted string using\n * the fields it finds.\n *\n * @param {PrettifyMetadataParams} input\n *\n * @returns {undefined|string} If no metadata is found then `undefined` is\n * returned. Otherwise, a string of prettified metadata is returned.\n */\nfunction prettifyMetadata ({ log, context }) {\n const { customPrettifiers: prettifiers, colorizer } = context\n let line = ''\n\n if (log.name || log.pid || log.hostname) {\n line += '('\n\n if (log.name) {\n line += prettifiers.name\n ? prettifiers.name(log.name, 'name', log, { colors: colorizer.colors })\n : log.name\n }\n\n if (log.pid) {\n const prettyPid = prettifiers.pid\n ? prettifiers.pid(log.pid, 'pid', log, { colors: colorizer.colors })\n : log.pid\n if (log.name && log.pid) {\n line += '/' + prettyPid\n } else {\n line += prettyPid\n }\n }\n\n if (log.hostname) {\n // If `pid` and `name` were in the ignore keys list then we don't need\n // the leading space.\n const prettyHostname = prettifiers.hostname\n ? prettifiers.hostname(log.hostname, 'hostname', log, { colors: colorizer.colors })\n : log.hostname\n\n line += `${line === '(' ? 'on' : ' on'} ${prettyHostname}`\n }\n\n line += ')'\n }\n\n if (log.caller) {\n const prettyCaller = prettifiers.caller\n ? prettifiers.caller(log.caller, 'caller', log, { colors: colorizer.colors })\n : log.caller\n\n line += `${line === '' ? '' : ' '}<${prettyCaller}>`\n }\n\n if (line === '') {\n return undefined\n } else {\n return line\n }\n}\n",
68
+ "'use strict'\n\nmodule.exports = prettifyTime\n\nconst formatTime = require('./format-time')\n\n/**\n * @typedef {object} PrettifyTimeParams\n * @property {object} log The log object with the timestamp to be prettified.\n * @property {PrettyContext} context The context object built from parsing\n * the options.\n */\n\n/**\n * Prettifies a timestamp if the given `log` has either `time`, `timestamp` or custom specified timestamp\n * property.\n *\n * @param {PrettifyTimeParams} input\n *\n * @returns {undefined|string} If a timestamp property cannot be found then\n * `undefined` is returned. Otherwise, the prettified time is returned as a\n * string.\n */\nfunction prettifyTime ({ log, context }) {\n const {\n timestampKey,\n translateTime: translateFormat\n } = context\n const prettifier = context.customPrettifiers?.time\n let time = null\n\n if (timestampKey in log) {\n time = log[timestampKey]\n } else if ('timestamp' in log) {\n time = log.timestamp\n }\n\n if (time === null) return undefined\n const output = translateFormat ? formatTime(time, translateFormat) : time\n\n return prettifier ? prettifier(output) : `[${output}]`\n}\n",
69
+ "'use strict'\n\nmodule.exports = {\n buildSafeSonicBoom: require('./build-safe-sonic-boom.js'),\n createDate: require('./create-date.js'),\n deleteLogProperty: require('./delete-log-property.js'),\n filterLog: require('./filter-log.js'),\n formatTime: require('./format-time.js'),\n getPropertyValue: require('./get-property-value.js'),\n handleCustomLevelsNamesOpts: require('./handle-custom-levels-names-opts.js'),\n handleCustomLevelsOpts: require('./handle-custom-levels-opts.js'),\n interpretConditionals: require('./interpret-conditionals.js'),\n isObject: require('./is-object.js'),\n isValidDate: require('./is-valid-date.js'),\n joinLinesWithIndentation: require('./join-lines-with-indentation.js'),\n noop: require('./noop.js'),\n parseFactoryOptions: require('./parse-factory-options.js'),\n prettifyErrorLog: require('./prettify-error-log.js'),\n prettifyError: require('./prettify-error.js'),\n prettifyLevel: require('./prettify-level.js'),\n prettifyMessage: require('./prettify-message.js'),\n prettifyMetadata: require('./prettify-metadata.js'),\n prettifyObject: require('./prettify-object.js'),\n prettifyTime: require('./prettify-time.js'),\n splitPropertyKey: require('./split-property-key.js'),\n getLevelLabelData: require('./get-level-label-data')\n}\n\n// The remainder of this file consists of jsdoc blocks that are difficult to\n// determine a more appropriate \"home\" for. As an example, the blocks associated\n// with custom prettifiers could live in either the `prettify-level`,\n// `prettify-metadata`, or `prettify-time` files since they are the primary\n// files where such code is used. But we want a central place to define common\n// doc blocks, so we are picking this file as the answer.\n\n/**\n * A hash of log property names mapped to prettifier functions. When the\n * incoming log data is being processed for prettification, any key on the log\n * that matches a key in a custom prettifiers hash will be prettified using\n * that matching custom prettifier. The value passed to the custom prettifier\n * will the value associated with the corresponding log key.\n *\n * The hash may contain any arbitrary keys for arbitrary log properties, but it\n * may also contain a set of predefined key names that map to well-known log\n * properties. These keys are:\n *\n * + `time` (for the timestamp field)\n * + `level` (for the level label field; value may be a level number instead\n * of a level label)\n * + `hostname`\n * + `pid`\n * + `name`\n * + `caller`\n *\n * @typedef {Object.<string, CustomPrettifierFunc>} CustomPrettifiers\n */\n\n/**\n * A synchronous function to be used for prettifying a log property. It must\n * return a string.\n *\n * @typedef {function} CustomPrettifierFunc\n * @param {any} value The value to be prettified for the key associated with\n * the prettifier.\n * @returns {string}\n */\n\n/**\n * A tokenized string that indicates how the prettified log line should be\n * formatted. Tokens are either log properties enclosed in curly braces, e.g.\n * `{levelLabel}`, `{pid}`, or `{req.url}`, or conditional directives in curly\n * braces. The only conditional directives supported are `if` and `end`, e.g.\n * `{if pid}{pid}{end}`; every `if` must have a matching `end`. Nested\n * conditions are not supported.\n *\n * @typedef {string} MessageFormatString\n *\n * @example\n * `{levelLabel} - {if pid}{pid} - {end}url:{req.url}`\n */\n\n/**\n * @typedef {object} PrettifyMessageExtras\n * @property {object} colors Available color functions based on `useColor` (or `colorize`) context\n * the options.\n */\n\n/**\n * A function that accepts a log object, name of the message key, and name of\n * the level label key and returns a formatted log line.\n *\n * Note: this function must be synchronous.\n *\n * @typedef {function} MessageFormatFunction\n * @param {object} log The log object to be processed.\n * @param {string} messageKey The name of the key in the `log` object that\n * contains the log message.\n * @param {string} levelLabel The name of the key in the `log` object that\n * contains the log level name.\n * @param {PrettifyMessageExtras} extras Additional data available for message context\n * @returns {string}\n *\n * @example\n * function (log, messageKey, levelLabel) {\n * return `${log[levelLabel]} - ${log[messageKey]}`\n * }\n */\n",
70
+ "'use strict'\n\nconst hasBuffer = typeof Buffer !== 'undefined'\nconst suspectProtoRx = /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/\nconst suspectConstructorRx = /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/\n\n/**\n * @description Internal parse function that parses JSON text with security checks.\n * @private\n * @param {string|Buffer} text - The JSON text string or Buffer to parse.\n * @param {Function} [reviver] - The JSON.parse() optional reviver argument.\n * @param {import('./types').ParseOptions} [options] - Optional configuration object.\n * @returns {*} The parsed object.\n * @throws {SyntaxError} If a forbidden prototype property is found and `options.protoAction` or\n * `options.constructorAction` is `'error'`.\n */\nfunction _parse (text, reviver, options) {\n // Normalize arguments\n if (options == null) {\n if (reviver !== null && typeof reviver === 'object') {\n options = reviver\n reviver = undefined\n }\n }\n\n if (hasBuffer && Buffer.isBuffer(text)) {\n text = text.toString()\n }\n\n // BOM checker\n if (text && text.charCodeAt(0) === 0xFEFF) {\n text = text.slice(1)\n }\n\n // Parse normally, allowing exceptions\n const obj = JSON.parse(text, reviver)\n\n // Ignore null and non-objects\n if (obj === null || typeof obj !== 'object') {\n return obj\n }\n\n const protoAction = (options && options.protoAction) || 'error'\n const constructorAction = (options && options.constructorAction) || 'error'\n\n // options: 'error' (default) / 'remove' / 'ignore'\n if (protoAction === 'ignore' && constructorAction === 'ignore') {\n return obj\n }\n\n if (protoAction !== 'ignore' && constructorAction !== 'ignore') {\n if (suspectProtoRx.test(text) === false && suspectConstructorRx.test(text) === false) {\n return obj\n }\n } else if (protoAction !== 'ignore' && constructorAction === 'ignore') {\n if (suspectProtoRx.test(text) === false) {\n return obj\n }\n } else {\n if (suspectConstructorRx.test(text) === false) {\n return obj\n }\n }\n\n // Scan result for proto keys\n return filter(obj, { protoAction, constructorAction, safe: options && options.safe })\n}\n\n/**\n * @description Scans and filters an object for forbidden prototype properties.\n * @param {Object} obj - The object being scanned.\n * @param {import('./types').ParseOptions} [options] - Optional configuration object.\n * @returns {Object|null} The filtered object, or `null` if safe mode is enabled and issues are found.\n * @throws {SyntaxError} If a forbidden prototype property is found and `options.protoAction` or\n * `options.constructorAction` is `'error'`.\n */\nfunction filter (obj, { protoAction = 'error', constructorAction = 'error', safe } = {}) {\n let next = [obj]\n\n while (next.length) {\n const nodes = next\n next = []\n\n for (const node of nodes) {\n if (protoAction !== 'ignore' && Object.prototype.hasOwnProperty.call(node, '__proto__')) { // Avoid calling node.hasOwnProperty directly\n if (safe === true) {\n return null\n } else if (protoAction === 'error') {\n throw new SyntaxError('Object contains forbidden prototype property')\n }\n\n delete node.__proto__ // eslint-disable-line no-proto\n }\n\n if (constructorAction !== 'ignore' &&\n Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n node.constructor !== null &&\n typeof node.constructor === 'object' &&\n Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')) { // Avoid calling node.hasOwnProperty directly\n if (safe === true) {\n return null\n } else if (constructorAction === 'error') {\n throw new SyntaxError('Object contains forbidden prototype property')\n }\n\n delete node.constructor\n }\n\n for (const key in node) {\n const value = node[key]\n if (value && typeof value === 'object') {\n next.push(value)\n }\n }\n }\n }\n return obj\n}\n\n/**\n * @description Parses a given JSON-formatted text into an object.\n * @param {string|Buffer} text - The JSON text string or Buffer to parse.\n * @param {Function} [reviver] - The `JSON.parse()` optional reviver argument, or options object.\n * @param {import('./types').ParseOptions} [options] - Optional configuration object.\n * @returns {*} The parsed object.\n * @throws {SyntaxError} If the JSON text is malformed or contains forbidden prototype properties\n * when `options.protoAction` or `options.constructorAction` is `'error'`.\n */\nfunction parse (text, reviver, options) {\n const { stackTraceLimit } = Error\n Error.stackTraceLimit = 0\n try {\n return _parse(text, reviver, options)\n } finally {\n Error.stackTraceLimit = stackTraceLimit\n }\n}\n\n/**\n * @description Safely parses a given JSON-formatted text into an object.\n * @param {string|Buffer} text - The JSON text string or Buffer to parse.\n * @param {Function} [reviver] - The `JSON.parse()` optional reviver argument.\n * @returns {*|null|undefined} The parsed object, `null` if security issues found, or `undefined` on parse error.\n */\nfunction safeParse (text, reviver) {\n const { stackTraceLimit } = Error\n Error.stackTraceLimit = 0\n try {\n return _parse(text, reviver, { safe: true })\n } catch {\n return undefined\n } finally {\n Error.stackTraceLimit = stackTraceLimit\n }\n}\n\nmodule.exports = parse\nmodule.exports.default = parse\nmodule.exports.parse = parse\nmodule.exports.safeParse = safeParse\nmodule.exports.scan = filter\n",
71
+ "'use strict'\n\nmodule.exports = pretty\n\nconst sjs = require('secure-json-parse')\n\nconst isObject = require('./utils/is-object')\nconst prettifyErrorLog = require('./utils/prettify-error-log')\nconst prettifyLevel = require('./utils/prettify-level')\nconst prettifyMessage = require('./utils/prettify-message')\nconst prettifyMetadata = require('./utils/prettify-metadata')\nconst prettifyObject = require('./utils/prettify-object')\nconst prettifyTime = require('./utils/prettify-time')\nconst filterLog = require('./utils/filter-log')\n\nconst {\n LEVELS,\n LEVEL_KEY,\n LEVEL_NAMES\n} = require('./constants')\n\nconst jsonParser = input => {\n try {\n return { value: sjs.parse(input, { protoAction: 'remove' }) }\n } catch (err) {\n return { err }\n }\n}\n\n/**\n * Orchestrates processing the received log data according to the provided\n * configuration and returns a prettified log string.\n *\n * @typedef {function} LogPrettifierFunc\n * @param {string|object} inputData A log string or a log-like object.\n * @returns {string} A string that represents the prettified log data.\n */\nfunction pretty (inputData) {\n let log\n if (!isObject(inputData)) {\n const parsed = jsonParser(inputData)\n if (parsed.err || !isObject(parsed.value)) {\n // pass through\n return inputData + this.EOL\n }\n log = parsed.value\n } else {\n log = inputData\n }\n\n if (this.minimumLevel) {\n // We need to figure out if the custom levels has the desired minimum\n // level & use that one if found. If not, determine if the level exists\n // in the standard levels. In both cases, make sure we have the level\n // number instead of the level name.\n let condition\n if (this.useOnlyCustomProps) {\n condition = this.customLevels\n } else {\n condition = this.customLevelNames[this.minimumLevel] !== undefined\n }\n let minimum\n if (condition) {\n minimum = this.customLevelNames[this.minimumLevel]\n } else {\n minimum = LEVEL_NAMES[this.minimumLevel]\n }\n if (!minimum) {\n minimum = typeof this.minimumLevel === 'string'\n ? LEVEL_NAMES[this.minimumLevel]\n : LEVEL_NAMES[LEVELS[this.minimumLevel].toLowerCase()]\n }\n\n const level = log[this.levelKey === undefined ? LEVEL_KEY : this.levelKey]\n if (level < minimum) return\n }\n\n const prettifiedMessage = prettifyMessage({ log, context: this.context })\n\n if (this.ignoreKeys || this.includeKeys) {\n log = filterLog({ log, context: this.context })\n }\n\n const prettifiedLevel = prettifyLevel({\n log,\n context: {\n ...this.context,\n // This is odd. The colorizer ends up relying on the value of\n // `customProperties` instead of the original `customLevels` and\n // `customLevelNames`.\n ...this.context.customProperties\n }\n })\n const prettifiedMetadata = prettifyMetadata({ log, context: this.context })\n const prettifiedTime = prettifyTime({ log, context: this.context })\n\n let line = ''\n if (this.levelFirst && prettifiedLevel) {\n line = `${prettifiedLevel}`\n }\n\n if (prettifiedTime && line === '') {\n line = `${prettifiedTime}`\n } else if (prettifiedTime) {\n line = `${line} ${prettifiedTime}`\n }\n\n if (!this.levelFirst && prettifiedLevel) {\n if (line.length > 0) {\n line = `${line} ${prettifiedLevel}`\n } else {\n line = prettifiedLevel\n }\n }\n\n if (prettifiedMetadata) {\n if (line.length > 0) {\n line = `${line} ${prettifiedMetadata}:`\n } else {\n line = prettifiedMetadata\n }\n }\n\n if (line.endsWith(':') === false && line !== '') {\n line += ':'\n }\n\n if (prettifiedMessage !== undefined) {\n if (line.length > 0) {\n line = `${line} ${prettifiedMessage}`\n } else {\n line = prettifiedMessage\n }\n }\n\n if (line.length > 0 && !this.singleLine) {\n line += this.EOL\n }\n\n // pino@7+ does not log this anymore\n if (log.type === 'Error' && typeof log.stack === 'string') {\n const prettifiedErrorLog = prettifyErrorLog({ log, context: this.context })\n if (this.singleLine) line += this.EOL\n line += prettifiedErrorLog\n } else if (this.hideObject === false) {\n const skipKeys = [\n this.messageKey,\n this.levelKey,\n this.timestampKey\n ]\n .map((key) => key.replaceAll(/\\\\/g, ''))\n .filter(key => {\n return typeof log[key] === 'string' ||\n typeof log[key] === 'number' ||\n typeof log[key] === 'boolean'\n })\n const prettifiedObject = prettifyObject({\n log,\n skipKeys,\n context: this.context\n })\n\n // In single line mode, include a space only if prettified version isn't empty\n if (this.singleLine && !/^\\s$/.test(prettifiedObject)) {\n line += ' '\n }\n line += prettifiedObject\n }\n\n return line\n}\n",
72
+ "'use strict'\n\nconst { isColorSupported } = require('colorette')\nconst pump = require('pump')\nconst { Transform } = require('node:stream')\nconst abstractTransport = require('pino-abstract-transport')\nconst colors = require('./lib/colors')\nconst {\n ERROR_LIKE_KEYS,\n LEVEL_KEY,\n LEVEL_LABEL,\n MESSAGE_KEY,\n TIMESTAMP_KEY\n} = require('./lib/constants')\nconst {\n buildSafeSonicBoom,\n parseFactoryOptions\n} = require('./lib/utils')\nconst pretty = require('./lib/pretty')\n\n/**\n * @typedef {object} PinoPrettyOptions\n * @property {boolean} [colorize] Indicates if colors should be used when\n * prettifying. The default will be determined by the terminal capabilities at\n * run time.\n * @property {boolean} [colorizeObjects=true] Apply coloring to rendered objects\n * when coloring is enabled.\n * @property {boolean} [crlf=false] End lines with `\\r\\n` instead of `\\n`.\n * @property {string|null} [customColors=null] A comma separated list of colors\n * to use for specific level labels, e.g. `err:red,info:blue`.\n * @property {string|null} [customLevels=null] A comma separated list of user\n * defined level names and numbers, e.g. `err:99,info:1`.\n * @property {CustomPrettifiers} [customPrettifiers={}] A set of prettifier\n * functions to apply to keys defined in this object.\n * @property {K_ERROR_LIKE_KEYS} [errorLikeObjectKeys] A list of string property\n * names to consider as error objects.\n * @property {string} [errorProps=''] A comma separated list of properties on\n * error objects to include in the output.\n * @property {boolean} [hideObject=false] When `true`, data objects will be\n * omitted from the output (except for error objects).\n * @property {string} [ignore='hostname'] A comma separated list of log keys\n * to omit when outputting the prettified log information.\n * @property {undefined|string} [include=undefined] A comma separated list of\n * log keys to include in the prettified log information. Only the keys in this\n * list will be included in the output.\n * @property {boolean} [levelFirst=false] When true, the log level will be the\n * first field in the prettified output.\n * @property {string} [levelKey='level'] The key name in the log data that\n * contains the level value for the log.\n * @property {string} [levelLabel='levelLabel'] Token name to use in\n * `messageFormat` to represent the name of the logged level.\n * @property {null|MessageFormatString|MessageFormatFunction} [messageFormat=null]\n * When a string, defines how the prettified line should be formatted according\n * to defined tokens. When a function, a synchronous function that returns a\n * formatted string.\n * @property {string} [messageKey='msg'] Defines the key in incoming logs that\n * contains the message of the log, if present.\n * @property {undefined|string|number} [minimumLevel=undefined] The minimum\n * level for logs that should be processed. Any logs below this level will\n * be omitted.\n * @property {object} [outputStream=process.stdout] The stream to write\n * prettified log lines to.\n * @property {boolean} [singleLine=false] When `true` any objects, except error\n * objects, in the log data will be printed as a single line instead as multiple\n * lines.\n * @property {string} [timestampKey='time'] Defines the key in incoming logs\n * that contains the timestamp of the log, if present.\n * @property {boolean|string} [translateTime=true] When true, will translate a\n * JavaScript date integer into a human-readable string. If set to a string,\n * it must be a format string.\n * @property {boolean} [useOnlyCustomProps=true] When true, only custom levels\n * and colors will be used if they have been provided.\n */\n\n/**\n * The default options that will be used when prettifying log lines.\n *\n * @type {PinoPrettyOptions}\n */\nconst defaultOptions = {\n colorize: isColorSupported,\n colorizeObjects: true,\n crlf: false,\n customColors: null,\n customLevels: null,\n customPrettifiers: {},\n errorLikeObjectKeys: ERROR_LIKE_KEYS,\n errorProps: '',\n hideObject: false,\n ignore: 'hostname',\n include: undefined,\n levelFirst: false,\n levelKey: LEVEL_KEY,\n levelLabel: LEVEL_LABEL,\n messageFormat: null,\n messageKey: MESSAGE_KEY,\n minimumLevel: undefined,\n outputStream: process.stdout,\n singleLine: false,\n timestampKey: TIMESTAMP_KEY,\n translateTime: true,\n useOnlyCustomProps: true\n}\n\n/**\n * Processes the supplied options and returns a function that accepts log data\n * and produces a prettified log string.\n *\n * @param {PinoPrettyOptions} options Configuration for the prettifier.\n * @returns {LogPrettifierFunc}\n */\nfunction prettyFactory (options) {\n const context = parseFactoryOptions(Object.assign({}, defaultOptions, options))\n return pretty.bind({ ...context, context })\n}\n\n/**\n * @typedef {PinoPrettyOptions} BuildStreamOpts\n * @property {object|number|string} [destination] A destination stream, file\n * descriptor, or target path to a file.\n * @property {boolean} [append]\n * @property {boolean} [mkdir]\n * @property {boolean} [sync=false]\n */\n\n/**\n * Constructs a {@link LogPrettifierFunc} and a stream to which the produced\n * prettified log data will be written.\n *\n * @param {BuildStreamOpts} opts\n * @returns {Transform | (Transform & OnUnknown)}\n */\nfunction build (opts = {}) {\n let pretty = prettyFactory(opts)\n let destination\n return abstractTransport(function (source) {\n source.on('message', function pinoConfigListener (message) {\n if (!message || message.code !== 'PINO_CONFIG') return\n Object.assign(opts, {\n messageKey: message.config.messageKey,\n errorLikeObjectKeys: Array.from(new Set([...(opts.errorLikeObjectKeys || ERROR_LIKE_KEYS), message.config.errorKey])),\n customLevels: message.config.levels.values\n })\n pretty = prettyFactory(opts)\n source.off('message', pinoConfigListener)\n })\n const stream = new Transform({\n objectMode: true,\n autoDestroy: true,\n transform (chunk, enc, cb) {\n const line = pretty(chunk)\n cb(null, line)\n }\n })\n\n if (typeof opts.destination === 'object' && typeof opts.destination.write === 'function') {\n destination = opts.destination\n } else {\n destination = buildSafeSonicBoom({\n dest: opts.destination || 1,\n append: opts.append,\n mkdir: opts.mkdir,\n sync: opts.sync // by default sonic will be async\n })\n }\n\n source.on('unknown', function (line) {\n destination.write(line + '\\n')\n })\n\n pump(source, stream, destination)\n return stream\n }, {\n parse: 'lines',\n close (err, cb) {\n destination.on('close', () => {\n cb(err)\n })\n }\n })\n}\n\nmodule.exports = build\nmodule.exports.build = build\nmodule.exports.PinoPretty = build\nmodule.exports.prettyFactory = prettyFactory\nmodule.exports.colorizerFactory = colors\nmodule.exports.isColorSupported = isColorSupported\nmodule.exports.default = build\n",
73
+ "/**\r\n * Cache system types\r\n */\r\n\r\n/**\r\n * Cache entry with data and expiration\r\n */\r\nexport interface CacheEntry<T = any> {\r\n data: T;\r\n expiresAt: number;\r\n createdAt: number;\r\n}\r\n\r\n/**\r\n * Cache store interface\r\n * Implement this interface to create custom cache backends\r\n */\r\nexport interface CacheStore {\r\n /**\r\n * Get a value from the cache\r\n * Returns null if the key doesn't exist or has expired\r\n */\r\n get<T = any>(key: string): Promise<T | null>;\r\n\r\n /**\r\n * Set a value in the cache with optional TTL\r\n * @param key - Cache key\r\n * @param value - Value to store\r\n * @param ttl - Time to live in seconds (0 = no expiration)\r\n */\r\n set<T = any>(key: string, value: T, ttl?: number): Promise<void>;\r\n\r\n /**\r\n * Delete a value from the cache\r\n */\r\n delete(key: string): Promise<boolean>;\r\n\r\n /**\r\n * Check if a key exists in the cache\r\n */\r\n has(key: string): Promise<boolean>;\r\n\r\n /**\r\n * Clear all values from the cache\r\n */\r\n clear(): Promise<void>;\r\n\r\n /**\r\n * Delete all keys matching a pattern\r\n * @param pattern - Pattern to match (supports wildcards like 'user:*')\r\n */\r\n deletePattern(pattern: string): Promise<number>;\r\n\r\n /**\r\n * Get all keys matching a pattern\r\n */\r\n keys(pattern?: string): Promise<string[]>;\r\n}\r\n\r\n/**\r\n * Cache configuration for decorators and middleware\r\n */\r\nexport interface CacheOptions {\r\n /**\r\n * Time to live in seconds\r\n * Can be a number or a string like '5m', '1h', '1d'\r\n */\r\n ttl: number | string;\r\n\r\n /**\r\n * Cache key\r\n * Can include placeholders like {id}, {userId}\r\n * If not provided, generates key from route and params\r\n */\r\n key?: string;\r\n\r\n /**\r\n * Key prefix for namespacing\r\n */\r\n prefix?: string;\r\n\r\n /**\r\n * Whether to include query parameters in cache key\r\n */\r\n includeQuery?: boolean;\r\n\r\n /**\r\n * Whether to vary cache by specific headers\r\n */\r\n varyByHeaders?: string[];\r\n\r\n /**\r\n * Custom condition to determine if response should be cached\r\n */\r\n condition?: (result: any) => boolean;\r\n\r\n /**\r\n * Cache store to use (defaults to global store)\r\n */\r\n store?: CacheStore;\r\n}\r\n\r\n/**\r\n * Parse TTL string to seconds\r\n * Supports: '5s', '5m', '5h', '5d'\r\n */\r\nexport function parseTTL(ttl: number | string): number {\r\n if (typeof ttl === 'number') {\r\n return ttl;\r\n }\r\n\r\n const match = ttl.match(/^(\\d+)([smhd])$/);\r\n if (!match) {\r\n throw new Error(`Invalid TTL format: ${ttl}. Use format like '5s', '5m', '5h', '5d' or a number`);\r\n }\r\n\r\n const value = parseInt(match[1], 10);\r\n const unit = match[2];\r\n\r\n switch (unit) {\r\n case 's': return value;\r\n case 'm': return value * 60;\r\n case 'h': return value * 3600;\r\n case 'd': return value * 86400;\r\n default: throw new Error(`Unknown TTL unit: ${unit}`);\r\n }\r\n}\r\n\r\n",
74
+ "/**\r\n * In-memory cache store implementation\r\n * Suitable for single-instance applications\r\n * For distributed systems, use Redis store\r\n */\r\n\r\nimport type { CacheStore, CacheEntry } from './types';\r\n\r\nexport class MemoryCacheStore implements CacheStore {\r\n private cache: Map<string, CacheEntry> = new Map();\r\n private cleanupInterval?: ReturnType<typeof setInterval>;\r\n private maxSize: number;\r\n\r\n constructor(options: {\r\n /**\r\n * Maximum number of entries (default: 1000)\r\n * When exceeded, oldest entries are removed (LRU)\r\n */\r\n maxSize?: number;\r\n \r\n /**\r\n * Cleanup interval in milliseconds (default: 60000 = 1 minute)\r\n * Set to 0 to disable automatic cleanup\r\n */\r\n cleanupInterval?: number;\r\n } = {}) {\r\n this.maxSize = options.maxSize || 1000;\r\n\r\n // Set up automatic cleanup of expired entries\r\n const intervalMs = options.cleanupInterval ?? 60000;\r\n if (intervalMs > 0) {\r\n this.cleanupInterval = setInterval(() => {\r\n this.cleanup();\r\n }, intervalMs);\r\n }\r\n }\r\n\r\n async get<T = any>(key: string): Promise<T | null> {\r\n const entry = this.cache.get(key);\r\n \r\n if (!entry) {\r\n return null;\r\n }\r\n\r\n // Check if expired\r\n if (entry.expiresAt > 0 && Date.now() > entry.expiresAt) {\r\n this.cache.delete(key);\r\n return null;\r\n }\r\n\r\n return entry.data as T;\r\n }\r\n\r\n async set<T = any>(key: string, value: T, ttl: number = 0): Promise<void> {\r\n // Check size limit and remove oldest if necessary\r\n if (this.cache.size >= this.maxSize && !this.cache.has(key)) {\r\n this.removeOldest();\r\n }\r\n\r\n const now = Date.now();\r\n const entry: CacheEntry<T> = {\r\n data: value,\r\n createdAt: now,\r\n expiresAt: ttl > 0 ? now + (ttl * 1000) : 0\r\n };\r\n\r\n this.cache.set(key, entry);\r\n }\r\n\r\n async delete(key: string): Promise<boolean> {\r\n return this.cache.delete(key);\r\n }\r\n\r\n async has(key: string): Promise<boolean> {\r\n const entry = this.cache.get(key);\r\n \r\n if (!entry) {\r\n return false;\r\n }\r\n\r\n // Check if expired\r\n if (entry.expiresAt > 0 && Date.now() > entry.expiresAt) {\r\n this.cache.delete(key);\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n async clear(): Promise<void> {\r\n this.cache.clear();\r\n }\r\n\r\n async deletePattern(pattern: string): Promise<number> {\r\n const regex = this.patternToRegex(pattern);\r\n let deleted = 0;\r\n\r\n for (const key of this.cache.keys()) {\r\n if (regex.test(key)) {\r\n this.cache.delete(key);\r\n deleted++;\r\n }\r\n }\r\n\r\n return deleted;\r\n }\r\n\r\n async keys(pattern?: string): Promise<string[]> {\r\n const allKeys = Array.from(this.cache.keys());\r\n \r\n if (!pattern) {\r\n return allKeys;\r\n }\r\n\r\n const regex = this.patternToRegex(pattern);\r\n return allKeys.filter(key => regex.test(key));\r\n }\r\n\r\n /**\r\n * Get cache statistics\r\n */\r\n getStats(): {\r\n size: number;\r\n maxSize: number;\r\n hitRate?: number;\r\n } {\r\n return {\r\n size: this.cache.size,\r\n maxSize: this.maxSize\r\n };\r\n }\r\n\r\n /**\r\n * Clean up expired entries\r\n */\r\n private cleanup(): void {\r\n const now = Date.now();\r\n \r\n for (const [key, entry] of this.cache.entries()) {\r\n if (entry.expiresAt > 0 && now > entry.expiresAt) {\r\n this.cache.delete(key);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove oldest entry (LRU eviction)\r\n */\r\n private removeOldest(): void {\r\n let oldestKey: string | null = null;\r\n let oldestTime = Infinity;\r\n\r\n for (const [key, entry] of this.cache.entries()) {\r\n if (entry.createdAt < oldestTime) {\r\n oldestTime = entry.createdAt;\r\n oldestKey = key;\r\n }\r\n }\r\n\r\n if (oldestKey) {\r\n this.cache.delete(oldestKey);\r\n }\r\n }\r\n\r\n /**\r\n * Convert glob pattern to regex\r\n */\r\n private patternToRegex(pattern: string): RegExp {\r\n // Escape special regex characters except *\r\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n // Convert * to .*\r\n const regex = escaped.replace(/\\*/g, '.*');\r\n return new RegExp(`^${regex}$`);\r\n }\r\n\r\n /**\r\n * Stop cleanup interval\r\n */\r\n destroy(): void {\r\n if (this.cleanupInterval) {\r\n clearInterval(this.cleanupInterval);\r\n }\r\n }\r\n}\r\n\r\n",
75
+ "/**\r\n * Cache manager for managing cache stores and providing utilities\r\n */\r\n\r\nimport type { CacheStore, CacheOptions } from './types';\r\nimport { parseTTL } from './types';\r\nimport { MemoryCacheStore } from './memory-store';\r\n\r\n/**\r\n * Global cache manager\r\n */\r\nexport class CacheManager {\r\n private static defaultStore: CacheStore = new MemoryCacheStore();\r\n private static stores: Map<string, CacheStore> = new Map();\r\n\r\n /**\r\n * Set the default cache store\r\n */\r\n static setDefaultStore(store: CacheStore): void {\r\n this.defaultStore = store;\r\n }\r\n\r\n /**\r\n * Get the default cache store\r\n */\r\n static getDefaultStore(): CacheStore {\r\n return this.defaultStore;\r\n }\r\n\r\n /**\r\n * Register a named cache store\r\n */\r\n static registerStore(name: string, store: CacheStore): void {\r\n this.stores.set(name, store);\r\n }\r\n\r\n /**\r\n * Get a named cache store\r\n */\r\n static getStore(name: string): CacheStore | undefined {\r\n return this.stores.get(name);\r\n }\r\n\r\n /**\r\n * Generate cache key from route and parameters\r\n */\r\n static generateKey(\r\n method: string,\r\n path: string,\r\n params?: Record<string, any>,\r\n query?: Record<string, any>,\r\n options?: Pick<CacheOptions, 'key' | 'prefix' | 'includeQuery'>\r\n ): string {\r\n const parts: string[] = [];\r\n\r\n // Add prefix if provided\r\n if (options?.prefix) {\r\n parts.push(options.prefix);\r\n }\r\n\r\n // Use custom key if provided\r\n if (options?.key) {\r\n let key = options.key;\r\n \r\n // Replace placeholders like {id}, {userId}\r\n if (params) {\r\n for (const [paramKey, paramValue] of Object.entries(params)) {\r\n key = key.replace(`{${paramKey}}`, String(paramValue));\r\n }\r\n }\r\n \r\n parts.push(key);\r\n } else {\r\n // Generate key from route\r\n parts.push(method.toLowerCase());\r\n parts.push(path.replace(/\\//g, ':'));\r\n\r\n // Add params to key\r\n if (params && Object.keys(params).length > 0) {\r\n parts.push(JSON.stringify(params));\r\n }\r\n }\r\n\r\n // Add query parameters if requested\r\n if (options?.includeQuery && query && Object.keys(query).length > 0) {\r\n const sortedQuery = Object.keys(query)\r\n .sort()\r\n .reduce((acc, key) => {\r\n acc[key] = query[key];\r\n return acc;\r\n }, {} as Record<string, any>);\r\n parts.push(JSON.stringify(sortedQuery));\r\n }\r\n\r\n return parts.join(':');\r\n }\r\n\r\n /**\r\n * Get value from cache\r\n */\r\n static async get<T = any>(\r\n key: string,\r\n store?: CacheStore\r\n ): Promise<T | null> {\r\n const cacheStore = store || this.defaultStore;\r\n return await cacheStore.get<T>(key);\r\n }\r\n\r\n /**\r\n * Set value in cache\r\n */\r\n static async set<T = any>(\r\n key: string,\r\n value: T,\r\n ttl?: number | string,\r\n store?: CacheStore\r\n ): Promise<void> {\r\n const cacheStore = store || this.defaultStore;\r\n const ttlSeconds = ttl ? parseTTL(ttl) : 0;\r\n await cacheStore.set(key, value, ttlSeconds);\r\n }\r\n\r\n /**\r\n * Delete value from cache\r\n */\r\n static async delete(\r\n key: string,\r\n store?: CacheStore\r\n ): Promise<boolean> {\r\n const cacheStore = store || this.defaultStore;\r\n return await cacheStore.delete(key);\r\n }\r\n\r\n /**\r\n * Delete all keys matching pattern\r\n */\r\n static async invalidate(\r\n pattern: string,\r\n store?: CacheStore\r\n ): Promise<number> {\r\n const cacheStore = store || this.defaultStore;\r\n return await cacheStore.deletePattern(pattern);\r\n }\r\n\r\n /**\r\n * Clear all cache\r\n */\r\n static async clear(store?: CacheStore): Promise<void> {\r\n const cacheStore = store || this.defaultStore;\r\n await cacheStore.clear();\r\n }\r\n}\r\n\r\n/**\r\n * Convenience functions for cache operations\r\n */\r\n\r\n/**\r\n * Get value from cache\r\n */\r\nexport async function getCache<T = any>(key: string): Promise<T | null> {\r\n return await CacheManager.get<T>(key);\r\n}\r\n\r\n/**\r\n * Set value in cache\r\n */\r\nexport async function setCache<T = any>(\r\n key: string,\r\n value: T,\r\n ttl?: number | string\r\n): Promise<void> {\r\n await CacheManager.set(key, value, ttl);\r\n}\r\n\r\n/**\r\n * Delete value from cache\r\n */\r\nexport async function deleteCache(key: string): Promise<boolean> {\r\n return await CacheManager.delete(key);\r\n}\r\n\r\n/**\r\n * Invalidate cache by pattern\r\n */\r\nexport async function invalidateCache(pattern: string): Promise<number> {\r\n return await CacheManager.invalidate(pattern);\r\n}\r\n\r\n/**\r\n * Clear all cache\r\n */\r\nexport async function clearCache(): Promise<void> {\r\n await CacheManager.clear();\r\n}\r\n\r\n",
76
+ "/*! *****************************************************************************\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",
77
+ "/**\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",
78
+ "import { HTTPException } from '../errors/exceptions.js';\r\n\r\nexport class AuthenticationException extends HTTPException {\r\n constructor(message: string = 'Authentication required') {\r\n super(401, message);\r\n this.name = 'AuthenticationException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: 'Authentication Error',\r\n message: this.message,\r\n statusCode: 401,\r\n };\r\n }\r\n}\r\n\r\nexport class AuthorizationException extends HTTPException {\r\n constructor(message: string = 'Insufficient permissions') {\r\n super(403, message);\r\n this.name = 'AuthorizationException';\r\n }\r\n\r\n toJSON() {\r\n return {\r\n error: 'Authorization Error',\r\n message: this.message,\r\n statusCode: 403,\r\n };\r\n }\r\n}\r\n\r\nexport class TokenExpiredException extends AuthenticationException {\r\n constructor(message: string = 'Token has expired') {\r\n super(message);\r\n this.name = 'TokenExpiredException';\r\n }\r\n}\r\n\r\nexport class InvalidTokenException extends AuthenticationException {\r\n constructor(message: string = 'Invalid token') {\r\n super(message);\r\n this.name = 'InvalidTokenException';\r\n }\r\n}\r\n\r\nexport class TokenRevokedException extends AuthenticationException {\r\n constructor(message: string = 'Token has been revoked') {\r\n super(message);\r\n this.name = 'TokenRevokedException';\r\n }\r\n}",
79
+ "/**\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, ServerInstance } 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): ServerInstance {\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): ServerInstance {\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 {\r\n port,\r\n close: async () => {\r\n server.stop();\r\n },\r\n ...server\r\n };\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): ServerInstance {\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: async () => {\r\n ac.abort();\r\n },\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): ServerInstance {\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 const server = serve(\r\n {\r\n fetch: this.hono.fetch,\r\n port,\r\n },\r\n callback\r\n );\r\n\r\n return {\r\n port,\r\n close: async () => {\r\n return new Promise<void>((resolve) => {\r\n server.close(() => resolve());\r\n });\r\n },\r\n ...server\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",
80
+ "/**\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",
5
81
  "/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n",
6
82
  "/*global module, process*/\nvar Buffer = require('safe-buffer').Buffer;\nvar Stream = require('stream');\nvar util = require('util');\n\nfunction DataStream(data) {\n this.buffer = null;\n this.writable = true;\n this.readable = true;\n\n // No input\n if (!data) {\n this.buffer = Buffer.alloc(0);\n return this;\n }\n\n // Stream\n if (typeof data.pipe === 'function') {\n this.buffer = Buffer.alloc(0);\n data.pipe(this);\n return this;\n }\n\n // Buffer or String\n // or Object (assumedly a passworded key)\n if (data.length || typeof data === 'object') {\n this.buffer = data;\n this.writable = false;\n process.nextTick(function () {\n this.emit('end', data);\n this.readable = false;\n this.emit('close');\n }.bind(this));\n return this;\n }\n\n throw new TypeError('Unexpected data type ('+ typeof data + ')');\n}\nutil.inherits(DataStream, Stream);\n\nDataStream.prototype.write = function write(data) {\n this.buffer = Buffer.concat([this.buffer, Buffer.from(data)]);\n this.emit('data', data);\n};\n\nDataStream.prototype.end = function end(data) {\n if (data)\n this.write(data);\n this.emit('end', data);\n this.emit('close');\n this.writable = false;\n this.readable = false;\n};\n\nmodule.exports = DataStream;\n",
7
83
  "'use strict';\n\nfunction getParamSize(keySize) {\n\tvar result = ((keySize / 8) | 0) + (keySize % 8 === 0 ? 0 : 1);\n\treturn result;\n}\n\nvar paramBytesForAlg = {\n\tES256: getParamSize(256),\n\tES384: getParamSize(384),\n\tES512: getParamSize(521)\n};\n\nfunction getParamBytesForAlg(alg) {\n\tvar paramBytes = paramBytesForAlg[alg];\n\tif (paramBytes) {\n\t\treturn paramBytes;\n\t}\n\n\tthrow new Error('Unknown algorithm \"' + alg + '\"');\n}\n\nmodule.exports = getParamBytesForAlg;\n",
@@ -77,12 +153,108 @@
77
153
  "/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\nfunction before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n}\n\n/**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\nfunction once(func) {\n return before(2, func);\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = once;\n",
78
154
  "const timespan = require('./lib/timespan');\nconst PS_SUPPORTED = require('./lib/psSupported');\nconst validateAsymmetricKey = require('./lib/validateAsymmetricKey');\nconst jws = require('jws');\nconst includes = require('lodash.includes');\nconst isBoolean = require('lodash.isboolean');\nconst isInteger = require('lodash.isinteger');\nconst isNumber = require('lodash.isnumber');\nconst isPlainObject = require('lodash.isplainobject');\nconst isString = require('lodash.isstring');\nconst once = require('lodash.once');\nconst { KeyObject, createSecretKey, createPrivateKey } = require('crypto')\n\nconst SUPPORTED_ALGS = ['RS256', 'RS384', 'RS512', 'ES256', 'ES384', 'ES512', 'HS256', 'HS384', 'HS512', 'none'];\nif (PS_SUPPORTED) {\n SUPPORTED_ALGS.splice(3, 0, 'PS256', 'PS384', 'PS512');\n}\n\nconst sign_options_schema = {\n expiresIn: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"expiresIn\" should be a number of seconds or string representing a timespan' },\n notBefore: { isValid: function(value) { return isInteger(value) || (isString(value) && value); }, message: '\"notBefore\" should be a number of seconds or string representing a timespan' },\n audience: { isValid: function(value) { return isString(value) || Array.isArray(value); }, message: '\"audience\" must be a string or array' },\n algorithm: { isValid: includes.bind(null, SUPPORTED_ALGS), message: '\"algorithm\" must be a valid string enum value' },\n header: { isValid: isPlainObject, message: '\"header\" must be an object' },\n encoding: { isValid: isString, message: '\"encoding\" must be a string' },\n issuer: { isValid: isString, message: '\"issuer\" must be a string' },\n subject: { isValid: isString, message: '\"subject\" must be a string' },\n jwtid: { isValid: isString, message: '\"jwtid\" must be a string' },\n noTimestamp: { isValid: isBoolean, message: '\"noTimestamp\" must be a boolean' },\n keyid: { isValid: isString, message: '\"keyid\" must be a string' },\n mutatePayload: { isValid: isBoolean, message: '\"mutatePayload\" must be a boolean' },\n allowInsecureKeySizes: { isValid: isBoolean, message: '\"allowInsecureKeySizes\" must be a boolean'},\n allowInvalidAsymmetricKeyTypes: { isValid: isBoolean, message: '\"allowInvalidAsymmetricKeyTypes\" must be a boolean'}\n};\n\nconst registered_claims_schema = {\n iat: { isValid: isNumber, message: '\"iat\" should be a number of seconds' },\n exp: { isValid: isNumber, message: '\"exp\" should be a number of seconds' },\n nbf: { isValid: isNumber, message: '\"nbf\" should be a number of seconds' }\n};\n\nfunction validate(schema, allowUnknown, object, parameterName) {\n if (!isPlainObject(object)) {\n throw new Error('Expected \"' + parameterName + '\" to be a plain object.');\n }\n Object.keys(object)\n .forEach(function(key) {\n const validator = schema[key];\n if (!validator) {\n if (!allowUnknown) {\n throw new Error('\"' + key + '\" is not allowed in \"' + parameterName + '\"');\n }\n return;\n }\n if (!validator.isValid(object[key])) {\n throw new Error(validator.message);\n }\n });\n}\n\nfunction validateOptions(options) {\n return validate(sign_options_schema, false, options, 'options');\n}\n\nfunction validatePayload(payload) {\n return validate(registered_claims_schema, true, payload, 'payload');\n}\n\nconst options_to_payload = {\n 'audience': 'aud',\n 'issuer': 'iss',\n 'subject': 'sub',\n 'jwtid': 'jti'\n};\n\nconst options_for_objects = [\n 'expiresIn',\n 'notBefore',\n 'noTimestamp',\n 'audience',\n 'issuer',\n 'subject',\n 'jwtid',\n];\n\nmodule.exports = function (payload, secretOrPrivateKey, options, callback) {\n if (typeof options === 'function') {\n callback = options;\n options = {};\n } else {\n options = options || {};\n }\n\n const isObjectPayload = typeof payload === 'object' &&\n !Buffer.isBuffer(payload);\n\n const header = Object.assign({\n alg: options.algorithm || 'HS256',\n typ: isObjectPayload ? 'JWT' : undefined,\n kid: options.keyid\n }, options.header);\n\n function failure(err) {\n if (callback) {\n return callback(err);\n }\n throw err;\n }\n\n if (!secretOrPrivateKey && options.algorithm !== 'none') {\n return failure(new Error('secretOrPrivateKey must have a value'));\n }\n\n if (secretOrPrivateKey != null && !(secretOrPrivateKey instanceof KeyObject)) {\n try {\n secretOrPrivateKey = createPrivateKey(secretOrPrivateKey)\n } catch (_) {\n try {\n secretOrPrivateKey = createSecretKey(typeof secretOrPrivateKey === 'string' ? Buffer.from(secretOrPrivateKey) : secretOrPrivateKey)\n } catch (_) {\n return failure(new Error('secretOrPrivateKey is not valid key material'));\n }\n }\n }\n\n if (header.alg.startsWith('HS') && secretOrPrivateKey.type !== 'secret') {\n return failure(new Error((`secretOrPrivateKey must be a symmetric key when using ${header.alg}`)))\n } else if (/^(?:RS|PS|ES)/.test(header.alg)) {\n if (secretOrPrivateKey.type !== 'private') {\n return failure(new Error((`secretOrPrivateKey must be an asymmetric key when using ${header.alg}`)))\n }\n if (!options.allowInsecureKeySizes &&\n !header.alg.startsWith('ES') &&\n secretOrPrivateKey.asymmetricKeyDetails !== undefined && //KeyObject.asymmetricKeyDetails is supported in Node 15+\n secretOrPrivateKey.asymmetricKeyDetails.modulusLength < 2048) {\n return failure(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`));\n }\n }\n\n if (typeof payload === 'undefined') {\n return failure(new Error('payload is required'));\n } else if (isObjectPayload) {\n try {\n validatePayload(payload);\n }\n catch (error) {\n return failure(error);\n }\n if (!options.mutatePayload) {\n payload = Object.assign({},payload);\n }\n } else {\n const invalid_options = options_for_objects.filter(function (opt) {\n return typeof options[opt] !== 'undefined';\n });\n\n if (invalid_options.length > 0) {\n return failure(new Error('invalid ' + invalid_options.join(',') + ' option for ' + (typeof payload ) + ' payload'));\n }\n }\n\n if (typeof payload.exp !== 'undefined' && typeof options.expiresIn !== 'undefined') {\n return failure(new Error('Bad \"options.expiresIn\" option the payload already has an \"exp\" property.'));\n }\n\n if (typeof payload.nbf !== 'undefined' && typeof options.notBefore !== 'undefined') {\n return failure(new Error('Bad \"options.notBefore\" option the payload already has an \"nbf\" property.'));\n }\n\n try {\n validateOptions(options);\n }\n catch (error) {\n return failure(error);\n }\n\n if (!options.allowInvalidAsymmetricKeyTypes) {\n try {\n validateAsymmetricKey(header.alg, secretOrPrivateKey);\n } catch (error) {\n return failure(error);\n }\n }\n\n const timestamp = payload.iat || Math.floor(Date.now() / 1000);\n\n if (options.noTimestamp) {\n delete payload.iat;\n } else if (isObjectPayload) {\n payload.iat = timestamp;\n }\n\n if (typeof options.notBefore !== 'undefined') {\n try {\n payload.nbf = timespan(options.notBefore, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.nbf === 'undefined') {\n return failure(new Error('\"notBefore\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n if (typeof options.expiresIn !== 'undefined' && typeof payload === 'object') {\n try {\n payload.exp = timespan(options.expiresIn, timestamp);\n }\n catch (err) {\n return failure(err);\n }\n if (typeof payload.exp === 'undefined') {\n return failure(new Error('\"expiresIn\" should be a number of seconds or string representing a timespan eg: \"1d\", \"20h\", 60'));\n }\n }\n\n Object.keys(options_to_payload).forEach(function (key) {\n const claim = options_to_payload[key];\n if (typeof options[key] !== 'undefined') {\n if (typeof payload[claim] !== 'undefined') {\n return failure(new Error('Bad \"options.' + key + '\" option. The payload already has an \"' + claim + '\" property.'));\n }\n payload[claim] = options[key];\n }\n });\n\n const encoding = options.encoding || 'utf8';\n\n if (typeof callback === 'function') {\n callback = callback && once(callback);\n\n jws.createSign({\n header: header,\n privateKey: secretOrPrivateKey,\n payload: payload,\n encoding: encoding\n }).once('error', callback)\n .once('done', function (signature) {\n // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version\n if(!options.allowInsecureKeySizes && /^(?:RS|PS)/.test(header.alg) && signature.length < 256) {\n return callback(new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`))\n }\n callback(null, signature);\n });\n } else {\n let signature = jws.sign({header: header, payload: payload, secret: secretOrPrivateKey, encoding: encoding});\n // TODO: Remove in favor of the modulus length check before signing once node 15+ is the minimum supported version\n if(!options.allowInsecureKeySizes && /^(?:RS|PS)/.test(header.alg) && signature.length < 256) {\n throw new Error(`secretOrPrivateKey has a minimum key size of 2048 bits for ${header.alg}`)\n }\n return signature\n }\n};\n",
79
155
  "module.exports = {\n decode: require('./decode'),\n verify: require('./verify'),\n sign: require('./sign'),\n JsonWebTokenError: require('./lib/JsonWebTokenError'),\n NotBeforeError: require('./lib/NotBeforeError'),\n TokenExpiredError: require('./lib/TokenExpiredError'),\n};\n",
80
- "// 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 { Body, Param, Header, Cookie, Ctx, Query } 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\r\n// Authentication exports\r\nexport * from './auth/exceptions';\r\nexport * from './auth/jwt-provider';\r\nexport * from './auth/auth-service';\r\nexport * from './auth/rbac';\r\nexport * from './auth/rbac-plugin';\r\nexport * from './auth/auth-plugin';\r\nexport * from './auth/decorators';\r\nexport * from './auth/rbac-decorators';\r\n// OAuth exports (specific exports to avoid conflicts)\r\nexport type { OAuthProvider } from './auth/oauth-provider';\r\nexport { OAuthUserSchema } from './auth/oauth-provider';\r\nexport { OAuth, OAuthUser, OAuthToken, getOAuthUser, getOAuthToken, isOAuthAuthenticated, getOAuthProvider } from './auth/oauth-decorators';\r\n\r\n// Session exports (specific exports to avoid conflicts) \r\nexport { SessionManager, SessionDataSchema } from './auth/session';\r\nexport type { SessionStore } from './auth/session';\r\nexport { Session, CurrentSession, CSRFToken, RequireCSRF, createSessionMiddleware, SessionGuard, getCurrentSession, getSessionManager, getCSRFProtection, getSessionData, isSessionAuthenticated, getSessionUserId, setSessionData, removeSessionData } from './auth/session-decorators';\r\nexport type { SessionData } from './auth/session-decorators';\r\n",
156
+ "import { Context } from 'hono';\r\n\r\n// Transaction metadata interface\r\nexport interface TransactionMetadata {\r\n isolation?: 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'REPEATABLE_READ' | 'SERIALIZABLE';\r\n timeout?: number;\r\n readOnly?: boolean;\r\n propagation?: 'REQUIRED' | 'REQUIRES_NEW' | 'SUPPORTS' | 'NOT_SUPPORTED' | 'NEVER' | 'MANDATORY';\r\n}\r\n\r\n// Transaction context interface\r\nexport interface TransactionContext {\r\n id: string;\r\n startTime: Date;\r\n isolation?: string;\r\n timeout?: number;\r\n readOnly?: boolean;\r\n savepoints: string[];\r\n rollbackOnly: boolean;\r\n}\r\n\r\n// Transaction manager interface\r\nexport interface ITransactionManager {\r\n begin(options?: TransactionMetadata): Promise<TransactionContext>;\r\n commit(context: TransactionContext): Promise<void>;\r\n rollback(context: TransactionContext): Promise<void>;\r\n savepoint(context: TransactionContext, name: string): Promise<void>;\r\n rollbackToSavepoint(context: TransactionContext, name: string): Promise<void>;\r\n isActive(context: TransactionContext): boolean;\r\n setRollbackOnly(context: TransactionContext): void;\r\n handleTransactional<T>(\r\n target: any,\r\n propertyKey: string,\r\n args: any[],\r\n originalMethod: Function,\r\n context?: Context\r\n ): Promise<T>;\r\n}\r\n\r\n/**\r\n * Base transaction manager implementation\r\n */\r\nexport abstract class BaseTransactionManager implements ITransactionManager {\r\n private activeTransactions = new Map<string, TransactionContext>();\r\n private requestTransactions = new WeakMap<Context, TransactionContext>();\r\n \r\n abstract begin(options?: TransactionMetadata): Promise<TransactionContext>;\r\n abstract commit(context: TransactionContext): Promise<void>;\r\n abstract rollback(context: TransactionContext): Promise<void>;\r\n abstract savepoint(context: TransactionContext, name: string): Promise<void>;\r\n abstract rollbackToSavepoint(context: TransactionContext, name: string): Promise<void>;\r\n \r\n isActive(context: TransactionContext): boolean {\r\n return this.activeTransactions.has(context.id);\r\n }\r\n \r\n setRollbackOnly(context: TransactionContext): void {\r\n context.rollbackOnly = true;\r\n }\r\n \r\n protected createTransactionContext(options?: TransactionMetadata): TransactionContext {\r\n const context: TransactionContext = {\r\n id: crypto.randomUUID(),\r\n startTime: new Date(),\r\n isolation: options?.isolation,\r\n timeout: options?.timeout,\r\n readOnly: options?.readOnly,\r\n savepoints: [],\r\n rollbackOnly: false\r\n };\r\n \r\n this.activeTransactions.set(context.id, context);\r\n return context;\r\n }\r\n \r\n protected removeTransactionContext(context: TransactionContext): void {\r\n this.activeTransactions.delete(context.id);\r\n }\r\n \r\n // Request-scoped transaction management\r\n getRequestTransaction(request: Context): TransactionContext | undefined {\r\n return this.requestTransactions.get(request);\r\n }\r\n \r\n setRequestTransaction(request: Context, context: TransactionContext): void {\r\n this.requestTransactions.set(request, context);\r\n }\r\n \r\n clearRequestTransaction(request: Context): void {\r\n this.requestTransactions.delete(request);\r\n }\r\n \r\n // Transaction decorator handler\r\n async handleTransactional<T>(\r\n target: any,\r\n propertyKey: string,\r\n args: any[],\r\n originalMethod: Function,\r\n context?: Context\r\n ): Promise<T> {\r\n const metadata = Reflect.getMetadata('transactional', target, propertyKey) as TransactionMetadata;\r\n \r\n if (!metadata) {\r\n return originalMethod.apply(target, args);\r\n }\r\n \r\n // Check if we're already in a transaction\r\n const existingTransaction = context ? this.getRequestTransaction(context) : null;\r\n \r\n // Handle different propagation behaviors\r\n const propagation = metadata.propagation || 'REQUIRED';\r\n \r\n switch (propagation) {\r\n case 'REQUIRED':\r\n return existingTransaction \r\n ? this.executeInExistingTransaction(existingTransaction, target, args, originalMethod, metadata)\r\n : this.executeInNewTransaction(target, args, originalMethod, metadata, context);\r\n \r\n case 'REQUIRES_NEW':\r\n return this.executeInNewTransaction(target, args, originalMethod, metadata, context);\r\n \r\n case 'SUPPORTS':\r\n return existingTransaction\r\n ? this.executeInExistingTransaction(existingTransaction, target, args, originalMethod, metadata)\r\n : originalMethod.apply(target, args);\r\n \r\n case 'NOT_SUPPORTED':\r\n // Execute without transaction, suspend existing if present\r\n return originalMethod.apply(target, args);\r\n \r\n case 'MANDATORY':\r\n if (!existingTransaction) {\r\n throw new Error('Transaction is mandatory but no existing transaction found');\r\n }\r\n return this.executeInExistingTransaction(existingTransaction, target, args, originalMethod, metadata);\r\n \r\n case 'NEVER':\r\n if (existingTransaction) {\r\n throw new Error('Transaction is not allowed but existing transaction found');\r\n }\r\n return originalMethod.apply(target, args);\r\n \r\n default:\r\n return existingTransaction \r\n ? this.executeInExistingTransaction(existingTransaction, target, args, originalMethod, metadata)\r\n : this.executeInNewTransaction(target, args, originalMethod, metadata, context);\r\n }\r\n }\r\n \r\n private async executeInNewTransaction<T>(\r\n target: any,\r\n args: any[],\r\n originalMethod: Function,\r\n metadata: TransactionMetadata,\r\n context?: Context\r\n ): Promise<T> {\r\n // Start new transaction\r\n const transactionContext = await this.begin(metadata);\r\n \r\n if (context) {\r\n this.setRequestTransaction(context, transactionContext);\r\n }\r\n \r\n try {\r\n const result = await originalMethod.apply(target, args);\r\n \r\n if (transactionContext.rollbackOnly) {\r\n await this.rollback(transactionContext);\r\n throw new Error('Transaction marked for rollback');\r\n }\r\n \r\n await this.commit(transactionContext);\r\n return result;\r\n } catch (error) {\r\n await this.rollback(transactionContext);\r\n throw error;\r\n } finally {\r\n if (context) {\r\n this.clearRequestTransaction(context);\r\n }\r\n this.removeTransactionContext(transactionContext);\r\n }\r\n }\r\n \r\n private async executeInExistingTransaction<T>(\r\n existingTransaction: TransactionContext,\r\n target: any,\r\n args: any[],\r\n originalMethod: Function,\r\n metadata: TransactionMetadata\r\n ): Promise<T> {\r\n // Use existing transaction (nested transaction support with savepoints)\r\n return this.handleNestedTransaction(existingTransaction, target, args, originalMethod);\r\n }\r\n \r\n protected async handleNestedTransaction<T>(\r\n parentTransaction: TransactionContext,\r\n target: any,\r\n args: any[],\r\n originalMethod: Function\r\n ): Promise<T> {\r\n // Create savepoint for nested transaction\r\n const savepointName = `sp_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\r\n \r\n try {\r\n await this.savepoint(parentTransaction, savepointName);\r\n const result = await originalMethod.apply(target, args);\r\n return result;\r\n } catch (error) {\r\n await this.rollbackToSavepoint(parentTransaction, savepointName);\r\n throw error;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * In-memory transaction manager for testing\r\n */\r\nexport class InMemoryTransactionManager extends BaseTransactionManager {\r\n private transactions = new Map<string, any>();\r\n public currentTransactionId: string | null = null; // For testing purposes\r\n \r\n async begin(options?: TransactionMetadata): Promise<TransactionContext> {\r\n const context = this.createTransactionContext(options);\r\n \r\n // Simulate transaction begin\r\n this.transactions.set(context.id, {\r\n operations: [],\r\n committed: false,\r\n rolledBack: false\r\n });\r\n \r\n // Set current transaction for testing\r\n this.currentTransactionId = context.id;\r\n \r\n return context;\r\n }\r\n \r\n async commit(context: TransactionContext): Promise<void> {\r\n const transaction = this.transactions.get(context.id);\r\n if (!transaction) {\r\n throw new Error(`Transaction ${context.id} not found`);\r\n }\r\n \r\n if (transaction.rolledBack) {\r\n throw new Error(`Transaction ${context.id} already rolled back`);\r\n }\r\n \r\n transaction.committed = true;\r\n \r\n // Notify mock database to commit transaction data\r\n if (typeof (globalThis as any).mockDatabase?.commitTransaction === 'function') {\r\n (globalThis as any).mockDatabase.commitTransaction(context.id);\r\n }\r\n \r\n this.transactions.delete(context.id);\r\n this.removeTransactionContext(context);\r\n \r\n // Clear current transaction\r\n if (this.currentTransactionId === context.id) {\r\n this.currentTransactionId = null;\r\n }\r\n }\r\n \r\n async rollback(context: TransactionContext): Promise<void> {\r\n const transaction = this.transactions.get(context.id);\r\n if (!transaction) {\r\n throw new Error(`Transaction ${context.id} not found`);\r\n }\r\n \r\n transaction.rolledBack = true;\r\n \r\n // Notify mock database to rollback transaction data\r\n if (typeof (globalThis as any).mockDatabase?.rollbackTransaction === 'function') {\r\n (globalThis as any).mockDatabase.rollbackTransaction(context.id);\r\n }\r\n \r\n this.transactions.delete(context.id);\r\n this.removeTransactionContext(context);\r\n \r\n // Clear current transaction\r\n if (this.currentTransactionId === context.id) {\r\n this.currentTransactionId = null;\r\n }\r\n }\r\n \r\n async savepoint(context: TransactionContext, name: string): Promise<void> {\r\n context.savepoints.push(name);\r\n \r\n const transaction = this.transactions.get(context.id);\r\n if (transaction) {\r\n transaction.savepoints = transaction.savepoints || [];\r\n transaction.savepoints.push(name);\r\n }\r\n }\r\n \r\n async rollbackToSavepoint(context: TransactionContext, name: string): Promise<void> {\r\n const index = context.savepoints.indexOf(name);\r\n if (index === -1) {\r\n throw new Error(`Savepoint ${name} not found`);\r\n }\r\n \r\n // Remove savepoints after the target savepoint\r\n context.savepoints = context.savepoints.slice(0, index + 1);\r\n \r\n const transaction = this.transactions.get(context.id);\r\n if (transaction && transaction.savepoints) {\r\n transaction.savepoints = transaction.savepoints.slice(0, index + 1);\r\n }\r\n }\r\n}\r\n\r\n// Global transaction manager instance\r\nlet globalTransactionManager: ITransactionManager | null = null;\r\n\r\nexport function setGlobalTransactionManager(manager: ITransactionManager): void {\r\n globalTransactionManager = manager;\r\n}\r\n\r\nexport function getGlobalTransactionManager(): ITransactionManager {\r\n if (!globalTransactionManager) {\r\n globalTransactionManager = new InMemoryTransactionManager();\r\n }\r\n return globalTransactionManager;\r\n}",
157
+ "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",
158
+ "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",
159
+ "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",
160
+ "/**\r\n * Logger para Veloce-TS usando Pino\r\n * \r\n * Pino es el logger más rápido para Node.js con excelente rendimiento\r\n * y formato JSON estructurado ideal para producción.\r\n */\r\n\r\nimport type { Logger, LoggerConfig, LogContext } from './types';\r\n\r\n// Lazy import para Pino\r\nlet pino: any;\r\nlet pinoPretty: any;\r\n\r\nfunction loadPino() {\r\n if (!pino) {\r\n pino = require('pino');\r\n pinoPretty = require('pino-pretty');\r\n }\r\n return { pino, pinoPretty };\r\n}\r\n\r\n// Implementación de Logger con Pino\r\nclass PinoLogger implements Logger {\r\n private logger: any;\r\n\r\n constructor(config?: LoggerConfig) {\r\n const { pino } = loadPino();\r\n \r\n const isDev = process.env.NODE_ENV !== 'production';\r\n const pretty = config?.pretty !== undefined ? config.pretty : isDev;\r\n \r\n this.logger = pino({\r\n level: config?.level || (isDev ? 'debug' : 'info'),\r\n transport: pretty ? {\r\n target: 'pino-pretty',\r\n options: {\r\n colorize: true,\r\n translateTime: 'SYS:HH:MM:ss',\r\n ignore: 'pid,hostname',\r\n singleLine: false\r\n }\r\n } : undefined\r\n });\r\n }\r\n\r\n trace(message: string, context?: LogContext): void {\r\n this.logger.trace(context || {}, message);\r\n }\r\n\r\n debug(message: string, context?: LogContext): void {\r\n this.logger.debug(context || {}, message);\r\n }\r\n\r\n info(message: string, context?: LogContext): void {\r\n this.logger.info(context || {}, message);\r\n }\r\n\r\n warn(message: string, context?: LogContext): void {\r\n this.logger.warn(context || {}, message);\r\n }\r\n\r\n error(message: string, error?: Error, context?: LogContext): void {\r\n this.logger.error({ err: error, ...context }, message);\r\n }\r\n\r\n fatal(message: string, error?: Error, context?: LogContext): void {\r\n this.logger.fatal({ err: error, ...context }, message);\r\n }\r\n\r\n child(context: LogContext): Logger {\r\n return new PinoLoggerWrapper(this.logger.child(context));\r\n }\r\n}\r\n\r\n// Wrapper para child loggers de Pino\r\nclass PinoLoggerWrapper implements Logger {\r\n constructor(private logger: any) {}\r\n\r\n trace(message: string, context?: LogContext): void {\r\n this.logger.trace(context || {}, message);\r\n }\r\n\r\n debug(message: string, context?: LogContext): void {\r\n this.logger.debug(context || {}, message);\r\n }\r\n\r\n info(message: string, context?: LogContext): void {\r\n this.logger.info(context || {}, message);\r\n }\r\n\r\n warn(message: string, context?: LogContext): void {\r\n this.logger.warn(context || {}, message);\r\n }\r\n\r\n error(message: string, error?: Error, context?: LogContext): void {\r\n this.logger.error({ err: error, ...context }, message);\r\n }\r\n\r\n fatal(message: string, error?: Error, context?: LogContext): void {\r\n this.logger.fatal({ err: error, ...context }, message);\r\n }\r\n\r\n child(context: LogContext): Logger {\r\n return new PinoLoggerWrapper(this.logger.child(context));\r\n }\r\n}\r\n\r\n/**\r\n * Create a Pino logger instance\r\n */\r\nexport function createLogger(config?: LoggerConfig): Logger {\r\n return new PinoLogger(config);\r\n}\r\n\r\n/**\r\n * Logger singleton instance\r\n */\r\nlet loggerInstance: Logger | null = null;\r\n\r\n/**\r\n * Initialize the global logger\r\n */\r\nexport function initializeLogger(config?: LoggerConfig): Logger {\r\n loggerInstance = createLogger(config);\r\n return loggerInstance;\r\n}\r\n\r\n/**\r\n * Get the global logger instance\r\n * Defaults to Pino with pretty printing enabled for development\r\n */\r\nexport function getLogger(): Logger {\r\n if (!loggerInstance) {\r\n const isDev = process.env.NODE_ENV !== 'production';\r\n loggerInstance = createLogger({ pretty: isDev, level: isDev ? 'debug' : 'info' });\r\n }\r\n return loggerInstance;\r\n}\r\n\r\n/**\r\n * Create a child logger with context\r\n */\r\nexport function createChildLogger(context: LogContext): Logger {\r\n return getLogger().child(context);\r\n}\r\n",
161
+ "/**\r\n * Logging middleware para Veloce-TS\r\n */\r\n\r\nimport type { Context, Middleware } from '../types';\r\nimport { createChildLogger } from './logger';\r\n\r\n/**\r\n * Request logging middleware\r\n * Logs todas las peticiones HTTP con contexto\r\n */\r\nexport function requestLoggingMiddleware(): Middleware {\r\n return async (c: Context, next: () => Promise<void>) => {\r\n const logger = createChildLogger({\r\n context: 'request',\r\n method: c.req.method,\r\n path: c.req.path,\r\n ip: c.req.header('x-forwarded-for') || c.req.header('x-real-ip') || 'unknown'\r\n });\r\n\r\n const start = Date.now();\r\n\r\n logger.info('Incoming request');\r\n\r\n try {\r\n await next();\r\n\r\n const duration = Date.now() - start;\r\n logger.info('Request completed', {\r\n status: c.res.status,\r\n duration: `${duration}ms`\r\n });\r\n } catch (error) {\r\n const duration = Date.now() - start;\r\n \r\n logger.error('Request failed', error as Error, {\r\n status: (error as any).status || 500,\r\n duration: `${duration}ms`\r\n });\r\n\r\n throw error;\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Error logging middleware\r\n * Captura y loguea errores no manejados\r\n */\r\nexport function errorLoggingMiddleware(): Middleware {\r\n return async (c: Context, next: () => Promise<void>) => {\r\n try {\r\n await next();\r\n } catch (error) {\r\n const logger = createChildLogger({ context: 'error' });\r\n \r\n logger.error('Unhandled error', error as Error, {\r\n method: c.req.method,\r\n path: c.req.path,\r\n query: c.req.query(),\r\n headers: Object.fromEntries(new Map(c.req.raw.headers))\r\n });\r\n\r\n throw error;\r\n }\r\n };\r\n}\r\n\r\n\r\n",
162
+ "/**\r\n * Request Context Middleware\r\n * Automatically initializes request context with UUID and integrates with logging\r\n */\r\n\r\nimport type { Context, Middleware } from '../types';\r\nimport { initializeRequestContext, cleanupRequestContext, getRequestId, getRequestDuration } from '../context/request-context';\r\nimport { getLogger } from '../logging';\r\n\r\nexport interface RequestContextMiddlewareOptions {\r\n /**\r\n * Default timeout for requests in milliseconds\r\n */\r\n timeout?: number;\r\n \r\n /**\r\n * Whether to log request start/end\r\n */\r\n logging?: boolean;\r\n \r\n /**\r\n * Custom request ID generator\r\n */\r\n requestIdGenerator?: () => string;\r\n \r\n /**\r\n * Headers to include in logs\r\n */\r\n logHeaders?: string[];\r\n}\r\n\r\n/**\r\n * Create request context middleware\r\n * \r\n * This middleware:\r\n * - Generates a unique request ID for each request\r\n * - Sets up AbortSignal for request cancellation\r\n * - Optionally configures request timeout\r\n * - Integrates with logging system\r\n * - Propagates request ID through all logs\r\n * \r\n * @example\r\n * ```typescript\r\n * const app = new VeloceTS();\r\n * \r\n * // Basic usage\r\n * app.use(createRequestContextMiddleware());\r\n * \r\n * // With options\r\n * app.use(createRequestContextMiddleware({\r\n * timeout: 30000, // 30 seconds\r\n * logging: true,\r\n * logHeaders: ['user-agent', 'referer']\r\n * }));\r\n * ```\r\n */\r\nexport function createRequestContextMiddleware(\r\n options: RequestContextMiddlewareOptions = {}\r\n): Middleware {\r\n const {\r\n timeout,\r\n logging = true,\r\n requestIdGenerator,\r\n logHeaders = []\r\n } = options;\r\n\r\n return async (c: Context, next: () => Promise<void>) => {\r\n // Generate or extract request ID\r\n const requestId = requestIdGenerator?.() || \r\n c.req.header('x-request-id') ||\r\n undefined;\r\n\r\n // Initialize request context\r\n const context = initializeRequestContext(c, {\r\n requestId,\r\n timeout\r\n });\r\n\r\n // Create logger with request ID context\r\n const logger = logging ? getLogger().child({ requestId: context.requestId }) : null;\r\n\r\n // Log request start\r\n if (logger) {\r\n const logData: any = {\r\n method: c.req.method,\r\n path: c.req.path,\r\n url: c.req.url\r\n };\r\n\r\n // Add specified headers to log\r\n if (logHeaders.length > 0) {\r\n logData.headers = {};\r\n for (const headerName of logHeaders) {\r\n const headerValue = c.req.header(headerName);\r\n if (headerValue) {\r\n logData.headers[headerName] = headerValue;\r\n }\r\n }\r\n }\r\n\r\n logger.info('Request started', logData);\r\n }\r\n\r\n try {\r\n // Set request ID in response header\r\n c.header('x-request-id', context.requestId);\r\n\r\n // Execute next middleware/handler\r\n await next();\r\n\r\n // Log request completion\r\n if (logger) {\r\n const duration = getRequestDuration(c);\r\n logger.info('Request completed', {\r\n status: c.res.status,\r\n duration: `${duration}ms`\r\n });\r\n }\r\n } catch (error) {\r\n // Log request error\r\n if (logger) {\r\n const duration = getRequestDuration(c);\r\n logger.error('Request failed', error as Error, {\r\n duration: `${duration}ms`\r\n });\r\n }\r\n \r\n throw error;\r\n } finally {\r\n // Clean up request context (clear timeouts, etc.)\r\n cleanupRequestContext(c);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Create a simple request ID middleware without logging\r\n * Useful if you want to manage logging separately\r\n */\r\nexport function createSimpleRequestIdMiddleware(): Middleware {\r\n return async (c: Context, next: () => Promise<void>) => {\r\n const requestId = c.req.header('x-request-id') || \r\n initializeRequestContext(c).requestId;\r\n \r\n c.header('x-request-id', requestId);\r\n \r\n try {\r\n await next();\r\n } finally {\r\n cleanupRequestContext(c);\r\n }\r\n };\r\n}\r\n\r\n",
163
+ "/**\r\n * Cache middleware for functional API routes\r\n */\r\n\r\nimport type { Context, Middleware } from '../types';\r\nimport type { CacheOptions } from '../cache/types';\r\nimport { CacheManager } from '../cache/manager';\r\nimport { parseTTL } from '../cache/types';\r\n\r\nexport interface CacheMiddlewareOptions extends CacheOptions {\r\n /**\r\n * Whether to cache only successful responses (2xx)\r\n */\r\n onlySuccess?: boolean;\r\n}\r\n\r\n/**\r\n * Create cache middleware for functional API routes\r\n * \r\n * @example\r\n * ```typescript\r\n * app.get('/products', {\r\n * middleware: [createCacheMiddleware({ ttl: '5m' })],\r\n * handler: async () => {\r\n * return await db.products.findAll();\r\n * }\r\n * });\r\n * \r\n * // With custom key\r\n * app.get('/user/:id/posts', {\r\n * middleware: [createCacheMiddleware({ \r\n * ttl: 300, \r\n * key: 'user:{id}:posts' \r\n * })],\r\n * handler: async (c) => {\r\n * const id = c.req.param('id');\r\n * return await db.posts.findByUser(id);\r\n * }\r\n * });\r\n * ```\r\n */\r\nexport function createCacheMiddleware(options: CacheMiddlewareOptions): Middleware {\r\n const {\r\n ttl,\r\n key: customKey,\r\n prefix,\r\n includeQuery = false,\r\n varyByHeaders,\r\n condition,\r\n store,\r\n onlySuccess = true\r\n } = options;\r\n\r\n const ttlSeconds = parseTTL(ttl);\r\n\r\n return async (c: Context, next: () => Promise<void>) => {\r\n // Generate cache key\r\n const method = c.req.method;\r\n const path = c.req.path;\r\n const params = c.req.param();\r\n const query = includeQuery ? c.req.query() : undefined;\r\n\r\n // Add header variations to key\r\n let headerSuffix = '';\r\n if (varyByHeaders && varyByHeaders.length > 0) {\r\n const headerValues = varyByHeaders\r\n .map(h => `${h}:${c.req.header(h) || ''}`)\r\n .join('|');\r\n headerSuffix = `:${headerValues}`;\r\n }\r\n\r\n const cacheKey = CacheManager.generateKey(\r\n method,\r\n path,\r\n params,\r\n query,\r\n { key: customKey, prefix, includeQuery }\r\n ) + headerSuffix;\r\n\r\n // Try to get from cache\r\n const cacheStore = store || CacheManager.getDefaultStore();\r\n const cached = await cacheStore.get(cacheKey);\r\n\r\n if (cached !== null) {\r\n // Cache hit - return cached response\r\n c.header('X-Cache', 'HIT');\r\n return c.json(cached);\r\n }\r\n\r\n // Cache miss - execute handler\r\n c.header('X-Cache', 'MISS');\r\n\r\n // Capture the response\r\n await next();\r\n\r\n // Get the response\r\n const response = c.res;\r\n\r\n // Check if we should cache this response\r\n if (onlySuccess && response.status >= 300) {\r\n return;\r\n }\r\n\r\n // Try to extract JSON body\r\n try {\r\n const clonedResponse = response.clone();\r\n const body = await clonedResponse.json();\r\n\r\n // Check custom condition\r\n if (condition && !condition(body)) {\r\n return;\r\n }\r\n\r\n // Store in cache\r\n await cacheStore.set(cacheKey, body, ttlSeconds);\r\n } catch {\r\n // Response is not JSON or already consumed, skip caching\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Create cache invalidation middleware\r\n * Useful for mutations that should clear related cache\r\n * \r\n * @example\r\n * ```typescript\r\n * app.post('/products', {\r\n * middleware: [createCacheInvalidationMiddleware('products:*')],\r\n * handler: async (c) => {\r\n * const body = await c.req.json();\r\n * return await db.products.create(body);\r\n * }\r\n * });\r\n * ```\r\n */\r\nexport function createCacheInvalidationMiddleware(\r\n pattern: string | string[],\r\n store?: import('../cache/types').CacheStore\r\n): Middleware {\r\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\r\n\r\n return async (c: Context, next: () => Promise<void>) => {\r\n // Execute handler first\r\n await next();\r\n\r\n // Invalidate cache after successful request\r\n const cacheStore = store || CacheManager.getDefaultStore();\r\n \r\n for (const pat of patterns) {\r\n // Replace placeholders with actual values from params\r\n let resolvedPattern = pat;\r\n const params = c.req.param();\r\n \r\n if (params) {\r\n for (const [key, value] of Object.entries(params)) {\r\n resolvedPattern = resolvedPattern.replace(`{${key}}`, String(value));\r\n }\r\n }\r\n\r\n await cacheStore.deletePattern(resolvedPattern);\r\n }\r\n };\r\n}\r\n\r\n",
164
+ "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",
165
+ "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",
166
+ "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",
167
+ "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",
168
+ "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",
169
+ "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",
170
+ "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",
171
+ "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",
172
+ "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",
173
+ "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",
174
+ "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",
175
+ "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",
176
+ "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",
177
+ "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",
178
+ "export function parseBooleanDef() {\n return {\n type: \"boolean\",\n };\n}\n",
179
+ "import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n return parseDef(_def.type._def, refs);\n}\n",
180
+ "import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n",
181
+ "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",
182
+ "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",
183
+ "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",
184
+ "export function parseEnumDef(def) {\n return {\n type: \"string\",\n enum: Array.from(def.values),\n };\n}\n",
185
+ "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",
186
+ "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",
187
+ "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",
188
+ "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",
189
+ "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",
190
+ "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",
191
+ "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",
192
+ "export function parseNullDef(refs) {\n return refs.target === \"openApi3\"\n ? {\n enum: [\"null\"],\n nullable: true,\n }\n : {\n type: \"null\",\n };\n}\n",
193
+ "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",
194
+ "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",
195
+ "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",
196
+ "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",
197
+ "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",
198
+ "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",
199
+ "import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n return parseDef(def.type._def, refs);\n}\n",
200
+ "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",
201
+ "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",
202
+ "import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n return {\n not: parseAnyDef(refs),\n };\n}\n",
203
+ "import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n return parseAnyDef(refs);\n}\n",
204
+ "import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n",
205
+ "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",
206
+ "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",
207
+ "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",
208
+ "// 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",
209
+ "// 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 || 'Veloce-TS API',\r\n version: options?.version || '1.0.0',\r\n description: options?.description || 'API built with Veloce-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",
210
+ "// 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 || 'Veloce-TS API',\r\n version: options?.version || '1.0.0',\r\n description: options?.description || 'API built with Veloce-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 // Note: Swagger UI HTML is served via static files (public/docs.html)\r\n // This is more reliable than serving HTML from the plugin\r\n // The OpenAPI JSON spec is available at the configured path\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 `<!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.9.0/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.9.0/swagger-ui-bundle.js\" crossorigin></script>\r\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-standalone-preset.js\" crossorigin></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 }\r\n}\r\n",
211
+ "// 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",
212
+ "// 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",
213
+ "// 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 Veloce-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",
214
+ "// GraphQL decorators for Veloce-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\nexport { GQLMutation as Mutation };\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\nexport { GQLSubscription as Subscription };\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",
215
+ "// 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",
216
+ "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",
217
+ "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",
218
+ "// GraphQL Schema Builder for Veloce-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",
219
+ "// GraphQL Plugin - Enables GraphQL support for Veloce-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",
220
+ "/**\r\n * Health Check Plugin for Veloce-TS\r\n * \r\n * Adds health check endpoints for monitoring and orchestration\r\n */\r\n\r\nimport type { Plugin } from '../core/plugin';\r\nimport type { VeloceTS } from '../core/application';\r\nimport type { Context } from '../types';\r\nimport { getLogger } from '../logging';\r\n\r\nexport interface HealthCheckOptions {\r\n path?: string;\r\n readyPath?: string;\r\n livePath?: string;\r\n checks?: HealthChecker[];\r\n}\r\n\r\nexport interface HealthCheckResult {\r\n status: 'healthy' | 'unhealthy';\r\n timestamp: string;\r\n uptime: number;\r\n checks?: Record<string, CheckResult>;\r\n}\r\n\r\nexport interface CheckResult {\r\n status: 'healthy' | 'unhealthy' | 'degraded';\r\n message?: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport type HealthChecker = {\r\n (): Promise<CheckResult> | CheckResult;\r\n name?: string;\r\n};\r\n\r\n/**\r\n * Health Check Plugin\r\n * Adds /health, /ready, and /live endpoints\r\n */\r\nexport class HealthCheckPlugin implements Plugin {\r\n name = 'health';\r\n version = '1.0.0';\r\n\r\n private options: Required<Omit<HealthCheckOptions, 'checks'>> & { checks: HealthChecker[] };\r\n private startTime: number;\r\n private logger = getLogger().child({ plugin: 'health' });\r\n\r\n constructor(options?: HealthCheckOptions) {\r\n this.options = {\r\n path: options?.path || '/health',\r\n readyPath: options?.readyPath || '/ready',\r\n livePath: options?.livePath || '/live',\r\n checks: options?.checks || []\r\n };\r\n this.startTime = Date.now();\r\n }\r\n\r\n async install(app: VeloceTS): Promise<void> {\r\n // Health endpoint - comprehensive health check\r\n app.get(this.options.path, {\r\n handler: async (c: Context) => {\r\n return this.handleHealth(c);\r\n },\r\n docs: {\r\n summary: 'Health Check',\r\n description: 'Comprehensive health check endpoint',\r\n tags: ['Health']\r\n }\r\n });\r\n\r\n // Readiness endpoint - checks if app is ready to serve traffic\r\n app.get(this.options.readyPath, {\r\n handler: async (c: Context) => {\r\n return this.handleReady(c);\r\n },\r\n docs: {\r\n summary: 'Readiness Check',\r\n description: 'Check if the application is ready to serve traffic',\r\n tags: ['Health']\r\n }\r\n });\r\n\r\n // Liveness endpoint - checks if app is alive\r\n app.get(this.options.livePath, {\r\n handler: async (c: Context) => {\r\n return this.handleLive(c);\r\n },\r\n docs: {\r\n summary: 'Liveness Check',\r\n description: 'Check if the application is alive',\r\n tags: ['Health']\r\n }\r\n });\r\n\r\n this.logger.info('Health check endpoints registered', {\r\n health: this.options.path,\r\n ready: this.options.readyPath,\r\n live: this.options.livePath\r\n });\r\n }\r\n\r\n /**\r\n * Handle comprehensive health check\r\n */\r\n private async handleHealth(c: Context): Promise<any> {\r\n const uptime = Date.now() - this.startTime;\r\n const checks: Record<string, CheckResult> = {};\r\n \r\n let allHealthy = true;\r\n\r\n // Run all custom checks\r\n for (const check of this.options.checks) {\r\n try {\r\n const result = await Promise.resolve(check());\r\n checks[check.name || 'unknown'] = result;\r\n \r\n if (result.status === 'unhealthy') {\r\n allHealthy = false;\r\n }\r\n } catch (error) {\r\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\r\n checks[check.name || 'unknown'] = {\r\n status: 'unhealthy',\r\n message: errorMessage\r\n };\r\n allHealthy = false;\r\n }\r\n }\r\n\r\n const result: HealthCheckResult = {\r\n status: allHealthy ? 'healthy' : 'unhealthy',\r\n timestamp: new Date().toISOString(),\r\n uptime,\r\n checks: Object.keys(checks).length > 0 ? checks : undefined\r\n };\r\n\r\n return c.json(result, allHealthy ? 200 : 503);\r\n }\r\n\r\n /**\r\n * Handle readiness check\r\n */\r\n private async handleReady(c: Context): Promise<any> {\r\n const uptime = Date.now() - this.startTime;\r\n \r\n // Run readiness checks (only critical checks)\r\n const criticalChecks = this.options.checks.filter(check => \r\n check.name?.includes('database') || \r\n check.name?.includes('cache') ||\r\n check.name?.includes('ready')\r\n );\r\n\r\n let isReady = true;\r\n const checks: Record<string, CheckResult> = {};\r\n\r\n for (const check of criticalChecks) {\r\n try {\r\n const result = await Promise.resolve(check());\r\n checks[check.name || 'unknown'] = result;\r\n \r\n if (result.status === 'unhealthy') {\r\n isReady = false;\r\n }\r\n } catch (error) {\r\n isReady = false;\r\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\r\n checks[check.name || 'unknown'] = {\r\n status: 'unhealthy',\r\n message: errorMessage\r\n };\r\n }\r\n }\r\n\r\n const result = {\r\n status: isReady ? 'ready' : 'not_ready',\r\n timestamp: new Date().toISOString(),\r\n uptime,\r\n checks: Object.keys(checks).length > 0 ? checks : undefined\r\n };\r\n\r\n return c.json(result, isReady ? 200 : 503);\r\n }\r\n\r\n /**\r\n * Handle liveness check (simple ping)\r\n */\r\n private handleLive(c: Context): any {\r\n const uptime = Date.now() - this.startTime;\r\n \r\n return c.json({\r\n status: 'alive',\r\n timestamp: new Date().toISOString(),\r\n uptime\r\n }, 200);\r\n }\r\n}\r\n\r\n/**\r\n * Create common health checkers\r\n */\r\nexport const HealthCheckers = {\r\n /**\r\n * Always healthy checker (for testing)\r\n */\r\n alwaysHealthy(): CheckResult {\r\n return { status: 'healthy', message: 'OK' };\r\n },\r\n\r\n /**\r\n * Database connectivity checker\r\n */\r\n database(pingFn: () => Promise<boolean> | boolean): HealthChecker {\r\n const checker: HealthChecker = async () => {\r\n try {\r\n const isHealthy = await Promise.resolve(pingFn());\r\n return {\r\n status: isHealthy ? 'healthy' : 'unhealthy',\r\n message: isHealthy ? 'Database connection OK' : 'Database connection failed'\r\n };\r\n } catch (error) {\r\n return {\r\n status: 'unhealthy',\r\n message: error instanceof Error ? error.message : 'Database check failed'\r\n };\r\n }\r\n };\r\n checker.name = 'database';\r\n return checker;\r\n },\r\n\r\n /**\r\n * Memory usage checker\r\n */\r\n memory(maxUsageMB: number = 512): HealthChecker {\r\n const checker: HealthChecker = () => {\r\n if (typeof process === 'undefined' || !process.memoryUsage) {\r\n return { status: 'healthy', message: 'Memory check not available' };\r\n }\r\n\r\n const usage = process.memoryUsage();\r\n const heapUsedMB = usage.heapUsed / 1024 / 1024;\r\n const isHealthy = heapUsedMB < maxUsageMB;\r\n\r\n return {\r\n status: isHealthy ? 'healthy' : 'unhealthy',\r\n message: `Heap usage: ${heapUsedMB.toFixed(2)}MB / ${maxUsageMB}MB`,\r\n heapUsedMB: heapUsedMB.toFixed(2),\r\n maxUsageMB\r\n };\r\n };\r\n checker.name = 'memory';\r\n return checker;\r\n },\r\n\r\n /**\r\n * Disk space checker\r\n */\r\n disk(maxUsagePercent: number = 90): HealthChecker {\r\n const checker: HealthChecker = () => {\r\n // This would require additional dependencies\r\n return {\r\n status: 'healthy',\r\n message: 'Disk check not implemented (requires additional dependencies)'\r\n };\r\n };\r\n checker.name = 'disk';\r\n return checker;\r\n }\r\n};\r\n\r\n",
221
+ "// 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",
222
+ "// 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 AuthMetadata\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\nconst AUTH_METADATA_KEY = Symbol('auth:metadata');\r\nconst OAUTH_METADATA_KEY = Symbol('oauth:metadata');\r\nconst ROLES_METADATA_KEY = Symbol('roles:metadata');\r\nconst PERMISSIONS_METADATA_KEY = Symbol('permissions:metadata');\r\nconst MINIMUM_ROLE_METADATA_KEY = Symbol('minimum-role:metadata');\r\nconst RESOURCE_PERMISSION_METADATA_KEY = Symbol('resource-permission:metadata');\r\nconst SESSION_METADATA_KEY = Symbol('session:metadata');\r\nconst CSRF_METADATA_KEY = Symbol('csrf:metadata');\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 // Preserve auth metadata\r\n auth: metadata.auth || existingMetadata?.auth,\r\n oauth: metadata.oauth || existingMetadata?.oauth,\r\n roles: metadata.roles || existingMetadata?.roles,\r\n permissions: metadata.permissions || existingMetadata?.permissions,\r\n minimumRole: metadata.minimumRole || existingMetadata?.minimumRole,\r\n resourcePermission: metadata.resourcePermission || existingMetadata?.resourcePermission,\r\n session: metadata.session || existingMetadata?.session,\r\n csrf: metadata.csrf || existingMetadata?.csrf\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 /**\r\n * Define authentication metadata (used by @Auth decorator)\r\n */\r\n static defineAuth(target: any, propertyKey: string, metadata: AuthMetadata): void {\r\n Reflect.defineMetadata(AUTH_METADATA_KEY, metadata, target, propertyKey);\r\n\r\n // Also update the route metadata to include auth info\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n auth: metadata\r\n });\r\n }\r\n\r\n /**\r\n * Get authentication metadata from reflect-metadata\r\n */\r\n static getAuthMetadata(target: any, propertyKey: string): AuthMetadata | undefined {\r\n return Reflect.getMetadata(AUTH_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a method has authentication metadata\r\n */\r\n static hasAuthMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(AUTH_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Define OAuth metadata (used by @OAuth decorator)\r\n */\r\n static defineOAuth(target: any, propertyKey: string, metadata: any): void {\r\n Reflect.defineMetadata(OAUTH_METADATA_KEY, metadata, target, propertyKey);\r\n\r\n // Also update the route metadata to include OAuth info\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n oauth: metadata\r\n });\r\n }\r\n\r\n /**\r\n * Get OAuth metadata from reflect-metadata\r\n */\r\n static getOAuthMetadata(target: any, propertyKey: string): any {\r\n return Reflect.getMetadata(OAUTH_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a method has OAuth metadata\r\n */\r\n static hasOAuthMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(OAUTH_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Define roles metadata (used by @Roles decorator)\r\n */\r\n static defineRoles(target: any, propertyKey: string, metadata: any): void {\r\n Reflect.defineMetadata(ROLES_METADATA_KEY, metadata, target, propertyKey);\r\n\r\n // Also update the route metadata to include roles info\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n roles: metadata\r\n });\r\n }\r\n\r\n /**\r\n * Define permissions metadata (used by @Permissions decorator)\r\n */\r\n static definePermissions(target: any, propertyKey: string, metadata: any): void {\r\n Reflect.defineMetadata(PERMISSIONS_METADATA_KEY, metadata, target, propertyKey);\r\n\r\n // Also update the route metadata to include permissions info\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n permissions: metadata\r\n });\r\n }\r\n\r\n /**\r\n * Define minimum role metadata (used by @MinimumRole decorator)\r\n */\r\n static defineMinimumRole(target: any, propertyKey: string, metadata: any): void {\r\n Reflect.defineMetadata(MINIMUM_ROLE_METADATA_KEY, metadata, target, propertyKey);\r\n\r\n // Also update the route metadata to include minimum role info\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n minimumRole: metadata\r\n });\r\n }\r\n\r\n /**\r\n * Get roles metadata from reflect-metadata\r\n */\r\n static getRolesMetadata(target: any, propertyKey: string): any {\r\n return Reflect.getMetadata(ROLES_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Get permissions metadata from reflect-metadata\r\n */\r\n static getPermissionsMetadata(target: any, propertyKey: string): any {\r\n return Reflect.getMetadata(PERMISSIONS_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Get minimum role metadata from reflect-metadata\r\n */\r\n static getMinimumRoleMetadata(target: any, propertyKey: string): any {\r\n return Reflect.getMetadata(MINIMUM_ROLE_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a method has roles metadata\r\n */\r\n static hasRolesMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(ROLES_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a method has permissions metadata\r\n */\r\n static hasPermissionsMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(PERMISSIONS_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a method has minimum role metadata\r\n */\r\n static hasMinimumRoleMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(MINIMUM_ROLE_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Define resource permission metadata (used by @CanAccess decorator)\r\n */\r\n static defineResourcePermission(target: any, propertyKey: string, metadata: any): void {\r\n Reflect.defineMetadata(RESOURCE_PERMISSION_METADATA_KEY, metadata, target, propertyKey);\r\n\r\n // Also update the route metadata to include resource permission info\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n resourcePermission: metadata\r\n });\r\n }\r\n\r\n /**\r\n * Get resource permission metadata from reflect-metadata\r\n */\r\n static getResourcePermissionMetadata(target: any, propertyKey: string): any {\r\n return Reflect.getMetadata(RESOURCE_PERMISSION_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a method has resource permission metadata\r\n */\r\n static hasResourcePermissionMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(RESOURCE_PERMISSION_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Define session metadata (used by @Session decorator)\r\n */\r\n static defineSession(target: any, propertyKey: string, metadata: any): void {\r\n Reflect.defineMetadata(SESSION_METADATA_KEY, metadata, target, propertyKey);\r\n\r\n // Also update the route metadata to include session info\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n session: metadata\r\n });\r\n }\r\n\r\n /**\r\n * Define CSRF metadata (used by @RequireCSRF decorator)\r\n */\r\n static defineCSRF(target: any, propertyKey: string, metadata: any): void {\r\n Reflect.defineMetadata(CSRF_METADATA_KEY, metadata, target, propertyKey);\r\n\r\n // Also update the route metadata to include CSRF info\r\n const routeMetadata = this.getRouteMetadata(target, propertyKey);\r\n this.defineRoute(target, propertyKey, {\r\n ...routeMetadata,\r\n csrf: metadata\r\n });\r\n }\r\n\r\n /**\r\n * Get session metadata from reflect-metadata\r\n */\r\n static getSessionMetadata(target: any, propertyKey: string): any {\r\n return Reflect.getMetadata(SESSION_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Get CSRF metadata from reflect-metadata\r\n */\r\n static getCSRFMetadata(target: any, propertyKey: string): any {\r\n return Reflect.getMetadata(CSRF_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a method has session metadata\r\n */\r\n static hasSessionMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(SESSION_METADATA_KEY, target, propertyKey);\r\n }\r\n\r\n /**\r\n * Check if a method has CSRF metadata\r\n */\r\n static hasCSRFMetadata(target: any, propertyKey: string): boolean {\r\n return Reflect.hasMetadata(CSRF_METADATA_KEY, target, propertyKey);\r\n }\r\n}\r\n",
223
+ "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",
224
+ "// 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",
225
+ "// src/request/constants.ts\nvar GET_MATCH_RESULT = Symbol();\nexport {\n GET_MATCH_RESULT\n};\n",
226
+ "// 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",
227
+ "// 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",
228
+ "// 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",
229
+ "// 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",
230
+ "// 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",
231
+ "// 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",
232
+ "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n",
233
+ "// 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",
234
+ "// 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",
235
+ "// 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",
236
+ "// 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",
237
+ "// 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",
238
+ "// 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",
239
+ "// 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",
240
+ "// 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",
241
+ "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 // Note: Only caches for object providers (Class/Function), not string/symbol\r\n private providerNameCache: WeakMap<object, 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 (only for object providers)\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 // For string/symbol providers, return directly\r\n if (typeof provider === 'string') {\r\n return provider;\r\n } else if (typeof provider === 'symbol') {\r\n return provider.toString();\r\n }\r\n \r\n // For function/class providers, check cache first\r\n const cached = this.providerNameCache.get(provider as object);\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 (only for object providers)\r\n if (typeof provider === 'object' || typeof provider === 'function') {\r\n this.providerNameCache.set(provider as object, name);\r\n }\r\n \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",
242
+ "// 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",
243
+ "// 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",
244
+ "// 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",
245
+ "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 // Handler for functional routes\r\n handler?: (c: any, ...args: any[]) => any;\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",
246
+ "import type { Hono } from 'hono';\nimport { getCookie } from 'hono/cookie';\nimport type { Context } from '../types';\nimport { MetadataRegistry } from './metadata';\nimport { DIContainer } from '../dependencies/container';\nimport { ValidationEngine } from '../validation/validator';\nimport { ResponseSerializer } from '../responses/response';\nimport { ErrorHandler } from '../errors/handler';\nimport { MetadataCompiler, type CompiledRouteMetadata } from './compiled-metadata';\nimport type { RouteMetadata, ParameterMetadata, DependencyMetadata } from '../types';\nimport { BadRequestException } from '../errors/exceptions';\n\n/**\n * RouterCompiler converts metadata from decorators and functional API\n * into actual Hono routes with full validation and dependency injection\n */\nexport class RouterCompiler {\n // Cache compiled metadata for performance\n private compiledRoutes: Map<string, CompiledRouteMetadata> = new Map();\n\n constructor(\n private app: Hono,\n private metadata: MetadataRegistry,\n private container: DIContainer,\n private validator: ValidationEngine,\n private errorHandler: ErrorHandler\n ) {}\n\n /**\n * Compile all registered routes and register them with Hono\n * This is the main entry point that processes all route metadata\n */\n compile(): void {\n const routes = this.metadata.getRoutes();\n\n // Pre-compile all routes for performance\n const compiledRoutes = MetadataCompiler.compileAll(routes);\n\n for (const route of compiledRoutes) {\n // Cache compiled route for potential reuse\n const routeKey = `${route.target.name}:${route.propertyKey}`;\n this.compiledRoutes.set(routeKey, route);\n\n const handler = this.createHandler(route);\n const path = this.normalizePath(route.path);\n const method = route.method.toLowerCase() as 'get' | 'post' | 'put' | 'delete' | 'patch';\n\n // Register route with Hono, including any middleware\n // Note: Controller middleware is already included in route.middleware by application.ts\n if (route.middleware && route.middleware.length > 0) {\n this.app[method](path, ...route.middleware, handler);\n } else {\n this.app[method](path, handler);\n }\n }\n }\n\n /**\n * Normalize a path to ensure it follows Hono's conventions\n * Converts FastAPI-style path parameters to Hono format\n */\n private normalizePath(path: string): string {\n // Ensure path starts with /\n if (!path.startsWith('/')) {\n path = '/' + path;\n }\n\n // Convert FastAPI-style {param} to Hono-style :param\n path = path.replace(/\\{([^}]+)\\}/g, ':$1');\n\n // Remove trailing slash unless it's the root path\n if (path.length > 1 && path.endsWith('/')) {\n path = path.slice(0, -1);\n }\n\n return path;\n }\n\n /**\n * Create a Hono handler function for a route\n * Integrates parameter extraction, validation, dependency injection, error handling, and caching\n */\n public createHandler(route: CompiledRouteMetadata): (c: Context) => Promise<any> {\n return async (c: Context) => {\n try {\n // Store route metadata in context for auth checks\n c.set('routeMetadata', route);\n \n // Check if route has caching enabled\n const cacheConfig = (route as any).cache;\n let cacheKey: string | null = null;\n let cacheManager: any = null;\n\n if (cacheConfig) {\n const { CacheManager } = await import('../cache/manager.js');\n const { parseTTL } = await import('../cache/types.js');\n cacheManager = CacheManager;\n\n // Generate cache key\n const params = c.req.param();\n const query = cacheConfig.includeQuery ? c.req.query() : undefined;\n \n cacheKey = CacheManager.generateKey(\n route.method,\n route.path,\n params,\n query,\n cacheConfig\n );\n\n // Try to get from cache\n const cached = await CacheManager.get(cacheKey, cacheConfig.store);\n if (cached !== null) {\n c.header('X-Cache', 'HIT');\n return this.serializeResponse(c, cached);\n }\n\n c.header('X-Cache', 'MISS');\n }\n \n // 1. Extract and validate parameters from the request\n const args = await this.extractParameters(c, route.parameters);\n\n // 2. Resolve dependencies with the DI container\n const deps = await this.resolveDependencies(c, route.dependencies);\n\n // 3. Merge parameters and dependencies into correct order\n const allArgs = this.mergeArguments(args, deps, route.parameters, route.maxArgumentIndex);\n\n // 4. Execute the handler\n let result: any;\n\n // Check if this is a functional route (has handler property)\n if ((route as any).handler) {\n // Functional API route - call handler directly\n result = await (route as any).handler(c, ...allArgs);\n } else {\n // Decorator-based route - instantiate controller and call method\n const instance = await this.container.resolve(route.target, {\n scope: 'transient',\n context: c\n });\n \n if (typeof instance[route.propertyKey] !== 'function') {\n throw new Error(`Method ${route.propertyKey} not found on controller ${route.target.name}`);\n }\n \n result = await instance[route.propertyKey](...allArgs);\n }\n\n // Cache the result if caching is enabled\n if (cacheConfig && cacheKey && cacheManager) {\n // Check custom condition\n if (!cacheConfig.condition || cacheConfig.condition(result)) {\n const { parseTTL } = await import('../cache/types.js');\n const ttl = parseTTL(cacheConfig.ttl);\n await cacheManager.set(cacheKey, result, ttl, cacheConfig.store);\n }\n }\n\n // Handle cache invalidation if configured\n const invalidatePatterns = (route as any).cacheInvalidate;\n if (invalidatePatterns && Array.isArray(invalidatePatterns)) {\n if (!cacheManager) {\n const { CacheManager } = await import('../cache/manager.js');\n cacheManager = CacheManager;\n }\n\n const params = c.req.param();\n for (const pattern of invalidatePatterns) {\n // Replace placeholders with actual values\n let resolvedPattern = pattern;\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n resolvedPattern = resolvedPattern.replace(`{${key}}`, String(value));\n }\n }\n await cacheManager.invalidate(resolvedPattern);\n }\n }\n\n // 5. Serialize and return the response\n return this.serializeResponse(c, result);\n } catch (error) {\n // 6. Handle errors and pass to error handler\n return await this.handleError(c, error);\n }\n };\n }\n\n /**\n * Serialize the handler result into a proper HTTP response\n * Delegates to ResponseSerializer for consistent handling\n */\n private serializeResponse(c: Context, result: any): any {\n return ResponseSerializer.serialize(c, result);\n }\n\n /**\n * Get route metadata for the current request context\n */\n private getRouteMetadataForContext(c: Context): CompiledRouteMetadata | null {\n // This is a simplified approach - in a real implementation we'd need to\n // match the current route path and method to find the metadata\n // For now, we'll store it in the context during route compilation\n return c.get('routeMetadata') || null;\n }\n\n /**\n * Check if authentication is required for a route\n */\n private isAuthRequired(routeMetadata: CompiledRouteMetadata): boolean {\n // Check if the route has @Auth() decorator metadata\n if (routeMetadata.auth?.required) {\n return true;\n }\n\n // Check if any parameter requires authentication (has current-user type)\n return routeMetadata.parameters.some(param => param.type === 'current-user');\n }\n\n /**\n * Handle errors that occur during request processing\n * Delegates to ErrorHandler for consistent error handling\n */\n private async handleError(c: Context, error: any): Promise<any> {\n // Delegate to the ErrorHandler\n return await this.errorHandler.handle(error, c);\n }\n\n /**\n * Extract and validate parameters from the request context\n * Handles body, query, params, headers, cookies, and special types\n */\n private async extractParameters(\n c: Context,\n params: ParameterMetadata[]\n ): Promise<any[]> {\n const extracted: any[] = [];\n\n for (const param of params) {\n // Skip undefined entries (sparse array handling)\n if (!param) continue;\n \n let value: any;\n\n switch (param.type) {\n case 'body':\n // Extract request body as JSON\n try {\n value = await c.req.json();\n } catch (error) {\n value = null;\n }\n break;\n\n case 'query':\n // Extract query parameters\n if (param.name) {\n // Extract specific query parameter\n value = c.req.query(param.name);\n } else {\n // Extract all query parameters\n value = c.req.query();\n }\n \n // Validate with schema if provided\n if (param.schema && value !== undefined) {\n try {\n value = param.schema.parse(value);\n } catch (error) {\n throw new BadRequestException(`Invalid query parameter: ${error}`);\n }\n }\n break;\n\n case 'param':\n // Extract path parameters\n if (param.name) {\n // Extract specific path parameter\n value = c.req.param(param.name);\n } else {\n // Extract all path parameters\n value = c.req.param();\n }\n break;\n\n case 'header':\n // Extract headers\n if (param.name) {\n // Extract specific header\n value = c.req.header(param.name);\n } else {\n // Extract all headers as object\n const headers: Record<string, string> = {};\n c.req.raw.headers.forEach((val, key) => {\n headers[key] = val;\n });\n value = headers;\n }\n break;\n\n case 'cookie':\n // Extract cookies using Hono's cookie helper\n if (param.name) {\n // Extract specific cookie\n value = getCookie(c, param.name);\n } else {\n // Extract all cookies - parse from Cookie header\n const cookieHeader = c.req.header('cookie');\n if (cookieHeader) {\n value = Object.fromEntries(\n cookieHeader.split(';').map(cookie => {\n const [key, ...valueParts] = cookie.trim().split('=');\n return [key, valueParts.join('=')];\n })\n );\n } else {\n value = {};\n }\n }\n break;\n\n case 'request':\n // Pass the raw request object\n value = c.req;\n break;\n\n case 'response':\n case 'context':\n // Pass the Hono context\n value = c;\n break;\n\n case 'current-user':\n // Extract current user from context (set by auth middleware)\n value = c.get('auth.user') || null;\n \n // Check if this route requires authentication by looking for @Auth() decorator\n // We need to check the route metadata to see if auth is required\n const routeMetadata = this.getRouteMetadataForContext(c);\n if (routeMetadata && this.isAuthRequired(routeMetadata)) {\n if (!value) {\n const authError = c.get('auth.error') || 'Authentication required';\n const { AuthenticationException } = await import('../auth/exceptions.js');\n throw new AuthenticationException(authError);\n }\n }\n break;\n\n case 'token':\n // Extract JWT token from context (set by auth middleware)\n value = c.get('auth.token') || null;\n break;\n\n case 'oauth-user':\n // Extract OAuth user from context (set by OAuth middleware)\n value = c.get('oauth.user') || null;\n break;\n\n case 'oauth-token':\n // Extract OAuth token from context (set by OAuth middleware)\n value = c.get('oauth.token') || null;\n break;\n\n case 'current-session':\n // Extract current session from context (set by session middleware)\n value = c.get('session') || null;\n break;\n\n case 'session-data':\n // Extract session data from context\n const session = c.get('session');\n if (session && param.metadata?.key) {\n value = session.data[param.metadata.key];\n } else if (session) {\n value = session.data;\n } else {\n value = null;\n }\n break;\n\n case 'csrf-token':\n // Extract CSRF token from context\n value = c.get('csrf.token') || null;\n break;\n\n case 'filtered-resource':\n // This would be handled by permission middleware\n value = c.get('filtered.resource') || null;\n break;\n\n case 'filtered-attributes':\n // This would be handled by permission middleware\n value = c.get('filtered.attributes') || [];\n break;\n\n case 'request-id':\n // Extract request ID from context\n const { getRequestId } = await import('../context/request-context.js');\n value = getRequestId(c);\n break;\n\n case 'abort-signal':\n // Extract AbortSignal from context\n const { getAbortSignal } = await import('../context/request-context.js');\n value = getAbortSignal(c);\n break;\n\n default:\n value = undefined;\n }\n\n // Validate with Zod schema if provided\n if (param.schema) {\n try {\n value = await this.validator.validate(value, param.schema);\n } catch (error) {\n // Re-throw validation errors - they'll be caught by error handler\n throw error;\n }\n }\n\n // Store at the correct parameter index\n extracted[param.index] = value;\n }\n\n return extracted;\n }\n\n /**\n * Merge parameters and dependencies into a single arguments array\n * Ensures each argument is placed at its correct index\n * Note: Returns a sparse array to maintain correct parameter positions\n * Uses pre-computed maxArgumentIndex from compiled metadata for performance\n */\n private mergeArguments(\n parameters: any[],\n dependencies: any[],\n paramMetadata: ParameterMetadata[],\n maxArgumentIndex?: number\n ): any[] {\n // Filter out undefined entries first\n const validParamMetadata = paramMetadata.filter(p => p !== undefined && p.index !== undefined);\n \n // Calculate indices safely\n const paramIndices = validParamMetadata.map(p => p.index);\n const maxParamIndex = paramIndices.length > 0 ? Math.max(...paramIndices) : -1;\n \n // Use pre-computed max index if available, otherwise calculate\n let maxIndex = maxArgumentIndex !== undefined && maxArgumentIndex >= 0\n ? maxArgumentIndex\n : Math.max(\n maxParamIndex,\n parameters.length - 1,\n dependencies.length - 1,\n 0\n );\n \n // Ensure maxIndex is valid\n if (!Number.isFinite(maxIndex) || maxIndex < 0) {\n maxIndex = 0;\n }\n \n // Pre-allocate array with exact size needed\n const merged: any[] = new Array(maxIndex + 1);\n\n // Fill in parameters at their correct indices from the sparse array\n for (let i = 0; i <= maxIndex; i++) {\n if (parameters[i] !== undefined) {\n merged[i] = parameters[i];\n } else if (dependencies[i] !== undefined) {\n merged[i] = dependencies[i];\n }\n }\n\n return merged;\n }\n\n /**\n * Resolve dependencies for a route handler\n * Calls DIContainer.resolve for each dependency with appropriate scope\n */\n private async resolveDependencies(\n c: Context,\n deps: DependencyMetadata[]\n ): Promise<any[]> {\n const resolved: any[] = [];\n\n for (const dep of deps) {\n // Skip undefined entries (sparse array handling)\n if (!dep) continue;\n \n try {\n // Resolve the dependency with the DI container\n // Pass the context for request-scoped dependencies\n const value = await this.container.resolve(dep.provider, {\n scope: dep.scope,\n context: c\n });\n\n // Store at the correct parameter index\n resolved[dep.index] = value;\n } catch (error) {\n // Wrap dependency resolution errors with context\n throw new Error(\n `Failed to resolve dependency at index ${dep.index}: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n return resolved;\n }\n}\n",
247
+ "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 console.log('ErrorHandler.handle called with:', error.constructor.name, error.message);\r\n \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 console.log('Handling as 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 console.log('Handling as HTTPException');\r\n return this.handleHTTPException(error, c);\r\n }\r\n\r\n // Handle generic errors (500)\r\n console.log('Handling as generic error');\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",
248
+ "// 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",
249
+ "// 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 { getLogger } from '../logging';\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: 'Veloce-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 router compiler\r\n */\r\n getCompiler(): RouterCompiler {\r\n return this.compiler;\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 private serverInstance: any = null;\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 * @returns Server instance with close() method for graceful shutdown\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 this.serverInstance = adapter.listen(port, callback);\r\n \r\n // Setup graceful shutdown handlers\r\n this.setupGracefulShutdown();\r\n \r\n return this.serverInstance;\r\n }\r\n\r\n /**\r\n * Setup graceful shutdown handlers\r\n */\r\n private setupGracefulShutdown(): void {\r\n if (typeof process === 'undefined') return;\r\n\r\n const shutdown = async (signal: string) => {\r\n const logger = getLogger().child({ component: 'app' });\r\n logger.info(`Received ${signal}, starting graceful shutdown...`);\r\n\r\n if (this.serverInstance && typeof this.serverInstance.close === 'function') {\r\n try {\r\n await Promise.resolve(this.serverInstance.close());\r\n logger.info('Server closed gracefully');\r\n } catch (error) {\r\n logger.error('Error during shutdown', error as Error);\r\n }\r\n }\r\n\r\n process.exit(0);\r\n };\r\n\r\n process.on('SIGTERM', () => shutdown('SIGTERM'));\r\n process.on('SIGINT', () => shutdown('SIGINT'));\r\n }\r\n\r\n /**\r\n * Gracefully shutdown the server\r\n */\r\n async shutdown(): Promise<void> {\r\n if (this.serverInstance && typeof this.serverInstance.close === 'function') {\r\n await Promise.resolve(this.serverInstance.close());\r\n this.serverInstance = null;\r\n }\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",
250
+ "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",
251
+ "// 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 { Body, Param, Header, Cookie, Ctx, Query, RequestId, AbortSignal } 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\nexport { Cache, CacheInvalidate } from './decorators/cache';\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\r\n// Authentication exports\r\nexport * from './auth/exceptions';\r\nexport * from './auth/jwt-provider';\r\nexport * from './auth/auth-service';\r\nexport * from './auth/rbac';\r\nexport * from './auth/rbac-plugin';\r\nexport * from './auth/auth-plugin';\r\nexport * from './auth/decorators';\r\nexport * from './auth/rbac-decorators';\r\n// OAuth exports (specific exports to avoid conflicts)\r\nexport type { OAuthProvider } from './auth/oauth-provider';\r\nexport { OAuthUserSchema } from './auth/oauth-provider';\r\nexport { OAuth, OAuthUser, OAuthToken, getOAuthUser, getOAuthToken, isOAuthAuthenticated, getOAuthProvider } from './auth/oauth-decorators';\r\n\r\n// Session exports (specific exports to avoid conflicts) \r\nexport { SessionManager, SessionDataSchema } from './auth/session';\r\nexport type { SessionStore } from './auth/session';\r\nexport { Session, CurrentSession, CSRFToken, RequireCSRF, createSessionMiddleware, SessionGuard, getCurrentSession, getSessionManager, getCSRFProtection, getSessionData, isSessionAuthenticated, getSessionUserId, setSessionData, removeSessionData } from './auth/session-decorators';\r\nexport type { SessionData } from './auth/session-decorators';\r\n\r\n// ORM and Transaction exports\r\nexport * from './orm';\r\n\r\n// Logging exports\r\nexport * from './logging';\r\n\r\n// Request Context exports\r\nexport * from './context/request-context';\r\n\r\n// Cache exports\r\nexport * from './cache';\r\n\r\n// Health check plugin\r\nexport * from './plugins/health';",
81
252
  "// HTTP method decorators\r\nimport { MetadataRegistry } from '../core/metadata';\r\nimport type { HTTPMethod, Middleware } from '../types';\r\n\r\nexport interface ControllerOptions {\r\n middleware?: Middleware[];\r\n}\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 * @param options - Optional configuration including middleware\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 * // With middleware\r\n * @Controller('/api/users', { middleware: [authMiddleware] })\r\n * class UserController {\r\n * @Get('/:id')\r\n * getUser() {}\r\n * }\r\n * ```\r\n */\r\nexport function Controller(prefix: string = '', options?: ControllerOptions): 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: options?.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 // Check if there's middleware from @UseMiddleware decorator\r\n const methodMiddleware = Reflect.getMetadata('route:middleware', target, propertyKey) || [];\r\n\r\n MetadataRegistry.defineRoute(target, propertyKey as string, {\r\n method,\r\n path: normalizedPath,\r\n middleware: methodMiddleware,\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",
82
- "// 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 nameOrSchema - Optional specific parameter name or Zod schema for validation\r\n * @example\r\n * ```ts\r\n * @Get('/users')\r\n * listUsers(@Query() query: any) {}\r\n * \r\n * @Get('/users')\r\n * listUsers(@Query('page') page: string) {}\r\n * \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>(nameOrSchema?: string | 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 required: false\r\n };\r\n\r\n // Handle different parameter types\r\n if (typeof nameOrSchema === 'string') {\r\n // Specific parameter name\r\n metadata.name = nameOrSchema;\r\n } else if (nameOrSchema) {\r\n // Zod schema\r\n metadata.schema = nameOrSchema;\r\n }\r\n // If no parameter, extract all query parameters\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",
253
+ "// 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 nameOrSchema - Optional specific parameter name or Zod schema for validation\r\n * @example\r\n * ```ts\r\n * @Get('/users')\r\n * listUsers(@Query() query: any) {}\r\n * \r\n * @Get('/users')\r\n * listUsers(@Query('page') page: string) {}\r\n * \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>(nameOrSchema?: string | 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 required: false\r\n };\r\n\r\n // Handle different parameter types\r\n if (typeof nameOrSchema === 'string') {\r\n // Specific parameter name\r\n metadata.name = nameOrSchema;\r\n } else if (nameOrSchema) {\r\n // Zod schema\r\n metadata.schema = nameOrSchema;\r\n }\r\n // If no parameter, extract all query parameters\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\r\n/**\r\n * RequestId decorator - injects the current request ID\r\n * @example\r\n * ```ts\r\n * @Get('/users/:id')\r\n * async getUser(@Param('id') id: string, @RequestId() reqId: string) {\r\n * logger.info({ requestId: reqId }, 'Fetching user');\r\n * return { id, name: 'John' };\r\n * }\r\n * ```\r\n */\r\nexport function RequestId(): 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-id',\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 * AbortSignal decorator - injects the AbortSignal for the current request\r\n * Useful for cancelling long-running operations\r\n * @example\r\n * ```ts\r\n * @Get('/slow-operation')\r\n * async slowOperation(@AbortSignal() signal: AbortSignal) {\r\n * return await longRunningTask({ signal });\r\n * }\r\n * ```\r\n */\r\nexport function AbortSignal(): 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: 'abort-signal',\r\n required: false\r\n };\r\n\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, metadata);\r\n };\r\n}",
83
254
  "// 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",
84
255
  "// Middleware decorators\r\nimport type { Middleware } from '../types';\r\nimport { MetadataRegistry } from '../core/metadata';\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 return (target: any, propertyKey: string | symbol) => {\r\n // Store middleware in a temporary metadata that will be merged later\r\n // We use Reflect metadata to store it temporarily\r\n const existingMiddleware = Reflect.getMetadata('route:middleware', target, propertyKey) || [];\r\n Reflect.defineMetadata('route:middleware', [...existingMiddleware, ...middleware], target, propertyKey);\r\n };\r\n}\r\n",
85
256
  "// 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",
257
+ "/**\r\n * Cache decorator for route handlers\r\n * Automatically caches responses based on route and parameters\r\n */\r\n\r\nimport type { CacheOptions } from '../cache/types';\r\nimport { MetadataRegistry } from '../core/metadata';\r\n\r\n/**\r\n * Cache decorator - caches route responses\r\n * \r\n * @param options - Cache configuration\r\n * \r\n * @example\r\n * ```typescript\r\n * @Controller('/products')\r\n * class ProductController {\r\n * @Get('/')\r\n * @Cache({ ttl: '5m', key: 'products:list' })\r\n * async getAllProducts() {\r\n * return await db.products.findAll();\r\n * }\r\n * \r\n * @Get('/:id')\r\n * @Cache({ ttl: 300, key: 'product:{id}' }) // 5 minutes\r\n * async getProduct(@Param('id') id: string) {\r\n * return await db.products.findById(id);\r\n * }\r\n * \r\n * @Get('/search')\r\n * @Cache({ ttl: '1m', includeQuery: true }) // Cache varies by query params\r\n * async searchProducts(@Query() query: any) {\r\n * return await db.products.search(query);\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function Cache(options: CacheOptions): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n // Store cache metadata\r\n Reflect.defineMetadata('cache:options', options, target, propertyKey);\r\n\r\n // Also store in our metadata registry for route compilation\r\n const existingMetadata = MetadataRegistry.getRouteMetadata(target, propertyKey as string);\r\n if (existingMetadata) {\r\n MetadataRegistry.defineRoute(target, propertyKey as string, {\r\n ...existingMetadata,\r\n cache: options\r\n });\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * CacheInvalidate decorator - invalidates cache entries matching pattern\r\n * Useful for mutations that should clear related cache\r\n * \r\n * @example\r\n * ```typescript\r\n * @Post('/')\r\n * @CacheInvalidate('products:*') // Clear all product caches\r\n * async createProduct(@Body() data: CreateProductDTO) {\r\n * return await db.products.create(data);\r\n * }\r\n * \r\n * @Put('/:id')\r\n * @CacheInvalidate(['product:{id}', 'products:*'])\r\n * async updateProduct(@Param('id') id: string, @Body() data: UpdateProductDTO) {\r\n * return await db.products.update(id, data);\r\n * }\r\n * ```\r\n */\r\nexport function CacheInvalidate(pattern: string | string[]): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const patterns = Array.isArray(pattern) ? pattern : [pattern];\r\n \r\n // Store invalidation metadata\r\n Reflect.defineMetadata('cache:invalidate', patterns, target, propertyKey);\r\n\r\n const existingMetadata = MetadataRegistry.getRouteMetadata(target, propertyKey as string);\r\n if (existingMetadata) {\r\n MetadataRegistry.defineRoute(target, propertyKey as string, {\r\n ...existingMetadata,\r\n cacheInvalidate: patterns\r\n });\r\n }\r\n };\r\n}\r\n\r\n",
86
258
  "import { sign, verify, decode } from 'jsonwebtoken';\r\nimport { z } from 'zod';\r\n\r\nexport interface JWTConfig {\r\n secret: string;\r\n expiresIn?: string | number;\r\n refreshSecret?: string;\r\n refreshExpiresIn?: string | number;\r\n algorithm?: 'HS256' | 'HS384' | 'HS512' | 'RS256' | 'RS384' | 'RS512';\r\n issuer?: string;\r\n audience?: string;\r\n}\r\n\r\nexport interface TokenPayload {\r\n sub: string; // subject (user id)\r\n iat?: number; // issued at\r\n exp?: number; // expires at\r\n iss?: string; // issuer\r\n aud?: string; // audience\r\n [key: string]: any; // additional claims\r\n}\r\n\r\nexport interface TokenPair {\r\n accessToken: string;\r\n refreshToken: string;\r\n expiresIn: number;\r\n}\r\n\r\nexport class JWTProvider {\r\n private blacklistedTokens: Set<string> = new Set();\r\n \r\n constructor(private config: JWTConfig) {\r\n if (!config.secret) {\r\n throw new Error('JWT secret is required');\r\n }\r\n }\r\n\r\n /**\r\n * Generate access and refresh token pair\r\n */\r\n generateTokens(payload: Omit<TokenPayload, 'iat' | 'exp'>): TokenPair {\r\n const now = Math.floor(Date.now() / 1000);\r\n const expiresIn = this.parseExpiration(this.config.expiresIn || '1h');\r\n \r\n const accessPayload: TokenPayload = {\r\n sub: payload.sub,\r\n ...payload,\r\n iat: now,\r\n exp: now + expiresIn,\r\n iss: this.config.issuer,\r\n aud: this.config.audience,\r\n };\r\n\r\n const accessToken = sign(accessPayload, this.config.secret, {\r\n algorithm: this.config.algorithm || 'HS256',\r\n });\r\n\r\n const refreshPayload: TokenPayload = {\r\n sub: payload.sub,\r\n type: 'refresh',\r\n iat: now,\r\n exp: now + this.parseExpiration(this.config.refreshExpiresIn || '7d'),\r\n iss: this.config.issuer,\r\n aud: this.config.audience,\r\n };\r\n\r\n const refreshToken = sign(\r\n refreshPayload,\r\n this.config.refreshSecret || this.config.secret,\r\n {\r\n algorithm: this.config.algorithm || 'HS256',\r\n }\r\n );\r\n\r\n return {\r\n accessToken,\r\n refreshToken,\r\n expiresIn,\r\n };\r\n }\r\n\r\n /**\r\n * Verify and decode access token\r\n */\r\n verifyAccessToken(token: string): TokenPayload {\r\n if (this.isBlacklisted(token)) {\r\n throw new Error('Token has been revoked');\r\n }\r\n\r\n try {\r\n const payload = verify(token, this.config.secret, {\r\n algorithms: [this.config.algorithm || 'HS256'],\r\n issuer: this.config.issuer,\r\n audience: this.config.audience,\r\n }) as TokenPayload;\r\n\r\n return payload;\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw new Error(`Invalid token: ${error.message}`);\r\n }\r\n throw new Error('Invalid token');\r\n }\r\n }\r\n\r\n /**\r\n * Verify and decode refresh token\r\n */\r\n verifyRefreshToken(token: string): TokenPayload {\r\n if (this.isBlacklisted(token)) {\r\n throw new Error('Refresh token has been revoked');\r\n }\r\n\r\n try {\r\n const payload = verify(\r\n token,\r\n this.config.refreshSecret || this.config.secret,\r\n {\r\n algorithms: [this.config.algorithm || 'HS256'],\r\n issuer: this.config.issuer,\r\n audience: this.config.audience,\r\n }\r\n ) as TokenPayload;\r\n\r\n if (payload.type !== 'refresh') {\r\n throw new Error('Invalid refresh token type');\r\n }\r\n\r\n return payload;\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n throw new Error(`Invalid refresh token: ${error.message}`);\r\n }\r\n throw new Error('Invalid refresh token');\r\n }\r\n }\r\n\r\n /**\r\n * Refresh access token using refresh token\r\n */\r\n refreshAccessToken(refreshToken: string): TokenPair {\r\n const payload = this.verifyRefreshToken(refreshToken);\r\n \r\n // Blacklist the old refresh token\r\n this.blacklistToken(refreshToken);\r\n \r\n // Generate new token pair\r\n return this.generateTokens({\r\n sub: payload.sub,\r\n // Copy other claims except system ones\r\n ...Object.fromEntries(\r\n Object.entries(payload).filter(([key]) => \r\n !['iat', 'exp', 'iss', 'aud', 'type'].includes(key)\r\n )\r\n ),\r\n });\r\n }\r\n\r\n /**\r\n * Decode token without verification (for inspection)\r\n */\r\n decodeToken(token: string): TokenPayload | null {\r\n try {\r\n return decode(token) as TokenPayload;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Blacklist a token (for logout)\r\n */\r\n blacklistToken(token: string): void {\r\n this.blacklistedTokens.add(token);\r\n }\r\n\r\n /**\r\n * Check if token is blacklisted\r\n */\r\n isBlacklisted(token: string): boolean {\r\n return this.blacklistedTokens.has(token);\r\n }\r\n\r\n /**\r\n * Clear expired tokens from blacklist\r\n */\r\n cleanupBlacklist(): void {\r\n const now = Math.floor(Date.now() / 1000);\r\n \r\n for (const token of this.blacklistedTokens) {\r\n const payload = this.decodeToken(token);\r\n if (payload && payload.exp && payload.exp < now) {\r\n this.blacklistedTokens.delete(token);\r\n }\r\n }\r\n }\r\n\r\n private parseExpiration(exp: string | number): number {\r\n if (typeof exp === 'number') {\r\n return exp;\r\n }\r\n\r\n const units: Record<string, number> = {\r\n s: 1,\r\n m: 60,\r\n h: 3600,\r\n d: 86400,\r\n w: 604800,\r\n };\r\n\r\n const match = exp.match(/^(\\d+)([smhdw])$/);\r\n if (!match) {\r\n throw new Error(`Invalid expiration format: ${exp}`);\r\n }\r\n\r\n const [, value, unit] = match;\r\n return parseInt(value) * units[unit];\r\n }\r\n}\r\n\r\n// Zod schemas for validation\r\nexport const TokenPayloadSchema = z.object({\r\n sub: z.string(),\r\n iat: z.number().optional(),\r\n exp: z.number().optional(),\r\n iss: z.string().optional(),\r\n aud: z.string().optional(),\r\n}).passthrough();\r\n\r\nexport const LoginRequestSchema = z.object({\r\n username: z.string().min(1),\r\n password: z.string().min(1),\r\n});\r\n\r\nexport const RefreshRequestSchema = z.object({\r\n refreshToken: z.string().min(1),\r\n});",
87
259
  "import { JWTProvider, JWTConfig, TokenPayload, TokenPair } from './jwt-provider.js';\r\nimport { AuthenticationException, InvalidTokenException, TokenExpiredException } from './exceptions.js';\r\nimport { z } from 'zod';\r\n\r\nexport interface User {\r\n id: string;\r\n username: string;\r\n email?: string;\r\n roles?: string[];\r\n permissions?: string[];\r\n [key: string]: any;\r\n}\r\n\r\nexport interface AuthResult {\r\n user: User;\r\n tokens: TokenPair;\r\n}\r\n\r\nexport interface UserProvider {\r\n findByCredentials(username: string, password: string): Promise<User | null>;\r\n findById(id: string): Promise<User | null>;\r\n hashPassword(password: string): Promise<string>;\r\n verifyPassword(password: string, hash: string): Promise<boolean>;\r\n}\r\n\r\nexport class AuthService {\r\n private jwtProvider: JWTProvider;\r\n\r\n constructor(\r\n private config: JWTConfig,\r\n private userProvider: UserProvider\r\n ) {\r\n this.jwtProvider = new JWTProvider(config);\r\n }\r\n\r\n /**\r\n * Authenticate user with username/password\r\n */\r\n async login(username: string, password: string): Promise<AuthResult> {\r\n const user = await this.userProvider.findByCredentials(username, password);\r\n \r\n if (!user) {\r\n throw new AuthenticationException('Invalid credentials');\r\n }\r\n\r\n const tokens = this.jwtProvider.generateTokens({\r\n sub: user.id,\r\n username: user.username,\r\n email: user.email,\r\n roles: user.roles || [],\r\n permissions: user.permissions || [],\r\n });\r\n\r\n return { user, tokens };\r\n }\r\n\r\n /**\r\n * Refresh access token\r\n */\r\n async refresh(refreshToken: string): Promise<TokenPair> {\r\n try {\r\n return this.jwtProvider.refreshAccessToken(refreshToken);\r\n } catch (error) {\r\n throw new InvalidTokenException(\r\n error instanceof Error ? error.message : 'Invalid refresh token'\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Logout user (blacklist tokens)\r\n */\r\n async logout(accessToken: string, refreshToken?: string): Promise<void> {\r\n this.jwtProvider.blacklistToken(accessToken);\r\n \r\n if (refreshToken) {\r\n this.jwtProvider.blacklistToken(refreshToken);\r\n }\r\n }\r\n\r\n /**\r\n * Verify access token and get user\r\n */\r\n async verifyToken(token: string): Promise<User> {\r\n try {\r\n const payload = this.jwtProvider.verifyAccessToken(token);\r\n \r\n // Get fresh user data\r\n const user = await this.userProvider.findById(payload.sub);\r\n \r\n if (!user) {\r\n throw new AuthenticationException('User not found');\r\n }\r\n\r\n return user;\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n if (error.message.includes('expired')) {\r\n throw new TokenExpiredException();\r\n }\r\n throw new InvalidTokenException(error.message);\r\n }\r\n throw new InvalidTokenException('Token verification failed');\r\n }\r\n }\r\n\r\n /**\r\n * Get user from token payload (without database lookup)\r\n */\r\n getUserFromToken(token: string): TokenPayload {\r\n return this.jwtProvider.verifyAccessToken(token);\r\n }\r\n\r\n /**\r\n * Check if user has required roles\r\n */\r\n hasRoles(user: User | TokenPayload, requiredRoles: string[]): boolean {\r\n const userRoles = user.roles || [];\r\n return requiredRoles.every(role => userRoles.includes(role));\r\n }\r\n\r\n /**\r\n * Check if user has required permissions\r\n */\r\n hasPermissions(user: User | TokenPayload, requiredPermissions: string[]): boolean {\r\n const userPermissions = user.permissions || [];\r\n return requiredPermissions.every(permission => userPermissions.includes(permission));\r\n }\r\n\r\n /**\r\n * Register new user\r\n */\r\n async register(userData: {\r\n username: string;\r\n password: string;\r\n email?: string;\r\n roles?: string[];\r\n }): Promise<AuthResult> {\r\n const hashedPassword = await this.userProvider.hashPassword(userData.password);\r\n \r\n // This would typically create the user in the database\r\n // For now, we'll assume the userProvider handles this\r\n const user: User = {\r\n id: crypto.randomUUID(),\r\n username: userData.username,\r\n email: userData.email,\r\n roles: userData.roles || ['user'],\r\n };\r\n\r\n const tokens = this.jwtProvider.generateTokens({\r\n sub: user.id,\r\n username: user.username,\r\n email: user.email,\r\n roles: user.roles,\r\n });\r\n\r\n return { user, tokens };\r\n }\r\n\r\n /**\r\n * Clean up expired blacklisted tokens\r\n */\r\n cleanup(): void {\r\n this.jwtProvider.cleanupBlacklist();\r\n }\r\n\r\n /**\r\n * Get JWT provider instance\r\n */\r\n getJWTProvider(): JWTProvider {\r\n return this.jwtProvider;\r\n }\r\n}\r\n\r\n// Default in-memory user provider for testing\r\nexport class InMemoryUserProvider implements UserProvider {\r\n private users: Map<string, User & { passwordHash: string }> = new Map();\r\n\r\n async findByCredentials(username: string, password: string): Promise<User | null> {\r\n for (const [id, user] of this.users) {\r\n if (user.username === username) {\r\n const isValid = await this.verifyPassword(password, user.passwordHash);\r\n if (isValid) {\r\n const { passwordHash, ...userWithoutPassword } = user;\r\n return userWithoutPassword;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n async findById(id: string): Promise<User | null> {\r\n const user = this.users.get(id);\r\n if (user) {\r\n const { passwordHash, ...userWithoutPassword } = user;\r\n return userWithoutPassword;\r\n }\r\n return null;\r\n }\r\n\r\n async hashPassword(password: string): Promise<string> {\r\n // In a real implementation, use bcrypt or similar\r\n return Buffer.from(password).toString('base64');\r\n }\r\n\r\n async verifyPassword(password: string, hash: string): Promise<boolean> {\r\n const hashedInput = await this.hashPassword(password);\r\n return hashedInput === hash;\r\n }\r\n\r\n async createUser(userData: {\r\n username: string;\r\n password: string;\r\n email?: string;\r\n roles?: string[];\r\n }): Promise<User> {\r\n const id = crypto.randomUUID();\r\n const passwordHash = await this.hashPassword(userData.password);\r\n \r\n const user = {\r\n id,\r\n username: userData.username,\r\n email: userData.email,\r\n roles: userData.roles || ['user'],\r\n passwordHash,\r\n };\r\n\r\n this.users.set(id, user);\r\n\r\n const { passwordHash: _, ...userWithoutPassword } = user;\r\n return userWithoutPassword;\r\n }\r\n}",
88
260
  "import { z } from 'zod';\r\n\r\nexport interface Role {\r\n name: string;\r\n description?: string;\r\n permissions: string[];\r\n inherits?: string[]; // Roles that this role inherits from\r\n level?: number; // Hierarchical level (higher = more privileged)\r\n}\r\n\r\nexport interface RoleHierarchy {\r\n roles: Map<string, Role>;\r\n hierarchy: Map<string, string[]>; // role -> parent roles\r\n}\r\n\r\nexport class RBACManager {\r\n private roles: Map<string, Role> = new Map();\r\n private hierarchy: Map<string, string[]> = new Map();\r\n private compiledPermissions: Map<string, Set<string>> = new Map();\r\n\r\n /**\r\n * Define a role with its permissions and inheritance\r\n */\r\n defineRole(role: Role): void {\r\n this.roles.set(role.name, role);\r\n \r\n // Build hierarchy\r\n if (role.inherits && role.inherits.length > 0) {\r\n this.hierarchy.set(role.name, role.inherits);\r\n }\r\n\r\n // Clear compiled permissions cache\r\n this.compiledPermissions.clear();\r\n }\r\n\r\n /**\r\n * Define multiple roles at once\r\n */\r\n defineRoles(roles: Role[]): void {\r\n for (const role of roles) {\r\n this.defineRole(role);\r\n }\r\n }\r\n\r\n /**\r\n * Get all permissions for a role (including inherited)\r\n */\r\n getRolePermissions(roleName: string): string[] {\r\n if (this.compiledPermissions.has(roleName)) {\r\n return Array.from(this.compiledPermissions.get(roleName)!);\r\n }\r\n\r\n const permissions = new Set<string>();\r\n this.collectPermissions(roleName, permissions, new Set());\r\n \r\n this.compiledPermissions.set(roleName, permissions);\r\n return Array.from(permissions);\r\n }\r\n\r\n /**\r\n * Check if a role has a specific permission\r\n */\r\n roleHasPermission(roleName: string, permission: string): boolean {\r\n const permissions = this.getRolePermissions(roleName);\r\n return permissions.includes(permission);\r\n }\r\n\r\n /**\r\n * Check if user with roles has a specific permission\r\n */\r\n userHasPermission(userRoles: string[], permission: string): boolean {\r\n for (const role of userRoles) {\r\n if (this.roleHasPermission(role, permission)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if user has all required roles\r\n */\r\n userHasRoles(userRoles: string[], requiredRoles: string[]): boolean {\r\n return requiredRoles.every(role => userRoles.includes(role));\r\n }\r\n\r\n /**\r\n * Check if user has any of the required roles\r\n */\r\n userHasAnyRole(userRoles: string[], requiredRoles: string[]): boolean {\r\n return requiredRoles.some(role => userRoles.includes(role));\r\n }\r\n\r\n /**\r\n * Get all roles that have a specific permission\r\n */\r\n getRolesWithPermission(permission: string): string[] {\r\n const rolesWithPermission: string[] = [];\r\n \r\n for (const roleName of this.roles.keys()) {\r\n if (this.roleHasPermission(roleName, permission)) {\r\n rolesWithPermission.push(roleName);\r\n }\r\n }\r\n \r\n return rolesWithPermission;\r\n }\r\n\r\n /**\r\n * Get role hierarchy (parent roles)\r\n */\r\n getRoleHierarchy(roleName: string): string[] {\r\n const parents: string[] = [];\r\n this.collectParentRoles(roleName, parents, new Set());\r\n return parents;\r\n }\r\n\r\n /**\r\n * Check if one role inherits from another\r\n */\r\n roleInheritsFrom(childRole: string, parentRole: string): boolean {\r\n const hierarchy = this.getRoleHierarchy(childRole);\r\n return hierarchy.includes(parentRole);\r\n }\r\n\r\n /**\r\n * Get all defined roles\r\n */\r\n getAllRoles(): Role[] {\r\n return Array.from(this.roles.values());\r\n }\r\n\r\n /**\r\n * Get role definition\r\n */\r\n getRole(roleName: string): Role | undefined {\r\n return this.roles.get(roleName);\r\n }\r\n\r\n /**\r\n * Check if role exists\r\n */\r\n roleExists(roleName: string): boolean {\r\n return this.roles.has(roleName);\r\n }\r\n\r\n /**\r\n * Validate role names\r\n */\r\n validateRoles(roleNames: string[]): { valid: string[]; invalid: string[] } {\r\n const valid: string[] = [];\r\n const invalid: string[] = [];\r\n\r\n for (const roleName of roleNames) {\r\n if (this.roleExists(roleName)) {\r\n valid.push(roleName);\r\n } else {\r\n invalid.push(roleName);\r\n }\r\n }\r\n\r\n return { valid, invalid };\r\n }\r\n\r\n /**\r\n * Get effective roles (including inherited roles)\r\n */\r\n getEffectiveRoles(userRoles: string[]): string[] {\r\n const effectiveRoles = new Set<string>();\r\n \r\n for (const role of userRoles) {\r\n effectiveRoles.add(role);\r\n const hierarchy = this.getRoleHierarchy(role);\r\n hierarchy.forEach(parentRole => effectiveRoles.add(parentRole));\r\n }\r\n \r\n return Array.from(effectiveRoles);\r\n }\r\n\r\n /**\r\n * Compare role levels (for hierarchical comparison)\r\n */\r\n compareRoleLevels(role1: string, role2: string): number {\r\n const r1 = this.getRole(role1);\r\n const r2 = this.getRole(role2);\r\n \r\n const level1 = r1?.level ?? 0;\r\n const level2 = r2?.level ?? 0;\r\n \r\n return level1 - level2;\r\n }\r\n\r\n /**\r\n * Get highest role level from user roles\r\n */\r\n getHighestRoleLevel(userRoles: string[]): number {\r\n let highestLevel = 0;\r\n \r\n for (const roleName of userRoles) {\r\n const role = this.getRole(roleName);\r\n if (role && role.level && role.level > highestLevel) {\r\n highestLevel = role.level;\r\n }\r\n }\r\n \r\n return highestLevel;\r\n }\r\n\r\n private collectPermissions(roleName: string, permissions: Set<string>, visited: Set<string>): void {\r\n if (visited.has(roleName)) {\r\n // Circular dependency detected\r\n throw new Error(`Circular role inheritance detected: ${roleName}`);\r\n }\r\n\r\n visited.add(roleName);\r\n \r\n const role = this.roles.get(roleName);\r\n if (!role) {\r\n throw new Error(`Role not found: ${roleName}`);\r\n }\r\n\r\n // Add direct permissions\r\n role.permissions.forEach(permission => permissions.add(permission));\r\n\r\n // Add inherited permissions\r\n const parentRoles = this.hierarchy.get(roleName) || [];\r\n for (const parentRole of parentRoles) {\r\n this.collectPermissions(parentRole, permissions, new Set(visited));\r\n }\r\n }\r\n\r\n private collectParentRoles(roleName: string, parents: string[], visited: Set<string>): void {\r\n if (visited.has(roleName)) {\r\n return; // Avoid infinite recursion\r\n }\r\n\r\n visited.add(roleName);\r\n \r\n const parentRoles = this.hierarchy.get(roleName) || [];\r\n for (const parentRole of parentRoles) {\r\n parents.push(parentRole);\r\n this.collectParentRoles(parentRole, parents, visited);\r\n }\r\n }\r\n}\r\n\r\n// Default RBAC setup with common roles\r\nexport function createDefaultRBAC(): RBACManager {\r\n const rbac = new RBACManager();\r\n\r\n // Define common roles with hierarchy\r\n rbac.defineRoles([\r\n {\r\n name: 'guest',\r\n description: 'Guest user with minimal permissions',\r\n permissions: ['read:public'],\r\n level: 1\r\n },\r\n {\r\n name: 'user',\r\n description: 'Regular authenticated user',\r\n permissions: ['read:own', 'write:own', 'read:public'],\r\n inherits: ['guest'],\r\n level: 10\r\n },\r\n {\r\n name: 'moderator',\r\n description: 'Moderator with content management permissions',\r\n permissions: ['read:all', 'write:all', 'moderate:content'],\r\n inherits: ['user'],\r\n level: 50\r\n },\r\n {\r\n name: 'admin',\r\n description: 'Administrator with full system access',\r\n permissions: ['*'], // Wildcard for all permissions\r\n inherits: ['moderator'],\r\n level: 100\r\n },\r\n {\r\n name: 'super-admin',\r\n description: 'Super administrator with unrestricted access',\r\n permissions: ['*', 'system:*'],\r\n inherits: ['admin'],\r\n level: 1000\r\n }\r\n ]);\r\n\r\n return rbac;\r\n}\r\n\r\n// Validation schemas\r\nexport const RoleSchema = z.object({\r\n name: z.string().min(1),\r\n description: z.string().optional(),\r\n permissions: z.array(z.string()),\r\n inherits: z.array(z.string()).optional(),\r\n level: z.number().optional()\r\n});\r\n\r\nexport const RoleAssignmentSchema = z.object({\r\n userId: z.string(),\r\n roles: z.array(z.string())\r\n});\r\n\r\nexport const PermissionCheckSchema = z.object({\r\n userId: z.string(),\r\n permission: z.string()\r\n});\r\n\r\n// Permission patterns\r\nexport class PermissionMatcher {\r\n /**\r\n * Check if a permission matches a pattern (supports wildcards)\r\n */\r\n static matches(permission: string, pattern: string): boolean {\r\n if (pattern === '*') {\r\n return true; // Wildcard matches everything\r\n }\r\n\r\n if (pattern.endsWith('*')) {\r\n const prefix = pattern.slice(0, -1);\r\n return permission.startsWith(prefix);\r\n }\r\n\r\n return permission === pattern;\r\n }\r\n\r\n /**\r\n * Check if user permissions include required permission (with wildcard support)\r\n */\r\n static hasPermission(userPermissions: string[], requiredPermission: string): boolean {\r\n return userPermissions.some(permission => \r\n this.matches(requiredPermission, permission)\r\n );\r\n }\r\n\r\n /**\r\n * Filter permissions by pattern\r\n */\r\n static filterByPattern(permissions: string[], pattern: string): string[] {\r\n return permissions.filter(permission => this.matches(permission, pattern));\r\n }\r\n}",
@@ -93,9 +265,33 @@
93
265
  "import { z } from 'zod';\r\n\r\nexport interface OAuthConfig {\r\n clientId: string;\r\n clientSecret: string;\r\n redirectUri: string;\r\n scopes?: string[];\r\n authUrl: string;\r\n tokenUrl: string;\r\n userInfoUrl: string;\r\n pkce?: boolean;\r\n}\r\n\r\nexport interface OAuthProvider {\r\n name: string;\r\n config: OAuthConfig;\r\n getAuthUrl(state: string, codeChallenge?: string): string;\r\n exchangeCodeForTokens(code: string, codeVerifier?: string): Promise<OAuthTokens>;\r\n getUserInfo(accessToken: string): Promise<OAuthUser>;\r\n}\r\n\r\nexport interface OAuthTokens {\r\n accessToken: string;\r\n refreshToken?: string;\r\n expiresIn?: number;\r\n tokenType: string;\r\n scope?: string;\r\n}\r\n\r\nexport interface OAuthUser {\r\n id: string;\r\n email?: string;\r\n name?: string;\r\n username?: string;\r\n avatar?: string;\r\n provider: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface PKCEChallenge {\r\n codeVerifier: string;\r\n codeChallenge: string;\r\n codeChallengeMethod: 'S256';\r\n}\r\n\r\nexport class BaseOAuthProvider implements OAuthProvider {\r\n constructor(\r\n public name: string,\r\n public config: OAuthConfig\r\n ) {}\r\n\r\n getAuthUrl(state: string, codeChallenge?: string): string {\r\n const params = new URLSearchParams({\r\n client_id: this.config.clientId,\r\n redirect_uri: this.config.redirectUri,\r\n response_type: 'code',\r\n state,\r\n scope: this.config.scopes?.join(' ') || ''\r\n });\r\n\r\n if (codeChallenge && this.config.pkce) {\r\n params.set('code_challenge', codeChallenge);\r\n params.set('code_challenge_method', 'S256');\r\n }\r\n\r\n return `${this.config.authUrl}?${params.toString()}`;\r\n }\r\n\r\n async exchangeCodeForTokens(code: string, codeVerifier?: string): Promise<OAuthTokens> {\r\n const body = new URLSearchParams({\r\n client_id: this.config.clientId,\r\n client_secret: this.config.clientSecret,\r\n code,\r\n grant_type: 'authorization_code',\r\n redirect_uri: this.config.redirectUri\r\n });\r\n\r\n if (codeVerifier && this.config.pkce) {\r\n body.set('code_verifier', codeVerifier);\r\n }\r\n\r\n const response = await fetch(this.config.tokenUrl, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/x-www-form-urlencoded',\r\n 'Accept': 'application/json'\r\n },\r\n body: body.toString()\r\n });\r\n\r\n if (!response.ok) {\r\n const error = await response.text();\r\n throw new Error(`Token exchange failed: ${error}`);\r\n }\r\n\r\n const data = await response.json() as any;\r\n \r\n return {\r\n accessToken: data.access_token,\r\n refreshToken: data.refresh_token,\r\n expiresIn: data.expires_in,\r\n tokenType: data.token_type || 'Bearer',\r\n scope: data.scope\r\n };\r\n }\r\n\r\n async getUserInfo(accessToken: string): Promise<OAuthUser> {\r\n const response = await fetch(this.config.userInfoUrl, {\r\n headers: {\r\n 'Authorization': `Bearer ${accessToken}`,\r\n 'Accept': 'application/json'\r\n }\r\n });\r\n\r\n if (!response.ok) {\r\n const error = await response.text();\r\n throw new Error(`Failed to get user info: ${error}`);\r\n }\r\n\r\n const data = await response.json();\r\n return this.mapUserInfo(data);\r\n }\r\n\r\n protected mapUserInfo(data: any): OAuthUser {\r\n // Base implementation - should be overridden by specific providers\r\n return {\r\n id: data.id || data.sub,\r\n email: data.email,\r\n name: data.name,\r\n username: data.login || data.preferred_username,\r\n avatar: data.avatar_url || data.picture,\r\n provider: this.name,\r\n ...data\r\n };\r\n }\r\n}\r\n\r\n// Google OAuth Provider\r\nexport class GoogleOAuthProvider extends BaseOAuthProvider {\r\n constructor(clientId: string, clientSecret: string, redirectUri: string) {\r\n super('google', {\r\n clientId,\r\n clientSecret,\r\n redirectUri,\r\n scopes: ['openid', 'profile', 'email'],\r\n authUrl: 'https://accounts.google.com/o/oauth2/v2/auth',\r\n tokenUrl: 'https://oauth2.googleapis.com/token',\r\n userInfoUrl: 'https://www.googleapis.com/oauth2/v2/userinfo',\r\n pkce: true\r\n });\r\n }\r\n\r\n protected mapUserInfo(data: any): OAuthUser {\r\n return {\r\n id: data.id,\r\n email: data.email,\r\n name: data.name,\r\n username: data.email,\r\n avatar: data.picture,\r\n provider: 'google',\r\n verified: data.verified_email,\r\n locale: data.locale,\r\n raw: data\r\n };\r\n }\r\n}\r\n\r\n// GitHub OAuth Provider\r\nexport class GitHubOAuthProvider extends BaseOAuthProvider {\r\n constructor(clientId: string, clientSecret: string, redirectUri: string) {\r\n super('github', {\r\n clientId,\r\n clientSecret,\r\n redirectUri,\r\n scopes: ['user:email'],\r\n authUrl: 'https://github.com/login/oauth/authorize',\r\n tokenUrl: 'https://github.com/login/oauth/access_token',\r\n userInfoUrl: 'https://api.github.com/user',\r\n pkce: false // GitHub doesn't support PKCE yet\r\n });\r\n }\r\n\r\n protected mapUserInfo(data: any): OAuthUser {\r\n return {\r\n id: data.id.toString(),\r\n email: data.email,\r\n name: data.name,\r\n username: data.login,\r\n avatar: data.avatar_url,\r\n provider: 'github',\r\n company: data.company,\r\n location: data.location,\r\n bio: data.bio,\r\n raw: data\r\n };\r\n }\r\n\r\n async getUserInfo(accessToken: string): Promise<OAuthUser> {\r\n // Get basic user info\r\n const userResponse = await fetch(this.config.userInfoUrl, {\r\n headers: {\r\n 'Authorization': `Bearer ${accessToken}`,\r\n 'Accept': 'application/vnd.github.v3+json',\r\n 'User-Agent': 'VeloceTS-OAuth'\r\n }\r\n });\r\n\r\n if (!userResponse.ok) {\r\n throw new Error(`Failed to get user info: ${await userResponse.text()}`);\r\n }\r\n\r\n const userData = await userResponse.json() as any;\r\n\r\n // Get user emails if not public\r\n if (!userData.email) {\r\n try {\r\n const emailResponse = await fetch('https://api.github.com/user/emails', {\r\n headers: {\r\n 'Authorization': `Bearer ${accessToken}`,\r\n 'Accept': 'application/vnd.github.v3+json',\r\n 'User-Agent': 'VeloceTS-OAuth'\r\n }\r\n });\r\n\r\n if (emailResponse.ok) {\r\n const emails = await emailResponse.json() as any[];\r\n const primaryEmail = emails.find((email: any) => email.primary);\r\n if (primaryEmail) {\r\n userData.email = primaryEmail.email;\r\n }\r\n }\r\n } catch (error) {\r\n // Email fetch failed, continue without email\r\n }\r\n }\r\n\r\n return this.mapUserInfo(userData);\r\n }\r\n}\r\n\r\n// Microsoft OAuth Provider\r\nexport class MicrosoftOAuthProvider extends BaseOAuthProvider {\r\n constructor(clientId: string, clientSecret: string, redirectUri: string, tenant: string = 'common') {\r\n super('microsoft', {\r\n clientId,\r\n clientSecret,\r\n redirectUri,\r\n scopes: ['openid', 'profile', 'email'],\r\n authUrl: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/authorize`,\r\n tokenUrl: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/token`,\r\n userInfoUrl: 'https://graph.microsoft.com/v1.0/me',\r\n pkce: true\r\n });\r\n }\r\n\r\n protected mapUserInfo(data: any): OAuthUser {\r\n return {\r\n id: data.id,\r\n email: data.mail || data.userPrincipalName,\r\n name: data.displayName,\r\n username: data.userPrincipalName,\r\n avatar: undefined, // Microsoft Graph doesn't provide avatar URL directly\r\n provider: 'microsoft',\r\n jobTitle: data.jobTitle,\r\n department: data.department,\r\n officeLocation: data.officeLocation,\r\n raw: data\r\n };\r\n }\r\n}\r\n\r\n// PKCE utilities\r\nexport class PKCEUtils {\r\n static generateCodeVerifier(): string {\r\n const array = new Uint8Array(32);\r\n crypto.getRandomValues(array);\r\n return this.base64URLEncode(array);\r\n }\r\n\r\n static async generateCodeChallenge(codeVerifier: string): Promise<string> {\r\n const encoder = new TextEncoder();\r\n const data = encoder.encode(codeVerifier);\r\n const digest = await crypto.subtle.digest('SHA-256', data);\r\n return this.base64URLEncode(new Uint8Array(digest));\r\n }\r\n\r\n static async generatePKCEChallenge(): Promise<PKCEChallenge> {\r\n const codeVerifier = this.generateCodeVerifier();\r\n const codeChallenge = await this.generateCodeChallenge(codeVerifier);\r\n \r\n return {\r\n codeVerifier,\r\n codeChallenge,\r\n codeChallengeMethod: 'S256'\r\n };\r\n }\r\n\r\n private static base64URLEncode(array: Uint8Array): string {\r\n const base64 = btoa(String.fromCharCode(...array));\r\n return base64\r\n .replace(/\\+/g, '-')\r\n .replace(/\\//g, '_')\r\n .replace(/=/g, '');\r\n }\r\n}\r\n\r\n// OAuth state management\r\nexport class OAuthStateManager {\r\n private states: Map<string, { timestamp: number; data?: any }> = new Map();\r\n private readonly ttl: number = 10 * 60 * 1000; // 10 minutes\r\n\r\n generateState(data?: any): string {\r\n const state = crypto.randomUUID();\r\n this.states.set(state, {\r\n timestamp: Date.now(),\r\n data\r\n });\r\n \r\n // Clean up expired states\r\n this.cleanup();\r\n \r\n return state;\r\n }\r\n\r\n validateState(state: string): { valid: boolean; data?: any } {\r\n const stateData = this.states.get(state);\r\n \r\n if (!stateData) {\r\n return { valid: false };\r\n }\r\n\r\n // Check if expired\r\n if (Date.now() - stateData.timestamp > this.ttl) {\r\n this.states.delete(state);\r\n return { valid: false };\r\n }\r\n\r\n // Remove state after validation (one-time use)\r\n this.states.delete(state);\r\n \r\n return {\r\n valid: true,\r\n data: stateData.data\r\n };\r\n }\r\n\r\n private cleanup(): void {\r\n const now = Date.now();\r\n for (const [state, data] of this.states.entries()) {\r\n if (now - data.timestamp > this.ttl) {\r\n this.states.delete(state);\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Validation schemas\r\nexport const OAuthCallbackSchema = z.object({\r\n code: z.string(),\r\n state: z.string(),\r\n error: z.string().optional(),\r\n error_description: z.string().optional()\r\n});\r\n\r\nexport const OAuthTokensSchema = z.object({\r\n accessToken: z.string(),\r\n refreshToken: z.string().optional(),\r\n expiresIn: z.number().optional(),\r\n tokenType: z.string(),\r\n scope: z.string().optional()\r\n});\r\n\r\nexport const OAuthUserSchema = z.object({\r\n id: z.string(),\r\n email: z.string().optional(),\r\n name: z.string().optional(),\r\n username: z.string().optional(),\r\n avatar: z.string().optional(),\r\n provider: z.string()\r\n}).passthrough();",
94
266
  "import { MetadataRegistry } from '../core/metadata.js';\r\nimport type { OAuthProvider, OAuthUser } from './oauth-provider.js';\r\nimport type { OAuthConfig, OAuthMetadata } from '../types/index.js';\r\n\r\n\r\n/**\r\n * @OAuth() decorator for OAuth-based authentication\r\n */\r\nexport function OAuth(config: OAuthConfig): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata: OAuthMetadata = {\r\n provider: config.provider,\r\n config,\r\n };\r\n\r\n MetadataRegistry.defineOAuth(target, propertyKey as string, metadata);\r\n };\r\n}\r\n\r\n/**\r\n * @OAuthUser() parameter decorator to inject OAuth user info\r\n */\r\nexport function OAuthUser(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (propertyKey) {\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, {\r\n index: parameterIndex,\r\n type: 'oauth-user',\r\n required: true,\r\n });\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * @OAuthToken() parameter decorator to inject OAuth access token\r\n */\r\nexport function OAuthToken(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (propertyKey) {\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, {\r\n index: parameterIndex,\r\n type: 'oauth-token',\r\n required: true,\r\n });\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Extract OAuth user from context\r\n */\r\nexport function getOAuthUser(c: any): OAuthUser | null {\r\n return c.get('oauth.user') || null;\r\n}\r\n\r\n/**\r\n * Extract OAuth token from context\r\n */\r\nexport function getOAuthToken(c: any): string | null {\r\n return c.get('oauth.token') || null;\r\n}\r\n\r\n/**\r\n * Check if user is authenticated via OAuth\r\n */\r\nexport function isOAuthAuthenticated(c: any): boolean {\r\n return c.get('oauth.authenticated') === true;\r\n}\r\n\r\n/**\r\n * Get OAuth provider name\r\n */\r\nexport function getOAuthProvider(c: any): string | null {\r\n return c.get('oauth.provider') || null;\r\n}",
95
267
  "import { z } from 'zod';\r\n\r\nexport interface SessionData {\r\n id: string;\r\n userId: string;\r\n data: Record<string, any>;\r\n createdAt: Date;\r\n updatedAt: Date;\r\n expiresAt?: Date;\r\n ipAddress?: string;\r\n userAgent?: string;\r\n csrfToken?: string;\r\n}\r\n\r\nexport interface SessionConfig {\r\n name?: string;\r\n secret: string;\r\n maxAge?: number; // in milliseconds\r\n secure?: boolean;\r\n httpOnly?: boolean;\r\n sameSite?: 'strict' | 'lax' | 'none';\r\n domain?: string;\r\n path?: string;\r\n rolling?: boolean; // Extend session on each request\r\n genid?: () => string; // Custom session ID generator\r\n}\r\n\r\nexport interface SessionStore {\r\n get(sessionId: string): Promise<SessionData | null>;\r\n set(sessionId: string, session: SessionData): Promise<void>;\r\n destroy(sessionId: string): Promise<void>;\r\n touch(sessionId: string): Promise<void>; // Update last accessed time\r\n clear(): Promise<void>; // Clear all sessions\r\n length(): Promise<number>; // Get session count\r\n all(): Promise<SessionData[]>; // Get all sessions (for admin)\r\n}\r\n\r\nexport class MemorySessionStore implements SessionStore {\r\n private sessions: Map<string, SessionData> = new Map();\r\n\r\n async get(sessionId: string): Promise<SessionData | null> {\r\n const session = this.sessions.get(sessionId);\r\n\r\n if (!session) {\r\n return null;\r\n }\r\n\r\n // Check if session is expired\r\n if (session.expiresAt && session.expiresAt < new Date()) {\r\n this.sessions.delete(sessionId);\r\n return null;\r\n }\r\n\r\n return session;\r\n }\r\n\r\n async set(sessionId: string, session: SessionData): Promise<void> {\r\n this.sessions.set(sessionId, session);\r\n }\r\n\r\n async destroy(sessionId: string): Promise<void> {\r\n this.sessions.delete(sessionId);\r\n }\r\n\r\n async touch(sessionId: string): Promise<void> {\r\n const session = this.sessions.get(sessionId);\r\n if (session) {\r\n session.updatedAt = new Date();\r\n this.sessions.set(sessionId, session);\r\n }\r\n }\r\n\r\n async clear(): Promise<void> {\r\n this.sessions.clear();\r\n }\r\n\r\n async length(): Promise<number> {\r\n return this.sessions.size;\r\n }\r\n\r\n async all(): Promise<SessionData[]> {\r\n return Array.from(this.sessions.values());\r\n }\r\n\r\n // Cleanup expired sessions\r\n cleanup(): void {\r\n const now = new Date();\r\n for (const [sessionId, session] of this.sessions.entries()) {\r\n if (session.expiresAt && session.expiresAt < now) {\r\n this.sessions.delete(sessionId);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport class RedisSessionStore implements SessionStore {\r\n private prefix: string = 'sess:';\r\n\r\n constructor(private redis: any, prefix?: string) {\r\n if (prefix) {\r\n this.prefix = prefix;\r\n }\r\n }\r\n\r\n async get(sessionId: string): Promise<SessionData | null> {\r\n const key = this.prefix + sessionId;\r\n const data = await this.redis.get(key);\r\n\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n try {\r\n const session = JSON.parse(data);\r\n // Convert date strings back to Date objects\r\n session.createdAt = new Date(session.createdAt);\r\n session.updatedAt = new Date(session.updatedAt);\r\n if (session.expiresAt) {\r\n session.expiresAt = new Date(session.expiresAt);\r\n }\r\n return session;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n async set(sessionId: string, session: SessionData): Promise<void> {\r\n const key = this.prefix + sessionId;\r\n const data = JSON.stringify(session);\r\n\r\n if (session.expiresAt) {\r\n const ttl = Math.floor((session.expiresAt.getTime() - Date.now()) / 1000);\r\n if (ttl > 0) {\r\n await this.redis.setex(key, ttl, data);\r\n }\r\n } else {\r\n await this.redis.set(key, data);\r\n }\r\n }\r\n\r\n async destroy(sessionId: string): Promise<void> {\r\n const key = this.prefix + sessionId;\r\n await this.redis.del(key);\r\n }\r\n\r\n async touch(sessionId: string): Promise<void> {\r\n const session = await this.get(sessionId);\r\n if (session) {\r\n session.updatedAt = new Date();\r\n await this.set(sessionId, session);\r\n }\r\n }\r\n\r\n async clear(): Promise<void> {\r\n const keys = await this.redis.keys(this.prefix + '*');\r\n if (keys.length > 0) {\r\n await this.redis.del(...keys);\r\n }\r\n }\r\n\r\n async length(): Promise<number> {\r\n const keys = await this.redis.keys(this.prefix + '*');\r\n return keys.length;\r\n }\r\n\r\n async all(): Promise<SessionData[]> {\r\n const keys = await this.redis.keys(this.prefix + '*');\r\n const sessions: SessionData[] = [];\r\n\r\n for (const key of keys) {\r\n const data = await this.redis.get(key);\r\n if (data) {\r\n try {\r\n const session = JSON.parse(data);\r\n session.createdAt = new Date(session.createdAt);\r\n session.updatedAt = new Date(session.updatedAt);\r\n if (session.expiresAt) {\r\n session.expiresAt = new Date(session.expiresAt);\r\n }\r\n sessions.push(session);\r\n } catch (error) {\r\n // Skip invalid sessions\r\n }\r\n }\r\n }\r\n\r\n return sessions;\r\n }\r\n}\r\n\r\nexport class SessionManager {\r\n private config: Required<Omit<SessionConfig, 'domain'>> & { domain?: string };\r\n\r\n constructor(\r\n private store: SessionStore,\r\n config: SessionConfig\r\n ) {\r\n this.config = {\r\n name: 'sessionId',\r\n maxAge: 24 * 60 * 60 * 1000, // 24 hours\r\n secure: false,\r\n httpOnly: true,\r\n sameSite: 'lax',\r\n path: '/',\r\n rolling: false,\r\n genid: () => crypto.randomUUID(),\r\n ...config,\r\n domain: config.domain\r\n };\r\n }\r\n\r\n /**\r\n * Create a new session\r\n */\r\n async createSession(userId: string, data: Record<string, any> = {}, options?: {\r\n ipAddress?: string;\r\n userAgent?: string;\r\n maxAge?: number;\r\n }): Promise<SessionData> {\r\n const sessionId = this.config.genid();\r\n const now = new Date();\r\n const maxAge = options?.maxAge || this.config.maxAge;\r\n\r\n const session: SessionData = {\r\n id: sessionId,\r\n userId,\r\n data,\r\n createdAt: now,\r\n updatedAt: now,\r\n expiresAt: new Date(now.getTime() + maxAge),\r\n ipAddress: options?.ipAddress,\r\n userAgent: options?.userAgent,\r\n csrfToken: this.generateCSRFToken()\r\n };\r\n\r\n await this.store.set(sessionId, session);\r\n return session;\r\n }\r\n\r\n /**\r\n * Get session by ID\r\n */\r\n async getSession(sessionId: string): Promise<SessionData | null> {\r\n return await this.store.get(sessionId);\r\n }\r\n\r\n /**\r\n * Update session data\r\n */\r\n async updateSession(sessionId: string, data: Record<string, any>): Promise<SessionData | null> {\r\n const session = await this.store.get(sessionId);\r\n\r\n if (!session) {\r\n return null;\r\n }\r\n\r\n session.data = { ...session.data, ...data };\r\n session.updatedAt = new Date();\r\n\r\n // Extend session if rolling is enabled\r\n if (this.config.rolling) {\r\n session.expiresAt = new Date(Date.now() + this.config.maxAge);\r\n }\r\n\r\n await this.store.set(sessionId, session);\r\n return session;\r\n }\r\n\r\n /**\r\n * Touch session (update last accessed time)\r\n */\r\n async touchSession(sessionId: string): Promise<void> {\r\n if (this.config.rolling) {\r\n const session = await this.store.get(sessionId);\r\n if (session) {\r\n session.updatedAt = new Date();\r\n session.expiresAt = new Date(Date.now() + this.config.maxAge);\r\n await this.store.set(sessionId, session);\r\n }\r\n } else {\r\n await this.store.touch(sessionId);\r\n }\r\n }\r\n\r\n /**\r\n * Destroy session\r\n */\r\n async destroySession(sessionId: string): Promise<void> {\r\n await this.store.destroy(sessionId);\r\n }\r\n\r\n /**\r\n * Regenerate session ID (for security)\r\n */\r\n async regenerateSession(sessionId: string): Promise<SessionData | null> {\r\n const session = await this.store.get(sessionId);\r\n\r\n if (!session) {\r\n return null;\r\n }\r\n\r\n // Create new session with same data but new ID\r\n const newSessionId = this.config.genid();\r\n const newSession: SessionData = {\r\n ...session,\r\n id: newSessionId,\r\n updatedAt: new Date(),\r\n csrfToken: this.generateCSRFToken()\r\n };\r\n\r\n // Save new session and destroy old one\r\n await this.store.set(newSessionId, newSession);\r\n await this.store.destroy(sessionId);\r\n\r\n return newSession;\r\n }\r\n\r\n /**\r\n * Get all sessions for a user\r\n */\r\n async getUserSessions(userId: string): Promise<SessionData[]> {\r\n const allSessions = await this.store.all();\r\n return allSessions.filter(session => session.userId === userId);\r\n }\r\n\r\n /**\r\n * Destroy all sessions for a user\r\n */\r\n async destroyUserSessions(userId: string): Promise<void> {\r\n const userSessions = await this.getUserSessions(userId);\r\n\r\n for (const session of userSessions) {\r\n await this.store.destroy(session.id);\r\n }\r\n }\r\n\r\n /**\r\n * Validate CSRF token\r\n */\r\n validateCSRFToken(session: SessionData, token: string): boolean {\r\n return session.csrfToken === token;\r\n }\r\n\r\n /**\r\n * Generate CSRF token\r\n */\r\n private generateCSRFToken(): string {\r\n return crypto.randomUUID();\r\n }\r\n\r\n /**\r\n * Get session cookie options\r\n */\r\n getCookieOptions(): {\r\n maxAge: number;\r\n secure: boolean;\r\n httpOnly: boolean;\r\n sameSite: 'strict' | 'lax' | 'none';\r\n domain?: string;\r\n path: string;\r\n } {\r\n const options: {\r\n maxAge: number;\r\n secure: boolean;\r\n httpOnly: boolean;\r\n sameSite: 'strict' | 'lax' | 'none';\r\n domain?: string;\r\n path: string;\r\n } = {\r\n maxAge: this.config.maxAge,\r\n secure: this.config.secure,\r\n httpOnly: this.config.httpOnly,\r\n sameSite: this.config.sameSite,\r\n path: this.config.path\r\n };\r\n\r\n if (this.config.domain) {\r\n options.domain = this.config.domain;\r\n }\r\n\r\n return options;\r\n }\r\n\r\n /**\r\n * Get session configuration\r\n */\r\n getConfig(): Required<Omit<SessionConfig, 'domain'>> & { domain?: string } {\r\n return { ...this.config };\r\n }\r\n\r\n /**\r\n * Get store instance\r\n */\r\n getStore(): SessionStore {\r\n return this.store;\r\n }\r\n}\r\n\r\n// CSRF Protection utilities\r\nexport class CSRFProtection {\r\n private tokenStore: Map<string, { token: string; expiresAt: Date }> = new Map();\r\n private readonly tokenTTL = 60 * 60 * 1000; // 1 hour\r\n\r\n /**\r\n * Generate CSRF token for session\r\n */\r\n generateToken(sessionId: string): string {\r\n const token = crypto.randomUUID();\r\n const expiresAt = new Date(Date.now() + this.tokenTTL);\r\n\r\n this.tokenStore.set(sessionId, { token, expiresAt });\r\n\r\n // Cleanup expired tokens\r\n this.cleanup();\r\n\r\n return token;\r\n }\r\n\r\n /**\r\n * Validate CSRF token\r\n */\r\n validateToken(sessionId: string, token: string): boolean {\r\n const storedToken = this.tokenStore.get(sessionId);\r\n\r\n if (!storedToken) {\r\n return false;\r\n }\r\n\r\n // Check if token is expired\r\n if (storedToken.expiresAt < new Date()) {\r\n this.tokenStore.delete(sessionId);\r\n return false;\r\n }\r\n\r\n return storedToken.token === token;\r\n }\r\n\r\n /**\r\n * Remove token for session\r\n */\r\n removeToken(sessionId: string): void {\r\n this.tokenStore.delete(sessionId);\r\n }\r\n\r\n /**\r\n * Cleanup expired tokens\r\n */\r\n private cleanup(): void {\r\n const now = new Date();\r\n for (const [sessionId, tokenData] of this.tokenStore.entries()) {\r\n if (tokenData.expiresAt < now) {\r\n this.tokenStore.delete(sessionId);\r\n }\r\n }\r\n }\r\n}\r\n\r\n// Validation schemas\r\nexport const SessionDataSchema = z.object({\r\n id: z.string(),\r\n userId: z.string(),\r\n data: z.record(z.any()),\r\n createdAt: z.date(),\r\n updatedAt: z.date(),\r\n expiresAt: z.date().optional(),\r\n ipAddress: z.string().optional(),\r\n userAgent: z.string().optional(),\r\n csrfToken: z.string().optional()\r\n});\r\n\r\nexport const SessionConfigSchema = z.object({\r\n name: z.string().optional(),\r\n secret: z.string(),\r\n maxAge: z.number().optional(),\r\n secure: z.boolean().optional(),\r\n httpOnly: z.boolean().optional(),\r\n sameSite: z.enum(['strict', 'lax', 'none']).optional(),\r\n domain: z.string().optional(),\r\n path: z.string().optional(),\r\n rolling: z.boolean().optional()\r\n});\r\n\r\nexport const CreateSessionSchema = z.object({\r\n userId: z.string(),\r\n data: z.record(z.any()).optional(),\r\n maxAge: z.number().optional(),\r\n ipAddress: z.string().optional(),\r\n userAgent: z.string().optional()\r\n});\r\n\r\nexport const UpdateSessionSchema = z.object({\r\n data: z.record(z.any())\r\n});",
96
- "import { MetadataRegistry } from '../core/metadata.js';\r\nimport type { SessionManager, SessionData, CSRFProtection } from './session.js';\r\nimport type { SessionConfig, SessionMetadata } from '../types/index.js';\r\nimport { Context } from 'hono';\r\nimport { getCookie, setCookie } from 'hono/cookie';\r\nimport { AuthenticationException, AuthorizationException } from './exceptions.js';\r\n\r\n\r\n/**\r\n * @Session() decorator for session-based authentication\r\n */\r\nexport function Session(config: SessionConfig = {}): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata: SessionMetadata = { config };\r\n\r\n MetadataRegistry.defineSession(target, propertyKey as string, metadata);\r\n };\r\n}\r\n\r\n/**\r\n * @CurrentSession() parameter decorator to inject current session\r\n */\r\nexport function CurrentSession(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (propertyKey) {\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, {\r\n index: parameterIndex,\r\n type: 'current-session',\r\n required: true,\r\n });\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * @SessionData() parameter decorator to inject session data\r\n */\r\nexport function SessionData(key?: string): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (propertyKey) {\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, {\r\n index: parameterIndex,\r\n type: 'session-data',\r\n required: false,\r\n metadata: { key }\r\n });\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * @CSRFToken() parameter decorator to inject CSRF token\r\n */\r\nexport function CSRFToken(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (propertyKey) {\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, {\r\n index: parameterIndex,\r\n type: 'csrf-token',\r\n required: true,\r\n });\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * @RequireCSRF() decorator for CSRF protection\r\n */\r\nexport function RequireCSRF(): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n MetadataRegistry.defineCSRF(target, propertyKey as string, { required: true });\r\n };\r\n}\r\n\r\n/**\r\n * Create session middleware\r\n */\r\nexport function createSessionMiddleware(\r\n sessionManager: SessionManager,\r\n csrfProtection?: CSRFProtection\r\n) {\r\n return async (c: Context, next: () => Promise<void>) => {\r\n const config = sessionManager.getConfig();\r\n \r\n // Get session ID from cookie\r\n const sessionId = getCookie(c, config.name);\r\n \r\n let session: SessionData | null = null;\r\n \r\n if (sessionId) {\r\n session = await sessionManager.getSession(sessionId);\r\n \r\n if (session) {\r\n // Touch session to update last accessed time\r\n await sessionManager.touchSession(sessionId);\r\n }\r\n }\r\n\r\n // Store session info in context\r\n c.set('session', session);\r\n c.set('sessionManager', sessionManager);\r\n c.set('csrfProtection', csrfProtection);\r\n\r\n await next();\r\n };\r\n}\r\n\r\n/**\r\n * Session Guard class\r\n */\r\nexport class SessionGuard {\r\n constructor(\r\n private sessionManager: SessionManager,\r\n private csrfProtection?: CSRFProtection\r\n ) {}\r\n\r\n /**\r\n * Check if session is required and valid\r\n */\r\n checkSession(c: Context, config: SessionConfig): void {\r\n const session = getCurrentSession(c);\r\n \r\n if (config.required && !session) {\r\n throw new AuthenticationException('Session required');\r\n }\r\n\r\n if (session && config.csrf) {\r\n this.checkCSRF(c, session);\r\n }\r\n }\r\n\r\n /**\r\n * Check CSRF token\r\n */\r\n checkCSRF(c: Context, session: SessionData): void {\r\n if (!this.csrfProtection) {\r\n throw new Error('CSRF protection not configured');\r\n }\r\n\r\n const csrfToken = c.req.header('X-CSRF-Token') || c.req.query('_csrf');\r\n \r\n if (!csrfToken) {\r\n throw new AuthorizationException('CSRF token required');\r\n }\r\n\r\n const isValid = this.csrfProtection.validateToken(session.id, csrfToken);\r\n \r\n if (!isValid) {\r\n throw new AuthorizationException('Invalid CSRF token');\r\n }\r\n }\r\n\r\n /**\r\n * Create new session\r\n */\r\n async createSession(\r\n c: Context, \r\n userId: string, \r\n data: Record<string, any> = {}\r\n ): Promise<SessionData> {\r\n const sessionManager = getSessionManager(c);\r\n \r\n if (!sessionManager) {\r\n throw new Error('Session manager not available');\r\n }\r\n\r\n const ipAddress = c.req.header('X-Forwarded-For') || \r\n c.req.header('X-Real-IP') || \r\n 'unknown';\r\n const userAgent = c.req.header('User-Agent') || 'unknown';\r\n\r\n const session = await sessionManager.createSession(userId, data, {\r\n ipAddress,\r\n userAgent\r\n });\r\n\r\n // Set session cookie\r\n const cookieOptions = sessionManager.getCookieOptions();\r\n setCookie(c, sessionManager.getConfig().name, session.id, cookieOptions);\r\n\r\n // Store in context\r\n c.set('session', session);\r\n\r\n return session;\r\n }\r\n\r\n /**\r\n * Update session data\r\n */\r\n async updateSession(\r\n c: Context, \r\n data: Record<string, any>\r\n ): Promise<SessionData | null> {\r\n const session = getCurrentSession(c);\r\n const sessionManager = getSessionManager(c);\r\n \r\n if (!session || !sessionManager) {\r\n return null;\r\n }\r\n\r\n const updatedSession = await sessionManager.updateSession(session.id, data);\r\n \r\n if (updatedSession) {\r\n c.set('session', updatedSession);\r\n }\r\n\r\n return updatedSession;\r\n }\r\n\r\n /**\r\n * Destroy session\r\n */\r\n async destroySession(c: Context): Promise<void> {\r\n const session = getCurrentSession(c);\r\n const sessionManager = getSessionManager(c);\r\n \r\n if (!session || !sessionManager) {\r\n return;\r\n }\r\n\r\n await sessionManager.destroySession(session.id);\r\n\r\n // Clear session cookie\r\n const config = sessionManager.getConfig();\r\n setCookie(c, config.name, '', { \r\n ...sessionManager.getCookieOptions(),\r\n maxAge: 0 \r\n });\r\n\r\n // Remove from context\r\n c.set('session', null);\r\n\r\n // Remove CSRF token\r\n if (this.csrfProtection) {\r\n this.csrfProtection.removeToken(session.id);\r\n }\r\n }\r\n\r\n /**\r\n * Regenerate session ID\r\n */\r\n async regenerateSession(c: Context): Promise<SessionData | null> {\r\n const session = getCurrentSession(c);\r\n const sessionManager = getSessionManager(c);\r\n \r\n if (!session || !sessionManager) {\r\n return null;\r\n }\r\n\r\n const newSession = await sessionManager.regenerateSession(session.id);\r\n \r\n if (newSession) {\r\n // Update session cookie with new ID\r\n const cookieOptions = sessionManager.getCookieOptions();\r\n setCookie(c, sessionManager.getConfig().name, newSession.id, cookieOptions);\r\n\r\n // Store in context\r\n c.set('session', newSession);\r\n\r\n // Generate new CSRF token\r\n if (this.csrfProtection) {\r\n this.csrfProtection.removeToken(session.id);\r\n this.csrfProtection.generateToken(newSession.id);\r\n }\r\n }\r\n\r\n return newSession;\r\n }\r\n\r\n /**\r\n * Generate CSRF token for session\r\n */\r\n generateCSRFToken(c: Context): string | null {\r\n const session = getCurrentSession(c);\r\n \r\n if (!session || !this.csrfProtection) {\r\n return null;\r\n }\r\n\r\n return this.csrfProtection.generateToken(session.id);\r\n }\r\n}\r\n\r\n/**\r\n * Helper functions\r\n */\r\nexport function getCurrentSession(c: Context): SessionData | null {\r\n return c.get('session') || null;\r\n}\r\n\r\nexport function getSessionManager(c: Context): SessionManager | null {\r\n return c.get('sessionManager') || null;\r\n}\r\n\r\nexport function getCSRFProtection(c: Context): CSRFProtection | null {\r\n return c.get('csrfProtection') || null;\r\n}\r\n\r\nexport function getSessionData(c: Context, key?: string): any {\r\n const session = getCurrentSession(c);\r\n \r\n if (!session) {\r\n return null;\r\n }\r\n\r\n if (key) {\r\n return session.data[key];\r\n }\r\n\r\n return session.data;\r\n}\r\n\r\nexport function isSessionAuthenticated(c: Context): boolean {\r\n const session = getCurrentSession(c);\r\n return session !== null;\r\n}\r\n\r\nexport function getSessionUserId(c: Context): string | null {\r\n const session = getCurrentSession(c);\r\n return session?.userId || null;\r\n}\r\n\r\nexport function setSessionData(c: Context, key: string, value: any): void {\r\n const session = getCurrentSession(c);\r\n \r\n if (session) {\r\n session.data[key] = value;\r\n c.set('session', session);\r\n }\r\n}\r\n\r\nexport function removeSessionData(c: Context, key: string): void {\r\n const session = getCurrentSession(c);\r\n \r\n if (session && key in session.data) {\r\n delete session.data[key];\r\n c.set('session', session);\r\n }\r\n}"
268
+ "import { MetadataRegistry } from '../core/metadata.js';\r\nimport type { SessionManager, SessionData, CSRFProtection } from './session.js';\r\nimport type { SessionConfig, SessionMetadata } from '../types/index.js';\r\nimport { Context } from 'hono';\r\nimport { getCookie, setCookie } from 'hono/cookie';\r\nimport { AuthenticationException, AuthorizationException } from './exceptions.js';\r\n\r\n\r\n/**\r\n * @Session() decorator for session-based authentication\r\n */\r\nexport function Session(config: SessionConfig = {}): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata: SessionMetadata = { config };\r\n\r\n MetadataRegistry.defineSession(target, propertyKey as string, metadata);\r\n };\r\n}\r\n\r\n/**\r\n * @CurrentSession() parameter decorator to inject current session\r\n */\r\nexport function CurrentSession(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (propertyKey) {\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, {\r\n index: parameterIndex,\r\n type: 'current-session',\r\n required: true,\r\n });\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * @SessionData() parameter decorator to inject session data\r\n */\r\nexport function SessionData(key?: string): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (propertyKey) {\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, {\r\n index: parameterIndex,\r\n type: 'session-data',\r\n required: false,\r\n metadata: { key }\r\n });\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * @CSRFToken() parameter decorator to inject CSRF token\r\n */\r\nexport function CSRFToken(): ParameterDecorator {\r\n return (target: any, propertyKey: string | symbol | undefined, parameterIndex: number) => {\r\n if (propertyKey) {\r\n MetadataRegistry.defineParameter(target, propertyKey as string, parameterIndex, {\r\n index: parameterIndex,\r\n type: 'csrf-token',\r\n required: true,\r\n });\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * @RequireCSRF() decorator for CSRF protection\r\n */\r\nexport function RequireCSRF(): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n MetadataRegistry.defineCSRF(target, propertyKey as string, { required: true });\r\n };\r\n}\r\n\r\n/**\r\n * Create session middleware\r\n */\r\nexport function createSessionMiddleware(\r\n sessionManager: SessionManager,\r\n csrfProtection?: CSRFProtection\r\n) {\r\n return async (c: Context, next: () => Promise<void>) => {\r\n const config = sessionManager.getConfig();\r\n \r\n // Get session ID from cookie\r\n const sessionId = getCookie(c, config.name);\r\n \r\n let session: SessionData | null = null;\r\n \r\n if (sessionId) {\r\n session = await sessionManager.getSession(sessionId);\r\n \r\n if (session) {\r\n // Touch session to update last accessed time\r\n await sessionManager.touchSession(sessionId);\r\n }\r\n }\r\n\r\n // Store session info in context\r\n c.set('session', session);\r\n c.set('sessionManager', sessionManager);\r\n c.set('csrfProtection', csrfProtection);\r\n\r\n await next();\r\n };\r\n}\r\n\r\n/**\r\n * Session Guard class\r\n */\r\nexport class SessionGuard {\r\n constructor(\r\n private sessionManager: SessionManager,\r\n private csrfProtection?: CSRFProtection\r\n ) {}\r\n\r\n /**\r\n * Check if session is required and valid\r\n */\r\n checkSession(c: Context, config: SessionConfig): void {\r\n const session = getCurrentSession(c);\r\n \r\n if (config.required && !session) {\r\n throw new AuthenticationException('Session required');\r\n }\r\n\r\n if (session && config.csrf) {\r\n this.checkCSRF(c, session);\r\n }\r\n }\r\n\r\n /**\r\n * Check CSRF token\r\n */\r\n checkCSRF(c: Context, session: SessionData): void {\r\n if (!this.csrfProtection) {\r\n throw new Error('CSRF protection not configured');\r\n }\r\n\r\n const csrfToken = c.req.header('X-CSRF-Token') || c.req.query('_csrf');\r\n \r\n if (!csrfToken) {\r\n throw new AuthorizationException('CSRF token required');\r\n }\r\n\r\n const isValid = this.csrfProtection.validateToken(session.id, csrfToken);\r\n \r\n if (!isValid) {\r\n throw new AuthorizationException('Invalid CSRF token');\r\n }\r\n }\r\n\r\n /**\r\n * Create new session\r\n */\r\n async createSession(\r\n c: Context, \r\n userId: string, \r\n data: Record<string, any> = {}\r\n ): Promise<SessionData> {\r\n const sessionManager = getSessionManager(c);\r\n \r\n if (!sessionManager) {\r\n throw new Error('Session manager not available');\r\n }\r\n\r\n const ipAddress = c.req.header('X-Forwarded-For') || \r\n c.req.header('X-Real-IP') || \r\n 'unknown';\r\n const userAgent = c.req.header('User-Agent') || 'unknown';\r\n\r\n const session = await sessionManager.createSession(userId, data, {\r\n ipAddress,\r\n userAgent\r\n });\r\n\r\n // Set session cookie\r\n const cookieOptions = sessionManager.getCookieOptions();\r\n setCookie(c, sessionManager.getConfig().name, session.id, cookieOptions);\r\n\r\n // Store in context\r\n c.set('session', session);\r\n\r\n return session;\r\n }\r\n\r\n /**\r\n * Update session data\r\n */\r\n async updateSession(\r\n c: Context, \r\n data: Record<string, any>\r\n ): Promise<SessionData | null> {\r\n const session = getCurrentSession(c);\r\n const sessionManager = getSessionManager(c);\r\n \r\n if (!session || !sessionManager) {\r\n return null;\r\n }\r\n\r\n const updatedSession = await sessionManager.updateSession(session.id, data);\r\n \r\n if (updatedSession) {\r\n c.set('session', updatedSession);\r\n }\r\n\r\n return updatedSession;\r\n }\r\n\r\n /**\r\n * Destroy session\r\n */\r\n async destroySession(c: Context): Promise<void> {\r\n const session = getCurrentSession(c);\r\n const sessionManager = getSessionManager(c);\r\n \r\n if (!session || !sessionManager) {\r\n return;\r\n }\r\n\r\n await sessionManager.destroySession(session.id);\r\n\r\n // Clear session cookie\r\n const config = sessionManager.getConfig();\r\n setCookie(c, config.name, '', { \r\n ...sessionManager.getCookieOptions(),\r\n maxAge: 0 \r\n });\r\n\r\n // Remove from context\r\n c.set('session', null);\r\n\r\n // Remove CSRF token\r\n if (this.csrfProtection) {\r\n this.csrfProtection.removeToken(session.id);\r\n }\r\n }\r\n\r\n /**\r\n * Regenerate session ID\r\n */\r\n async regenerateSession(c: Context): Promise<SessionData | null> {\r\n const session = getCurrentSession(c);\r\n const sessionManager = getSessionManager(c);\r\n \r\n if (!session || !sessionManager) {\r\n return null;\r\n }\r\n\r\n const newSession = await sessionManager.regenerateSession(session.id);\r\n \r\n if (newSession) {\r\n // Update session cookie with new ID\r\n const cookieOptions = sessionManager.getCookieOptions();\r\n setCookie(c, sessionManager.getConfig().name, newSession.id, cookieOptions);\r\n\r\n // Store in context\r\n c.set('session', newSession);\r\n\r\n // Generate new CSRF token\r\n if (this.csrfProtection) {\r\n this.csrfProtection.removeToken(session.id);\r\n this.csrfProtection.generateToken(newSession.id);\r\n }\r\n }\r\n\r\n return newSession;\r\n }\r\n\r\n /**\r\n * Generate CSRF token for session\r\n */\r\n generateCSRFToken(c: Context): string | null {\r\n const session = getCurrentSession(c);\r\n \r\n if (!session || !this.csrfProtection) {\r\n return null;\r\n }\r\n\r\n return this.csrfProtection.generateToken(session.id);\r\n }\r\n}\r\n\r\n/**\r\n * Helper functions\r\n */\r\nexport function getCurrentSession(c: Context): SessionData | null {\r\n return c.get('session') || null;\r\n}\r\n\r\nexport function getSessionManager(c: Context): SessionManager | null {\r\n return c.get('sessionManager') || null;\r\n}\r\n\r\nexport function getCSRFProtection(c: Context): CSRFProtection | null {\r\n return c.get('csrfProtection') || null;\r\n}\r\n\r\nexport function getSessionData(c: Context, key?: string): any {\r\n const session = getCurrentSession(c);\r\n \r\n if (!session) {\r\n return null;\r\n }\r\n\r\n if (key) {\r\n return session.data[key];\r\n }\r\n\r\n return session.data;\r\n}\r\n\r\nexport function isSessionAuthenticated(c: Context): boolean {\r\n const session = getCurrentSession(c);\r\n return session !== null;\r\n}\r\n\r\nexport function getSessionUserId(c: Context): string | null {\r\n const session = getCurrentSession(c);\r\n return session?.userId || null;\r\n}\r\n\r\nexport function setSessionData(c: Context, key: string, value: any): void {\r\n const session = getCurrentSession(c);\r\n \r\n if (session) {\r\n session.data[key] = value;\r\n c.set('session', session);\r\n }\r\n}\r\n\r\nexport function removeSessionData(c: Context, key: string): void {\r\n const session = getCurrentSession(c);\r\n \r\n if (session && key in session.data) {\r\n delete session.data[key];\r\n c.set('session', session);\r\n }\r\n}",
269
+ "import { z } from 'zod';\r\n\r\n// Base interfaces for repository pattern\r\nexport interface PaginationOptions {\r\n page?: number;\r\n limit?: number;\r\n offset?: number;\r\n}\r\n\r\nexport interface SortOptions {\r\n field: string;\r\n direction: 'asc' | 'desc';\r\n}\r\n\r\nexport interface FilterOptions {\r\n [key: string]: any;\r\n}\r\n\r\nexport interface FindOptions {\r\n where?: FilterOptions;\r\n orderBy?: SortOptions | SortOptions[];\r\n pagination?: PaginationOptions;\r\n include?: string[];\r\n select?: string[];\r\n}\r\n\r\nexport interface PaginatedResult<T> {\r\n data: T[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNext: boolean;\r\n hasPrev: boolean;\r\n}\r\n\r\n/**\r\n * Base repository interface with common CRUD operations\r\n */\r\nexport interface IBaseRepository<T, ID = string | number> {\r\n // Basic CRUD\r\n create(data: Partial<T>): Promise<T>;\r\n findById(id: ID): Promise<T | null>;\r\n findOne(options: FindOptions): Promise<T | null>;\r\n findMany(options?: FindOptions): Promise<T[]>;\r\n update(id: ID, data: Partial<T>): Promise<T>;\r\n delete(id: ID): Promise<boolean>;\r\n \r\n // Bulk operations\r\n createMany(data: Partial<T>[]): Promise<T[]>;\r\n updateMany(where: FilterOptions, data: Partial<T>): Promise<number>;\r\n deleteMany(where: FilterOptions): Promise<number>;\r\n \r\n // Pagination and filtering\r\n findPaginated(options: FindOptions & { pagination: Required<PaginationOptions> }): Promise<PaginatedResult<T>>;\r\n count(where?: FilterOptions): Promise<number>;\r\n exists(where: FilterOptions): Promise<boolean>;\r\n \r\n // Transaction support\r\n withTransaction<R>(callback: (repo: this) => Promise<R>): Promise<R>;\r\n}\r\n\r\n/**\r\n * Abstract base repository implementation\r\n */\r\nexport abstract class BaseRepository<T, ID = string | number> implements IBaseRepository<T, ID> {\r\n protected schema?: z.ZodSchema<T>;\r\n \r\n constructor(schema?: z.ZodSchema<T>) {\r\n this.schema = schema;\r\n }\r\n \r\n // Validation helper\r\n protected validate(data: any): T {\r\n if (this.schema) {\r\n return this.schema.parse(data);\r\n }\r\n return data as T;\r\n }\r\n \r\n protected validatePartial(data: any): Partial<T> {\r\n if (this.schema) {\r\n try {\r\n // Try to validate with the full schema first\r\n return this.schema.parse(data);\r\n } catch {\r\n // If validation fails, return as partial without validation\r\n // In a real implementation, you might want to create a partial schema\r\n return data as Partial<T>;\r\n }\r\n }\r\n return data as Partial<T>;\r\n }\r\n \r\n // Abstract methods to be implemented by concrete repositories\r\n abstract create(data: Partial<T>): Promise<T>;\r\n abstract findById(id: ID): Promise<T | null>;\r\n abstract findOne(options: FindOptions): Promise<T | null>;\r\n abstract findMany(options?: FindOptions): Promise<T[]>;\r\n abstract update(id: ID, data: Partial<T>): Promise<T>;\r\n abstract delete(id: ID): Promise<boolean>;\r\n \r\n // Default implementations for bulk operations\r\n async createMany(data: Partial<T>[]): Promise<T[]> {\r\n const results: T[] = [];\r\n for (const item of data) {\r\n results.push(await this.create(item));\r\n }\r\n return results;\r\n }\r\n \r\n async updateMany(where: FilterOptions, data: Partial<T>): Promise<number> {\r\n const items = await this.findMany({ where });\r\n let updated = 0;\r\n \r\n for (const item of items) {\r\n const id = (item as any).id;\r\n if (id) {\r\n await this.update(id, data);\r\n updated++;\r\n }\r\n }\r\n \r\n return updated;\r\n }\r\n \r\n async deleteMany(where: FilterOptions): Promise<number> {\r\n const items = await this.findMany({ where });\r\n let deleted = 0;\r\n \r\n for (const item of items) {\r\n const id = (item as any).id;\r\n if (id && await this.delete(id)) {\r\n deleted++;\r\n }\r\n }\r\n \r\n return deleted;\r\n }\r\n \r\n // Default pagination implementation\r\n async findPaginated(options: FindOptions & { pagination: Required<PaginationOptions> }): Promise<PaginatedResult<T>> {\r\n const { pagination, ...findOptions } = options;\r\n const { page, limit } = pagination;\r\n \r\n // Calculate offset\r\n const offset = (page - 1) * limit;\r\n \r\n // Get total count\r\n const total = await this.count(findOptions.where);\r\n \r\n // Get paginated data\r\n const data = await this.findMany({\r\n ...findOptions,\r\n pagination: { ...pagination, offset }\r\n });\r\n \r\n const totalPages = Math.ceil(total / limit);\r\n \r\n return {\r\n data,\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNext: page < totalPages,\r\n hasPrev: page > 1\r\n };\r\n }\r\n \r\n // Default count implementation\r\n async count(where?: FilterOptions): Promise<number> {\r\n const items = await this.findMany({ where });\r\n return items.length;\r\n }\r\n \r\n // Default exists implementation\r\n async exists(where: FilterOptions): Promise<boolean> {\r\n const item = await this.findOne({ where });\r\n return item !== null;\r\n }\r\n \r\n // Default transaction implementation (to be overridden by ORM-specific implementations)\r\n async withTransaction<R>(callback: (repo: this) => Promise<R>): Promise<R> {\r\n // Default implementation without actual transaction support\r\n return callback(this);\r\n }\r\n \r\n // Helper methods for building queries\r\n protected buildWhereClause(where?: FilterOptions): any {\r\n if (!where) return {};\r\n \r\n // Basic implementation - can be overridden by specific ORM implementations\r\n return where;\r\n }\r\n \r\n protected buildOrderByClause(orderBy?: SortOptions | SortOptions[]): any {\r\n if (!orderBy) return {};\r\n \r\n if (Array.isArray(orderBy)) {\r\n return orderBy.reduce((acc, sort) => {\r\n acc[sort.field] = sort.direction;\r\n return acc;\r\n }, {} as any);\r\n }\r\n \r\n return { [orderBy.field]: orderBy.direction };\r\n }\r\n \r\n protected buildPaginationClause(pagination?: PaginationOptions): any {\r\n if (!pagination) return {};\r\n \r\n const result: any = {};\r\n \r\n if (pagination.limit) {\r\n result.take = pagination.limit;\r\n }\r\n \r\n if (pagination.offset) {\r\n result.skip = pagination.offset;\r\n }\r\n \r\n return result;\r\n }\r\n}",
270
+ "import { z } from 'zod';\r\nimport { BaseRepository, FindOptions, FilterOptions, SortOptions, PaginationOptions, PaginatedResult } from '../base-repository';\r\nimport { PrismaRepositoryOptions, PrismaDelegate, PrismaClientLike } from './types';\r\n\r\n/**\r\n * Prisma-specific repository implementation\r\n */\r\nexport class PrismaRepository<T, ID = string | number> extends BaseRepository<T, ID> {\r\n protected client: PrismaClientLike;\r\n protected delegate: PrismaDelegate;\r\n protected modelName: string;\r\n \r\n constructor(options: PrismaRepositoryOptions) {\r\n super(options.zodSchema);\r\n this.client = options.client;\r\n this.delegate = options.delegate;\r\n this.modelName = options.model;\r\n }\r\n \r\n async create(data: Partial<T>): Promise<T> {\r\n const validatedData = this.validatePartial(data);\r\n const result = await this.delegate.create({\r\n data: validatedData\r\n });\r\n return this.validate(result);\r\n }\r\n \r\n async findById(id: ID): Promise<T | null> {\r\n const result = await this.delegate.findUnique({\r\n where: { id }\r\n });\r\n return result ? this.validate(result) : null;\r\n }\r\n \r\n async findOne(options: FindOptions): Promise<T | null> {\r\n const prismaOptions = this.buildPrismaFindOptions(options);\r\n const result = await this.delegate.findFirst(prismaOptions);\r\n return result ? this.validate(result) : null;\r\n }\r\n \r\n async findMany(options?: FindOptions): Promise<T[]> {\r\n const prismaOptions = this.buildPrismaFindOptions(options || {});\r\n const results = await this.delegate.findMany(prismaOptions);\r\n return results.map(result => this.validate(result));\r\n }\r\n \r\n async update(id: ID, data: Partial<T>): Promise<T> {\r\n const validatedData = this.validatePartial(data);\r\n const result = await this.delegate.update({\r\n where: { id },\r\n data: validatedData\r\n });\r\n return this.validate(result);\r\n }\r\n \r\n async delete(id: ID): Promise<boolean> {\r\n try {\r\n await this.delegate.delete({\r\n where: { id }\r\n });\r\n return true;\r\n } catch (error) {\r\n // Handle not found error\r\n return false;\r\n }\r\n }\r\n \r\n // Optimized bulk operations using Prisma's native methods\r\n async createMany(data: Partial<T>[]): Promise<T[]> {\r\n const validatedData = data.map(item => this.validatePartial(item));\r\n \r\n // Use Prisma's createMany for better performance\r\n await this.delegate.create({\r\n data: validatedData,\r\n skipDuplicates: true\r\n });\r\n \r\n // Note: Prisma's createMany doesn't return created records\r\n // For now, we'll fall back to individual creates if we need the results\r\n const results: T[] = [];\r\n for (const item of validatedData) {\r\n const created = await this.create(item);\r\n results.push(created);\r\n }\r\n \r\n return results;\r\n }\r\n \r\n async updateMany(where: FilterOptions, data: Partial<T>): Promise<number> {\r\n const validatedData = this.validatePartial(data);\r\n const result = await this.delegate.updateMany({\r\n where: this.buildWhereClause(where),\r\n data: validatedData\r\n });\r\n return result.count;\r\n }\r\n \r\n async deleteMany(where: FilterOptions): Promise<number> {\r\n const result = await this.delegate.deleteMany({\r\n where: this.buildWhereClause(where)\r\n });\r\n return result.count;\r\n }\r\n \r\n async count(where?: FilterOptions): Promise<number> {\r\n return await this.delegate.count({\r\n where: where ? this.buildWhereClause(where) : undefined\r\n });\r\n }\r\n \r\n async exists(where: FilterOptions): Promise<boolean> {\r\n const count = await this.delegate.count({\r\n where: this.buildWhereClause(where),\r\n take: 1\r\n });\r\n return count > 0;\r\n }\r\n \r\n // Optimized pagination using Prisma's native pagination\r\n async findPaginated(options: FindOptions & { pagination: Required<PaginationOptions> }): Promise<PaginatedResult<T>> {\r\n const { pagination, ...findOptions } = options;\r\n const { page, limit } = pagination;\r\n \r\n // Calculate skip\r\n const skip = (page - 1) * limit;\r\n \r\n // Build Prisma options\r\n const prismaOptions = this.buildPrismaFindOptions(findOptions);\r\n \r\n // Get total count and data in parallel\r\n const [total, data] = await Promise.all([\r\n this.delegate.count({ where: prismaOptions.where }),\r\n this.delegate.findMany({\r\n ...prismaOptions,\r\n skip,\r\n take: limit\r\n })\r\n ]);\r\n \r\n const validatedData = data.map(item => this.validate(item));\r\n const totalPages = Math.ceil(total / limit);\r\n \r\n return {\r\n data: validatedData,\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNext: page < totalPages,\r\n hasPrev: page > 1\r\n };\r\n }\r\n \r\n // Transaction support using Prisma's transaction API\r\n async withTransaction<R>(callback: (repo: this) => Promise<R>): Promise<R> {\r\n return await this.client.$transaction(async (prismaClient) => {\r\n // Create a new repository instance with the transaction client\r\n const transactionalRepo = new (this.constructor as any)({\r\n client: prismaClient,\r\n delegate: (prismaClient as any)[this.modelName.toLowerCase()],\r\n model: this.modelName,\r\n zodSchema: this.schema\r\n });\r\n \r\n return await callback(transactionalRepo as this);\r\n });\r\n }\r\n \r\n // Build Prisma-specific find options\r\n private buildPrismaFindOptions(options: FindOptions): any {\r\n const prismaOptions: any = {};\r\n \r\n if (options.where) {\r\n prismaOptions.where = this.buildWhereClause(options.where);\r\n }\r\n \r\n if (options.orderBy) {\r\n prismaOptions.orderBy = this.buildOrderByClause(options.orderBy);\r\n }\r\n \r\n if (options.pagination) {\r\n const paginationClause = this.buildPaginationClause(options.pagination);\r\n Object.assign(prismaOptions, paginationClause);\r\n }\r\n \r\n if (options.include) {\r\n prismaOptions.include = options.include.reduce((acc, field) => {\r\n acc[field] = true;\r\n return acc;\r\n }, {} as any);\r\n }\r\n \r\n if (options.select) {\r\n prismaOptions.select = options.select.reduce((acc, field) => {\r\n acc[field] = true;\r\n return acc;\r\n }, {} as any);\r\n }\r\n \r\n return prismaOptions;\r\n }\r\n \r\n // Override base class methods for Prisma-specific implementations\r\n protected buildWhereClause(where: FilterOptions): any {\r\n const prismaWhere: any = {};\r\n \r\n for (const [key, value] of Object.entries(where)) {\r\n if (value === null || value === undefined) {\r\n prismaWhere[key] = null;\r\n } else if (typeof value === 'object' && !Array.isArray(value)) {\r\n // Handle complex filters like { gt: 10 }, { contains: 'text' }\r\n prismaWhere[key] = value;\r\n } else if (Array.isArray(value)) {\r\n // Handle array filters (in operator)\r\n prismaWhere[key] = { in: value };\r\n } else {\r\n prismaWhere[key] = value;\r\n }\r\n }\r\n \r\n return prismaWhere;\r\n }\r\n \r\n protected buildOrderByClause(orderBy: SortOptions | SortOptions[]): any {\r\n if (Array.isArray(orderBy)) {\r\n return orderBy.map(sort => ({\r\n [sort.field]: sort.direction\r\n }));\r\n }\r\n \r\n return {\r\n [orderBy.field]: orderBy.direction\r\n };\r\n }\r\n \r\n protected buildPaginationClause(pagination: PaginationOptions): any {\r\n const result: any = {};\r\n \r\n if (pagination.limit) {\r\n result.take = pagination.limit;\r\n }\r\n \r\n if (pagination.offset) {\r\n result.skip = pagination.offset;\r\n }\r\n \r\n return result;\r\n }\r\n \r\n // Advanced Prisma-specific methods\r\n async aggregate(options: {\r\n where?: FilterOptions;\r\n _count?: boolean | { [key: string]: boolean };\r\n _avg?: { [key: string]: boolean };\r\n _sum?: { [key: string]: boolean };\r\n _min?: { [key: string]: boolean };\r\n _max?: { [key: string]: boolean };\r\n }): Promise<any> {\r\n const prismaOptions: any = {};\r\n \r\n if (options.where) {\r\n prismaOptions.where = this.buildWhereClause(options.where);\r\n }\r\n \r\n if (options._count) {\r\n prismaOptions._count = options._count;\r\n }\r\n \r\n if (options._avg) {\r\n prismaOptions._avg = options._avg;\r\n }\r\n \r\n if (options._sum) {\r\n prismaOptions._sum = options._sum;\r\n }\r\n \r\n if (options._min) {\r\n prismaOptions._min = options._min;\r\n }\r\n \r\n if (options._max) {\r\n prismaOptions._max = options._max;\r\n }\r\n \r\n return await this.delegate.aggregate(prismaOptions);\r\n }\r\n \r\n async groupBy(options: {\r\n by: string[];\r\n where?: FilterOptions;\r\n having?: FilterOptions;\r\n orderBy?: SortOptions | SortOptions[];\r\n _count?: boolean | { [key: string]: boolean };\r\n _avg?: { [key: string]: boolean };\r\n _sum?: { [key: string]: boolean };\r\n _min?: { [key: string]: boolean };\r\n _max?: { [key: string]: boolean };\r\n }): Promise<any[]> {\r\n const prismaOptions: any = {\r\n by: options.by\r\n };\r\n \r\n if (options.where) {\r\n prismaOptions.where = this.buildWhereClause(options.where);\r\n }\r\n \r\n if (options.having) {\r\n prismaOptions.having = this.buildWhereClause(options.having);\r\n }\r\n \r\n if (options.orderBy) {\r\n prismaOptions.orderBy = this.buildOrderByClause(options.orderBy);\r\n }\r\n \r\n if (options._count) {\r\n prismaOptions._count = options._count;\r\n }\r\n \r\n if (options._avg) {\r\n prismaOptions._avg = options._avg;\r\n }\r\n \r\n if (options._sum) {\r\n prismaOptions._sum = options._sum;\r\n }\r\n \r\n if (options._min) {\r\n prismaOptions._min = options._min;\r\n }\r\n \r\n if (options._max) {\r\n prismaOptions._max = options._max;\r\n }\r\n \r\n return await this.delegate.groupBy(prismaOptions);\r\n }\r\n}",
271
+ "import { z } from 'zod';\r\nimport { BaseRepository, FindOptions, FilterOptions, SortOptions, PaginationOptions, PaginatedResult } from '../base-repository';\r\nimport { TypeORMRepositoryOptions, DataSourceLike, RepositoryLike, EntityManagerLike } from './types';\r\n\r\n/**\r\n * TypeORM-specific repository implementation\r\n */\r\nexport class TypeORMRepository<T, ID = string | number> extends BaseRepository<T, ID> {\r\n protected dataSource: DataSourceLike;\r\n protected repository: RepositoryLike<T>;\r\n protected entity: any;\r\n \r\n constructor(options: TypeORMRepositoryOptions<T>) {\r\n super(options.zodSchema);\r\n this.dataSource = options.dataSource;\r\n this.repository = options.repository;\r\n this.entity = options.entity;\r\n }\r\n \r\n async create(data: Partial<T>): Promise<T> {\r\n const validatedData = this.validatePartial(data);\r\n const entity = this.repository.create(validatedData);\r\n const saved = await this.repository.save(entity);\r\n return this.validate(saved);\r\n }\r\n \r\n async findById(id: ID): Promise<T | null> {\r\n const result = await this.repository.findOneBy({ id } as any);\r\n return result ? this.validate(result) : null;\r\n }\r\n \r\n async findOne(options: FindOptions): Promise<T | null> {\r\n const typeormOptions = this.buildTypeORMFindOptions(options);\r\n const result = await this.repository.findOne(typeormOptions);\r\n return result ? this.validate(result) : null;\r\n }\r\n \r\n async findMany(options?: FindOptions): Promise<T[]> {\r\n const typeormOptions = this.buildTypeORMFindOptions(options || {});\r\n const results = await this.repository.find(typeormOptions);\r\n return results.map(result => this.validate(result));\r\n }\r\n \r\n async update(id: ID, data: Partial<T>): Promise<T> {\r\n const validatedData = this.validatePartial(data);\r\n \r\n // First find the entity\r\n const entity = await this.repository.findOneBy({ id } as any);\r\n if (!entity) {\r\n throw new Error(`Entity with id ${id} not found`);\r\n }\r\n \r\n // Merge the changes\r\n const merged = this.repository.merge(entity, validatedData);\r\n const saved = await this.repository.save(merged);\r\n return this.validate(saved);\r\n }\r\n \r\n async delete(id: ID): Promise<boolean> {\r\n const result = await this.repository.delete({ id } as any);\r\n return (result.affected || 0) > 0;\r\n }\r\n \r\n // Optimized bulk operations using TypeORM's native methods\r\n async createMany(data: Partial<T>[]): Promise<T[]> {\r\n const validatedData = data.map(item => this.validatePartial(item));\r\n const entities = validatedData.map(item => this.repository.create(item));\r\n const saved = await this.repository.save(entities);\r\n return saved.map(item => this.validate(item));\r\n }\r\n \r\n async updateMany(where: FilterOptions, data: Partial<T>): Promise<number> {\r\n const validatedData = this.validatePartial(data);\r\n const whereClause = this.buildWhereClause(where);\r\n const result = await this.repository.update(whereClause, validatedData);\r\n return result.affected || 0;\r\n }\r\n \r\n async deleteMany(where: FilterOptions): Promise<number> {\r\n const whereClause = this.buildWhereClause(where);\r\n const result = await this.repository.delete(whereClause);\r\n return result.affected || 0;\r\n }\r\n \r\n async count(where?: FilterOptions): Promise<number> {\r\n const typeormOptions = where ? { where: this.buildWhereClause(where) } : {};\r\n return await this.repository.count(typeormOptions);\r\n }\r\n \r\n async exists(where: FilterOptions): Promise<boolean> {\r\n const count = await this.repository.count({\r\n where: this.buildWhereClause(where),\r\n take: 1\r\n });\r\n return count > 0;\r\n }\r\n \r\n // Optimized pagination using TypeORM's native pagination\r\n async findPaginated(options: FindOptions & { pagination: Required<PaginationOptions> }): Promise<PaginatedResult<T>> {\r\n const { pagination, ...findOptions } = options;\r\n const { page, limit } = pagination;\r\n \r\n // Calculate skip\r\n const skip = (page - 1) * limit;\r\n \r\n // Build TypeORM options\r\n const typeormOptions = this.buildTypeORMFindOptions(findOptions);\r\n typeormOptions.skip = skip;\r\n typeormOptions.take = limit;\r\n \r\n // Get data and count in one query\r\n const [data, total] = await this.repository.createQueryBuilder('entity')\r\n .where(typeormOptions.where || {})\r\n .orderBy(typeormOptions.order || {})\r\n .skip(skip)\r\n .take(limit)\r\n .getManyAndCount();\r\n \r\n const validatedData = data.map(item => this.validate(item));\r\n const totalPages = Math.ceil(total / limit);\r\n \r\n return {\r\n data: validatedData,\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNext: page < totalPages,\r\n hasPrev: page > 1\r\n };\r\n }\r\n \r\n // Transaction support using TypeORM's transaction API\r\n async withTransaction<R>(callback: (repo: this) => Promise<R>): Promise<R> {\r\n return await this.dataSource.transaction(async (manager: EntityManagerLike) => {\r\n // Create a new repository instance with the transaction manager\r\n const transactionalRepo = manager.getRepository ? manager.getRepository(this.entity) : this.repository;\r\n const transactionalInstance = new (this.constructor as any)({\r\n dataSource: this.dataSource,\r\n repository: transactionalRepo,\r\n entity: this.entity,\r\n zodSchema: this.schema\r\n });\r\n \r\n return await callback(transactionalInstance as this);\r\n });\r\n }\r\n \r\n // Build TypeORM-specific find options\r\n private buildTypeORMFindOptions(options: FindOptions): any {\r\n const typeormOptions: any = {};\r\n \r\n if (options.where) {\r\n typeormOptions.where = this.buildWhereClause(options.where);\r\n }\r\n \r\n if (options.orderBy) {\r\n typeormOptions.order = this.buildOrderByClause(options.orderBy);\r\n }\r\n \r\n if (options.pagination) {\r\n if (options.pagination.limit) {\r\n typeormOptions.take = options.pagination.limit;\r\n }\r\n if (options.pagination.offset) {\r\n typeormOptions.skip = options.pagination.offset;\r\n }\r\n }\r\n \r\n if (options.include) {\r\n typeormOptions.relations = options.include;\r\n }\r\n \r\n if (options.select) {\r\n typeormOptions.select = options.select.reduce((acc, field) => {\r\n acc[field] = true;\r\n return acc;\r\n }, {} as any);\r\n }\r\n \r\n return typeormOptions;\r\n }\r\n \r\n // Override base class methods for TypeORM-specific implementations\r\n protected buildWhereClause(where: FilterOptions): any {\r\n const typeormWhere: any = {};\r\n \r\n for (const [key, value] of Object.entries(where)) {\r\n if (value === null || value === undefined) {\r\n typeormWhere[key] = null;\r\n } else if (typeof value === 'object' && !Array.isArray(value)) {\r\n // Handle complex filters\r\n if ('gt' in value) {\r\n typeormWhere[key] = { $gt: value.gt };\r\n } else if ('gte' in value) {\r\n typeormWhere[key] = { $gte: value.gte };\r\n } else if ('lt' in value) {\r\n typeormWhere[key] = { $lt: value.lt };\r\n } else if ('lte' in value) {\r\n typeormWhere[key] = { $lte: value.lte };\r\n } else if ('like' in value) {\r\n typeormWhere[key] = { $like: value.like };\r\n } else if ('in' in value) {\r\n typeormWhere[key] = { $in: value.in };\r\n } else {\r\n typeormWhere[key] = value;\r\n }\r\n } else if (Array.isArray(value)) {\r\n // Handle array filters (in operator)\r\n typeormWhere[key] = { $in: value };\r\n } else {\r\n typeormWhere[key] = value;\r\n }\r\n }\r\n \r\n return typeormWhere;\r\n }\r\n \r\n protected buildOrderByClause(orderBy: SortOptions | SortOptions[]): any {\r\n if (Array.isArray(orderBy)) {\r\n return orderBy.reduce((acc, sort) => {\r\n acc[sort.field] = sort.direction.toUpperCase();\r\n return acc;\r\n }, {} as any);\r\n }\r\n \r\n return {\r\n [orderBy.field]: orderBy.direction.toUpperCase()\r\n };\r\n }\r\n \r\n // Advanced TypeORM-specific methods\r\n \r\n /**\r\n * Create a query builder for complex queries\r\n */\r\n createQueryBuilder(alias?: string) {\r\n return this.repository.createQueryBuilder(alias);\r\n }\r\n \r\n /**\r\n * Execute raw SQL query\r\n */\r\n async query(sql: string, parameters?: any[]): Promise<any> {\r\n return await this.dataSource.manager.query(sql, parameters);\r\n }\r\n \r\n /**\r\n * Soft delete (if entity supports it)\r\n */\r\n async softDelete(id: ID): Promise<boolean> {\r\n try {\r\n // Check if entity has deletedAt column\r\n const metadata = this.dataSource.getMetadata(this.entity);\r\n const hasDeletedAt = metadata.columns.some((col: any) => col.propertyName === 'deletedAt');\r\n \r\n if (hasDeletedAt) {\r\n const result = await this.repository.update({ id } as any, { deletedAt: new Date() } as any);\r\n return (result.affected || 0) > 0;\r\n } else {\r\n // Fall back to hard delete\r\n return await this.delete(id);\r\n }\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n \r\n /**\r\n * Restore soft deleted entity\r\n */\r\n async restore(id: ID): Promise<boolean> {\r\n try {\r\n const result = await this.repository.update({ id } as any, { deletedAt: null } as any);\r\n return (result.affected || 0) > 0;\r\n } catch (error) {\r\n return false;\r\n }\r\n }\r\n \r\n /**\r\n * Find with relations\r\n */\r\n async findWithRelations(id: ID, relations: string[]): Promise<T | null> {\r\n const result = await this.repository.findOne({\r\n where: { id } as any,\r\n relations\r\n });\r\n return result ? this.validate(result) : null;\r\n }\r\n \r\n /**\r\n * Bulk insert with better performance\r\n */\r\n async bulkInsert(data: Partial<T>[]): Promise<void> {\r\n const validatedData = data.map(item => this.validatePartial(item));\r\n \r\n // Use query builder for bulk insert\r\n const queryBuilder = this.repository.createQueryBuilder();\r\n const insertBuilder = queryBuilder.insert();\r\n \r\n if (insertBuilder) {\r\n await insertBuilder\r\n .into(this.entity)\r\n .values(validatedData)\r\n .execute();\r\n } else {\r\n // Fallback to regular save if insert builder is not available\r\n await this.createMany(data);\r\n }\r\n }\r\n \r\n /**\r\n * Upsert operation (insert or update)\r\n */\r\n async upsert(data: Partial<T>, conflictColumns: string[]): Promise<T> {\r\n const validatedData = this.validatePartial(data);\r\n \r\n try {\r\n // Try to insert first\r\n const entity = this.repository.create(validatedData);\r\n const saved = await this.repository.save(entity);\r\n return this.validate(saved);\r\n } catch (error) {\r\n // If conflict, try to update\r\n const whereClause = conflictColumns.reduce((acc, col) => {\r\n if (col in validatedData) {\r\n acc[col] = (validatedData as any)[col];\r\n }\r\n return acc;\r\n }, {} as any);\r\n \r\n const existing = await this.repository.findOneBy(whereClause);\r\n if (existing) {\r\n const merged = this.repository.merge(existing, validatedData);\r\n const saved = await this.repository.save(merged);\r\n return this.validate(saved);\r\n }\r\n \r\n throw error;\r\n }\r\n }\r\n}",
272
+ "import { z } from 'zod';\r\nimport { BaseRepository, FindOptions, FilterOptions, SortOptions, PaginationOptions, PaginatedResult } from '../base-repository';\r\nimport { DrizzleRepositoryOptions, DrizzleDatabase, DrizzleTable, DrizzleOperators } from './types';\r\n\r\n/**\r\n * Drizzle-specific repository implementation\r\n */\r\nexport class DrizzleRepository<T, ID = string | number> extends BaseRepository<T, ID> {\r\n protected database: DrizzleDatabase;\r\n protected table: DrizzleTable;\r\n protected operators: DrizzleOperators;\r\n \r\n constructor(options: DrizzleRepositoryOptions<T>) {\r\n super(options.zodSchema);\r\n this.database = options.database;\r\n this.table = options.table;\r\n \r\n // Initialize operators (these would be imported from drizzle-orm)\r\n this.operators = this.initializeOperators();\r\n }\r\n \r\n private initializeOperators(): DrizzleOperators {\r\n // In a real implementation, these would be imported from drizzle-orm\r\n // For now, we'll create placeholder implementations\r\n return {\r\n eq: (column: any, value: any) => ({ type: 'eq', column, value }),\r\n ne: (column: any, value: any) => ({ type: 'ne', column, value }),\r\n gt: (column: any, value: any) => ({ type: 'gt', column, value }),\r\n gte: (column: any, value: any) => ({ type: 'gte', column, value }),\r\n lt: (column: any, value: any) => ({ type: 'lt', column, value }),\r\n lte: (column: any, value: any) => ({ type: 'lte', column, value }),\r\n like: (column: any, value: string) => ({ type: 'like', column, value }),\r\n ilike: (column: any, value: string) => ({ type: 'ilike', column, value }),\r\n inArray: (column: any, values: any[]) => ({ type: 'in', column, values }),\r\n notInArray: (column: any, values: any[]) => ({ type: 'notIn', column, values }),\r\n isNull: (column: any) => ({ type: 'isNull', column }),\r\n isNotNull: (column: any) => ({ type: 'isNotNull', column }),\r\n between: (column: any, min: any, max: any) => ({ type: 'between', column, min, max }),\r\n and: (...conditions: any[]) => ({ type: 'and', conditions }),\r\n or: (...conditions: any[]) => ({ type: 'or', conditions }),\r\n not: (condition: any) => ({ type: 'not', condition })\r\n };\r\n }\r\n \r\n async create(data: Partial<T>): Promise<T> {\r\n const validatedData = this.validatePartial(data);\r\n \r\n const result = await this.database\r\n .insert(this.table)\r\n .values(validatedData)\r\n .returning()\r\n .execute();\r\n \r\n return this.validate(result[0]);\r\n }\r\n \r\n async findById(id: ID): Promise<T | null> {\r\n const idColumn = this.getPrimaryKeyColumn();\r\n \r\n const result = await this.database\r\n .select()\r\n .from(this.table)\r\n .where(this.operators.eq(idColumn, id))\r\n .execute();\r\n \r\n return result.length > 0 ? this.validate(result[0]) : null;\r\n }\r\n \r\n async findOne(options: FindOptions): Promise<T | null> {\r\n let query = this.database.select().from(this.table);\r\n \r\n if (options.where) {\r\n query = query.where(this.buildWhereClause(options.where));\r\n }\r\n \r\n if (options.orderBy) {\r\n query = query.orderBy(...this.buildOrderByClause(options.orderBy));\r\n }\r\n \r\n query = query.limit(1);\r\n \r\n const result = await query.execute();\r\n return result.length > 0 ? this.validate(result[0]) : null;\r\n }\r\n \r\n async findMany(options?: FindOptions): Promise<T[]> {\r\n let query = this.database.select().from(this.table);\r\n \r\n if (options?.where) {\r\n query = query.where(this.buildWhereClause(options.where));\r\n }\r\n \r\n if (options?.orderBy) {\r\n query = query.orderBy(...this.buildOrderByClause(options.orderBy));\r\n }\r\n \r\n if (options?.pagination) {\r\n if (options.pagination.limit) {\r\n query = query.limit(options.pagination.limit);\r\n }\r\n if (options.pagination.offset) {\r\n query = query.offset(options.pagination.offset);\r\n }\r\n }\r\n \r\n const results = await query.execute();\r\n return results.map((result: any) => this.validate(result));\r\n }\r\n \r\n async update(id: ID, data: Partial<T>): Promise<T> {\r\n const validatedData = this.validatePartial(data);\r\n const idColumn = this.getPrimaryKeyColumn();\r\n \r\n const result = await this.database\r\n .update(this.table)\r\n .set(validatedData)\r\n .where(this.operators.eq(idColumn, id))\r\n .returning()\r\n .execute();\r\n \r\n if (result.length === 0) {\r\n throw new Error(`Entity with id ${id} not found`);\r\n }\r\n \r\n return this.validate(result[0]);\r\n }\r\n \r\n async delete(id: ID): Promise<boolean> {\r\n const idColumn = this.getPrimaryKeyColumn();\r\n \r\n const result = await this.database\r\n .delete(this.table)\r\n .where(this.operators.eq(idColumn, id))\r\n .execute();\r\n \r\n return result.rowsAffected > 0;\r\n }\r\n \r\n // Optimized bulk operations using Drizzle's native methods\r\n async createMany(data: Partial<T>[]): Promise<T[]> {\r\n const validatedData = data.map((item: Partial<T>) => this.validatePartial(item));\r\n \r\n const result = await this.database\r\n .insert(this.table)\r\n .values(validatedData)\r\n .returning()\r\n .execute();\r\n \r\n return result.map((item: any) => this.validate(item));\r\n }\r\n \r\n async updateMany(where: FilterOptions, data: Partial<T>): Promise<number> {\r\n const validatedData = this.validatePartial(data);\r\n const whereClause = this.buildWhereClause(where);\r\n \r\n const result = await this.database\r\n .update(this.table)\r\n .set(validatedData)\r\n .where(whereClause)\r\n .execute();\r\n \r\n return result.rowsAffected;\r\n }\r\n \r\n async deleteMany(where: FilterOptions): Promise<number> {\r\n const whereClause = this.buildWhereClause(where);\r\n \r\n const result = await this.database\r\n .delete(this.table)\r\n .where(whereClause)\r\n .execute();\r\n \r\n return result.rowsAffected;\r\n }\r\n \r\n async count(where?: FilterOptions): Promise<number> {\r\n let query = this.database.select({ count: 'COUNT(*)' }).from(this.table);\r\n \r\n if (where) {\r\n query = query.where(this.buildWhereClause(where));\r\n }\r\n \r\n const result = await query.execute();\r\n return result[0]?.count || 0;\r\n }\r\n \r\n async exists(where: FilterOptions): Promise<boolean> {\r\n const count = await this.count(where);\r\n return count > 0;\r\n }\r\n \r\n // Optimized pagination using Drizzle's native pagination\r\n async findPaginated(options: FindOptions & { pagination: Required<PaginationOptions> }): Promise<PaginatedResult<T>> {\r\n const { pagination, ...findOptions } = options;\r\n const { page, limit } = pagination;\r\n \r\n // Calculate offset\r\n const offset = (page - 1) * limit;\r\n \r\n // Build base query\r\n let dataQuery = this.database.select().from(this.table);\r\n let countQuery = this.database.select({ count: 'COUNT(*)' }).from(this.table);\r\n \r\n if (findOptions.where) {\r\n const whereClause = this.buildWhereClause(findOptions.where);\r\n dataQuery = dataQuery.where(whereClause);\r\n countQuery = countQuery.where(whereClause);\r\n }\r\n \r\n if (findOptions.orderBy) {\r\n dataQuery = dataQuery.orderBy(...this.buildOrderByClause(findOptions.orderBy));\r\n }\r\n \r\n dataQuery = dataQuery.limit(limit).offset(offset);\r\n \r\n // Execute both queries in parallel\r\n const [data, countResult] = await Promise.all([\r\n dataQuery.execute(),\r\n countQuery.execute()\r\n ]);\r\n \r\n const total = countResult[0]?.count || 0;\r\n const validatedData = data.map(item => this.validate(item));\r\n const totalPages = Math.ceil(total / limit);\r\n \r\n return {\r\n data: validatedData,\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNext: page < totalPages,\r\n hasPrev: page > 1\r\n };\r\n }\r\n \r\n // Transaction support using Drizzle's transaction API\r\n async withTransaction<R>(callback: (repo: this) => Promise<R>): Promise<R> {\r\n return await this.database.transaction(async (tx) => {\r\n // Create a new repository instance with the transaction database\r\n const transactionalRepo = new (this.constructor as any)({\r\n database: tx,\r\n table: this.table,\r\n zodSchema: this.schema\r\n });\r\n \r\n return await callback(transactionalRepo as this);\r\n });\r\n }\r\n \r\n // Build Drizzle-specific where clause\r\n protected buildWhereClause(where: FilterOptions): any {\r\n const conditions: any[] = [];\r\n \r\n for (const [key, value] of Object.entries(where)) {\r\n const column = this.getColumn(key);\r\n \r\n if (value === null || value === undefined) {\r\n conditions.push(this.operators.isNull(column));\r\n } else if (typeof value === 'object' && !Array.isArray(value)) {\r\n // Handle complex filters\r\n if ('gt' in value) {\r\n conditions.push(this.operators.gt(column, value.gt));\r\n } else if ('gte' in value) {\r\n conditions.push(this.operators.gte(column, value.gte));\r\n } else if ('lt' in value) {\r\n conditions.push(this.operators.lt(column, value.lt));\r\n } else if ('lte' in value) {\r\n conditions.push(this.operators.lte(column, value.lte));\r\n } else if ('like' in value) {\r\n conditions.push(this.operators.like(column, value.like));\r\n } else if ('ilike' in value) {\r\n conditions.push(this.operators.ilike(column, value.ilike));\r\n } else if ('in' in value) {\r\n conditions.push(this.operators.inArray(column, value.in));\r\n } else if ('notIn' in value) {\r\n conditions.push(this.operators.notInArray(column, value.notIn));\r\n } else if ('between' in value && Array.isArray(value.between) && value.between.length === 2) {\r\n conditions.push(this.operators.between(column, value.between[0], value.between[1]));\r\n } else {\r\n conditions.push(this.operators.eq(column, value));\r\n }\r\n } else if (Array.isArray(value)) {\r\n // Handle array filters (in operator)\r\n conditions.push(this.operators.inArray(column, value));\r\n } else {\r\n conditions.push(this.operators.eq(column, value));\r\n }\r\n }\r\n \r\n return conditions.length === 1 ? conditions[0] : this.operators.and(...conditions);\r\n }\r\n \r\n // Build Drizzle-specific order by clause\r\n protected buildOrderByClause(orderBy: SortOptions | SortOptions[]): any[] {\r\n if (Array.isArray(orderBy)) {\r\n return orderBy.map(sort => {\r\n const column = this.getColumn(sort.field);\r\n return sort.direction === 'desc' ? { column, direction: 'desc' } : column;\r\n });\r\n }\r\n \r\n const column = this.getColumn(orderBy.field);\r\n return orderBy.direction === 'desc' ? [{ column, direction: 'desc' }] : [column];\r\n }\r\n \r\n // Helper methods\r\n private getPrimaryKeyColumn(): any {\r\n // Find the primary key column\r\n for (const [columnName, column] of Object.entries(this.table._.columns)) {\r\n if (column._.isPrimaryKey) {\r\n return (this.table as any)[columnName];\r\n }\r\n }\r\n \r\n // Default to 'id' if no primary key found\r\n return (this.table as any).id || this.table._.columns.id;\r\n }\r\n \r\n private getColumn(name: string): any {\r\n return (this.table as any)[name] || this.table._.columns[name];\r\n }\r\n \r\n // Advanced Drizzle-specific methods\r\n \r\n /**\r\n * Execute raw SQL query\r\n */\r\n async rawQuery(sql: string, params?: any[]): Promise<any[]> {\r\n // This would depend on the specific Drizzle database implementation\r\n return await this.database.execute({ sql, params });\r\n }\r\n \r\n /**\r\n * Upsert operation (insert or update on conflict)\r\n */\r\n async upsert(data: Partial<T>, conflictColumns: string[]): Promise<T> {\r\n const validatedData = this.validatePartial(data);\r\n \r\n // Build conflict target\r\n const conflictTarget = conflictColumns.map(col => this.getColumn(col));\r\n \r\n const result = await this.database\r\n .insert(this.table)\r\n .values(validatedData)\r\n .onConflictDoUpdate({\r\n target: conflictTarget,\r\n set: validatedData\r\n })\r\n .returning()\r\n .execute();\r\n \r\n return this.validate(result[0]);\r\n }\r\n \r\n /**\r\n * Bulk upsert operation\r\n */\r\n async bulkUpsert(data: Partial<T>[], conflictColumns: string[]): Promise<T[]> {\r\n const validatedData = data.map((item: Partial<T>) => this.validatePartial(item));\r\n \r\n // Build conflict target\r\n const conflictTarget = conflictColumns.map(col => this.getColumn(col));\r\n \r\n const result = await this.database\r\n .insert(this.table)\r\n .values(validatedData)\r\n .onConflictDoUpdate({\r\n target: conflictTarget,\r\n set: validatedData[0] // This would need to be more sophisticated in a real implementation\r\n })\r\n .returning()\r\n .execute();\r\n \r\n return result.map((item: any) => this.validate(item));\r\n }\r\n \r\n /**\r\n * Find with custom select fields\r\n */\r\n async findWithSelect<K extends keyof T>(\r\n options: FindOptions,\r\n select: K[]\r\n ): Promise<Pick<T, K>[]> {\r\n const selectFields = select.reduce((acc, field) => {\r\n acc[field as string] = this.getColumn(field as string);\r\n return acc;\r\n }, {} as any);\r\n \r\n let query = this.database.select(selectFields).from(this.table);\r\n \r\n if (options.where) {\r\n query = query.where(this.buildWhereClause(options.where));\r\n }\r\n \r\n if (options.orderBy) {\r\n query = query.orderBy(...this.buildOrderByClause(options.orderBy));\r\n }\r\n \r\n if (options.pagination) {\r\n if (options.pagination.limit) {\r\n query = query.limit(options.pagination.limit);\r\n }\r\n if (options.pagination.offset) {\r\n query = query.offset(options.pagination.offset);\r\n }\r\n }\r\n \r\n return await query.execute();\r\n }\r\n \r\n /**\r\n * Aggregate operations\r\n */\r\n async aggregate(options: {\r\n where?: FilterOptions;\r\n groupBy?: string[];\r\n having?: FilterOptions;\r\n count?: boolean;\r\n sum?: string[];\r\n avg?: string[];\r\n min?: string[];\r\n max?: string[];\r\n }): Promise<any[]> {\r\n const selectFields: any = {};\r\n \r\n if (options.count) {\r\n selectFields.count = 'COUNT(*)';\r\n }\r\n \r\n if (options.sum) {\r\n for (const field of options.sum) {\r\n selectFields[`sum_${field}`] = `SUM(${field})`;\r\n }\r\n }\r\n \r\n if (options.avg) {\r\n for (const field of options.avg) {\r\n selectFields[`avg_${field}`] = `AVG(${field})`;\r\n }\r\n }\r\n \r\n if (options.min) {\r\n for (const field of options.min) {\r\n selectFields[`min_${field}`] = `MIN(${field})`;\r\n }\r\n }\r\n \r\n if (options.max) {\r\n for (const field of options.max) {\r\n selectFields[`max_${field}`] = `MAX(${field})`;\r\n }\r\n }\r\n \r\n let query = this.database.select(selectFields).from(this.table);\r\n \r\n if (options.where) {\r\n query = query.where(this.buildWhereClause(options.where));\r\n }\r\n \r\n if (options.groupBy) {\r\n const groupByColumns = options.groupBy.map(field => this.getColumn(field));\r\n query = query.groupBy(...groupByColumns);\r\n }\r\n \r\n if (options.having) {\r\n query = query.having(this.buildWhereClause(options.having));\r\n }\r\n \r\n return await query.execute();\r\n }\r\n}",
273
+ "import { z } from 'zod';\r\nimport { BaseRepository, IBaseRepository } from './base-repository';\r\nimport { PrismaRepository } from './prisma/repository';\r\nimport { TypeORMRepository } from './typeorm/repository';\r\nimport { DrizzleRepository } from './drizzle/repository';\r\n\r\n// Repository factory interface\r\nexport interface IRepositoryFactory {\r\n createRepository<T, ID = string | number>(\r\n type: 'prisma' | 'typeorm' | 'drizzle',\r\n options: any\r\n ): IBaseRepository<T, ID>;\r\n}\r\n\r\n/**\r\n * Universal repository factory for creating ORM-specific repositories\r\n */\r\nexport class RepositoryFactory implements IRepositoryFactory {\r\n private static instance: RepositoryFactory;\r\n \r\n private constructor() {}\r\n \r\n static getInstance(): RepositoryFactory {\r\n if (!RepositoryFactory.instance) {\r\n RepositoryFactory.instance = new RepositoryFactory();\r\n }\r\n return RepositoryFactory.instance;\r\n }\r\n \r\n /**\r\n * Create a repository based on ORM type\r\n */\r\n createRepository<T, ID = string | number>(\r\n type: 'prisma' | 'typeorm' | 'drizzle',\r\n options: any\r\n ): IBaseRepository<T, ID> {\r\n switch (type) {\r\n case 'prisma':\r\n return new PrismaRepository<T, ID>(options);\r\n case 'typeorm':\r\n return new TypeORMRepository<T, ID>(options);\r\n case 'drizzle':\r\n return new DrizzleRepository<T, ID>(options);\r\n default:\r\n throw new Error(`Unsupported repository type: ${type}`);\r\n }\r\n }\r\n \r\n /**\r\n * Create a Prisma repository\r\n */\r\n createPrismaRepository<T, ID = string | number>(options: {\r\n client: any;\r\n delegate: any;\r\n model: string;\r\n zodSchema?: z.ZodSchema<T>;\r\n }): PrismaRepository<T, ID> {\r\n return new PrismaRepository<T, ID>(options);\r\n }\r\n \r\n /**\r\n * Create a TypeORM repository\r\n */\r\n createTypeORMRepository<T, ID = string | number>(options: {\r\n dataSource: any;\r\n repository: any;\r\n entity: any;\r\n zodSchema?: z.ZodSchema<T>;\r\n }): TypeORMRepository<T, ID> {\r\n return new TypeORMRepository<T, ID>(options);\r\n }\r\n \r\n /**\r\n * Create a Drizzle repository\r\n */\r\n createDrizzleRepository<T, ID = string | number>(options: {\r\n database: any;\r\n table: any;\r\n zodSchema?: z.ZodSchema<T>;\r\n }): DrizzleRepository<T, ID> {\r\n return new DrizzleRepository<T, ID>(options);\r\n }\r\n}\r\n\r\n/**\r\n * Repository registry for managing multiple repositories\r\n */\r\nexport class RepositoryRegistry {\r\n private repositories = new Map<string, IBaseRepository<any>>();\r\n private factory: RepositoryFactory;\r\n \r\n constructor() {\r\n this.factory = RepositoryFactory.getInstance();\r\n }\r\n \r\n /**\r\n * Register a repository\r\n */\r\n register<T, ID = string | number>(\r\n name: string,\r\n repository: IBaseRepository<T, ID>\r\n ): void {\r\n this.repositories.set(name, repository as IBaseRepository<any, string | number>);\r\n }\r\n \r\n /**\r\n * Get a registered repository\r\n */\r\n get<T, ID = string | number>(name: string): IBaseRepository<T, ID> | undefined {\r\n return this.repositories.get(name) as IBaseRepository<T, ID> | undefined;\r\n }\r\n \r\n /**\r\n * Create and register a repository\r\n */\r\n createAndRegister<T, ID = string | number>(\r\n name: string,\r\n type: 'prisma' | 'typeorm' | 'drizzle',\r\n options: any\r\n ): IBaseRepository<T, ID> {\r\n const repository = this.factory.createRepository<T, ID>(type, options);\r\n this.register(name, repository);\r\n return repository;\r\n }\r\n \r\n /**\r\n * Remove a repository\r\n */\r\n remove(name: string): boolean {\r\n return this.repositories.delete(name);\r\n }\r\n \r\n /**\r\n * Get all registered repository names\r\n */\r\n getNames(): string[] {\r\n return Array.from(this.repositories.keys());\r\n }\r\n \r\n /**\r\n * Clear all repositories\r\n */\r\n clear(): void {\r\n this.repositories.clear();\r\n }\r\n \r\n /**\r\n * Get repository count\r\n */\r\n size(): number {\r\n return this.repositories.size;\r\n }\r\n}\r\n\r\n/**\r\n * Generic repository decorator for automatic repository creation\r\n */\r\nexport function GenericRepository<T>(\r\n name: string,\r\n type: 'prisma' | 'typeorm' | 'drizzle',\r\n options: any\r\n): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata = {\r\n type: 'generic-repository',\r\n name,\r\n ormType: type,\r\n options\r\n };\r\n \r\n Reflect.defineMetadata('inject', metadata, target, propertyKey);\r\n };\r\n}\r\n\r\n/**\r\n * Repository mixin for adding common repository functionality\r\n * \r\n * Note: Members are public because TypeScript doesn't allow exporting\r\n * anonymous classes with protected/private members (TS4094)\r\n */\r\nexport function withRepositoryMixin<T extends new (...args: any[]) => {}>(Base: T) {\r\n return class extends Base {\r\n public repositories: RepositoryRegistry = new RepositoryRegistry();\r\n \r\n /**\r\n * Get a repository by name\r\n */\r\n public getRepository<R, ID = string | number>(name: string): IBaseRepository<R, ID> | undefined {\r\n return this.repositories.get<R, ID>(name);\r\n }\r\n \r\n /**\r\n * Create and register a repository\r\n */\r\n public createRepository<R, ID = string | number>(\r\n name: string,\r\n type: 'prisma' | 'typeorm' | 'drizzle',\r\n options: any\r\n ): IBaseRepository<R, ID> {\r\n return this.repositories.createAndRegister<R, ID>(name, type, options);\r\n }\r\n \r\n /**\r\n * Execute operation with multiple repositories in transaction\r\n */\r\n public async withRepositories<R>(\r\n repositoryNames: string[],\r\n callback: (repos: Map<string, IBaseRepository<any>>) => Promise<R>\r\n ): Promise<R> {\r\n const repos = new Map<string, IBaseRepository<any>>();\r\n \r\n for (const name of repositoryNames) {\r\n const repo = this.repositories.get(name);\r\n if (repo) {\r\n repos.set(name, repo);\r\n }\r\n }\r\n \r\n // If all repositories support transactions, use the first one's transaction\r\n const firstRepo = repos.values().next().value;\r\n if (firstRepo && typeof firstRepo.withTransaction === 'function') {\r\n return await firstRepo.withTransaction(async () => {\r\n return await callback(repos);\r\n });\r\n }\r\n \r\n // Otherwise, execute without transaction\r\n return await callback(repos);\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Repository service base class\r\n */\r\nexport abstract class RepositoryService {\r\n protected repositories: RepositoryRegistry = new RepositoryRegistry();\r\n \r\n constructor() {\r\n this.initializeRepositories();\r\n }\r\n \r\n /**\r\n * Initialize repositories - to be implemented by subclasses\r\n */\r\n protected abstract initializeRepositories(): void;\r\n \r\n /**\r\n * Get a repository by name\r\n */\r\n protected getRepository<T, ID = string | number>(name: string): IBaseRepository<T, ID> {\r\n const repo = this.repositories.get<T, ID>(name);\r\n if (!repo) {\r\n throw new Error(`Repository '${name}' not found`);\r\n }\r\n return repo;\r\n }\r\n \r\n /**\r\n * Execute operation in transaction across multiple repositories\r\n */\r\n protected async executeInTransaction<T>(\r\n repositoryNames: string[],\r\n callback: (repos: Map<string, IBaseRepository<any>>) => Promise<T>\r\n ): Promise<T> {\r\n const repos = new Map<string, IBaseRepository<any>>();\r\n \r\n for (const name of repositoryNames) {\r\n const repo = this.repositories.get(name);\r\n if (repo) {\r\n repos.set(name, repo);\r\n }\r\n }\r\n \r\n // Use the first repository's transaction if available\r\n const firstRepo = repos.values().next().value;\r\n if (firstRepo && typeof firstRepo.withTransaction === 'function') {\r\n return await firstRepo.withTransaction(async () => {\r\n return await callback(repos);\r\n });\r\n }\r\n \r\n return await callback(repos);\r\n }\r\n}\r\n\r\n// Global repository registry instance\r\nexport const globalRepositoryRegistry = new RepositoryRegistry();",
274
+ "import { FilterOptions, SortOptions, PaginationOptions } from './base-repository';\r\n\r\n// Query builder interfaces\r\nexport interface IQueryBuilder<T> {\r\n select(fields?: (keyof T)[]): this;\r\n where(conditions: FilterOptions): this;\r\n orderBy(sort: SortOptions | SortOptions[]): this;\r\n limit(count: number): this;\r\n offset(count: number): this;\r\n groupBy(fields: (keyof T)[]): this;\r\n having(conditions: FilterOptions): this;\r\n join(table: string, condition: string): this;\r\n leftJoin(table: string, condition: string): this;\r\n rightJoin(table: string, condition: string): this;\r\n innerJoin(table: string, condition: string): this;\r\n execute(): Promise<T[]>;\r\n first(): Promise<T | null>;\r\n count(): Promise<number>;\r\n exists(): Promise<boolean>;\r\n}\r\n\r\n// Query operators\r\nexport interface QueryOperators {\r\n eq(value: any): FilterCondition;\r\n ne(value: any): FilterCondition;\r\n gt(value: any): FilterCondition;\r\n gte(value: any): FilterCondition;\r\n lt(value: any): FilterCondition;\r\n lte(value: any): FilterCondition;\r\n like(pattern: string): FilterCondition;\r\n ilike(pattern: string): FilterCondition;\r\n in(values: any[]): FilterCondition;\r\n notIn(values: any[]): FilterCondition;\r\n between(min: any, max: any): FilterCondition;\r\n isNull(): FilterCondition;\r\n isNotNull(): FilterCondition;\r\n and(...conditions: FilterCondition[]): FilterCondition;\r\n or(...conditions: FilterCondition[]): FilterCondition;\r\n not(condition: FilterCondition): FilterCondition;\r\n}\r\n\r\n// Filter condition interface\r\nexport interface FilterCondition {\r\n type: string;\r\n field?: string;\r\n value?: any;\r\n values?: any[];\r\n min?: any;\r\n max?: any;\r\n pattern?: string;\r\n conditions?: FilterCondition[];\r\n condition?: FilterCondition;\r\n}\r\n\r\n/**\r\n * Generic query builder implementation\r\n */\r\nexport class QueryBuilder<T> implements IQueryBuilder<T> {\r\n private selectFields?: (keyof T)[];\r\n private whereConditions: FilterCondition[] = [];\r\n private orderByClause?: SortOptions | SortOptions[];\r\n private limitCount?: number;\r\n private offsetCount?: number;\r\n private groupByFields?: (keyof T)[];\r\n private havingConditions: FilterCondition[] = [];\r\n private joins: JoinClause[] = [];\r\n \r\n constructor(\r\n private executor: QueryExecutor<T>,\r\n private operators: QueryOperators = new DefaultQueryOperators()\r\n ) {}\r\n \r\n select(fields?: (keyof T)[]): this {\r\n this.selectFields = fields;\r\n return this;\r\n }\r\n \r\n where(conditions: FilterOptions): this {\r\n const condition = this.buildFilterCondition(conditions);\r\n this.whereConditions.push(condition);\r\n return this;\r\n }\r\n \r\n orderBy(sort: SortOptions | SortOptions[]): this {\r\n this.orderByClause = sort;\r\n return this;\r\n }\r\n \r\n limit(count: number): this {\r\n this.limitCount = count;\r\n return this;\r\n }\r\n \r\n offset(count: number): this {\r\n this.offsetCount = count;\r\n return this;\r\n }\r\n \r\n groupBy(fields: (keyof T)[]): this {\r\n this.groupByFields = fields;\r\n return this;\r\n }\r\n \r\n having(conditions: FilterOptions): this {\r\n const condition = this.buildFilterCondition(conditions);\r\n this.havingConditions.push(condition);\r\n return this;\r\n }\r\n \r\n join(table: string, condition: string): this {\r\n this.joins.push({ type: 'JOIN', table, condition });\r\n return this;\r\n }\r\n \r\n leftJoin(table: string, condition: string): this {\r\n this.joins.push({ type: 'LEFT JOIN', table, condition });\r\n return this;\r\n }\r\n \r\n rightJoin(table: string, condition: string): this {\r\n this.joins.push({ type: 'RIGHT JOIN', table, condition });\r\n return this;\r\n }\r\n \r\n innerJoin(table: string, condition: string): this {\r\n this.joins.push({ type: 'INNER JOIN', table, condition });\r\n return this;\r\n }\r\n \r\n async execute(): Promise<T[]> {\r\n const query = this.buildQuery();\r\n return await this.executor.execute(query);\r\n }\r\n \r\n async first(): Promise<T | null> {\r\n const originalLimit = this.limitCount;\r\n this.limit(1);\r\n \r\n const results = await this.execute();\r\n \r\n // Restore original limit\r\n this.limitCount = originalLimit;\r\n \r\n return results.length > 0 ? results[0] : null;\r\n }\r\n \r\n async count(): Promise<number> {\r\n const query = this.buildCountQuery();\r\n return await this.executor.count(query);\r\n }\r\n \r\n async exists(): Promise<boolean> {\r\n const count = await this.count();\r\n return count > 0;\r\n }\r\n \r\n // Helper methods\r\n private buildFilterCondition(conditions: FilterOptions): FilterCondition {\r\n const filterConditions: FilterCondition[] = [];\r\n \r\n for (const [field, value] of Object.entries(conditions)) {\r\n if (value === null || value === undefined) {\r\n filterConditions.push({ type: 'isNull', field });\r\n } else if (typeof value === 'object' && !Array.isArray(value)) {\r\n // Handle complex conditions\r\n for (const [operator, operatorValue] of Object.entries(value)) {\r\n switch (operator) {\r\n case 'eq':\r\n filterConditions.push({ type: 'eq', field, value: operatorValue });\r\n break;\r\n case 'ne':\r\n filterConditions.push({ type: 'ne', field, value: operatorValue });\r\n break;\r\n case 'gt':\r\n filterConditions.push({ type: 'gt', field, value: operatorValue });\r\n break;\r\n case 'gte':\r\n filterConditions.push({ type: 'gte', field, value: operatorValue });\r\n break;\r\n case 'lt':\r\n filterConditions.push({ type: 'lt', field, value: operatorValue });\r\n break;\r\n case 'lte':\r\n filterConditions.push({ type: 'lte', field, value: operatorValue });\r\n break;\r\n case 'like':\r\n filterConditions.push({ type: 'like', field, pattern: operatorValue as string });\r\n break;\r\n case 'ilike':\r\n filterConditions.push({ type: 'ilike', field, pattern: operatorValue as string });\r\n break;\r\n case 'in':\r\n filterConditions.push({ type: 'in', field, values: operatorValue as any[] });\r\n break;\r\n case 'notIn':\r\n filterConditions.push({ type: 'notIn', field, values: operatorValue as any[] });\r\n break;\r\n case 'between':\r\n if (Array.isArray(operatorValue) && operatorValue.length === 2) {\r\n filterConditions.push({ \r\n type: 'between', \r\n field, \r\n min: operatorValue[0], \r\n max: operatorValue[1] \r\n });\r\n }\r\n break;\r\n }\r\n }\r\n } else if (Array.isArray(value)) {\r\n filterConditions.push({ type: 'in', field, values: value });\r\n } else {\r\n filterConditions.push({ type: 'eq', field, value });\r\n }\r\n }\r\n \r\n return filterConditions.length === 1 \r\n ? filterConditions[0] \r\n : { type: 'and', conditions: filterConditions };\r\n }\r\n \r\n private buildQuery(): QueryDefinition {\r\n return {\r\n select: this.selectFields,\r\n where: this.whereConditions.length > 0 \r\n ? (this.whereConditions.length === 1 \r\n ? this.whereConditions[0] \r\n : { type: 'and', conditions: this.whereConditions })\r\n : undefined,\r\n orderBy: this.orderByClause,\r\n limit: this.limitCount,\r\n offset: this.offsetCount,\r\n groupBy: this.groupByFields,\r\n having: this.havingConditions.length > 0 \r\n ? (this.havingConditions.length === 1 \r\n ? this.havingConditions[0] \r\n : { type: 'and', conditions: this.havingConditions })\r\n : undefined,\r\n joins: this.joins\r\n };\r\n }\r\n \r\n private buildCountQuery(): QueryDefinition {\r\n return {\r\n select: ['COUNT(*) as count'] as any,\r\n where: this.whereConditions.length > 0 \r\n ? (this.whereConditions.length === 1 \r\n ? this.whereConditions[0] \r\n : { type: 'and', conditions: this.whereConditions })\r\n : undefined,\r\n joins: this.joins\r\n };\r\n }\r\n}\r\n\r\n// Query definition interface\r\nexport interface QueryDefinition {\r\n select?: (keyof any)[] | string[];\r\n where?: FilterCondition;\r\n orderBy?: SortOptions | SortOptions[];\r\n limit?: number;\r\n offset?: number;\r\n groupBy?: (keyof any)[];\r\n having?: FilterCondition;\r\n joins?: JoinClause[];\r\n}\r\n\r\n// Join clause interface\r\nexport interface JoinClause {\r\n type: 'JOIN' | 'LEFT JOIN' | 'RIGHT JOIN' | 'INNER JOIN';\r\n table: string;\r\n condition: string;\r\n}\r\n\r\n// Query executor interface\r\nexport interface QueryExecutor<T> {\r\n execute(query: QueryDefinition): Promise<T[]>;\r\n count(query: QueryDefinition): Promise<number>;\r\n}\r\n\r\n/**\r\n * Default query operators implementation\r\n */\r\nexport class DefaultQueryOperators implements QueryOperators {\r\n eq(value: any): FilterCondition {\r\n return { type: 'eq', value };\r\n }\r\n \r\n ne(value: any): FilterCondition {\r\n return { type: 'ne', value };\r\n }\r\n \r\n gt(value: any): FilterCondition {\r\n return { type: 'gt', value };\r\n }\r\n \r\n gte(value: any): FilterCondition {\r\n return { type: 'gte', value };\r\n }\r\n \r\n lt(value: any): FilterCondition {\r\n return { type: 'lt', value };\r\n }\r\n \r\n lte(value: any): FilterCondition {\r\n return { type: 'lte', value };\r\n }\r\n \r\n like(pattern: string): FilterCondition {\r\n return { type: 'like', pattern };\r\n }\r\n \r\n ilike(pattern: string): FilterCondition {\r\n return { type: 'ilike', pattern };\r\n }\r\n \r\n in(values: any[]): FilterCondition {\r\n return { type: 'in', values };\r\n }\r\n \r\n notIn(values: any[]): FilterCondition {\r\n return { type: 'notIn', values };\r\n }\r\n \r\n between(min: any, max: any): FilterCondition {\r\n return { type: 'between', min, max };\r\n }\r\n \r\n isNull(): FilterCondition {\r\n return { type: 'isNull' };\r\n }\r\n \r\n isNotNull(): FilterCondition {\r\n return { type: 'isNotNull' };\r\n }\r\n \r\n and(...conditions: FilterCondition[]): FilterCondition {\r\n return { type: 'and', conditions };\r\n }\r\n \r\n or(...conditions: FilterCondition[]): FilterCondition {\r\n return { type: 'or', conditions };\r\n }\r\n \r\n not(condition: FilterCondition): FilterCondition {\r\n return { type: 'not', condition };\r\n }\r\n}\r\n\r\n/**\r\n * Query builder factory\r\n */\r\nexport class QueryBuilderFactory {\r\n static create<T>(executor: QueryExecutor<T>): QueryBuilder<T> {\r\n return new QueryBuilder<T>(executor);\r\n }\r\n \r\n static createWithOperators<T>(\r\n executor: QueryExecutor<T>, \r\n operators: QueryOperators\r\n ): QueryBuilder<T> {\r\n return new QueryBuilder<T>(executor, operators);\r\n }\r\n}",
275
+ "import { PaginationOptions, PaginatedResult, FindOptions } from './base-repository';\r\n\r\n// Enhanced pagination interfaces\r\nexport interface CursorPaginationOptions {\r\n cursor?: string;\r\n limit: number;\r\n direction?: 'forward' | 'backward';\r\n}\r\n\r\nexport interface CursorPaginatedResult<T> {\r\n data: T[];\r\n nextCursor?: string;\r\n prevCursor?: string;\r\n hasNext: boolean;\r\n hasPrev: boolean;\r\n limit: number;\r\n}\r\n\r\nexport interface OffsetPaginationOptions extends PaginationOptions {\r\n page: number;\r\n limit: number;\r\n}\r\n\r\nexport interface PaginationMeta {\r\n total: number;\r\n page: number;\r\n limit: number;\r\n totalPages: number;\r\n hasNext: boolean;\r\n hasPrev: boolean;\r\n firstPage: number;\r\n lastPage: number;\r\n}\r\n\r\n/**\r\n * Pagination utility class\r\n */\r\nexport class PaginationHelper {\r\n /**\r\n * Calculate pagination metadata\r\n */\r\n static calculateMeta(\r\n total: number,\r\n page: number,\r\n limit: number\r\n ): PaginationMeta {\r\n const totalPages = Math.ceil(total / limit);\r\n \r\n return {\r\n total,\r\n page,\r\n limit,\r\n totalPages,\r\n hasNext: page < totalPages,\r\n hasPrev: page > 1,\r\n firstPage: 1,\r\n lastPage: totalPages\r\n };\r\n }\r\n \r\n /**\r\n * Calculate offset from page and limit\r\n */\r\n static calculateOffset(page: number, limit: number): number {\r\n return (page - 1) * limit;\r\n }\r\n \r\n /**\r\n * Calculate page from offset and limit\r\n */\r\n static calculatePage(offset: number, limit: number): number {\r\n return Math.floor(offset / limit) + 1;\r\n }\r\n \r\n /**\r\n * Validate pagination parameters\r\n */\r\n static validatePagination(page: number, limit: number): void {\r\n if (page < 1) {\r\n throw new Error('Page must be greater than 0');\r\n }\r\n \r\n if (limit < 1) {\r\n throw new Error('Limit must be greater than 0');\r\n }\r\n \r\n if (limit > 1000) {\r\n throw new Error('Limit cannot exceed 1000');\r\n }\r\n }\r\n \r\n /**\r\n * Create paginated result\r\n */\r\n static createPaginatedResult<T>(\r\n data: T[],\r\n total: number,\r\n page: number,\r\n limit: number\r\n ): PaginatedResult<T> {\r\n const meta = this.calculateMeta(total, page, limit);\r\n \r\n return {\r\n data,\r\n total: meta.total,\r\n page: meta.page,\r\n limit: meta.limit,\r\n totalPages: meta.totalPages,\r\n hasNext: meta.hasNext,\r\n hasPrev: meta.hasPrev\r\n };\r\n }\r\n \r\n /**\r\n * Extract pagination options from query parameters\r\n */\r\n static extractPaginationFromQuery(query: any): OffsetPaginationOptions {\r\n const page = parseInt(query.page) || 1;\r\n const limit = parseInt(query.limit) || 10;\r\n \r\n this.validatePagination(page, limit);\r\n \r\n return { page, limit };\r\n }\r\n}\r\n\r\n/**\r\n * Cursor-based pagination helper\r\n */\r\nexport class CursorPaginationHelper {\r\n /**\r\n * Encode cursor from object\r\n */\r\n static encodeCursor(data: any): string {\r\n return Buffer.from(JSON.stringify(data)).toString('base64');\r\n }\r\n \r\n /**\r\n * Decode cursor to object\r\n */\r\n static decodeCursor(cursor: string): any {\r\n try {\r\n return JSON.parse(Buffer.from(cursor, 'base64').toString());\r\n } catch (error) {\r\n throw new Error('Invalid cursor format');\r\n }\r\n }\r\n \r\n /**\r\n * Create cursor from entity\r\n */\r\n static createCursor(entity: any, cursorField: string = 'id'): string {\r\n const cursorValue = entity[cursorField];\r\n if (cursorValue === undefined || cursorValue === null) {\r\n throw new Error(`Cursor field '${cursorField}' not found in entity`);\r\n }\r\n \r\n return this.encodeCursor({ [cursorField]: cursorValue });\r\n }\r\n \r\n /**\r\n * Extract cursor value\r\n */\r\n static extractCursorValue(cursor: string, cursorField: string = 'id'): any {\r\n const decoded = this.decodeCursor(cursor);\r\n return decoded[cursorField];\r\n }\r\n \r\n /**\r\n * Create cursor paginated result\r\n */\r\n static createCursorPaginatedResult<T>(\r\n data: T[],\r\n limit: number,\r\n cursorField: string = 'id'\r\n ): CursorPaginatedResult<T> {\r\n const hasNext = data.length > limit;\r\n const hasPrev = false; // This would need to be determined by the query\r\n \r\n // Remove extra item if we fetched limit + 1\r\n const resultData = hasNext ? data.slice(0, limit) : data;\r\n \r\n let nextCursor: string | undefined;\r\n let prevCursor: string | undefined;\r\n \r\n if (resultData.length > 0) {\r\n if (hasNext) {\r\n nextCursor = this.createCursor(resultData[resultData.length - 1], cursorField);\r\n }\r\n \r\n if (hasPrev) {\r\n prevCursor = this.createCursor(resultData[0], cursorField);\r\n }\r\n }\r\n \r\n return {\r\n data: resultData,\r\n nextCursor,\r\n prevCursor,\r\n hasNext,\r\n hasPrev,\r\n limit\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Advanced pagination builder\r\n */\r\nexport class PaginationBuilder<T> {\r\n private options: Partial<FindOptions> = {};\r\n \r\n constructor(private baseQuery: FindOptions = {}) {\r\n this.options = { ...baseQuery };\r\n }\r\n \r\n /**\r\n * Set offset-based pagination\r\n */\r\n offset(page: number, limit: number): this {\r\n PaginationHelper.validatePagination(page, limit);\r\n \r\n this.options.pagination = {\r\n page,\r\n limit,\r\n offset: PaginationHelper.calculateOffset(page, limit)\r\n };\r\n \r\n return this;\r\n }\r\n \r\n /**\r\n * Set cursor-based pagination\r\n */\r\n cursor(cursor: string, limit: number, cursorField: string = 'id'): this {\r\n if (limit < 1 || limit > 1000) {\r\n throw new Error('Limit must be between 1 and 1000');\r\n }\r\n \r\n const cursorValue = CursorPaginationHelper.extractCursorValue(cursor, cursorField);\r\n \r\n // Add cursor condition to where clause\r\n this.options.where = {\r\n ...this.options.where,\r\n [cursorField]: { gt: cursorValue }\r\n };\r\n \r\n this.options.pagination = { limit };\r\n \r\n return this;\r\n }\r\n \r\n /**\r\n * Set sorting\r\n */\r\n orderBy(field: keyof T, direction: 'asc' | 'desc' = 'asc'): this {\r\n this.options.orderBy = { field: field as string, direction };\r\n return this;\r\n }\r\n \r\n /**\r\n * Add multiple sorting\r\n */\r\n orderByMultiple(sorts: Array<{ field: keyof T; direction: 'asc' | 'desc' }>): this {\r\n this.options.orderBy = sorts.map(sort => ({\r\n field: sort.field as string,\r\n direction: sort.direction\r\n }));\r\n return this;\r\n }\r\n \r\n /**\r\n * Add where conditions\r\n */\r\n where(conditions: Partial<T>): this {\r\n this.options.where = { ...this.options.where, ...conditions };\r\n return this;\r\n }\r\n \r\n /**\r\n * Add select fields\r\n */\r\n select(fields: (keyof T)[]): this {\r\n this.options.select = fields as string[];\r\n return this;\r\n }\r\n \r\n /**\r\n * Add include relations\r\n */\r\n include(relations: string[]): this {\r\n this.options.include = relations;\r\n return this;\r\n }\r\n \r\n /**\r\n * Build the final query options\r\n */\r\n build(): FindOptions {\r\n return this.options;\r\n }\r\n \r\n /**\r\n * Reset the builder\r\n */\r\n reset(): this {\r\n this.options = { ...this.baseQuery };\r\n return this;\r\n }\r\n}\r\n\r\n/**\r\n * Pagination decorator for automatic pagination handling\r\n */\r\nexport function Paginated(defaultLimit: number = 10, maxLimit: number = 100) {\r\n return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {\r\n const originalMethod = descriptor.value;\r\n \r\n descriptor.value = async function (...args: any[]) {\r\n // Extract pagination from the last argument if it's an object with page/limit\r\n const lastArg = args[args.length - 1];\r\n \r\n if (lastArg && typeof lastArg === 'object' && ('page' in lastArg || 'limit' in lastArg)) {\r\n const page = lastArg.page || 1;\r\n const limit = Math.min(lastArg.limit || defaultLimit, maxLimit);\r\n \r\n PaginationHelper.validatePagination(page, limit);\r\n \r\n // Update the pagination in the last argument\r\n lastArg.pagination = {\r\n page,\r\n limit,\r\n offset: PaginationHelper.calculateOffset(page, limit)\r\n };\r\n }\r\n \r\n return await originalMethod.apply(this, args);\r\n };\r\n \r\n return descriptor;\r\n };\r\n}\r\n\r\n/**\r\n * Pagination response transformer\r\n */\r\nexport class PaginationTransformer {\r\n /**\r\n * Transform paginated result to API response format\r\n */\r\n static toApiResponse<T>(result: PaginatedResult<T>, baseUrl?: string): any {\r\n const response: any = {\r\n data: result.data,\r\n meta: {\r\n total: result.total,\r\n page: result.page,\r\n limit: result.limit,\r\n totalPages: result.totalPages\r\n },\r\n links: {\r\n first: baseUrl ? `${baseUrl}?page=1&limit=${result.limit}` : null,\r\n last: baseUrl ? `${baseUrl}?page=${result.totalPages}&limit=${result.limit}` : null,\r\n prev: result.hasPrev && baseUrl ? `${baseUrl}?page=${result.page - 1}&limit=${result.limit}` : null,\r\n next: result.hasNext && baseUrl ? `${baseUrl}?page=${result.page + 1}&limit=${result.limit}` : null\r\n }\r\n };\r\n \r\n return response;\r\n }\r\n \r\n /**\r\n * Transform cursor paginated result to API response format\r\n */\r\n static toCursorApiResponse<T>(result: CursorPaginatedResult<T>, baseUrl?: string): any {\r\n const response: any = {\r\n data: result.data,\r\n meta: {\r\n limit: result.limit,\r\n hasNext: result.hasNext,\r\n hasPrev: result.hasPrev\r\n },\r\n cursors: {\r\n next: result.nextCursor,\r\n prev: result.prevCursor\r\n }\r\n };\r\n \r\n if (baseUrl) {\r\n response.links = {\r\n next: result.nextCursor ? `${baseUrl}?cursor=${result.nextCursor}&limit=${result.limit}` : null,\r\n prev: result.prevCursor ? `${baseUrl}?cursor=${result.prevCursor}&limit=${result.limit}` : null\r\n };\r\n }\r\n \r\n return response;\r\n }\r\n}",
276
+ "// ORM Integration Layer\r\nexport * from './base-repository';\r\nexport * from './repository-factory';\r\nexport * from './query-builder';\r\nexport * from './pagination';\r\n\r\n// Transaction Management\r\nexport type {\r\n TransactionContext,\r\n ITransactionManager\r\n} from './transaction-manager';\r\n\r\nexport {\r\n BaseTransactionManager,\r\n InMemoryTransactionManager,\r\n getGlobalTransactionManager,\r\n setGlobalTransactionManager\r\n} from './transaction-manager';\r\n\r\nexport type {\r\n TransactionMetadata,\r\n RepositoryMetadata\r\n} from './decorators';\r\n\r\nexport {\r\n Repository,\r\n Transactional,\r\n Entity,\r\n Column\r\n} from './decorators';\r\n\r\nexport * from './transaction-interceptor';\r\nexport * from './transaction-propagation';\r\nexport * from './transaction-events';\r\nexport * from './transaction-plugin';\r\n\r\n// ORM Integrations\r\nexport * from './prisma';\r\nexport * from './typeorm';\r\nexport * from './drizzle';",
277
+ "import 'reflect-metadata';\r\nimport { MetadataRegistry } from '../core/metadata';\r\nimport { getGlobalTransactionManager } from './transaction-manager';\r\n\r\n// Repository decorator metadata\r\nexport interface RepositoryMetadata {\r\n entity?: any;\r\n connection?: string;\r\n transactional?: boolean;\r\n}\r\n\r\n// Transaction decorator metadata\r\nexport interface TransactionMetadata {\r\n isolation?: 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'REPEATABLE_READ' | 'SERIALIZABLE';\r\n timeout?: number;\r\n readOnly?: boolean;\r\n propagation?: 'REQUIRED' | 'REQUIRES_NEW' | 'SUPPORTS' | 'NOT_SUPPORTED' | 'NEVER' | 'MANDATORY';\r\n}\r\n\r\n/**\r\n * Repository decorator for marking classes as repositories\r\n */\r\nexport function Repository(entity?: any, connection?: string): ClassDecorator {\r\n return (target: any) => {\r\n const metadata: RepositoryMetadata = {\r\n entity,\r\n connection,\r\n transactional: false\r\n };\r\n \r\n Reflect.defineMetadata('repository', metadata, target);\r\n };\r\n}\r\n\r\n/**\r\n * Transactional decorator for automatic transaction management\r\n */\r\nexport function Transactional(options?: TransactionMetadata): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\r\n const originalMethod = descriptor.value;\r\n const metadata: TransactionMetadata = {\r\n isolation: options?.isolation || 'READ_COMMITTED',\r\n timeout: options?.timeout || 30000,\r\n readOnly: options?.readOnly || false,\r\n propagation: options?.propagation || 'REQUIRED'\r\n };\r\n \r\n // Store metadata for reflection\r\n Reflect.defineMetadata('transactional', metadata, target, propertyKey);\r\n \r\n // Wrap the original method with transaction logic\r\n descriptor.value = async function (...args: any[]) {\r\n const transactionManager = getGlobalTransactionManager();\r\n \r\n // Handle transaction based on propagation behavior\r\n return await transactionManager.handleTransactional(\r\n this,\r\n propertyKey as string,\r\n args,\r\n originalMethod,\r\n // Try to get context from arguments (if available)\r\n args.find(arg => arg && typeof arg === 'object' && arg.req && arg.res)\r\n );\r\n };\r\n \r\n return descriptor;\r\n };\r\n}\r\n\r\n/**\r\n * Entity decorator for marking classes as database entities\r\n */\r\nexport function Entity(tableName?: string): ClassDecorator {\r\n return (target: any) => {\r\n const metadata = {\r\n tableName: tableName || target.name.toLowerCase()\r\n };\r\n \r\n Reflect.defineMetadata('entity', metadata, target);\r\n };\r\n}\r\n\r\n/**\r\n * Column decorator for marking properties as database columns\r\n */\r\nexport function Column(options?: {\r\n name?: string;\r\n type?: string;\r\n nullable?: boolean;\r\n unique?: boolean;\r\n primary?: boolean;\r\n}): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata = {\r\n name: options?.name || propertyKey.toString(),\r\n type: options?.type || 'string',\r\n nullable: options?.nullable || false,\r\n unique: options?.unique || false,\r\n primary: options?.primary || false\r\n };\r\n \r\n Reflect.defineMetadata('column', metadata, target, propertyKey);\r\n };\r\n}",
278
+ "import { Context } from 'hono';\r\nimport { getGlobalTransactionManager, TransactionMetadata } from './transaction-manager';\r\n\r\n/**\r\n * Transaction interceptor for automatic transaction handling\r\n */\r\nexport class TransactionInterceptor {\r\n private static instance: TransactionInterceptor;\r\n \r\n private constructor() {}\r\n \r\n static getInstance(): TransactionInterceptor {\r\n if (!TransactionInterceptor.instance) {\r\n TransactionInterceptor.instance = new TransactionInterceptor();\r\n }\r\n return TransactionInterceptor.instance;\r\n }\r\n \r\n /**\r\n * Intercept method calls and handle transactions\r\n */\r\n async intercept(\r\n target: any,\r\n propertyKey: string,\r\n args: any[],\r\n originalMethod: Function,\r\n context?: Context\r\n ): Promise<any> {\r\n const transactionManager = getGlobalTransactionManager();\r\n \r\n // Check if method has @Transactional decorator\r\n const metadata = Reflect.getMetadata('transactional', target, propertyKey) as TransactionMetadata;\r\n \r\n if (metadata) {\r\n return await transactionManager.handleTransactional(\r\n target,\r\n propertyKey,\r\n args,\r\n originalMethod,\r\n context\r\n );\r\n }\r\n \r\n // No transaction needed, execute normally\r\n return await originalMethod.apply(target, args);\r\n }\r\n \r\n /**\r\n * Create a transactional proxy for an object\r\n */\r\n createTransactionalProxy<T extends object>(target: T, context?: Context): T {\r\n return new Proxy(target, {\r\n get: (obj, prop) => {\r\n const value = obj[prop as keyof T];\r\n \r\n if (typeof value === 'function') {\r\n return async (...args: any[]) => {\r\n return await this.intercept(\r\n obj,\r\n prop as string,\r\n args,\r\n value.bind(obj),\r\n context\r\n );\r\n };\r\n }\r\n \r\n return value;\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Transaction middleware for Hono\r\n */\r\nexport function transactionMiddleware() {\r\n return async (c: Context, next: () => Promise<void>) => {\r\n const interceptor = TransactionInterceptor.getInstance();\r\n \r\n // Store the interceptor in the context for use in handlers\r\n c.set('transactionInterceptor', interceptor);\r\n c.set('transactionContext', c);\r\n \r\n await next();\r\n };\r\n}\r\n\r\n/**\r\n * Get transaction interceptor from context\r\n */\r\nexport function getTransactionInterceptor(c: Context): TransactionInterceptor {\r\n return c.get('transactionInterceptor') || TransactionInterceptor.getInstance();\r\n}\r\n\r\n/**\r\n * Create transactional proxy from context\r\n */\r\nexport function createTransactionalProxy<T extends object>(c: Context, target: T): T {\r\n const interceptor = getTransactionInterceptor(c);\r\n return interceptor.createTransactionalProxy(target, c);\r\n}",
279
+ "import { TransactionContext, TransactionMetadata } from './transaction-manager';\r\n\r\n// Transaction propagation types\r\nexport enum TransactionPropagation {\r\n REQUIRED = 'REQUIRED', // Join existing transaction or create new one\r\n REQUIRES_NEW = 'REQUIRES_NEW', // Always create new transaction\r\n SUPPORTS = 'SUPPORTS', // Join existing transaction if available, otherwise execute without transaction\r\n NOT_SUPPORTED = 'NOT_SUPPORTED', // Execute without transaction, suspend existing if present\r\n MANDATORY = 'MANDATORY', // Must have existing transaction, throw error if none\r\n NEVER = 'NEVER' // Must not have transaction, throw error if present\r\n}\r\n\r\n// Enhanced transaction metadata with propagation\r\nexport interface EnhancedTransactionMetadata extends TransactionMetadata {\r\n propagation?: TransactionPropagation;\r\n rollbackFor?: (new (...args: any[]) => Error)[];\r\n noRollbackFor?: (new (...args: any[]) => Error)[];\r\n}\r\n\r\n/**\r\n * Transaction propagation manager\r\n */\r\nexport class TransactionPropagationManager {\r\n /**\r\n * Determine if a new transaction should be started based on propagation\r\n */\r\n shouldStartNewTransaction(\r\n propagation: TransactionPropagation,\r\n existingTransaction?: TransactionContext\r\n ): boolean {\r\n switch (propagation) {\r\n case TransactionPropagation.REQUIRED:\r\n return !existingTransaction;\r\n \r\n case TransactionPropagation.REQUIRES_NEW:\r\n return true;\r\n \r\n case TransactionPropagation.SUPPORTS:\r\n return false;\r\n \r\n case TransactionPropagation.NOT_SUPPORTED:\r\n return false;\r\n \r\n case TransactionPropagation.MANDATORY:\r\n if (!existingTransaction) {\r\n throw new Error('Transaction is mandatory but no existing transaction found');\r\n }\r\n return false;\r\n \r\n case TransactionPropagation.NEVER:\r\n if (existingTransaction) {\r\n throw new Error('Transaction is not allowed but existing transaction found');\r\n }\r\n return false;\r\n \r\n default:\r\n return !existingTransaction;\r\n }\r\n }\r\n \r\n /**\r\n * Determine if existing transaction should be suspended\r\n */\r\n shouldSuspendTransaction(\r\n propagation: TransactionPropagation,\r\n existingTransaction?: TransactionContext\r\n ): boolean {\r\n return propagation === TransactionPropagation.NOT_SUPPORTED && !!existingTransaction;\r\n }\r\n \r\n /**\r\n * Determine if method should execute within transaction\r\n */\r\n shouldExecuteInTransaction(\r\n propagation: TransactionPropagation,\r\n existingTransaction?: TransactionContext\r\n ): boolean {\r\n switch (propagation) {\r\n case TransactionPropagation.REQUIRED:\r\n case TransactionPropagation.REQUIRES_NEW:\r\n case TransactionPropagation.MANDATORY:\r\n return true;\r\n \r\n case TransactionPropagation.SUPPORTS:\r\n return !!existingTransaction;\r\n \r\n case TransactionPropagation.NOT_SUPPORTED:\r\n case TransactionPropagation.NEVER:\r\n return false;\r\n \r\n default:\r\n return true;\r\n }\r\n }\r\n \r\n /**\r\n * Determine if error should cause rollback\r\n */\r\n shouldRollbackForError(\r\n error: Error,\r\n metadata: EnhancedTransactionMetadata\r\n ): boolean {\r\n // Check noRollbackFor first\r\n if (metadata.noRollbackFor) {\r\n for (const errorType of metadata.noRollbackFor) {\r\n if (error instanceof errorType) {\r\n return false;\r\n }\r\n }\r\n }\r\n \r\n // Check rollbackFor\r\n if (metadata.rollbackFor) {\r\n for (const errorType of metadata.rollbackFor) {\r\n if (error instanceof errorType) {\r\n return true;\r\n }\r\n }\r\n // If rollbackFor is specified but error doesn't match, don't rollback\r\n return false;\r\n }\r\n \r\n // Default: rollback for all errors\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Enhanced @Transactional decorator with propagation support\r\n */\r\nexport function TransactionalWithPropagation(options?: EnhancedTransactionMetadata): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) => {\r\n const originalMethod = descriptor.value;\r\n const metadata: EnhancedTransactionMetadata = {\r\n isolation: options?.isolation || 'READ_COMMITTED',\r\n timeout: options?.timeout || 30000,\r\n readOnly: options?.readOnly || false,\r\n propagation: options?.propagation || TransactionPropagation.REQUIRED,\r\n rollbackFor: options?.rollbackFor,\r\n noRollbackFor: options?.noRollbackFor\r\n };\r\n \r\n Reflect.defineMetadata('transactional', metadata, target, propertyKey);\r\n \r\n descriptor.value = async function (...args: any[]) {\r\n // Import here to avoid circular dependencies\r\n const { getGlobalTransactionManager } = await import('./transaction-manager');\r\n const transactionManager = getGlobalTransactionManager();\r\n \r\n // Handle transaction based on propagation behavior\r\n return await transactionManager.handleTransactional(\r\n this,\r\n propertyKey as string,\r\n args,\r\n originalMethod,\r\n // Try to get context from arguments (if available)\r\n args.find(arg => arg && typeof arg === 'object' && arg.req && arg.res)\r\n );\r\n };\r\n \r\n return descriptor;\r\n };\r\n}\r\n\r\n/**\r\n * Specific propagation decorators for convenience\r\n */\r\nexport function Required(options?: Omit<EnhancedTransactionMetadata, 'propagation'>): MethodDecorator {\r\n return TransactionalWithPropagation({ ...options, propagation: TransactionPropagation.REQUIRED });\r\n}\r\n\r\nexport function RequiresNew(options?: Omit<EnhancedTransactionMetadata, 'propagation'>): MethodDecorator {\r\n return TransactionalWithPropagation({ ...options, propagation: TransactionPropagation.REQUIRES_NEW });\r\n}\r\n\r\nexport function Supports(options?: Omit<EnhancedTransactionMetadata, 'propagation'>): MethodDecorator {\r\n return TransactionalWithPropagation({ ...options, propagation: TransactionPropagation.SUPPORTS });\r\n}\r\n\r\nexport function NotSupported(options?: Omit<EnhancedTransactionMetadata, 'propagation'>): MethodDecorator {\r\n return TransactionalWithPropagation({ ...options, propagation: TransactionPropagation.NOT_SUPPORTED });\r\n}\r\n\r\nexport function Mandatory(options?: Omit<EnhancedTransactionMetadata, 'propagation'>): MethodDecorator {\r\n return TransactionalWithPropagation({ ...options, propagation: TransactionPropagation.MANDATORY });\r\n}\r\n\r\nexport function Never(options?: Omit<EnhancedTransactionMetadata, 'propagation'>): MethodDecorator {\r\n return TransactionalWithPropagation({ ...options, propagation: TransactionPropagation.NEVER });\r\n}",
280
+ "import { TransactionContext } from './transaction-manager';\r\n\r\n// Transaction event types\r\nexport enum TransactionEventType {\r\n BEFORE_BEGIN = 'BEFORE_BEGIN',\r\n AFTER_BEGIN = 'AFTER_BEGIN',\r\n BEFORE_COMMIT = 'BEFORE_COMMIT',\r\n AFTER_COMMIT = 'AFTER_COMMIT',\r\n BEFORE_ROLLBACK = 'BEFORE_ROLLBACK',\r\n AFTER_ROLLBACK = 'AFTER_ROLLBACK',\r\n BEFORE_SAVEPOINT = 'BEFORE_SAVEPOINT',\r\n AFTER_SAVEPOINT = 'AFTER_SAVEPOINT',\r\n BEFORE_ROLLBACK_TO_SAVEPOINT = 'BEFORE_ROLLBACK_TO_SAVEPOINT',\r\n AFTER_ROLLBACK_TO_SAVEPOINT = 'AFTER_ROLLBACK_TO_SAVEPOINT'\r\n}\r\n\r\n// Transaction event interface\r\nexport interface TransactionEvent {\r\n type: TransactionEventType;\r\n context: TransactionContext;\r\n timestamp: Date;\r\n metadata?: any;\r\n error?: Error;\r\n}\r\n\r\n// Transaction event listener interface\r\nexport interface TransactionEventListener {\r\n onTransactionEvent(event: TransactionEvent): Promise<void> | void;\r\n}\r\n\r\n// Specific event listener interfaces\r\nexport interface TransactionBeginListener {\r\n onBeforeBegin?(context: TransactionContext): Promise<void> | void;\r\n onAfterBegin?(context: TransactionContext): Promise<void> | void;\r\n}\r\n\r\nexport interface TransactionCommitListener {\r\n onBeforeCommit?(context: TransactionContext): Promise<void> | void;\r\n onAfterCommit?(context: TransactionContext): Promise<void> | void;\r\n}\r\n\r\nexport interface TransactionRollbackListener {\r\n onBeforeRollback?(context: TransactionContext, error?: Error): Promise<void> | void;\r\n onAfterRollback?(context: TransactionContext, error?: Error): Promise<void> | void;\r\n}\r\n\r\nexport interface TransactionSavepointListener {\r\n onBeforeSavepoint?(context: TransactionContext, name: string): Promise<void> | void;\r\n onAfterSavepoint?(context: TransactionContext, name: string): Promise<void> | void;\r\n onBeforeRollbackToSavepoint?(context: TransactionContext, name: string): Promise<void> | void;\r\n onAfterRollbackToSavepoint?(context: TransactionContext, name: string): Promise<void> | void;\r\n}\r\n\r\n/**\r\n * Transaction event manager\r\n */\r\nexport class TransactionEventManager {\r\n private listeners: TransactionEventListener[] = [];\r\n private beginListeners: TransactionBeginListener[] = [];\r\n private commitListeners: TransactionCommitListener[] = [];\r\n private rollbackListeners: TransactionRollbackListener[] = [];\r\n private savepointListeners: TransactionSavepointListener[] = [];\r\n\r\n /**\r\n * Add a general transaction event listener\r\n */\r\n addListener(listener: TransactionEventListener): void {\r\n this.listeners.push(listener);\r\n }\r\n\r\n /**\r\n * Remove a general transaction event listener\r\n */\r\n removeListener(listener: TransactionEventListener): void {\r\n const index = this.listeners.indexOf(listener);\r\n if (index > -1) {\r\n this.listeners.splice(index, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Add a transaction begin listener\r\n */\r\n addBeginListener(listener: TransactionBeginListener): void {\r\n this.beginListeners.push(listener);\r\n }\r\n\r\n /**\r\n * Add a transaction commit listener\r\n */\r\n addCommitListener(listener: TransactionCommitListener): void {\r\n this.commitListeners.push(listener);\r\n }\r\n\r\n /**\r\n * Add a transaction rollback listener\r\n */\r\n addRollbackListener(listener: TransactionRollbackListener): void {\r\n this.rollbackListeners.push(listener);\r\n }\r\n\r\n /**\r\n * Add a transaction savepoint listener\r\n */\r\n addSavepointListener(listener: TransactionSavepointListener): void {\r\n this.savepointListeners.push(listener);\r\n }\r\n\r\n /**\r\n * Emit a transaction event\r\n */\r\n async emitEvent(event: TransactionEvent): Promise<void> {\r\n // Emit to general listeners\r\n for (const listener of this.listeners) {\r\n try {\r\n await listener.onTransactionEvent(event);\r\n } catch (error) {\r\n console.error('Error in transaction event listener:', error);\r\n }\r\n }\r\n\r\n // Emit to specific listeners\r\n await this.emitSpecificEvent(event);\r\n }\r\n\r\n /**\r\n * Emit event to specific listeners\r\n */\r\n private async emitSpecificEvent(event: TransactionEvent): Promise<void> {\r\n switch (event.type) {\r\n case TransactionEventType.BEFORE_BEGIN:\r\n for (const listener of this.beginListeners) {\r\n if (listener.onBeforeBegin) {\r\n try {\r\n await listener.onBeforeBegin(event.context);\r\n } catch (error) {\r\n console.error('Error in before begin listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case TransactionEventType.AFTER_BEGIN:\r\n for (const listener of this.beginListeners) {\r\n if (listener.onAfterBegin) {\r\n try {\r\n await listener.onAfterBegin(event.context);\r\n } catch (error) {\r\n console.error('Error in after begin listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case TransactionEventType.BEFORE_COMMIT:\r\n for (const listener of this.commitListeners) {\r\n if (listener.onBeforeCommit) {\r\n try {\r\n await listener.onBeforeCommit(event.context);\r\n } catch (error) {\r\n console.error('Error in before commit listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case TransactionEventType.AFTER_COMMIT:\r\n for (const listener of this.commitListeners) {\r\n if (listener.onAfterCommit) {\r\n try {\r\n await listener.onAfterCommit(event.context);\r\n } catch (error) {\r\n console.error('Error in after commit listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case TransactionEventType.BEFORE_ROLLBACK:\r\n for (const listener of this.rollbackListeners) {\r\n if (listener.onBeforeRollback) {\r\n try {\r\n await listener.onBeforeRollback(event.context, event.error);\r\n } catch (error) {\r\n console.error('Error in before rollback listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case TransactionEventType.AFTER_ROLLBACK:\r\n for (const listener of this.rollbackListeners) {\r\n if (listener.onAfterRollback) {\r\n try {\r\n await listener.onAfterRollback(event.context, event.error);\r\n } catch (error) {\r\n console.error('Error in after rollback listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case TransactionEventType.BEFORE_SAVEPOINT:\r\n for (const listener of this.savepointListeners) {\r\n if (listener.onBeforeSavepoint) {\r\n try {\r\n await listener.onBeforeSavepoint(event.context, event.metadata?.name);\r\n } catch (error) {\r\n console.error('Error in before savepoint listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case TransactionEventType.AFTER_SAVEPOINT:\r\n for (const listener of this.savepointListeners) {\r\n if (listener.onAfterSavepoint) {\r\n try {\r\n await listener.onAfterSavepoint(event.context, event.metadata?.name);\r\n } catch (error) {\r\n console.error('Error in after savepoint listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case TransactionEventType.BEFORE_ROLLBACK_TO_SAVEPOINT:\r\n for (const listener of this.savepointListeners) {\r\n if (listener.onBeforeRollbackToSavepoint) {\r\n try {\r\n await listener.onBeforeRollbackToSavepoint(event.context, event.metadata?.name);\r\n } catch (error) {\r\n console.error('Error in before rollback to savepoint listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case TransactionEventType.AFTER_ROLLBACK_TO_SAVEPOINT:\r\n for (const listener of this.savepointListeners) {\r\n if (listener.onAfterRollbackToSavepoint) {\r\n try {\r\n await listener.onAfterRollbackToSavepoint(event.context, event.metadata?.name);\r\n } catch (error) {\r\n console.error('Error in after rollback to savepoint listener:', error);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Clear all listeners\r\n */\r\n clearAllListeners(): void {\r\n this.listeners = [];\r\n this.beginListeners = [];\r\n this.commitListeners = [];\r\n this.rollbackListeners = [];\r\n this.savepointListeners = [];\r\n }\r\n}\r\n\r\n/**\r\n * Transaction event decorators\r\n */\r\nexport function OnTransactionBegin(): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n Reflect.defineMetadata('transaction-event', 'begin', target, propertyKey);\r\n };\r\n}\r\n\r\nexport function OnTransactionCommit(): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n Reflect.defineMetadata('transaction-event', 'commit', target, propertyKey);\r\n };\r\n}\r\n\r\nexport function OnTransactionRollback(): MethodDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n Reflect.defineMetadata('transaction-event', 'rollback', target, propertyKey);\r\n };\r\n}\r\n\r\n/**\r\n * Built-in transaction event listeners\r\n */\r\n\r\n/**\r\n * Transaction logging listener\r\n */\r\nexport class TransactionLoggingListener implements TransactionEventListener {\r\n constructor(private logger: (message: string, data?: any) => void = console.log) { }\r\n\r\n async onTransactionEvent(event: TransactionEvent): Promise<void> {\r\n const message = `Transaction ${event.type}: ${event.context.id}`;\r\n const data = {\r\n timestamp: event.timestamp,\r\n context: {\r\n id: event.context.id,\r\n startTime: event.context.startTime,\r\n isolation: event.context.isolation,\r\n timeout: event.context.timeout,\r\n readOnly: event.context.readOnly,\r\n savepoints: event.context.savepoints,\r\n rollbackOnly: event.context.rollbackOnly\r\n },\r\n metadata: event.metadata,\r\n error: event.error?.message\r\n };\r\n\r\n this.logger(message, data);\r\n }\r\n}\r\n\r\n/**\r\n * Transaction metrics listener\r\n */\r\nexport class TransactionMetricsListener implements TransactionEventListener {\r\n private metrics = {\r\n totalTransactions: 0,\r\n committedTransactions: 0,\r\n rolledBackTransactions: 0,\r\n averageDuration: 0,\r\n totalDuration: 0\r\n };\r\n\r\n async onTransactionEvent(event: TransactionEvent): Promise<void> {\r\n switch (event.type) {\r\n case TransactionEventType.AFTER_BEGIN:\r\n this.metrics.totalTransactions++;\r\n break;\r\n\r\n case TransactionEventType.AFTER_COMMIT:\r\n this.metrics.committedTransactions++;\r\n this.updateDuration(event.context);\r\n break;\r\n\r\n case TransactionEventType.AFTER_ROLLBACK:\r\n this.metrics.rolledBackTransactions++;\r\n this.updateDuration(event.context);\r\n break;\r\n }\r\n }\r\n\r\n private updateDuration(context: TransactionContext): void {\r\n const duration = Date.now() - context.startTime.getTime();\r\n this.metrics.totalDuration += duration;\r\n this.metrics.averageDuration = this.metrics.totalDuration /\r\n (this.metrics.committedTransactions + this.metrics.rolledBackTransactions);\r\n }\r\n\r\n getMetrics() {\r\n return { ...this.metrics };\r\n }\r\n\r\n resetMetrics(): void {\r\n this.metrics = {\r\n totalTransactions: 0,\r\n committedTransactions: 0,\r\n rolledBackTransactions: 0,\r\n averageDuration: 0,\r\n totalDuration: 0\r\n };\r\n }\r\n}\r\n\r\n// Global transaction event manager instance\r\nexport const globalTransactionEventManager = new TransactionEventManager();",
281
+ "import { Plugin } from '../core/plugin';\r\nimport { VeloceTS } from '../core/application';\r\nimport { transactionMiddleware } from './transaction-interceptor';\r\nimport { globalTransactionEventManager, TransactionLoggingListener, TransactionMetricsListener } from './transaction-events';\r\nimport { setGlobalTransactionManager, getGlobalTransactionManager, InMemoryTransactionManager } from './transaction-manager';\r\n\r\n/**\r\n * Transaction plugin configuration\r\n */\r\nexport interface TransactionPluginConfig {\r\n enableLogging?: boolean;\r\n enableMetrics?: boolean;\r\n defaultIsolation?: 'READ_UNCOMMITTED' | 'READ_COMMITTED' | 'REPEATABLE_READ' | 'SERIALIZABLE';\r\n defaultTimeout?: number;\r\n customTransactionManager?: any;\r\n}\r\n\r\n/**\r\n * Transaction management plugin for FastAPI-TS\r\n */\r\nexport class TransactionPlugin implements Plugin {\r\n name = 'transaction';\r\n version = '1.0.0';\r\n \r\n private config: TransactionPluginConfig;\r\n private metricsListener?: TransactionMetricsListener;\r\n \r\n constructor(config?: TransactionPluginConfig) {\r\n this.config = {\r\n enableLogging: true,\r\n enableMetrics: true,\r\n defaultIsolation: 'READ_COMMITTED',\r\n defaultTimeout: 30000,\r\n ...config\r\n };\r\n }\r\n \r\n async install(app: VeloceTS): Promise<void> {\r\n // Set up transaction manager\r\n this.setupTransactionManager();\r\n \r\n // Add transaction middleware\r\n app.use(transactionMiddleware());\r\n \r\n // Set up event listeners\r\n this.setupEventListeners();\r\n \r\n // Register transaction utilities in DI container\r\n this.registerTransactionUtilities(app);\r\n \r\n console.log('✅ Transaction plugin installed successfully');\r\n }\r\n \r\n /**\r\n * Set up transaction manager\r\n */\r\n private setupTransactionManager(): void {\r\n if (this.config.customTransactionManager) {\r\n setGlobalTransactionManager(this.config.customTransactionManager);\r\n } else {\r\n // Use in-memory transaction manager as default\r\n setGlobalTransactionManager(new InMemoryTransactionManager());\r\n }\r\n }\r\n \r\n /**\r\n * Set up event listeners\r\n */\r\n private setupEventListeners(): void {\r\n if (this.config.enableLogging) {\r\n const loggingListener = new TransactionLoggingListener();\r\n globalTransactionEventManager.addListener(loggingListener);\r\n }\r\n \r\n if (this.config.enableMetrics) {\r\n this.metricsListener = new TransactionMetricsListener();\r\n globalTransactionEventManager.addListener(this.metricsListener);\r\n }\r\n }\r\n \r\n /**\r\n * Register transaction utilities in DI container\r\n */\r\n private registerTransactionUtilities(app: VeloceTS): void {\r\n const container = app.getContainer();\r\n \r\n // Create token classes for DI registration\r\n class TransactionEventManagerToken {}\r\n class TransactionMetricsToken {}\r\n class TransactionUtilsToken {}\r\n \r\n // Register transaction event manager\r\n container.register(TransactionEventManagerToken, {\r\n scope: 'singleton',\r\n factory: () => globalTransactionEventManager\r\n });\r\n \r\n // Register transaction metrics\r\n if (this.metricsListener) {\r\n container.register(TransactionMetricsToken, {\r\n scope: 'singleton',\r\n factory: () => ({\r\n getMetrics: () => this.metricsListener!.getMetrics(),\r\n resetMetrics: () => this.metricsListener!.resetMetrics()\r\n })\r\n });\r\n }\r\n \r\n // Register transaction utilities\r\n container.register(TransactionUtilsToken, {\r\n scope: 'singleton',\r\n factory: () => ({\r\n executeInTransaction: async <T>(callback: () => Promise<T>) => {\r\n const transactionManager = getGlobalTransactionManager();\r\n const context = await transactionManager.begin();\r\n \r\n try {\r\n const result = await callback();\r\n \r\n if (context.rollbackOnly) {\r\n await transactionManager.rollback(context);\r\n throw new Error('Transaction marked for rollback');\r\n }\r\n \r\n await transactionManager.commit(context);\r\n return result;\r\n } catch (error) {\r\n await transactionManager.rollback(context);\r\n throw error;\r\n }\r\n },\r\n getCurrentTransaction: () => {\r\n // This would need to be implemented based on the current context\r\n return null;\r\n },\r\n isInTransaction: () => {\r\n // This would need to be implemented based on the current context\r\n return false;\r\n }\r\n })\r\n });\r\n }\r\n \r\n /**\r\n * Get transaction metrics\r\n */\r\n getMetrics() {\r\n return this.metricsListener?.getMetrics();\r\n }\r\n \r\n /**\r\n * Reset transaction metrics\r\n */\r\n resetMetrics(): void {\r\n this.metricsListener?.resetMetrics();\r\n }\r\n \r\n /**\r\n * Add custom event listener\r\n */\r\n addEventListener(listener: any): void {\r\n globalTransactionEventManager.addListener(listener);\r\n }\r\n \r\n /**\r\n * Remove event listener\r\n */\r\n removeEventListener(listener: any): void {\r\n globalTransactionEventManager.removeListener(listener);\r\n }\r\n}\r\n\r\n/**\r\n * Helper function to create transaction plugin\r\n */\r\nexport function createTransactionPlugin(config?: TransactionPluginConfig): TransactionPlugin {\r\n return new TransactionPlugin(config);\r\n}\r\n\r\n/**\r\n * Transaction service for manual transaction management\r\n */\r\nexport class TransactionService {\r\n constructor(private transactionManager: any) {}\r\n \r\n /**\r\n * Execute callback in transaction\r\n */\r\n async executeInTransaction<T>(callback: () => Promise<T>): Promise<T> {\r\n const context = await this.transactionManager.begin();\r\n \r\n try {\r\n const result = await callback();\r\n \r\n if (context.rollbackOnly) {\r\n await this.transactionManager.rollback(context);\r\n throw new Error('Transaction marked for rollback');\r\n }\r\n \r\n await this.transactionManager.commit(context);\r\n return result;\r\n } catch (error) {\r\n await this.transactionManager.rollback(context);\r\n throw error;\r\n }\r\n }\r\n \r\n /**\r\n * Create savepoint\r\n */\r\n async createSavepoint(name: string): Promise<void> {\r\n // This would need access to the current transaction context\r\n // Implementation depends on how context is managed\r\n }\r\n \r\n /**\r\n * Rollback to savepoint\r\n */\r\n async rollbackToSavepoint(name: string): Promise<void> {\r\n // This would need access to the current transaction context\r\n // Implementation depends on how context is managed\r\n }\r\n \r\n /**\r\n * Mark current transaction for rollback only\r\n */\r\n setRollbackOnly(): void {\r\n // This would need access to the current transaction context\r\n // Implementation depends on how context is managed\r\n }\r\n \r\n /**\r\n * Check if currently in transaction\r\n */\r\n isInTransaction(): boolean {\r\n // This would need access to the current transaction context\r\n // Implementation depends on how context is managed\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Transaction template for programmatic transaction management\r\n */\r\nexport class TransactionTemplate {\r\n constructor(\r\n private transactionManager: any,\r\n private defaultOptions?: {\r\n isolation?: string;\r\n timeout?: number;\r\n readOnly?: boolean;\r\n }\r\n ) {}\r\n \r\n /**\r\n * Execute callback with transaction template\r\n */\r\n async execute<T>(\r\n callback: () => Promise<T>,\r\n options?: {\r\n isolation?: string;\r\n timeout?: number;\r\n readOnly?: boolean;\r\n }\r\n ): Promise<T> {\r\n const transactionOptions = { ...this.defaultOptions, ...options };\r\n const context = await this.transactionManager.begin(transactionOptions);\r\n \r\n try {\r\n const result = await callback();\r\n \r\n if (context.rollbackOnly) {\r\n await this.transactionManager.rollback(context);\r\n throw new Error('Transaction marked for rollback');\r\n }\r\n \r\n await this.transactionManager.commit(context);\r\n return result;\r\n } catch (error) {\r\n await this.transactionManager.rollback(context);\r\n throw error;\r\n }\r\n }\r\n \r\n /**\r\n * Execute callback with read-only transaction\r\n */\r\n async executeReadOnly<T>(callback: () => Promise<T>): Promise<T> {\r\n return this.execute(callback, { readOnly: true });\r\n }\r\n \r\n /**\r\n * Execute callback with specific isolation level\r\n */\r\n async executeWithIsolation<T>(\r\n callback: () => Promise<T>,\r\n isolation: string\r\n ): Promise<T> {\r\n return this.execute(callback, { isolation });\r\n }\r\n}",
282
+ "import { z } from 'zod';\r\nimport { PrismaModelMetadata, PrismaFieldMetadata } from './types';\r\n\r\n/**\r\n * Generates Zod schemas from Prisma schema metadata\r\n */\r\nexport class PrismaZodSchemaGenerator {\r\n private modelSchemas = new Map<string, z.ZodSchema>();\r\n \r\n /**\r\n * Generate Zod schema for a Prisma model\r\n */\r\n generateModelSchema(model: PrismaModelMetadata): z.ZodSchema {\r\n if (this.modelSchemas.has(model.name)) {\r\n return this.modelSchemas.get(model.name)!;\r\n }\r\n \r\n const schemaFields: Record<string, z.ZodTypeAny> = {};\r\n \r\n for (const field of model.fields) {\r\n schemaFields[field.name] = this.generateFieldSchema(field);\r\n }\r\n \r\n const schema = z.object(schemaFields);\r\n this.modelSchemas.set(model.name, schema);\r\n \r\n return schema;\r\n }\r\n \r\n /**\r\n * Generate Zod schema for a Prisma field\r\n */\r\n private generateFieldSchema(field: PrismaFieldMetadata): z.ZodTypeAny {\r\n let schema = this.getBaseSchema(field.type);\r\n \r\n // Handle arrays/lists\r\n if (field.isList) {\r\n schema = z.array(schema);\r\n }\r\n \r\n // Handle optional fields\r\n if (field.isOptional) {\r\n schema = schema.optional();\r\n }\r\n \r\n // Add validation for unique fields\r\n if (field.isUnique) {\r\n // Note: Actual uniqueness validation would need database access\r\n // This is just a marker for documentation\r\n schema = schema.describe(`Unique field: ${field.name}`);\r\n }\r\n \r\n return schema;\r\n }\r\n \r\n /**\r\n * Get base Zod schema for Prisma field type\r\n */\r\n private getBaseSchema(prismaType: string): z.ZodTypeAny {\r\n switch (prismaType.toLowerCase()) {\r\n case 'string':\r\n return z.string();\r\n case 'int':\r\n case 'integer':\r\n return z.number().int();\r\n case 'float':\r\n case 'decimal':\r\n return z.number();\r\n case 'boolean':\r\n case 'bool':\r\n return z.boolean();\r\n case 'datetime':\r\n case 'timestamp':\r\n return z.date();\r\n case 'json':\r\n return z.record(z.any());\r\n case 'bytes':\r\n return z.instanceof(Buffer);\r\n case 'bigint':\r\n return z.bigint();\r\n default:\r\n // For custom types or enums, return string by default\r\n return z.string();\r\n }\r\n }\r\n \r\n /**\r\n * Generate create schema (without auto-generated fields)\r\n */\r\n generateCreateSchema(model: PrismaModelMetadata): z.ZodSchema {\r\n const schemaFields: Record<string, z.ZodTypeAny> = {};\r\n \r\n for (const field of model.fields) {\r\n // Skip auto-generated fields like id, createdAt, updatedAt\r\n if (field.isId && field.hasDefaultValue) {\r\n continue;\r\n }\r\n \r\n if (field.name === 'createdAt' || field.name === 'updatedAt') {\r\n continue;\r\n }\r\n \r\n schemaFields[field.name] = this.generateFieldSchema(field);\r\n }\r\n \r\n return z.object(schemaFields);\r\n }\r\n \r\n /**\r\n * Generate update schema (all fields optional)\r\n */\r\n generateUpdateSchema(model: PrismaModelMetadata): z.ZodSchema {\r\n const schemaFields: Record<string, z.ZodTypeAny> = {};\r\n \r\n for (const field of model.fields) {\r\n // Skip id field in updates\r\n if (field.isId) {\r\n continue;\r\n }\r\n \r\n // Skip auto-updated fields\r\n if (field.name === 'updatedAt') {\r\n continue;\r\n }\r\n \r\n let fieldSchema = this.generateFieldSchema(field);\r\n \r\n // Make all fields optional for updates\r\n if (!fieldSchema.isOptional()) {\r\n fieldSchema = fieldSchema.optional();\r\n }\r\n \r\n schemaFields[field.name] = fieldSchema;\r\n }\r\n \r\n return z.object(schemaFields);\r\n }\r\n \r\n /**\r\n * Parse Prisma schema file and extract model metadata\r\n */\r\n static parsePrismaSchema(schemaContent: string): PrismaModelMetadata[] {\r\n const models: PrismaModelMetadata[] = [];\r\n const lines = schemaContent.split('\\n');\r\n \r\n let currentModel: PrismaModelMetadata | null = null;\r\n let inModel = false;\r\n \r\n for (const line of lines) {\r\n const trimmedLine = line.trim();\r\n \r\n // Start of model\r\n if (trimmedLine.startsWith('model ')) {\r\n const modelName = trimmedLine.split(' ')[1];\r\n currentModel = {\r\n name: modelName,\r\n fields: [],\r\n relations: []\r\n };\r\n inModel = true;\r\n continue;\r\n }\r\n \r\n // End of model\r\n if (trimmedLine === '}' && inModel && currentModel) {\r\n models.push(currentModel);\r\n currentModel = null;\r\n inModel = false;\r\n continue;\r\n }\r\n \r\n // Field definition\r\n if (inModel && currentModel && trimmedLine && !trimmedLine.startsWith('//')) {\r\n const field = this.parseField(trimmedLine);\r\n if (field) {\r\n currentModel.fields.push(field);\r\n }\r\n }\r\n }\r\n \r\n return models;\r\n }\r\n \r\n /**\r\n * Parse a Prisma field definition\r\n */\r\n private static parseField(fieldLine: string): PrismaFieldMetadata | null {\r\n // Basic parsing - in a real implementation, you'd want a proper parser\r\n const parts = fieldLine.trim().split(/\\s+/);\r\n if (parts.length < 2) return null;\r\n \r\n const name = parts[0];\r\n const typeInfo = parts[1];\r\n \r\n // Parse type information\r\n const isOptional = typeInfo.includes('?');\r\n const isList = typeInfo.includes('[]');\r\n const baseType = typeInfo.replace('?', '').replace('[]', '');\r\n \r\n // Check for attributes\r\n const attributes = fieldLine.includes('@') ? fieldLine.split('@').slice(1) : [];\r\n const isId = attributes.some(attr => attr.startsWith('id'));\r\n const isUnique = attributes.some(attr => attr.startsWith('unique'));\r\n const hasDefaultValue = attributes.some(attr => attr.startsWith('default'));\r\n \r\n return {\r\n name,\r\n type: baseType,\r\n isOptional,\r\n isList,\r\n isId,\r\n isUnique,\r\n hasDefaultValue\r\n };\r\n }\r\n \r\n /**\r\n * Generate all schemas for a model (base, create, update)\r\n */\r\n generateAllSchemas(model: PrismaModelMetadata) {\r\n return {\r\n base: this.generateModelSchema(model),\r\n create: this.generateCreateSchema(model),\r\n update: this.generateUpdateSchema(model)\r\n };\r\n }\r\n}",
283
+ "import { BaseTransactionManager, TransactionContext, TransactionMetadata } from '../transaction-manager';\r\nimport { PrismaClientLike } from './types';\r\n\r\n/**\r\n * Prisma-specific transaction manager\r\n */\r\nexport class PrismaTransactionManager extends BaseTransactionManager {\r\n private client: PrismaClientLike;\r\n private prismaTransactions = new Map<string, any>();\r\n \r\n constructor(client: PrismaClientLike) {\r\n super();\r\n this.client = client;\r\n }\r\n \r\n async begin(options?: TransactionMetadata): Promise<TransactionContext> {\r\n const context = this.createTransactionContext(options);\r\n \r\n // Prisma doesn't support explicit begin/commit/rollback\r\n // Instead, we'll use the $transaction method when needed\r\n // For now, we'll just track the context\r\n this.prismaTransactions.set(context.id, {\r\n options,\r\n startTime: context.startTime\r\n });\r\n \r\n return context;\r\n }\r\n \r\n async commit(context: TransactionContext): Promise<void> {\r\n // In Prisma, commits are handled automatically by the $transaction method\r\n // We just need to clean up our tracking\r\n this.prismaTransactions.delete(context.id);\r\n this.removeTransactionContext(context);\r\n }\r\n \r\n async rollback(context: TransactionContext): Promise<void> {\r\n // In Prisma, rollbacks are handled automatically by the $transaction method\r\n // when an error is thrown. We just need to clean up our tracking\r\n this.prismaTransactions.delete(context.id);\r\n this.removeTransactionContext(context);\r\n }\r\n \r\n async savepoint(context: TransactionContext, name: string): Promise<void> {\r\n // Prisma doesn't support explicit savepoints\r\n // We'll simulate this by tracking savepoint names\r\n context.savepoints.push(name);\r\n \r\n const transaction = this.prismaTransactions.get(context.id);\r\n if (transaction) {\r\n transaction.savepoints = transaction.savepoints || [];\r\n transaction.savepoints.push(name);\r\n }\r\n }\r\n \r\n async rollbackToSavepoint(context: TransactionContext, name: string): Promise<void> {\r\n // Prisma doesn't support explicit rollback to savepoint\r\n // We'll simulate this by tracking the savepoint state\r\n const index = context.savepoints.indexOf(name);\r\n if (index === -1) {\r\n throw new Error(`Savepoint ${name} not found`);\r\n }\r\n \r\n // Remove savepoints after the target savepoint\r\n context.savepoints = context.savepoints.slice(0, index + 1);\r\n \r\n const transaction = this.prismaTransactions.get(context.id);\r\n if (transaction && transaction.savepoints) {\r\n transaction.savepoints = transaction.savepoints.slice(0, index + 1);\r\n }\r\n }\r\n \r\n /**\r\n * Execute a function within a Prisma transaction\r\n */\r\n async executeInTransaction<T>(\r\n callback: (client: PrismaClientLike) => Promise<T>,\r\n options?: TransactionMetadata\r\n ): Promise<T> {\r\n const prismaOptions: any = {};\r\n \r\n if (options?.timeout) {\r\n prismaOptions.timeout = options.timeout;\r\n }\r\n \r\n if (options?.isolation) {\r\n // Map our isolation levels to Prisma's\r\n const isolationMap = {\r\n 'READ_UNCOMMITTED': 'ReadUncommitted',\r\n 'READ_COMMITTED': 'ReadCommitted',\r\n 'REPEATABLE_READ': 'RepeatableRead',\r\n 'SERIALIZABLE': 'Serializable'\r\n };\r\n prismaOptions.isolationLevel = isolationMap[options.isolation];\r\n }\r\n \r\n return await this.client.$transaction(callback, prismaOptions);\r\n }\r\n \r\n /**\r\n * Enhanced transaction handler that integrates with Prisma's transaction system\r\n */\r\n async handleTransactional<T>(\r\n target: any,\r\n propertyKey: string,\r\n args: any[],\r\n originalMethod: Function,\r\n context?: any\r\n ): Promise<T> {\r\n const metadata = Reflect.getMetadata('transactional', target, propertyKey) as TransactionMetadata;\r\n \r\n if (!metadata) {\r\n return originalMethod.apply(target, args);\r\n }\r\n \r\n // Check if we're already in a Prisma transaction\r\n const existingTransaction = context ? this.getRequestTransaction(context) : null;\r\n \r\n if (existingTransaction) {\r\n // We're already in a transaction, just execute the method\r\n return originalMethod.apply(target, args);\r\n }\r\n \r\n // Start new Prisma transaction\r\n return await this.executeInTransaction(async (prismaClient) => {\r\n // Create transaction context for tracking\r\n const transactionContext = await this.begin(metadata);\r\n \r\n if (context) {\r\n this.setRequestTransaction(context, transactionContext);\r\n }\r\n \r\n try {\r\n // Inject the transaction client into repositories if needed\r\n const result = await this.injectTransactionClient(target, args, originalMethod, prismaClient);\r\n \r\n if (transactionContext.rollbackOnly) {\r\n throw new Error('Transaction marked for rollback');\r\n }\r\n \r\n return result;\r\n } catch (error) {\r\n // Mark transaction for rollback\r\n this.setRollbackOnly(transactionContext);\r\n throw error;\r\n } finally {\r\n if (context) {\r\n this.clearRequestTransaction(context);\r\n }\r\n await this.commit(transactionContext);\r\n }\r\n }, metadata);\r\n }\r\n \r\n /**\r\n * Inject transaction client into repositories\r\n */\r\n private async injectTransactionClient(\r\n target: any,\r\n args: any[],\r\n originalMethod: Function,\r\n transactionClient: PrismaClientLike\r\n ): Promise<any> {\r\n // If the target has repositories, update them to use the transaction client\r\n if (target.repositories) {\r\n const originalRepositories = { ...target.repositories };\r\n \r\n try {\r\n // Update repositories to use transaction client\r\n for (const [key, repo] of Object.entries(target.repositories)) {\r\n if (repo && typeof repo === 'object' && 'client' in repo) {\r\n (repo as any).client = transactionClient;\r\n \r\n // Update delegate if it exists\r\n const modelName = (repo as any).modelName;\r\n if (modelName && (transactionClient as any)[modelName.toLowerCase()]) {\r\n (repo as any).delegate = (transactionClient as any)[modelName.toLowerCase()];\r\n }\r\n }\r\n }\r\n \r\n return await originalMethod.apply(target, args);\r\n } finally {\r\n // Restore original repositories\r\n target.repositories = originalRepositories;\r\n }\r\n }\r\n \r\n return await originalMethod.apply(target, args);\r\n }\r\n \r\n /**\r\n * Create a repository with transaction support\r\n */\r\n createTransactionalRepository<T>(\r\n repositoryClass: new (...args: any[]) => T,\r\n options: any\r\n ): T {\r\n const repository = new repositoryClass(options);\r\n \r\n // Override the withTransaction method to use Prisma's transaction system\r\n if (repository && typeof repository === 'object' && 'withTransaction' in repository) {\r\n const originalWithTransaction = (repository as any).withTransaction;\r\n \r\n (repository as any).withTransaction = async <R>(callback: (repo: T) => Promise<R>): Promise<R> => {\r\n return await this.executeInTransaction(async (transactionClient) => {\r\n // Create a new repository instance with the transaction client\r\n const transactionalRepo = new repositoryClass({\r\n ...options,\r\n client: transactionClient,\r\n delegate: (transactionClient as any)[options.model.toLowerCase()]\r\n });\r\n \r\n return await callback(transactionalRepo);\r\n });\r\n };\r\n }\r\n \r\n return repository;\r\n }\r\n}",
284
+ "import { Plugin } from '../../core/plugin';\r\nimport { VeloceTS } from '../../core/application';\r\nimport { PrismaConfig, PrismaClientLike, PrismaModelMetadata } from './types';\r\nimport { PrismaZodSchemaGenerator } from './schema-generator';\r\nimport { PrismaRepository as PrismaRepositoryClass } from './repository';\r\nimport { PrismaTransactionManager } from './transaction-manager';\r\nimport { setGlobalTransactionManager } from '../transaction-manager';\r\nimport { Repository } from '../decorators';\r\nimport fs from 'fs';\r\nimport path from 'path';\r\n\r\n/**\r\n * Prisma integration plugin for FastAPI-TS\r\n */\r\nexport class PrismaPlugin implements Plugin {\r\n name = 'prisma';\r\n version = '1.0.0';\r\n \r\n private client: PrismaClientLike;\r\n private config: PrismaConfig;\r\n private schemaGenerator: PrismaZodSchemaGenerator;\r\n private transactionManager: PrismaTransactionManager;\r\n private models: Map<string, PrismaModelMetadata> = new Map();\r\n \r\n constructor(client: PrismaClientLike, config?: PrismaConfig) {\r\n this.client = client;\r\n this.config = {\r\n generateZodSchemas: true,\r\n schemaPath: './prisma/schema.prisma',\r\n outputPath: './src/generated/zod-schemas.ts',\r\n ...config\r\n };\r\n this.schemaGenerator = new PrismaZodSchemaGenerator();\r\n this.transactionManager = new PrismaTransactionManager(client);\r\n }\r\n \r\n async install(app: VeloceTS): Promise<void> {\r\n // Connect to database\r\n await this.client.$connect();\r\n \r\n // Set global transaction manager\r\n setGlobalTransactionManager(this.transactionManager);\r\n \r\n // Parse Prisma schema if available\r\n if (this.config.generateZodSchemas && this.config.schemaPath) {\r\n await this.parseAndGenerateSchemas();\r\n }\r\n \r\n // Register repository factory in DI container\r\n this.registerRepositoryFactory(app);\r\n \r\n // Add cleanup on app shutdown\r\n this.registerShutdownHook(app);\r\n \r\n console.log('✅ Prisma plugin installed successfully');\r\n }\r\n \r\n /**\r\n * Parse Prisma schema and generate Zod schemas\r\n */\r\n private async parseAndGenerateSchemas(): Promise<void> {\r\n try {\r\n if (!fs.existsSync(this.config.schemaPath!)) {\r\n console.warn(`⚠️ Prisma schema not found at ${this.config.schemaPath}`);\r\n return;\r\n }\r\n \r\n const schemaContent = fs.readFileSync(this.config.schemaPath!, 'utf-8');\r\n const models = PrismaZodSchemaGenerator.parsePrismaSchema(schemaContent);\r\n \r\n // Store models and generate schemas\r\n for (const model of models) {\r\n this.models.set(model.name, model);\r\n \r\n // Generate Zod schemas\r\n const schemas = this.schemaGenerator.generateAllSchemas(model);\r\n model.zodSchema = schemas.base;\r\n }\r\n \r\n // Generate TypeScript file with Zod schemas\r\n if (this.config.outputPath) {\r\n await this.generateZodSchemaFile();\r\n }\r\n \r\n console.log(`📝 Generated Zod schemas for ${models.length} models`);\r\n } catch (error) {\r\n console.error('❌ Failed to parse Prisma schema:', error);\r\n }\r\n }\r\n \r\n /**\r\n * Generate TypeScript file with Zod schemas\r\n */\r\n private async generateZodSchemaFile(): Promise<void> {\r\n const outputDir = path.dirname(this.config.outputPath!);\r\n \r\n // Ensure output directory exists\r\n if (!fs.existsSync(outputDir)) {\r\n fs.mkdirSync(outputDir, { recursive: true });\r\n }\r\n \r\n let content = `// Auto-generated Zod schemas from Prisma schema\\n`;\r\n content += `// Do not edit this file manually\\n\\n`;\r\n content += `import { z } from 'zod';\\n\\n`;\r\n \r\n // Generate schemas for each model\r\n for (const [modelName, model] of this.models) {\r\n const schemas = this.schemaGenerator.generateAllSchemas(model);\r\n \r\n content += `// ${modelName} schemas\\n`;\r\n content += `export const ${modelName}Schema = ${this.zodSchemaToString(schemas.base)};\\n`;\r\n content += `export const ${modelName}CreateSchema = ${this.zodSchemaToString(schemas.create)};\\n`;\r\n content += `export const ${modelName}UpdateSchema = ${this.zodSchemaToString(schemas.update)};\\n\\n`;\r\n \r\n // Generate TypeScript types\r\n content += `export type ${modelName} = z.infer<typeof ${modelName}Schema>;\\n`;\r\n content += `export type ${modelName}Create = z.infer<typeof ${modelName}CreateSchema>;\\n`;\r\n content += `export type ${modelName}Update = z.infer<typeof ${modelName}UpdateSchema>;\\n\\n`;\r\n }\r\n \r\n fs.writeFileSync(this.config.outputPath!, content);\r\n }\r\n \r\n /**\r\n * Convert Zod schema to string representation (simplified)\r\n */\r\n private zodSchemaToString(schema: any): string {\r\n // This is a simplified implementation\r\n // In a real implementation, you'd want a proper schema serializer\r\n return 'z.object({})'; // Placeholder\r\n }\r\n \r\n /**\r\n * Register repository factory in DI container\r\n */\r\n private registerRepositoryFactory(app: VeloceTS): void {\r\n const container = app.getContainer();\r\n \r\n // Create token classes for DI registration\r\n class PrismaRepositoryFactoryToken {}\r\n class TransactionManagerToken {}\r\n \r\n // Register a factory for creating Prisma repositories\r\n container.register(PrismaRepositoryFactoryToken, {\r\n scope: 'singleton',\r\n factory: () => ({\r\n create: <T>(modelName: string, zodSchema?: any) => {\r\n const delegate = (this.client as any)[modelName.toLowerCase()];\r\n if (!delegate) {\r\n throw new Error(`Model ${modelName} not found in Prisma client`);\r\n }\r\n \r\n return new PrismaRepositoryClass<T>({\r\n client: this.client,\r\n delegate,\r\n model: modelName,\r\n zodSchema\r\n });\r\n }\r\n })\r\n });\r\n \r\n // Register transaction manager\r\n container.register(TransactionManagerToken, {\r\n scope: 'singleton',\r\n factory: () => this.transactionManager\r\n });\r\n }\r\n \r\n /**\r\n * Register shutdown hook to disconnect from database\r\n */\r\n private registerShutdownHook(app: VeloceTS): void {\r\n // Add shutdown handler\r\n process.on('SIGINT', async () => {\r\n console.log('🔌 Disconnecting from database...');\r\n await this.client.$disconnect();\r\n process.exit(0);\r\n });\r\n \r\n process.on('SIGTERM', async () => {\r\n console.log('🔌 Disconnecting from database...');\r\n await this.client.$disconnect();\r\n process.exit(0);\r\n });\r\n }\r\n \r\n /**\r\n * Get model metadata\r\n */\r\n getModel(name: string): PrismaModelMetadata | undefined {\r\n return this.models.get(name);\r\n }\r\n \r\n /**\r\n * Get all models\r\n */\r\n getModels(): Map<string, PrismaModelMetadata> {\r\n return this.models;\r\n }\r\n \r\n /**\r\n * Create a repository for a specific model\r\n */\r\n createRepository<T>(modelName: string, zodSchema?: any): PrismaRepositoryClass<T> {\r\n const delegate = (this.client as any)[modelName.toLowerCase()];\r\n if (!delegate) {\r\n throw new Error(`Model ${modelName} not found in Prisma client`);\r\n }\r\n \r\n return new PrismaRepositoryClass<T>({\r\n client: this.client,\r\n delegate,\r\n model: modelName,\r\n zodSchema\r\n });\r\n }\r\n \r\n /**\r\n * Get the Prisma client\r\n */\r\n getClient(): PrismaClientLike {\r\n return this.client;\r\n }\r\n \r\n /**\r\n * Get the transaction manager\r\n */\r\n getTransactionManager(): PrismaTransactionManager {\r\n return this.transactionManager;\r\n }\r\n}\r\n\r\n/**\r\n * Helper function to create Prisma plugin\r\n */\r\nexport function createPrismaPlugin(client: PrismaClientLike, config?: PrismaConfig): PrismaPlugin {\r\n return new PrismaPlugin(client, config);\r\n}\r\n\r\n/**\r\n * Decorator to automatically inject Prisma repository\r\n */\r\nexport function PrismaRepository(modelName: string, zodSchema?: any): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n // This will be resolved by the DI container\r\n const metadata = {\r\n type: 'prisma-repository',\r\n modelName,\r\n zodSchema\r\n };\r\n \r\n Reflect.defineMetadata('inject', metadata, target, propertyKey);\r\n };\r\n}",
285
+ "import { BaseTransactionManager, TransactionContext, TransactionMetadata } from '../transaction-manager';\r\nimport { DataSourceLike, EntityManagerLike, QueryRunnerLike } from './types';\r\n\r\n/**\r\n * TypeORM-specific transaction manager\r\n */\r\nexport class TypeORMTransactionManager extends BaseTransactionManager {\r\n private dataSource: DataSourceLike;\r\n private activeQueryRunners = new Map<string, QueryRunnerLike>();\r\n \r\n constructor(dataSource: DataSourceLike) {\r\n super();\r\n this.dataSource = dataSource;\r\n }\r\n \r\n async begin(options?: TransactionMetadata): Promise<TransactionContext> {\r\n const context = this.createTransactionContext(options);\r\n \r\n // Create query runner for this transaction\r\n const queryRunner = this.dataSource.createQueryRunner();\r\n await queryRunner.connect();\r\n await queryRunner.startTransaction();\r\n \r\n this.activeQueryRunners.set(context.id, queryRunner);\r\n \r\n return context;\r\n }\r\n \r\n async commit(context: TransactionContext): Promise<void> {\r\n const queryRunner = this.activeQueryRunners.get(context.id);\r\n if (!queryRunner) {\r\n throw new Error(`Transaction ${context.id} not found`);\r\n }\r\n \r\n try {\r\n if (context.rollbackOnly) {\r\n await queryRunner.rollbackTransaction();\r\n } else {\r\n await queryRunner.commitTransaction();\r\n }\r\n } finally {\r\n await queryRunner.release();\r\n this.activeQueryRunners.delete(context.id);\r\n this.removeTransactionContext(context);\r\n }\r\n }\r\n \r\n async rollback(context: TransactionContext): Promise<void> {\r\n const queryRunner = this.activeQueryRunners.get(context.id);\r\n if (!queryRunner) {\r\n throw new Error(`Transaction ${context.id} not found`);\r\n }\r\n \r\n try {\r\n if (queryRunner.isTransactionActive) {\r\n await queryRunner.rollbackTransaction();\r\n }\r\n } finally {\r\n await queryRunner.release();\r\n this.activeQueryRunners.delete(context.id);\r\n this.removeTransactionContext(context);\r\n }\r\n }\r\n \r\n async savepoint(context: TransactionContext, name: string): Promise<void> {\r\n const queryRunner = this.activeQueryRunners.get(context.id);\r\n if (!queryRunner) {\r\n throw new Error(`Transaction ${context.id} not found`);\r\n }\r\n \r\n // Execute savepoint SQL\r\n await queryRunner.manager.query(`SAVEPOINT ${name}`);\r\n context.savepoints.push(name);\r\n }\r\n \r\n async rollbackToSavepoint(context: TransactionContext, name: string): Promise<void> {\r\n const queryRunner = this.activeQueryRunners.get(context.id);\r\n if (!queryRunner) {\r\n throw new Error(`Transaction ${context.id} not found`);\r\n }\r\n \r\n const index = context.savepoints.indexOf(name);\r\n if (index === -1) {\r\n throw new Error(`Savepoint ${name} not found`);\r\n }\r\n \r\n // Execute rollback to savepoint SQL\r\n await queryRunner.manager.query(`ROLLBACK TO SAVEPOINT ${name}`);\r\n \r\n // Remove savepoints after the target savepoint\r\n context.savepoints = context.savepoints.slice(0, index + 1);\r\n }\r\n \r\n /**\r\n * Execute a function within a TypeORM transaction\r\n */\r\n async executeInTransaction<T>(\r\n callback: (manager: EntityManagerLike) => Promise<T>,\r\n options?: TransactionMetadata\r\n ): Promise<T> {\r\n return await this.dataSource.transaction(async (manager: EntityManagerLike) => {\r\n return await callback(manager);\r\n });\r\n }\r\n \r\n /**\r\n * Enhanced transaction handler that integrates with TypeORM's transaction system\r\n */\r\n async handleTransactional<T>(\r\n target: any,\r\n propertyKey: string,\r\n args: any[],\r\n originalMethod: Function,\r\n context?: any\r\n ): Promise<T> {\r\n const metadata = Reflect.getMetadata('transactional', target, propertyKey) as TransactionMetadata;\r\n \r\n if (!metadata) {\r\n return originalMethod.apply(target, args);\r\n }\r\n \r\n // Check if we're already in a TypeORM transaction\r\n const existingTransaction = context ? this.getRequestTransaction(context) : null;\r\n \r\n if (existingTransaction) {\r\n // Use existing transaction (nested transaction support with savepoints)\r\n return this.handleNestedTransaction(existingTransaction, target, args, originalMethod);\r\n }\r\n \r\n // Start new TypeORM transaction\r\n return await this.executeInTransaction(async (manager) => {\r\n // Create transaction context for tracking\r\n const transactionContext = await this.begin(metadata);\r\n \r\n if (context) {\r\n this.setRequestTransaction(context, transactionContext);\r\n }\r\n \r\n try {\r\n // Inject the transaction manager into repositories if needed\r\n const result = await this.injectTransactionManager(target, args, originalMethod, manager);\r\n \r\n if (transactionContext.rollbackOnly) {\r\n throw new Error('Transaction marked for rollback');\r\n }\r\n \r\n return result;\r\n } catch (error) {\r\n // Mark transaction for rollback\r\n this.setRollbackOnly(transactionContext);\r\n throw error;\r\n } finally {\r\n if (context) {\r\n this.clearRequestTransaction(context);\r\n }\r\n // Note: commit/rollback is handled by TypeORM's transaction method\r\n this.removeTransactionContext(transactionContext);\r\n }\r\n }, metadata);\r\n }\r\n \r\n /**\r\n * Handle nested transactions using savepoints\r\n */\r\n protected async handleNestedTransaction<T>(\r\n parentTransaction: TransactionContext,\r\n target: any,\r\n args: any[],\r\n originalMethod: Function\r\n ): Promise<T> {\r\n // Create savepoint for nested transaction\r\n const savepointName = `sp_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\r\n \r\n try {\r\n await this.savepoint(parentTransaction, savepointName);\r\n const result = await originalMethod.apply(target, args);\r\n return result;\r\n } catch (error) {\r\n await this.rollbackToSavepoint(parentTransaction, savepointName);\r\n throw error;\r\n }\r\n }\r\n \r\n /**\r\n * Inject transaction manager into repositories\r\n */\r\n private async injectTransactionManager(\r\n target: any,\r\n args: any[],\r\n originalMethod: Function,\r\n transactionManager: EntityManagerLike\r\n ): Promise<any> {\r\n // If the target has repositories, update them to use the transaction manager\r\n if (target.repositories) {\r\n const originalRepositories = { ...target.repositories };\r\n \r\n try {\r\n // Update repositories to use transaction manager\r\n for (const [key, repo] of Object.entries(target.repositories)) {\r\n if (repo && typeof repo === 'object' && 'dataSource' in repo) {\r\n // Create a new repository instance with the transaction manager\r\n const entity = (repo as any).entity;\r\n const transactionalRepo = transactionManager.getRepository ? \r\n transactionManager.getRepository(entity) : \r\n (repo as any).repository;\r\n \r\n // Replace the repository with the transactional one\r\n target.repositories[key] = new (repo.constructor as any)({\r\n dataSource: (repo as any).dataSource,\r\n repository: transactionalRepo,\r\n entity: entity,\r\n zodSchema: (repo as any).schema\r\n });\r\n }\r\n }\r\n \r\n return await originalMethod.apply(target, args);\r\n } finally {\r\n // Restore original repositories\r\n target.repositories = originalRepositories;\r\n }\r\n }\r\n \r\n return await originalMethod.apply(target, args);\r\n }\r\n \r\n /**\r\n * Create a repository with transaction support\r\n */\r\n createTransactionalRepository<T>(\r\n repositoryClass: new (...args: any[]) => T,\r\n options: any\r\n ): T {\r\n const repository = new repositoryClass(options);\r\n \r\n // Override the withTransaction method to use TypeORM's transaction system\r\n if (repository && typeof repository === 'object' && 'withTransaction' in repository) {\r\n const originalWithTransaction = (repository as any).withTransaction;\r\n \r\n (repository as any).withTransaction = async <R>(callback: (repo: T) => Promise<R>): Promise<R> => {\r\n return await this.executeInTransaction(async (manager) => {\r\n // Create a new repository instance with the transaction manager\r\n const transactionalRepo = manager.getRepository ? \r\n manager.getRepository(options.entity) : \r\n options.repository;\r\n const transactionalInstance = new repositoryClass({\r\n ...options,\r\n repository: transactionalRepo\r\n });\r\n \r\n return await callback(transactionalInstance);\r\n });\r\n };\r\n }\r\n \r\n return repository;\r\n }\r\n \r\n /**\r\n * Get query runner for a transaction context\r\n */\r\n getQueryRunner(context: TransactionContext): QueryRunnerLike | undefined {\r\n return this.activeQueryRunners.get(context.id);\r\n }\r\n \r\n /**\r\n * Check if a transaction is active\r\n */\r\n isTransactionActive(context: TransactionContext): boolean {\r\n const queryRunner = this.activeQueryRunners.get(context.id);\r\n return queryRunner ? queryRunner.isTransactionActive : false;\r\n }\r\n \r\n /**\r\n * Get the data source\r\n */\r\n getDataSource(): DataSourceLike {\r\n return this.dataSource;\r\n }\r\n}",
286
+ "import { Plugin } from '../../core/plugin';\r\nimport { VeloceTS } from '../../core/application';\r\nimport { TypeORMConfig, DataSourceLike, TypeORMEntityMetadata } from './types';\r\nimport { TypeORMRepository } from './repository';\r\nimport { TypeORMTransactionManager } from './transaction-manager';\r\nimport { setGlobalTransactionManager } from '../transaction-manager';\r\nimport fs from 'fs';\r\nimport path from 'path';\r\n\r\n/**\r\n * TypeORM integration plugin for FastAPI-TS\r\n */\r\nexport class TypeORMPlugin implements Plugin {\r\n name = 'typeorm';\r\n version = '1.0.0';\r\n \r\n private dataSource: DataSourceLike;\r\n private config: TypeORMConfig;\r\n private transactionManager: TypeORMTransactionManager;\r\n private entities: Map<string, TypeORMEntityMetadata> = new Map();\r\n \r\n constructor(dataSource: DataSourceLike, config?: Partial<TypeORMConfig>) {\r\n this.dataSource = dataSource;\r\n this.config = {\r\n synchronize: false,\r\n logging: false,\r\n migrationsRun: false,\r\n dropSchema: false,\r\n cache: false,\r\n ...config\r\n } as TypeORMConfig;\r\n this.transactionManager = new TypeORMTransactionManager(dataSource);\r\n }\r\n \r\n async install(app: VeloceTS): Promise<void> {\r\n // Initialize data source if not already initialized\r\n if (!this.dataSource.isInitialized) {\r\n await this.dataSource.initialize();\r\n }\r\n \r\n // Set global transaction manager\r\n setGlobalTransactionManager(this.transactionManager);\r\n \r\n // Extract entity metadata\r\n this.extractEntityMetadata();\r\n \r\n // Register repository factory in DI container\r\n this.registerRepositoryFactory(app);\r\n \r\n // Register migration and seeding utilities\r\n this.registerMigrationUtilities(app);\r\n \r\n // Add cleanup on app shutdown\r\n this.registerShutdownHook(app);\r\n \r\n console.log('✅ TypeORM plugin installed successfully');\r\n }\r\n \r\n /**\r\n * Extract metadata from TypeORM entities\r\n */\r\n private extractEntityMetadata(): void {\r\n try {\r\n // Get all entity metadata from the data source\r\n const entityMetadatas = this.dataSource.entityMetadatas || this.dataSource.manager.connection?.entityMetadatas || [];\r\n \r\n for (const metadata of entityMetadatas) {\r\n const entityMeta: TypeORMEntityMetadata = {\r\n name: metadata.name,\r\n tableName: metadata.tableName,\r\n columns: metadata.columns?.map((col: any) => ({\r\n propertyName: col.propertyName,\r\n type: col.type as string,\r\n isPrimary: col.isPrimary,\r\n isGenerated: col.isGenerated,\r\n isNullable: col.isNullable,\r\n isUnique: col.isUnique,\r\n length: col.length,\r\n default: col.default\r\n })) || [],\r\n relations: metadata.relations?.map((rel: any) => ({\r\n propertyName: rel.propertyName,\r\n type: rel.relationType as any,\r\n target: rel.inverseEntityMetadata?.name || 'unknown',\r\n inverseSide: rel.inverseSidePropertyPath,\r\n joinColumn: rel.joinColumns?.[0]?.databaseName,\r\n joinTable: rel.joinTableName\r\n })) || []\r\n };\r\n \r\n this.entities.set(metadata.name, entityMeta);\r\n }\r\n \r\n console.log(`📝 Extracted metadata for ${this.entities.size} entities`);\r\n } catch (error) {\r\n console.error('❌ Failed to extract entity metadata:', error);\r\n }\r\n }\r\n \r\n /**\r\n * Register repository factory in DI container\r\n */\r\n private registerRepositoryFactory(app: VeloceTS): void {\r\n const container = app.getContainer();\r\n \r\n // Create token classes for DI registration\r\n class TypeORMRepositoryFactoryToken {}\r\n class DataSourceToken {}\r\n class EntityManagerToken {}\r\n class TransactionManagerToken {}\r\n \r\n // Register a factory for creating TypeORM repositories\r\n container.register(TypeORMRepositoryFactoryToken, {\r\n scope: 'singleton',\r\n factory: () => ({\r\n create: <T>(entity: any, zodSchema?: any) => {\r\n const repository = this.dataSource.getRepository<T>(entity);\r\n \r\n return new TypeORMRepository<T>({\r\n dataSource: this.dataSource,\r\n repository,\r\n entity,\r\n zodSchema\r\n });\r\n }\r\n })\r\n });\r\n \r\n // Register data source\r\n container.register(DataSourceToken, {\r\n scope: 'singleton',\r\n factory: () => this.dataSource\r\n });\r\n \r\n // Register entity manager\r\n container.register(EntityManagerToken, {\r\n scope: 'request',\r\n factory: () => this.dataSource.manager\r\n });\r\n \r\n // Register transaction manager\r\n container.register(TransactionManagerToken, {\r\n scope: 'singleton',\r\n factory: () => this.transactionManager\r\n });\r\n }\r\n \r\n /**\r\n * Register migration and seeding utilities\r\n */\r\n private registerMigrationUtilities(app: VeloceTS): void {\r\n const container = app.getContainer();\r\n \r\n // Create token classes for migration utilities\r\n class MigrationRunnerToken {}\r\n class SeederToken {}\r\n \r\n // Register migration runner\r\n container.register(MigrationRunnerToken, {\r\n scope: 'singleton',\r\n factory: () => ({\r\n run: async () => {\r\n if (this.config.migrationsRun && this.dataSource.runMigrations) {\r\n await this.dataSource.runMigrations();\r\n console.log('✅ Migrations executed successfully');\r\n }\r\n },\r\n revert: async () => {\r\n if (this.dataSource.undoLastMigration) {\r\n await this.dataSource.undoLastMigration();\r\n console.log('✅ Last migration reverted successfully');\r\n }\r\n },\r\n generate: async (name: string) => {\r\n // This would require TypeORM CLI integration\r\n console.log(`📝 Generate migration: ${name}`);\r\n }\r\n })\r\n });\r\n \r\n // Register seeder utility\r\n container.register(SeederToken, {\r\n scope: 'singleton',\r\n factory: () => ({\r\n seed: async (seeders: any[]) => {\r\n for (const seeder of seeders) {\r\n if (typeof seeder.run === 'function') {\r\n await seeder.run(this.dataSource);\r\n }\r\n }\r\n console.log('✅ Database seeded successfully');\r\n }\r\n })\r\n });\r\n }\r\n \r\n /**\r\n * Register shutdown hook to close data source\r\n */\r\n private registerShutdownHook(app: VeloceTS): void {\r\n // Add shutdown handler\r\n process.on('SIGINT', async () => {\r\n console.log('🔌 Closing database connection...');\r\n if (this.dataSource.isInitialized) {\r\n await this.dataSource.destroy();\r\n }\r\n process.exit(0);\r\n });\r\n \r\n process.on('SIGTERM', async () => {\r\n console.log('🔌 Closing database connection...');\r\n if (this.dataSource.isInitialized) {\r\n await this.dataSource.destroy();\r\n }\r\n process.exit(0);\r\n });\r\n }\r\n \r\n /**\r\n * Get entity metadata\r\n */\r\n getEntity(name: string): TypeORMEntityMetadata | undefined {\r\n return this.entities.get(name);\r\n }\r\n \r\n /**\r\n * Get all entities\r\n */\r\n getEntities(): Map<string, TypeORMEntityMetadata> {\r\n return this.entities;\r\n }\r\n \r\n /**\r\n * Create a repository for a specific entity\r\n */\r\n createRepository<T>(entity: any, zodSchema?: any): TypeORMRepository<T> {\r\n const repository = this.dataSource.getRepository<T>(entity);\r\n \r\n return new TypeORMRepository<T>({\r\n dataSource: this.dataSource,\r\n repository,\r\n entity,\r\n zodSchema\r\n });\r\n }\r\n \r\n /**\r\n * Get the TypeORM data source\r\n */\r\n getDataSource(): DataSourceLike {\r\n return this.dataSource;\r\n }\r\n \r\n /**\r\n * Get the transaction manager\r\n */\r\n getTransactionManager(): TypeORMTransactionManager {\r\n return this.transactionManager;\r\n }\r\n \r\n /**\r\n * Run migrations\r\n */\r\n async runMigrations(): Promise<void> {\r\n if (this.dataSource.runMigrations) {\r\n await this.dataSource.runMigrations();\r\n console.log('✅ Migrations executed successfully');\r\n } else {\r\n console.warn('⚠️ Migration support not available');\r\n }\r\n }\r\n \r\n /**\r\n * Revert last migration\r\n */\r\n async revertMigration(): Promise<void> {\r\n if (this.dataSource.undoLastMigration) {\r\n await this.dataSource.undoLastMigration();\r\n console.log('✅ Last migration reverted successfully');\r\n } else {\r\n console.warn('⚠️ Migration revert not available');\r\n }\r\n }\r\n \r\n /**\r\n * Synchronize database schema (use with caution in production)\r\n */\r\n async synchronize(): Promise<void> {\r\n if (this.config.synchronize && this.dataSource.synchronize) {\r\n await this.dataSource.synchronize();\r\n console.log('✅ Database schema synchronized');\r\n } else {\r\n console.warn('⚠️ Schema synchronization is disabled or not available');\r\n }\r\n }\r\n \r\n /**\r\n * Drop database schema (use with extreme caution)\r\n */\r\n async dropSchema(): Promise<void> {\r\n if (this.config.dropSchema && this.dataSource.dropDatabase) {\r\n await this.dataSource.dropDatabase();\r\n console.log('✅ Database schema dropped');\r\n } else {\r\n console.warn('⚠️ Schema dropping is disabled or not available');\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Helper function to create TypeORM plugin\r\n */\r\nexport function createTypeORMPlugin(dataSource: DataSourceLike, config?: Partial<TypeORMConfig>): TypeORMPlugin {\r\n return new TypeORMPlugin(dataSource, config);\r\n}\r\n\r\n/**\r\n * Migration base class\r\n */\r\nexport abstract class Migration {\r\n abstract up(queryRunner: any): Promise<void>;\r\n abstract down(queryRunner: any): Promise<void>;\r\n}\r\n\r\n/**\r\n * Seeder base class\r\n */\r\nexport abstract class Seeder {\r\n abstract run(dataSource: DataSourceLike): Promise<void>;\r\n}\r\n\r\n/**\r\n * Entity subscriber base class\r\n */\r\nexport abstract class EntitySubscriber {\r\n abstract listenTo(): any;\r\n \r\n beforeInsert?(event: any): Promise<void> | void;\r\n afterInsert?(event: any): Promise<void> | void;\r\n beforeUpdate?(event: any): Promise<void> | void;\r\n afterUpdate?(event: any): Promise<void> | void;\r\n beforeRemove?(event: any): Promise<void> | void;\r\n afterRemove?(event: any): Promise<void> | void;\r\n}",
287
+ "import 'reflect-metadata';\r\n\r\n/**\r\n * TypeORM-specific decorators for FastAPI-TS integration\r\n */\r\n\r\n// Entity decorator metadata\r\nexport interface TypeORMEntityMetadata {\r\n name?: string;\r\n tableName?: string;\r\n schema?: string;\r\n database?: string;\r\n synchronize?: boolean;\r\n}\r\n\r\n// Repository decorator metadata\r\nexport interface TypeORMRepositoryMetadata {\r\n entity: any;\r\n dataSource?: string;\r\n}\r\n\r\n/**\r\n * Enhanced Entity decorator for TypeORM integration\r\n */\r\nexport function TypeORMEntity(options?: TypeORMEntityMetadata): ClassDecorator {\r\n return (target: any) => {\r\n const metadata: TypeORMEntityMetadata = {\r\n name: options?.name || target.name,\r\n tableName: options?.tableName || target.name.toLowerCase(),\r\n schema: options?.schema,\r\n database: options?.database,\r\n synchronize: options?.synchronize\r\n };\r\n \r\n Reflect.defineMetadata('typeorm:entity', metadata, target);\r\n };\r\n}\r\n\r\n/**\r\n * TypeORM Repository decorator for dependency injection\r\n */\r\nexport function TypeORMRepository(entity: any, dataSource?: string): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata: TypeORMRepositoryMetadata = {\r\n entity,\r\n dataSource\r\n };\r\n \r\n Reflect.defineMetadata('typeorm:repository', metadata, target, propertyKey);\r\n };\r\n}\r\n\r\n/**\r\n * InjectDataSource decorator for injecting TypeORM DataSource\r\n */\r\nexport function InjectDataSource(name?: string): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata = {\r\n type: 'typeorm-datasource',\r\n name: name || 'default'\r\n };\r\n \r\n Reflect.defineMetadata('inject', metadata, target, propertyKey);\r\n };\r\n}\r\n\r\n/**\r\n * InjectEntityManager decorator for injecting TypeORM EntityManager\r\n */\r\nexport function InjectEntityManager(dataSource?: string): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata = {\r\n type: 'typeorm-entity-manager',\r\n dataSource: dataSource || 'default'\r\n };\r\n \r\n Reflect.defineMetadata('inject', metadata, target, propertyKey);\r\n };\r\n}\r\n\r\n/**\r\n * Migration decorator for marking classes as migrations\r\n */\r\nexport function Migration(timestamp: number): ClassDecorator {\r\n return (target: any) => {\r\n const metadata = {\r\n timestamp,\r\n name: target.name\r\n };\r\n \r\n Reflect.defineMetadata('typeorm:migration', metadata, target);\r\n };\r\n}\r\n\r\n/**\r\n * Subscriber decorator for marking classes as entity subscribers\r\n */\r\nexport function Subscriber(): ClassDecorator {\r\n return (target: any) => {\r\n const metadata = {\r\n name: target.name\r\n };\r\n \r\n Reflect.defineMetadata('typeorm:subscriber', metadata, target);\r\n };\r\n}",
288
+ "import { BaseTransactionManager, TransactionContext, TransactionMetadata } from '../transaction-manager';\r\nimport { DrizzleDatabase } from './types';\r\n\r\n/**\r\n * Drizzle-specific transaction manager\r\n */\r\nexport class DrizzleTransactionManager extends BaseTransactionManager {\r\n private database: DrizzleDatabase;\r\n private drizzleTransactions = new Map<string, any>();\r\n \r\n constructor(database: DrizzleDatabase) {\r\n super();\r\n this.database = database;\r\n }\r\n \r\n async begin(options?: TransactionMetadata): Promise<TransactionContext> {\r\n const context = this.createTransactionContext(options);\r\n \r\n // Drizzle handles transactions through the transaction method\r\n // We'll track the context for nested transaction support\r\n this.drizzleTransactions.set(context.id, {\r\n options,\r\n startTime: context.startTime\r\n });\r\n \r\n return context;\r\n }\r\n \r\n async commit(context: TransactionContext): Promise<void> {\r\n // In Drizzle, commits are handled automatically by the transaction method\r\n // We just need to clean up our tracking\r\n this.drizzleTransactions.delete(context.id);\r\n this.removeTransactionContext(context);\r\n }\r\n \r\n async rollback(context: TransactionContext): Promise<void> {\r\n // In Drizzle, rollbacks are handled automatically by the transaction method\r\n // when an error is thrown. We just need to clean up our tracking\r\n this.drizzleTransactions.delete(context.id);\r\n this.removeTransactionContext(context);\r\n }\r\n \r\n async savepoint(context: TransactionContext, name: string): Promise<void> {\r\n // Drizzle doesn't have explicit savepoint support in the API\r\n // We'll simulate this by tracking savepoint names\r\n context.savepoints.push(name);\r\n \r\n const transaction = this.drizzleTransactions.get(context.id);\r\n if (transaction) {\r\n transaction.savepoints = transaction.savepoints || [];\r\n transaction.savepoints.push(name);\r\n }\r\n }\r\n \r\n async rollbackToSavepoint(context: TransactionContext, name: string): Promise<void> {\r\n // Drizzle doesn't have explicit rollback to savepoint support\r\n // We'll simulate this by tracking the savepoint state\r\n const index = context.savepoints.indexOf(name);\r\n if (index === -1) {\r\n throw new Error(`Savepoint ${name} not found`);\r\n }\r\n \r\n // Remove savepoints after the target savepoint\r\n context.savepoints = context.savepoints.slice(0, index + 1);\r\n \r\n const transaction = this.drizzleTransactions.get(context.id);\r\n if (transaction && transaction.savepoints) {\r\n transaction.savepoints = transaction.savepoints.slice(0, index + 1);\r\n }\r\n }\r\n \r\n /**\r\n * Execute a function within a Drizzle transaction\r\n */\r\n async executeInTransaction<T>(\r\n callback: (db: DrizzleDatabase) => Promise<T>,\r\n options?: TransactionMetadata\r\n ): Promise<T> {\r\n return await this.database.transaction(async (tx) => {\r\n return await callback(tx);\r\n });\r\n }\r\n \r\n /**\r\n * Enhanced transaction handler that integrates with Drizzle's transaction system\r\n */\r\n async handleTransactional<T>(\r\n target: any,\r\n propertyKey: string,\r\n args: any[],\r\n originalMethod: Function,\r\n context?: any\r\n ): Promise<T> {\r\n const metadata = Reflect.getMetadata('transactional', target, propertyKey) as TransactionMetadata;\r\n \r\n if (!metadata) {\r\n return originalMethod.apply(target, args);\r\n }\r\n \r\n // Check if we're already in a Drizzle transaction\r\n const existingTransaction = context ? this.getRequestTransaction(context) : null;\r\n \r\n if (existingTransaction) {\r\n // We're already in a transaction, just execute the method\r\n return originalMethod.apply(target, args);\r\n }\r\n \r\n // Start new Drizzle transaction\r\n return await this.executeInTransaction(async (tx) => {\r\n // Create transaction context for tracking\r\n const transactionContext = await this.begin(metadata);\r\n \r\n if (context) {\r\n this.setRequestTransaction(context, transactionContext);\r\n }\r\n \r\n try {\r\n // Inject the transaction database into repositories if needed\r\n const result = await this.injectTransactionDatabase(target, args, originalMethod, tx);\r\n \r\n if (transactionContext.rollbackOnly) {\r\n throw new Error('Transaction marked for rollback');\r\n }\r\n \r\n return result;\r\n } catch (error) {\r\n // Mark transaction for rollback\r\n this.setRollbackOnly(transactionContext);\r\n throw error;\r\n } finally {\r\n if (context) {\r\n this.clearRequestTransaction(context);\r\n }\r\n await this.commit(transactionContext);\r\n }\r\n }, metadata);\r\n }\r\n \r\n /**\r\n * Inject transaction database into repositories\r\n */\r\n private async injectTransactionDatabase(\r\n target: any,\r\n args: any[],\r\n originalMethod: Function,\r\n transactionDatabase: DrizzleDatabase\r\n ): Promise<any> {\r\n // If the target has repositories, update them to use the transaction database\r\n if (target.repositories) {\r\n const originalRepositories = { ...target.repositories };\r\n \r\n try {\r\n // Update repositories to use transaction database\r\n for (const [key, repo] of Object.entries(target.repositories)) {\r\n if (repo && typeof repo === 'object' && 'database' in repo) {\r\n // Create a new repository instance with the transaction database\r\n const table = (repo as any).table;\r\n const zodSchema = (repo as any).schema;\r\n \r\n target.repositories[key] = new (repo.constructor as any)({\r\n database: transactionDatabase,\r\n table: table,\r\n zodSchema: zodSchema\r\n });\r\n }\r\n }\r\n \r\n return await originalMethod.apply(target, args);\r\n } finally {\r\n // Restore original repositories\r\n target.repositories = originalRepositories;\r\n }\r\n }\r\n \r\n return await originalMethod.apply(target, args);\r\n }\r\n \r\n /**\r\n * Create a repository with transaction support\r\n */\r\n createTransactionalRepository<T>(\r\n repositoryClass: new (...args: any[]) => T,\r\n options: any\r\n ): T {\r\n const repository = new repositoryClass(options);\r\n \r\n // Override the withTransaction method to use Drizzle's transaction system\r\n if (repository && typeof repository === 'object' && 'withTransaction' in repository) {\r\n const originalWithTransaction = (repository as any).withTransaction;\r\n \r\n (repository as any).withTransaction = async <R>(callback: (repo: T) => Promise<R>): Promise<R> => {\r\n return await this.executeInTransaction(async (tx) => {\r\n // Create a new repository instance with the transaction database\r\n const transactionalRepo = new repositoryClass({\r\n ...options,\r\n database: tx\r\n });\r\n \r\n return await callback(transactionalRepo);\r\n });\r\n };\r\n }\r\n \r\n return repository;\r\n }\r\n \r\n /**\r\n * Execute multiple operations in a single transaction\r\n */\r\n async batch<T extends readonly unknown[]>(\r\n operations: readonly [...{ [K in keyof T]: () => Promise<T[K]> }]\r\n ): Promise<T> {\r\n return await this.executeInTransaction(async (tx) => {\r\n const results: any[] = [];\r\n \r\n for (const operation of operations) {\r\n const result = await operation();\r\n results.push(result);\r\n }\r\n \r\n return results as unknown as T;\r\n });\r\n }\r\n \r\n /**\r\n * Execute operations with retry logic\r\n */\r\n async executeWithRetry<T>(\r\n operation: (db: DrizzleDatabase) => Promise<T>,\r\n options: {\r\n maxRetries?: number;\r\n retryDelay?: number;\r\n retryCondition?: (error: any) => boolean;\r\n } = {}\r\n ): Promise<T> {\r\n const {\r\n maxRetries = 3,\r\n retryDelay = 1000,\r\n retryCondition = (error) => error.code === 'SERIALIZATION_FAILURE' || error.code === 'DEADLOCK_DETECTED'\r\n } = options;\r\n \r\n let lastError: any;\r\n \r\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\r\n try {\r\n return await this.executeInTransaction(operation);\r\n } catch (error) {\r\n lastError = error;\r\n \r\n if (attempt === maxRetries || !retryCondition(error)) {\r\n throw error;\r\n }\r\n \r\n // Wait before retrying\r\n await new Promise(resolve => setTimeout(resolve, retryDelay * Math.pow(2, attempt)));\r\n }\r\n }\r\n \r\n throw lastError;\r\n }\r\n \r\n /**\r\n * Get the database instance\r\n */\r\n getDatabase(): DrizzleDatabase {\r\n return this.database;\r\n }\r\n \r\n /**\r\n * Check if currently in a transaction\r\n */\r\n isInTransaction(): boolean {\r\n return this.drizzleTransactions.size > 0;\r\n }\r\n \r\n /**\r\n * Get active transaction count\r\n */\r\n getActiveTransactionCount(): number {\r\n return this.drizzleTransactions.size;\r\n }\r\n}",
289
+ "import { Plugin } from '../../core/plugin';\r\nimport { VeloceTS } from '../../core/application';\r\nimport { DrizzleConfig, DrizzleDatabase, DrizzleTable, DrizzleTableMetadata } from './types';\r\nimport { DrizzleRepository as DrizzleRepositoryClass } from './repository';\r\nimport { DrizzleTransactionManager } from './transaction-manager';\r\nimport { setGlobalTransactionManager } from '../transaction-manager';\r\nimport { DrizzleZodSchemaConverter } from './schema-converter';\r\nimport { createChildLogger } from '../../logging';\r\n\r\n// Re-export repository class for convenience\r\nexport { DrizzleRepository } from './repository';\r\n\r\n/**\r\n * Drizzle ORM integration plugin for VeloceTS\r\n * \r\n * Provides seamless integration with Drizzle ORM, including:\r\n * - Automatic repository generation from schemas\r\n * - Transaction management with decorator support\r\n * - Zod schema conversion and validation\r\n * - Query builder utilities\r\n * - Database seeding support\r\n */\r\nexport class DrizzlePlugin implements Plugin {\r\n name = 'drizzle';\r\n version = '1.0.0';\r\n \r\n private database: DrizzleDatabase;\r\n private config: DrizzleConfig;\r\n private transactionManager: DrizzleTransactionManager;\r\n private schemaConverter: DrizzleZodSchemaConverter;\r\n private tables: Map<string, DrizzleTable> = new Map();\r\n private tableMetadata: Map<string, DrizzleTableMetadata> = new Map();\r\n private logger = createChildLogger({ component: 'DrizzlePlugin' });\r\n \r\n constructor(database: DrizzleDatabase, config?: DrizzleConfig) {\r\n this.database = database;\r\n this.config = {\r\n logger: false,\r\n mode: 'default',\r\n ...config\r\n };\r\n this.transactionManager = new DrizzleTransactionManager(database);\r\n this.schemaConverter = new DrizzleZodSchemaConverter();\r\n }\r\n \r\n async install(app: VeloceTS): Promise<void> {\r\n try {\r\n this.logger.info('Installing Drizzle ORM plugin...');\r\n \r\n // Set global transaction manager\r\n setGlobalTransactionManager(this.transactionManager);\r\n this.logger.debug('Global transaction manager configured');\r\n \r\n // Register schema if provided\r\n if (this.config.schema) {\r\n this.registerSchema(this.config.schema);\r\n }\r\n \r\n // Register repository factory in DI container\r\n this.registerRepositoryFactory(app);\r\n \r\n // Register database utilities\r\n this.registerDatabaseUtilities(app);\r\n \r\n this.logger.info('✅ Drizzle plugin installed successfully');\r\n } catch (error) {\r\n const err = error instanceof Error ? error : new Error(String(error));\r\n this.logger.error('Failed to install Drizzle plugin', err);\r\n throw new Error(`Drizzle plugin installation failed: ${err.message}`);\r\n }\r\n }\r\n \r\n /**\r\n * Register Drizzle schema tables\r\n * @param schema - Object containing Drizzle table definitions\r\n */\r\n private registerSchema(schema: Record<string, unknown>): void {\r\n let registeredCount = 0;\r\n let skippedCount = 0;\r\n \r\n for (const [tableName, table] of Object.entries(schema)) {\r\n if (this.isValidDrizzleTable(table)) {\r\n try {\r\n this.tables.set(tableName, table);\r\n \r\n // Extract metadata and generate Zod schemas\r\n const metadata = this.schemaConverter.extractTableMetadata(table);\r\n this.tableMetadata.set(tableName, metadata);\r\n registeredCount++;\r\n \r\n this.logger.debug(`Registered table: ${tableName}`);\r\n } catch (error) {\r\n const err = error instanceof Error ? error : new Error(String(error));\r\n this.logger.error(`Failed to register table ${tableName}`, err, { tableName });\r\n skippedCount++;\r\n }\r\n } else {\r\n this.logger.debug(`Skipped invalid table: ${tableName}`);\r\n skippedCount++;\r\n }\r\n }\r\n \r\n this.logger.info(`📝 Registered ${registeredCount} Drizzle table(s)${skippedCount > 0 ? ` (${skippedCount} skipped)` : ''}`);\r\n }\r\n \r\n /**\r\n * Check if an object is a valid Drizzle table\r\n * @param obj - Object to validate\r\n * @returns true if object is a valid Drizzle table\r\n */\r\n private isValidDrizzleTable(obj: unknown): obj is DrizzleTable {\r\n if (!obj || typeof obj !== 'object') {\r\n return false;\r\n }\r\n \r\n const table = obj as any;\r\n \r\n // Check for Drizzle table structure\r\n if (!table._ || typeof table._ !== 'object') {\r\n return false;\r\n }\r\n \r\n // Validate name\r\n if (typeof table._.name !== 'string' || table._.name.trim().length === 0) {\r\n return false;\r\n }\r\n \r\n // Validate columns exist and is non-empty object\r\n if (!table._.columns || typeof table._.columns !== 'object') {\r\n return false;\r\n }\r\n \r\n // Ensure at least one column exists\r\n if (Object.keys(table._.columns).length === 0) {\r\n this.logger.warn(`Table ${table._.name} has no columns defined`);\r\n return false;\r\n }\r\n \r\n return true;\r\n }\r\n \r\n /**\r\n * Register repository factory in DI container\r\n * @param app - VeloceTS application instance\r\n */\r\n private registerRepositoryFactory(app: VeloceTS): void {\r\n const container = app.getContainer();\r\n \r\n // Register a factory for creating Drizzle repositories\r\n container.register('DrizzleRepositoryFactory', {\r\n scope: 'singleton',\r\n factory: () => ({\r\n create: <T>(tableName: string, zodSchema?: any) => {\r\n const table = this.tables.get(tableName);\r\n if (!table) {\r\n throw new Error(`Table ${tableName} not found in Drizzle schema`);\r\n }\r\n \r\n return new DrizzleRepositoryClass<T>({\r\n database: this.database,\r\n table,\r\n zodSchema: zodSchema || this.tableMetadata.get(tableName)?.zodSchema\r\n });\r\n },\r\n createFromTable: <T>(table: DrizzleTable, zodSchema?: any) => {\r\n return new DrizzleRepositoryClass<T>({\r\n database: this.database,\r\n table,\r\n zodSchema\r\n });\r\n }\r\n })\r\n });\r\n \r\n // Register database instance\r\n container.register('DrizzleDatabase', {\r\n scope: 'singleton',\r\n factory: () => this.database\r\n });\r\n \r\n // Register transaction manager\r\n container.register('TransactionManager', {\r\n scope: 'singleton',\r\n factory: () => this.transactionManager\r\n });\r\n \r\n // Register schema converter\r\n container.register('DrizzleSchemaConverter', {\r\n scope: 'singleton',\r\n factory: () => this.schemaConverter\r\n });\r\n }\r\n \r\n /**\r\n * Register database utilities\r\n * @param app - VeloceTS application instance\r\n */\r\n private registerDatabaseUtilities(app: VeloceTS): void {\r\n const container = app.getContainer();\r\n \r\n // Register query builder utility\r\n container.register('QueryBuilder', {\r\n scope: 'request',\r\n factory: () => ({\r\n select: (fields?: any) => this.database.select(fields),\r\n insert: (table: DrizzleTable) => this.database.insert(table),\r\n update: (table: DrizzleTable) => this.database.update(table),\r\n delete: (table: DrizzleTable) => this.database.delete(table),\r\n raw: (sql: string, params?: any[]) => this.database.execute({ sql, params })\r\n })\r\n });\r\n \r\n // Note: Migration utilities are handled by drizzle-kit CLI\r\n // See: https://orm.drizzle.team/kit-docs/overview\r\n // Users should run: \r\n // - drizzle-kit generate:pg (or mysql/sqlite)\r\n // - drizzle-kit push:pg\r\n // - drizzle-kit migrate\r\n \r\n // Register seeder utility\r\n container.register('Seeder', {\r\n scope: 'singleton',\r\n factory: () => ({\r\n seed: async (seeders: DrizzleSeeder[]) => {\r\n const logger = createChildLogger({ component: 'Seeder' });\r\n try {\r\n logger.info(`Running ${seeders.length} seeder(s)...`);\r\n await this.transactionManager.executeInTransaction(async (tx) => {\r\n for (const seeder of seeders) {\r\n if (typeof seeder.run === 'function') {\r\n logger.debug(`Running seeder: ${seeder.constructor.name}`);\r\n await seeder.run(tx);\r\n } else {\r\n logger.warn(`Skipping invalid seeder (no run method): ${seeder.constructor.name}`);\r\n }\r\n }\r\n });\r\n logger.info('✅ Database seeded successfully');\r\n } catch (error) {\r\n const err = error instanceof Error ? error : new Error(String(error));\r\n logger.error('Failed to seed database', err);\r\n throw new Error(`Database seeding failed: ${err.message}`);\r\n }\r\n }\r\n })\r\n });\r\n }\r\n \r\n /**\r\n * Get table by name\r\n */\r\n getTable(name: string): DrizzleTable | undefined {\r\n return this.tables.get(name);\r\n }\r\n \r\n /**\r\n * Get all registered tables\r\n */\r\n getTables(): Map<string, DrizzleTable> {\r\n return this.tables;\r\n }\r\n \r\n /**\r\n * Get table metadata\r\n */\r\n getTableMetadata(name: string): DrizzleTableMetadata | undefined {\r\n return this.tableMetadata.get(name);\r\n }\r\n \r\n /**\r\n * Get all table metadata\r\n */\r\n getAllTableMetadata(): Map<string, DrizzleTableMetadata> {\r\n return this.tableMetadata;\r\n }\r\n \r\n /**\r\n * Create a repository for a specific table\r\n * @param tableName - Name of the table to create repository for\r\n * @param zodSchema - Optional Zod schema for validation\r\n * @returns DrizzleRepository instance\r\n * @throws Error if table is not found\r\n */\r\n createRepository<T>(tableName: string, zodSchema?: any): DrizzleRepositoryClass<T> {\r\n const table = this.tables.get(tableName);\r\n if (!table) {\r\n throw new Error(`Table ${tableName} not found in Drizzle schema`);\r\n }\r\n \r\n return new DrizzleRepositoryClass<T>({\r\n database: this.database,\r\n table,\r\n zodSchema: zodSchema || this.tableMetadata.get(tableName)?.zodSchema\r\n });\r\n }\r\n \r\n /**\r\n * Create a repository from a table instance\r\n * @param table - Drizzle table instance\r\n * @param zodSchema - Optional Zod schema for validation\r\n * @returns DrizzleRepository instance\r\n */\r\n createRepositoryFromTable<T>(table: DrizzleTable, zodSchema?: any): DrizzleRepositoryClass<T> {\r\n return new DrizzleRepositoryClass<T>({\r\n database: this.database,\r\n table,\r\n zodSchema\r\n });\r\n }\r\n \r\n /**\r\n * Get the Drizzle database instance\r\n */\r\n getDatabase(): DrizzleDatabase {\r\n return this.database;\r\n }\r\n \r\n /**\r\n * Get the transaction manager\r\n */\r\n getTransactionManager(): DrizzleTransactionManager {\r\n return this.transactionManager;\r\n }\r\n \r\n /**\r\n * Get the schema converter\r\n */\r\n getSchemaConverter(): DrizzleZodSchemaConverter {\r\n return this.schemaConverter;\r\n }\r\n \r\n /**\r\n * Add a table to the schema dynamically\r\n * @param name - Table name\r\n * @param table - Drizzle table instance\r\n */\r\n addTable(name: string, table: DrizzleTable): void {\r\n if (!this.isValidDrizzleTable(table)) {\r\n throw new Error(`Invalid Drizzle table: ${name}`);\r\n }\r\n \r\n this.tables.set(name, table);\r\n \r\n // Extract metadata and generate Zod schema\r\n const metadata = this.schemaConverter.extractTableMetadata(table);\r\n this.tableMetadata.set(name, metadata);\r\n \r\n this.logger.debug(`Added table dynamically: ${name}`);\r\n }\r\n \r\n /**\r\n * Remove a table from the schema\r\n * @param name - Table name to remove\r\n * @returns true if table was removed, false if it didn't exist\r\n */\r\n removeTable(name: string): boolean {\r\n const hadTable = this.tables.has(name);\r\n this.tables.delete(name);\r\n this.tableMetadata.delete(name);\r\n \r\n if (hadTable) {\r\n this.logger.debug(`Removed table: ${name}`);\r\n }\r\n \r\n return hadTable;\r\n }\r\n \r\n /**\r\n * Generate Zod schemas for all tables\r\n */\r\n generateZodSchemas(): Record<string, any> {\r\n const schemas: Record<string, any> = {};\r\n \r\n for (const [tableName, table] of this.tables) {\r\n const allSchemas = this.schemaConverter.generateAllSchemas(table);\r\n schemas[tableName] = allSchemas;\r\n }\r\n \r\n return schemas;\r\n }\r\n \r\n /**\r\n * Execute raw SQL query\r\n * @param sql - Raw SQL query string\r\n * @param params - Query parameters\r\n * @returns Query result\r\n * @warning Use with caution - prefer using the query builder for type safety\r\n */\r\n async executeRaw(sql: string, params?: any[]): Promise<any> {\r\n try {\r\n this.logger.debug('Executing raw SQL query');\r\n const result = await this.database.execute({ sql, params });\r\n return result;\r\n } catch (error) {\r\n const err = error instanceof Error ? error : new Error(String(error));\r\n this.logger.error('Raw SQL query failed', err);\r\n throw new Error(`SQL execution failed: ${err.message}`);\r\n }\r\n }\r\n \r\n /**\r\n * Execute multiple queries in a transaction\r\n * @param callback - Async function that receives transaction database instance\r\n * @returns Result of the callback\r\n * @throws Error if transaction fails\r\n */\r\n async executeInTransaction<T>(callback: (db: DrizzleDatabase) => Promise<T>): Promise<T> {\r\n try {\r\n return await this.transactionManager.executeInTransaction(callback);\r\n } catch (error) {\r\n const err = error instanceof Error ? error : new Error(String(error));\r\n this.logger.error('Transaction failed', err);\r\n throw error;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Helper function to create Drizzle plugin\r\n */\r\nexport function createDrizzlePlugin(database: DrizzleDatabase, config?: DrizzleConfig): DrizzlePlugin {\r\n return new DrizzlePlugin(database, config);\r\n}\r\n\r\n/**\r\n * Decorator to automatically inject Drizzle repository\r\n * @param tableName - Name of the table to inject repository for\r\n * @param zodSchema - Optional Zod schema for validation\r\n * @returns Property decorator\r\n * \r\n * @example\r\n * ```typescript\r\n * class UserService {\r\n * @InjectDrizzleRepository('users', UserSchema)\r\n * private userRepo!: DrizzleRepository<User>;\r\n * }\r\n * ```\r\n * \r\n * @deprecated This decorator is not yet fully implemented. \r\n * Use dependency injection or direct instantiation instead:\r\n * ```typescript\r\n * const factory = container.resolve('DrizzleRepositoryFactory');\r\n * const repo = factory.create<User>('users');\r\n * ```\r\n */\r\nexport function InjectDrizzleRepository(tableName: string, zodSchema?: any): PropertyDecorator {\r\n return (target: any, propertyKey: string | symbol) => {\r\n const metadata = {\r\n type: 'drizzle-repository',\r\n tableName,\r\n zodSchema\r\n };\r\n \r\n Reflect.defineMetadata('inject', metadata, target, propertyKey);\r\n \r\n // TODO: Implement automatic injection in the DI container\r\n // This would require intercepting property access and resolving from container\r\n const logger = createChildLogger({ component: 'DrizzleRepository' });\r\n logger.warn('@InjectDrizzleRepository decorator is not fully implemented yet. Consider using factory pattern instead.');\r\n };\r\n}\r\n\r\n/**\r\n * Seeder base class for Drizzle\r\n */\r\nexport abstract class DrizzleSeeder {\r\n abstract run(database: DrizzleDatabase): Promise<void>;\r\n}\r\n\r\n/**\r\n * Migration base class for Drizzle (placeholder)\r\n */\r\nexport abstract class DrizzleMigration {\r\n abstract up(database: DrizzleDatabase): Promise<void>;\r\n abstract down(database: DrizzleDatabase): Promise<void>;\r\n}",
290
+ "import { z } from 'zod';\r\nimport { DrizzleTable, DrizzleColumn, DrizzleTableMetadata, DrizzleColumnMetadata } from './types';\r\n\r\n/**\r\n * Converts Drizzle schemas to Zod schemas for validation\r\n */\r\nexport class DrizzleZodSchemaConverter {\r\n private tableSchemas = new Map<string, z.ZodSchema>();\r\n \r\n /**\r\n * Convert Drizzle table schema to Zod schema\r\n */\r\n convertTableToZod(table: DrizzleTable): z.ZodSchema {\r\n const tableName = table._.name;\r\n \r\n if (this.tableSchemas.has(tableName)) {\r\n return this.tableSchemas.get(tableName)!;\r\n }\r\n \r\n const schemaFields: Record<string, z.ZodTypeAny> = {};\r\n \r\n for (const [columnName, column] of Object.entries(table._.columns)) {\r\n schemaFields[columnName] = this.convertColumnToZod(column);\r\n }\r\n \r\n const schema = z.object(schemaFields);\r\n this.tableSchemas.set(tableName, schema);\r\n \r\n return schema;\r\n }\r\n \r\n /**\r\n * Convert Drizzle column to Zod schema\r\n */\r\n private convertColumnToZod(column: DrizzleColumn): z.ZodTypeAny {\r\n let schema = this.getBaseZodSchema(column);\r\n \r\n // Handle nullable columns\r\n if (!column._.notNull) {\r\n schema = schema.nullable();\r\n }\r\n \r\n // Handle optional columns (those with defaults or nullable)\r\n if (column._.hasDefault || !column._.notNull) {\r\n schema = schema.optional();\r\n }\r\n \r\n return schema;\r\n }\r\n \r\n /**\r\n * Get base Zod schema for Drizzle column type\r\n */\r\n private getBaseZodSchema(column: DrizzleColumn): z.ZodTypeAny {\r\n const dataType = column._.dataType.toLowerCase();\r\n const columnType = column._.columnType.toLowerCase();\r\n \r\n // Handle enum types\r\n if (column._.enumValues && column._.enumValues.length > 0) {\r\n return z.enum(column._.enumValues as [string, ...string[]]);\r\n }\r\n \r\n // Handle specific column types\r\n switch (columnType) {\r\n case 'serial':\r\n case 'bigserial':\r\n return z.number().int().positive();\r\n case 'boolean':\r\n return z.boolean();\r\n case 'date':\r\n return z.date();\r\n case 'timestamp':\r\n case 'timestamptz':\r\n return z.date();\r\n case 'json':\r\n case 'jsonb':\r\n return z.record(z.any());\r\n case 'uuid':\r\n return z.string().uuid();\r\n case 'text':\r\n case 'varchar':\r\n case 'char':\r\n return z.string();\r\n case 'integer':\r\n case 'int':\r\n case 'int4':\r\n return z.number().int();\r\n case 'bigint':\r\n case 'int8':\r\n return z.bigint();\r\n case 'smallint':\r\n case 'int2':\r\n return z.number().int().min(-32768).max(32767);\r\n case 'real':\r\n case 'float4':\r\n return z.number();\r\n case 'double precision':\r\n case 'float8':\r\n return z.number();\r\n case 'decimal':\r\n case 'numeric':\r\n return z.number();\r\n case 'bytea':\r\n return z.instanceof(Buffer);\r\n default:\r\n // Fall back to data type\r\n return this.getBaseZodSchemaByDataType(dataType);\r\n }\r\n }\r\n \r\n /**\r\n * Get base Zod schema by data type\r\n */\r\n private getBaseZodSchemaByDataType(dataType: string): z.ZodTypeAny {\r\n switch (dataType) {\r\n case 'string':\r\n case 'text':\r\n return z.string();\r\n case 'number':\r\n case 'integer':\r\n return z.number();\r\n case 'boolean':\r\n return z.boolean();\r\n case 'date':\r\n return z.date();\r\n case 'json':\r\n return z.record(z.any());\r\n case 'buffer':\r\n return z.instanceof(Buffer);\r\n case 'bigint':\r\n return z.bigint();\r\n default:\r\n return z.string(); // Default fallback\r\n }\r\n }\r\n \r\n /**\r\n * Generate create schema (without auto-generated fields)\r\n */\r\n generateCreateSchema(table: DrizzleTable): z.ZodSchema {\r\n const schemaFields: Record<string, z.ZodTypeAny> = {};\r\n \r\n for (const [columnName, column] of Object.entries(table._.columns)) {\r\n // Skip auto-generated primary keys\r\n if (column._.isPrimaryKey && column._.hasDefault) {\r\n continue;\r\n }\r\n \r\n // Skip auto-increment columns\r\n if (column._.columnType.includes('serial')) {\r\n continue;\r\n }\r\n \r\n schemaFields[columnName] = this.convertColumnToZod(column);\r\n }\r\n \r\n return z.object(schemaFields);\r\n }\r\n \r\n /**\r\n * Generate update schema (all fields optional)\r\n */\r\n generateUpdateSchema(table: DrizzleTable): z.ZodSchema {\r\n const schemaFields: Record<string, z.ZodTypeAny> = {};\r\n \r\n for (const [columnName, column] of Object.entries(table._.columns)) {\r\n // Skip primary key in updates\r\n if (column._.isPrimaryKey) {\r\n continue;\r\n }\r\n \r\n let fieldSchema = this.convertColumnToZod(column);\r\n \r\n // Make all fields optional for updates\r\n if (!fieldSchema.isOptional()) {\r\n fieldSchema = fieldSchema.optional();\r\n }\r\n \r\n schemaFields[columnName] = fieldSchema;\r\n }\r\n \r\n return z.object(schemaFields);\r\n }\r\n \r\n /**\r\n * Extract table metadata from Drizzle table\r\n */\r\n extractTableMetadata(table: DrizzleTable): DrizzleTableMetadata {\r\n const columns: DrizzleColumnMetadata[] = [];\r\n \r\n for (const [columnName, column] of Object.entries(table._.columns)) {\r\n columns.push({\r\n name: columnName,\r\n dataType: column._.dataType,\r\n isPrimaryKey: column._.isPrimaryKey,\r\n isNotNull: column._.notNull,\r\n hasDefault: column._.hasDefault,\r\n isUnique: column._.isUnique,\r\n isAutoIncrement: column._.columnType.includes('serial'),\r\n enumValues: column._.enumValues\r\n });\r\n }\r\n \r\n return {\r\n name: table._.name,\r\n schema: table._.schema,\r\n columns,\r\n relations: [], // Relations would need to be extracted from schema definition\r\n zodSchema: this.convertTableToZod(table)\r\n };\r\n }\r\n \r\n /**\r\n * Generate all schemas for a table (base, create, update)\r\n */\r\n generateAllSchemas(table: DrizzleTable) {\r\n return {\r\n base: this.convertTableToZod(table),\r\n create: this.generateCreateSchema(table),\r\n update: this.generateUpdateSchema(table)\r\n };\r\n }\r\n \r\n /**\r\n * Clear cached schemas\r\n */\r\n clearCache(): void {\r\n this.tableSchemas.clear();\r\n }\r\n \r\n /**\r\n * Get cached schema for a table\r\n */\r\n getCachedSchema(tableName: string): z.ZodSchema | undefined {\r\n return this.tableSchemas.get(tableName);\r\n }\r\n}",
291
+ "/**\r\n * Redis cache store implementation\r\n * Requires 'redis' or 'ioredis' package to be installed\r\n * Suitable for distributed applications\r\n */\r\n\r\nimport type { CacheStore } from './types';\r\n\r\nexport interface RedisClient {\r\n get(key: string): Promise<string | null>;\r\n set(key: string, value: string, options?: any): Promise<any>;\r\n del(key: string): Promise<number>;\r\n exists(key: string): Promise<number>;\r\n keys(pattern: string): Promise<string[]>;\r\n flushall(): Promise<string>;\r\n setex(key: string, seconds: number, value: string): Promise<string>;\r\n expire(key: string, seconds: number): Promise<number>;\r\n}\r\n\r\nexport class RedisCacheStore implements CacheStore {\r\n private client: RedisClient;\r\n private prefix: string;\r\n\r\n constructor(client: RedisClient, options: {\r\n /**\r\n * Key prefix for namespacing (default: 'cache:')\r\n */\r\n prefix?: string;\r\n } = {}) {\r\n this.client = client;\r\n this.prefix = options.prefix || 'cache:';\r\n }\r\n\r\n async get<T = any>(key: string): Promise<T | null> {\r\n const fullKey = this.getFullKey(key);\r\n const value = await this.client.get(fullKey);\r\n \r\n if (!value) {\r\n return null;\r\n }\r\n\r\n try {\r\n return JSON.parse(value) as T;\r\n } catch {\r\n return value as any;\r\n }\r\n }\r\n\r\n async set<T = any>(key: string, value: T, ttl: number = 0): Promise<void> {\r\n const fullKey = this.getFullKey(key);\r\n const serialized = JSON.stringify(value);\r\n\r\n if (ttl > 0) {\r\n await this.client.setex(fullKey, ttl, serialized);\r\n } else {\r\n await this.client.set(fullKey, serialized);\r\n }\r\n }\r\n\r\n async delete(key: string): Promise<boolean> {\r\n const fullKey = this.getFullKey(key);\r\n const result = await this.client.del(fullKey);\r\n return result > 0;\r\n }\r\n\r\n async has(key: string): Promise<boolean> {\r\n const fullKey = this.getFullKey(key);\r\n const result = await this.client.exists(fullKey);\r\n return result > 0;\r\n }\r\n\r\n async clear(): Promise<void> {\r\n // Clear only keys with our prefix\r\n const keys = await this.keys('*');\r\n if (keys.length > 0) {\r\n await Promise.all(keys.map(key => this.delete(key)));\r\n }\r\n }\r\n\r\n async deletePattern(pattern: string): Promise<number> {\r\n const keys = await this.keys(pattern);\r\n \r\n if (keys.length === 0) {\r\n return 0;\r\n }\r\n\r\n await Promise.all(keys.map(key => this.delete(key)));\r\n return keys.length;\r\n }\r\n\r\n async keys(pattern: string = '*'): Promise<string[]> {\r\n const fullPattern = this.getFullKey(pattern);\r\n const fullKeys = await this.client.keys(fullPattern);\r\n \r\n // Remove prefix from keys\r\n return fullKeys.map(key => key.substring(this.prefix.length));\r\n }\r\n\r\n private getFullKey(key: string): string {\r\n return `${this.prefix}${key}`;\r\n }\r\n}\r\n\r\n/**\r\n * Create Redis cache store from connection string\r\n * \r\n * @example\r\n * ```typescript\r\n * // Using redis package\r\n * import { createClient } from 'redis';\r\n * const client = createClient({ url: 'redis://localhost:6379' });\r\n * await client.connect();\r\n * const store = createRedisCacheStore(client);\r\n * \r\n * // Using ioredis package\r\n * import Redis from 'ioredis';\r\n * const client = new Redis('redis://localhost:6379');\r\n * const store = createRedisCacheStore(client);\r\n * ```\r\n */\r\nexport function createRedisCacheStore(\r\n client: RedisClient,\r\n options?: { prefix?: string }\r\n): RedisCacheStore {\r\n return new RedisCacheStore(client, options);\r\n}\r\n\r\n",
292
+ "/**\r\n * Cache system exports\r\n */\r\n\r\n// Types\r\nexport type { CacheStore, CacheEntry, CacheOptions } from './types';\r\nexport { parseTTL } from './types';\r\n\r\n// Stores\r\nexport { MemoryCacheStore } from './memory-store';\r\nexport { RedisCacheStore, createRedisCacheStore, type RedisClient } from './redis-store';\r\n\r\n// Manager and utilities\r\nexport { \r\n CacheManager, \r\n getCache, \r\n setCache, \r\n deleteCache, \r\n invalidateCache, \r\n clearCache \r\n} from './manager';\r\n\r\n"
97
293
  ],
98
- "mappings": "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",
99
- "debugId": "675DCCD42794F0F764756E2164756E21",
294
+ "mappings": "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",
295
+ "debugId": "9AEB40598A2CD5F364756E2164756E21",
100
296
  "names": []
101
297
  }