adorn-api 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. package/README.md +54 -249
  2. package/dist/adapters/express/createApp.d.ts +158 -0
  3. package/dist/adapters/express/createApp.d.ts.map +1 -0
  4. package/dist/adapters/express/createApp.js +141 -0
  5. package/dist/adapters/express/createApp.js.map +1 -0
  6. package/dist/adapters/express/index.d.ts +7 -0
  7. package/dist/adapters/express/index.d.ts.map +1 -0
  8. package/dist/adapters/express/index.js +7 -0
  9. package/dist/adapters/express/index.js.map +1 -0
  10. package/dist/adapters/express/middleware/errorHandler.d.ts +194 -0
  11. package/dist/adapters/express/middleware/errorHandler.d.ts.map +1 -0
  12. package/dist/adapters/express/middleware/errorHandler.js +167 -0
  13. package/dist/adapters/express/middleware/errorHandler.js.map +1 -0
  14. package/dist/adapters/express/middleware/requestContext.d.ts +2 -0
  15. package/dist/adapters/express/middleware/requestContext.d.ts.map +1 -0
  16. package/dist/adapters/express/middleware/requestContext.js +3 -0
  17. package/dist/adapters/express/middleware/requestContext.js.map +1 -0
  18. package/dist/adapters/express/router.d.ts +10 -0
  19. package/dist/adapters/express/router.d.ts.map +1 -0
  20. package/dist/adapters/express/router.js +105 -0
  21. package/dist/adapters/express/router.js.map +1 -0
  22. package/dist/adapters/express/swagger/index.d.ts +2 -0
  23. package/dist/adapters/express/swagger/index.d.ts.map +1 -0
  24. package/dist/adapters/express/swagger/index.js +2 -0
  25. package/dist/adapters/express/swagger/index.js.map +1 -0
  26. package/dist/adapters/express/swagger/serve.d.ts +12 -0
  27. package/dist/adapters/express/swagger/serve.d.ts.map +1 -0
  28. package/dist/adapters/express/swagger/serve.js +72 -0
  29. package/dist/adapters/express/swagger/serve.js.map +1 -0
  30. package/dist/adapters/express/transport/request.d.ts +4 -0
  31. package/dist/adapters/express/transport/request.d.ts.map +1 -0
  32. package/dist/adapters/express/transport/request.js +12 -0
  33. package/dist/adapters/express/transport/request.js.map +1 -0
  34. package/dist/adapters/express/transport/response.d.ts +5 -0
  35. package/dist/adapters/express/transport/response.d.ts.map +1 -0
  36. package/dist/adapters/express/transport/response.js +36 -0
  37. package/dist/adapters/express/transport/response.js.map +1 -0
  38. package/dist/cli/commands/dev.d.ts +2 -0
  39. package/dist/cli/commands/dev.d.ts.map +1 -0
  40. package/dist/cli/commands/dev.js +3 -0
  41. package/dist/cli/commands/dev.js.map +1 -0
  42. package/dist/cli/commands/gen.d.ts +2 -0
  43. package/dist/cli/commands/gen.d.ts.map +1 -0
  44. package/dist/cli/commands/gen.js +3 -0
  45. package/dist/cli/commands/gen.js.map +1 -0
  46. package/dist/cli/main.d.ts +2 -0
  47. package/dist/cli/main.d.ts.map +1 -0
  48. package/dist/cli/main.js +3 -0
  49. package/dist/cli/main.js.map +1 -0
  50. package/dist/cli.d.ts +2 -0
  51. package/dist/cli.d.ts.map +1 -0
  52. package/dist/cli.js +3 -0
  53. package/dist/cli.js.map +1 -0
  54. package/dist/compiler/config/defaults.d.ts +2 -0
  55. package/dist/compiler/config/defaults.d.ts.map +1 -0
  56. package/dist/compiler/config/defaults.js +3 -0
  57. package/dist/compiler/config/defaults.js.map +1 -0
  58. package/dist/compiler/config/loadConfig.d.ts +2 -0
  59. package/dist/compiler/config/loadConfig.d.ts.map +1 -0
  60. package/dist/compiler/config/loadConfig.js +3 -0
  61. package/dist/compiler/config/loadConfig.js.map +1 -0
  62. package/dist/compiler/diagnostics/errors.d.ts +2 -0
  63. package/dist/compiler/diagnostics/errors.d.ts.map +1 -0
  64. package/dist/compiler/diagnostics/errors.js +3 -0
  65. package/dist/compiler/diagnostics/errors.js.map +1 -0
  66. package/dist/compiler/emit/openapi.d.ts +2 -0
  67. package/dist/compiler/emit/openapi.d.ts.map +1 -0
  68. package/dist/compiler/emit/openapi.js +3 -0
  69. package/dist/compiler/emit/openapi.js.map +1 -0
  70. package/dist/compiler/emit/routes.d.ts +2 -0
  71. package/dist/compiler/emit/routes.d.ts.map +1 -0
  72. package/dist/compiler/emit/routes.js +3 -0
  73. package/dist/compiler/emit/routes.js.map +1 -0
  74. package/dist/compiler/program/loadTsProgram.d.ts +2 -0
  75. package/dist/compiler/program/loadTsProgram.d.ts.map +1 -0
  76. package/dist/compiler/program/loadTsProgram.js +3 -0
  77. package/dist/compiler/program/loadTsProgram.js.map +1 -0
  78. package/dist/compiler/scan/actions.d.ts +2 -0
  79. package/dist/compiler/scan/actions.d.ts.map +1 -0
  80. package/dist/compiler/scan/actions.js +3 -0
  81. package/dist/compiler/scan/actions.js.map +1 -0
  82. package/dist/compiler/scan/controllers.d.ts +2 -0
  83. package/dist/compiler/scan/controllers.d.ts.map +1 -0
  84. package/dist/compiler/scan/controllers.js +3 -0
  85. package/dist/compiler/scan/controllers.js.map +1 -0
  86. package/dist/compiler/scan/types.d.ts +2 -0
  87. package/dist/compiler/scan/types.d.ts.map +1 -0
  88. package/dist/compiler/scan/types.js +3 -0
  89. package/dist/compiler/scan/types.js.map +1 -0
  90. package/dist/contracts/context.d.ts +10 -0
  91. package/dist/contracts/context.d.ts.map +1 -0
  92. package/dist/contracts/context.js +2 -0
  93. package/dist/contracts/context.js.map +1 -0
  94. package/dist/contracts/errors.d.ts +22 -0
  95. package/dist/contracts/errors.d.ts.map +1 -0
  96. package/dist/contracts/errors.js +2 -0
  97. package/dist/contracts/errors.js.map +1 -0
  98. package/dist/contracts/http.d.ts +2 -0
  99. package/dist/contracts/http.d.ts.map +1 -0
  100. package/dist/contracts/http.js +3 -0
  101. package/dist/contracts/http.js.map +1 -0
  102. package/dist/contracts/middleware.d.ts +2 -0
  103. package/dist/contracts/middleware.d.ts.map +1 -0
  104. package/dist/contracts/middleware.js +3 -0
  105. package/dist/contracts/middleware.js.map +1 -0
  106. package/dist/contracts/openapi-v3.d.ts +538 -0
  107. package/dist/contracts/openapi-v3.d.ts.map +1 -0
  108. package/dist/contracts/openapi-v3.js +2 -0
  109. package/dist/contracts/openapi-v3.js.map +1 -0
  110. package/dist/contracts/openapi.d.ts +2 -0
  111. package/dist/contracts/openapi.d.ts.map +1 -0
  112. package/dist/contracts/openapi.js +2 -0
  113. package/dist/contracts/openapi.js.map +1 -0
  114. package/dist/contracts/reply.d.ts +119 -0
  115. package/dist/contracts/reply.d.ts.map +1 -0
  116. package/dist/contracts/reply.js +43 -0
  117. package/dist/contracts/reply.js.map +1 -0
  118. package/dist/contracts/response-types.d.ts +40 -0
  119. package/dist/contracts/response-types.d.ts.map +1 -0
  120. package/dist/contracts/response-types.js +2 -0
  121. package/dist/contracts/response-types.js.map +1 -0
  122. package/dist/contracts/responses.d.ts +98 -0
  123. package/dist/contracts/responses.d.ts.map +1 -0
  124. package/dist/contracts/responses.js +2 -0
  125. package/dist/contracts/responses.js.map +1 -0
  126. package/dist/contracts/route-options.d.ts +155 -0
  127. package/dist/contracts/route-options.d.ts.map +1 -0
  128. package/dist/contracts/route-options.js +2 -0
  129. package/dist/contracts/route-options.js.map +1 -0
  130. package/dist/contracts/route-typing.d.ts +25 -0
  131. package/dist/contracts/route-typing.d.ts.map +1 -0
  132. package/dist/contracts/route-typing.js +2 -0
  133. package/dist/contracts/route-typing.js.map +1 -0
  134. package/dist/contracts/validator.d.ts +146 -0
  135. package/dist/contracts/validator.d.ts.map +1 -0
  136. package/dist/contracts/validator.js +2 -0
  137. package/dist/contracts/validator.js.map +1 -0
  138. package/dist/core/binding/binder.d.ts +74 -0
  139. package/dist/core/binding/binder.d.ts.map +1 -0
  140. package/dist/core/binding/binder.js +161 -0
  141. package/dist/core/binding/binder.js.map +1 -0
  142. package/dist/core/binding/coerce/arrays.d.ts +7 -0
  143. package/dist/core/binding/coerce/arrays.d.ts.map +1 -0
  144. package/dist/core/binding/coerce/arrays.js +28 -0
  145. package/dist/core/binding/coerce/arrays.js.map +1 -0
  146. package/dist/core/binding/coerce/csv.d.ts +2 -0
  147. package/dist/core/binding/coerce/csv.d.ts.map +1 -0
  148. package/dist/core/binding/coerce/csv.js +7 -0
  149. package/dist/core/binding/coerce/csv.js.map +1 -0
  150. package/dist/core/binding/coerce/objects.d.ts +2 -0
  151. package/dist/core/binding/coerce/objects.d.ts.map +1 -0
  152. package/dist/core/binding/coerce/objects.js +3 -0
  153. package/dist/core/binding/coerce/objects.js.map +1 -0
  154. package/dist/core/binding/coerce/primitives.d.ts +70 -0
  155. package/dist/core/binding/coerce/primitives.d.ts.map +1 -0
  156. package/dist/core/binding/coerce/primitives.js +88 -0
  157. package/dist/core/binding/coerce/primitives.js.map +1 -0
  158. package/dist/core/binding/index.d.ts +2 -0
  159. package/dist/core/binding/index.d.ts.map +1 -0
  160. package/dist/core/binding/index.js +2 -0
  161. package/dist/core/binding/index.js.map +1 -0
  162. package/dist/core/binding/rules/inferFromHttpMethod.d.ts +6 -0
  163. package/dist/core/binding/rules/inferFromHttpMethod.d.ts.map +1 -0
  164. package/dist/core/binding/rules/inferFromHttpMethod.js +11 -0
  165. package/dist/core/binding/rules/inferFromHttpMethod.js.map +1 -0
  166. package/dist/core/binding/rules/inferFromPath.d.ts +2 -0
  167. package/dist/core/binding/rules/inferFromPath.d.ts.map +1 -0
  168. package/dist/core/binding/rules/inferFromPath.js +9 -0
  169. package/dist/core/binding/rules/inferFromPath.js.map +1 -0
  170. package/dist/core/binding/rules/wrappers.d.ts +2 -0
  171. package/dist/core/binding/rules/wrappers.d.ts.map +1 -0
  172. package/dist/core/binding/rules/wrappers.js +3 -0
  173. package/dist/core/binding/rules/wrappers.js.map +1 -0
  174. package/dist/core/errors/http-error.d.ts +63 -0
  175. package/dist/core/errors/http-error.d.ts.map +1 -0
  176. package/dist/core/errors/http-error.js +71 -0
  177. package/dist/core/errors/http-error.js.map +1 -0
  178. package/dist/core/errors/index.d.ts +4 -0
  179. package/dist/core/errors/index.d.ts.map +1 -0
  180. package/dist/core/errors/index.js +4 -0
  181. package/dist/core/errors/index.js.map +1 -0
  182. package/dist/core/errors/problem.d.ts +3 -0
  183. package/dist/core/errors/problem.d.ts.map +1 -0
  184. package/dist/core/errors/problem.js +33 -0
  185. package/dist/core/errors/problem.js.map +1 -0
  186. package/dist/core/errors/validation-error.d.ts +73 -0
  187. package/dist/core/errors/validation-error.d.ts.map +1 -0
  188. package/dist/core/errors/validation-error.js +82 -0
  189. package/dist/core/errors/validation-error.js.map +1 -0
  190. package/dist/core/openapi/buildOpenApi.d.ts +79 -0
  191. package/dist/core/openapi/buildOpenApi.d.ts.map +1 -0
  192. package/dist/core/openapi/buildOpenApi.js +196 -0
  193. package/dist/core/openapi/buildOpenApi.js.map +1 -0
  194. package/dist/core/openapi/index.d.ts +2 -0
  195. package/dist/core/openapi/index.d.ts.map +1 -0
  196. package/dist/core/openapi/index.js +2 -0
  197. package/dist/core/openapi/index.js.map +1 -0
  198. package/dist/core/openapi/schema/formats.d.ts +2 -0
  199. package/dist/core/openapi/schema/formats.d.ts.map +1 -0
  200. package/dist/core/openapi/schema/formats.js +3 -0
  201. package/dist/core/openapi/schema/formats.js.map +1 -0
  202. package/dist/core/openapi/schema/registry.d.ts +9 -0
  203. package/dist/core/openapi/schema/registry.d.ts.map +1 -0
  204. package/dist/core/openapi/schema/registry.js +21 -0
  205. package/dist/core/openapi/schema/registry.js.map +1 -0
  206. package/dist/core/openapi/schema/schemaModel.d.ts +2 -0
  207. package/dist/core/openapi/schema/schemaModel.d.ts.map +1 -0
  208. package/dist/core/openapi/schema/schemaModel.js +3 -0
  209. package/dist/core/openapi/schema/schemaModel.js.map +1 -0
  210. package/dist/core/openapi/schema/schemaRegistry.d.ts +2 -0
  211. package/dist/core/openapi/schema/schemaRegistry.d.ts.map +1 -0
  212. package/dist/core/openapi/schema/schemaRegistry.js +3 -0
  213. package/dist/core/openapi/schema/schemaRegistry.js.map +1 -0
  214. package/dist/core/openapi/schema/toOpenApi.d.ts +4 -0
  215. package/dist/core/openapi/schema/toOpenApi.d.ts.map +1 -0
  216. package/dist/core/openapi/schema/toOpenApi.js +82 -0
  217. package/dist/core/openapi/schema/toOpenApi.js.map +1 -0
  218. package/dist/core/pipeline/compose.d.ts +2 -0
  219. package/dist/core/pipeline/compose.d.ts.map +1 -0
  220. package/dist/core/pipeline/compose.js +3 -0
  221. package/dist/core/pipeline/compose.js.map +1 -0
  222. package/dist/core/pipeline/errorMap.d.ts +2 -0
  223. package/dist/core/pipeline/errorMap.d.ts.map +1 -0
  224. package/dist/core/pipeline/errorMap.js +3 -0
  225. package/dist/core/pipeline/errorMap.js.map +1 -0
  226. package/dist/core/pipeline/invoke.d.ts +2 -0
  227. package/dist/core/pipeline/invoke.d.ts.map +1 -0
  228. package/dist/core/pipeline/invoke.js +3 -0
  229. package/dist/core/pipeline/invoke.js.map +1 -0
  230. package/dist/core/pipeline/result.d.ts +2 -0
  231. package/dist/core/pipeline/result.d.ts.map +1 -0
  232. package/dist/core/pipeline/result.js +3 -0
  233. package/dist/core/pipeline/result.js.map +1 -0
  234. package/dist/core/registry/buildRegistry.d.ts +3 -0
  235. package/dist/core/registry/buildRegistry.d.ts.map +1 -0
  236. package/dist/core/registry/buildRegistry.js +105 -0
  237. package/dist/core/registry/buildRegistry.js.map +1 -0
  238. package/dist/core/registry/conflicts.d.ts +6 -0
  239. package/dist/core/registry/conflicts.d.ts.map +1 -0
  240. package/dist/core/registry/conflicts.js +21 -0
  241. package/dist/core/registry/conflicts.js.map +1 -0
  242. package/dist/core/registry/index.d.ts +5 -0
  243. package/dist/core/registry/index.d.ts.map +1 -0
  244. package/dist/core/registry/index.js +5 -0
  245. package/dist/core/registry/index.js.map +1 -0
  246. package/dist/core/registry/normalize.d.ts +3 -0
  247. package/dist/core/registry/normalize.d.ts.map +1 -0
  248. package/dist/core/registry/normalize.js +24 -0
  249. package/dist/core/registry/normalize.js.map +1 -0
  250. package/dist/core/registry/types.d.ts +225 -0
  251. package/dist/core/registry/types.d.ts.map +1 -0
  252. package/dist/core/registry/types.js +2 -0
  253. package/dist/core/registry/types.js.map +1 -0
  254. package/dist/core/reply/index.d.ts +3 -0
  255. package/dist/core/reply/index.d.ts.map +1 -0
  256. package/dist/core/reply/index.js +3 -0
  257. package/dist/core/reply/index.js.map +1 -0
  258. package/dist/core/reply/reply.d.ts +102 -0
  259. package/dist/core/reply/reply.d.ts.map +1 -0
  260. package/dist/core/reply/reply.js +105 -0
  261. package/dist/core/reply/reply.js.map +1 -0
  262. package/dist/core/reply/typed.d.ts +161 -0
  263. package/dist/core/reply/typed.d.ts.map +1 -0
  264. package/dist/core/reply/typed.js +154 -0
  265. package/dist/core/reply/typed.js.map +1 -0
  266. package/dist/core/responses/helpers.d.ts +10 -0
  267. package/dist/core/responses/helpers.d.ts.map +1 -0
  268. package/dist/core/responses/helpers.js +8 -0
  269. package/dist/core/responses/helpers.js.map +1 -0
  270. package/dist/core/responses/index.d.ts +4 -0
  271. package/dist/core/responses/index.d.ts.map +1 -0
  272. package/dist/core/responses/index.js +4 -0
  273. package/dist/core/responses/index.js.map +1 -0
  274. package/dist/core/responses/normalize.d.ts +3 -0
  275. package/dist/core/responses/normalize.d.ts.map +1 -0
  276. package/dist/core/responses/normalize.js +33 -0
  277. package/dist/core/responses/normalize.js.map +1 -0
  278. package/dist/core/responses/pickStatus.d.ts +3 -0
  279. package/dist/core/responses/pickStatus.d.ts.map +1 -0
  280. package/dist/core/responses/pickStatus.js +27 -0
  281. package/dist/core/responses/pickStatus.js.map +1 -0
  282. package/dist/core/route/defineRoute.d.ts +74 -0
  283. package/dist/core/route/defineRoute.d.ts.map +1 -0
  284. package/dist/core/route/defineRoute.js +59 -0
  285. package/dist/core/route/defineRoute.js.map +1 -0
  286. package/dist/core/route/index.d.ts +2 -0
  287. package/dist/core/route/index.d.ts.map +1 -0
  288. package/dist/core/route/index.js +2 -0
  289. package/dist/core/route/index.js.map +1 -0
  290. package/dist/core/serialization/json.d.ts +2 -0
  291. package/dist/core/serialization/json.d.ts.map +1 -0
  292. package/dist/core/serialization/json.js +3 -0
  293. package/dist/core/serialization/json.js.map +1 -0
  294. package/dist/core/typing/path-params.d.ts +2 -0
  295. package/dist/core/typing/path-params.d.ts.map +1 -0
  296. package/dist/core/typing/path-params.js +2 -0
  297. package/dist/core/typing/path-params.js.map +1 -0
  298. package/dist/decorators/binding.d.ts +9 -0
  299. package/dist/decorators/binding.d.ts.map +1 -0
  300. package/dist/decorators/binding.js +18 -0
  301. package/dist/decorators/binding.js.map +1 -0
  302. package/dist/decorators/controller.d.ts +6 -0
  303. package/dist/decorators/controller.d.ts.map +1 -0
  304. package/dist/decorators/controller.js +26 -0
  305. package/dist/decorators/controller.js.map +1 -0
  306. package/dist/decorators/db.d.ts +2 -0
  307. package/dist/decorators/db.d.ts.map +1 -0
  308. package/dist/decorators/db.js +3 -0
  309. package/dist/decorators/db.js.map +1 -0
  310. package/dist/decorators/docs.d.ts +8 -0
  311. package/dist/decorators/docs.d.ts.map +1 -0
  312. package/dist/decorators/docs.js +46 -0
  313. package/dist/decorators/docs.js.map +1 -0
  314. package/dist/decorators/index.d.ts +7 -0
  315. package/dist/decorators/index.d.ts.map +1 -0
  316. package/dist/decorators/index.js +7 -0
  317. package/dist/decorators/index.js.map +1 -0
  318. package/dist/decorators/methods.d.ts +146 -0
  319. package/dist/decorators/methods.d.ts.map +1 -0
  320. package/dist/decorators/methods.js +170 -0
  321. package/dist/decorators/methods.js.map +1 -0
  322. package/dist/decorators/middleware.d.ts +2 -0
  323. package/dist/decorators/middleware.d.ts.map +1 -0
  324. package/dist/decorators/middleware.js +3 -0
  325. package/dist/decorators/middleware.js.map +1 -0
  326. package/dist/decorators/responses.d.ts +7 -0
  327. package/dist/decorators/responses.d.ts.map +1 -0
  328. package/dist/decorators/responses.js +44 -0
  329. package/dist/decorators/responses.js.map +1 -0
  330. package/dist/decorators/security.d.ts +8 -0
  331. package/dist/decorators/security.d.ts.map +1 -0
  332. package/dist/decorators/security.js +39 -0
  333. package/dist/decorators/security.js.map +1 -0
  334. package/dist/express.d.ts +2 -0
  335. package/dist/express.d.ts.map +1 -0
  336. package/dist/express.js +2 -0
  337. package/dist/express.js.map +1 -0
  338. package/dist/index.d.ts +13 -0
  339. package/dist/index.d.ts.map +1 -0
  340. package/dist/index.js +13 -2
  341. package/dist/index.js.map +1 -0
  342. package/dist/integrations/metal-orm/index.d.ts +2 -0
  343. package/dist/integrations/metal-orm/index.d.ts.map +1 -0
  344. package/dist/integrations/metal-orm/index.js +2 -0
  345. package/dist/integrations/metal-orm/index.js.map +1 -0
  346. package/dist/integrations/metal-orm/pagination/executePaged.d.ts +2 -0
  347. package/dist/integrations/metal-orm/pagination/executePaged.d.ts.map +1 -0
  348. package/dist/integrations/metal-orm/pagination/executePaged.js +3 -0
  349. package/dist/integrations/metal-orm/pagination/executePaged.js.map +1 -0
  350. package/dist/integrations/metal-orm/pagination/page.d.ts +2 -0
  351. package/dist/integrations/metal-orm/pagination/page.d.ts.map +1 -0
  352. package/dist/integrations/metal-orm/pagination/page.js +3 -0
  353. package/dist/integrations/metal-orm/pagination/page.js.map +1 -0
  354. package/dist/integrations/metal-orm/query/filters.d.ts +2 -0
  355. package/dist/integrations/metal-orm/query/filters.d.ts.map +1 -0
  356. package/dist/integrations/metal-orm/query/filters.js +3 -0
  357. package/dist/integrations/metal-orm/query/filters.js.map +1 -0
  358. package/dist/integrations/metal-orm/query/search.d.ts +2 -0
  359. package/dist/integrations/metal-orm/query/search.d.ts.map +1 -0
  360. package/dist/integrations/metal-orm/query/search.js +3 -0
  361. package/dist/integrations/metal-orm/query/search.js.map +1 -0
  362. package/dist/integrations/metal-orm/query/sort.d.ts +2 -0
  363. package/dist/integrations/metal-orm/query/sort.d.ts.map +1 -0
  364. package/dist/integrations/metal-orm/query/sort.js +3 -0
  365. package/dist/integrations/metal-orm/query/sort.js.map +1 -0
  366. package/dist/integrations/metal-orm/save-graph/helpers.d.ts +2 -0
  367. package/dist/integrations/metal-orm/save-graph/helpers.d.ts.map +1 -0
  368. package/dist/integrations/metal-orm/save-graph/helpers.js +3 -0
  369. package/dist/integrations/metal-orm/save-graph/helpers.js.map +1 -0
  370. package/dist/integrations/metal-orm/save-graph/types.d.ts +2 -0
  371. package/dist/integrations/metal-orm/save-graph/types.d.ts.map +1 -0
  372. package/dist/integrations/metal-orm/save-graph/types.js +3 -0
  373. package/dist/integrations/metal-orm/save-graph/types.js.map +1 -0
  374. package/dist/integrations/metal-orm/schema/column-map.d.ts +96 -0
  375. package/dist/integrations/metal-orm/schema/column-map.d.ts.map +1 -0
  376. package/dist/integrations/metal-orm/schema/column-map.js +207 -0
  377. package/dist/integrations/metal-orm/schema/column-map.js.map +1 -0
  378. package/dist/integrations/metal-orm/schema/ddl.d.ts +2 -0
  379. package/dist/integrations/metal-orm/schema/ddl.d.ts.map +1 -0
  380. package/dist/integrations/metal-orm/schema/ddl.js +3 -0
  381. package/dist/integrations/metal-orm/schema/ddl.js.map +1 -0
  382. package/dist/integrations/metal-orm/schema/dto.d.ts +7 -0
  383. package/dist/integrations/metal-orm/schema/dto.d.ts.map +1 -0
  384. package/dist/integrations/metal-orm/schema/dto.js +34 -0
  385. package/dist/integrations/metal-orm/schema/dto.js.map +1 -0
  386. package/dist/integrations/metal-orm/schema/entity.d.ts +99 -0
  387. package/dist/integrations/metal-orm/schema/entity.d.ts.map +1 -0
  388. package/dist/integrations/metal-orm/schema/entity.js +99 -0
  389. package/dist/integrations/metal-orm/schema/entity.js.map +1 -0
  390. package/dist/integrations/metal-orm/schema/filters.d.ts +11 -0
  391. package/dist/integrations/metal-orm/schema/filters.d.ts.map +1 -0
  392. package/dist/integrations/metal-orm/schema/filters.js +21 -0
  393. package/dist/integrations/metal-orm/schema/filters.js.map +1 -0
  394. package/dist/integrations/metal-orm/schema/index.d.ts +5 -0
  395. package/dist/integrations/metal-orm/schema/index.d.ts.map +1 -0
  396. package/dist/integrations/metal-orm/schema/index.js +5 -0
  397. package/dist/integrations/metal-orm/schema/index.js.map +1 -0
  398. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts +2 -0
  399. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts.map +1 -0
  400. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js +3 -0
  401. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js.map +1 -0
  402. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts +2 -0
  403. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts.map +1 -0
  404. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js +3 -0
  405. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js.map +1 -0
  406. package/dist/integrations/metal-orm/schema/sqlite.d.ts +2 -0
  407. package/dist/integrations/metal-orm/schema/sqlite.d.ts.map +1 -0
  408. package/dist/integrations/metal-orm/schema/sqlite.js +3 -0
  409. package/dist/integrations/metal-orm/schema/sqlite.js.map +1 -0
  410. package/dist/integrations/metal-orm/schema/tabledef.d.ts +4 -0
  411. package/dist/integrations/metal-orm/schema/tabledef.d.ts.map +1 -0
  412. package/dist/integrations/metal-orm/schema/tabledef.js +10 -0
  413. package/dist/integrations/metal-orm/schema/tabledef.js.map +1 -0
  414. package/dist/integrations/metal-orm/schema/types.d.ts +7 -0
  415. package/dist/integrations/metal-orm/schema/types.d.ts.map +1 -0
  416. package/dist/integrations/metal-orm/schema/types.js +2 -0
  417. package/dist/integrations/metal-orm/schema/types.js.map +1 -0
  418. package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts +2 -0
  419. package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts.map +1 -0
  420. package/dist/integrations/metal-orm/serialization/entitySerializer.js +3 -0
  421. package/dist/integrations/metal-orm/serialization/entitySerializer.js.map +1 -0
  422. package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts +2 -0
  423. package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts.map +1 -0
  424. package/dist/integrations/metal-orm/serialization/relationPolicy.js +3 -0
  425. package/dist/integrations/metal-orm/serialization/relationPolicy.js.map +1 -0
  426. package/dist/integrations/metal-orm/session/context.d.ts +2 -0
  427. package/dist/integrations/metal-orm/session/context.d.ts.map +1 -0
  428. package/dist/integrations/metal-orm/session/context.js +3 -0
  429. package/dist/integrations/metal-orm/session/context.js.map +1 -0
  430. package/dist/integrations/metal-orm/session/middleware.d.ts +2 -0
  431. package/dist/integrations/metal-orm/session/middleware.d.ts.map +1 -0
  432. package/dist/integrations/metal-orm/session/middleware.js +3 -0
  433. package/dist/integrations/metal-orm/session/middleware.js.map +1 -0
  434. package/dist/integrations/metal-orm/session/transaction.d.ts +2 -0
  435. package/dist/integrations/metal-orm/session/transaction.d.ts.map +1 -0
  436. package/dist/integrations/metal-orm/session/transaction.js +3 -0
  437. package/dist/integrations/metal-orm/session/transaction.js.map +1 -0
  438. package/dist/integrations/metal-orm/testing/setupSchema.d.ts +2 -0
  439. package/dist/integrations/metal-orm/testing/setupSchema.d.ts.map +1 -0
  440. package/dist/integrations/metal-orm/testing/setupSchema.js +3 -0
  441. package/dist/integrations/metal-orm/testing/setupSchema.js.map +1 -0
  442. package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts +2 -0
  443. package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts.map +1 -0
  444. package/dist/integrations/metal-orm/testing/sqliteMemory.js +3 -0
  445. package/dist/integrations/metal-orm/testing/sqliteMemory.js.map +1 -0
  446. package/dist/metadata/bag.d.ts +18 -0
  447. package/dist/metadata/bag.d.ts.map +1 -0
  448. package/dist/metadata/bag.js +39 -0
  449. package/dist/metadata/bag.js.map +1 -0
  450. package/dist/metadata/index.d.ts +4 -0
  451. package/dist/metadata/index.d.ts.map +1 -0
  452. package/dist/metadata/index.js +4 -0
  453. package/dist/metadata/index.js.map +1 -0
  454. package/dist/metadata/keys.d.ts +254 -0
  455. package/dist/metadata/keys.d.ts.map +1 -0
  456. package/dist/metadata/keys.js +23 -0
  457. package/dist/metadata/keys.js.map +1 -0
  458. package/dist/metadata/merge.d.ts +9 -0
  459. package/dist/metadata/merge.d.ts.map +1 -0
  460. package/dist/metadata/merge.js +30 -0
  461. package/dist/metadata/merge.js.map +1 -0
  462. package/dist/metal-orm.d.ts +2 -0
  463. package/dist/metal-orm.d.ts.map +1 -0
  464. package/dist/metal-orm.js +2 -0
  465. package/dist/metal-orm.js.map +1 -0
  466. package/dist/validation/native/index.d.ts +3 -0
  467. package/dist/validation/native/index.d.ts.map +1 -0
  468. package/dist/validation/native/index.js +3 -0
  469. package/dist/validation/native/index.js.map +1 -0
  470. package/dist/validation/native/ir.d.ts +38 -0
  471. package/dist/validation/native/ir.d.ts.map +1 -0
  472. package/dist/validation/native/ir.js +2 -0
  473. package/dist/validation/native/ir.js.map +1 -0
  474. package/dist/validation/native/schema.d.ts +63 -0
  475. package/dist/validation/native/schema.d.ts.map +1 -0
  476. package/dist/validation/native/schema.js +271 -0
  477. package/dist/validation/native/schema.js.map +1 -0
  478. package/dist/validation/native/validator.d.ts +21 -0
  479. package/dist/validation/native/validator.d.ts.map +1 -0
  480. package/dist/validation/native/validator.js +48 -0
  481. package/dist/validation/native/validator.js.map +1 -0
  482. package/package.json +57 -34
  483. package/dist/cli/generate-routes.js +0 -101
  484. package/dist/cli/generate-swagger.js +0 -197
  485. package/dist/controllers/advanced.controller.js +0 -131
  486. package/dist/controllers/user.controller.js +0 -121
  487. package/dist/entities/user.entity.js +0 -1
  488. package/dist/lib/common.js +0 -62
  489. package/dist/lib/decorators.js +0 -116
  490. package/dist/middleware/auth.middleware.js +0 -13
  491. package/dist/routes.js +0 -80
  492. package/dist/server.js +0 -18
  493. package/dist/src/cli/generate-routes.js +0 -105
  494. package/dist/src/cli/generate-swagger.js +0 -197
  495. package/dist/src/index.js +0 -4
  496. package/dist/src/lib/common.js +0 -62
  497. package/dist/src/lib/decorators.js +0 -116
  498. package/dist/src/routes.js +0 -80
  499. package/dist/src/server.js +0 -18
  500. package/dist/tests/example-app/controllers/advanced.controller.js +0 -130
  501. package/dist/tests/example-app/controllers/controllers/advanced.controller.js +0 -131
  502. package/dist/tests/example-app/controllers/controllers/user.controller.js +0 -121
  503. package/dist/tests/example-app/controllers/user.controller.js +0 -121
  504. package/dist/tests/example-app/entities/entities/user.entity.js +0 -1
  505. package/dist/tests/example-app/entities/user.entity.js +0 -1
  506. package/dist/tests/example-app/middleware/auth.middleware.js +0 -13
  507. package/dist/tests/example-app/middleware/middleware/auth.middleware.js +0 -13
  508. package/dist/tests/example-app/routes.js +0 -80
  509. package/dist/tests/example-app/server.js +0 -23
  510. package/scripts/run-example.js +0 -32
  511. package/src/cli/generate-routes.ts +0 -123
  512. package/src/cli/generate-swagger.ts +0 -216
  513. package/src/index.js +0 -20
  514. package/src/index.ts +0 -4
  515. package/src/lib/common.js +0 -68
  516. package/src/lib/common.ts +0 -35
  517. package/src/lib/decorators.js +0 -128
  518. package/src/lib/decorators.ts +0 -136
  519. package/swagger.json +0 -238
  520. package/tests/e2e.test.ts +0 -72
  521. package/tests/example-app/controllers/advanced.controller.ts +0 -52
  522. package/tests/example-app/controllers/user.controller.ts +0 -35
  523. package/tests/example-app/entities/user.entity.ts +0 -8
  524. package/tests/example-app/middleware/auth.middleware.ts +0 -16
  525. package/tests/example-app/routes.ts +0 -102
  526. package/tests/example-app/server.ts +0 -30
  527. package/tests/generators.test.ts +0 -48
  528. package/tests/utils.ts +0 -46
  529. package/tsconfig.json +0 -20
