adorn-api 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. package/README.md +766 -51
  2. package/dist/adapter/express/bootstrap.d.ts +24 -0
  3. package/dist/adapter/express/bootstrap.d.ts.map +1 -0
  4. package/dist/adapter/express/index.d.ts +41 -0
  5. package/dist/adapter/express/index.d.ts.map +1 -0
  6. package/dist/adapter/express/merge.d.ts +28 -0
  7. package/dist/adapter/express/merge.d.ts.map +1 -0
  8. package/dist/cli.cjs +1571 -0
  9. package/dist/cli.cjs.map +1 -0
  10. package/dist/cli.d.ts +1 -0
  11. package/dist/cli.js +1552 -2
  12. package/dist/cli.js.map +1 -1
  13. package/dist/compiler/analyze/scanControllers.d.ts +35 -0
  14. package/dist/compiler/analyze/scanControllers.d.ts.map +1 -0
  15. package/dist/compiler/cache/isStale.d.ts +20 -0
  16. package/dist/compiler/cache/isStale.d.ts.map +1 -0
  17. package/dist/compiler/cache/loadArtifacts.d.ts +113 -0
  18. package/dist/compiler/cache/loadArtifacts.d.ts.map +1 -0
  19. package/dist/compiler/cache/schema.d.ts +18 -0
  20. package/dist/compiler/cache/schema.d.ts.map +1 -0
  21. package/dist/compiler/cache/writeCache.d.ts +8 -0
  22. package/dist/compiler/cache/writeCache.d.ts.map +1 -0
  23. package/dist/compiler/manifest/emit.d.ts +7 -0
  24. package/dist/compiler/manifest/emit.d.ts.map +1 -0
  25. package/dist/compiler/manifest/format.d.ts +76 -0
  26. package/dist/compiler/manifest/format.d.ts.map +1 -0
  27. package/dist/compiler/runner/createProgram.d.ts +8 -0
  28. package/dist/compiler/runner/createProgram.d.ts.map +1 -0
  29. package/dist/compiler/schema/extractAnnotations.d.ts +10 -0
  30. package/dist/compiler/schema/extractAnnotations.d.ts.map +1 -0
  31. package/dist/compiler/schema/openapi.d.ts +19 -0
  32. package/dist/compiler/schema/openapi.d.ts.map +1 -0
  33. package/dist/compiler/schema/typeToJsonSchema.d.ts +49 -0
  34. package/dist/compiler/schema/typeToJsonSchema.d.ts.map +1 -0
  35. package/dist/compiler/validation/emitPrecompiledValidators.d.ts +46 -0
  36. package/dist/compiler/validation/emitPrecompiledValidators.d.ts.map +1 -0
  37. package/dist/decorators/Auth.d.ts +5 -0
  38. package/dist/decorators/Auth.d.ts.map +1 -0
  39. package/dist/decorators/Controller.d.ts +2 -0
  40. package/dist/decorators/Controller.d.ts.map +1 -0
  41. package/dist/decorators/Public.d.ts +2 -0
  42. package/dist/decorators/Public.d.ts.map +1 -0
  43. package/dist/decorators/Use.d.ts +5 -0
  44. package/dist/decorators/Use.d.ts.map +1 -0
  45. package/dist/decorators/index.d.ts +5 -6
  46. package/dist/decorators/index.d.ts.map +1 -1
  47. package/dist/decorators/methods.d.ts +5 -145
  48. package/dist/decorators/methods.d.ts.map +1 -1
  49. package/dist/express.cjs +775 -0
  50. package/dist/express.cjs.map +1 -0
  51. package/dist/express.d.ts +6 -1
  52. package/dist/express.d.ts.map +1 -1
  53. package/dist/express.js +738 -1
  54. package/dist/express.js.map +1 -1
  55. package/dist/http.d.ts +29 -0
  56. package/dist/http.d.ts.map +1 -0
  57. package/dist/index.cjs +573 -0
  58. package/dist/index.cjs.map +1 -0
  59. package/dist/index.d.ts +12 -14
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +490 -26
  62. package/dist/index.js.map +1 -1
  63. package/dist/metal/index.cjs +219 -0
  64. package/dist/metal/index.cjs.map +1 -0
  65. package/dist/metal/index.d.ts +6 -0
  66. package/dist/metal/index.d.ts.map +1 -0
  67. package/dist/metal/index.js +188 -0
  68. package/dist/metal/index.js.map +1 -0
  69. package/dist/metal/readMetalBag.d.ts +33 -0
  70. package/dist/metal/readMetalBag.d.ts.map +1 -0
  71. package/dist/metal/registerMetalEntities.d.ts +6 -0
  72. package/dist/metal/registerMetalEntities.d.ts.map +1 -0
  73. package/dist/metal/schemaFromEntity.d.ts +11 -0
  74. package/dist/metal/schemaFromEntity.d.ts.map +1 -0
  75. package/dist/metal/symbolMetadata.d.ts +2 -0
  76. package/dist/metal/symbolMetadata.d.ts.map +1 -0
  77. package/dist/runtime/auth/runtime.d.ts +34 -0
  78. package/dist/runtime/auth/runtime.d.ts.map +1 -0
  79. package/dist/runtime/metadata/bucket.d.ts +3 -0
  80. package/dist/runtime/metadata/bucket.d.ts.map +1 -0
  81. package/dist/runtime/metadata/key.d.ts +2 -0
  82. package/dist/runtime/metadata/key.d.ts.map +1 -0
  83. package/dist/runtime/metadata/read.d.ts +3 -0
  84. package/dist/runtime/metadata/read.d.ts.map +1 -0
  85. package/dist/runtime/metadata/types.d.ts +21 -0
  86. package/dist/runtime/metadata/types.d.ts.map +1 -0
  87. package/dist/runtime/polyfill.d.ts +2 -0
  88. package/dist/runtime/polyfill.d.ts.map +1 -0
  89. package/dist/runtime/upload.d.ts +7 -0
  90. package/dist/runtime/upload.d.ts.map +1 -0
  91. package/dist/runtime/validation/ajv.d.ts +20 -0
  92. package/dist/runtime/validation/ajv.d.ts.map +1 -0
  93. package/dist/runtime/validation/index.d.ts +2 -0
  94. package/dist/runtime/validation/index.d.ts.map +1 -0
  95. package/dist/schema/decorators.d.ts +37 -0
  96. package/dist/schema/decorators.d.ts.map +1 -0
  97. package/dist/schema/index.cjs +214 -0
  98. package/dist/schema/index.cjs.map +1 -0
  99. package/dist/schema/index.d.ts +2 -0
  100. package/dist/schema/index.d.ts.map +1 -0
  101. package/dist/schema/index.js +163 -0
  102. package/dist/schema/index.js.map +1 -0
  103. package/dist/scripts/adorn-example.cjs +148 -0
  104. package/dist/scripts/adorn-example.cjs.map +1 -0
  105. package/dist/utils/operationId.d.ts +2 -0
  106. package/dist/utils/operationId.d.ts.map +1 -0
  107. package/dist/utils/path.d.ts +2 -0
  108. package/dist/utils/path.d.ts.map +1 -0
  109. package/package.json +92 -57
  110. package/dist/adapters/express/createApp.d.ts +0 -158
  111. package/dist/adapters/express/createApp.d.ts.map +0 -1
  112. package/dist/adapters/express/createApp.js +0 -141
  113. package/dist/adapters/express/createApp.js.map +0 -1
  114. package/dist/adapters/express/index.d.ts +0 -7
  115. package/dist/adapters/express/index.d.ts.map +0 -1
  116. package/dist/adapters/express/index.js +0 -7
  117. package/dist/adapters/express/index.js.map +0 -1
  118. package/dist/adapters/express/middleware/errorHandler.d.ts +0 -194
  119. package/dist/adapters/express/middleware/errorHandler.d.ts.map +0 -1
  120. package/dist/adapters/express/middleware/errorHandler.js +0 -167
  121. package/dist/adapters/express/middleware/errorHandler.js.map +0 -1
  122. package/dist/adapters/express/middleware/requestContext.d.ts +0 -2
  123. package/dist/adapters/express/middleware/requestContext.d.ts.map +0 -1
  124. package/dist/adapters/express/middleware/requestContext.js +0 -3
  125. package/dist/adapters/express/middleware/requestContext.js.map +0 -1
  126. package/dist/adapters/express/router.d.ts +0 -10
  127. package/dist/adapters/express/router.d.ts.map +0 -1
  128. package/dist/adapters/express/router.js +0 -105
  129. package/dist/adapters/express/router.js.map +0 -1
  130. package/dist/adapters/express/swagger/index.d.ts +0 -2
  131. package/dist/adapters/express/swagger/index.d.ts.map +0 -1
  132. package/dist/adapters/express/swagger/index.js +0 -2
  133. package/dist/adapters/express/swagger/index.js.map +0 -1
  134. package/dist/adapters/express/swagger/serve.d.ts +0 -12
  135. package/dist/adapters/express/swagger/serve.d.ts.map +0 -1
  136. package/dist/adapters/express/swagger/serve.js +0 -72
  137. package/dist/adapters/express/swagger/serve.js.map +0 -1
  138. package/dist/adapters/express/transport/request.d.ts +0 -4
  139. package/dist/adapters/express/transport/request.d.ts.map +0 -1
  140. package/dist/adapters/express/transport/request.js +0 -12
  141. package/dist/adapters/express/transport/request.js.map +0 -1
  142. package/dist/adapters/express/transport/response.d.ts +0 -5
  143. package/dist/adapters/express/transport/response.d.ts.map +0 -1
  144. package/dist/adapters/express/transport/response.js +0 -36
  145. package/dist/adapters/express/transport/response.js.map +0 -1
  146. package/dist/cli/commands/dev.d.ts +0 -2
  147. package/dist/cli/commands/dev.d.ts.map +0 -1
  148. package/dist/cli/commands/dev.js +0 -3
  149. package/dist/cli/commands/dev.js.map +0 -1
  150. package/dist/cli/commands/gen.d.ts +0 -2
  151. package/dist/cli/commands/gen.d.ts.map +0 -1
  152. package/dist/cli/commands/gen.js +0 -3
  153. package/dist/cli/commands/gen.js.map +0 -1
  154. package/dist/cli/main.d.ts +0 -2
  155. package/dist/cli/main.d.ts.map +0 -1
  156. package/dist/cli/main.js +0 -3
  157. package/dist/cli/main.js.map +0 -1
  158. package/dist/compiler/config/defaults.d.ts +0 -2
  159. package/dist/compiler/config/defaults.d.ts.map +0 -1
  160. package/dist/compiler/config/defaults.js +0 -3
  161. package/dist/compiler/config/defaults.js.map +0 -1
  162. package/dist/compiler/config/loadConfig.d.ts +0 -2
  163. package/dist/compiler/config/loadConfig.d.ts.map +0 -1
  164. package/dist/compiler/config/loadConfig.js +0 -3
  165. package/dist/compiler/config/loadConfig.js.map +0 -1
  166. package/dist/compiler/diagnostics/errors.d.ts +0 -2
  167. package/dist/compiler/diagnostics/errors.d.ts.map +0 -1
  168. package/dist/compiler/diagnostics/errors.js +0 -3
  169. package/dist/compiler/diagnostics/errors.js.map +0 -1
  170. package/dist/compiler/emit/openapi.d.ts +0 -2
  171. package/dist/compiler/emit/openapi.d.ts.map +0 -1
  172. package/dist/compiler/emit/openapi.js +0 -3
  173. package/dist/compiler/emit/openapi.js.map +0 -1
  174. package/dist/compiler/emit/routes.d.ts +0 -2
  175. package/dist/compiler/emit/routes.d.ts.map +0 -1
  176. package/dist/compiler/emit/routes.js +0 -3
  177. package/dist/compiler/emit/routes.js.map +0 -1
  178. package/dist/compiler/program/loadTsProgram.d.ts +0 -2
  179. package/dist/compiler/program/loadTsProgram.d.ts.map +0 -1
  180. package/dist/compiler/program/loadTsProgram.js +0 -3
  181. package/dist/compiler/program/loadTsProgram.js.map +0 -1
  182. package/dist/compiler/scan/actions.d.ts +0 -2
  183. package/dist/compiler/scan/actions.d.ts.map +0 -1
  184. package/dist/compiler/scan/actions.js +0 -3
  185. package/dist/compiler/scan/actions.js.map +0 -1
  186. package/dist/compiler/scan/controllers.d.ts +0 -2
  187. package/dist/compiler/scan/controllers.d.ts.map +0 -1
  188. package/dist/compiler/scan/controllers.js +0 -3
  189. package/dist/compiler/scan/controllers.js.map +0 -1
  190. package/dist/compiler/scan/types.d.ts +0 -2
  191. package/dist/compiler/scan/types.d.ts.map +0 -1
  192. package/dist/compiler/scan/types.js +0 -3
  193. package/dist/compiler/scan/types.js.map +0 -1
  194. package/dist/contracts/context.d.ts +0 -10
  195. package/dist/contracts/context.d.ts.map +0 -1
  196. package/dist/contracts/context.js +0 -2
  197. package/dist/contracts/context.js.map +0 -1
  198. package/dist/contracts/errors.d.ts +0 -22
  199. package/dist/contracts/errors.d.ts.map +0 -1
  200. package/dist/contracts/errors.js +0 -2
  201. package/dist/contracts/errors.js.map +0 -1
  202. package/dist/contracts/http.d.ts +0 -2
  203. package/dist/contracts/http.d.ts.map +0 -1
  204. package/dist/contracts/http.js +0 -3
  205. package/dist/contracts/http.js.map +0 -1
  206. package/dist/contracts/middleware.d.ts +0 -2
  207. package/dist/contracts/middleware.d.ts.map +0 -1
  208. package/dist/contracts/middleware.js +0 -3
  209. package/dist/contracts/middleware.js.map +0 -1
  210. package/dist/contracts/openapi-v3.d.ts +0 -538
  211. package/dist/contracts/openapi-v3.d.ts.map +0 -1
  212. package/dist/contracts/openapi-v3.js +0 -2
  213. package/dist/contracts/openapi-v3.js.map +0 -1
  214. package/dist/contracts/openapi.d.ts +0 -2
  215. package/dist/contracts/openapi.d.ts.map +0 -1
  216. package/dist/contracts/openapi.js +0 -2
  217. package/dist/contracts/openapi.js.map +0 -1
  218. package/dist/contracts/reply.d.ts +0 -119
  219. package/dist/contracts/reply.d.ts.map +0 -1
  220. package/dist/contracts/reply.js +0 -43
  221. package/dist/contracts/reply.js.map +0 -1
  222. package/dist/contracts/response-types.d.ts +0 -40
  223. package/dist/contracts/response-types.d.ts.map +0 -1
  224. package/dist/contracts/response-types.js +0 -2
  225. package/dist/contracts/response-types.js.map +0 -1
  226. package/dist/contracts/responses.d.ts +0 -98
  227. package/dist/contracts/responses.d.ts.map +0 -1
  228. package/dist/contracts/responses.js +0 -2
  229. package/dist/contracts/responses.js.map +0 -1
  230. package/dist/contracts/route-options.d.ts +0 -155
  231. package/dist/contracts/route-options.d.ts.map +0 -1
  232. package/dist/contracts/route-options.js +0 -2
  233. package/dist/contracts/route-options.js.map +0 -1
  234. package/dist/contracts/route-typing.d.ts +0 -25
  235. package/dist/contracts/route-typing.d.ts.map +0 -1
  236. package/dist/contracts/route-typing.js +0 -2
  237. package/dist/contracts/route-typing.js.map +0 -1
  238. package/dist/contracts/validator.d.ts +0 -146
  239. package/dist/contracts/validator.d.ts.map +0 -1
  240. package/dist/contracts/validator.js +0 -2
  241. package/dist/contracts/validator.js.map +0 -1
  242. package/dist/core/binding/binder.d.ts +0 -74
  243. package/dist/core/binding/binder.d.ts.map +0 -1
  244. package/dist/core/binding/binder.js +0 -161
  245. package/dist/core/binding/binder.js.map +0 -1
  246. package/dist/core/binding/coerce/arrays.d.ts +0 -7
  247. package/dist/core/binding/coerce/arrays.d.ts.map +0 -1
  248. package/dist/core/binding/coerce/arrays.js +0 -28
  249. package/dist/core/binding/coerce/arrays.js.map +0 -1
  250. package/dist/core/binding/coerce/csv.d.ts +0 -2
  251. package/dist/core/binding/coerce/csv.d.ts.map +0 -1
  252. package/dist/core/binding/coerce/csv.js +0 -7
  253. package/dist/core/binding/coerce/csv.js.map +0 -1
  254. package/dist/core/binding/coerce/objects.d.ts +0 -2
  255. package/dist/core/binding/coerce/objects.d.ts.map +0 -1
  256. package/dist/core/binding/coerce/objects.js +0 -3
  257. package/dist/core/binding/coerce/objects.js.map +0 -1
  258. package/dist/core/binding/coerce/primitives.d.ts +0 -70
  259. package/dist/core/binding/coerce/primitives.d.ts.map +0 -1
  260. package/dist/core/binding/coerce/primitives.js +0 -88
  261. package/dist/core/binding/coerce/primitives.js.map +0 -1
  262. package/dist/core/binding/index.d.ts +0 -2
  263. package/dist/core/binding/index.d.ts.map +0 -1
  264. package/dist/core/binding/index.js +0 -2
  265. package/dist/core/binding/index.js.map +0 -1
  266. package/dist/core/binding/rules/inferFromHttpMethod.d.ts +0 -6
  267. package/dist/core/binding/rules/inferFromHttpMethod.d.ts.map +0 -1
  268. package/dist/core/binding/rules/inferFromHttpMethod.js +0 -11
  269. package/dist/core/binding/rules/inferFromHttpMethod.js.map +0 -1
  270. package/dist/core/binding/rules/inferFromPath.d.ts +0 -2
  271. package/dist/core/binding/rules/inferFromPath.d.ts.map +0 -1
  272. package/dist/core/binding/rules/inferFromPath.js +0 -9
  273. package/dist/core/binding/rules/inferFromPath.js.map +0 -1
  274. package/dist/core/binding/rules/wrappers.d.ts +0 -2
  275. package/dist/core/binding/rules/wrappers.d.ts.map +0 -1
  276. package/dist/core/binding/rules/wrappers.js +0 -3
  277. package/dist/core/binding/rules/wrappers.js.map +0 -1
  278. package/dist/core/errors/http-error.d.ts +0 -63
  279. package/dist/core/errors/http-error.d.ts.map +0 -1
  280. package/dist/core/errors/http-error.js +0 -71
  281. package/dist/core/errors/http-error.js.map +0 -1
  282. package/dist/core/errors/index.d.ts +0 -4
  283. package/dist/core/errors/index.d.ts.map +0 -1
  284. package/dist/core/errors/index.js +0 -4
  285. package/dist/core/errors/index.js.map +0 -1
  286. package/dist/core/errors/problem.d.ts +0 -3
  287. package/dist/core/errors/problem.d.ts.map +0 -1
  288. package/dist/core/errors/problem.js +0 -33
  289. package/dist/core/errors/problem.js.map +0 -1
  290. package/dist/core/errors/validation-error.d.ts +0 -73
  291. package/dist/core/errors/validation-error.d.ts.map +0 -1
  292. package/dist/core/errors/validation-error.js +0 -82
  293. package/dist/core/errors/validation-error.js.map +0 -1
  294. package/dist/core/openapi/buildOpenApi.d.ts +0 -79
  295. package/dist/core/openapi/buildOpenApi.d.ts.map +0 -1
  296. package/dist/core/openapi/buildOpenApi.js +0 -196
  297. package/dist/core/openapi/buildOpenApi.js.map +0 -1
  298. package/dist/core/openapi/index.d.ts +0 -2
  299. package/dist/core/openapi/index.d.ts.map +0 -1
  300. package/dist/core/openapi/index.js +0 -2
  301. package/dist/core/openapi/index.js.map +0 -1
  302. package/dist/core/openapi/schema/formats.d.ts +0 -2
  303. package/dist/core/openapi/schema/formats.d.ts.map +0 -1
  304. package/dist/core/openapi/schema/formats.js +0 -3
  305. package/dist/core/openapi/schema/formats.js.map +0 -1
  306. package/dist/core/openapi/schema/registry.d.ts +0 -9
  307. package/dist/core/openapi/schema/registry.d.ts.map +0 -1
  308. package/dist/core/openapi/schema/registry.js +0 -21
  309. package/dist/core/openapi/schema/registry.js.map +0 -1
  310. package/dist/core/openapi/schema/schemaModel.d.ts +0 -2
  311. package/dist/core/openapi/schema/schemaModel.d.ts.map +0 -1
  312. package/dist/core/openapi/schema/schemaModel.js +0 -3
  313. package/dist/core/openapi/schema/schemaModel.js.map +0 -1
  314. package/dist/core/openapi/schema/schemaRegistry.d.ts +0 -2
  315. package/dist/core/openapi/schema/schemaRegistry.d.ts.map +0 -1
  316. package/dist/core/openapi/schema/schemaRegistry.js +0 -3
  317. package/dist/core/openapi/schema/schemaRegistry.js.map +0 -1
  318. package/dist/core/openapi/schema/toOpenApi.d.ts +0 -4
  319. package/dist/core/openapi/schema/toOpenApi.d.ts.map +0 -1
  320. package/dist/core/openapi/schema/toOpenApi.js +0 -82
  321. package/dist/core/openapi/schema/toOpenApi.js.map +0 -1
  322. package/dist/core/pipeline/compose.d.ts +0 -2
  323. package/dist/core/pipeline/compose.d.ts.map +0 -1
  324. package/dist/core/pipeline/compose.js +0 -3
  325. package/dist/core/pipeline/compose.js.map +0 -1
  326. package/dist/core/pipeline/errorMap.d.ts +0 -2
  327. package/dist/core/pipeline/errorMap.d.ts.map +0 -1
  328. package/dist/core/pipeline/errorMap.js +0 -3
  329. package/dist/core/pipeline/errorMap.js.map +0 -1
  330. package/dist/core/pipeline/invoke.d.ts +0 -2
  331. package/dist/core/pipeline/invoke.d.ts.map +0 -1
  332. package/dist/core/pipeline/invoke.js +0 -3
  333. package/dist/core/pipeline/invoke.js.map +0 -1
  334. package/dist/core/pipeline/result.d.ts +0 -2
  335. package/dist/core/pipeline/result.d.ts.map +0 -1
  336. package/dist/core/pipeline/result.js +0 -3
  337. package/dist/core/pipeline/result.js.map +0 -1
  338. package/dist/core/registry/buildRegistry.d.ts +0 -3
  339. package/dist/core/registry/buildRegistry.d.ts.map +0 -1
  340. package/dist/core/registry/buildRegistry.js +0 -105
  341. package/dist/core/registry/buildRegistry.js.map +0 -1
  342. package/dist/core/registry/conflicts.d.ts +0 -6
  343. package/dist/core/registry/conflicts.d.ts.map +0 -1
  344. package/dist/core/registry/conflicts.js +0 -21
  345. package/dist/core/registry/conflicts.js.map +0 -1
  346. package/dist/core/registry/index.d.ts +0 -5
  347. package/dist/core/registry/index.d.ts.map +0 -1
  348. package/dist/core/registry/index.js +0 -5
  349. package/dist/core/registry/index.js.map +0 -1
  350. package/dist/core/registry/normalize.d.ts +0 -3
  351. package/dist/core/registry/normalize.d.ts.map +0 -1
  352. package/dist/core/registry/normalize.js +0 -24
  353. package/dist/core/registry/normalize.js.map +0 -1
  354. package/dist/core/registry/types.d.ts +0 -225
  355. package/dist/core/registry/types.d.ts.map +0 -1
  356. package/dist/core/registry/types.js +0 -2
  357. package/dist/core/registry/types.js.map +0 -1
  358. package/dist/core/reply/index.d.ts +0 -3
  359. package/dist/core/reply/index.d.ts.map +0 -1
  360. package/dist/core/reply/index.js +0 -3
  361. package/dist/core/reply/index.js.map +0 -1
  362. package/dist/core/reply/reply.d.ts +0 -102
  363. package/dist/core/reply/reply.d.ts.map +0 -1
  364. package/dist/core/reply/reply.js +0 -105
  365. package/dist/core/reply/reply.js.map +0 -1
  366. package/dist/core/reply/typed.d.ts +0 -161
  367. package/dist/core/reply/typed.d.ts.map +0 -1
  368. package/dist/core/reply/typed.js +0 -154
  369. package/dist/core/reply/typed.js.map +0 -1
  370. package/dist/core/responses/helpers.d.ts +0 -10
  371. package/dist/core/responses/helpers.d.ts.map +0 -1
  372. package/dist/core/responses/helpers.js +0 -8
  373. package/dist/core/responses/helpers.js.map +0 -1
  374. package/dist/core/responses/index.d.ts +0 -4
  375. package/dist/core/responses/index.d.ts.map +0 -1
  376. package/dist/core/responses/index.js +0 -4
  377. package/dist/core/responses/index.js.map +0 -1
  378. package/dist/core/responses/normalize.d.ts +0 -3
  379. package/dist/core/responses/normalize.d.ts.map +0 -1
  380. package/dist/core/responses/normalize.js +0 -33
  381. package/dist/core/responses/normalize.js.map +0 -1
  382. package/dist/core/responses/pickStatus.d.ts +0 -3
  383. package/dist/core/responses/pickStatus.d.ts.map +0 -1
  384. package/dist/core/responses/pickStatus.js +0 -27
  385. package/dist/core/responses/pickStatus.js.map +0 -1
  386. package/dist/core/route/defineRoute.d.ts +0 -74
  387. package/dist/core/route/defineRoute.d.ts.map +0 -1
  388. package/dist/core/route/defineRoute.js +0 -59
  389. package/dist/core/route/defineRoute.js.map +0 -1
  390. package/dist/core/route/index.d.ts +0 -2
  391. package/dist/core/route/index.d.ts.map +0 -1
  392. package/dist/core/route/index.js +0 -2
  393. package/dist/core/route/index.js.map +0 -1
  394. package/dist/core/serialization/json.d.ts +0 -2
  395. package/dist/core/serialization/json.d.ts.map +0 -1
  396. package/dist/core/serialization/json.js +0 -3
  397. package/dist/core/serialization/json.js.map +0 -1
  398. package/dist/core/typing/path-params.d.ts +0 -2
  399. package/dist/core/typing/path-params.d.ts.map +0 -1
  400. package/dist/core/typing/path-params.js +0 -2
  401. package/dist/core/typing/path-params.js.map +0 -1
  402. package/dist/decorators/binding.d.ts +0 -9
  403. package/dist/decorators/binding.d.ts.map +0 -1
  404. package/dist/decorators/binding.js +0 -18
  405. package/dist/decorators/binding.js.map +0 -1
  406. package/dist/decorators/controller.d.ts +0 -6
  407. package/dist/decorators/controller.d.ts.map +0 -1
  408. package/dist/decorators/controller.js +0 -26
  409. package/dist/decorators/controller.js.map +0 -1
  410. package/dist/decorators/db.d.ts +0 -2
  411. package/dist/decorators/db.d.ts.map +0 -1
  412. package/dist/decorators/db.js +0 -3
  413. package/dist/decorators/db.js.map +0 -1
  414. package/dist/decorators/docs.d.ts +0 -8
  415. package/dist/decorators/docs.d.ts.map +0 -1
  416. package/dist/decorators/docs.js +0 -46
  417. package/dist/decorators/docs.js.map +0 -1
  418. package/dist/decorators/index.js +0 -7
  419. package/dist/decorators/index.js.map +0 -1
  420. package/dist/decorators/methods.js +0 -170
  421. package/dist/decorators/methods.js.map +0 -1
  422. package/dist/decorators/middleware.d.ts +0 -2
  423. package/dist/decorators/middleware.d.ts.map +0 -1
  424. package/dist/decorators/middleware.js +0 -3
  425. package/dist/decorators/middleware.js.map +0 -1
  426. package/dist/decorators/responses.d.ts +0 -7
  427. package/dist/decorators/responses.d.ts.map +0 -1
  428. package/dist/decorators/responses.js +0 -44
  429. package/dist/decorators/responses.js.map +0 -1
  430. package/dist/decorators/security.d.ts +0 -8
  431. package/dist/decorators/security.d.ts.map +0 -1
  432. package/dist/decorators/security.js +0 -39
  433. package/dist/decorators/security.js.map +0 -1
  434. package/dist/integrations/metal-orm/index.d.ts +0 -2
  435. package/dist/integrations/metal-orm/index.d.ts.map +0 -1
  436. package/dist/integrations/metal-orm/index.js +0 -2
  437. package/dist/integrations/metal-orm/index.js.map +0 -1
  438. package/dist/integrations/metal-orm/pagination/executePaged.d.ts +0 -2
  439. package/dist/integrations/metal-orm/pagination/executePaged.d.ts.map +0 -1
  440. package/dist/integrations/metal-orm/pagination/executePaged.js +0 -3
  441. package/dist/integrations/metal-orm/pagination/executePaged.js.map +0 -1
  442. package/dist/integrations/metal-orm/pagination/page.d.ts +0 -2
  443. package/dist/integrations/metal-orm/pagination/page.d.ts.map +0 -1
  444. package/dist/integrations/metal-orm/pagination/page.js +0 -3
  445. package/dist/integrations/metal-orm/pagination/page.js.map +0 -1
  446. package/dist/integrations/metal-orm/query/filters.d.ts +0 -2
  447. package/dist/integrations/metal-orm/query/filters.d.ts.map +0 -1
  448. package/dist/integrations/metal-orm/query/filters.js +0 -3
  449. package/dist/integrations/metal-orm/query/filters.js.map +0 -1
  450. package/dist/integrations/metal-orm/query/search.d.ts +0 -2
  451. package/dist/integrations/metal-orm/query/search.d.ts.map +0 -1
  452. package/dist/integrations/metal-orm/query/search.js +0 -3
  453. package/dist/integrations/metal-orm/query/search.js.map +0 -1
  454. package/dist/integrations/metal-orm/query/sort.d.ts +0 -2
  455. package/dist/integrations/metal-orm/query/sort.d.ts.map +0 -1
  456. package/dist/integrations/metal-orm/query/sort.js +0 -3
  457. package/dist/integrations/metal-orm/query/sort.js.map +0 -1
  458. package/dist/integrations/metal-orm/save-graph/helpers.d.ts +0 -2
  459. package/dist/integrations/metal-orm/save-graph/helpers.d.ts.map +0 -1
  460. package/dist/integrations/metal-orm/save-graph/helpers.js +0 -3
  461. package/dist/integrations/metal-orm/save-graph/helpers.js.map +0 -1
  462. package/dist/integrations/metal-orm/save-graph/types.d.ts +0 -2
  463. package/dist/integrations/metal-orm/save-graph/types.d.ts.map +0 -1
  464. package/dist/integrations/metal-orm/save-graph/types.js +0 -3
  465. package/dist/integrations/metal-orm/save-graph/types.js.map +0 -1
  466. package/dist/integrations/metal-orm/schema/column-map.d.ts +0 -96
  467. package/dist/integrations/metal-orm/schema/column-map.d.ts.map +0 -1
  468. package/dist/integrations/metal-orm/schema/column-map.js +0 -207
  469. package/dist/integrations/metal-orm/schema/column-map.js.map +0 -1
  470. package/dist/integrations/metal-orm/schema/ddl.d.ts +0 -2
  471. package/dist/integrations/metal-orm/schema/ddl.d.ts.map +0 -1
  472. package/dist/integrations/metal-orm/schema/ddl.js +0 -3
  473. package/dist/integrations/metal-orm/schema/ddl.js.map +0 -1
  474. package/dist/integrations/metal-orm/schema/dto.d.ts +0 -7
  475. package/dist/integrations/metal-orm/schema/dto.d.ts.map +0 -1
  476. package/dist/integrations/metal-orm/schema/dto.js +0 -34
  477. package/dist/integrations/metal-orm/schema/dto.js.map +0 -1
  478. package/dist/integrations/metal-orm/schema/entity.d.ts +0 -99
  479. package/dist/integrations/metal-orm/schema/entity.d.ts.map +0 -1
  480. package/dist/integrations/metal-orm/schema/entity.js +0 -99
  481. package/dist/integrations/metal-orm/schema/entity.js.map +0 -1
  482. package/dist/integrations/metal-orm/schema/filters.d.ts +0 -11
  483. package/dist/integrations/metal-orm/schema/filters.d.ts.map +0 -1
  484. package/dist/integrations/metal-orm/schema/filters.js +0 -21
  485. package/dist/integrations/metal-orm/schema/filters.js.map +0 -1
  486. package/dist/integrations/metal-orm/schema/index.d.ts +0 -5
  487. package/dist/integrations/metal-orm/schema/index.d.ts.map +0 -1
  488. package/dist/integrations/metal-orm/schema/index.js +0 -5
  489. package/dist/integrations/metal-orm/schema/index.js.map +0 -1
  490. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts +0 -2
  491. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts.map +0 -1
  492. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js +0 -3
  493. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js.map +0 -1
  494. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts +0 -2
  495. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts.map +0 -1
  496. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js +0 -3
  497. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js.map +0 -1
  498. package/dist/integrations/metal-orm/schema/sqlite.d.ts +0 -2
  499. package/dist/integrations/metal-orm/schema/sqlite.d.ts.map +0 -1
  500. package/dist/integrations/metal-orm/schema/sqlite.js +0 -3
  501. package/dist/integrations/metal-orm/schema/sqlite.js.map +0 -1
  502. package/dist/integrations/metal-orm/schema/tabledef.d.ts +0 -4
  503. package/dist/integrations/metal-orm/schema/tabledef.d.ts.map +0 -1
  504. package/dist/integrations/metal-orm/schema/tabledef.js +0 -10
  505. package/dist/integrations/metal-orm/schema/tabledef.js.map +0 -1
  506. package/dist/integrations/metal-orm/schema/types.d.ts +0 -7
  507. package/dist/integrations/metal-orm/schema/types.d.ts.map +0 -1
  508. package/dist/integrations/metal-orm/schema/types.js +0 -2
  509. package/dist/integrations/metal-orm/schema/types.js.map +0 -1
  510. package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts +0 -2
  511. package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts.map +0 -1
  512. package/dist/integrations/metal-orm/serialization/entitySerializer.js +0 -3
  513. package/dist/integrations/metal-orm/serialization/entitySerializer.js.map +0 -1
  514. package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts +0 -2
  515. package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts.map +0 -1
  516. package/dist/integrations/metal-orm/serialization/relationPolicy.js +0 -3
  517. package/dist/integrations/metal-orm/serialization/relationPolicy.js.map +0 -1
  518. package/dist/integrations/metal-orm/session/context.d.ts +0 -2
  519. package/dist/integrations/metal-orm/session/context.d.ts.map +0 -1
  520. package/dist/integrations/metal-orm/session/context.js +0 -3
  521. package/dist/integrations/metal-orm/session/context.js.map +0 -1
  522. package/dist/integrations/metal-orm/session/middleware.d.ts +0 -2
  523. package/dist/integrations/metal-orm/session/middleware.d.ts.map +0 -1
  524. package/dist/integrations/metal-orm/session/middleware.js +0 -3
  525. package/dist/integrations/metal-orm/session/middleware.js.map +0 -1
  526. package/dist/integrations/metal-orm/session/transaction.d.ts +0 -2
  527. package/dist/integrations/metal-orm/session/transaction.d.ts.map +0 -1
  528. package/dist/integrations/metal-orm/session/transaction.js +0 -3
  529. package/dist/integrations/metal-orm/session/transaction.js.map +0 -1
  530. package/dist/integrations/metal-orm/testing/setupSchema.d.ts +0 -2
  531. package/dist/integrations/metal-orm/testing/setupSchema.d.ts.map +0 -1
  532. package/dist/integrations/metal-orm/testing/setupSchema.js +0 -3
  533. package/dist/integrations/metal-orm/testing/setupSchema.js.map +0 -1
  534. package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts +0 -2
  535. package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts.map +0 -1
  536. package/dist/integrations/metal-orm/testing/sqliteMemory.js +0 -3
  537. package/dist/integrations/metal-orm/testing/sqliteMemory.js.map +0 -1
  538. package/dist/metadata/bag.d.ts +0 -18
  539. package/dist/metadata/bag.d.ts.map +0 -1
  540. package/dist/metadata/bag.js +0 -39
  541. package/dist/metadata/bag.js.map +0 -1
  542. package/dist/metadata/index.d.ts +0 -4
  543. package/dist/metadata/index.d.ts.map +0 -1
  544. package/dist/metadata/index.js +0 -4
  545. package/dist/metadata/index.js.map +0 -1
  546. package/dist/metadata/keys.d.ts +0 -254
  547. package/dist/metadata/keys.d.ts.map +0 -1
  548. package/dist/metadata/keys.js +0 -23
  549. package/dist/metadata/keys.js.map +0 -1
  550. package/dist/metadata/merge.d.ts +0 -9
  551. package/dist/metadata/merge.d.ts.map +0 -1
  552. package/dist/metadata/merge.js +0 -30
  553. package/dist/metadata/merge.js.map +0 -1
  554. package/dist/metal-orm.d.ts +0 -2
  555. package/dist/metal-orm.d.ts.map +0 -1
  556. package/dist/metal-orm.js +0 -2
  557. package/dist/metal-orm.js.map +0 -1
  558. package/dist/validation/native/index.d.ts +0 -3
  559. package/dist/validation/native/index.d.ts.map +0 -1
  560. package/dist/validation/native/index.js +0 -3
  561. package/dist/validation/native/index.js.map +0 -1
  562. package/dist/validation/native/ir.d.ts +0 -38
  563. package/dist/validation/native/ir.d.ts.map +0 -1
  564. package/dist/validation/native/ir.js +0 -2
  565. package/dist/validation/native/ir.js.map +0 -1
  566. package/dist/validation/native/schema.d.ts +0 -63
  567. package/dist/validation/native/schema.d.ts.map +0 -1
  568. package/dist/validation/native/schema.js +0 -271
  569. package/dist/validation/native/schema.js.map +0 -1
  570. package/dist/validation/native/validator.d.ts +0 -21
  571. package/dist/validation/native/validator.d.ts.map +0 -1
  572. package/dist/validation/native/validator.js +0 -48
  573. package/dist/validation/native/validator.js.map +0 -1
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAAA,6BAA6B"}
1
+ {"version":3,"sources":["../src/cli.ts","../src/compiler/runner/createProgram.ts","../src/compiler/analyze/scanControllers.ts","../src/utils/operationId.ts","../src/compiler/schema/openapi.ts","../src/compiler/schema/typeToJsonSchema.ts","../src/compiler/schema/extractAnnotations.ts","../src/compiler/manifest/emit.ts","../src/compiler/validation/emitPrecompiledValidators.ts","../src/compiler/cache/isStale.ts","../src/compiler/cache/writeCache.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { writeFileSync, mkdirSync, rmSync, existsSync, readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { createProgramFromConfig } from \"./compiler/runner/createProgram.js\";\nimport { scanControllers } from \"./compiler/analyze/scanControllers.js\";\nimport { generateOpenAPI } from \"./compiler/schema/openapi.js\";\nimport { generateManifest } from \"./compiler/manifest/emit.js\";\nimport { emitPrecompiledValidators } from \"./compiler/validation/emitPrecompiledValidators.js\";\nimport { isStale } from \"./compiler/cache/isStale.js\";\nimport { writeCache } from \"./compiler/cache/writeCache.js\";\nimport ts from \"typescript\";\nimport process from \"node:process\";\n\nconst ADORN_VERSION = \"0.1.0\";\n\ntype ValidationMode = \"none\" | \"ajv-runtime\" | \"precompiled\";\n\nfunction log(msg: string) {\n process.stdout.write(msg + \"\\n\");\n}\n\nfunction debug(...args: unknown[]) {\n if (process.env.ADORN_DEBUG) {\n console.error(\"[adorn-api]\", ...args);\n }\n}\n\nasync function buildCommand(args: string[]) {\n const projectIndex = args.indexOf(\"-p\");\n const projectPath = projectIndex !== -1 ? args[projectIndex + 1] : \"./tsconfig.json\";\n const outputDir = args.includes(\"--output\")\n ? args[args.indexOf(\"--output\") + 1]\n : \".adorn\";\n const ifStale = args.includes(\"--if-stale\");\n \n const validationModeIndex = args.indexOf(\"--validation-mode\");\n const validationMode: ValidationMode = validationModeIndex !== -1 \n ? (args[validationModeIndex + 1] as ValidationMode) \n : \"ajv-runtime\";\n\n if (validationMode !== \"none\" && validationMode !== \"ajv-runtime\" && validationMode !== \"precompiled\") {\n console.error(`Invalid validation mode: ${validationMode}. Valid values: none, ajv-runtime, precompiled`);\n process.exit(1);\n }\n\n const outputPath = resolve(outputDir);\n\n if (ifStale) {\n const stale = await isStale({\n outDir: outputDir,\n project: projectPath,\n adornVersion: ADORN_VERSION,\n typescriptVersion: ts.version\n });\n\n if (!stale.stale) {\n log(\"adorn-api: artifacts up-to-date\");\n return;\n }\n\n log(`adorn-api: building artifacts (reason: ${stale.reason}${stale.detail ? `: ${stale.detail}` : \"\"})`);\n debug(\"Stale detail:\", stale.detail);\n } else {\n log(\"adorn-api: building artifacts (reason: forced-build)\");\n }\n\n const { program, checker, sourceFiles } = createProgramFromConfig(projectPath);\n const controllers = scanControllers(sourceFiles, checker);\n\n if (controllers.length === 0) {\n console.warn(\"No controllers found!\");\n process.exit(1);\n }\n\n log(`Found ${controllers.length} controller(s)`);\n\n const openapi = generateOpenAPI(controllers, checker, { title: \"API\", version: \"1.0.0\" });\n const manifest = generateManifest(controllers, checker, ADORN_VERSION, validationMode);\n\n mkdirSync(outputPath, { recursive: true });\n\n writeFileSync(resolve(outputPath, \"openapi.json\"), JSON.stringify(openapi, null, 2));\n writeFileSync(resolve(outputPath, \"manifest.json\"), JSON.stringify(manifest, null, 2));\n\n if (validationMode === \"precompiled\") {\n log(\"Generating precompiled validators...\");\n \n const manifestObj = JSON.parse(readFileSync(resolve(outputPath, \"manifest.json\"), \"utf-8\"));\n \n await emitPrecompiledValidators({\n outDir: outputPath,\n openapi,\n manifest: manifestObj,\n strict: \"off\",\n formatsMode: \"full\"\n });\n\n manifestObj.validation = {\n mode: \"precompiled\",\n precompiledModule: \"./validators.mjs\"\n };\n \n writeFileSync(resolve(outputPath, \"manifest.json\"), JSON.stringify(manifestObj, null, 2));\n \n log(\" - validators.cjs\");\n log(\" - validators.mjs\");\n log(\" - validators.meta.json\");\n }\n\n writeCache({\n outDir: outputDir,\n tsconfigAbs: resolve(projectPath),\n program,\n adornVersion: ADORN_VERSION\n });\n\n log(`Written to ${outputPath}/`);\n log(\" - openapi.json\");\n log(\" - manifest.json\");\n log(\" - cache.json\");\n}\n\nfunction cleanCommand(args: string[]) {\n const outputDir = args.includes(\"--output\")\n ? args[args.indexOf(\"--output\") + 1]\n : \".adorn\";\n\n const outputPath = resolve(outputDir);\n\n if (existsSync(outputPath)) {\n rmSync(outputPath, { recursive: true, force: true });\n }\n\n log(`adorn-api: cleaned ${outputDir}`);\n}\n\nconst command = process.argv[2];\n\nif (command === \"build\") {\n buildCommand(process.argv.slice(3)).catch((err) => {\n console.error(err);\n process.exit(1);\n });\n} else if (command === \"clean\") {\n cleanCommand(process.argv.slice(3));\n} else {\n console.log(`\nadorn-api CLI\n\nCommands:\n build Generate OpenAPI and manifest from TypeScript source\n clean Remove generated artifacts\n\nOptions:\n -p <path> Path to tsconfig.json (default: ./tsconfig.json)\n --output <dir> Output directory (default: .adorn)\n --if-stale Only rebuild if artifacts are stale\n --validation-mode <mode> Validation mode: none, ajv-runtime, precompiled (default: ajv-runtime)\n\nExamples:\n adorn-api build -p ./tsconfig.json --output .adorn\n adorn-api build --if-stale\n adorn-api build --validation-mode precompiled\n adorn-api clean\n `);\n}\n","import ts from \"typescript\";\nimport { readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\n\nexport interface ProgramContext {\n program: ts.Program;\n checker: ts.TypeChecker;\n sourceFiles: ts.SourceFile[];\n}\n\nexport function createProgramFromConfig(tsconfigPath: string): ProgramContext {\n const absolutePath = resolve(tsconfigPath);\n const configDir = dirname(absolutePath);\n\n const configFile = ts.readConfigFile(absolutePath, (path) => readFileSync(path, \"utf-8\"));\n if (configFile.error) {\n throw new Error(`Failed to read tsconfig: ${ts.flattenDiagnosticMessageText(configFile.error.messageText, \"\\n\")}`);\n }\n\n const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, configDir);\n if (parsed.errors.length > 0) {\n const messages = parsed.errors.map(e => ts.flattenDiagnosticMessageText(e.messageText, \"\\n\"));\n throw new Error(`Failed to parse tsconfig:\\n${messages.join(\"\\n\")}`);\n }\n\n const program = ts.createProgram(parsed.fileNames, parsed.options);\n const checker = program.getTypeChecker();\n\n const sourceFiles = program.getSourceFiles().filter(sf =>\n !sf.isDeclarationFile &&\n !sf.fileName.includes(\"node_modules\")\n );\n\n return { program, checker, sourceFiles };\n}\n","import ts from \"typescript\";\nimport { defaultOperationId } from \"../../utils/operationId.js\";\n\nexport interface ScannedController {\n className: string;\n basePath: string;\n sourceFile: ts.SourceFile;\n classDeclaration: ts.ClassDeclaration;\n operations: ScannedOperation[];\n consumes?: string[];\n produces?: string[];\n}\n\nexport interface ScannedOperation {\n methodName: string;\n httpMethod: string;\n path: string;\n operationId: string;\n methodDeclaration: ts.MethodDeclaration;\n returnType: ts.Type;\n parameters: ScannedParameter[];\n pathParamIndices: number[];\n bodyParamIndex: number | null;\n queryParamIndices: number[];\n queryObjectParamIndex: number | null;\n headerObjectParamIndex: number | null;\n cookieObjectParamIndex: number | null;\n bodyContentType?: string;\n}\n\nexport interface ScannedParameter {\n name: string;\n index: number;\n type: ts.Type;\n isOptional: boolean;\n paramNode?: ts.ParameterDeclaration;\n}\n\nexport function scanControllers(\n sourceFiles: ts.SourceFile[],\n checker: ts.TypeChecker\n): ScannedController[] {\n const controllers: ScannedController[] = [];\n\n for (const sourceFile of sourceFiles) {\n ts.forEachChild(sourceFile, (node) => {\n if (ts.isClassDeclaration(node) && node.name) {\n const controller = analyzeClass(node, sourceFile, checker);\n if (controller) {\n controllers.push(controller);\n }\n }\n });\n }\n\n return controllers;\n}\n\nfunction analyzeClass(\n node: ts.ClassDeclaration,\n sourceFile: ts.SourceFile,\n checker: ts.TypeChecker\n): ScannedController | null {\n if (!node.name) return null;\n\n const controllerDecorator = findDecorator(node, \"Controller\");\n if (!controllerDecorator) return null;\n\n const basePath = extractDecoratorStringArg(controllerDecorator) ?? \"/\";\n const className = node.name.text;\n\n const consumes = extractClassConsumes(node, checker);\n const produces = extractClassProduces(node, checker);\n\n const operations: ScannedOperation[] = [];\n\n for (const member of node.members) {\n if (ts.isMethodDeclaration(member) && member.name) {\n const operation = analyzeMethod(member, className, checker);\n if (operation) {\n operations.push(operation);\n }\n }\n }\n\n if (operations.length === 0) return null;\n\n return {\n className,\n basePath,\n sourceFile,\n classDeclaration: node,\n operations,\n consumes,\n produces,\n };\n}\n\nfunction extractClassConsumes(node: ts.ClassDeclaration, checker: ts.TypeChecker): string[] | undefined {\n const decorator = findDecorator(node, \"Consumes\");\n if (!decorator) return undefined;\n\n const callExpr = decorator.expression;\n if (!ts.isCallExpression(callExpr)) return undefined;\n const args = callExpr.arguments;\n if (args.length === 0) return undefined;\n\n const firstArg = args[0];\n if (ts.isStringLiteral(firstArg)) {\n return [firstArg.text];\n }\n if (ts.isArrayLiteralExpression(firstArg)) {\n return firstArg.elements\n .filter(ts.isStringLiteral)\n .map(e => e.text);\n }\n return undefined;\n}\n\nfunction extractClassProduces(node: ts.ClassDeclaration, checker: ts.TypeChecker): string[] | undefined {\n const decorator = findDecorator(node, \"Produces\");\n if (!decorator) return undefined;\n\n const callExpr = decorator.expression;\n if (!ts.isCallExpression(callExpr)) return undefined;\n const args = callExpr.arguments;\n if (args.length === 0) return undefined;\n\n const firstArg = args[0];\n if (ts.isStringLiteral(firstArg)) {\n return [firstArg.text];\n }\n if (ts.isArrayLiteralExpression(firstArg)) {\n return firstArg.elements\n .filter(ts.isStringLiteral)\n .map(e => e.text);\n }\n return undefined;\n}\n\nfunction analyzeMethod(\n node: ts.MethodDeclaration,\n className: string,\n checker: ts.TypeChecker\n): ScannedOperation | null {\n const methodName = ts.isIdentifier(node.name) ? node.name.text : null;\n if (!methodName) return null;\n\n const httpMethods = [\"Get\", \"Post\", \"Put\", \"Patch\", \"Delete\"];\n let httpMethod: string | null = null;\n let path = \"/\";\n\n for (const method of httpMethods) {\n const decorator = findDecorator(node, method);\n if (decorator) {\n httpMethod = method.toUpperCase();\n path = extractDecoratorStringArg(decorator) ?? \"/\";\n break;\n }\n }\n\n if (!httpMethod) return null;\n\n const signature = checker.getSignatureFromDeclaration(node);\n if (!signature) return null;\n\n let returnType = checker.getReturnTypeOfSignature(signature);\n returnType = unwrapPromise(returnType, checker);\n\n const parameters: ScannedParameter[] = [];\n for (let i = 0; i < node.parameters.length; i++) {\n const param = node.parameters[i];\n const paramName = ts.isIdentifier(param.name) ? param.name.text : `arg${i}`;\n const paramType = checker.getTypeAtLocation(param);\n const isOptional = !!param.questionToken || !!param.initializer;\n\n parameters.push({\n name: paramName,\n index: i,\n type: paramType,\n isOptional,\n paramNode: param,\n });\n }\n\n const pathParamNames = extractPathParams(path);\n const pathParamIndices = matchPathParamsToIndices(pathParamNames, parameters);\n \n const { bodyParamIndex, queryParamIndices, queryObjectParamIndex, headerObjectParamIndex, cookieObjectParamIndex, bodyContentType } = \n classifyParameters(parameters, httpMethod, pathParamIndices, checker);\n\n return {\n methodName,\n httpMethod,\n path,\n operationId: defaultOperationId(className, methodName),\n methodDeclaration: node,\n returnType,\n parameters,\n pathParamIndices,\n bodyParamIndex,\n queryParamIndices,\n queryObjectParamIndex,\n headerObjectParamIndex,\n cookieObjectParamIndex,\n bodyContentType,\n };\n}\n\nfunction extractPathParams(path: string): string[] {\n const matches = path.match(/:([^/]+)/g);\n if (!matches) return [];\n return matches.map(m => m.slice(1));\n}\n\nfunction matchPathParamsToIndices(pathParamNames: string[], parameters: ScannedParameter[]): number[] {\n const indices: number[] = [];\n for (const name of pathParamNames) {\n const param = parameters.find(p => p.name === name);\n if (param) {\n indices.push(param.index);\n }\n }\n return indices;\n}\n\nfunction classifyParameters(\n parameters: ScannedParameter[],\n httpMethod: string,\n pathParamIndices: number[],\n checker: ts.TypeChecker\n): {\n bodyParamIndex: number | null;\n queryParamIndices: number[];\n queryObjectParamIndex: number | null;\n headerObjectParamIndex: number | null;\n cookieObjectParamIndex: number | null;\n bodyContentType: string | undefined;\n} {\n const usedIndices = new Set(pathParamIndices);\n const queryParamIndices: number[] = [];\n let bodyParamIndex: number | null = null;\n let queryObjectParamIndex: number | null = null;\n let headerObjectParamIndex: number | null = null;\n let cookieObjectParamIndex: number | null = null;\n\n const isBodyMethod = [\"POST\", \"PUT\", \"PATCH\"].includes(httpMethod);\n\n for (let i = 0; i < parameters.length; i++) {\n const param = parameters[i];\n if (usedIndices.has(i)) continue;\n\n const typeStr = param.type.getSymbol()?.getName() ?? \"\";\n\n if (typeStr === \"Body\") {\n bodyParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n if (typeStr === \"Query\") {\n queryObjectParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n if (typeStr === \"Headers\") {\n headerObjectParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n if (typeStr === \"Cookies\") {\n cookieObjectParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n if (isBodyMethod && bodyParamIndex === null) {\n bodyParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n const isObj = isObjectType(param.type, checker);\n if (isObj && queryObjectParamIndex === null && !isBodyMethod) {\n queryObjectParamIndex = i;\n usedIndices.add(i);\n continue;\n }\n\n queryParamIndices.push(i);\n usedIndices.add(i);\n }\n\n return {\n bodyParamIndex,\n queryParamIndices,\n queryObjectParamIndex,\n headerObjectParamIndex,\n cookieObjectParamIndex,\n bodyContentType: undefined,\n };\n}\n\nfunction isObjectType(type: ts.Type, checker: ts.TypeChecker): boolean {\n const objectFlags = (type.flags & ts.TypeFlags.Object) !== 0;\n if (!objectFlags) return false;\n\n const symbol = type.getSymbol();\n if (symbol?.getName() === \"__object\") return true;\n\n const properties = checker.getPropertiesOfType(type);\n if (properties.length > 0) return true;\n\n const callSignatures = type.getCallSignatures();\n if (callSignatures && callSignatures.length > 0) return false;\n\n return true;\n}\n\nfunction findDecorator(node: ts.HasDecorators, name: string): ts.Decorator | null {\n const decorators = ts.getDecorators(node);\n if (!decorators) return null;\n\n for (const decorator of decorators) {\n if (ts.isCallExpression(decorator.expression)) {\n const expr = decorator.expression.expression;\n if (ts.isIdentifier(expr) && expr.text === name) {\n return decorator;\n }\n }\n }\n return null;\n}\n\nfunction extractDecoratorStringArg(decorator: ts.Decorator): string | null {\n if (ts.isCallExpression(decorator.expression)) {\n const arg = decorator.expression.arguments[0];\n if (arg && ts.isStringLiteral(arg)) {\n return arg.text;\n }\n }\n return null;\n}\n\nfunction unwrapPromise(type: ts.Type, checker: ts.TypeChecker): ts.Type {\n const symbol = type.getSymbol();\n if (symbol?.getName() === \"Promise\") {\n const typeArgs = (type as ts.TypeReference).typeArguments;\n if (typeArgs && typeArgs.length > 0) {\n return typeArgs[0];\n }\n }\n return type;\n}\n","export function defaultOperationId(controllerName: string, methodName: string): string {\n return `${controllerName}_${methodName}`;\n}\n","import ts from \"typescript\";\nimport type { ScannedController, ScannedOperation, ScannedParameter } from \"../analyze/scanControllers.js\";\nimport { typeToJsonSchema, createSchemaContext } from \"./typeToJsonSchema.js\";\nimport { extractPropertySchemaFragments, mergeFragments } from \"./extractAnnotations.js\";\nimport type { SchemaContext, JsonSchema } from \"./typeToJsonSchema.js\";\n\nexport interface OpenAPI31 {\n openapi: \"3.1.0\";\n info: {\n title: string;\n version: string;\n };\n components: {\n schemas: Record<string, JsonSchema>;\n };\n paths: Record<string, Record<string, any>>;\n}\n\nexport function generateOpenAPI(\n controllers: ScannedController[],\n checker: ts.TypeChecker,\n options: { title?: string; version?: string } = {}\n): OpenAPI31 {\n const components = new Map<string, JsonSchema>();\n const ctx: SchemaContext = {\n checker,\n components,\n typeStack: new Set(),\n typeNameStack: [],\n };\n\n const paths: Record<string, Record<string, any>> = {};\n\n for (const controller of controllers) {\n for (const operation of controller.operations) {\n const fullPath = convertToOpenApiPath(controller.basePath, operation.path);\n\n if (!paths[fullPath]) {\n paths[fullPath] = {};\n }\n\n const method = operation.httpMethod.toLowerCase();\n paths[fullPath][method] = buildOperation(operation, ctx, controller.consumes);\n }\n }\n\n return {\n openapi: \"3.1.0\",\n info: {\n title: options.title ?? \"API\",\n version: options.version ?? \"1.0.0\",\n },\n components: {\n schemas: Object.fromEntries(components),\n },\n paths,\n };\n}\n\nfunction convertToOpenApiPath(basePath: string, path: string): string {\n const base = basePath.endsWith(\"/\") ? basePath.slice(0, -1) : basePath;\n const converted = path.replace(/:([^/]+)/g, \"{$1}\");\n return base + converted || \"/\";\n}\n\nfunction buildOperation(operation: ScannedOperation, ctx: SchemaContext, controllerConsumes?: string[]): any {\n const op: any = {\n operationId: operation.operationId,\n responses: {},\n };\n\n const parameters: any[] = [];\n\n buildPathParameters(operation, ctx, parameters);\n buildQueryParameters(operation, ctx, parameters);\n buildHeaderParameters(operation, ctx, parameters);\n buildCookieParameters(operation, ctx, parameters);\n\n if (parameters.length > 0) {\n op.parameters = parameters;\n }\n\n const responseSchema = typeToJsonSchema(operation.returnType, ctx);\n\n const status = operation.httpMethod === \"POST\" ? 201 : 200;\n op.responses[status] = {\n description: status === 201 ? \"Created\" : \"OK\",\n content: {\n \"application/json\": {\n schema: responseSchema,\n },\n },\n };\n\n if ([\"POST\", \"PUT\", \"PATCH\"].includes(operation.httpMethod) && operation.bodyParamIndex !== null) {\n const bodyParam = operation.parameters[operation.bodyParamIndex];\n if (bodyParam) {\n let bodySchema = typeToJsonSchema(bodyParam.type, ctx);\n bodySchema = mergeBodySchemaAnnotations(bodyParam, ctx, bodySchema);\n \n const contentType = operation.bodyContentType ?? controllerConsumes?.[0] ?? \"application/json\";\n \n const requestBody: any = {\n required: !bodyParam.isOptional,\n content: {},\n };\n\n if (contentType === \"multipart/form-data\") {\n requestBody.content[\"multipart/form-data\"] = {\n schema: bodySchema,\n };\n } else {\n requestBody.content[contentType] = {\n schema: bodySchema,\n };\n }\n\n op.requestBody = requestBody;\n }\n }\n\n return op;\n}\n\nfunction mergeBodySchemaAnnotations(\n bodyParam: ScannedParameter,\n ctx: SchemaContext,\n schema: JsonSchema\n): JsonSchema {\n if (!schema.properties) return schema;\n\n const typeSymbol = bodyParam.type.getSymbol();\n if (!typeSymbol) return schema;\n\n const declarations = typeSymbol.getDeclarations();\n if (!declarations || declarations.length === 0) return schema;\n\n const classDecl = declarations[0];\n if (!ts.isClassDeclaration(classDecl)) return schema;\n\n const result = { ...schema };\n const props = { ...result.properties as Record<string, JsonSchema> };\n\n for (const member of classDecl.members) {\n if (!ts.isPropertyDeclaration(member) || !member.name) continue;\n\n const propName = ts.isIdentifier(member.name) ? member.name.text : null;\n if (!propName) continue;\n if (!props[propName]) continue;\n\n const frags = extractPropertySchemaFragments(ctx.checker, member);\n if (frags.length > 0) {\n props[propName] = mergeFragments(props[propName] as Record<string, unknown>, ...frags) as JsonSchema;\n }\n }\n\n result.properties = props;\n return result;\n}\n\nfunction buildPathParameters(operation: ScannedOperation, ctx: SchemaContext, parameters: any[]): void {\n for (const paramIndex of operation.pathParamIndices) {\n const param = operation.parameters[paramIndex];\n if (param) {\n let paramSchema = typeToJsonSchema(param.type, ctx);\n if (param.paramNode) {\n const frags = extractPropertySchemaFragments(ctx.checker, param.paramNode);\n if (frags.length > 0) {\n paramSchema = mergeFragments(paramSchema as Record<string, unknown>, ...frags) as JsonSchema;\n }\n }\n parameters.push({\n name: param.name,\n in: \"path\",\n required: !param.isOptional,\n schema: paramSchema.$ref\n ? { type: \"string\", $ref: paramSchema.$ref }\n : paramSchema,\n });\n }\n }\n}\n\nfunction buildQueryParameters(operation: ScannedOperation, ctx: SchemaContext, parameters: any[]): void {\n if (operation.queryObjectParamIndex !== null) {\n const queryParam = operation.parameters[operation.queryObjectParamIndex];\n if (!queryParam) return;\n\n const querySchema = typeToJsonSchema(queryParam.type, ctx);\n if (!querySchema.properties) return;\n\n const queryObjProps = querySchema.properties;\n for (const [propName, propSchema] of Object.entries(queryObjProps as Record<string, any>)) {\n const isRequired = querySchema.required?.includes(propName) ?? false;\n const serialization = determineQuerySerialization(propSchema.type);\n parameters.push({\n name: propName,\n in: \"query\",\n required: isRequired,\n schema: propSchema,\n ...(Object.keys(serialization).length > 0 ? serialization : {}),\n });\n }\n }\n\n for (const paramIndex of operation.queryParamIndices) {\n const param = operation.parameters[paramIndex];\n if (param) {\n let paramSchema = typeToJsonSchema(param.type, ctx);\n if (param.paramNode) {\n const frags = extractPropertySchemaFragments(ctx.checker, param.paramNode);\n if (frags.length > 0) {\n paramSchema = mergeFragments(paramSchema as Record<string, unknown>, ...frags) as JsonSchema;\n }\n }\n const serialization = determineQuerySerialization(paramSchema.type);\n parameters.push({\n name: param.name,\n in: \"query\",\n required: !param.isOptional,\n schema: paramSchema.$ref\n ? { type: \"string\", $ref: paramSchema.$ref }\n : paramSchema,\n ...(Object.keys(serialization).length > 0 ? serialization : {}),\n });\n }\n }\n}\n\nfunction determineQuerySerialization(schemaType: string | string[] | undefined): { style?: string; explode?: boolean } {\n const typeArray = Array.isArray(schemaType) ? schemaType : schemaType ? [schemaType] : [];\n const isArray = typeArray.includes(\"array\");\n \n if (isArray) {\n return { style: \"form\", explode: true };\n }\n \n return {};\n}\n\nfunction buildHeaderParameters(operation: ScannedOperation, ctx: SchemaContext, parameters: any[]): void {\n if (operation.headerObjectParamIndex === null) return;\n\n const headerParam = operation.parameters[operation.headerObjectParamIndex];\n if (!headerParam) return;\n\n const headerSchema = typeToJsonSchema(headerParam.type, ctx);\n if (!headerSchema.properties) return;\n\n const headerObjProps = headerSchema.properties;\n for (const [propName, propSchema] of Object.entries(headerObjProps as Record<string, any>)) {\n const isRequired = headerSchema.required?.includes(propName) ?? false;\n parameters.push({\n name: propName,\n in: \"header\",\n required: isRequired,\n schema: propSchema,\n });\n }\n}\n\nfunction buildCookieParameters(operation: ScannedOperation, ctx: SchemaContext, parameters: any[]): void {\n if (operation.cookieObjectParamIndex === null) return;\n\n const cookieParam = operation.parameters[operation.cookieObjectParamIndex];\n if (!cookieParam) return;\n\n const cookieSchema = typeToJsonSchema(cookieParam.type, ctx);\n if (!cookieSchema.properties) return;\n\n const cookieObjProps = cookieSchema.properties;\n for (const [propName, propSchema] of Object.entries(cookieObjProps as Record<string, any>)) {\n const isRequired = cookieSchema.required?.includes(propName) ?? false;\n parameters.push({\n name: propName,\n in: \"cookie\",\n required: isRequired,\n schema: propSchema,\n style: \"form\",\n explode: true,\n });\n }\n}\n","import ts from \"typescript\";\n\nexport interface JsonSchema {\n type?: string | string[];\n properties?: Record<string, JsonSchema>;\n required?: string[];\n items?: JsonSchema;\n enum?: (string | number | boolean)[];\n $ref?: string;\n nullable?: boolean;\n description?: string;\n default?: unknown;\n examples?: unknown[];\n example?: unknown;\n anyOf?: JsonSchema[];\n oneOf?: JsonSchema[];\n allOf?: JsonSchema[];\n discriminator?: DiscriminatorObject;\n additionalProperties?: boolean | JsonSchema;\n unevaluatedProperties?: boolean | JsonSchema;\n format?: string;\n pattern?: string;\n minimum?: number;\n maximum?: number;\n exclusiveMinimum?: number;\n exclusiveMaximum?: number;\n minLength?: number;\n maxLength?: number;\n minItems?: number;\n maxItems?: number;\n minProperties?: number;\n maxProperties?: number;\n multipleOf?: number;\n const?: unknown;\n uniqueItems?: boolean;\n title?: string;\n}\n\nexport interface DiscriminatorObject {\n propertyName: string;\n mapping?: Record<string, string>;\n}\n\nexport interface SchemaContext {\n checker: ts.TypeChecker;\n components: Map<string, JsonSchema>;\n typeStack: Set<ts.Type>;\n typeNameStack: string[];\n}\n\nexport function typeToJsonSchema(\n type: ts.Type,\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const { checker } = ctx;\n\n if (type.flags & ts.TypeFlags.Undefined) {\n return {};\n }\n if (type.flags & ts.TypeFlags.Null) {\n return { type: \"null\" };\n }\n\n if (type.flags & ts.TypeFlags.String) {\n return { type: \"string\" };\n }\n if (type.flags & ts.TypeFlags.Number) {\n return { type: \"number\" };\n }\n if (type.flags & ts.TypeFlags.Boolean) {\n return { type: \"boolean\" };\n }\n if (type.flags & ts.TypeFlags.BigInt) {\n return {\n type: \"string\",\n format: \"int64\",\n pattern: \"^-?\\\\d+$\"\n };\n }\n\n if (type.flags & ts.TypeFlags.StringLiteral) {\n const value = (type as ts.StringLiteralType).value;\n return { type: \"string\", enum: [value] };\n }\n if (type.flags & ts.TypeFlags.NumberLiteral) {\n const value = (type as ts.NumberLiteralType).value;\n return { type: \"number\", enum: [value] };\n }\n if (type.flags & ts.TypeFlags.BooleanLiteral) {\n const intrinsic = (type as any).intrinsicName;\n return { type: \"boolean\", enum: [intrinsic === \"true\"] };\n }\n\n if (type.isUnion()) {\n return handleUnion(type.types, ctx, typeNode);\n }\n\n if (type.isIntersection()) {\n return handleIntersection(type.types, ctx, typeNode);\n }\n\n if (checker.isArrayType(type)) {\n const typeArgs = (type as ts.TypeReference).typeArguments;\n const itemType = typeArgs?.[0];\n const items = itemType ? typeToJsonSchema(itemType, ctx) : {};\n return {\n type: \"array\",\n items,\n uniqueItems: isSetType(type, checker) ? true : undefined,\n };\n }\n\n if (type.flags & ts.TypeFlags.Object) {\n return handleObjectType(type as ts.ObjectType, ctx, typeNode);\n }\n\n return {};\n}\n\nfunction isSetType(type: ts.Type, checker: ts.TypeChecker): boolean {\n const symbol = type.getSymbol();\n if (!symbol) return false;\n const name = symbol.getName();\n if (name === \"Set\") return true;\n return false;\n}\n\nfunction handleUnion(\n types: readonly ts.Type[],\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const nullType = types.find(t => t.flags & ts.TypeFlags.Null);\n const otherTypes = types.filter(t => !(t.flags & ts.TypeFlags.Null) && !(t.flags & ts.TypeFlags.Undefined));\n\n const allStringLiterals = otherTypes.every(t => t.flags & ts.TypeFlags.StringLiteral);\n if (allStringLiterals && otherTypes.length > 0) {\n const enumValues = otherTypes.map(t => (t as ts.StringLiteralType).value);\n const schema: JsonSchema = { type: \"string\", enum: enumValues };\n if (nullType) {\n schema.type = [\"string\", \"null\"];\n }\n return schema;\n }\n\n if (otherTypes.length === 1 && nullType) {\n const innerSchema = typeToJsonSchema(otherTypes[0], ctx);\n if (typeof innerSchema.type === \"string\") {\n innerSchema.type = [innerSchema.type, \"null\"];\n }\n return innerSchema;\n }\n\n if (otherTypes.length > 1) {\n const branches = otherTypes.map(t => typeToJsonSchema(t, ctx));\n const hasNull = !!nullType;\n\n const result: JsonSchema = {};\n\n if (hasNull) {\n result.anyOf = [...branches, { type: \"null\" }];\n } else {\n result.anyOf = branches;\n }\n\n const discriminatorResult = detectDiscriminatedUnion(otherTypes, ctx, branches);\n if (discriminatorResult) {\n result.oneOf = branches;\n result.discriminator = discriminatorResult;\n }\n\n return result;\n }\n\n if (otherTypes.length === 1) {\n return typeToJsonSchema(otherTypes[0], ctx);\n }\n\n return {};\n}\n\nfunction handleIntersection(\n types: readonly ts.Type[],\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const brandCollapsed = tryCollapseBrandedIntersection(types, ctx, typeNode);\n if (brandCollapsed) {\n return brandCollapsed;\n }\n\n const allOf: JsonSchema[] = [];\n for (const t of types) {\n allOf.push(typeToJsonSchema(t, ctx));\n }\n\n return { allOf };\n}\n\nfunction tryCollapseBrandedIntersection(\n types: readonly ts.Type[],\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema | null {\n const { checker } = ctx;\n const parts = [...types];\n\n const prim = parts.find(isPrimitiveLike);\n if (!prim) return null;\n\n const rest = parts.filter(p => p !== prim);\n if (rest.every(r => isBrandObject(checker, r, ctx))) {\n return typeToJsonSchema(prim, ctx);\n }\n\n return null;\n}\n\nfunction isPrimitiveLike(t: ts.Type): boolean {\n return (t.flags & (ts.TypeFlags.String | ts.TypeFlags.Number | ts.TypeFlags.Boolean | ts.TypeFlags.BigInt)) !== 0\n || (t.flags & ts.TypeFlags.StringLiteral) !== 0\n || (t.flags & ts.TypeFlags.NumberLiteral) !== 0;\n}\n\nfunction isBrandObject(checker: ts.TypeChecker, t: ts.Type, ctx: SchemaContext): boolean {\n if (!(t.flags & ts.TypeFlags.Object)) return false;\n\n const props = t.getProperties();\n if (props.length === 0) return false;\n\n const allowed = new Set([\"__brand\", \"__type\", \"__tag\", \"brand\"]);\n for (const p of props) {\n if (!allowed.has(p.getName())) return false;\n }\n\n const callSigs = (t as ts.ObjectType).getCallSignatures?.();\n if (callSigs && callSigs.length > 0) return false;\n\n const constructSigs = (t as ts.ObjectType).getConstructSignatures?.();\n if (constructSigs && constructSigs.length > 0) return false;\n\n return true;\n}\n\nfunction detectDiscriminatedUnion(\n types: readonly ts.Type[],\n ctx: SchemaContext,\n branches: JsonSchema[]\n): DiscriminatorObject | null {\n if (types.length < 2) return null;\n\n const candidates = findCommonPropertyNames(ctx.checker, types);\n for (const propName of candidates) {\n const requiredInAll = types.every(t => isRequiredProperty(ctx.checker, t, propName));\n if (!requiredInAll) continue;\n\n const literalSets = types.map(t => getPropertyLiteralValues(ctx.checker, t, propName));\n if (literalSets.some(s => s === null)) continue;\n\n const allSets = literalSets as Array<Set<string>>;\n if (!areSetsDisjoint(allSets)) continue;\n\n const mapping: Record<string, string> = {};\n for (let i = 0; i < types.length; i++) {\n const branchName = getBranchSchemaName(types[i], ctx);\n for (const val of allSets[i]) {\n mapping[val] = `#/components/schemas/${branchName}`;\n }\n }\n\n return { propertyName: propName, mapping };\n }\n\n return null;\n}\n\nfunction findCommonPropertyNames(checker: ts.TypeChecker, types: readonly ts.Type[]): string[] {\n if (types.length === 0) return [];\n\n const firstProps = types[0].getProperties().map(s => s.getName());\n return firstProps.filter(name =>\n types.every(m => !!checker.getPropertyOfType(m, name))\n );\n}\n\nfunction isRequiredProperty(checker: ts.TypeChecker, type: ts.Type, propName: string): boolean {\n const sym = checker.getPropertyOfType(type, propName);\n if (!sym) return false;\n\n if (sym.flags & ts.SymbolFlags.Optional) return false;\n\n const propType = checker.getTypeOfSymbol(sym);\n if (propType.isUnion?.()) {\n const hasUndefined = propType.types.some(t => (t.flags & ts.TypeFlags.Undefined) !== 0);\n if (hasUndefined) return false;\n }\n\n return true;\n}\n\nfunction getPropertyLiteralValues(checker: ts.TypeChecker, type: ts.Type, propName: string): Set<string> | null {\n const sym = checker.getPropertyOfType(type, propName);\n if (!sym) return null;\n\n const propType = checker.getTypeOfSymbol(sym);\n\n if (propType.isStringLiteral?.()) {\n return new Set([(propType as ts.StringLiteralType).value]);\n }\n\n if (propType.isUnion?.()) {\n const values = new Set<string>();\n for (const m of propType.types) {\n if (!m.isStringLiteral?.()) return null;\n values.add((m as ts.StringLiteralType).value);\n }\n return values;\n }\n\n return null;\n}\n\nfunction areSetsDisjoint(sets: Array<Set<string>>): boolean {\n const seen = new Set<string>();\n for (const s of sets) {\n for (const v of s) {\n if (seen.has(v)) return false;\n seen.add(v);\n }\n }\n return true;\n}\n\nfunction getBranchSchemaName(type: ts.Type, ctx: SchemaContext): string {\n const symbol = type.getSymbol();\n if (symbol) {\n return symbol.getName();\n }\n\n const aliasSymbol = (type as any).aliasSymbol;\n if (aliasSymbol) {\n return aliasSymbol.getName();\n }\n\n return `Anonymous_${ctx.typeNameStack.length}`;\n}\n\nfunction handleObjectType(\n type: ts.ObjectType,\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const { checker, components, typeStack } = ctx;\n const symbol = type.getSymbol();\n const typeName = symbol?.getName?.() ?? getTypeNameFromNode(typeNode, ctx);\n\n if (typeName && typeName !== \"__type\") {\n if (components.has(typeName)) {\n return { $ref: `#/components/schemas/${typeName}` };\n }\n\n if (typeStack.has(type)) {\n return { $ref: `#/components/schemas/${typeName}` };\n }\n\n typeStack.add(type);\n }\n\n const schema = buildObjectSchema(type, ctx, typeNode);\n\n if (typeName && typeName !== \"__type\") {\n typeStack.delete(type);\n if (!components.has(typeName)) {\n components.set(typeName, schema);\n }\n return { $ref: `#/components/schemas/${typeName}` };\n }\n\n typeStack.delete(type);\n return schema;\n}\n\nfunction getTypeId(type: ts.Type, typeName: string): string {\n const typeFlags = type.flags.toString();\n return `${typeName}_${typeFlags}`;\n}\n\nfunction getTypeNameFromNode(typeNode: ts.TypeNode | undefined, ctx: SchemaContext): string {\n if (!typeNode) return `Anonymous_${ctx.typeNameStack.length}`;\n\n if (ts.isTypeReferenceNode(typeNode)) {\n if (ts.isIdentifier(typeNode.typeName)) {\n return typeNode.typeName.text;\n }\n }\n\n if (ts.isTypeAliasDeclaration(typeNode.parent)) {\n if (ts.isIdentifier(typeNode.parent.name)) {\n return typeNode.parent.name.text;\n }\n }\n\n return `Anonymous_${ctx.typeNameStack.length}`;\n}\n\nfunction buildObjectSchema(\n type: ts.ObjectType,\n ctx: SchemaContext,\n typeNode?: ts.TypeNode\n): JsonSchema {\n const { checker } = ctx;\n\n const properties: Record<string, JsonSchema> = {};\n const required: string[] = [];\n\n const props = checker.getPropertiesOfType(type);\n for (const prop of props) {\n const propName = prop.getName();\n const propType = checker.getTypeOfSymbol(prop);\n const isOptional = !!(prop.flags & ts.SymbolFlags.Optional);\n\n properties[propName] = typeToJsonSchema(propType, ctx);\n\n if (!isOptional) {\n required.push(propName);\n }\n }\n\n const schema: JsonSchema = {\n type: \"object\",\n properties,\n };\n\n if (required.length > 0) {\n schema.required = required;\n }\n\n if (isRecordType(type, checker)) {\n const valueType = getRecordValueType(type, checker);\n if (valueType) {\n schema.additionalProperties = typeToJsonSchema(valueType, ctx);\n }\n }\n\n return schema;\n}\n\nfunction isRecordType(type: ts.ObjectType, checker: ts.TypeChecker): boolean {\n const symbol = type.getSymbol();\n if (!symbol) return false;\n\n const name = symbol.getName();\n if (name === \"Record\") return true;\n\n return false;\n}\n\nfunction getRecordValueType(type: ts.ObjectType, checker: ts.TypeChecker): ts.Type | null {\n const symbol = type.getSymbol();\n if (!symbol) return null;\n\n const name = symbol.getName();\n if (name === \"Record\") {\n const typeRef = type as ts.TypeReference;\n const typeArgs = typeRef.typeArguments;\n if (typeArgs && typeArgs.length >= 2) {\n return typeArgs[1];\n }\n }\n\n return null;\n}\n\nexport function createSchemaContext(checker: ts.TypeChecker): SchemaContext {\n return {\n checker,\n components: new Map(),\n typeStack: new Set(),\n typeNameStack: [],\n };\n}\n","import ts from \"typescript\";\n\nexport interface SchemaFragment {\n [key: string]: unknown;\n}\n\nexport function extractPropertySchemaFragments(\n checker: ts.TypeChecker,\n prop: ts.PropertyDeclaration | ts.ParameterDeclaration\n): SchemaFragment[] {\n if (!ts.canHaveDecorators(prop)) return [];\n\n const decs = ts.getDecorators(prop);\n if (!decs || decs.length === 0) return [];\n\n const frags: SchemaFragment[] = [];\n\n for (const d of decs) {\n const expr = d.expression;\n\n let callee: ts.Expression;\n let args: ts.NodeArray<ts.Expression>;\n\n if (ts.isCallExpression(expr)) {\n callee = expr.expression;\n args = expr.arguments;\n } else {\n callee = expr;\n args = ts.factory.createNodeArray([]);\n }\n\n const sym = checker.getSymbolAtLocation(callee);\n if (!sym) continue;\n\n const resolved = resolveImportedDecorator(checker, sym);\n if (!resolved || resolved.module !== \"adorn-api/schema\") continue;\n\n const name = resolved.name;\n\n if (name === \"Schema\") {\n const obj = args[0];\n if (obj && ts.isObjectLiteralExpression(obj)) {\n const frag = objectLiteralToJson(obj);\n if (frag) frags.push(frag);\n }\n continue;\n }\n\n if (name === \"Min\" && isNumberLiteral(args[0])) {\n frags.push({ minimum: Number(args[0].text) });\n } else if (name === \"Max\" && isNumberLiteral(args[0])) {\n frags.push({ maximum: Number(args[0].text) });\n } else if (name === \"ExclusiveMin\" && isNumberLiteral(args[0])) {\n frags.push({ exclusiveMinimum: Number(args[0].text) });\n } else if (name === \"ExclusiveMax\" && isNumberLiteral(args[0])) {\n frags.push({ exclusiveMaximum: Number(args[0].text) });\n } else if (name === \"MinLength\" && isNumberLiteral(args[0])) {\n frags.push({ minLength: Number(args[0].text) });\n } else if (name === \"MaxLength\" && isNumberLiteral(args[0])) {\n frags.push({ maxLength: Number(args[0].text) });\n } else if (name === \"Format\" && isStringLiteral(args[0])) {\n frags.push({ format: args[0].text });\n } else if (name === \"Pattern\") {\n const arg = args[0];\n if (arg && ts.isRegularExpressionLiteral(arg)) {\n frags.push({ pattern: extractRegexPattern(arg.text) });\n } else if (isStringLiteral(arg)) {\n frags.push({ pattern: arg.text });\n }\n } else if (name === \"MinItems\" && isNumberLiteral(args[0])) {\n frags.push({ minItems: Number(args[0].text) });\n } else if (name === \"MaxItems\" && isNumberLiteral(args[0])) {\n frags.push({ maxItems: Number(args[0].text) });\n } else if (name === \"MinProperties\" && isNumberLiteral(args[0])) {\n frags.push({ minProperties: Number(args[0].text) });\n } else if (name === \"MaxProperties\" && isNumberLiteral(args[0])) {\n frags.push({ maxProperties: Number(args[0].text) });\n } else if (name === \"MultipleOf\" && isNumberLiteral(args[0])) {\n frags.push({ multipleOf: Number(args[0].text) });\n } else if (name === \"Example\") {\n frags.push({ example: literalToJson(args[0]) });\n } else if (name === \"Examples\" && ts.isArrayLiteralExpression(args[0])) {\n frags.push({ examples: args[0].elements.map(e => literalToJson(e)) });\n } else if (name === \"Description\" && isStringLiteral(args[0])) {\n frags.push({ description: args[0].text });\n } else if (name === \"Enum\" && ts.isArrayLiteralExpression(args[0])) {\n frags.push({ enum: args[0].elements.map(e => literalToJson(e)) });\n } else if (name === \"Const\") {\n frags.push({ const: literalToJson(args[0]) });\n } else if (name === \"Default\") {\n frags.push({ default: literalToJson(args[0]) });\n } else if (name === \"AdditionalProperties\") {\n const arg = args[0];\n if (arg && (arg.kind === ts.SyntaxKind.FalseKeyword || arg.kind === ts.SyntaxKind.TrueKeyword)) {\n frags.push({ additionalProperties: arg.kind === ts.SyntaxKind.TrueKeyword });\n } else if (arg && ts.isObjectLiteralExpression(arg)) {\n const obj = objectLiteralToJson(arg);\n if (obj) frags.push({ additionalProperties: obj });\n }\n } else if (name === \"Closed\") {\n frags.push({ additionalProperties: false });\n } else if (name === \"ClosedUnevaluated\") {\n frags.push({ unevaluatedProperties: false });\n }\n }\n\n return frags;\n}\n\nfunction resolveImportedDecorator(\n checker: ts.TypeChecker,\n sym: ts.Symbol\n): { module: string; name: string } | null {\n const target = (sym.flags & ts.SymbolFlags.Alias) ? checker.getAliasedSymbol(sym) : sym;\n const name = target.getName();\n\n const decl = target.declarations?.[0];\n if (!decl) return null;\n\n const fileName = decl.getSourceFile().fileName.replace(/\\\\/g, \"/\");\n\n if (fileName.includes(\"/node_modules/adorn-api/\") || fileName.includes(\"/src/schema/\")) {\n return { module: \"adorn-api/schema\", name };\n }\n\n return null;\n}\n\nfunction isNumberLiteral(node: ts.Node | undefined): node is ts.NumericLiteral {\n return !!node && ts.isNumericLiteral(node);\n}\n\nfunction isStringLiteral(node: ts.Node | undefined): node is ts.StringLiteral {\n return !!node && ts.isStringLiteral(node);\n}\n\nfunction extractRegexPattern(text: string): string {\n const match = text.match(/^\\/(.+)\\/[gimsuy]*$/);\n return match ? match[1] : text;\n}\n\nfunction objectLiteralToJson(obj: ts.ObjectLiteralExpression): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const prop of obj.properties) {\n if (!ts.isPropertyAssignment(prop)) continue;\n const name = prop.name;\n let key: string;\n if (ts.isIdentifier(name)) {\n key = name.text;\n } else if (ts.isStringLiteral(name)) {\n key = name.text;\n } else {\n continue;\n }\n out[key] = literalToJson(prop.initializer);\n }\n return out;\n}\n\nfunction literalToJson(node: ts.Expression): unknown {\n if (ts.isStringLiteral(node)) return node.text;\n if (ts.isNumericLiteral(node)) return Number(node.text);\n if (node.kind === ts.SyntaxKind.TrueKeyword) return true;\n if (node.kind === ts.SyntaxKind.FalseKeyword) return false;\n if (node.kind === ts.SyntaxKind.NullKeyword) return null;\n if (ts.isObjectLiteralExpression(node)) return objectLiteralToJson(node);\n if (ts.isArrayLiteralExpression(node)) return node.elements.map(e => literalToJson(e));\n return undefined;\n}\n\nexport function mergeFragments(base: Record<string, unknown>, ...frags: SchemaFragment[]): Record<string, unknown> {\n const result = { ...base };\n for (const frag of frags) {\n Object.assign(result, frag);\n }\n return result;\n}\n\nexport function extractJSDocDescription(checker: ts.TypeChecker, node: ts.Node): string | undefined {\n const sourceFile = node.getSourceFile();\n const docComments = ts.getLeadingCommentRanges(sourceFile.fileName, node.pos);\n if (!docComments || docComments.length === 0) return undefined;\n\n const sourceText = sourceFile.getText();\n let fullComment = \"\";\n\n for (const commentRange of docComments) {\n const comment = sourceText.substring(commentRange.pos, commentRange.end);\n const cleanComment = comment\n .replace(/^\\/\\*\\*/, \"\")\n .replace(/\\*\\/$/, \"\")\n .replace(/^\\s*\\*\\s?/gm, \"\")\n .trim();\n fullComment += cleanComment + \"\\n\";\n }\n\n return fullComment.trim() || undefined;\n}\n\nexport function extractJSDocTags(checker: ts.TypeChecker, node: ts.Node): Record<string, unknown> {\n const tags: Record<string, unknown> = {};\n\n const jsDocTags = ts.getJSDocTags(node);\n if (!jsDocTags) return tags;\n\n for (const tag of jsDocTags) {\n const tagName = tag.tagName.text;\n\n if (tagName === \"example\") {\n const exampleComment = getTagComment(tag);\n if (exampleComment) {\n const existing = (tags.examples as string[]) ?? [];\n tags.examples = [...existing, exampleComment];\n }\n } else if (tagName === \"default\") {\n const defaultComment = getTagComment(tag);\n if (defaultComment) {\n tags.default = parseDefaultValue(defaultComment);\n }\n } else if (tagName === \"description\") {\n const desc = getTagComment(tag);\n if (desc) {\n tags.description = desc;\n }\n } else if (tagName === \"deprecated\") {\n tags.deprecated = true;\n }\n }\n\n return tags;\n}\n\nfunction getTagComment(tag: ts.JSDocTag): string | undefined {\n const comment = tag.comment;\n if (typeof comment === \"string\") {\n return comment.trim();\n }\n if (comment && Array.isArray(comment) && comment.length > 0) {\n return comment.map(c => typeof c === \"string\" ? c : c.text).join(\" \").trim();\n }\n return undefined;\n}\n\nfunction parseDefaultValue(comment: string): unknown {\n const trimmed = comment.trim();\n\n if (trimmed === \"true\") return true;\n if (trimmed === \"false\") return false;\n if (trimmed === \"null\") return null;\n\n const num = Number(trimmed);\n if (!isNaN(num) && trimmed === num.toString()) return num;\n\n if ((trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))) {\n return trimmed.slice(1, -1);\n }\n\n return trimmed;\n}\n\nexport function extractClassSchemaFragments(\n checker: ts.TypeChecker,\n classDecl: ts.ClassDeclaration\n): SchemaFragment[] {\n const frags: SchemaFragment[] = [];\n\n if (!ts.canHaveDecorators(classDecl)) return [];\n\n const decs = ts.getDecorators(classDecl);\n if (!decs || decs.length === 0) return frags;\n\n for (const d of decs) {\n const expr = d.expression;\n\n let callee: ts.Expression;\n let args: ts.NodeArray<ts.Expression>;\n\n if (ts.isCallExpression(expr)) {\n callee = expr.expression;\n args = expr.arguments;\n } else {\n callee = expr;\n args = ts.factory.createNodeArray([]);\n }\n\n const sym = checker.getSymbolAtLocation(callee);\n if (!sym) continue;\n\n const resolved = resolveImportedDecorator(checker, sym);\n if (!resolved || resolved.module !== \"adorn-api/schema\") continue;\n\n const name = resolved.name;\n\n if (name === \"Schema\") {\n const obj = args[0];\n if (obj && ts.isObjectLiteralExpression(obj)) {\n const frag = objectLiteralToJson(obj);\n if (frag) frags.push(frag);\n }\n } else if (name === \"Description\" && isStringLiteral(args[0])) {\n frags.push({ description: args[0].text });\n } else if (name === \"Example\") {\n frags.push({ example: literalToJson(args[0]) });\n } else if (name === \"Examples\" && ts.isArrayLiteralExpression(args[0])) {\n frags.push({ examples: args[0].elements.map(e => literalToJson(e)) });\n } else if (name === \"Closed\") {\n frags.push({ additionalProperties: false });\n } else if (name === \"ClosedUnevaluated\") {\n frags.push({ unevaluatedProperties: false });\n }\n }\n\n const jsDocDesc = extractJSDocDescription(checker, classDecl);\n if (jsDocDesc) {\n frags.push({ description: jsDocDesc });\n }\n\n const jsDocTags = extractJSDocTags(checker, classDecl);\n if (Object.keys(jsDocTags).length > 0) {\n frags.push(jsDocTags);\n }\n\n return frags;\n}\n","import type { ScannedController, ScannedOperation } from \"../analyze/scanControllers.js\";\nimport type { ManifestV1, ControllerEntry, OperationEntry, ArgsSpec, HttpMethod } from \"./format.js\";\nimport { typeToJsonSchema } from \"../schema/typeToJsonSchema.js\";\nimport type { SchemaContext } from \"../schema/typeToJsonSchema.js\";\nimport ts from \"typescript\";\n\ntype ValidationMode = \"none\" | \"ajv-runtime\" | \"precompiled\";\n\nexport function generateManifest(\n controllers: ScannedController[],\n checker: ts.TypeChecker,\n version: string,\n validationMode: ValidationMode = \"ajv-runtime\"\n): ManifestV1 {\n const components = new Map<string, any>();\n const ctx: SchemaContext = {\n checker,\n components,\n typeStack: new Set(),\n typeNameStack: [],\n };\n\n const controllerEntries: ControllerEntry[] = controllers.map(ctrl => ({\n controllerId: ctrl.className,\n basePath: ctrl.basePath,\n operations: ctrl.operations.map(op => buildOperationEntry(op, ctx)),\n }));\n\n const validationConfig: { mode: \"none\" | \"ajv-runtime\" | \"precompiled\"; precompiledModule: string | null } = \n validationMode === \"precompiled\"\n ? { mode: \"precompiled\", precompiledModule: null }\n : validationMode === \"none\"\n ? { mode: \"none\", precompiledModule: null }\n : { mode: \"ajv-runtime\", precompiledModule: null };\n\n return {\n manifestVersion: 1,\n generatedAt: new Date().toISOString(),\n generator: {\n name: \"adorn-api\",\n version,\n typescript: ts.version,\n },\n schemas: {\n kind: \"openapi-3.1\",\n file: \"./openapi.json\",\n componentsSchemasPointer: \"/components/schemas\",\n },\n validation: validationConfig,\n controllers: controllerEntries,\n };\n}\n\nfunction buildOperationEntry(op: ScannedOperation, ctx: SchemaContext): OperationEntry {\n const args: ArgsSpec = {\n body: null,\n path: [],\n query: [],\n headers: [],\n cookies: [],\n };\n\n buildPathArgs(op, ctx, args);\n buildQueryArgs(op, ctx, args);\n buildHeaderArgs(op, ctx, args);\n buildCookieArgs(op, ctx, args);\n\n if (op.bodyParamIndex !== null) {\n const bodyParam = op.parameters[op.bodyParamIndex];\n if (bodyParam) {\n const bodySchema = typeToJsonSchema(bodyParam.type, ctx);\n const schemaRef = bodySchema.$ref ?? \"#/components/schemas/InlineBody\";\n\n args.body = {\n index: bodyParam.index,\n required: !bodyParam.isOptional,\n contentType: op.bodyContentType ?? \"application/json\",\n schemaRef,\n };\n }\n }\n\n const responseSchema = typeToJsonSchema(op.returnType, ctx);\n const status = op.httpMethod === \"POST\" ? 201 : 200;\n\n let schemaRef = responseSchema.$ref;\n let isArray = false;\n\n if (!schemaRef && responseSchema.type === \"array\" && responseSchema.items?.$ref) {\n schemaRef = responseSchema.items.$ref;\n isArray = true;\n } else if (!schemaRef) {\n schemaRef = \"#/components/schemas/InlineResponse\";\n }\n\n return {\n operationId: op.operationId,\n http: {\n method: op.httpMethod as HttpMethod,\n path: op.path,\n },\n handler: {\n methodName: op.methodName,\n },\n args,\n responses: [\n {\n status,\n contentType: \"application/json\",\n schemaRef,\n isArray,\n },\n ],\n };\n}\n\nfunction buildPathArgs(op: ScannedOperation, ctx: SchemaContext, args: ArgsSpec): void {\n for (const paramIndex of op.pathParamIndices) {\n const param = op.parameters[paramIndex];\n if (param) {\n const paramSchema = typeToJsonSchema(param.type, ctx);\n\n args.path.push({\n name: param.name,\n index: param.index,\n required: !param.isOptional,\n schemaRef: paramSchema.$ref ?? \"#/components/schemas/InlinePathParam\",\n schemaType: paramSchema.type,\n });\n }\n }\n}\n\nfunction buildQueryArgs(op: ScannedOperation, ctx: SchemaContext, args: ArgsSpec): void {\n if (op.queryObjectParamIndex !== null) {\n const queryParam = op.parameters[op.queryObjectParamIndex];\n if (queryParam) {\n const querySchema = typeToJsonSchema(queryParam.type, ctx);\n if (!querySchema.properties) return;\n\n for (const [propName, propSchema] of Object.entries(querySchema.properties as Record<string, any>)) {\n const isRequired = querySchema.required?.includes(propName) ?? false;\n let schemaRef = propSchema.$ref;\n if (!schemaRef) {\n schemaRef = \"#/components/schemas/InlineQueryParam\";\n }\n\n args.query.push({\n name: propName,\n index: queryParam.index,\n required: !isRequired,\n schemaRef,\n schemaType: propSchema.type,\n });\n }\n }\n }\n\n for (const paramIndex of op.queryParamIndices) {\n const param = op.parameters[paramIndex];\n if (param) {\n const paramSchema = typeToJsonSchema(param.type, ctx);\n const schemaRef = paramSchema.$ref ?? \"#/components/schemas/InlineQueryParam\";\n\n args.query.push({\n name: param.name,\n index: param.index,\n required: !param.isOptional,\n schemaRef,\n schemaType: paramSchema.type,\n });\n }\n }\n}\n\nfunction buildHeaderArgs(op: ScannedOperation, ctx: SchemaContext, args: ArgsSpec): void {\n if (op.headerObjectParamIndex === null) return;\n\n const headerParam = op.parameters[op.headerObjectParamIndex];\n if (!headerParam) return;\n\n const headerSchema = typeToJsonSchema(headerParam.type, ctx);\n if (!headerSchema.properties) return;\n\n for (const [propName, propSchema] of Object.entries(headerSchema.properties as Record<string, any>)) {\n const isRequired = headerSchema.required?.includes(propName) ?? false;\n let schemaRef = propSchema.$ref;\n if (!schemaRef) {\n schemaRef = \"#/components/schemas/InlineHeaderParam\";\n }\n\n args.headers.push({\n name: propName,\n index: headerParam.index,\n required: !isRequired,\n schemaRef,\n schemaType: propSchema.type,\n });\n }\n}\n\nfunction buildCookieArgs(op: ScannedOperation, ctx: SchemaContext, args: ArgsSpec): void {\n if (op.cookieObjectParamIndex === null) return;\n\n const cookieParam = op.parameters[op.cookieObjectParamIndex];\n if (!cookieParam) return;\n\n const cookieSchema = typeToJsonSchema(cookieParam.type, ctx);\n if (!cookieSchema.properties) return;\n\n for (const [propName, propSchema] of Object.entries(cookieSchema.properties as Record<string, any>)) {\n const isRequired = cookieSchema.required?.includes(propName) ?? false;\n let schemaRef = propSchema.$ref;\n if (!schemaRef) {\n schemaRef = \"#/components/schemas/InlineCookieParam\";\n }\n\n args.cookies.push({\n name: propName,\n index: cookieParam.index,\n required: !isRequired,\n schemaRef,\n schemaType: propSchema.type,\n serialization: { style: \"form\", explode: true },\n });\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\n\nimport Ajv from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport type { AnySchema } from \"ajv\";\n\ninterface OpenApi {\n openapi: string;\n components?: {\n schemas?: Record<string, unknown>;\n };\n}\n\ninterface Manifest {\n manifestVersion: number;\n controllers: Array<{\n controllerId: string;\n basePath: string;\n operations: Array<{\n operationId: string;\n args: {\n body?: {\n schemaRef: string;\n contentType: string;\n } | null;\n response?: Array<{\n status: number;\n contentType: string;\n schemaRef?: string;\n }>;\n };\n responses: Array<{\n status: number;\n contentType: string;\n schemaRef: string;\n }>;\n }>;\n }>;\n}\n\nconst OAS_SCHEMA_ONLY = new Set([\"discriminator\", \"xml\", \"externalDocs\", \"example\"]);\n\nfunction sanitizeSchemaForAjv(schema: unknown): unknown {\n if (schema == null || typeof schema !== \"object\") return schema;\n if (Array.isArray(schema)) return schema.map(sanitizeSchemaForAjv);\n\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(schema as Record<string, unknown>)) {\n if (OAS_SCHEMA_ONLY.has(k)) continue;\n if (k.startsWith(\"x-\")) continue;\n out[k] = sanitizeSchemaForAjv(v);\n }\n return out;\n}\n\nfunction rewriteComponentRefs(schema: unknown): unknown {\n if (schema == null || typeof schema !== \"object\") return schema;\n if (Array.isArray(schema)) return schema.map(rewriteComponentRefs);\n\n if (typeof (schema as Record<string, unknown>).$ref === \"string\") {\n const ref = (schema as Record<string, unknown>).$ref as string;\n const m = ref.match(/^#\\/components\\/schemas\\/(.+)$/);\n if (m) {\n return { ...schema, $ref: m[1] };\n }\n }\n\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(schema as Record<string, unknown>)) {\n out[k] = rewriteComponentRefs(v);\n }\n return out;\n}\n\nfunction safeId(s: string): string {\n return s.replace(/[^A-Za-z0-9_]/g, \"_\").replace(/^[^A-Za-z_]/, \"_$&\");\n}\n\nfunction schemaNameFromRef(schemaRef: string): string {\n return schemaRef.replace(/^#\\/components\\/schemas\\//, \"\");\n}\n\nexport interface EmitPrecompiledValidatorsOptions {\n outDir: string;\n openapi: OpenApi;\n manifest: Manifest;\n strict?: \"off\" | \"log\" | \"error\";\n formatsMode?: \"fast\" | \"full\";\n}\n\nexport async function emitPrecompiledValidators(opts: EmitPrecompiledValidatorsOptions): Promise<{\n validatorsCjsPath: string;\n validatorsEsmPath: string;\n hash: string;\n}> {\n const outDir = opts.outDir;\n const cjsPath = path.join(outDir, \"validators.cjs\");\n const esmPath = path.join(outDir, \"validators.mjs\");\n const metaPath = path.join(outDir, \"validators.meta.json\");\n\n fs.mkdirSync(outDir, { recursive: true });\n\n const schemas: AnySchema[] = [];\n\n for (const [name, sch] of Object.entries(opts.openapi.components?.schemas ?? {})) {\n const clean = rewriteComponentRefs(sanitizeSchemaForAjv(sch));\n schemas.push({ ...(clean as object), $id: name } as AnySchema);\n }\n\n const opIndex: Record<string, { body?: string; response: Record<string, string> }> = {};\n\n for (const ctrl of opts.manifest.controllers ?? []) {\n for (const op of ctrl.operations ?? []) {\n const entry: { body?: string; response: Record<string, string> } = { response: {} };\n opIndex[op.operationId] = entry;\n\n if (op.args.body?.schemaRef) {\n const typeName = schemaNameFromRef(op.args.body.schemaRef);\n const id = safeId(`op_${op.operationId}_body`);\n schemas.push({ $id: id, $ref: typeName } as AnySchema);\n entry.body = id;\n }\n\n for (const r of op.responses ?? []) {\n if (!r.schemaRef) continue;\n const typeName = schemaNameFromRef(r.schemaRef);\n const key = `${r.status}|${r.contentType}`;\n const id = safeId(`op_${op.operationId}_res_${r.status}_${r.contentType}`);\n schemas.push({ $id: id, $ref: typeName } as AnySchema);\n entry.response[key] = id;\n }\n }\n }\n\n const strictOpt = opts.strict === \"off\" ? false : opts.strict === \"log\" ? \"log\" : true;\n\n const ajv = new Ajv.default({\n schemas,\n allErrors: true,\n strict: strictOpt,\n code: { source: true },\n });\n\n addFormats.default(ajv, { mode: opts.formatsMode ?? \"full\" });\n\n let cjs: string;\n const standaloneModule = require(\"ajv/dist/standalone\");\n if (typeof standaloneModule === \"function\") {\n cjs = standaloneModule(ajv);\n } else if (standaloneModule && typeof standaloneModule.default === \"function\") {\n cjs = standaloneModule.default(ajv);\n } else {\n throw new Error(\"Unable to find standalone code generator in ajv/dist/standalone\");\n }\n\n cjs += \"\\n\\n// --- adorn-api operation lookup (generated) ---\\n\";\n cjs += \"exports.validators = {\\n\";\n for (const [operationId, v] of Object.entries(opIndex)) {\n cjs += ` ${JSON.stringify(operationId)}: {\\n`;\n cjs += ` body: ${v.body ? `exports[${JSON.stringify(v.body)}]` : \"undefined\"},\\n`;\n cjs += ` response: {\\n`;\n for (const [key, id] of Object.entries(v.response)) {\n cjs += ` ${JSON.stringify(key)}: exports[${JSON.stringify(id)}],\\n`;\n }\n cjs += ` }\\n`;\n cjs += ` },\\n`;\n }\n cjs += \"};\\n\";\n\n fs.writeFileSync(cjsPath, cjs, \"utf8\");\n\n const esm = `// .adorn/validators.mjs (generated)\nimport { createRequire } from \"node:module\";\nconst require = createRequire(import.meta.url);\nconst cjs = require(\"./validators.cjs\");\n\nexport const validators = cjs.validators;\n\nexport function validateBody(operationId, data) {\n const v = validators?.[operationId]?.body;\n if (!v) return { ok: true, errors: null };\n const ok = v(data);\n return { ok, errors: ok ? null : v.errors };\n}\n\nexport function validateResponse(operationId, status, contentType, data) {\n const key = String(status) + \"|\" + String(contentType);\n const v = validators?.[operationId]?.response?.[key];\n if (!v) return { ok: true, errors: null };\n const ok = v(data);\n return { ok, errors: ok ? null : v.errors };\n}\n`;\n fs.writeFileSync(esmPath, esm, \"utf8\");\n\n const hash = crypto.createHash(\"sha256\").update(cjs).digest(\"hex\");\n fs.writeFileSync(metaPath, JSON.stringify({ hash }, null, 2), \"utf8\");\n\n return { validatorsCjsPath: cjsPath, validatorsEsmPath: esmPath, hash };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport ts from \"typescript\";\nimport type { AdornCacheV1 } from \"./schema.js\";\n\nexport type StaleResult =\n | { stale: false; reason: \"up-to-date\" }\n | { stale: true; reason: string; detail?: string };\n\nfunction readJson<T>(p: string): T | null {\n try {\n return JSON.parse(fs.readFileSync(p, \"utf8\")) as T;\n } catch {\n return null;\n }\n}\n\nfunction statMtimeMs(p: string): number | null {\n try {\n return fs.statSync(p).mtimeMs;\n } catch {\n return null;\n }\n}\n\nfunction ensureAbs(p: string): string {\n return path.isAbsolute(p) ? p : path.resolve(p);\n}\n\nexport function collectTsconfigChain(tsconfigPathAbs: string): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n\n function visit(pAbs: string) {\n if (seen.has(pAbs)) return;\n seen.add(pAbs);\n out.push(pAbs);\n\n const raw = readJson<any>(pAbs);\n const ext = raw?.extends;\n if (!ext) return;\n\n let resolved: string | null = null;\n\n if (ext.startsWith(\".\") || ext.startsWith(\"/\") || /^[A-Za-z]:\\\\/.test(ext)) {\n resolved = ensureAbs(path.resolve(path.dirname(pAbs), ext));\n if (!resolved.endsWith(\".json\")) resolved += \".json\";\n } else {\n try {\n const req = (module as any).createRequire?.(import.meta.url) ?? require;\n resolved = req.resolve(ext);\n } catch {\n try {\n const req = (module as any).createRequire?.(import.meta.url) ?? require;\n resolved = req.resolve(ext.endsWith(\".json\") ? ext : `${ext}.json`);\n } catch {\n resolved = null;\n }\n }\n }\n\n if (resolved) visit(resolved);\n }\n\n visit(tsconfigPathAbs);\n return out;\n}\n\nexport function findLockfile(startDir: string): { path: string; mtimeMs: number } | null {\n const names = [\"pnpm-lock.yaml\", \"package-lock.json\", \"yarn.lock\"];\n let dir = startDir;\n\n for (let i = 0; i < 20; i++) {\n for (const n of names) {\n const p = path.join(dir, n);\n const mt = statMtimeMs(p);\n if (mt != null) return { path: p, mtimeMs: mt };\n }\n const parent = path.dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return null;\n}\n\nexport async function isStale(params: {\n outDir: string;\n project: string;\n adornVersion: string;\n typescriptVersion: string;\n}): Promise<StaleResult> {\n const outDirAbs = ensureAbs(params.outDir);\n const tsconfigAbs = ensureAbs(params.project);\n\n const manifestPath = path.join(outDirAbs, \"manifest.json\");\n const cachePath = path.join(outDirAbs, \"cache.json\");\n\n if (!fs.existsSync(manifestPath)) return { stale: true, reason: \"missing-manifest\" };\n\n const cache = readJson<AdornCacheV1>(cachePath);\n if (!cache) return { stale: true, reason: \"missing-cache\" };\n\n if (cache.generator.version !== params.adornVersion) {\n return { stale: true, reason: \"generator-version-changed\", detail: `${cache.generator.version} -> ${params.adornVersion}` };\n }\n\n if (ensureAbs(cache.project.tsconfigPath) !== tsconfigAbs) {\n return { stale: true, reason: \"tsconfig-changed\", detail: \"different project path\" };\n }\n\n const chain = collectTsconfigChain(tsconfigAbs);\n for (const cfg of chain) {\n const mt = statMtimeMs(cfg);\n if (mt == null) return { stale: true, reason: \"config-missing\", detail: cfg };\n\n const cachedMt = cache.project.configFiles[cfg];\n if (cachedMt == null || Math.abs(cachedMt - mt) > 0.0001) {\n return { stale: true, reason: \"config-updated\", detail: cfg };\n }\n }\n\n if (cache.project.lockfile?.path) {\n const mt = statMtimeMs(cache.project.lockfile.path);\n if (mt == null) return { stale: true, reason: \"lockfile-missing\", detail: cache.project.lockfile.path };\n\n if (Math.abs(cache.project.lockfile.mtimeMs - mt) > 0.0001) {\n return { stale: true, reason: \"lockfile-updated\", detail: cache.project.lockfile.path };\n }\n }\n\n for (const [file, cachedMt] of Object.entries(cache.inputs)) {\n const mt = statMtimeMs(file);\n if (mt == null) return { stale: true, reason: \"input-missing\", detail: file };\n if (Math.abs(cachedMt - mt) > 0.0001) return { stale: true, reason: \"input-updated\", detail: file };\n }\n\n return { stale: false, reason: \"up-to-date\" };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport ts from \"typescript\";\nimport { collectTsconfigChain, findLockfile } from \"./isStale.js\";\nimport type { AdornCacheV1 } from \"./schema.js\";\n\nfunction statMtimeMs(p: string): number {\n return fs.statSync(p).mtimeMs;\n}\n\nfunction ensureDir(p: string) {\n fs.mkdirSync(p, { recursive: true });\n}\n\nfunction isProjectSourceFile(f: string): boolean {\n if (f.includes(`${path.sep}node_modules${path.sep}`)) return false;\n if (f.includes(`${path.sep}typescript${path.sep}lib${path.sep}`)) return false;\n return /\\.(ts|tsx|mts|cts)$/.test(f);\n}\n\nexport function writeCache(params: {\n outDir: string;\n tsconfigAbs: string;\n program: ts.Program;\n adornVersion: string;\n}): void {\n const outDirAbs = path.isAbsolute(params.outDir) ? params.outDir : path.resolve(params.outDir);\n ensureDir(outDirAbs);\n\n const configFiles = collectTsconfigChain(params.tsconfigAbs);\n const configMtimes: Record<string, number> = {};\n for (const cfg of configFiles) configMtimes[cfg] = statMtimeMs(cfg);\n\n const lock = findLockfile(path.dirname(params.tsconfigAbs));\n\n const inputs: Record<string, number> = {};\n for (const sf of params.program.getSourceFiles()) {\n const f = sf.fileName;\n if (!isProjectSourceFile(f)) continue;\n try {\n inputs[f] = statMtimeMs(f);\n } catch {\n }\n }\n\n const cache: AdornCacheV1 = {\n cacheVersion: 1,\n generator: {\n name: \"adorn-api\",\n version: params.adornVersion,\n typescript: ts.version\n },\n project: {\n tsconfigPath: params.tsconfigAbs,\n configFiles: configMtimes,\n lockfile: lock ?? null\n },\n inputs\n };\n\n fs.writeFileSync(path.join(outDirAbs, \"cache.json\"), JSON.stringify(cache, null, 2), \"utf8\");\n}\n"],"mappings":"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","names":["readFileSync","resolve","path","ts","ts","path","ts","ts","ts","ts","path","ts","ts","schemaRef","fs","path","fs","path","fs","path","ts","statMtimeMs","fs","path","ts","ts","resolve","readFileSync"]}
@@ -0,0 +1,35 @@
1
+ import ts from "typescript";
2
+ export interface ScannedController {
3
+ className: string;
4
+ basePath: string;
5
+ sourceFile: ts.SourceFile;
6
+ classDeclaration: ts.ClassDeclaration;
7
+ operations: ScannedOperation[];
8
+ consumes?: string[];
9
+ produces?: string[];
10
+ }
11
+ export interface ScannedOperation {
12
+ methodName: string;
13
+ httpMethod: string;
14
+ path: string;
15
+ operationId: string;
16
+ methodDeclaration: ts.MethodDeclaration;
17
+ returnType: ts.Type;
18
+ parameters: ScannedParameter[];
19
+ pathParamIndices: number[];
20
+ bodyParamIndex: number | null;
21
+ queryParamIndices: number[];
22
+ queryObjectParamIndex: number | null;
23
+ headerObjectParamIndex: number | null;
24
+ cookieObjectParamIndex: number | null;
25
+ bodyContentType?: string;
26
+ }
27
+ export interface ScannedParameter {
28
+ name: string;
29
+ index: number;
30
+ type: ts.Type;
31
+ isOptional: boolean;
32
+ paramNode?: ts.ParameterDeclaration;
33
+ }
34
+ export declare function scanControllers(sourceFiles: ts.SourceFile[], checker: ts.TypeChecker): ScannedController[];
35
+ //# sourceMappingURL=scanControllers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanControllers.d.ts","sourceRoot":"","sources":["../../../src/compiler/analyze/scanControllers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,gBAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC;IACtC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,EAAE,CAAC,iBAAiB,CAAC;IACxC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC;IACpB,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC;CACrC;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,EAC5B,OAAO,EAAE,EAAE,CAAC,WAAW,GACtB,iBAAiB,EAAE,CAerB"}
@@ -0,0 +1,20 @@
1
+ export type StaleResult = {
2
+ stale: false;
3
+ reason: "up-to-date";
4
+ } | {
5
+ stale: true;
6
+ reason: string;
7
+ detail?: string;
8
+ };
9
+ export declare function collectTsconfigChain(tsconfigPathAbs: string): string[];
10
+ export declare function findLockfile(startDir: string): {
11
+ path: string;
12
+ mtimeMs: number;
13
+ } | null;
14
+ export declare function isStale(params: {
15
+ outDir: string;
16
+ project: string;
17
+ adornVersion: string;
18
+ typescriptVersion: string;
19
+ }): Promise<StaleResult>;
20
+ //# sourceMappingURL=isStale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isStale.d.ts","sourceRoot":"","sources":["../../../src/compiler/cache/isStale.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,WAAW,GACnB;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACtC;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAsBrD,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,EAAE,CAqCtE;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAevF;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,WAAW,CAAC,CA+CvB"}
@@ -0,0 +1,113 @@
1
+ interface OpenApi {
2
+ openapi: string;
3
+ components?: {
4
+ schemas?: Record<string, unknown>;
5
+ };
6
+ paths?: Record<string, unknown>;
7
+ info?: Record<string, unknown>;
8
+ security?: Array<Record<string, string[]>>;
9
+ }
10
+ interface Manifest {
11
+ manifestVersion: number;
12
+ generatedAt: string;
13
+ generator: {
14
+ name: string;
15
+ version: string;
16
+ typescript: string;
17
+ };
18
+ schemas: {
19
+ kind: string;
20
+ file: string;
21
+ componentsSchemasPointer: string;
22
+ };
23
+ validation: {
24
+ mode: "none" | "ajv-runtime" | "precompiled";
25
+ precompiledModule: string | null;
26
+ };
27
+ controllers: Array<{
28
+ controllerId: string;
29
+ basePath: string;
30
+ operations: Array<{
31
+ operationId: string;
32
+ http: {
33
+ method: string;
34
+ path: string;
35
+ };
36
+ handler: {
37
+ methodName: string;
38
+ };
39
+ args: {
40
+ body: {
41
+ index: number;
42
+ required: boolean;
43
+ contentType: string;
44
+ schemaRef: string;
45
+ } | null;
46
+ path: Array<{
47
+ name: string;
48
+ index: number;
49
+ required: boolean;
50
+ schemaRef: string;
51
+ schemaType?: string | string[];
52
+ }>;
53
+ query: Array<{
54
+ name: string;
55
+ index: number;
56
+ required: boolean;
57
+ schemaRef: string;
58
+ schemaType?: string | string[];
59
+ }>;
60
+ headers: Array<{
61
+ name: string;
62
+ index: number;
63
+ required: boolean;
64
+ schemaRef: string;
65
+ schemaType?: string | string[];
66
+ }>;
67
+ cookies: Array<{
68
+ name: string;
69
+ index: number;
70
+ required: boolean;
71
+ schemaRef: string;
72
+ schemaType?: string | string[];
73
+ }>;
74
+ };
75
+ responses: Array<{
76
+ status: number;
77
+ contentType: string;
78
+ schemaRef: string;
79
+ isArray?: boolean;
80
+ }>;
81
+ }>;
82
+ }>;
83
+ }
84
+ interface ValidatorModule {
85
+ validators: Record<string, {
86
+ body?: (data: unknown) => boolean;
87
+ response: Record<string, (data: unknown) => boolean>;
88
+ }>;
89
+ validateBody: (operationId: string, data: unknown) => {
90
+ ok: boolean;
91
+ errors: unknown[] | null;
92
+ };
93
+ validateResponse: (operationId: string, status: number, contentType: string, data: unknown) => {
94
+ ok: boolean;
95
+ errors: unknown[] | null;
96
+ };
97
+ }
98
+ export interface LoadArtifactsOptions {
99
+ outDir: string;
100
+ }
101
+ export interface LoadedArtifacts {
102
+ openapi: OpenApi;
103
+ manifest: Manifest;
104
+ validators: ValidatorModule | null;
105
+ }
106
+ export declare function loadArtifacts(options: LoadArtifactsOptions): Promise<LoadedArtifacts>;
107
+ export declare function clearArtifactCache(outDir?: string): void;
108
+ export declare function getArtifactCacheStats(): {
109
+ size: number;
110
+ keys: string[];
111
+ };
112
+ export {};
113
+ //# sourceMappingURL=loadArtifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadArtifacts.d.ts","sourceRoot":"","sources":["../../../src/compiler/cache/loadArtifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export interface AdornCacheV1 {
2
+ cacheVersion: 1;
3
+ generator: {
4
+ name: "adorn-api";
5
+ version: string;
6
+ typescript: string;
7
+ };
8
+ project: {
9
+ tsconfigPath: string;
10
+ configFiles: Record<string, number>;
11
+ lockfile?: {
12
+ path: string;
13
+ mtimeMs: number;
14
+ } | null;
15
+ };
16
+ inputs: Record<string, number>;
17
+ }
18
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/compiler/cache/schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,CAAC,CAAC;IAChB,SAAS,EAAE;QACT,IAAI,EAAE,WAAW,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,OAAO,EAAE;QACP,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAC;KACrD,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC"}
@@ -0,0 +1,8 @@
1
+ import ts from "typescript";
2
+ export declare function writeCache(params: {
3
+ outDir: string;
4
+ tsconfigAbs: string;
5
+ program: ts.Program;
6
+ adornVersion: string;
7
+ }): void;
8
+ //# sourceMappingURL=writeCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writeCache.d.ts","sourceRoot":"","sources":["../../../src/compiler/cache/writeCache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,YAAY,CAAC;AAkB5B,wBAAgB,UAAU,CAAC,MAAM,EAAE;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,IAAI,CAoCP"}
@@ -0,0 +1,7 @@
1
+ import type { ScannedController } from "../analyze/scanControllers.js";
2
+ import type { ManifestV1 } from "./format.js";
3
+ import ts from "typescript";
4
+ type ValidationMode = "none" | "ajv-runtime" | "precompiled";
5
+ export declare function generateManifest(controllers: ScannedController[], checker: ts.TypeChecker, version: string, validationMode?: ValidationMode): ManifestV1;
6
+ export {};
7
+ //# sourceMappingURL=emit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../src/compiler/manifest/emit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAoB,MAAM,+BAA+B,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAyD,MAAM,aAAa,CAAC;AAGrG,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,KAAK,cAAc,GAAG,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;AAE7D,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,iBAAiB,EAAE,EAChC,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,OAAO,EAAE,MAAM,EACf,cAAc,GAAE,cAA8B,GAC7C,UAAU,CAsCZ"}
@@ -0,0 +1,76 @@
1
+ export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS" | "HEAD";
2
+ export type ContentType = "application/json" | "text/plain" | "application/octet-stream" | "multipart/form-data" | string;
3
+ export interface ManifestV1 {
4
+ manifestVersion: 1;
5
+ generatedAt: string;
6
+ generator: {
7
+ name: "adorn-api";
8
+ version: string;
9
+ typescript: string;
10
+ };
11
+ schemas: {
12
+ kind: "openapi-3.1";
13
+ file: string;
14
+ componentsSchemasPointer: string;
15
+ };
16
+ validation: {
17
+ mode: "none" | "ajv-runtime" | "precompiled";
18
+ precompiledModule: string | null;
19
+ };
20
+ controllers: ControllerEntry[];
21
+ }
22
+ export interface ControllerEntry {
23
+ controllerId: string;
24
+ basePath: string;
25
+ operations: OperationEntry[];
26
+ }
27
+ export interface OperationEntry {
28
+ operationId: string;
29
+ http: {
30
+ method: HttpMethod;
31
+ path: string;
32
+ };
33
+ handler: {
34
+ methodName: string;
35
+ };
36
+ args: ArgsSpec;
37
+ responses: ResponseSpec[];
38
+ }
39
+ export interface ArgsSpec {
40
+ body: BodyArgSpec | null;
41
+ path: NamedArgSpec[];
42
+ query: NamedArgSpec[];
43
+ headers: NamedArgSpec[];
44
+ cookies: NamedArgSpec[];
45
+ }
46
+ export interface BodyArgSpec {
47
+ index: number;
48
+ required: boolean;
49
+ contentType: ContentType;
50
+ schemaRef: string;
51
+ encoding?: Record<string, EncodingSpec>;
52
+ }
53
+ export interface EncodingSpec {
54
+ contentType?: string;
55
+ headers?: Record<string, string>;
56
+ }
57
+ export interface NamedArgSpec {
58
+ name: string;
59
+ index: number;
60
+ required: boolean;
61
+ schemaRef: string;
62
+ schemaType?: string | string[];
63
+ serialization?: SerializationSpec;
64
+ }
65
+ export interface SerializationSpec {
66
+ style?: "form" | "spaceDelimited" | "pipeDelimited" | "deepObject";
67
+ explode?: boolean;
68
+ allowReserved?: boolean;
69
+ }
70
+ export interface ResponseSpec {
71
+ status: number;
72
+ contentType: ContentType;
73
+ schemaRef: string;
74
+ isArray?: boolean;
75
+ }
76
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/compiler/manifest/format.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAC3C,SAAS,GAAG,MAAM,CAAC;AAEvB,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,YAAY,GACZ,0BAA0B,GAC1B,qBAAqB,GACrB,MAAM,CAAC;AAEX,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,CAAC,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE;QACT,IAAI,EAAE,WAAW,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,OAAO,EAAE;QACP,IAAI,EAAE,aAAa,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,wBAAwB,EAAE,MAAM,CAAC;KAClC,CAAC;IAEF,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,aAAa,CAAC;QAC7C,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,CAAC;IAEF,WAAW,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE;QACJ,MAAM,EAAE,UAAU,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,YAAY,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,EAAE,YAAY,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,eAAe,GAAG,YAAY,CAAC;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -0,0 +1,8 @@
1
+ import ts from "typescript";
2
+ export interface ProgramContext {
3
+ program: ts.Program;
4
+ checker: ts.TypeChecker;
5
+ sourceFiles: ts.SourceFile[];
6
+ }
7
+ export declare function createProgramFromConfig(tsconfigPath: string): ProgramContext;
8
+ //# sourceMappingURL=createProgram.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createProgram.d.ts","sourceRoot":"","sources":["../../../src/compiler/runner/createProgram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAI5B,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC;IACpB,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC;IACxB,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,CAAC;CAC9B;AAED,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,CAwB5E"}
@@ -0,0 +1,10 @@
1
+ import ts from "typescript";
2
+ export interface SchemaFragment {
3
+ [key: string]: unknown;
4
+ }
5
+ export declare function extractPropertySchemaFragments(checker: ts.TypeChecker, prop: ts.PropertyDeclaration | ts.ParameterDeclaration): SchemaFragment[];
6
+ export declare function mergeFragments(base: Record<string, unknown>, ...frags: SchemaFragment[]): Record<string, unknown>;
7
+ export declare function extractJSDocDescription(checker: ts.TypeChecker, node: ts.Node): string | undefined;
8
+ export declare function extractJSDocTags(checker: ts.TypeChecker, node: ts.Node): Record<string, unknown>;
9
+ export declare function extractClassSchemaFragments(checker: ts.TypeChecker, classDecl: ts.ClassDeclaration): SchemaFragment[];
10
+ //# sourceMappingURL=extractAnnotations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractAnnotations.d.ts","sourceRoot":"","sources":["../../../src/compiler/schema/extractAnnotations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,IAAI,EAAE,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,oBAAoB,GACrD,cAAc,EAAE,CAkGlB;AA+DD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMjH;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,GAAG,SAAS,CAmBlG;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+BhG;AA+BD,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,SAAS,EAAE,EAAE,CAAC,gBAAgB,GAC7B,cAAc,EAAE,CA4DlB"}