adorn-api 1.0.0 → 1.0.1

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 +51 -249
  2. package/dist/adapters/express/createApp.d.ts +20 -0
  3. package/dist/adapters/express/createApp.d.ts.map +1 -0
  4. package/dist/adapters/express/createApp.js +35 -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 +3 -0
  11. package/dist/adapters/express/middleware/errorHandler.d.ts.map +1 -0
  12. package/dist/adapters/express/middleware/errorHandler.js +6 -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 +103 -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 +77 -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 +11 -0
  115. package/dist/contracts/reply.d.ts.map +1 -0
  116. package/dist/contracts/reply.js +4 -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 +18 -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 +24 -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 +25 -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 +19 -0
  139. package/dist/core/binding/binder.d.ts.map +1 -0
  140. package/dist/core/binding/binder.js +128 -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 +3 -0
  155. package/dist/core/binding/coerce/primitives.d.ts.map +1 -0
  156. package/dist/core/binding/coerce/primitives.js +18 -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 +9 -0
  175. package/dist/core/errors/http-error.d.ts.map +1 -0
  176. package/dist/core/errors/http-error.js +17 -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 +8 -0
  187. package/dist/core/errors/validation-error.d.ts.map +1 -0
  188. package/dist/core/errors/validation-error.js +17 -0
  189. package/dist/core/errors/validation-error.js.map +1 -0
  190. package/dist/core/openapi/buildOpenApi.d.ts +14 -0
  191. package/dist/core/openapi/buildOpenApi.d.ts.map +1 -0
  192. package/dist/core/openapi/buildOpenApi.js +134 -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 +61 -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 +32 -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 +8 -0
  259. package/dist/core/reply/reply.d.ts.map +1 -0
  260. package/dist/core/reply/reply.js +18 -0
  261. package/dist/core/reply/reply.js.map +1 -0
  262. package/dist/core/reply/typed.d.ts +27 -0
  263. package/dist/core/reply/typed.d.ts.map +1 -0
  264. package/dist/core/reply/typed.js +19 -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 +32 -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 +27 -0
  283. package/dist/core/route/defineRoute.d.ts.map +1 -0
  284. package/dist/core/route/defineRoute.js +18 -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 +2 -0
  311. package/dist/decorators/docs.d.ts.map +1 -0
  312. package/dist/decorators/docs.js +3 -0
  313. package/dist/decorators/docs.js.map +1 -0
  314. package/dist/decorators/index.d.ts +4 -0
  315. package/dist/decorators/index.d.ts.map +1 -0
  316. package/dist/decorators/index.js +4 -0
  317. package/dist/decorators/index.js.map +1 -0
  318. package/dist/decorators/methods.d.ts +24 -0
  319. package/dist/decorators/methods.d.ts.map +1 -0
  320. package/dist/decorators/methods.js +46 -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 +2 -0
  327. package/dist/decorators/responses.d.ts.map +1 -0
  328. package/dist/decorators/responses.js +3 -0
  329. package/dist/decorators/responses.js.map +1 -0
  330. package/dist/decorators/security.d.ts +2 -0
  331. package/dist/decorators/security.d.ts.map +1 -0
  332. package/dist/decorators/security.js +3 -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 +12 -0
  339. package/dist/index.d.ts.map +1 -0
  340. package/dist/index.js +12 -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 +5 -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 +80 -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 +17 -0
  387. package/dist/integrations/metal-orm/schema/entity.d.ts.map +1 -0
  388. package/dist/integrations/metal-orm/schema/entity.js +27 -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 +20 -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 +17 -0
  447. package/dist/metadata/bag.d.ts.map +1 -0
  448. package/dist/metadata/bag.js +38 -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 +52 -0
  455. package/dist/metadata/keys.d.ts.map +1 -0
  456. package/dist/metadata/keys.js +29 -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 +27 -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 +53 -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