package/README.md CHANGED
@@ -1,249 +1,54 @@
1
- # Adorn API
2
-
3
- A TypeScript API framework using **Standard TC39 Decorators** (not experimental decorators) to build type-safe, self-documenting APIs with automatic OpenAPI/Swagger generation.
4
-
5
- ## Features
6
-
7
- - **Standard Decorators**: Uses TC39 Stage 3 decorators (no experimental flags needed)
8
- - ✅ **Type-Safe DTOs**: Full TypeScript type checking at edit time
9
- - ✅ **Automatic Swagger Generation**: Generates OpenAPI 3.0 documentation from your code
10
- - ✅ **Runtime Route Generation**: Automatically creates Express routes
11
- - **Inheritance Support**: Extend base DTO classes with full type information
12
- - **Generic Response Types**: `EntityResponse<T>`, `CreateInput<T>`, etc.
13
- - **Authentication**: Built-in `@Authorized` decorator
14
- - **Union Types & Enums**: Automatically converted to Swagger enums
15
- - **Nested Objects**: Recursive type resolution for complex DTOs
16
-
17
- ## Installation
18
-
19
- ```bash
20
- npm install adorn-api
21
- ```
22
-
23
- ## Quick Start
24
-
25
- ### 1. Create a Controller
26
-
27
- ```typescript
28
- // src/controllers/user.controller.ts
29
- import { Controller, Get, Post, FromQuery, FromPath, FromBody } from "adorn-api";
30
-
31
- class GetUserRequest {
32
- @FromPath()
33
- userId!: string;
34
-
35
- @FromQuery()
36
- details?: boolean;
37
- }
38
-
39
- @Controller("users")
40
- export class UserController {
41
- @Get("/{userId}")
42
- public async getUser(req: GetUserRequest): Promise<string> {
43
- return `Getting user ${req.userId} with details: ${req.details}`;
44
- }
45
- }
46
- ```
47
-
48
- ### 2. Generate Swagger and Routes
49
-
50
- ```bash
51
- npx adorn-api gen
52
- ```
53
-
54
- This generates:
55
- - `swagger.json` - OpenAPI 3.0 specification
56
- - `src/routes.ts` - Express route handlers
57
-
58
- ### 3. Start Your Server
59
-
60
- ```typescript
61
- // src/server.ts
62
- import express from "express";
63
- import { RegisterRoutes } from "./routes.js";
64
-
65
- const app = express();
66
- app.use(express.json());
67
-
68
- RegisterRoutes(app);
69
-
70
- app.listen(3000, () => {
71
- console.log("Server running on http://localhost:3000");
72
- });
73
- ```
74
-
75
- Visit http://localhost:3000/docs to see your Swagger UI.
76
-
77
- ## Advanced Usage
78
-
79
- ### Inheritance & Generics
80
-
81
- ```typescript
82
- import { PaginationQuery, EntityResponse, CreateInput } from "../lib/common.js";
83
-
84
- // Inherit pagination properties
85
- class UserListRequest extends PaginationQuery {
86
- search?: string;
87
-
88
- @FromPath()
89
- tenantId!: string;
90
- }
91
-
92
- // Use generic type helpers
93
- class CreateUserDto implements CreateInput<User, 'name' | 'email'> {
94
- @FromBody()
95
- name!: string;
96
-
97
- @FromBody()
98
- email!: string;
99
- }
100
-
101
- @Controller("advanced")
102
- export class AdvancedController {
103
- @Get("/{tenantId}/users")
104
- public async listUsers(req: UserListRequest): Promise<EntityResponse<User[]>> {
105
- return [/* ... */];
106
- }
107
- }
108
- ```
109
-
110
- ### Authentication
111
-
112
- ```typescript
113
- import { Authorized } from "../lib/decorators.js";
114
-
115
- @Controller("profile")
116
- export class ProfileController {
117
- @Authorized("admin")
118
- @Post("/update")
119
- public async update(req: UpdateProfileDto) {
120
- // Only accessible with valid Bearer token
121
- return { success: true };
122
- }
123
- }
124
- ```
125
-
126
- ## Project Structure
127
-
128
- ```
129
- adorn-api/
130
- ├── src/
131
- │ ├── lib/
132
- │ │ ├── decorators.ts # Standard decorators (@Get, @Post, @Controller, etc.)
133
- │ │ └── common.ts # Common types (PaginationQuery, EntityResponse, etc.)
134
- │ ├── cli/
135
- │ │ ├── generate-swagger.ts # Swagger/OpenAPI generator
136
- │ │ └── generate-routes.ts # Express route generator
137
- │ └── index.ts # Main library entry point
138
- ├── tests/
139
- │ └── example-app/ # Example application using adorn-api
140
- │ ├── controllers/ # Example controllers
141
- │ ├── entities/ # Example entities
142
- │ ├── middleware/ # Example middleware
143
- │ ├── routes.ts # Generated routes (auto-generated)
144
- │ └── server.ts # Example Express server
145
- ├── swagger.json # Generated OpenAPI spec
146
- └── package.json
147
- ```
148
-
149
- ## Development
150
-
151
- ### Available Scripts
152
-
153
- - `npm run build` - Compile TypeScript to JavaScript
154
- - `npm run gen:spec` - Generate Swagger documentation only
155
- - `npm run gen:routes` - Generate Express routes only
156
- - `npm run gen` - Generate both Swagger and routes
157
- - `npm run example` - Run the example application
158
-
159
- ### Testing the Library
160
-
161
- ```bash
162
- # Generate from example app
163
- npm run gen
164
-
165
- # Run the example server
166
- npm run example
167
- ```
168
-
169
- ## How It Works
170
-
171
- ### 1. Decorators (src/lib/decorators.ts)
172
-
173
- Uses **Standard TC39 Decorators** with `context.addInitializer()` to attach metadata:
174
-
175
- ```typescript
176
- export function Get(path: string) {
177
- return function (originalMethod: any, context: ClassMethodDecoratorContext) {
178
- context.addInitializer(function () {
179
- // Store route metadata
180
- const routes = (this as any)[META_KEY] || [];
181
- routes.push({ method: 'get', path, methodName: String(context.name) });
182
- (this as any)[META_KEY] = routes;
183
- });
184
- return originalMethod;
185
- };
186
- }
187
- ```
188
-
189
- ### 2. Swagger Generator (src/cli/generate-swagger.ts)
190
-
191
- Uses **ts-morph** to statically analyze TypeScript code:
192
-
193
- - Parses `@Controller` and `@Get`/`@Post` decorators
194
- - Resolves DTO types including inheritance and generics
195
- - Converts TypeScript types to JSON Schema
196
- - Handles union types (enums), nested objects, and Promise unwrapping
197
- - Generates OpenAPI 3.0 specification
198
-
199
- ### 3. Route Generator (src/cli/generate-routes.ts)
200
-
201
- Generates actual Express route handlers:
202
-
203
- ```typescript
204
- // Generated code in src/routes.ts
205
- app.get('/users/:userId', async (req: Request, res: Response) => {
206
- const controller = new UserController();
207
- const input: any = {};
208
- Object.assign(input, req.query);
209
- Object.assign(input, req.params);
210
- Object.assign(input, req.body);
211
-
212
- const response = await controller.getUser(input);
213
- res.status(200).json(response);
214
- });
215
- ```
216
-
217
- ## Why Standard Decorators?
218
-
219
- 1. **Future-Proof**: Uses the official TC39 decorator proposal (Stage 3)
220
- 2. **No Experimental Flags**: Works with `"experimentalDecorators": false`
221
- 3. **Better Type Safety**: Leverages TypeScript's type system instead of runtime reflection
222
- 4. **Cleaner API**: Single-parameter DTO pattern is more explicit than parameter decorators
223
-
224
- ## Comparison with tsoa
225
-
226
- | Feature | tsoa (Legacy) | adorn-api |
227
- |---------|---------------|-----------|
228
- | Decorators | Experimental (`emitDecoratorMetadata`) | Standard TC39 |
229
- | Parameter Decorators | `@Body() body: string` | DTO classes with `@FromBody()` |
230
- | Type Safety | Runtime reflection | Edit-time type checking |
231
- | Inheritance | Limited | Full support |
232
- | Generics | Complex | Native TypeScript |
233
- | Future Compatibility | Deprecated in future TS | Officially supported |
234
-
235
- ## Next Steps
236
-
237
- To make this production-ready:
238
-
239
- 1. **Validation**: Integrate Zod or class-validator in the route generator
240
- 2. **Error Handling**: Add centralized error handling middleware
241
- 3. **Database Integration**: Add ORM support (Prisma, TypeORM, etc.)
242
- 4. **Testing**: Add unit and integration test utilities
243
- 5. **CORS**: Add CORS configuration
244
- 6. **Rate Limiting**: Add rate limiting middleware
245
- 7. **Logging**: Add structured logging (Winston, Pino)
246
-
247
- ## License
248
-
249
- ISC
1
+ # Adorn API
2
+ Adorn API turns TypeScript classes into HTTP controllers with Stage-3 decorators, then wires Express routes, validation, and OpenAPI docs from the same metadata. It stays small and focused while still supporting MetalORM-backed persistence when you want it.
3
+
4
+ ## Why Adorn API
5
+ - One source of truth: decorators and schemas drive routing, validation, and OpenAPI.
6
+ - Express-native by default, without locking you into a large framework.
7
+ - MetalORM helpers keep DTOs, filters, and entities in sync.
8
+ - Test-first ergonomics with clear e2e coverage of the runtime wiring.
9
+
10
+ ## Features
11
+ - Controller decorators (`@Controller`, `@Get`, `@Post`, etc.) backed by a registry/router that mounts on Express.
12
+ - `createAdornExpressRouter` and `buildRegistry` for mounting Adorn into existing Express stacks.
13
+ - Problem Details error handling with an `onError` hook for custom shapes/logging.
14
+ - Built-in OpenAPI generator with optional Swagger UI serving through the Express adapter.
15
+ - MetalORM helpers (`entityDto`, `filtersFromEntity`, `tableDefOf`) to reuse entity metadata for payload validation and database filtering.
16
+ - End-to-end coverage for both direct API handlers and MetalORM REST routes using Vitest + Supertest.
17
+
18
+ For detailed writeups of each feature, see the companion guides under `docs/` (including the Stage-3 decorator setup).
19
+
20
+ ## Requirements
21
+ - Node.js v18+
22
+ - SQLite (only for in-memory tests; runtime persistence is pluggable via MetalORM executors)
23
+ - TypeScript 5.x with Stage-3 decorators (do not enable `experimentalDecorators`)
24
+
25
+ ## Getting started
26
+ 1. `npm install` to pull runtime and dev dependencies (Express, MetalORM, Vitest).
27
+ 2. `npm run build` to compile the TypeScript sources into `dist/`.
28
+ 3. `npm run test` to run the full Vitest suite (unit + integration/e2e tests).
29
+
30
+ For quick feedback on a single spec file: `npm run test -- test/e2e/metal-orm.adorn-api.rest.spec.ts`.
31
+
32
+ ## Scripts
33
+ - `npm run clean`: removes the `dist` directory.
34
+ - `npm run build`: transpiles `src/**/*.ts` via the `tsconfig.build.json` bundle target.
35
+ - `npm run typecheck`: runs `tsc` with strict settings against `src` + `test`.
36
+ - `npm run check`: runs the decorated-return contract check plus the test suite.
37
+ - `npm run test` / `npm run test:e2e`: run the entire Vitest suite or just the e2e directory.
38
+
39
+ ## MetalORM integration
40
+ - Controllers create `OrmSession` instances with a shared in-memory SQLite executor for tests.
41
+ - DTOs and filter schemas derive directly from `metal-orm` entity definitions via helpers in `src/integrations/metal-orm/schema`.
42
+ - The REST controller examples show how to load entities via `selectFromEntity`, update tracked instances, and rely on `OrmSession` flush/commit semantics without manually writing SQL.
43
+
44
+ Learn more about MetalORM on npm: https://www.npmjs.com/package/metal-orm
45
+
46
+ ## Project layout
47
+ - `src/`: exports glue code (`express`, `metal-orm`, validation helpers, adapters).
48
+ - `test/e2e/`: Vitest suites exercising the Express and MetalORM API surface.
49
+ - `src/types/metal-orm.d.ts`: local type definitions used while the shared MetalORM package upgrades.
50
+
51
+ ## Next steps
52
+ 1. Add real decorators and metadata for your domain models under `src`.
53
+ 2. Extend `src/adapters/express` to add middleware or transports as needed.
54
+ 3. Hook a persistent MetalORM executor when moving beyond the in-memory SQLite setup used in tests.
@@ -0,0 +1,158 @@
1
+ import { type Express, type Router } from 'express';
2
+ import type { ControllerCtor, Registry } from '../../core/registry/types.js';
3
+ import type { Validator } from '../../contracts/validator.js';
4
+ import { type ApplyRoutesOptions } from './router.js';
5
+ import { type AdornErrorHandlerOptions } from './middleware/errorHandler.js';
6
+ import type { OpenApiBuildOptions } from '../../core/openapi/buildOpenApi.js';
7
+ /**
8
+ * Options for OpenAPI documentation generation and serving.
9
+ * Extends OpenApiBuildOptions with serving configuration.
10
+ */
11
+ export type AdornOpenApiOptions = OpenApiBuildOptions & {
12
+ /** Whether to enable OpenAPI documentation (default: true) */
13
+ enabled?: boolean;
14
+ /** Path to serve the OpenAPI JSON specification (default: '/openapi.json') */
15
+ jsonPath?: string;
16
+ /** Path to serve the OpenAPI documentation UI (default: '/docs') */
17
+ docsPath?: string;
18
+ /** Whether to serve Swagger UI (default: true) */
19
+ swaggerUi?: boolean;
20
+ /** Configuration options for Swagger UI */
21
+ swaggerUiConfig?: Record<string, unknown>;
22
+ };
23
+ /**
24
+ * Options for creating an Adorn Express router with controllers.
25
+ *
26
+ * @see ApplyRoutesOptions for additional routing options
27
+ */
28
+ export type CreateAdornExpressRouterOptions = ApplyRoutesOptions & {
29
+ /** Array of controller constructors to register */
30
+ controllers: ControllerCtor[];
31
+ /** Whether to automatically add JSON body parser middleware (default: true) */
32
+ jsonBodyParser?: boolean;
33
+ /** Validator instance for request validation */
34
+ validator?: Validator;
35
+ /** Error handler configuration or false to disable (default: built-in handler) */
36
+ errorHandler?: AdornErrorHandlerOptions | false;
37
+ /** OpenAPI documentation configuration */
38
+ openapi?: AdornOpenApiOptions;
39
+ };
40
+ /**
41
+ * Result of creating an Adorn Express router.
42
+ */
43
+ export type CreateAdornExpressRouterResult = {
44
+ /** Configured Express router with all routes */
45
+ router: Router;
46
+ /** Route registry containing metadata about all registered routes */
47
+ registry: Registry;
48
+ };
49
+ /**
50
+ * Options for creating an Adorn Express application.
51
+ * Extends router options with mount path configuration.
52
+ *
53
+ * @see CreateAdornExpressRouterOptions for base options
54
+ */
55
+ export type CreateAdornExpressAppOptions = CreateAdornExpressRouterOptions & {
56
+ /** Path to mount the router (default: '/') */
57
+ mountPath?: string;
58
+ };
59
+ /**
60
+ * Creates a complete Express application with Adorn API functionality.
61
+ *
62
+ * This function sets up an Express app with all Adorn features including:
63
+ * - Controller-based routing
64
+ * - Automatic OpenAPI documentation
65
+ * - Built-in error handling
66
+ * - Request validation
67
+ *
68
+ * @param options - Configuration options for the application
69
+ * @returns Configured Express application instance
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * import { createAdornExpressApp } from '@adorn/api';
74
+ * import { UserController } from './controllers/user.controller';
75
+ *
76
+ * const app = createAdornExpressApp({
77
+ * controllers: [UserController],
78
+ * openapi: {
79
+ * title: 'My API',
80
+ * version: '1.0.0'
81
+ * }
82
+ * });
83
+ *
84
+ * app.listen(3000, () => {
85
+ * console.log('Server running on port 3000');
86
+ * });
87
+ * ```
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * // With custom mount path
92
+ * const app = createAdornExpressApp({
93
+ * controllers: [UserController, ProductController],
94
+ * mountPath: '/api/v1',
95
+ * jsonBodyParser: true,
96
+ * errorHandler: {
97
+ * logErrors: true,
98
+ * exposeStack: process.env.NODE_ENV === 'development'
99
+ * }
100
+ * });
101
+ * ```
102
+ *
103
+ * @see createAdornExpressRouter for router-specific functionality
104
+ * @see AdornOpenApiOptions for OpenAPI configuration
105
+ */
106
+ export declare function createAdornExpressApp(options: CreateAdornExpressAppOptions): Express;
107
+ /**
108
+ * Creates an Express router with Adorn API functionality.
109
+ *
110
+ * This function sets up an Express router with all Adorn features including:
111
+ * - Controller-based routing
112
+ * - Automatic OpenAPI documentation
113
+ * - Built-in error handling
114
+ * - Request validation
115
+ *
116
+ * @param options - Configuration options for the router
117
+ * @returns Object containing the configured router and route registry
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * import { createAdornExpressRouter } from '@adorn/api';
122
+ * import { UserController } from './controllers/user.controller';
123
+ * import express from 'express';
124
+ *
125
+ * const app = express();
126
+ * const { router, registry } = createAdornExpressRouter({
127
+ * controllers: [UserController],
128
+ * openapi: {
129
+ * title: 'My API',
130
+ * version: '1.0.0',
131
+ * docsPath: '/api-docs'
132
+ * }
133
+ * });
134
+ *
135
+ * app.use('/api', router);
136
+ *
137
+ * // Access the registry for runtime inspection
138
+ * console.log('Registered routes:', registry.routes.length);
139
+ * ```
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * // With custom validator and error handling
144
+ * const { router } = createAdornExpressRouter({
145
+ * controllers: [UserController],
146
+ * validator: new CustomValidator(),
147
+ * errorHandler: {
148
+ * logErrors: true,
149
+ * customErrorFormatter: (err) => ({ ...err, timestamp: new Date() })
150
+ * }
151
+ * });
152
+ * ```
153
+ *
154
+ * @see createAdornExpressApp for full application setup
155
+ * @see AdornOpenApiOptions for OpenAPI configuration
156
+ */
157
+ export declare function createAdornExpressRouter(options: CreateAdornExpressRouterOptions): CreateAdornExpressRouterResult;
158
+ //# sourceMappingURL=createApp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createApp.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/createApp.ts"],"names":[],"mappings":"AAAA,OAAgB,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,EAAgC,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAG9E;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG;IACtD,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,+BAA+B,GAAG,kBAAkB,GAAG;IACjE,mDAAmD;IACnD,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,+EAA+E;IAC/E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,gDAAgD;IAChD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,kFAAkF;IAClF,YAAY,CAAC,EAAE,wBAAwB,GAAG,KAAK,CAAC;IAChD,0CAA0C;IAC1C,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,4BAA4B,GAAG,+BAA+B,GAAG;IAC3E,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,OAAO,CAKpF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,+BAA+B,GACvC,8BAA8B,CAqChC"}
@@ -0,0 +1,141 @@
1
+ import express, {} from 'express';
2
+ import { buildRegistry } from '../../core/registry/buildRegistry.js';
3
+ import { applyRegistryToExpressRouter } from './router.js';
4
+ import { adornErrorHandler, createAdornExpressErrorHandler, } from './middleware/errorHandler.js';
5
+ import { serveOpenApi } from './swagger/serve.js';
6
+ /**
7
+ * Creates a complete Express application with Adorn API functionality.
8
+ *
9
+ * This function sets up an Express app with all Adorn features including:
10
+ * - Controller-based routing
11
+ * - Automatic OpenAPI documentation
12
+ * - Built-in error handling
13
+ * - Request validation
14
+ *
15
+ * @param options - Configuration options for the application
16
+ * @returns Configured Express application instance
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * import { createAdornExpressApp } from '@adorn/api';
21
+ * import { UserController } from './controllers/user.controller';
22
+ *
23
+ * const app = createAdornExpressApp({
24
+ * controllers: [UserController],
25
+ * openapi: {
26
+ * title: 'My API',
27
+ * version: '1.0.0'
28
+ * }
29
+ * });
30
+ *
31
+ * app.listen(3000, () => {
32
+ * console.log('Server running on port 3000');
33
+ * });
34
+ * ```
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * // With custom mount path
39
+ * const app = createAdornExpressApp({
40
+ * controllers: [UserController, ProductController],
41
+ * mountPath: '/api/v1',
42
+ * jsonBodyParser: true,
43
+ * errorHandler: {
44
+ * logErrors: true,
45
+ * exposeStack: process.env.NODE_ENV === 'development'
46
+ * }
47
+ * });
48
+ * ```
49
+ *
50
+ * @see createAdornExpressRouter for router-specific functionality
51
+ * @see AdornOpenApiOptions for OpenAPI configuration
52
+ */
53
+ export function createAdornExpressApp(options) {
54
+ const app = express();
55
+ const { router } = createAdornExpressRouter(options);
56
+ app.use(options.mountPath ?? '/', router);
57
+ return app;
58
+ }
59
+ /**
60
+ * Creates an Express router with Adorn API functionality.
61
+ *
62
+ * This function sets up an Express router with all Adorn features including:
63
+ * - Controller-based routing
64
+ * - Automatic OpenAPI documentation
65
+ * - Built-in error handling
66
+ * - Request validation
67
+ *
68
+ * @param options - Configuration options for the router
69
+ * @returns Object containing the configured router and route registry
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * import { createAdornExpressRouter } from '@adorn/api';
74
+ * import { UserController } from './controllers/user.controller';
75
+ * import express from 'express';
76
+ *
77
+ * const app = express();
78
+ * const { router, registry } = createAdornExpressRouter({
79
+ * controllers: [UserController],
80
+ * openapi: {
81
+ * title: 'My API',
82
+ * version: '1.0.0',
83
+ * docsPath: '/api-docs'
84
+ * }
85
+ * });
86
+ *
87
+ * app.use('/api', router);
88
+ *
89
+ * // Access the registry for runtime inspection
90
+ * console.log('Registered routes:', registry.routes.length);
91
+ * ```
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * // With custom validator and error handling
96
+ * const { router } = createAdornExpressRouter({
97
+ * controllers: [UserController],
98
+ * validator: new CustomValidator(),
99
+ * errorHandler: {
100
+ * logErrors: true,
101
+ * customErrorFormatter: (err) => ({ ...err, timestamp: new Date() })
102
+ * }
103
+ * });
104
+ * ```
105
+ *
106
+ * @see createAdornExpressApp for full application setup
107
+ * @see AdornOpenApiOptions for OpenAPI configuration
108
+ */
109
+ export function createAdornExpressRouter(options) {
110
+ const router = express.Router();
111
+ if (options.jsonBodyParser ?? true) {
112
+ router.use(express.json());
113
+ }
114
+ const registry = buildRegistry(options.controllers);
115
+ applyRegistryToExpressRouter(router, registry, options);
116
+ const oa = options.openapi;
117
+ if (oa?.enabled ?? true) {
118
+ if (oa?.title && oa?.version) {
119
+ const openApiOptions = {
120
+ title: oa.title,
121
+ version: oa.version,
122
+ ...(oa.servers !== undefined ? { servers: oa.servers } : {}),
123
+ };
124
+ const serveOptions = {
125
+ ...(oa.jsonPath !== undefined ? { jsonPath: oa.jsonPath } : {}),
126
+ ...(oa.docsPath !== undefined ? { docsPath: oa.docsPath } : {}),
127
+ ...(oa.swaggerUi !== undefined ? { swaggerUi: oa.swaggerUi } : {}),
128
+ ...(oa.swaggerUiConfig !== undefined ? { swaggerUiConfig: oa.swaggerUiConfig } : {}),
129
+ };
130
+ router.use(serveOpenApi(registry, openApiOptions, serveOptions));
131
+ }
132
+ }
133
+ if (options.errorHandler !== false) {
134
+ const handler = options.errorHandler
135
+ ? createAdornExpressErrorHandler(options.errorHandler)
136
+ : adornErrorHandler;
137
+ router.use(handler);
138
+ }
139
+ return { router, registry };
140
+ }
141
+ //# sourceMappingURL=createApp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createApp.js","sourceRoot":"","sources":["../../../src/adapters/express/createApp.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,EAAE,EAA6B,MAAM,SAAS,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAA2B,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,iBAAiB,EACjB,8BAA8B,GAE/B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA0DlD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAqC;IACzE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACrD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAwC;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAEhC,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpD,4BAA4B,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAExD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAC3B,IAAI,EAAE,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAwB;gBAC1C,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,OAAO,EAAE,EAAE,CAAC,OAAO;gBACnB,GAAG,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC7D,CAAC;YACF,MAAM,YAAY,GAAG;gBACnB,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/D,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClE,GAAG,CAAC,EAAE,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrF,CAAC;YAEF,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY;YAClC,CAAC,CAAC,8BAA8B,CAAC,OAAO,CAAC,YAAY,CAAC;YACtD,CAAC,CAAC,iBAAiB,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './createApp.js';
2
+ export * from './router.js';
3
+ export * from './transport/request.js';
4
+ export * from './transport/response.js';
5
+ export * from './middleware/errorHandler.js';
6
+ export * from './swagger/index.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './createApp.js';
2
+ export * from './router.js';
3
+ export * from './transport/request.js';
4
+ export * from './transport/response.js';
5
+ export * from './middleware/errorHandler.js';
6
+ export * from './swagger/index.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/express/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC"}