adorn-api 1.0.3 → 1.0.5

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 (573) hide show
  1. package/README.md +766 -51
  2. package/dist/adapter/express/bootstrap.d.ts +24 -0
  3. package/dist/adapter/express/bootstrap.d.ts.map +1 -0
  4. package/dist/adapter/express/index.d.ts +41 -0
  5. package/dist/adapter/express/index.d.ts.map +1 -0
  6. package/dist/adapter/express/merge.d.ts +28 -0
  7. package/dist/adapter/express/merge.d.ts.map +1 -0
  8. package/dist/cli.cjs +1571 -0
  9. package/dist/cli.cjs.map +1 -0
  10. package/dist/cli.d.ts +1 -0
  11. package/dist/cli.js +1552 -2
  12. package/dist/cli.js.map +1 -1
  13. package/dist/compiler/analyze/scanControllers.d.ts +35 -0
  14. package/dist/compiler/analyze/scanControllers.d.ts.map +1 -0
  15. package/dist/compiler/cache/isStale.d.ts +20 -0
  16. package/dist/compiler/cache/isStale.d.ts.map +1 -0
  17. package/dist/compiler/cache/loadArtifacts.d.ts +113 -0
  18. package/dist/compiler/cache/loadArtifacts.d.ts.map +1 -0
  19. package/dist/compiler/cache/schema.d.ts +18 -0
  20. package/dist/compiler/cache/schema.d.ts.map +1 -0
  21. package/dist/compiler/cache/writeCache.d.ts +8 -0
  22. package/dist/compiler/cache/writeCache.d.ts.map +1 -0
  23. package/dist/compiler/manifest/emit.d.ts +7 -0
  24. package/dist/compiler/manifest/emit.d.ts.map +1 -0
  25. package/dist/compiler/manifest/format.d.ts +76 -0
  26. package/dist/compiler/manifest/format.d.ts.map +1 -0
  27. package/dist/compiler/runner/createProgram.d.ts +8 -0
  28. package/dist/compiler/runner/createProgram.d.ts.map +1 -0
  29. package/dist/compiler/schema/extractAnnotations.d.ts +10 -0
  30. package/dist/compiler/schema/extractAnnotations.d.ts.map +1 -0
  31. package/dist/compiler/schema/openapi.d.ts +19 -0
  32. package/dist/compiler/schema/openapi.d.ts.map +1 -0
  33. package/dist/compiler/schema/typeToJsonSchema.d.ts +49 -0
  34. package/dist/compiler/schema/typeToJsonSchema.d.ts.map +1 -0
  35. package/dist/compiler/validation/emitPrecompiledValidators.d.ts +46 -0
  36. package/dist/compiler/validation/emitPrecompiledValidators.d.ts.map +1 -0
  37. package/dist/decorators/Auth.d.ts +5 -0
  38. package/dist/decorators/Auth.d.ts.map +1 -0
  39. package/dist/decorators/Controller.d.ts +2 -0
  40. package/dist/decorators/Controller.d.ts.map +1 -0
  41. package/dist/decorators/Public.d.ts +2 -0
  42. package/dist/decorators/Public.d.ts.map +1 -0
  43. package/dist/decorators/Use.d.ts +5 -0
  44. package/dist/decorators/Use.d.ts.map +1 -0
  45. package/dist/decorators/index.d.ts +5 -6
  46. package/dist/decorators/index.d.ts.map +1 -1
  47. package/dist/decorators/methods.d.ts +5 -145
  48. package/dist/decorators/methods.d.ts.map +1 -1
  49. package/dist/express.cjs +775 -0
  50. package/dist/express.cjs.map +1 -0
  51. package/dist/express.d.ts +6 -1
  52. package/dist/express.d.ts.map +1 -1
  53. package/dist/express.js +738 -1
  54. package/dist/express.js.map +1 -1
  55. package/dist/http.d.ts +29 -0
  56. package/dist/http.d.ts.map +1 -0
  57. package/dist/index.cjs +573 -0
  58. package/dist/index.cjs.map +1 -0
  59. package/dist/index.d.ts +12 -14
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +490 -26
  62. package/dist/index.js.map +1 -1
  63. package/dist/metal/index.cjs +219 -0
  64. package/dist/metal/index.cjs.map +1 -0
  65. package/dist/metal/index.d.ts +6 -0
  66. package/dist/metal/index.d.ts.map +1 -0
  67. package/dist/metal/index.js +188 -0
  68. package/dist/metal/index.js.map +1 -0
  69. package/dist/metal/readMetalBag.d.ts +33 -0
  70. package/dist/metal/readMetalBag.d.ts.map +1 -0
  71. package/dist/metal/registerMetalEntities.d.ts +6 -0
  72. package/dist/metal/registerMetalEntities.d.ts.map +1 -0
  73. package/dist/metal/schemaFromEntity.d.ts +11 -0
  74. package/dist/metal/schemaFromEntity.d.ts.map +1 -0
  75. package/dist/metal/symbolMetadata.d.ts +2 -0
  76. package/dist/metal/symbolMetadata.d.ts.map +1 -0
  77. package/dist/runtime/auth/runtime.d.ts +34 -0
  78. package/dist/runtime/auth/runtime.d.ts.map +1 -0
  79. package/dist/runtime/metadata/bucket.d.ts +3 -0
  80. package/dist/runtime/metadata/bucket.d.ts.map +1 -0
  81. package/dist/runtime/metadata/key.d.ts +2 -0
  82. package/dist/runtime/metadata/key.d.ts.map +1 -0
  83. package/dist/runtime/metadata/read.d.ts +3 -0
  84. package/dist/runtime/metadata/read.d.ts.map +1 -0
  85. package/dist/runtime/metadata/types.d.ts +21 -0
  86. package/dist/runtime/metadata/types.d.ts.map +1 -0
  87. package/dist/runtime/polyfill.d.ts +2 -0
  88. package/dist/runtime/polyfill.d.ts.map +1 -0
  89. package/dist/runtime/upload.d.ts +7 -0
  90. package/dist/runtime/upload.d.ts.map +1 -0
  91. package/dist/runtime/validation/ajv.d.ts +20 -0
  92. package/dist/runtime/validation/ajv.d.ts.map +1 -0
  93. package/dist/runtime/validation/index.d.ts +2 -0
  94. package/dist/runtime/validation/index.d.ts.map +1 -0
  95. package/dist/schema/decorators.d.ts +37 -0
  96. package/dist/schema/decorators.d.ts.map +1 -0
  97. package/dist/schema/index.cjs +214 -0
  98. package/dist/schema/index.cjs.map +1 -0
  99. package/dist/schema/index.d.ts +2 -0
  100. package/dist/schema/index.d.ts.map +1 -0
  101. package/dist/schema/index.js +163 -0
  102. package/dist/schema/index.js.map +1 -0
  103. package/dist/scripts/adorn-example.cjs +148 -0
  104. package/dist/scripts/adorn-example.cjs.map +1 -0
  105. package/dist/utils/operationId.d.ts +2 -0
  106. package/dist/utils/operationId.d.ts.map +1 -0
  107. package/dist/utils/path.d.ts +2 -0
  108. package/dist/utils/path.d.ts.map +1 -0
  109. package/package.json +92 -57
  110. package/dist/adapters/express/createApp.d.ts +0 -158
  111. package/dist/adapters/express/createApp.d.ts.map +0 -1
  112. package/dist/adapters/express/createApp.js +0 -141
  113. package/dist/adapters/express/createApp.js.map +0 -1
  114. package/dist/adapters/express/index.d.ts +0 -7
  115. package/dist/adapters/express/index.d.ts.map +0 -1
  116. package/dist/adapters/express/index.js +0 -7
  117. package/dist/adapters/express/index.js.map +0 -1
  118. package/dist/adapters/express/middleware/errorHandler.d.ts +0 -194
  119. package/dist/adapters/express/middleware/errorHandler.d.ts.map +0 -1
  120. package/dist/adapters/express/middleware/errorHandler.js +0 -167
  121. package/dist/adapters/express/middleware/errorHandler.js.map +0 -1
  122. package/dist/adapters/express/middleware/requestContext.d.ts +0 -2
  123. package/dist/adapters/express/middleware/requestContext.d.ts.map +0 -1
  124. package/dist/adapters/express/middleware/requestContext.js +0 -3
  125. package/dist/adapters/express/middleware/requestContext.js.map +0 -1
  126. package/dist/adapters/express/router.d.ts +0 -10
  127. package/dist/adapters/express/router.d.ts.map +0 -1
  128. package/dist/adapters/express/router.js +0 -105
  129. package/dist/adapters/express/router.js.map +0 -1
  130. package/dist/adapters/express/swagger/index.d.ts +0 -2
  131. package/dist/adapters/express/swagger/index.d.ts.map +0 -1
  132. package/dist/adapters/express/swagger/index.js +0 -2
  133. package/dist/adapters/express/swagger/index.js.map +0 -1
  134. package/dist/adapters/express/swagger/serve.d.ts +0 -12
  135. package/dist/adapters/express/swagger/serve.d.ts.map +0 -1
  136. package/dist/adapters/express/swagger/serve.js +0 -72
  137. package/dist/adapters/express/swagger/serve.js.map +0 -1
  138. package/dist/adapters/express/transport/request.d.ts +0 -4
  139. package/dist/adapters/express/transport/request.d.ts.map +0 -1
  140. package/dist/adapters/express/transport/request.js +0 -12
  141. package/dist/adapters/express/transport/request.js.map +0 -1
  142. package/dist/adapters/express/transport/response.d.ts +0 -5
  143. package/dist/adapters/express/transport/response.d.ts.map +0 -1
  144. package/dist/adapters/express/transport/response.js +0 -36
  145. package/dist/adapters/express/transport/response.js.map +0 -1
  146. package/dist/cli/commands/dev.d.ts +0 -2
  147. package/dist/cli/commands/dev.d.ts.map +0 -1
  148. package/dist/cli/commands/dev.js +0 -3
  149. package/dist/cli/commands/dev.js.map +0 -1
  150. package/dist/cli/commands/gen.d.ts +0 -2
  151. package/dist/cli/commands/gen.d.ts.map +0 -1
  152. package/dist/cli/commands/gen.js +0 -3
  153. package/dist/cli/commands/gen.js.map +0 -1
  154. package/dist/cli/main.d.ts +0 -2
  155. package/dist/cli/main.d.ts.map +0 -1
  156. package/dist/cli/main.js +0 -3
  157. package/dist/cli/main.js.map +0 -1
  158. package/dist/compiler/config/defaults.d.ts +0 -2
  159. package/dist/compiler/config/defaults.d.ts.map +0 -1
  160. package/dist/compiler/config/defaults.js +0 -3
  161. package/dist/compiler/config/defaults.js.map +0 -1
  162. package/dist/compiler/config/loadConfig.d.ts +0 -2
  163. package/dist/compiler/config/loadConfig.d.ts.map +0 -1
  164. package/dist/compiler/config/loadConfig.js +0 -3
  165. package/dist/compiler/config/loadConfig.js.map +0 -1
  166. package/dist/compiler/diagnostics/errors.d.ts +0 -2
  167. package/dist/compiler/diagnostics/errors.d.ts.map +0 -1
  168. package/dist/compiler/diagnostics/errors.js +0 -3
  169. package/dist/compiler/diagnostics/errors.js.map +0 -1
  170. package/dist/compiler/emit/openapi.d.ts +0 -2
  171. package/dist/compiler/emit/openapi.d.ts.map +0 -1
  172. package/dist/compiler/emit/openapi.js +0 -3
  173. package/dist/compiler/emit/openapi.js.map +0 -1
  174. package/dist/compiler/emit/routes.d.ts +0 -2
  175. package/dist/compiler/emit/routes.d.ts.map +0 -1
  176. package/dist/compiler/emit/routes.js +0 -3
  177. package/dist/compiler/emit/routes.js.map +0 -1
  178. package/dist/compiler/program/loadTsProgram.d.ts +0 -2
  179. package/dist/compiler/program/loadTsProgram.d.ts.map +0 -1
  180. package/dist/compiler/program/loadTsProgram.js +0 -3
  181. package/dist/compiler/program/loadTsProgram.js.map +0 -1
  182. package/dist/compiler/scan/actions.d.ts +0 -2
  183. package/dist/compiler/scan/actions.d.ts.map +0 -1
  184. package/dist/compiler/scan/actions.js +0 -3
  185. package/dist/compiler/scan/actions.js.map +0 -1
  186. package/dist/compiler/scan/controllers.d.ts +0 -2
  187. package/dist/compiler/scan/controllers.d.ts.map +0 -1
  188. package/dist/compiler/scan/controllers.js +0 -3
  189. package/dist/compiler/scan/controllers.js.map +0 -1
  190. package/dist/compiler/scan/types.d.ts +0 -2
  191. package/dist/compiler/scan/types.d.ts.map +0 -1
  192. package/dist/compiler/scan/types.js +0 -3
  193. package/dist/compiler/scan/types.js.map +0 -1
  194. package/dist/contracts/context.d.ts +0 -10
  195. package/dist/contracts/context.d.ts.map +0 -1
  196. package/dist/contracts/context.js +0 -2
  197. package/dist/contracts/context.js.map +0 -1
  198. package/dist/contracts/errors.d.ts +0 -22
  199. package/dist/contracts/errors.d.ts.map +0 -1
  200. package/dist/contracts/errors.js +0 -2
  201. package/dist/contracts/errors.js.map +0 -1
  202. package/dist/contracts/http.d.ts +0 -2
  203. package/dist/contracts/http.d.ts.map +0 -1
  204. package/dist/contracts/http.js +0 -3
  205. package/dist/contracts/http.js.map +0 -1
  206. package/dist/contracts/middleware.d.ts +0 -2
  207. package/dist/contracts/middleware.d.ts.map +0 -1
  208. package/dist/contracts/middleware.js +0 -3
  209. package/dist/contracts/middleware.js.map +0 -1
  210. package/dist/contracts/openapi-v3.d.ts +0 -538
  211. package/dist/contracts/openapi-v3.d.ts.map +0 -1
  212. package/dist/contracts/openapi-v3.js +0 -2
  213. package/dist/contracts/openapi-v3.js.map +0 -1
  214. package/dist/contracts/openapi.d.ts +0 -2
  215. package/dist/contracts/openapi.d.ts.map +0 -1
  216. package/dist/contracts/openapi.js +0 -2
  217. package/dist/contracts/openapi.js.map +0 -1
  218. package/dist/contracts/reply.d.ts +0 -119
  219. package/dist/contracts/reply.d.ts.map +0 -1
  220. package/dist/contracts/reply.js +0 -43
  221. package/dist/contracts/reply.js.map +0 -1
  222. package/dist/contracts/response-types.d.ts +0 -40
  223. package/dist/contracts/response-types.d.ts.map +0 -1
  224. package/dist/contracts/response-types.js +0 -2
  225. package/dist/contracts/response-types.js.map +0 -1
  226. package/dist/contracts/responses.d.ts +0 -98
  227. package/dist/contracts/responses.d.ts.map +0 -1
  228. package/dist/contracts/responses.js +0 -2
  229. package/dist/contracts/responses.js.map +0 -1
  230. package/dist/contracts/route-options.d.ts +0 -155
  231. package/dist/contracts/route-options.d.ts.map +0 -1
  232. package/dist/contracts/route-options.js +0 -2
  233. package/dist/contracts/route-options.js.map +0 -1
  234. package/dist/contracts/route-typing.d.ts +0 -25
  235. package/dist/contracts/route-typing.d.ts.map +0 -1
  236. package/dist/contracts/route-typing.js +0 -2
  237. package/dist/contracts/route-typing.js.map +0 -1
  238. package/dist/contracts/validator.d.ts +0 -146
  239. package/dist/contracts/validator.d.ts.map +0 -1
  240. package/dist/contracts/validator.js +0 -2
  241. package/dist/contracts/validator.js.map +0 -1
  242. package/dist/core/binding/binder.d.ts +0 -74
  243. package/dist/core/binding/binder.d.ts.map +0 -1
  244. package/dist/core/binding/binder.js +0 -161
  245. package/dist/core/binding/binder.js.map +0 -1
  246. package/dist/core/binding/coerce/arrays.d.ts +0 -7
  247. package/dist/core/binding/coerce/arrays.d.ts.map +0 -1
  248. package/dist/core/binding/coerce/arrays.js +0 -28
  249. package/dist/core/binding/coerce/arrays.js.map +0 -1
  250. package/dist/core/binding/coerce/csv.d.ts +0 -2
  251. package/dist/core/binding/coerce/csv.d.ts.map +0 -1
  252. package/dist/core/binding/coerce/csv.js +0 -7
  253. package/dist/core/binding/coerce/csv.js.map +0 -1
  254. package/dist/core/binding/coerce/objects.d.ts +0 -2
  255. package/dist/core/binding/coerce/objects.d.ts.map +0 -1
  256. package/dist/core/binding/coerce/objects.js +0 -3
  257. package/dist/core/binding/coerce/objects.js.map +0 -1
  258. package/dist/core/binding/coerce/primitives.d.ts +0 -70
  259. package/dist/core/binding/coerce/primitives.d.ts.map +0 -1
  260. package/dist/core/binding/coerce/primitives.js +0 -88
  261. package/dist/core/binding/coerce/primitives.js.map +0 -1
  262. package/dist/core/binding/index.d.ts +0 -2
  263. package/dist/core/binding/index.d.ts.map +0 -1
  264. package/dist/core/binding/index.js +0 -2
  265. package/dist/core/binding/index.js.map +0 -1
  266. package/dist/core/binding/rules/inferFromHttpMethod.d.ts +0 -6
  267. package/dist/core/binding/rules/inferFromHttpMethod.d.ts.map +0 -1
  268. package/dist/core/binding/rules/inferFromHttpMethod.js +0 -11
  269. package/dist/core/binding/rules/inferFromHttpMethod.js.map +0 -1
  270. package/dist/core/binding/rules/inferFromPath.d.ts +0 -2
  271. package/dist/core/binding/rules/inferFromPath.d.ts.map +0 -1
  272. package/dist/core/binding/rules/inferFromPath.js +0 -9
  273. package/dist/core/binding/rules/inferFromPath.js.map +0 -1
  274. package/dist/core/binding/rules/wrappers.d.ts +0 -2
  275. package/dist/core/binding/rules/wrappers.d.ts.map +0 -1
  276. package/dist/core/binding/rules/wrappers.js +0 -3
  277. package/dist/core/binding/rules/wrappers.js.map +0 -1
  278. package/dist/core/errors/http-error.d.ts +0 -63
  279. package/dist/core/errors/http-error.d.ts.map +0 -1
  280. package/dist/core/errors/http-error.js +0 -71
  281. package/dist/core/errors/http-error.js.map +0 -1
  282. package/dist/core/errors/index.d.ts +0 -4
  283. package/dist/core/errors/index.d.ts.map +0 -1
  284. package/dist/core/errors/index.js +0 -4
  285. package/dist/core/errors/index.js.map +0 -1
  286. package/dist/core/errors/problem.d.ts +0 -3
  287. package/dist/core/errors/problem.d.ts.map +0 -1
  288. package/dist/core/errors/problem.js +0 -33
  289. package/dist/core/errors/problem.js.map +0 -1
  290. package/dist/core/errors/validation-error.d.ts +0 -73
  291. package/dist/core/errors/validation-error.d.ts.map +0 -1
  292. package/dist/core/errors/validation-error.js +0 -82
  293. package/dist/core/errors/validation-error.js.map +0 -1
  294. package/dist/core/openapi/buildOpenApi.d.ts +0 -79
  295. package/dist/core/openapi/buildOpenApi.d.ts.map +0 -1
  296. package/dist/core/openapi/buildOpenApi.js +0 -196
  297. package/dist/core/openapi/buildOpenApi.js.map +0 -1
  298. package/dist/core/openapi/index.d.ts +0 -2
  299. package/dist/core/openapi/index.d.ts.map +0 -1
  300. package/dist/core/openapi/index.js +0 -2
  301. package/dist/core/openapi/index.js.map +0 -1
  302. package/dist/core/openapi/schema/formats.d.ts +0 -2
  303. package/dist/core/openapi/schema/formats.d.ts.map +0 -1
  304. package/dist/core/openapi/schema/formats.js +0 -3
  305. package/dist/core/openapi/schema/formats.js.map +0 -1
  306. package/dist/core/openapi/schema/registry.d.ts +0 -9
  307. package/dist/core/openapi/schema/registry.d.ts.map +0 -1
  308. package/dist/core/openapi/schema/registry.js +0 -21
  309. package/dist/core/openapi/schema/registry.js.map +0 -1
  310. package/dist/core/openapi/schema/schemaModel.d.ts +0 -2
  311. package/dist/core/openapi/schema/schemaModel.d.ts.map +0 -1
  312. package/dist/core/openapi/schema/schemaModel.js +0 -3
  313. package/dist/core/openapi/schema/schemaModel.js.map +0 -1
  314. package/dist/core/openapi/schema/schemaRegistry.d.ts +0 -2
  315. package/dist/core/openapi/schema/schemaRegistry.d.ts.map +0 -1
  316. package/dist/core/openapi/schema/schemaRegistry.js +0 -3
  317. package/dist/core/openapi/schema/schemaRegistry.js.map +0 -1
  318. package/dist/core/openapi/schema/toOpenApi.d.ts +0 -4
  319. package/dist/core/openapi/schema/toOpenApi.d.ts.map +0 -1
  320. package/dist/core/openapi/schema/toOpenApi.js +0 -82
  321. package/dist/core/openapi/schema/toOpenApi.js.map +0 -1
  322. package/dist/core/pipeline/compose.d.ts +0 -2
  323. package/dist/core/pipeline/compose.d.ts.map +0 -1
  324. package/dist/core/pipeline/compose.js +0 -3
  325. package/dist/core/pipeline/compose.js.map +0 -1
  326. package/dist/core/pipeline/errorMap.d.ts +0 -2
  327. package/dist/core/pipeline/errorMap.d.ts.map +0 -1
  328. package/dist/core/pipeline/errorMap.js +0 -3
  329. package/dist/core/pipeline/errorMap.js.map +0 -1
  330. package/dist/core/pipeline/invoke.d.ts +0 -2
  331. package/dist/core/pipeline/invoke.d.ts.map +0 -1
  332. package/dist/core/pipeline/invoke.js +0 -3
  333. package/dist/core/pipeline/invoke.js.map +0 -1
  334. package/dist/core/pipeline/result.d.ts +0 -2
  335. package/dist/core/pipeline/result.d.ts.map +0 -1
  336. package/dist/core/pipeline/result.js +0 -3
  337. package/dist/core/pipeline/result.js.map +0 -1
  338. package/dist/core/registry/buildRegistry.d.ts +0 -3
  339. package/dist/core/registry/buildRegistry.d.ts.map +0 -1
  340. package/dist/core/registry/buildRegistry.js +0 -105
  341. package/dist/core/registry/buildRegistry.js.map +0 -1
  342. package/dist/core/registry/conflicts.d.ts +0 -6
  343. package/dist/core/registry/conflicts.d.ts.map +0 -1
  344. package/dist/core/registry/conflicts.js +0 -21
  345. package/dist/core/registry/conflicts.js.map +0 -1
  346. package/dist/core/registry/index.d.ts +0 -5
  347. package/dist/core/registry/index.d.ts.map +0 -1
  348. package/dist/core/registry/index.js +0 -5
  349. package/dist/core/registry/index.js.map +0 -1
  350. package/dist/core/registry/normalize.d.ts +0 -3
  351. package/dist/core/registry/normalize.d.ts.map +0 -1
  352. package/dist/core/registry/normalize.js +0 -24
  353. package/dist/core/registry/normalize.js.map +0 -1
  354. package/dist/core/registry/types.d.ts +0 -225
  355. package/dist/core/registry/types.d.ts.map +0 -1
  356. package/dist/core/registry/types.js +0 -2
  357. package/dist/core/registry/types.js.map +0 -1
  358. package/dist/core/reply/index.d.ts +0 -3
  359. package/dist/core/reply/index.d.ts.map +0 -1
  360. package/dist/core/reply/index.js +0 -3
  361. package/dist/core/reply/index.js.map +0 -1
  362. package/dist/core/reply/reply.d.ts +0 -102
  363. package/dist/core/reply/reply.d.ts.map +0 -1
  364. package/dist/core/reply/reply.js +0 -105
  365. package/dist/core/reply/reply.js.map +0 -1
  366. package/dist/core/reply/typed.d.ts +0 -161
  367. package/dist/core/reply/typed.d.ts.map +0 -1
  368. package/dist/core/reply/typed.js +0 -154
  369. package/dist/core/reply/typed.js.map +0 -1
  370. package/dist/core/responses/helpers.d.ts +0 -10
  371. package/dist/core/responses/helpers.d.ts.map +0 -1
  372. package/dist/core/responses/helpers.js +0 -8
  373. package/dist/core/responses/helpers.js.map +0 -1
  374. package/dist/core/responses/index.d.ts +0 -4
  375. package/dist/core/responses/index.d.ts.map +0 -1
  376. package/dist/core/responses/index.js +0 -4
  377. package/dist/core/responses/index.js.map +0 -1
  378. package/dist/core/responses/normalize.d.ts +0 -3
  379. package/dist/core/responses/normalize.d.ts.map +0 -1
  380. package/dist/core/responses/normalize.js +0 -33
  381. package/dist/core/responses/normalize.js.map +0 -1
  382. package/dist/core/responses/pickStatus.d.ts +0 -3
  383. package/dist/core/responses/pickStatus.d.ts.map +0 -1
  384. package/dist/core/responses/pickStatus.js +0 -27
  385. package/dist/core/responses/pickStatus.js.map +0 -1
  386. package/dist/core/route/defineRoute.d.ts +0 -74
  387. package/dist/core/route/defineRoute.d.ts.map +0 -1
  388. package/dist/core/route/defineRoute.js +0 -59
  389. package/dist/core/route/defineRoute.js.map +0 -1
  390. package/dist/core/route/index.d.ts +0 -2
  391. package/dist/core/route/index.d.ts.map +0 -1
  392. package/dist/core/route/index.js +0 -2
  393. package/dist/core/route/index.js.map +0 -1
  394. package/dist/core/serialization/json.d.ts +0 -2
  395. package/dist/core/serialization/json.d.ts.map +0 -1
  396. package/dist/core/serialization/json.js +0 -3
  397. package/dist/core/serialization/json.js.map +0 -1
  398. package/dist/core/typing/path-params.d.ts +0 -2
  399. package/dist/core/typing/path-params.d.ts.map +0 -1
  400. package/dist/core/typing/path-params.js +0 -2
  401. package/dist/core/typing/path-params.js.map +0 -1
  402. package/dist/decorators/binding.d.ts +0 -9
  403. package/dist/decorators/binding.d.ts.map +0 -1
  404. package/dist/decorators/binding.js +0 -18
  405. package/dist/decorators/binding.js.map +0 -1
  406. package/dist/decorators/controller.d.ts +0 -6
  407. package/dist/decorators/controller.d.ts.map +0 -1
  408. package/dist/decorators/controller.js +0 -26
  409. package/dist/decorators/controller.js.map +0 -1
  410. package/dist/decorators/db.d.ts +0 -2
  411. package/dist/decorators/db.d.ts.map +0 -1
  412. package/dist/decorators/db.js +0 -3
  413. package/dist/decorators/db.js.map +0 -1
  414. package/dist/decorators/docs.d.ts +0 -8
  415. package/dist/decorators/docs.d.ts.map +0 -1
  416. package/dist/decorators/docs.js +0 -46
  417. package/dist/decorators/docs.js.map +0 -1
  418. package/dist/decorators/index.js +0 -7
  419. package/dist/decorators/index.js.map +0 -1
  420. package/dist/decorators/methods.js +0 -170
  421. package/dist/decorators/methods.js.map +0 -1
  422. package/dist/decorators/middleware.d.ts +0 -2
  423. package/dist/decorators/middleware.d.ts.map +0 -1
  424. package/dist/decorators/middleware.js +0 -3
  425. package/dist/decorators/middleware.js.map +0 -1
  426. package/dist/decorators/responses.d.ts +0 -7
  427. package/dist/decorators/responses.d.ts.map +0 -1
  428. package/dist/decorators/responses.js +0 -44
  429. package/dist/decorators/responses.js.map +0 -1
  430. package/dist/decorators/security.d.ts +0 -8
  431. package/dist/decorators/security.d.ts.map +0 -1
  432. package/dist/decorators/security.js +0 -39
  433. package/dist/decorators/security.js.map +0 -1
  434. package/dist/integrations/metal-orm/index.d.ts +0 -2
  435. package/dist/integrations/metal-orm/index.d.ts.map +0 -1
  436. package/dist/integrations/metal-orm/index.js +0 -2
  437. package/dist/integrations/metal-orm/index.js.map +0 -1
  438. package/dist/integrations/metal-orm/pagination/executePaged.d.ts +0 -2
  439. package/dist/integrations/metal-orm/pagination/executePaged.d.ts.map +0 -1
  440. package/dist/integrations/metal-orm/pagination/executePaged.js +0 -3
  441. package/dist/integrations/metal-orm/pagination/executePaged.js.map +0 -1
  442. package/dist/integrations/metal-orm/pagination/page.d.ts +0 -2
  443. package/dist/integrations/metal-orm/pagination/page.d.ts.map +0 -1
  444. package/dist/integrations/metal-orm/pagination/page.js +0 -3
  445. package/dist/integrations/metal-orm/pagination/page.js.map +0 -1
  446. package/dist/integrations/metal-orm/query/filters.d.ts +0 -2
  447. package/dist/integrations/metal-orm/query/filters.d.ts.map +0 -1
  448. package/dist/integrations/metal-orm/query/filters.js +0 -3
  449. package/dist/integrations/metal-orm/query/filters.js.map +0 -1
  450. package/dist/integrations/metal-orm/query/search.d.ts +0 -2
  451. package/dist/integrations/metal-orm/query/search.d.ts.map +0 -1
  452. package/dist/integrations/metal-orm/query/search.js +0 -3
  453. package/dist/integrations/metal-orm/query/search.js.map +0 -1
  454. package/dist/integrations/metal-orm/query/sort.d.ts +0 -2
  455. package/dist/integrations/metal-orm/query/sort.d.ts.map +0 -1
  456. package/dist/integrations/metal-orm/query/sort.js +0 -3
  457. package/dist/integrations/metal-orm/query/sort.js.map +0 -1
  458. package/dist/integrations/metal-orm/save-graph/helpers.d.ts +0 -2
  459. package/dist/integrations/metal-orm/save-graph/helpers.d.ts.map +0 -1
  460. package/dist/integrations/metal-orm/save-graph/helpers.js +0 -3
  461. package/dist/integrations/metal-orm/save-graph/helpers.js.map +0 -1
  462. package/dist/integrations/metal-orm/save-graph/types.d.ts +0 -2
  463. package/dist/integrations/metal-orm/save-graph/types.d.ts.map +0 -1
  464. package/dist/integrations/metal-orm/save-graph/types.js +0 -3
  465. package/dist/integrations/metal-orm/save-graph/types.js.map +0 -1
  466. package/dist/integrations/metal-orm/schema/column-map.d.ts +0 -96
  467. package/dist/integrations/metal-orm/schema/column-map.d.ts.map +0 -1
  468. package/dist/integrations/metal-orm/schema/column-map.js +0 -207
  469. package/dist/integrations/metal-orm/schema/column-map.js.map +0 -1
  470. package/dist/integrations/metal-orm/schema/ddl.d.ts +0 -2
  471. package/dist/integrations/metal-orm/schema/ddl.d.ts.map +0 -1
  472. package/dist/integrations/metal-orm/schema/ddl.js +0 -3
  473. package/dist/integrations/metal-orm/schema/ddl.js.map +0 -1
  474. package/dist/integrations/metal-orm/schema/dto.d.ts +0 -7
  475. package/dist/integrations/metal-orm/schema/dto.d.ts.map +0 -1
  476. package/dist/integrations/metal-orm/schema/dto.js +0 -34
  477. package/dist/integrations/metal-orm/schema/dto.js.map +0 -1
  478. package/dist/integrations/metal-orm/schema/entity.d.ts +0 -99
  479. package/dist/integrations/metal-orm/schema/entity.d.ts.map +0 -1
  480. package/dist/integrations/metal-orm/schema/entity.js +0 -99
  481. package/dist/integrations/metal-orm/schema/entity.js.map +0 -1
  482. package/dist/integrations/metal-orm/schema/filters.d.ts +0 -11
  483. package/dist/integrations/metal-orm/schema/filters.d.ts.map +0 -1
  484. package/dist/integrations/metal-orm/schema/filters.js +0 -21
  485. package/dist/integrations/metal-orm/schema/filters.js.map +0 -1
  486. package/dist/integrations/metal-orm/schema/index.d.ts +0 -5
  487. package/dist/integrations/metal-orm/schema/index.d.ts.map +0 -1
  488. package/dist/integrations/metal-orm/schema/index.js +0 -5
  489. package/dist/integrations/metal-orm/schema/index.js.map +0 -1
  490. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts +0 -2
  491. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts.map +0 -1
  492. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js +0 -3
  493. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js.map +0 -1
  494. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts +0 -2
  495. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts.map +0 -1
  496. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js +0 -3
  497. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js.map +0 -1
  498. package/dist/integrations/metal-orm/schema/sqlite.d.ts +0 -2
  499. package/dist/integrations/metal-orm/schema/sqlite.d.ts.map +0 -1
  500. package/dist/integrations/metal-orm/schema/sqlite.js +0 -3
  501. package/dist/integrations/metal-orm/schema/sqlite.js.map +0 -1
  502. package/dist/integrations/metal-orm/schema/tabledef.d.ts +0 -4
  503. package/dist/integrations/metal-orm/schema/tabledef.d.ts.map +0 -1
  504. package/dist/integrations/metal-orm/schema/tabledef.js +0 -10
  505. package/dist/integrations/metal-orm/schema/tabledef.js.map +0 -1
  506. package/dist/integrations/metal-orm/schema/types.d.ts +0 -7
  507. package/dist/integrations/metal-orm/schema/types.d.ts.map +0 -1
  508. package/dist/integrations/metal-orm/schema/types.js +0 -2
  509. package/dist/integrations/metal-orm/schema/types.js.map +0 -1
  510. package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts +0 -2
  511. package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts.map +0 -1
  512. package/dist/integrations/metal-orm/serialization/entitySerializer.js +0 -3
  513. package/dist/integrations/metal-orm/serialization/entitySerializer.js.map +0 -1
  514. package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts +0 -2
  515. package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts.map +0 -1
  516. package/dist/integrations/metal-orm/serialization/relationPolicy.js +0 -3
  517. package/dist/integrations/metal-orm/serialization/relationPolicy.js.map +0 -1
  518. package/dist/integrations/metal-orm/session/context.d.ts +0 -2
  519. package/dist/integrations/metal-orm/session/context.d.ts.map +0 -1
  520. package/dist/integrations/metal-orm/session/context.js +0 -3
  521. package/dist/integrations/metal-orm/session/context.js.map +0 -1
  522. package/dist/integrations/metal-orm/session/middleware.d.ts +0 -2
  523. package/dist/integrations/metal-orm/session/middleware.d.ts.map +0 -1
  524. package/dist/integrations/metal-orm/session/middleware.js +0 -3
  525. package/dist/integrations/metal-orm/session/middleware.js.map +0 -1
  526. package/dist/integrations/metal-orm/session/transaction.d.ts +0 -2
  527. package/dist/integrations/metal-orm/session/transaction.d.ts.map +0 -1
  528. package/dist/integrations/metal-orm/session/transaction.js +0 -3
  529. package/dist/integrations/metal-orm/session/transaction.js.map +0 -1
  530. package/dist/integrations/metal-orm/testing/setupSchema.d.ts +0 -2
  531. package/dist/integrations/metal-orm/testing/setupSchema.d.ts.map +0 -1
  532. package/dist/integrations/metal-orm/testing/setupSchema.js +0 -3
  533. package/dist/integrations/metal-orm/testing/setupSchema.js.map +0 -1
  534. package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts +0 -2
  535. package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts.map +0 -1
  536. package/dist/integrations/metal-orm/testing/sqliteMemory.js +0 -3
  537. package/dist/integrations/metal-orm/testing/sqliteMemory.js.map +0 -1
  538. package/dist/metadata/bag.d.ts +0 -18
  539. package/dist/metadata/bag.d.ts.map +0 -1
  540. package/dist/metadata/bag.js +0 -39
  541. package/dist/metadata/bag.js.map +0 -1
  542. package/dist/metadata/index.d.ts +0 -4
  543. package/dist/metadata/index.d.ts.map +0 -1
  544. package/dist/metadata/index.js +0 -4
  545. package/dist/metadata/index.js.map +0 -1
  546. package/dist/metadata/keys.d.ts +0 -254
  547. package/dist/metadata/keys.d.ts.map +0 -1
  548. package/dist/metadata/keys.js +0 -23
  549. package/dist/metadata/keys.js.map +0 -1
  550. package/dist/metadata/merge.d.ts +0 -9
  551. package/dist/metadata/merge.d.ts.map +0 -1
  552. package/dist/metadata/merge.js +0 -30
  553. package/dist/metadata/merge.js.map +0 -1
  554. package/dist/metal-orm.d.ts +0 -2
  555. package/dist/metal-orm.d.ts.map +0 -1
  556. package/dist/metal-orm.js +0 -2
  557. package/dist/metal-orm.js.map +0 -1
  558. package/dist/validation/native/index.d.ts +0 -3
  559. package/dist/validation/native/index.d.ts.map +0 -1
  560. package/dist/validation/native/index.js +0 -3
  561. package/dist/validation/native/index.js.map +0 -1
  562. package/dist/validation/native/ir.d.ts +0 -38
  563. package/dist/validation/native/ir.d.ts.map +0 -1
  564. package/dist/validation/native/ir.js +0 -2
  565. package/dist/validation/native/ir.js.map +0 -1
  566. package/dist/validation/native/schema.d.ts +0 -63
  567. package/dist/validation/native/schema.d.ts.map +0 -1
  568. package/dist/validation/native/schema.js +0 -271
  569. package/dist/validation/native/schema.js.map +0 -1
  570. package/dist/validation/native/validator.d.ts +0 -21
  571. package/dist/validation/native/validator.d.ts.map +0 -1
  572. package/dist/validation/native/validator.js +0 -48
  573. package/dist/validation/native/validator.js.map +0 -1