@@ -1,23 +0,0 @@
1
- // tests/example-app/server.ts
2
- // Example Express server using adorn-api
3
- import express from "express";
4
- import bodyParser from "body-parser";
5
- import { readFileSync } from "fs";
6
- import { fileURLToPath } from "url";
7
- import { dirname, join } from "path";
8
- import swaggerUi from "swagger-ui-express";
9
- // Import generated routes
10
- import { RegisterRoutes } from "./routes.js";
11
- const __filename = fileURLToPath(import.meta.url);
12
- const __dirname = dirname(__filename);
13
- const app = express();
14
- app.use(bodyParser.json());
15
- // Register the Generated Routes
16
- RegisterRoutes(app);
17
- // Serve Swagger UI
18
- const swaggerDoc = JSON.parse(readFileSync(join(__dirname, "../../swagger.json"), "utf-8"));
19
- app.use("/docs", swaggerUi.serve, swaggerUi.setup(swaggerDoc));
20
- app.listen(3000, () => {
21
- console.log("🚀 Example server running on http://localhost:3000");
22
- console.log("📄 Swagger running on http://localhost:3000/docs");
23
- });
@@ -1,32 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import path from "node:path";
3
- import { fileURLToPath, pathToFileURL } from "node:url";
4
-
5
- const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
6
- const loader = pathToFileURL(path.join(projectRoot, "node_modules", "ts-node", "esm.mjs")).toString();
7
- const server = path.join(projectRoot, "tests", "example-app", "server.ts");
8
-
9
- const child = spawn(
10
- process.execPath,
11
- ["--loader", loader, server],
12
- {
13
- stdio: "inherit",
14
- env: {
15
- ...process.env,
16
- TS_NODE_PROJECT: path.join(projectRoot, "tsconfig.json"),
17
- TS_NODE_PREFER_TS_EXTS: "true",
18
- },
19
- }
20
- );
21
-
22
- ["SIGINT", "SIGTERM"].forEach(signal => {
23
- process.on(signal, () => {
24
- if (!child.killed) {
25
- child.kill(signal);
26
- }
27
- });
28
- });
29
-
30
- child.on("exit", code => {
31
- process.exitCode = code ?? 0;
32
- });
@@ -1,123 +0,0 @@
1
- // src/cli/generate-routes.ts
2
- import path from "path";
3
- import { Project, ClassDeclaration } from "ts-morph";
4
- import * as fs from "fs";
5
-
6
- const PROJECT_ROOT = "./tsconfig.json";
7
- const OUTPUT_FILE = "./tests/example-app/routes.ts"; // We generate this file!
8
-
9
- const project = new Project({ tsConfigFilePath: PROJECT_ROOT });
10
-
11
- let routeCode = `/* tslint:disable */
12
- /* eslint-disable */
13
- // WARNING: This file was auto-generated by adorn-api. Do not edit.
14
- import { Express, Request, Response } from 'express';
15
- `;
16
-
17
- // Helper to keep track of imports we need to add to the generated file
18
- const imports = new Set<string>();
19
-
20
- function processController(classDec: ClassDeclaration) {
21
- const className = classDec.getName();
22
- if (!className) return "";
23
-
24
- // Track import (assuming controllers are in ./controllers/)
25
- const sourceFile = classDec.getSourceFile();
26
- const exampleAppRoot = path.join(process.cwd(), "tests", "example-app");
27
- const relativeDir = path.relative(exampleAppRoot, sourceFile.getDirectoryPath());
28
- const relativeSegments = relativeDir ? relativeDir.split(path.sep) : [];
29
- const baseName = sourceFile.getBaseName().replace(/\.ts$/, ".js");
30
- const importPath = `./${path.posix.join(...relativeSegments, baseName)}`;
31
- imports.add(`import { ${className} } from '${importPath}';`);
32
-
33
- const controllerDec = classDec.getDecorators().find(d => d.getName() === "Controller");
34
- if (!controllerDec) return "";
35
-
36
- const basePath = controllerDec.getArguments()[0]?.getText().replace(/['"]/g, "") || "/";
37
- let methodBlocks = "";
38
-
39
- classDec.getMethods().forEach(method => {
40
- const getDec = method.getDecorator("Get");
41
- const postDec = method.getDecorator("Post");
42
- const putDec = method.getDecorator("Put");
43
- const deleteDec = method.getDecorator("Delete");
44
- const decorator = getDec || postDec || putDec || deleteDec;
45
- if (!decorator) return;
46
-
47
- const httpMethod = getDec ? "get" : postDec ? "post" : putDec ? "put" : "delete";
48
- const pathArg = decorator.getArguments()[0]?.getText().replace(/['"]/g, "") || "/";
49
- const fullPath = `/${basePath}${pathArg}`.replace("//", "/").replace(/{/g, ":").replace(/}/g, ""); // Convert {id} to :id for Express
50
-
51
- const methodName = method.getName();
52
- const params = method.getParameters();
53
-
54
- // Authentication check
55
- const authDec = method.getDecorator("Authorized");
56
- const controllerAuthDec = classDec.getDecorator("Authorized");
57
- const hasAuth = !!authDec || !!controllerAuthDec;
58
- const middlewareArgs = hasAuth ? "authenticationMiddleware, " : "";
59
-
60
- // Logic to instantiate the DTO
61
- let paramInstantiation = "";
62
- if (params.length > 0) {
63
- const paramName = params[0].getName();
64
- const paramType = params[0].getType().getSymbol()?.getName();
65
-
66
- // We assume the DTO is a class we can instantiate, or a shape we construct
67
- // Here we map request parts to the DTO
68
- paramInstantiation = `
69
- const input: any = {};
70
- // Map Query
71
- Object.assign(input, req.query);
72
- // Map Params
73
- Object.assign(input, req.params);
74
- // Map Body
75
- Object.assign(input, req.body);
76
-
77
- // In a real app, you would run 'zod' or 'class-validator' here on 'input'
78
- `;
79
- }
80
-
81
- methodBlocks += `
82
- app.${httpMethod}('${fullPath}', ${middlewareArgs}async (req: Request, res: Response) => {
83
- const controller = new ${className}();
84
- try {
85
- ${paramInstantiation}
86
- const response = await controller.${methodName}(${params.length > 0 ? 'input' : ''});
87
- res.status(200).json(response);
88
- } catch (err: any) {
89
- console.error(err);
90
- res.status(500).send(err.message);
91
- }
92
- });
93
- `;
94
- });
95
-
96
- return methodBlocks;
97
- }
98
-
99
- const sourceFiles = project.getSourceFiles("tests/example-app/controllers/**/*.ts");
100
- let allRoutes = "";
101
-
102
- sourceFiles.forEach(file => {
103
- file.getClasses().forEach(c => {
104
- allRoutes += processController(c);
105
- });
106
- });
107
-
108
- // Add authentication middleware import if needed
109
- if (allRoutes.includes('authenticationMiddleware')) {
110
- routeCode += `import { authenticationMiddleware } from './middleware/auth.middleware.js';\n`;
111
- }
112
-
113
- // Prepend imports
114
- routeCode += Array.from(imports).join('\n');
115
- routeCode += `
116
-
117
- export function RegisterRoutes(app: Express) {
118
- ${allRoutes}
119
- }
120
- `;
121
-
122
- fs.writeFileSync(OUTPUT_FILE, routeCode);
123
- console.log(`✅ Generated Routes at ${OUTPUT_FILE}`);
@@ -1,216 +0,0 @@
1
- // src/cli/generate-swagger.ts
2
- import { Project, Type, SyntaxKind, ClassDeclaration, Symbol as MorphSymbol, PropertyDeclaration } from "ts-morph";
3
- import * as fs from "fs";
4
-
5
- const PROJECT_ROOT = "./tsconfig.json";
6
- const OUTPUT_FILE = "./swagger.json";
7
-
8
- const project = new Project({ tsConfigFilePath: PROJECT_ROOT });
9
-
10
- const openApiSpec: any = {
11
- openapi: "3.0.0",
12
- info: { title: "Adorn API", version: "2.0.0" },
13
- paths: {},
14
- components: {
15
- schemas: {},
16
- securitySchemes: {
17
- bearerAuth: {
18
- type: "http",
19
- scheme: "bearer",
20
- bearerFormat: "JWT"
21
- }
22
- }
23
- },
24
- };
25
-
26
- // --- Helper: Deep Type Resolver ---
27
- // This converts TypeScript Types (Generics, Interfaces, Primitives) into JSON Schema
28
- function resolveSchema(type: Type, collectedSchemas: Record<string, any>): any {
29
- // 1. Handle Primitives
30
- if (type.isString() || type.isStringLiteral()) return { type: "string" };
31
- if (type.isNumber() || type.isNumberLiteral()) return { type: "integer" };
32
- if (type.isBoolean() || type.isBooleanLiteral()) return { type: "boolean" };
33
- if (type.isArray()) {
34
- const arrayType = type.getArrayElementType();
35
- return {
36
- type: "array",
37
- items: arrayType ? resolveSchema(arrayType, collectedSchemas) : {},
38
- };
39
- }
40
-
41
- // 2. Handle Union Types (Enums)
42
- if (type.isUnion()) {
43
- const unionTypes = type.getUnionTypes();
44
-
45
- // Extract literal values (e.g., "active", 100)
46
- const literals = unionTypes
47
- .map(t => t.isLiteral() ? t.getLiteralValue() : null)
48
- .filter(val => val !== null);
49
-
50
- // If we found literals, it's an Enum
51
- if (literals.length > 0) {
52
- const isString = typeof literals[0] === 'string';
53
- return {
54
- type: isString ? 'string' : 'integer',
55
- enum: literals
56
- };
57
- }
58
-
59
- // If it's a mix of objects (e.g. User | Admin), OpenApi uses 'oneOf'
60
- // Simplified for this demo: take the first non-null type
61
- return resolveSchema(unionTypes[0], collectedSchemas);
62
- }
63
-
64
- // 3. Handle Objects (Classes, Interfaces, Nested Literals)
65
- if (type.isObject()) {
66
- // Recursion Guard: If we've seen this type name before in components, reference it!
67
- // (This prevents infinite loops and reduces swagger size)
68
- const symbol = type.getSymbol();
69
- const typeName = symbol?.getName();
70
-
71
- // Common excluded types
72
- if (typeName === "Promise") {
73
- return resolveSchema(type.getTypeArguments()[0], collectedSchemas);
74
- }
75
- if (typeName === "Date") return { type: "string", format: "date-time" };
76
-
77
- // If it's a named class/interface (e.g. "Address"), and we haven't processed it,
78
- // we could add it to components.schemas. For now, we inline it for simplicity.
79
-
80
- const properties = type.getProperties();
81
- const schema: any = { type: "object", properties: {}, required: [] };
82
-
83
- properties.forEach((prop) => {
84
- const propName = prop.getName();
85
- if (propName.startsWith("_")) return; // Skip privates
86
-
87
- // Get the type of the property using getTypeAtLocation
88
- const declarations = prop.getDeclarations();
89
- if (declarations.length > 0) {
90
- const propType = prop.getTypeAtLocation(declarations[0]);
91
-
92
- if (propType) {
93
- // RECURSION HERE: Pass the property type back into resolveSchema
94
- schema.properties[propName] = resolveSchema(propType, collectedSchemas);
95
-
96
- if (!prop.isOptional()) {
97
- schema.required.push(propName);
98
- }
99
- }
100
- }
101
- });
102
-
103
- return schema;
104
- }
105
-
106
- return { type: "string" }; // Fallback
107
- }
108
-
109
- function processController(classDec: ClassDeclaration) {
110
- const controllerDec = classDec.getDecorators().find((d) => d.getName() === "Controller");
111
- if (!controllerDec) return;
112
-
113
- const basePath = controllerDec.getArguments()[0]?.getText().replace(/['"]/g, "") || "/";
114
-
115
- classDec.getMethods().forEach((method) => {
116
- const getDec = method.getDecorator("Get");
117
- const postDec = method.getDecorator("Post");
118
- const putDec = method.getDecorator("Put");
119
- const deleteDec = method.getDecorator("Delete");
120
- const decorator = getDec || postDec || putDec || deleteDec;
121
- if (!decorator) return;
122
-
123
- const httpMethod = getDec ? "get" : postDec ? "post" : putDec ? "put" : "delete";
124
- const pathArg = decorator.getArguments()[0]?.getText().replace(/['"]/g, "") || "/";
125
- const fullPath = `/${basePath}${pathArg}`.replace("//", "/");
126
-
127
- const parameters: any[] = [];
128
- const requestBody: any = { content: {} };
129
-
130
- // --- 1. Request Analysis (Input DTOs) ---
131
- const params = method.getParameters();
132
- if (params.length > 0) {
133
- const param = params[0];
134
- const paramType = param.getType(); // This resolves generics and inheritance!
135
-
136
- // Iterate ALL properties of the type (inherited included)
137
- paramType.getProperties().forEach(prop => {
138
- const propName = prop.getName();
139
-
140
- // We need to check Decorators.
141
- // Note: In mapped types/generics, getting decorators is hard.
142
- // We fallback to checking the source declaration.
143
- const declarations = prop.getDeclarations();
144
- let isQuery = false;
145
- let isBody = false;
146
- let isPath = false;
147
-
148
- // Check decorators on the definition
149
- declarations.forEach(decl => {
150
- if (decl.getKind() === SyntaxKind.PropertyDeclaration) {
151
- const pDecl = decl as PropertyDeclaration;
152
- if (pDecl.getDecorator("FromQuery")) isQuery = true;
153
- if (pDecl.getDecorator("FromPath")) isPath = true;
154
- if (pDecl.getDecorator("FromBody")) isBody = true;
155
- }
156
- });
157
-
158
- // IMPLICIT RULES:
159
- // If it's a GET, and not path, default to Query.
160
- // If it's a POST, and not path/query, default to Body.
161
- if (!isQuery && !isPath && !isBody) {
162
- if (httpMethod === "get") isQuery = true;
163
- else isBody = true;
164
- }
165
-
166
- const propType = prop.getTypeAtLocation(param.getSourceFile());
167
- const propTypeSchema = resolveSchema(propType, openApiSpec.components.schemas);
168
-
169
- if (isPath) {
170
- parameters.push({ name: propName, in: "path", required: true, schema: propTypeSchema });
171
- } else if (isQuery) {
172
- parameters.push({ name: propName, in: "query", required: !prop.isOptional(), schema: propTypeSchema });
173
- } else if (isBody) {
174
- if (!requestBody.content["application/json"]) {
175
- requestBody.content["application/json"] = { schema: { type: "object", properties: {}, required: [] } };
176
- }
177
- const bodySchema = requestBody.content["application/json"].schema;
178
- bodySchema.properties[propName] = propTypeSchema;
179
- if (!prop.isOptional()) bodySchema.required.push(propName);
180
- }
181
- });
182
- }
183
-
184
- // --- 2. Authentication Check ---
185
- const authDec = method.getDecorator("Authorized");
186
- const controllerAuthDec = classDec.getDecorator("Authorized");
187
-
188
- const isAuth = !!authDec || !!controllerAuthDec;
189
-
190
- // --- 3. Response Analysis (Return Type) ---
191
- const returnType = method.getReturnType(); // e.g. Promise<EntityResponse<User>>
192
- const responseSchema = resolveSchema(returnType, openApiSpec.components.schemas);
193
-
194
- if (!openApiSpec.paths[fullPath]) openApiSpec.paths[fullPath] = {};
195
- openApiSpec.paths[fullPath][httpMethod] = {
196
- operationId: method.getName(),
197
- parameters,
198
- requestBody: Object.keys(requestBody.content).length ? requestBody : undefined,
199
- security: isAuth ? [{ bearerAuth: [] }] : undefined,
200
- responses: {
201
- 200: {
202
- description: "Success",
203
- content: {
204
- "application/json": { schema: responseSchema }
205
- }
206
- }
207
- }
208
- };
209
- });
210
- }
211
-
212
- console.log("🔍 Scanning...");
213
- const sourceFiles = project.getSourceFiles("tests/example-app/**/*.ts");
214
- sourceFiles.forEach(file => file.getClasses().forEach(processController));
215
- fs.writeFileSync(OUTPUT_FILE, JSON.stringify(openApiSpec, null, 2));
216
- console.log(`✅ Generated ${OUTPUT_FILE}`);
package/src/index.js DELETED
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- // src/index.ts
18
- // Main entry point for adorn-api library
19
- __exportStar(require("./lib/decorators.js"), exports);
20
- __exportStar(require("./lib/common.js"), exports);
package/src/index.ts DELETED
@@ -1,4 +0,0 @@
1
- // src/index.ts
2
- // Main entry point for adorn-api library
3
- export * from "./lib/decorators.js";
4
- export * from "./lib/common.js";
package/src/lib/common.js DELETED
@@ -1,68 +0,0 @@
1
- "use strict";
2
- var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
- function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
- var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
- var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
- var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
- var _, done = false;
8
- for (var i = decorators.length - 1; i >= 0; i--) {
9
- var context = {};
10
- for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
- for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
- context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
- var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
- if (kind === "accessor") {
15
- if (result === void 0) continue;
16
- if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
- if (_ = accept(result.get)) descriptor.get = _;
18
- if (_ = accept(result.set)) descriptor.set = _;
19
- if (_ = accept(result.init)) initializers.unshift(_);
20
- }
21
- else if (_ = accept(result)) {
22
- if (kind === "field") initializers.unshift(_);
23
- else descriptor[key] = _;
24
- }
25
- }
26
- if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
- done = true;
28
- };
29
- var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
- var useValue = arguments.length > 2;
31
- for (var i = 0; i < initializers.length; i++) {
32
- value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
- }
34
- return useValue ? value : void 0;
35
- };
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.PaginationQuery = void 0;
38
- // src/lib/common.ts
39
- var decorators_js_1 = require("./decorators.js");
40
- // --- 2. Pagination Logic ---
41
- // We need a Concrete Class for Pagination because it carries Metadata (@FromQuery)
42
- var PaginationQuery = function () {
43
- var _a;
44
- var _page_decorators;
45
- var _page_initializers = [];
46
- var _page_extraInitializers = [];
47
- var _limit_decorators;
48
- var _limit_initializers = [];
49
- var _limit_extraInitializers = [];
50
- return _a = /** @class */ (function () {
51
- function PaginationQuery() {
52
- this.page = __runInitializers(this, _page_initializers, 1);
53
- this.limit = (__runInitializers(this, _page_extraInitializers), __runInitializers(this, _limit_initializers, 20));
54
- __runInitializers(this, _limit_extraInitializers);
55
- }
56
- return PaginationQuery;
57
- }()),
58
- (function () {
59
- var _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
60
- _page_decorators = [(0, decorators_js_1.FromQuery)()];
61
- _limit_decorators = [(0, decorators_js_1.FromQuery)()];
62
- __esDecorate(null, null, _page_decorators, { kind: "field", name: "page", static: false, private: false, access: { has: function (obj) { return "page" in obj; }, get: function (obj) { return obj.page; }, set: function (obj, value) { obj.page = value; } }, metadata: _metadata }, _page_initializers, _page_extraInitializers);
63
- __esDecorate(null, null, _limit_decorators, { kind: "field", name: "limit", static: false, private: false, access: { has: function (obj) { return "limit" in obj; }, get: function (obj) { return obj.limit; }, set: function (obj, value) { obj.limit = value; } }, metadata: _metadata }, _limit_initializers, _limit_extraInitializers);
64
- if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
65
- })(),
66
- _a;
67
- }();
68
- exports.PaginationQuery = PaginationQuery;
package/src/lib/common.ts DELETED
@@ -1,35 +0,0 @@
1
- // src/lib/common.ts
2
- import { FromQuery } from "./decorators.js";
3
-
4
- // --- 1. Generic Response Wrappers ---
5
-
6
- // Helper to clean up intersection types in tooltips/logs
7
- export type Jsonify<T> = { [K in keyof T]: T[K] } & {};
8
-
9
- export type EntityResponse<TEntity> = Jsonify<TEntity>;
10
-
11
- // --- 2. Pagination Logic ---
12
-
13
- // We need a Concrete Class for Pagination because it carries Metadata (@FromQuery)
14
- export class PaginationQuery {
15
- @FromQuery()
16
- page: number = 1;
17
-
18
- @FromQuery()
19
- limit: number = 20;
20
- }
21
-
22
- // The generic type for list queries
23
- export type ListQuery<TFilters extends object = object> = PaginationQuery & TFilters;
24
-
25
- // --- 3. CRUD Input Helpers ---
26
- // Note: You cannot "extend" these Mapped Types in a class directly in TS.
27
- // These are best used for Type Checking interfaces or Return Types.
28
-
29
- export type CreateInput<
30
- TEntityJson extends object,
31
- TRequiredKeys extends keyof TEntityJson,
32
- TOptionalKeys extends keyof TEntityJson = never,
33
- > = Pick<TEntityJson, TRequiredKeys> & Partial<Pick<TEntityJson, TOptionalKeys>>;
34
-
35
- export type UpdateInput<TCreateInput> = Partial<TCreateInput>;
@@ -1,128 +0,0 @@
1
- "use strict";
2
- // src/lib/decorators.ts
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.AUTH_META = exports.SCHEMA_META = void 0;
5
- exports.Get = Get;
6
- exports.Post = Post;
7
- exports.Put = Put;
8
- exports.Delete = Delete;
9
- exports.Controller = Controller;
10
- exports.FromQuery = FromQuery;
11
- exports.FromPath = FromPath;
12
- exports.FromBody = FromBody;
13
- exports.Authorized = Authorized;
14
- // Context metadata symbol for standard decorators
15
- var META_KEY = Symbol('adorn:route');
16
- exports.SCHEMA_META = Symbol('adorn:schema');
17
- exports.AUTH_META = Symbol('adorn:auth');
18
- // -- Method Decorator --
19
- // Using Standard TC39 Signature
20
- function Get(path) {
21
- return function (originalMethod, context) {
22
- // In standard decorators, we can attach metadata to the class prototype via context
23
- context.addInitializer(function () {
24
- var routes = this[META_KEY] || [];
25
- routes.push({
26
- method: 'get',
27
- path: path,
28
- methodName: String(context.name),
29
- });
30
- this[META_KEY] = routes;
31
- });
32
- return originalMethod;
33
- };
34
- }
35
- function Post(path) {
36
- return function (originalMethod, context) {
37
- context.addInitializer(function () {
38
- var routes = this[META_KEY] || [];
39
- routes.push({
40
- method: 'post',
41
- path: path,
42
- methodName: String(context.name),
43
- });
44
- this[META_KEY] = routes;
45
- });
46
- return originalMethod;
47
- };
48
- }
49
- function Put(path) {
50
- return function (originalMethod, context) {
51
- context.addInitializer(function () {
52
- var routes = this[META_KEY] || [];
53
- routes.push({
54
- method: 'put',
55
- path: path,
56
- methodName: String(context.name),
57
- });
58
- this[META_KEY] = routes;
59
- });
60
- return originalMethod;
61
- };
62
- }
63
- function Delete(path) {
64
- return function (originalMethod, context) {
65
- context.addInitializer(function () {
66
- var routes = this[META_KEY] || [];
67
- routes.push({
68
- method: 'delete',
69
- path: path,
70
- methodName: String(context.name),
71
- });
72
- this[META_KEY] = routes;
73
- });
74
- return originalMethod;
75
- };
76
- }
77
- // -- Class Decorator --
78
- function Controller(basePath) {
79
- return function (target, context) {
80
- // We attach the base path to the class constructor
81
- context.addInitializer(function () {
82
- this._basePath = basePath;
83
- });
84
- return target;
85
- };
86
- }
87
- // -- DTO Field Decorators --
88
- // Since we can't decorate parameters, we decorate fields in a class
89
- // e.g. class GetUserParams { @FromPath id: string }
90
- function FromQuery(name) {
91
- return function (target, context) {
92
- context.addInitializer(function () {
93
- var meta = this[exports.SCHEMA_META] || {};
94
- meta[context.name] = { type: 'query' };
95
- this[exports.SCHEMA_META] = meta;
96
- });
97
- return function (initialValue) { return initialValue; };
98
- };
99
- }
100
- function FromPath(name) {
101
- return function (target, context) {
102
- context.addInitializer(function () {
103
- var meta = this[exports.SCHEMA_META] || {};
104
- meta[context.name] = { type: 'path' };
105
- this[exports.SCHEMA_META] = meta;
106
- });
107
- return function (initialValue) { return initialValue; };
108
- };
109
- }
110
- function FromBody() {
111
- return function (target, context) {
112
- context.addInitializer(function () {
113
- var meta = this[exports.SCHEMA_META] || {};
114
- meta[context.name] = { type: 'body' };
115
- this[exports.SCHEMA_META] = meta;
116
- });
117
- return function (initialValue) { return initialValue; };
118
- };
119
- }
120
- // -- Authentication Decorator --
121
- function Authorized(role) {
122
- return function (target, context) {
123
- context.addInitializer(function () {
124
- this[exports.AUTH_META] = role || 'default';
125
- });
126
- return target;
127
- };
128
- }