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