@@ -0,0 +1,775 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/express.ts
31
+ var express_exports = {};
32
+ __export(express_exports, {
33
+ ValidationErrorResponse: () => ValidationErrorResponse,
34
+ bindRoutes: () => bindRoutes,
35
+ bootstrap: () => bootstrap,
36
+ createExpressRouter: () => createExpressRouter,
37
+ createValidator: () => createValidator,
38
+ formatValidationErrors: () => formatValidationErrors,
39
+ setupSwagger: () => setupSwagger
40
+ });
41
+ module.exports = __toCommonJS(express_exports);
42
+
43
+ // src/runtime/polyfill.ts
44
+ Symbol.metadata ??= /* @__PURE__ */ Symbol("Symbol.metadata");
45
+
46
+ // src/adapter/express/index.ts
47
+ var import_express2 = require("express");
48
+ var import_node_fs2 = require("fs");
49
+ var import_node_path3 = require("path");
50
+
51
+ // src/runtime/metadata/key.ts
52
+ var ADORN_META = /* @__PURE__ */ Symbol.for("adorn-api/meta");
53
+
54
+ // src/runtime/metadata/read.ts
55
+ function readAdornBucket(ctor) {
56
+ const metaSym = Symbol.metadata;
57
+ if (!metaSym) {
58
+ return null;
59
+ }
60
+ const classMetadata = ctor[metaSym];
61
+ if (!classMetadata) {
62
+ return null;
63
+ }
64
+ const bucket = classMetadata[ADORN_META];
65
+ return bucket ?? null;
66
+ }
67
+
68
+ // src/utils/operationId.ts
69
+ function defaultOperationId(controllerName, methodName) {
70
+ return `${controllerName}_${methodName}`;
71
+ }
72
+
73
+ // src/utils/path.ts
74
+ function joinPaths(base, sub) {
75
+ const b = base.endsWith("/") ? base.slice(0, -1) : base;
76
+ const s = sub.startsWith("/") ? sub : `/${sub}`;
77
+ return b + s || "/";
78
+ }
79
+
80
+ // src/adapter/express/merge.ts
81
+ var import_node_crypto = __toESM(require("crypto"), 1);
82
+ var routeCache = /* @__PURE__ */ new Map();
83
+ function convertToExpressPath(path3) {
84
+ return path3.replace(/:([^/]+)/g, ":$1");
85
+ }
86
+ function computeManifestHash(manifest) {
87
+ const ops = manifest.controllers.flatMap((c) => c.operations.map((o) => o.operationId)).sort();
88
+ const data = JSON.stringify({
89
+ ops,
90
+ validation: manifest.validation
91
+ });
92
+ return import_node_crypto.default.createHash("sha256").update(data).digest("hex").slice(0, 16);
93
+ }
94
+ function getControllerUniqueIds(controllers) {
95
+ return controllers.map((c) => `${c.name}:${c.toString()}`);
96
+ }
97
+ function bindRoutes(params) {
98
+ const { controllers, manifest, useCache = true } = params;
99
+ if (useCache) {
100
+ const manifestHash = computeManifestHash(manifest);
101
+ const controllerIds = getControllerUniqueIds(controllers);
102
+ const cacheKey = `${manifestHash}:${controllerIds.join(",")}`;
103
+ const cached = routeCache.get(cacheKey);
104
+ if (cached) {
105
+ return cached.boundRoutes;
106
+ }
107
+ const bound = computeBoundRoutes(controllers, manifest);
108
+ routeCache.set(cacheKey, {
109
+ boundRoutes: bound,
110
+ manifestHash,
111
+ controllerIds
112
+ });
113
+ return bound;
114
+ }
115
+ return computeBoundRoutes(controllers, manifest);
116
+ }
117
+ function computeBoundRoutes(controllers, manifest) {
118
+ const manifestByOpId = /* @__PURE__ */ new Map();
119
+ for (const ctrl of manifest.controllers) {
120
+ for (const op of ctrl.operations) {
121
+ if (manifestByOpId.has(op.operationId)) {
122
+ throw new Error(`Duplicate operationId in manifest: ${op.operationId}`);
123
+ }
124
+ manifestByOpId.set(op.operationId, op);
125
+ }
126
+ }
127
+ const bound = [];
128
+ for (const ctor of controllers) {
129
+ const bucket = readAdornBucket(ctor);
130
+ if (!bucket) {
131
+ console.warn(`No decorator metadata found for ${ctor.name}, skipping`);
132
+ continue;
133
+ }
134
+ const basePath = bucket.basePath ?? "/";
135
+ for (const routeOp of bucket.ops) {
136
+ const opId = routeOp.operationId ?? defaultOperationId(ctor.name, routeOp.methodName);
137
+ const manifestOp = manifestByOpId.get(opId);
138
+ if (!manifestOp) {
139
+ throw new Error(
140
+ `No manifest entry for operationId="${opId}. Did you run "adorn-api build"? Are your operationId rules aligned?`
141
+ );
142
+ }
143
+ if (manifestOp.http.method !== routeOp.httpMethod || manifestOp.http.path !== routeOp.path) {
144
+ throw new Error(
145
+ `Route mismatch for ${opId}. Runtime: ${routeOp.httpMethod} ${routeOp.path}, Manifest: ${manifestOp.http.method} ${manifestOp.http.path}. Rebuild with "adorn-api build".`
146
+ );
147
+ }
148
+ const expressPath = convertToExpressPath(routeOp.path);
149
+ const fullPath = joinPaths(basePath, expressPath);
150
+ bound.push({
151
+ operationId: opId,
152
+ fullPath,
153
+ httpMethod: manifestOp.http.method,
154
+ controllerCtor: ctor,
155
+ methodName: routeOp.methodName,
156
+ args: manifestOp.args,
157
+ responses: manifestOp.responses,
158
+ use: routeOp.use,
159
+ auth: routeOp.auth,
160
+ controllerUse: bucket.controllerUse
161
+ });
162
+ }
163
+ }
164
+ return bound;
165
+ }
166
+
167
+ // src/runtime/validation/ajv.ts
168
+ var import_ajv = __toESM(require("ajv"), 1);
169
+ var import_ajv_formats = __toESM(require("ajv-formats"), 1);
170
+ var ValidationErrorResponse = class extends Error {
171
+ constructor(statusCode, errors) {
172
+ super("Validation failed");
173
+ this.statusCode = statusCode;
174
+ this.errors = errors;
175
+ this.name = "ValidationErrorResponse";
176
+ }
177
+ };
178
+ function createValidator() {
179
+ const ajv = new import_ajv.default.default({
180
+ allErrors: true,
181
+ coerceTypes: false,
182
+ strict: false,
183
+ validateFormats: true
184
+ });
185
+ import_ajv_formats.default.default(ajv);
186
+ ajv.addFormat("br-phone", /^\(\d{2}\)\s\d{5}-\d{4}$/);
187
+ return ajv;
188
+ }
189
+ function formatValidationErrors(errors) {
190
+ const formatted = {};
191
+ for (const error of errors) {
192
+ const path3 = error.path || "body";
193
+ if (!formatted[path3]) {
194
+ formatted[path3] = [];
195
+ }
196
+ formatted[path3].push(error.message);
197
+ }
198
+ return {
199
+ error: "Validation failed",
200
+ details: formatted
201
+ };
202
+ }
203
+
204
+ // src/compiler/cache/loadArtifacts.ts
205
+ var import_node_fs = __toESM(require("fs"), 1);
206
+ var import_node_path = __toESM(require("path"), 1);
207
+ var import_promises = require("fs/promises");
208
+ var artifactCache = /* @__PURE__ */ new Map();
209
+ async function getMtime(filePath) {
210
+ try {
211
+ const stats = await (0, import_promises.stat)(filePath);
212
+ return stats.mtimeMs;
213
+ } catch {
214
+ return null;
215
+ }
216
+ }
217
+ async function loadArtifacts(options) {
218
+ const { outDir } = options;
219
+ const cacheKey = import_node_path.default.resolve(outDir);
220
+ let entry = artifactCache.get(cacheKey);
221
+ const openapiPath = import_node_path.default.join(outDir, "openapi.json");
222
+ const manifestPath = import_node_path.default.join(outDir, "manifest.json");
223
+ const validatorsPath = import_node_path.default.join(outDir, "validators.mjs");
224
+ const openapiMtime = await getMtime(openapiPath);
225
+ const manifestMtime = await getMtime(manifestPath);
226
+ const validatorsMtime = await getMtime(validatorsPath);
227
+ if (entry) {
228
+ const mtimesMatch = entry.mtimes.openapi === openapiMtime && entry.mtimes.manifest === manifestMtime && entry.mtimes.validators === validatorsMtime;
229
+ if (mtimesMatch) {
230
+ if (entry.openapi && entry.manifest) {
231
+ return {
232
+ openapi: entry.openapi,
233
+ manifest: entry.manifest,
234
+ validators: entry.validators
235
+ };
236
+ }
237
+ }
238
+ }
239
+ const openapiContent = import_node_fs.default.readFileSync(openapiPath, "utf-8");
240
+ const manifestContent = import_node_fs.default.readFileSync(manifestPath, "utf-8");
241
+ const openapi = JSON.parse(openapiContent);
242
+ const manifest = JSON.parse(manifestContent);
243
+ let validators = null;
244
+ if (manifest.validation.mode === "precompiled" && manifest.validation.precompiledModule) {
245
+ try {
246
+ const validatorsModule = await import(import_node_path.default.join(outDir, manifest.validation.precompiledModule));
247
+ validators = validatorsModule;
248
+ } catch (err) {
249
+ console.warn(`Failed to load precompiled validators: ${err}`);
250
+ }
251
+ }
252
+ artifactCache.set(cacheKey, {
253
+ openapi,
254
+ manifest,
255
+ validators,
256
+ mtimes: {
257
+ openapi: openapiMtime,
258
+ manifest: manifestMtime,
259
+ validators: validatorsMtime
260
+ }
261
+ });
262
+ return {
263
+ openapi,
264
+ manifest,
265
+ validators
266
+ };
267
+ }
268
+
269
+ // src/adapter/express/index.ts
270
+ var import_swagger_ui_express = __toESM(require("swagger-ui-express"), 1);
271
+
272
+ // src/adapter/express/bootstrap.ts
273
+ var import_express = __toESM(require("express"), 1);
274
+ var import_node_path2 = __toESM(require("path"), 1);
275
+ function bootstrap(options) {
276
+ return new Promise(async (resolve2, reject) => {
277
+ try {
278
+ const {
279
+ controllers,
280
+ port: userPort,
281
+ host: userHost,
282
+ artifactsDir: userArtifactsDir = ".adorn",
283
+ enableSwagger = true,
284
+ swaggerPath = "/docs",
285
+ swaggerJsonPath = "/docs/openapi.json",
286
+ middleware,
287
+ auth
288
+ } = options;
289
+ if (controllers.length === 0) {
290
+ reject(new Error("At least one controller must be provided to bootstrap()."));
291
+ return;
292
+ }
293
+ const envPort = process.env.PORT;
294
+ const port = userPort ?? (envPort !== void 0 ? Number(envPort) : 3e3);
295
+ const host = userHost ?? process.env.HOST ?? "0.0.0.0";
296
+ if (isNaN(port) || port < 0 || port > 65535) {
297
+ reject(new Error(`Invalid port: ${port}. Port must be between 0 and 65535.`));
298
+ return;
299
+ }
300
+ const absoluteArtifactsDir = import_node_path2.default.isAbsolute(userArtifactsDir) ? userArtifactsDir : import_node_path2.default.resolve(process.cwd(), userArtifactsDir);
301
+ const app = (0, import_express.default)();
302
+ app.use(import_express.default.json());
303
+ const router = await createExpressRouter({
304
+ controllers,
305
+ artifactsDir: absoluteArtifactsDir,
306
+ middleware,
307
+ auth
308
+ });
309
+ app.use(router);
310
+ if (enableSwagger) {
311
+ const displayHost = host === "0.0.0.0" ? "localhost" : host;
312
+ const serverUrl = `http://${displayHost}:${port}`;
313
+ app.use(
314
+ setupSwagger({
315
+ artifactsDir: absoluteArtifactsDir,
316
+ jsonPath: swaggerJsonPath,
317
+ uiPath: swaggerPath,
318
+ swaggerOptions: {
319
+ servers: [{ url: serverUrl }]
320
+ }
321
+ })
322
+ );
323
+ }
324
+ const server = app.listen(port, host, () => {
325
+ const displayHost = host === "0.0.0.0" ? "localhost" : host;
326
+ const serverUrl = `http://${displayHost}:${port}`;
327
+ console.log(`\u{1F680} Server running on ${serverUrl}`);
328
+ if (enableSwagger) {
329
+ console.log(`\u{1F4DA} Swagger UI: ${serverUrl}${swaggerPath}`);
330
+ }
331
+ const result = {
332
+ server,
333
+ app,
334
+ url: serverUrl,
335
+ port,
336
+ host,
337
+ close: () => new Promise((closeResolve) => {
338
+ server.close(() => {
339
+ console.log("Server closed gracefully");
340
+ closeResolve();
341
+ });
342
+ })
343
+ };
344
+ resolve2(result);
345
+ });
346
+ server.on("error", (error) => {
347
+ if (error.code === "EADDRINUSE") {
348
+ reject(new Error(`Port ${port} already in use. Please choose a different port.`));
349
+ } else if (error.code === "EACCES") {
350
+ reject(new Error(`Permission denied for port ${port}. Ports below 1024 require root privileges.`));
351
+ } else {
352
+ reject(new Error(`Failed to start server: ${error.message}`));
353
+ }
354
+ });
355
+ } catch (error) {
356
+ reject(error);
357
+ }
358
+ });
359
+ }
360
+
361
+ // src/adapter/express/index.ts
362
+ async function createExpressRouter(options) {
363
+ const { controllers, artifactsDir = ".adorn", middleware = {} } = options;
364
+ let manifest;
365
+ let openapi;
366
+ let precompiledValidators = null;
367
+ if (options.manifest && options.openapi) {
368
+ manifest = options.manifest;
369
+ openapi = options.openapi;
370
+ if (manifest.validation.mode === "precompiled" && manifest.validation.precompiledModule) {
371
+ try {
372
+ const validatorPath = (0, import_node_path3.join)(artifactsDir, manifest.validation.precompiledModule);
373
+ precompiledValidators = require(validatorPath).validators;
374
+ } catch (err) {
375
+ console.warn(`Failed to load precompiled validators: ${err}`);
376
+ }
377
+ }
378
+ } else {
379
+ const artifacts = await loadArtifacts({ outDir: artifactsDir });
380
+ manifest = artifacts.manifest;
381
+ openapi = artifacts.openapi;
382
+ precompiledValidators = artifacts.validators?.validators ?? null;
383
+ }
384
+ const routes = bindRoutes({ controllers, manifest });
385
+ const validator = precompiledValidators ? null : createValidator();
386
+ const router = (0, import_express2.Router)();
387
+ const instanceCache = /* @__PURE__ */ new Map();
388
+ function getInstance(Ctor) {
389
+ if (!instanceCache.has(Ctor)) {
390
+ instanceCache.set(Ctor, new Ctor());
391
+ }
392
+ return instanceCache.get(Ctor);
393
+ }
394
+ function resolveMiddleware(items, named = {}) {
395
+ return items.map((item) => {
396
+ if (typeof item === "string") {
397
+ const fn = named[item];
398
+ if (!fn) {
399
+ throw new Error(`Named middleware "${item}" not found in middleware registry`);
400
+ }
401
+ return fn;
402
+ }
403
+ return item;
404
+ });
405
+ }
406
+ function createAuthMiddleware(authConfig, routeAuth, globalSecurity) {
407
+ return async (req, res, next) => {
408
+ const isPublic = routeAuth === "public";
409
+ const hasAuthDecorator = routeAuth && routeAuth !== "public";
410
+ const hasGlobalSecurity = globalSecurity && globalSecurity.length > 0;
411
+ if (!hasAuthDecorator && !hasGlobalSecurity) {
412
+ return next();
413
+ }
414
+ if (isPublic) {
415
+ return next();
416
+ }
417
+ const authMeta = routeAuth;
418
+ const scheme = authMeta.scheme;
419
+ const requiredScopes = authMeta.scopes || [];
420
+ const isOptional = authMeta.optional ?? false;
421
+ const authRuntime = authConfig.schemes[scheme];
422
+ if (!authRuntime) {
423
+ throw new Error(`Auth scheme "${scheme}" not found in auth configuration`);
424
+ }
425
+ const result = await authRuntime.authenticate(req);
426
+ if (!result) {
427
+ if (isOptional) {
428
+ req.auth = null;
429
+ return next();
430
+ }
431
+ return authRuntime.challenge(res);
432
+ }
433
+ req.auth = result.principal;
434
+ if (authRuntime.authorize && requiredScopes.length > 0) {
435
+ if (!authRuntime.authorize(result, requiredScopes)) {
436
+ res.status(403).json({ error: "Forbidden", message: "Insufficient scopes" });
437
+ return;
438
+ }
439
+ }
440
+ next();
441
+ };
442
+ }
443
+ function getSchemaByRef(ref) {
444
+ if (!ref.startsWith("#/components/schemas/")) return null;
445
+ const schemaName = ref.replace("#/components/schemas/", "");
446
+ return openapi.components.schemas[schemaName] || null;
447
+ }
448
+ for (const route of routes) {
449
+ const method = route.httpMethod.toLowerCase();
450
+ const middlewareChain = [];
451
+ if (middleware.global) {
452
+ middlewareChain.push(...resolveMiddleware(middleware.global, middleware.named || {}));
453
+ }
454
+ if (route.controllerUse) {
455
+ middlewareChain.push(...resolveMiddleware(route.controllerUse, middleware.named || {}));
456
+ }
457
+ if (route.use) {
458
+ middlewareChain.push(...resolveMiddleware(route.use, middleware.named || {}));
459
+ }
460
+ if (options.auth) {
461
+ const authMw = createAuthMiddleware(options.auth, route.auth, openapi.security || []);
462
+ middlewareChain.push(authMw);
463
+ }
464
+ router[method](route.fullPath, ...middlewareChain, async (req, res, next) => {
465
+ try {
466
+ const validationErrors = precompiledValidators ? validateRequestWithPrecompiled(route, req, precompiledValidators) : validateRequest(route, req, openapi, validator);
467
+ if (validationErrors) {
468
+ return res.status(400).json(formatValidationErrors(validationErrors));
469
+ }
470
+ const instance = getInstance(route.controllerCtor);
471
+ const handler = instance[route.methodName];
472
+ if (typeof handler !== "function") {
473
+ throw new Error(`Method ${route.methodName} not found on controller`);
474
+ }
475
+ const args = [];
476
+ if (route.args.body) {
477
+ args[route.args.body.index] = req.body;
478
+ }
479
+ for (const pathArg of route.args.path) {
480
+ const coerced = coerceValue(req.params[pathArg.name], pathArg.schemaType);
481
+ args[pathArg.index] = coerced;
482
+ }
483
+ if (route.args.query.length > 0) {
484
+ const firstQueryIndex = route.args.query[0].index;
485
+ const allSameIndex = route.args.query.every((q) => q.index === firstQueryIndex);
486
+ if (allSameIndex) {
487
+ args[firstQueryIndex] = {};
488
+ for (const q of route.args.query) {
489
+ const parsed = parseQueryValue(req.query[q.name], q);
490
+ const coerced = coerceValue(parsed, q.schemaType);
491
+ args[firstQueryIndex][q.name] = coerced;
492
+ }
493
+ } else {
494
+ for (const q of route.args.query) {
495
+ const parsed = parseQueryValue(req.query[q.name], q);
496
+ const coerced = coerceValue(parsed, q.schemaType);
497
+ args[q.index] = coerced;
498
+ }
499
+ }
500
+ }
501
+ if (route.args.headers.length > 0) {
502
+ const firstHeaderIndex = route.args.headers[0].index;
503
+ const allSameIndex = route.args.headers.every((h) => h.index === firstHeaderIndex);
504
+ if (allSameIndex) {
505
+ args[firstHeaderIndex] = {};
506
+ for (const h of route.args.headers) {
507
+ const headerValue = req.headers[h.name.toLowerCase()];
508
+ args[firstHeaderIndex][h.name] = headerValue ?? void 0;
509
+ }
510
+ } else {
511
+ for (const h of route.args.headers) {
512
+ const headerValue = req.headers[h.name.toLowerCase()];
513
+ args[h.index] = headerValue ?? void 0;
514
+ }
515
+ }
516
+ }
517
+ if (route.args.cookies.length > 0) {
518
+ const firstCookieIndex = route.args.cookies[0].index;
519
+ const allSameIndex = route.args.cookies.every((c) => c.index === firstCookieIndex);
520
+ const cookies = parseCookies(req.headers.cookie);
521
+ if (allSameIndex) {
522
+ args[firstCookieIndex] = {};
523
+ for (const c of route.args.cookies) {
524
+ const cookieValue = cookies[c.name];
525
+ const coerced = coerceValue(cookieValue, c.schemaType);
526
+ args[firstCookieIndex][c.name] = coerced;
527
+ }
528
+ } else {
529
+ for (const c of route.args.cookies) {
530
+ const cookieValue = cookies[c.name];
531
+ const coerced = coerceValue(cookieValue, c.schemaType);
532
+ args[c.index] = coerced;
533
+ }
534
+ }
535
+ }
536
+ if (args.length === 0) {
537
+ args.push(req);
538
+ }
539
+ const result = await handler.apply(instance, args);
540
+ const primaryResponse = route.responses[0];
541
+ const status = primaryResponse?.status ?? 200;
542
+ res.status(status).json(result);
543
+ } catch (error) {
544
+ next(error);
545
+ }
546
+ });
547
+ }
548
+ return router;
549
+ }
550
+ function validateRequestWithPrecompiled(route, req, validators) {
551
+ const errors = [];
552
+ if (route.args.body) {
553
+ const validator = validators[route.operationId]?.body;
554
+ if (validator) {
555
+ const valid = validator(req.body);
556
+ if (!valid) {
557
+ const v = validators[route.operationId].body;
558
+ for (const err of v.errors || []) {
559
+ errors.push({
560
+ path: `#/body${err.instancePath}`,
561
+ message: err.message || "Invalid value",
562
+ keyword: err.keyword,
563
+ params: err.params
564
+ });
565
+ }
566
+ }
567
+ }
568
+ }
569
+ for (const q of route.args.query) {
570
+ const value = req.query[q.name];
571
+ if (value === void 0) continue;
572
+ const schema = {};
573
+ if (q.schemaType) {
574
+ const type = Array.isArray(q.schemaType) ? q.schemaType[0] : q.schemaType;
575
+ schema.type = type;
576
+ }
577
+ const coerced = coerceValue(value, q.schemaType);
578
+ if (Object.keys(schema).length > 0 && coerced !== void 0) {
579
+ errors.push({
580
+ path: `#/query/${q.name}`,
581
+ message: `Schema validation not supported for query params in precompiled mode`,
582
+ keyword: "notSupported",
583
+ params: {}
584
+ });
585
+ }
586
+ }
587
+ for (const p of route.args.path) {
588
+ const value = req.params[p.name];
589
+ if (value === void 0) continue;
590
+ const schema = {};
591
+ if (p.schemaType) {
592
+ const type = Array.isArray(p.schemaType) ? p.schemaType[0] : p.schemaType;
593
+ schema.type = type;
594
+ }
595
+ const coerced = coerceValue(value, p.schemaType);
596
+ if (Object.keys(schema).length > 0 && coerced !== void 0) {
597
+ errors.push({
598
+ path: `#/path/${p.name}`,
599
+ message: `Schema validation not supported for path params in precompiled mode`,
600
+ keyword: "notSupported",
601
+ params: {}
602
+ });
603
+ }
604
+ }
605
+ return errors.length > 0 ? errors : null;
606
+ }
607
+ function validateRequest(route, req, openapi, validator) {
608
+ function getSchemaByRef(ref) {
609
+ if (!ref.startsWith("#/components/schemas/")) return null;
610
+ const schemaName = ref.replace("#/components/schemas/", "");
611
+ return openapi.components.schemas[schemaName] || null;
612
+ }
613
+ const errors = [];
614
+ if (route.args.body) {
615
+ const bodySchema = getSchemaByRef(route.args.body.schemaRef);
616
+ if (bodySchema) {
617
+ const validate = validator.compile(bodySchema);
618
+ const valid = validate(req.body);
619
+ if (!valid) {
620
+ for (const err of validate.errors || []) {
621
+ errors.push({
622
+ path: `#/body${err.instancePath}`,
623
+ message: err.message || "Invalid value",
624
+ keyword: err.keyword,
625
+ params: err.params
626
+ });
627
+ }
628
+ }
629
+ }
630
+ }
631
+ for (const q of route.args.query) {
632
+ const value = req.query[q.name];
633
+ const schema = {};
634
+ if (q.schemaType) {
635
+ const type = Array.isArray(q.schemaType) ? q.schemaType[0] : q.schemaType;
636
+ schema.type = type;
637
+ }
638
+ if (q.schemaRef && q.schemaRef.includes("Inline")) {
639
+ const inlineSchema = getSchemaByRef(q.schemaRef);
640
+ if (inlineSchema) {
641
+ Object.assign(schema, inlineSchema);
642
+ }
643
+ }
644
+ const coerced = coerceValue(value, q.schemaType);
645
+ if (Object.keys(schema).length > 0 && coerced !== void 0) {
646
+ const validate = validator.compile(schema);
647
+ const valid = validate(coerced);
648
+ if (!valid) {
649
+ for (const err of validate.errors || []) {
650
+ errors.push({
651
+ path: `#/query/${q.name}`,
652
+ message: err.message || "Invalid value",
653
+ keyword: err.keyword,
654
+ params: err.params
655
+ });
656
+ }
657
+ }
658
+ }
659
+ }
660
+ for (const p of route.args.path) {
661
+ const value = req.params[p.name];
662
+ const schema = {};
663
+ if (p.schemaType) {
664
+ const type = Array.isArray(p.schemaType) ? p.schemaType[0] : p.schemaType;
665
+ schema.type = type;
666
+ }
667
+ if (p.schemaRef && p.schemaRef.includes("Inline")) {
668
+ const inlineSchema = getSchemaByRef(p.schemaRef);
669
+ if (inlineSchema) {
670
+ Object.assign(schema, inlineSchema);
671
+ }
672
+ }
673
+ const coerced = coerceValue(value, p.schemaType);
674
+ if (Object.keys(schema).length > 0 && coerced !== void 0) {
675
+ const validate = validator.compile(schema);
676
+ const valid = validate(coerced);
677
+ if (!valid) {
678
+ for (const err of validate.errors || []) {
679
+ errors.push({
680
+ path: `#/path/${p.name}`,
681
+ message: err.message || "Invalid value",
682
+ keyword: err.keyword,
683
+ params: err.params
684
+ });
685
+ }
686
+ }
687
+ }
688
+ }
689
+ return errors.length > 0 ? errors : null;
690
+ }
691
+ function coerceValue(value, schemaType) {
692
+ if (value === void 0 || value === null) return value;
693
+ const type = Array.isArray(schemaType) ? schemaType[0] : schemaType;
694
+ if (type === "number" || type === "integer") {
695
+ const num = Number(value);
696
+ if (isNaN(num)) {
697
+ throw new Error(`Invalid number: ${value}`);
698
+ }
699
+ return num;
700
+ }
701
+ if (type === "boolean") {
702
+ if (value === "true") return true;
703
+ if (value === "false") return false;
704
+ throw new Error(`Invalid boolean: ${value}`);
705
+ }
706
+ return value;
707
+ }
708
+ function parseQueryValue(value, param) {
709
+ if (value === void 0 || value === null) return value;
710
+ const isArray = Array.isArray(param.schemaType) ? param.schemaType.includes("array") : param.schemaType === "array";
711
+ if (!isArray) return value;
712
+ const style = param.serialization?.style ?? "form";
713
+ const explode = param.serialization?.explode ?? true;
714
+ if (Array.isArray(value)) {
715
+ return value;
716
+ }
717
+ if (style === "form") {
718
+ if (explode) {
719
+ return value;
720
+ }
721
+ return value.split(",");
722
+ }
723
+ if (style === "spaceDelimited") {
724
+ return value.split(" ");
725
+ }
726
+ if (style === "pipeDelimited") {
727
+ return value.split("|");
728
+ }
729
+ return value;
730
+ }
731
+ function parseCookies(cookieHeader) {
732
+ if (!cookieHeader) return {};
733
+ const cookies = {};
734
+ const pairs = cookieHeader.split(";");
735
+ for (const pair of pairs) {
736
+ const [name, ...valueParts] = pair.trim().split("=");
737
+ if (name) {
738
+ cookies[name] = valueParts.join("=");
739
+ }
740
+ }
741
+ return cookies;
742
+ }
743
+ function setupSwagger(options = {}) {
744
+ const {
745
+ artifactsDir = ".adorn",
746
+ jsonPath = "/docs/openapi.json",
747
+ uiPath = "/docs",
748
+ swaggerOptions = {}
749
+ } = options;
750
+ const router = (0, import_express2.Router)();
751
+ router.get(jsonPath, (req, res) => {
752
+ const openApiPath = (0, import_node_path3.isAbsolute)(artifactsDir) ? (0, import_node_path3.resolve)(artifactsDir, "openapi.json") : (0, import_node_path3.resolve)(process.cwd(), artifactsDir, "openapi.json");
753
+ const content = (0, import_node_fs2.readFileSync)(openApiPath, "utf-8");
754
+ res.setHeader("Content-Type", "application/json");
755
+ res.send(content);
756
+ });
757
+ router.use(uiPath, import_swagger_ui_express.default.serve, import_swagger_ui_express.default.setup(null, {
758
+ swaggerOptions: {
759
+ url: jsonPath,
760
+ ...swaggerOptions
761
+ }
762
+ }));
763
+ return router;
764
+ }
765
+ // Annotate the CommonJS export names for ESM import in node:
766
+ 0 && (module.exports = {
767
+ ValidationErrorResponse,
768
+ bindRoutes,
769
+ bootstrap,
770
+ createExpressRouter,
771
+ createValidator,
772
+ formatValidationErrors,
773
+ setupSwagger
774
+ });
775
+ //# sourceMappingURL=express.cjs.map