adorn-api 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (573) hide show
  1. package/README.md +766 -51
  2. package/dist/adapter/express/bootstrap.d.ts +24 -0
  3. package/dist/adapter/express/bootstrap.d.ts.map +1 -0
  4. package/dist/adapter/express/index.d.ts +41 -0
  5. package/dist/adapter/express/index.d.ts.map +1 -0
  6. package/dist/adapter/express/merge.d.ts +28 -0
  7. package/dist/adapter/express/merge.d.ts.map +1 -0
  8. package/dist/cli.cjs +1571 -0
  9. package/dist/cli.cjs.map +1 -0
  10. package/dist/cli.d.ts +1 -0
  11. package/dist/cli.js +1552 -2
  12. package/dist/cli.js.map +1 -1
  13. package/dist/compiler/analyze/scanControllers.d.ts +35 -0
  14. package/dist/compiler/analyze/scanControllers.d.ts.map +1 -0
  15. package/dist/compiler/cache/isStale.d.ts +20 -0
  16. package/dist/compiler/cache/isStale.d.ts.map +1 -0
  17. package/dist/compiler/cache/loadArtifacts.d.ts +113 -0
  18. package/dist/compiler/cache/loadArtifacts.d.ts.map +1 -0
  19. package/dist/compiler/cache/schema.d.ts +18 -0
  20. package/dist/compiler/cache/schema.d.ts.map +1 -0
  21. package/dist/compiler/cache/writeCache.d.ts +8 -0
  22. package/dist/compiler/cache/writeCache.d.ts.map +1 -0
  23. package/dist/compiler/manifest/emit.d.ts +7 -0
  24. package/dist/compiler/manifest/emit.d.ts.map +1 -0
  25. package/dist/compiler/manifest/format.d.ts +76 -0
  26. package/dist/compiler/manifest/format.d.ts.map +1 -0
  27. package/dist/compiler/runner/createProgram.d.ts +8 -0
  28. package/dist/compiler/runner/createProgram.d.ts.map +1 -0
  29. package/dist/compiler/schema/extractAnnotations.d.ts +10 -0
  30. package/dist/compiler/schema/extractAnnotations.d.ts.map +1 -0
  31. package/dist/compiler/schema/openapi.d.ts +19 -0
  32. package/dist/compiler/schema/openapi.d.ts.map +1 -0
  33. package/dist/compiler/schema/typeToJsonSchema.d.ts +49 -0
  34. package/dist/compiler/schema/typeToJsonSchema.d.ts.map +1 -0
  35. package/dist/compiler/validation/emitPrecompiledValidators.d.ts +46 -0
  36. package/dist/compiler/validation/emitPrecompiledValidators.d.ts.map +1 -0
  37. package/dist/decorators/Auth.d.ts +5 -0
  38. package/dist/decorators/Auth.d.ts.map +1 -0
  39. package/dist/decorators/Controller.d.ts +2 -0
  40. package/dist/decorators/Controller.d.ts.map +1 -0
  41. package/dist/decorators/Public.d.ts +2 -0
  42. package/dist/decorators/Public.d.ts.map +1 -0
  43. package/dist/decorators/Use.d.ts +5 -0
  44. package/dist/decorators/Use.d.ts.map +1 -0
  45. package/dist/decorators/index.d.ts +5 -6
  46. package/dist/decorators/index.d.ts.map +1 -1
  47. package/dist/decorators/methods.d.ts +5 -145
  48. package/dist/decorators/methods.d.ts.map +1 -1
  49. package/dist/express.cjs +775 -0
  50. package/dist/express.cjs.map +1 -0
  51. package/dist/express.d.ts +6 -1
  52. package/dist/express.d.ts.map +1 -1
  53. package/dist/express.js +738 -1
  54. package/dist/express.js.map +1 -1
  55. package/dist/http.d.ts +29 -0
  56. package/dist/http.d.ts.map +1 -0
  57. package/dist/index.cjs +573 -0
  58. package/dist/index.cjs.map +1 -0
  59. package/dist/index.d.ts +12 -14
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +490 -26
  62. package/dist/index.js.map +1 -1
  63. package/dist/metal/index.cjs +219 -0
  64. package/dist/metal/index.cjs.map +1 -0
  65. package/dist/metal/index.d.ts +6 -0
  66. package/dist/metal/index.d.ts.map +1 -0
  67. package/dist/metal/index.js +188 -0
  68. package/dist/metal/index.js.map +1 -0
  69. package/dist/metal/readMetalBag.d.ts +33 -0
  70. package/dist/metal/readMetalBag.d.ts.map +1 -0
  71. package/dist/metal/registerMetalEntities.d.ts +6 -0
  72. package/dist/metal/registerMetalEntities.d.ts.map +1 -0
  73. package/dist/metal/schemaFromEntity.d.ts +11 -0
  74. package/dist/metal/schemaFromEntity.d.ts.map +1 -0
  75. package/dist/metal/symbolMetadata.d.ts +2 -0
  76. package/dist/metal/symbolMetadata.d.ts.map +1 -0
  77. package/dist/runtime/auth/runtime.d.ts +34 -0
  78. package/dist/runtime/auth/runtime.d.ts.map +1 -0
  79. package/dist/runtime/metadata/bucket.d.ts +3 -0
  80. package/dist/runtime/metadata/bucket.d.ts.map +1 -0
  81. package/dist/runtime/metadata/key.d.ts +2 -0
  82. package/dist/runtime/metadata/key.d.ts.map +1 -0
  83. package/dist/runtime/metadata/read.d.ts +3 -0
  84. package/dist/runtime/metadata/read.d.ts.map +1 -0
  85. package/dist/runtime/metadata/types.d.ts +21 -0
  86. package/dist/runtime/metadata/types.d.ts.map +1 -0
  87. package/dist/runtime/polyfill.d.ts +2 -0
  88. package/dist/runtime/polyfill.d.ts.map +1 -0
  89. package/dist/runtime/upload.d.ts +7 -0
  90. package/dist/runtime/upload.d.ts.map +1 -0
  91. package/dist/runtime/validation/ajv.d.ts +20 -0
  92. package/dist/runtime/validation/ajv.d.ts.map +1 -0
  93. package/dist/runtime/validation/index.d.ts +2 -0
  94. package/dist/runtime/validation/index.d.ts.map +1 -0
  95. package/dist/schema/decorators.d.ts +37 -0
  96. package/dist/schema/decorators.d.ts.map +1 -0
  97. package/dist/schema/index.cjs +214 -0
  98. package/dist/schema/index.cjs.map +1 -0
  99. package/dist/schema/index.d.ts +2 -0
  100. package/dist/schema/index.d.ts.map +1 -0
  101. package/dist/schema/index.js +163 -0
  102. package/dist/schema/index.js.map +1 -0
  103. package/dist/scripts/adorn-example.cjs +148 -0
  104. package/dist/scripts/adorn-example.cjs.map +1 -0
  105. package/dist/utils/operationId.d.ts +2 -0
  106. package/dist/utils/operationId.d.ts.map +1 -0
  107. package/dist/utils/path.d.ts +2 -0
  108. package/dist/utils/path.d.ts.map +1 -0
  109. package/package.json +92 -57
  110. package/dist/adapters/express/createApp.d.ts +0 -158
  111. package/dist/adapters/express/createApp.d.ts.map +0 -1
  112. package/dist/adapters/express/createApp.js +0 -141
  113. package/dist/adapters/express/createApp.js.map +0 -1
  114. package/dist/adapters/express/index.d.ts +0 -7
  115. package/dist/adapters/express/index.d.ts.map +0 -1
  116. package/dist/adapters/express/index.js +0 -7
  117. package/dist/adapters/express/index.js.map +0 -1
  118. package/dist/adapters/express/middleware/errorHandler.d.ts +0 -194
  119. package/dist/adapters/express/middleware/errorHandler.d.ts.map +0 -1
  120. package/dist/adapters/express/middleware/errorHandler.js +0 -167
  121. package/dist/adapters/express/middleware/errorHandler.js.map +0 -1
  122. package/dist/adapters/express/middleware/requestContext.d.ts +0 -2
  123. package/dist/adapters/express/middleware/requestContext.d.ts.map +0 -1
  124. package/dist/adapters/express/middleware/requestContext.js +0 -3
  125. package/dist/adapters/express/middleware/requestContext.js.map +0 -1
  126. package/dist/adapters/express/router.d.ts +0 -10
  127. package/dist/adapters/express/router.d.ts.map +0 -1
  128. package/dist/adapters/express/router.js +0 -105
  129. package/dist/adapters/express/router.js.map +0 -1
  130. package/dist/adapters/express/swagger/index.d.ts +0 -2
  131. package/dist/adapters/express/swagger/index.d.ts.map +0 -1
  132. package/dist/adapters/express/swagger/index.js +0 -2
  133. package/dist/adapters/express/swagger/index.js.map +0 -1
  134. package/dist/adapters/express/swagger/serve.d.ts +0 -12
  135. package/dist/adapters/express/swagger/serve.d.ts.map +0 -1
  136. package/dist/adapters/express/swagger/serve.js +0 -72
  137. package/dist/adapters/express/swagger/serve.js.map +0 -1
  138. package/dist/adapters/express/transport/request.d.ts +0 -4
  139. package/dist/adapters/express/transport/request.d.ts.map +0 -1
  140. package/dist/adapters/express/transport/request.js +0 -12
  141. package/dist/adapters/express/transport/request.js.map +0 -1
  142. package/dist/adapters/express/transport/response.d.ts +0 -5
  143. package/dist/adapters/express/transport/response.d.ts.map +0 -1
  144. package/dist/adapters/express/transport/response.js +0 -36
  145. package/dist/adapters/express/transport/response.js.map +0 -1
  146. package/dist/cli/commands/dev.d.ts +0 -2
  147. package/dist/cli/commands/dev.d.ts.map +0 -1
  148. package/dist/cli/commands/dev.js +0 -3
  149. package/dist/cli/commands/dev.js.map +0 -1
  150. package/dist/cli/commands/gen.d.ts +0 -2
  151. package/dist/cli/commands/gen.d.ts.map +0 -1
  152. package/dist/cli/commands/gen.js +0 -3
  153. package/dist/cli/commands/gen.js.map +0 -1
  154. package/dist/cli/main.d.ts +0 -2
  155. package/dist/cli/main.d.ts.map +0 -1
  156. package/dist/cli/main.js +0 -3
  157. package/dist/cli/main.js.map +0 -1
  158. package/dist/compiler/config/defaults.d.ts +0 -2
  159. package/dist/compiler/config/defaults.d.ts.map +0 -1
  160. package/dist/compiler/config/defaults.js +0 -3
  161. package/dist/compiler/config/defaults.js.map +0 -1
  162. package/dist/compiler/config/loadConfig.d.ts +0 -2
  163. package/dist/compiler/config/loadConfig.d.ts.map +0 -1
  164. package/dist/compiler/config/loadConfig.js +0 -3
  165. package/dist/compiler/config/loadConfig.js.map +0 -1
  166. package/dist/compiler/diagnostics/errors.d.ts +0 -2
  167. package/dist/compiler/diagnostics/errors.d.ts.map +0 -1
  168. package/dist/compiler/diagnostics/errors.js +0 -3
  169. package/dist/compiler/diagnostics/errors.js.map +0 -1
  170. package/dist/compiler/emit/openapi.d.ts +0 -2
  171. package/dist/compiler/emit/openapi.d.ts.map +0 -1
  172. package/dist/compiler/emit/openapi.js +0 -3
  173. package/dist/compiler/emit/openapi.js.map +0 -1
  174. package/dist/compiler/emit/routes.d.ts +0 -2
  175. package/dist/compiler/emit/routes.d.ts.map +0 -1
  176. package/dist/compiler/emit/routes.js +0 -3
  177. package/dist/compiler/emit/routes.js.map +0 -1
  178. package/dist/compiler/program/loadTsProgram.d.ts +0 -2
  179. package/dist/compiler/program/loadTsProgram.d.ts.map +0 -1
  180. package/dist/compiler/program/loadTsProgram.js +0 -3
  181. package/dist/compiler/program/loadTsProgram.js.map +0 -1
  182. package/dist/compiler/scan/actions.d.ts +0 -2
  183. package/dist/compiler/scan/actions.d.ts.map +0 -1
  184. package/dist/compiler/scan/actions.js +0 -3
  185. package/dist/compiler/scan/actions.js.map +0 -1
  186. package/dist/compiler/scan/controllers.d.ts +0 -2
  187. package/dist/compiler/scan/controllers.d.ts.map +0 -1
  188. package/dist/compiler/scan/controllers.js +0 -3
  189. package/dist/compiler/scan/controllers.js.map +0 -1
  190. package/dist/compiler/scan/types.d.ts +0 -2
  191. package/dist/compiler/scan/types.d.ts.map +0 -1
  192. package/dist/compiler/scan/types.js +0 -3
  193. package/dist/compiler/scan/types.js.map +0 -1
  194. package/dist/contracts/context.d.ts +0 -10
  195. package/dist/contracts/context.d.ts.map +0 -1
  196. package/dist/contracts/context.js +0 -2
  197. package/dist/contracts/context.js.map +0 -1
  198. package/dist/contracts/errors.d.ts +0 -22
  199. package/dist/contracts/errors.d.ts.map +0 -1
  200. package/dist/contracts/errors.js +0 -2
  201. package/dist/contracts/errors.js.map +0 -1
  202. package/dist/contracts/http.d.ts +0 -2
  203. package/dist/contracts/http.d.ts.map +0 -1
  204. package/dist/contracts/http.js +0 -3
  205. package/dist/contracts/http.js.map +0 -1
  206. package/dist/contracts/middleware.d.ts +0 -2
  207. package/dist/contracts/middleware.d.ts.map +0 -1
  208. package/dist/contracts/middleware.js +0 -3
  209. package/dist/contracts/middleware.js.map +0 -1
  210. package/dist/contracts/openapi-v3.d.ts +0 -538
  211. package/dist/contracts/openapi-v3.d.ts.map +0 -1
  212. package/dist/contracts/openapi-v3.js +0 -2
  213. package/dist/contracts/openapi-v3.js.map +0 -1
  214. package/dist/contracts/openapi.d.ts +0 -2
  215. package/dist/contracts/openapi.d.ts.map +0 -1
  216. package/dist/contracts/openapi.js +0 -2
  217. package/dist/contracts/openapi.js.map +0 -1
  218. package/dist/contracts/reply.d.ts +0 -119
  219. package/dist/contracts/reply.d.ts.map +0 -1
  220. package/dist/contracts/reply.js +0 -43
  221. package/dist/contracts/reply.js.map +0 -1
  222. package/dist/contracts/response-types.d.ts +0 -40
  223. package/dist/contracts/response-types.d.ts.map +0 -1
  224. package/dist/contracts/response-types.js +0 -2
  225. package/dist/contracts/response-types.js.map +0 -1
  226. package/dist/contracts/responses.d.ts +0 -98
  227. package/dist/contracts/responses.d.ts.map +0 -1
  228. package/dist/contracts/responses.js +0 -2
  229. package/dist/contracts/responses.js.map +0 -1
  230. package/dist/contracts/route-options.d.ts +0 -155
  231. package/dist/contracts/route-options.d.ts.map +0 -1
  232. package/dist/contracts/route-options.js +0 -2
  233. package/dist/contracts/route-options.js.map +0 -1
  234. package/dist/contracts/route-typing.d.ts +0 -25
  235. package/dist/contracts/route-typing.d.ts.map +0 -1
  236. package/dist/contracts/route-typing.js +0 -2
  237. package/dist/contracts/route-typing.js.map +0 -1
  238. package/dist/contracts/validator.d.ts +0 -146
  239. package/dist/contracts/validator.d.ts.map +0 -1
  240. package/dist/contracts/validator.js +0 -2
  241. package/dist/contracts/validator.js.map +0 -1
  242. package/dist/core/binding/binder.d.ts +0 -74
  243. package/dist/core/binding/binder.d.ts.map +0 -1
  244. package/dist/core/binding/binder.js +0 -161
  245. package/dist/core/binding/binder.js.map +0 -1
  246. package/dist/core/binding/coerce/arrays.d.ts +0 -7
  247. package/dist/core/binding/coerce/arrays.d.ts.map +0 -1
  248. package/dist/core/binding/coerce/arrays.js +0 -28
  249. package/dist/core/binding/coerce/arrays.js.map +0 -1
  250. package/dist/core/binding/coerce/csv.d.ts +0 -2
  251. package/dist/core/binding/coerce/csv.d.ts.map +0 -1
  252. package/dist/core/binding/coerce/csv.js +0 -7
  253. package/dist/core/binding/coerce/csv.js.map +0 -1
  254. package/dist/core/binding/coerce/objects.d.ts +0 -2
  255. package/dist/core/binding/coerce/objects.d.ts.map +0 -1
  256. package/dist/core/binding/coerce/objects.js +0 -3
  257. package/dist/core/binding/coerce/objects.js.map +0 -1
  258. package/dist/core/binding/coerce/primitives.d.ts +0 -70
  259. package/dist/core/binding/coerce/primitives.d.ts.map +0 -1
  260. package/dist/core/binding/coerce/primitives.js +0 -88
  261. package/dist/core/binding/coerce/primitives.js.map +0 -1
  262. package/dist/core/binding/index.d.ts +0 -2
  263. package/dist/core/binding/index.d.ts.map +0 -1
  264. package/dist/core/binding/index.js +0 -2
  265. package/dist/core/binding/index.js.map +0 -1
  266. package/dist/core/binding/rules/inferFromHttpMethod.d.ts +0 -6
  267. package/dist/core/binding/rules/inferFromHttpMethod.d.ts.map +0 -1
  268. package/dist/core/binding/rules/inferFromHttpMethod.js +0 -11
  269. package/dist/core/binding/rules/inferFromHttpMethod.js.map +0 -1
  270. package/dist/core/binding/rules/inferFromPath.d.ts +0 -2
  271. package/dist/core/binding/rules/inferFromPath.d.ts.map +0 -1
  272. package/dist/core/binding/rules/inferFromPath.js +0 -9
  273. package/dist/core/binding/rules/inferFromPath.js.map +0 -1
  274. package/dist/core/binding/rules/wrappers.d.ts +0 -2
  275. package/dist/core/binding/rules/wrappers.d.ts.map +0 -1
  276. package/dist/core/binding/rules/wrappers.js +0 -3
  277. package/dist/core/binding/rules/wrappers.js.map +0 -1
  278. package/dist/core/errors/http-error.d.ts +0 -63
  279. package/dist/core/errors/http-error.d.ts.map +0 -1
  280. package/dist/core/errors/http-error.js +0 -71
  281. package/dist/core/errors/http-error.js.map +0 -1
  282. package/dist/core/errors/index.d.ts +0 -4
  283. package/dist/core/errors/index.d.ts.map +0 -1
  284. package/dist/core/errors/index.js +0 -4
  285. package/dist/core/errors/index.js.map +0 -1
  286. package/dist/core/errors/problem.d.ts +0 -3
  287. package/dist/core/errors/problem.d.ts.map +0 -1
  288. package/dist/core/errors/problem.js +0 -33
  289. package/dist/core/errors/problem.js.map +0 -1
  290. package/dist/core/errors/validation-error.d.ts +0 -73
  291. package/dist/core/errors/validation-error.d.ts.map +0 -1
  292. package/dist/core/errors/validation-error.js +0 -82
  293. package/dist/core/errors/validation-error.js.map +0 -1
  294. package/dist/core/openapi/buildOpenApi.d.ts +0 -79
  295. package/dist/core/openapi/buildOpenApi.d.ts.map +0 -1
  296. package/dist/core/openapi/buildOpenApi.js +0 -196
  297. package/dist/core/openapi/buildOpenApi.js.map +0 -1
  298. package/dist/core/openapi/index.d.ts +0 -2
  299. package/dist/core/openapi/index.d.ts.map +0 -1
  300. package/dist/core/openapi/index.js +0 -2
  301. package/dist/core/openapi/index.js.map +0 -1
  302. package/dist/core/openapi/schema/formats.d.ts +0 -2
  303. package/dist/core/openapi/schema/formats.d.ts.map +0 -1
  304. package/dist/core/openapi/schema/formats.js +0 -3
  305. package/dist/core/openapi/schema/formats.js.map +0 -1
  306. package/dist/core/openapi/schema/registry.d.ts +0 -9
  307. package/dist/core/openapi/schema/registry.d.ts.map +0 -1
  308. package/dist/core/openapi/schema/registry.js +0 -21
  309. package/dist/core/openapi/schema/registry.js.map +0 -1
  310. package/dist/core/openapi/schema/schemaModel.d.ts +0 -2
  311. package/dist/core/openapi/schema/schemaModel.d.ts.map +0 -1
  312. package/dist/core/openapi/schema/schemaModel.js +0 -3
  313. package/dist/core/openapi/schema/schemaModel.js.map +0 -1
  314. package/dist/core/openapi/schema/schemaRegistry.d.ts +0 -2
  315. package/dist/core/openapi/schema/schemaRegistry.d.ts.map +0 -1
  316. package/dist/core/openapi/schema/schemaRegistry.js +0 -3
  317. package/dist/core/openapi/schema/schemaRegistry.js.map +0 -1
  318. package/dist/core/openapi/schema/toOpenApi.d.ts +0 -4
  319. package/dist/core/openapi/schema/toOpenApi.d.ts.map +0 -1
  320. package/dist/core/openapi/schema/toOpenApi.js +0 -82
  321. package/dist/core/openapi/schema/toOpenApi.js.map +0 -1
  322. package/dist/core/pipeline/compose.d.ts +0 -2
  323. package/dist/core/pipeline/compose.d.ts.map +0 -1
  324. package/dist/core/pipeline/compose.js +0 -3
  325. package/dist/core/pipeline/compose.js.map +0 -1
  326. package/dist/core/pipeline/errorMap.d.ts +0 -2
  327. package/dist/core/pipeline/errorMap.d.ts.map +0 -1
  328. package/dist/core/pipeline/errorMap.js +0 -3
  329. package/dist/core/pipeline/errorMap.js.map +0 -1
  330. package/dist/core/pipeline/invoke.d.ts +0 -2
  331. package/dist/core/pipeline/invoke.d.ts.map +0 -1
  332. package/dist/core/pipeline/invoke.js +0 -3
  333. package/dist/core/pipeline/invoke.js.map +0 -1
  334. package/dist/core/pipeline/result.d.ts +0 -2
  335. package/dist/core/pipeline/result.d.ts.map +0 -1
  336. package/dist/core/pipeline/result.js +0 -3
  337. package/dist/core/pipeline/result.js.map +0 -1
  338. package/dist/core/registry/buildRegistry.d.ts +0 -3
  339. package/dist/core/registry/buildRegistry.d.ts.map +0 -1
  340. package/dist/core/registry/buildRegistry.js +0 -105
  341. package/dist/core/registry/buildRegistry.js.map +0 -1
  342. package/dist/core/registry/conflicts.d.ts +0 -6
  343. package/dist/core/registry/conflicts.d.ts.map +0 -1
  344. package/dist/core/registry/conflicts.js +0 -21
  345. package/dist/core/registry/conflicts.js.map +0 -1
  346. package/dist/core/registry/index.d.ts +0 -5
  347. package/dist/core/registry/index.d.ts.map +0 -1
  348. package/dist/core/registry/index.js +0 -5
  349. package/dist/core/registry/index.js.map +0 -1
  350. package/dist/core/registry/normalize.d.ts +0 -3
  351. package/dist/core/registry/normalize.d.ts.map +0 -1
  352. package/dist/core/registry/normalize.js +0 -24
  353. package/dist/core/registry/normalize.js.map +0 -1
  354. package/dist/core/registry/types.d.ts +0 -225
  355. package/dist/core/registry/types.d.ts.map +0 -1
  356. package/dist/core/registry/types.js +0 -2
  357. package/dist/core/registry/types.js.map +0 -1
  358. package/dist/core/reply/index.d.ts +0 -3
  359. package/dist/core/reply/index.d.ts.map +0 -1
  360. package/dist/core/reply/index.js +0 -3
  361. package/dist/core/reply/index.js.map +0 -1
  362. package/dist/core/reply/reply.d.ts +0 -102
  363. package/dist/core/reply/reply.d.ts.map +0 -1
  364. package/dist/core/reply/reply.js +0 -105
  365. package/dist/core/reply/reply.js.map +0 -1
  366. package/dist/core/reply/typed.d.ts +0 -161
  367. package/dist/core/reply/typed.d.ts.map +0 -1
  368. package/dist/core/reply/typed.js +0 -154
  369. package/dist/core/reply/typed.js.map +0 -1
  370. package/dist/core/responses/helpers.d.ts +0 -10
  371. package/dist/core/responses/helpers.d.ts.map +0 -1
  372. package/dist/core/responses/helpers.js +0 -8
  373. package/dist/core/responses/helpers.js.map +0 -1
  374. package/dist/core/responses/index.d.ts +0 -4
  375. package/dist/core/responses/index.d.ts.map +0 -1
  376. package/dist/core/responses/index.js +0 -4
  377. package/dist/core/responses/index.js.map +0 -1
  378. package/dist/core/responses/normalize.d.ts +0 -3
  379. package/dist/core/responses/normalize.d.ts.map +0 -1
  380. package/dist/core/responses/normalize.js +0 -33
  381. package/dist/core/responses/normalize.js.map +0 -1
  382. package/dist/core/responses/pickStatus.d.ts +0 -3
  383. package/dist/core/responses/pickStatus.d.ts.map +0 -1
  384. package/dist/core/responses/pickStatus.js +0 -27
  385. package/dist/core/responses/pickStatus.js.map +0 -1
  386. package/dist/core/route/defineRoute.d.ts +0 -74
  387. package/dist/core/route/defineRoute.d.ts.map +0 -1
  388. package/dist/core/route/defineRoute.js +0 -59
  389. package/dist/core/route/defineRoute.js.map +0 -1
  390. package/dist/core/route/index.d.ts +0 -2
  391. package/dist/core/route/index.d.ts.map +0 -1
  392. package/dist/core/route/index.js +0 -2
  393. package/dist/core/route/index.js.map +0 -1
  394. package/dist/core/serialization/json.d.ts +0 -2
  395. package/dist/core/serialization/json.d.ts.map +0 -1
  396. package/dist/core/serialization/json.js +0 -3
  397. package/dist/core/serialization/json.js.map +0 -1
  398. package/dist/core/typing/path-params.d.ts +0 -2
  399. package/dist/core/typing/path-params.d.ts.map +0 -1
  400. package/dist/core/typing/path-params.js +0 -2
  401. package/dist/core/typing/path-params.js.map +0 -1
  402. package/dist/decorators/binding.d.ts +0 -9
  403. package/dist/decorators/binding.d.ts.map +0 -1
  404. package/dist/decorators/binding.js +0 -18
  405. package/dist/decorators/binding.js.map +0 -1
  406. package/dist/decorators/controller.d.ts +0 -6
  407. package/dist/decorators/controller.d.ts.map +0 -1
  408. package/dist/decorators/controller.js +0 -26
  409. package/dist/decorators/controller.js.map +0 -1
  410. package/dist/decorators/db.d.ts +0 -2
  411. package/dist/decorators/db.d.ts.map +0 -1
  412. package/dist/decorators/db.js +0 -3
  413. package/dist/decorators/db.js.map +0 -1
  414. package/dist/decorators/docs.d.ts +0 -8
  415. package/dist/decorators/docs.d.ts.map +0 -1
  416. package/dist/decorators/docs.js +0 -46
  417. package/dist/decorators/docs.js.map +0 -1
  418. package/dist/decorators/index.js +0 -7
  419. package/dist/decorators/index.js.map +0 -1
  420. package/dist/decorators/methods.js +0 -170
  421. package/dist/decorators/methods.js.map +0 -1
  422. package/dist/decorators/middleware.d.ts +0 -2
  423. package/dist/decorators/middleware.d.ts.map +0 -1
  424. package/dist/decorators/middleware.js +0 -3
  425. package/dist/decorators/middleware.js.map +0 -1
  426. package/dist/decorators/responses.d.ts +0 -7
  427. package/dist/decorators/responses.d.ts.map +0 -1
  428. package/dist/decorators/responses.js +0 -44
  429. package/dist/decorators/responses.js.map +0 -1
  430. package/dist/decorators/security.d.ts +0 -8
  431. package/dist/decorators/security.d.ts.map +0 -1
  432. package/dist/decorators/security.js +0 -39
  433. package/dist/decorators/security.js.map +0 -1
  434. package/dist/integrations/metal-orm/index.d.ts +0 -2
  435. package/dist/integrations/metal-orm/index.d.ts.map +0 -1
  436. package/dist/integrations/metal-orm/index.js +0 -2
  437. package/dist/integrations/metal-orm/index.js.map +0 -1
  438. package/dist/integrations/metal-orm/pagination/executePaged.d.ts +0 -2
  439. package/dist/integrations/metal-orm/pagination/executePaged.d.ts.map +0 -1
  440. package/dist/integrations/metal-orm/pagination/executePaged.js +0 -3
  441. package/dist/integrations/metal-orm/pagination/executePaged.js.map +0 -1
  442. package/dist/integrations/metal-orm/pagination/page.d.ts +0 -2
  443. package/dist/integrations/metal-orm/pagination/page.d.ts.map +0 -1
  444. package/dist/integrations/metal-orm/pagination/page.js +0 -3
  445. package/dist/integrations/metal-orm/pagination/page.js.map +0 -1
  446. package/dist/integrations/metal-orm/query/filters.d.ts +0 -2
  447. package/dist/integrations/metal-orm/query/filters.d.ts.map +0 -1
  448. package/dist/integrations/metal-orm/query/filters.js +0 -3
  449. package/dist/integrations/metal-orm/query/filters.js.map +0 -1
  450. package/dist/integrations/metal-orm/query/search.d.ts +0 -2
  451. package/dist/integrations/metal-orm/query/search.d.ts.map +0 -1
  452. package/dist/integrations/metal-orm/query/search.js +0 -3
  453. package/dist/integrations/metal-orm/query/search.js.map +0 -1
  454. package/dist/integrations/metal-orm/query/sort.d.ts +0 -2
  455. package/dist/integrations/metal-orm/query/sort.d.ts.map +0 -1
  456. package/dist/integrations/metal-orm/query/sort.js +0 -3
  457. package/dist/integrations/metal-orm/query/sort.js.map +0 -1
  458. package/dist/integrations/metal-orm/save-graph/helpers.d.ts +0 -2
  459. package/dist/integrations/metal-orm/save-graph/helpers.d.ts.map +0 -1
  460. package/dist/integrations/metal-orm/save-graph/helpers.js +0 -3
  461. package/dist/integrations/metal-orm/save-graph/helpers.js.map +0 -1
  462. package/dist/integrations/metal-orm/save-graph/types.d.ts +0 -2
  463. package/dist/integrations/metal-orm/save-graph/types.d.ts.map +0 -1
  464. package/dist/integrations/metal-orm/save-graph/types.js +0 -3
  465. package/dist/integrations/metal-orm/save-graph/types.js.map +0 -1
  466. package/dist/integrations/metal-orm/schema/column-map.d.ts +0 -96
  467. package/dist/integrations/metal-orm/schema/column-map.d.ts.map +0 -1
  468. package/dist/integrations/metal-orm/schema/column-map.js +0 -207
  469. package/dist/integrations/metal-orm/schema/column-map.js.map +0 -1
  470. package/dist/integrations/metal-orm/schema/ddl.d.ts +0 -2
  471. package/dist/integrations/metal-orm/schema/ddl.d.ts.map +0 -1
  472. package/dist/integrations/metal-orm/schema/ddl.js +0 -3
  473. package/dist/integrations/metal-orm/schema/ddl.js.map +0 -1
  474. package/dist/integrations/metal-orm/schema/dto.d.ts +0 -7
  475. package/dist/integrations/metal-orm/schema/dto.d.ts.map +0 -1
  476. package/dist/integrations/metal-orm/schema/dto.js +0 -34
  477. package/dist/integrations/metal-orm/schema/dto.js.map +0 -1
  478. package/dist/integrations/metal-orm/schema/entity.d.ts +0 -99
  479. package/dist/integrations/metal-orm/schema/entity.d.ts.map +0 -1
  480. package/dist/integrations/metal-orm/schema/entity.js +0 -99
  481. package/dist/integrations/metal-orm/schema/entity.js.map +0 -1
  482. package/dist/integrations/metal-orm/schema/filters.d.ts +0 -11
  483. package/dist/integrations/metal-orm/schema/filters.d.ts.map +0 -1
  484. package/dist/integrations/metal-orm/schema/filters.js +0 -21
  485. package/dist/integrations/metal-orm/schema/filters.js.map +0 -1
  486. package/dist/integrations/metal-orm/schema/index.d.ts +0 -5
  487. package/dist/integrations/metal-orm/schema/index.d.ts.map +0 -1
  488. package/dist/integrations/metal-orm/schema/index.js +0 -5
  489. package/dist/integrations/metal-orm/schema/index.js.map +0 -1
  490. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts +0 -2
  491. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.d.ts.map +0 -1
  492. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js +0 -3
  493. package/dist/integrations/metal-orm/schema/openapi/entityToSchema.js.map +0 -1
  494. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts +0 -2
  495. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.d.ts.map +0 -1
  496. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js +0 -3
  497. package/dist/integrations/metal-orm/schema/openapi/tableDefToSchema.js.map +0 -1
  498. package/dist/integrations/metal-orm/schema/sqlite.d.ts +0 -2
  499. package/dist/integrations/metal-orm/schema/sqlite.d.ts.map +0 -1
  500. package/dist/integrations/metal-orm/schema/sqlite.js +0 -3
  501. package/dist/integrations/metal-orm/schema/sqlite.js.map +0 -1
  502. package/dist/integrations/metal-orm/schema/tabledef.d.ts +0 -4
  503. package/dist/integrations/metal-orm/schema/tabledef.d.ts.map +0 -1
  504. package/dist/integrations/metal-orm/schema/tabledef.js +0 -10
  505. package/dist/integrations/metal-orm/schema/tabledef.js.map +0 -1
  506. package/dist/integrations/metal-orm/schema/types.d.ts +0 -7
  507. package/dist/integrations/metal-orm/schema/types.d.ts.map +0 -1
  508. package/dist/integrations/metal-orm/schema/types.js +0 -2
  509. package/dist/integrations/metal-orm/schema/types.js.map +0 -1
  510. package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts +0 -2
  511. package/dist/integrations/metal-orm/serialization/entitySerializer.d.ts.map +0 -1
  512. package/dist/integrations/metal-orm/serialization/entitySerializer.js +0 -3
  513. package/dist/integrations/metal-orm/serialization/entitySerializer.js.map +0 -1
  514. package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts +0 -2
  515. package/dist/integrations/metal-orm/serialization/relationPolicy.d.ts.map +0 -1
  516. package/dist/integrations/metal-orm/serialization/relationPolicy.js +0 -3
  517. package/dist/integrations/metal-orm/serialization/relationPolicy.js.map +0 -1
  518. package/dist/integrations/metal-orm/session/context.d.ts +0 -2
  519. package/dist/integrations/metal-orm/session/context.d.ts.map +0 -1
  520. package/dist/integrations/metal-orm/session/context.js +0 -3
  521. package/dist/integrations/metal-orm/session/context.js.map +0 -1
  522. package/dist/integrations/metal-orm/session/middleware.d.ts +0 -2
  523. package/dist/integrations/metal-orm/session/middleware.d.ts.map +0 -1
  524. package/dist/integrations/metal-orm/session/middleware.js +0 -3
  525. package/dist/integrations/metal-orm/session/middleware.js.map +0 -1
  526. package/dist/integrations/metal-orm/session/transaction.d.ts +0 -2
  527. package/dist/integrations/metal-orm/session/transaction.d.ts.map +0 -1
  528. package/dist/integrations/metal-orm/session/transaction.js +0 -3
  529. package/dist/integrations/metal-orm/session/transaction.js.map +0 -1
  530. package/dist/integrations/metal-orm/testing/setupSchema.d.ts +0 -2
  531. package/dist/integrations/metal-orm/testing/setupSchema.d.ts.map +0 -1
  532. package/dist/integrations/metal-orm/testing/setupSchema.js +0 -3
  533. package/dist/integrations/metal-orm/testing/setupSchema.js.map +0 -1
  534. package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts +0 -2
  535. package/dist/integrations/metal-orm/testing/sqliteMemory.d.ts.map +0 -1
  536. package/dist/integrations/metal-orm/testing/sqliteMemory.js +0 -3
  537. package/dist/integrations/metal-orm/testing/sqliteMemory.js.map +0 -1
  538. package/dist/metadata/bag.d.ts +0 -18
  539. package/dist/metadata/bag.d.ts.map +0 -1
  540. package/dist/metadata/bag.js +0 -39
  541. package/dist/metadata/bag.js.map +0 -1
  542. package/dist/metadata/index.d.ts +0 -4
  543. package/dist/metadata/index.d.ts.map +0 -1
  544. package/dist/metadata/index.js +0 -4
  545. package/dist/metadata/index.js.map +0 -1
  546. package/dist/metadata/keys.d.ts +0 -254
  547. package/dist/metadata/keys.d.ts.map +0 -1
  548. package/dist/metadata/keys.js +0 -23
  549. package/dist/metadata/keys.js.map +0 -1
  550. package/dist/metadata/merge.d.ts +0 -9
  551. package/dist/metadata/merge.d.ts.map +0 -1
  552. package/dist/metadata/merge.js +0 -30
  553. package/dist/metadata/merge.js.map +0 -1
  554. package/dist/metal-orm.d.ts +0 -2
  555. package/dist/metal-orm.d.ts.map +0 -1
  556. package/dist/metal-orm.js +0 -2
  557. package/dist/metal-orm.js.map +0 -1
  558. package/dist/validation/native/index.d.ts +0 -3
  559. package/dist/validation/native/index.d.ts.map +0 -1
  560. package/dist/validation/native/index.js +0 -3
  561. package/dist/validation/native/index.js.map +0 -1
  562. package/dist/validation/native/ir.d.ts +0 -38
  563. package/dist/validation/native/ir.d.ts.map +0 -1
  564. package/dist/validation/native/ir.js +0 -2
  565. package/dist/validation/native/ir.js.map +0 -1
  566. package/dist/validation/native/schema.d.ts +0 -63
  567. package/dist/validation/native/schema.d.ts.map +0 -1
  568. package/dist/validation/native/schema.js +0 -271
  569. package/dist/validation/native/schema.js.map +0 -1
  570. package/dist/validation/native/validator.d.ts +0 -21
  571. package/dist/validation/native/validator.d.ts.map +0 -1
  572. package/dist/validation/native/validator.js +0 -48
  573. package/dist/validation/native/validator.js.map +0 -1
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/metal/index.ts
21
+ var metal_exports = {};
22
+ __export(metal_exports, {
23
+ METAL_METADATA_KEY: () => METAL_METADATA_KEY,
24
+ ensureSymbolMetadata: () => ensureSymbolMetadata,
25
+ readMetalDecoratorBagFromConstructor: () => readMetalDecoratorBagFromConstructor,
26
+ registerMetalEntities: () => registerMetalEntities,
27
+ schemaFromEntity: () => schemaFromEntity
28
+ });
29
+ module.exports = __toCommonJS(metal_exports);
30
+
31
+ // src/metal/symbolMetadata.ts
32
+ function ensureSymbolMetadata() {
33
+ const s = Symbol;
34
+ if (!s.metadata) {
35
+ s.metadata = /* @__PURE__ */ Symbol("Symbol.metadata");
36
+ }
37
+ return s.metadata;
38
+ }
39
+
40
+ // src/metal/readMetalBag.ts
41
+ var METAL_METADATA_KEY = "metal-orm:decorators";
42
+ function readMetalDecoratorBagFromConstructor(ctor) {
43
+ const metadataSymbol = ensureSymbolMetadata();
44
+ const metadata = Reflect.get(ctor, metadataSymbol);
45
+ return metadata?.[METAL_METADATA_KEY];
46
+ }
47
+
48
+ // src/metal/schemaFromEntity.ts
49
+ function defaultSchemaName(ctor, strip) {
50
+ const raw = ctor.name || "AnonymousEntity";
51
+ return strip ? raw.replace(/Entity$/i, "") || raw : raw;
52
+ }
53
+ function columnTypeToSchema(col) {
54
+ const t = String(col.type).toLowerCase();
55
+ const s = {};
56
+ if (["varchar", "text", "string", "char", "citext"].includes(t)) {
57
+ s.type = "string";
58
+ const a0 = Array.isArray(col.args) ? col.args[0] : void 0;
59
+ if (typeof a0 === "number" && Number.isFinite(a0) && a0 > 0) s.maxLength = a0;
60
+ if (typeof col.comment === "string") s.description = col.comment;
61
+ return s;
62
+ }
63
+ if (["uuid"].includes(t)) {
64
+ s.type = "string";
65
+ s.format = "uuid";
66
+ if (typeof col.comment === "string") s.description = col.comment;
67
+ return s;
68
+ }
69
+ if (["timestamp", "timestamptz", "datetime"].includes(t)) {
70
+ s.type = "string";
71
+ s.format = "date-time";
72
+ if (typeof col.comment === "string") s.description = col.comment;
73
+ return s;
74
+ }
75
+ if (["date"].includes(t)) {
76
+ s.type = "string";
77
+ s.format = "date";
78
+ if (typeof col.comment === "string") s.description = col.comment;
79
+ return s;
80
+ }
81
+ if (["bool", "boolean"].includes(t)) {
82
+ s.type = "boolean";
83
+ if (typeof col.comment === "string") s.description = col.comment;
84
+ return s;
85
+ }
86
+ if (["int", "int4", "integer", "smallint", "int2", "serial", "bigserial"].includes(t)) {
87
+ s.type = "integer";
88
+ if (typeof col.comment === "string") s.description = col.comment;
89
+ return s;
90
+ }
91
+ if (["bigint", "int8"].includes(t)) {
92
+ s.type = "string";
93
+ s.format = "int64";
94
+ s.pattern = "^-?\\d+$";
95
+ if (typeof col.comment === "string") s.description = col.comment;
96
+ return s;
97
+ }
98
+ if (["float", "float4", "float8", "double", "decimal", "numeric", "real"].includes(t)) {
99
+ s.type = "number";
100
+ if (typeof col.comment === "string") s.description = col.comment;
101
+ return s;
102
+ }
103
+ if (["json", "jsonb"].includes(t)) {
104
+ s.type = ["object", "array", "string", "number", "boolean", "null"];
105
+ if (typeof col.comment === "string") s.description = col.comment;
106
+ return s;
107
+ }
108
+ s.type = "string";
109
+ if (typeof col.comment === "string") s.description = col.comment;
110
+ return s;
111
+ }
112
+ function isLiteralDefault(v) {
113
+ return v === null || ["string", "number", "boolean"].includes(typeof v);
114
+ }
115
+ function makeNullable(schema) {
116
+ if (schema.type === "null") return schema;
117
+ if (Array.isArray(schema.type)) {
118
+ if (!schema.type.includes("null")) schema.type = [...schema.type, "null"];
119
+ return schema;
120
+ }
121
+ if (typeof schema.type === "string") {
122
+ schema.type = [schema.type, "null"];
123
+ } else {
124
+ schema.type = ["null"];
125
+ }
126
+ return schema;
127
+ }
128
+ function isGenerated(col) {
129
+ return !!col.primary || !!col.autoIncrement || col.generated != null;
130
+ }
131
+ function shouldIncludeColumn(col, mode) {
132
+ if (mode === "read") return true;
133
+ if (mode === "create") return !isGenerated(col);
134
+ if (mode === "update") return true;
135
+ return true;
136
+ }
137
+ function shouldRequire(col, mode) {
138
+ if (mode === "update") return false;
139
+ if (!col.notNull) return false;
140
+ if (mode === "create" && col.default != null) return false;
141
+ return true;
142
+ }
143
+ function schemaFromEntity(ctor, opts = {}) {
144
+ const bag = readMetalDecoratorBagFromConstructor(ctor);
145
+ if (!bag || !Array.isArray(bag.columns) || bag.columns.length === 0) return void 0;
146
+ const mode = opts.mode ?? "read";
147
+ const name = opts.name ?? defaultSchemaName(ctor, opts.stripEntitySuffix ?? true);
148
+ const schema = {
149
+ title: name,
150
+ type: "object",
151
+ properties: {},
152
+ additionalProperties: opts.additionalProperties ?? true
153
+ };
154
+ const required = [];
155
+ for (const entry of bag.columns) {
156
+ const prop = entry.propertyName;
157
+ const col = entry.column;
158
+ if (!shouldIncludeColumn(col, mode)) continue;
159
+ const propSchema = columnTypeToSchema(col);
160
+ if (!col.notNull) makeNullable(propSchema);
161
+ if (isLiteralDefault(col.default)) propSchema.default = col.default;
162
+ if (mode === "read" && col.primary) propSchema.readOnly = true;
163
+ schema.properties[prop] = propSchema;
164
+ if (shouldRequire(col, mode)) required.push(prop);
165
+ }
166
+ if (required.length) schema.required = required;
167
+ if ((opts.includeRelations ?? "none") === "inline") {
168
+ for (const r of bag.relations ?? []) {
169
+ const rel = r.relation;
170
+ if (typeof rel?.target !== "function") continue;
171
+ let target;
172
+ try {
173
+ target = rel.target();
174
+ } catch {
175
+ continue;
176
+ }
177
+ if (typeof target !== "function") continue;
178
+ const targetName = defaultSchemaName(target, true);
179
+ schema.properties[r.propertyName] = { $ref: `#/components/schemas/${targetName}` };
180
+ }
181
+ }
182
+ return schema;
183
+ }
184
+
185
+ // src/metal/registerMetalEntities.ts
186
+ function deepMerge(a, b) {
187
+ if (Array.isArray(a) || Array.isArray(b)) return b ?? a;
188
+ if (a && typeof a === "object" && b && typeof b === "object") {
189
+ const out = { ...a };
190
+ for (const [k, v] of Object.entries(b)) out[k] = deepMerge(out[k], v);
191
+ return out;
192
+ }
193
+ return b ?? a;
194
+ }
195
+ function registerMetalEntities(openapi, entities, opts = {}) {
196
+ openapi.components ??= {};
197
+ openapi.components.schemas ??= {};
198
+ const mergeMode = opts.merge ?? "merge";
199
+ for (const ctor of entities) {
200
+ const s = schemaFromEntity(ctor, opts);
201
+ if (!s) continue;
202
+ const name = s.title || ctor.name;
203
+ const existing = openapi.components.schemas[name];
204
+ if (!existing || mergeMode === "override") {
205
+ openapi.components.schemas[name] = s;
206
+ } else {
207
+ openapi.components.schemas[name] = deepMerge(existing, s);
208
+ }
209
+ }
210
+ }
211
+ // Annotate the CommonJS export names for ESM import in node:
212
+ 0 && (module.exports = {
213
+ METAL_METADATA_KEY,
214
+ ensureSymbolMetadata,
215
+ readMetalDecoratorBagFromConstructor,
216
+ registerMetalEntities,
217
+ schemaFromEntity
218
+ });
219
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/metal/index.ts","../../src/metal/symbolMetadata.ts","../../src/metal/readMetalBag.ts","../../src/metal/schemaFromEntity.ts","../../src/metal/registerMetalEntities.ts"],"sourcesContent":["export { ensureSymbolMetadata } from \"./symbolMetadata.js\";\nexport { readMetalDecoratorBagFromConstructor, METAL_METADATA_KEY } from \"./readMetalBag.js\";\nexport { schemaFromEntity } from \"./schemaFromEntity.js\";\nexport { registerMetalEntities } from \"./registerMetalEntities.js\";\n\nexport type { SchemaFromEntityOptions, EntitySchemaMode, JsonSchema } from \"./schemaFromEntity.js\";\n","export function ensureSymbolMetadata(): symbol {\n const s = Symbol as unknown as { metadata?: symbol };\n if (!s.metadata) {\n s.metadata = Symbol(\"Symbol.metadata\");\n }\n return s.metadata;\n}\n","import { ensureSymbolMetadata } from \"./symbolMetadata.js\";\n\nexport const METAL_METADATA_KEY = \"metal-orm:decorators\";\n\nexport type MetalColumnDef = {\n type: string;\n args?: unknown[];\n dialectTypes?: unknown;\n notNull?: boolean;\n primary?: boolean;\n tsType?: unknown;\n unique?: boolean;\n default?: unknown;\n autoIncrement?: boolean;\n generated?: unknown;\n check?: unknown;\n references?: unknown;\n comment?: string;\n};\n\nexport type MetalRelationMetadata = {\n kind: string;\n propertyKey: string;\n target?: (...args: any[]) => any;\n};\n\nexport type MetalDecoratorBag = {\n columns: Array<{ propertyName: string; column: MetalColumnDef }>;\n relations: Array<{ propertyName: string; relation: MetalRelationMetadata }>;\n};\n\nexport function readMetalDecoratorBagFromConstructor(ctor: object): MetalDecoratorBag | undefined {\n const metadataSymbol = ensureSymbolMetadata();\n const metadata = Reflect.get(ctor, metadataSymbol) as Record<PropertyKey, unknown> | undefined;\n return metadata?.[METAL_METADATA_KEY] as MetalDecoratorBag | undefined;\n}\n","import { readMetalDecoratorBagFromConstructor, type MetalColumnDef, type MetalDecoratorBag } from \"./readMetalBag.js\";\n\nexport type JsonSchema = Record<string, any>;\n\nexport type EntitySchemaMode = \"read\" | \"create\" | \"update\";\n\nexport interface SchemaFromEntityOptions {\n name?: string;\n stripEntitySuffix?: boolean;\n mode?: EntitySchemaMode;\n additionalProperties?: boolean;\n includeRelations?: \"none\" | \"inline\";\n}\n\nfunction defaultSchemaName(ctor: Function, strip: boolean) {\n const raw = ctor.name || \"AnonymousEntity\";\n return strip ? raw.replace(/Entity$/i, \"\") || raw : raw;\n}\n\nfunction columnTypeToSchema(col: MetalColumnDef): JsonSchema {\n const t = String(col.type).toLowerCase();\n const s: JsonSchema = {};\n\n if ([\"varchar\", \"text\", \"string\", \"char\", \"citext\"].includes(t)) {\n s.type = \"string\";\n const a0 = Array.isArray(col.args) ? col.args[0] : undefined;\n if (typeof a0 === \"number\" && Number.isFinite(a0) && a0 > 0) s.maxLength = a0;\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"uuid\"].includes(t)) {\n s.type = \"string\";\n s.format = \"uuid\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"timestamp\", \"timestamptz\", \"datetime\"].includes(t)) {\n s.type = \"string\";\n s.format = \"date-time\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n if ([\"date\"].includes(t)) {\n s.type = \"string\";\n s.format = \"date\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"bool\", \"boolean\"].includes(t)) {\n s.type = \"boolean\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"int\", \"int4\", \"integer\", \"smallint\", \"int2\", \"serial\", \"bigserial\"].includes(t)) {\n s.type = \"integer\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"bigint\", \"int8\"].includes(t)) {\n s.type = \"string\";\n s.format = \"int64\";\n s.pattern = \"^-?\\\\d+$\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"float\", \"float4\", \"float8\", \"double\", \"decimal\", \"numeric\", \"real\"].includes(t)) {\n s.type = \"number\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"json\", \"jsonb\"].includes(t)) {\n s.type = [\"object\", \"array\", \"string\", \"number\", \"boolean\", \"null\"];\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n s.type = \"string\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n}\n\nfunction isLiteralDefault(v: unknown) {\n return v === null || [\"string\", \"number\", \"boolean\"].includes(typeof v);\n}\n\nfunction makeNullable(schema: JsonSchema): JsonSchema {\n if (schema.type === \"null\") return schema;\n if (Array.isArray(schema.type)) {\n if (!schema.type.includes(\"null\")) schema.type = [...schema.type, \"null\"];\n return schema;\n }\n if (typeof schema.type === \"string\") {\n schema.type = [schema.type, \"null\"];\n } else {\n schema.type = [\"null\"];\n }\n return schema;\n}\n\nfunction isGenerated(col: MetalColumnDef) {\n return !!col.primary || !!col.autoIncrement || col.generated != null;\n}\n\nfunction shouldIncludeColumn(col: MetalColumnDef, mode: \"read\" | \"create\" | \"update\") {\n if (mode === \"read\") return true;\n if (mode === \"create\") return !isGenerated(col);\n if (mode === \"update\") return true;\n return true;\n}\n\nfunction shouldRequire(col: MetalColumnDef, mode: \"read\" | \"create\" | \"update\") {\n if (mode === \"update\") return false;\n if (!col.notNull) return false;\n if (mode === \"create\" && col.default != null) return false;\n return true;\n}\n\nexport function schemaFromEntity(ctor: Function, opts: SchemaFromEntityOptions = {}): JsonSchema | undefined {\n const bag = readMetalDecoratorBagFromConstructor(ctor);\n if (!bag || !Array.isArray(bag.columns) || bag.columns.length === 0) return undefined;\n\n const mode = opts.mode ?? \"read\";\n const name = opts.name ?? defaultSchemaName(ctor, opts.stripEntitySuffix ?? true);\n\n const schema: JsonSchema = {\n title: name,\n type: \"object\",\n properties: {},\n additionalProperties: opts.additionalProperties ?? true\n };\n\n const required: string[] = [];\n\n for (const entry of bag.columns) {\n const prop = entry.propertyName;\n const col = entry.column;\n\n if (!shouldIncludeColumn(col, mode)) continue;\n\n const propSchema = columnTypeToSchema(col);\n\n if (!col.notNull) makeNullable(propSchema);\n\n if (isLiteralDefault(col.default)) propSchema.default = col.default;\n\n if (mode === \"read\" && col.primary) propSchema.readOnly = true;\n\n (schema.properties as any)[prop] = propSchema;\n\n if (shouldRequire(col, mode)) required.push(prop);\n }\n\n if (required.length) schema.required = required;\n\n if ((opts.includeRelations ?? \"none\") === \"inline\") {\n for (const r of bag.relations ?? []) {\n const rel = r.relation;\n if (typeof rel?.target !== \"function\") continue;\n\n let target: any;\n try {\n target = rel.target();\n } catch {\n continue;\n }\n if (typeof target !== \"function\") continue;\n\n const targetName = defaultSchemaName(target, true);\n (schema.properties as any)[r.propertyName] = { $ref: `#/components/schemas/${targetName}` };\n }\n }\n\n return schema;\n}\n","import { schemaFromEntity, type SchemaFromEntityOptions, type JsonSchema } from \"./schemaFromEntity.js\";\n\nfunction deepMerge(a: any, b: any): any {\n if (Array.isArray(a) || Array.isArray(b)) return b ?? a;\n if (a && typeof a === \"object\" && b && typeof b === \"object\") {\n const out: any = { ...a };\n for (const [k, v] of Object.entries(b)) out[k] = deepMerge(out[k], v);\n return out;\n }\n return b ?? a;\n}\n\nexport interface RegisterMetalEntitiesOptions extends SchemaFromEntityOptions {\n merge?: \"override\" | \"merge\";\n}\n\nexport function registerMetalEntities(\n openapi: any,\n entities: Function[],\n opts: RegisterMetalEntitiesOptions = {}\n) {\n openapi.components ??= {};\n openapi.components.schemas ??= {};\n\n const mergeMode = opts.merge ?? \"merge\";\n\n for (const ctor of entities) {\n const s = schemaFromEntity(ctor, opts);\n if (!s) continue;\n\n const name = s.title || ctor.name;\n const existing = openapi.components.schemas[name];\n\n if (!existing || mergeMode === \"override\") {\n openapi.components.schemas[name] = s;\n } else {\n openapi.components.schemas[name] = deepMerge(existing, s);\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,6 @@
1
+ export { ensureSymbolMetadata } from "./symbolMetadata.js";
2
+ export { readMetalDecoratorBagFromConstructor, METAL_METADATA_KEY } from "./readMetalBag.js";
3
+ export { schemaFromEntity } from "./schemaFromEntity.js";
4
+ export { registerMetalEntities } from "./registerMetalEntities.js";
5
+ export type { SchemaFromEntityOptions, EntitySchemaMode, JsonSchema } from "./schemaFromEntity.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/metal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oCAAoC,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,YAAY,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,188 @@
1
+ // src/metal/symbolMetadata.ts
2
+ function ensureSymbolMetadata() {
3
+ const s = Symbol;
4
+ if (!s.metadata) {
5
+ s.metadata = /* @__PURE__ */ Symbol("Symbol.metadata");
6
+ }
7
+ return s.metadata;
8
+ }
9
+
10
+ // src/metal/readMetalBag.ts
11
+ var METAL_METADATA_KEY = "metal-orm:decorators";
12
+ function readMetalDecoratorBagFromConstructor(ctor) {
13
+ const metadataSymbol = ensureSymbolMetadata();
14
+ const metadata = Reflect.get(ctor, metadataSymbol);
15
+ return metadata?.[METAL_METADATA_KEY];
16
+ }
17
+
18
+ // src/metal/schemaFromEntity.ts
19
+ function defaultSchemaName(ctor, strip) {
20
+ const raw = ctor.name || "AnonymousEntity";
21
+ return strip ? raw.replace(/Entity$/i, "") || raw : raw;
22
+ }
23
+ function columnTypeToSchema(col) {
24
+ const t = String(col.type).toLowerCase();
25
+ const s = {};
26
+ if (["varchar", "text", "string", "char", "citext"].includes(t)) {
27
+ s.type = "string";
28
+ const a0 = Array.isArray(col.args) ? col.args[0] : void 0;
29
+ if (typeof a0 === "number" && Number.isFinite(a0) && a0 > 0) s.maxLength = a0;
30
+ if (typeof col.comment === "string") s.description = col.comment;
31
+ return s;
32
+ }
33
+ if (["uuid"].includes(t)) {
34
+ s.type = "string";
35
+ s.format = "uuid";
36
+ if (typeof col.comment === "string") s.description = col.comment;
37
+ return s;
38
+ }
39
+ if (["timestamp", "timestamptz", "datetime"].includes(t)) {
40
+ s.type = "string";
41
+ s.format = "date-time";
42
+ if (typeof col.comment === "string") s.description = col.comment;
43
+ return s;
44
+ }
45
+ if (["date"].includes(t)) {
46
+ s.type = "string";
47
+ s.format = "date";
48
+ if (typeof col.comment === "string") s.description = col.comment;
49
+ return s;
50
+ }
51
+ if (["bool", "boolean"].includes(t)) {
52
+ s.type = "boolean";
53
+ if (typeof col.comment === "string") s.description = col.comment;
54
+ return s;
55
+ }
56
+ if (["int", "int4", "integer", "smallint", "int2", "serial", "bigserial"].includes(t)) {
57
+ s.type = "integer";
58
+ if (typeof col.comment === "string") s.description = col.comment;
59
+ return s;
60
+ }
61
+ if (["bigint", "int8"].includes(t)) {
62
+ s.type = "string";
63
+ s.format = "int64";
64
+ s.pattern = "^-?\\d+$";
65
+ if (typeof col.comment === "string") s.description = col.comment;
66
+ return s;
67
+ }
68
+ if (["float", "float4", "float8", "double", "decimal", "numeric", "real"].includes(t)) {
69
+ s.type = "number";
70
+ if (typeof col.comment === "string") s.description = col.comment;
71
+ return s;
72
+ }
73
+ if (["json", "jsonb"].includes(t)) {
74
+ s.type = ["object", "array", "string", "number", "boolean", "null"];
75
+ if (typeof col.comment === "string") s.description = col.comment;
76
+ return s;
77
+ }
78
+ s.type = "string";
79
+ if (typeof col.comment === "string") s.description = col.comment;
80
+ return s;
81
+ }
82
+ function isLiteralDefault(v) {
83
+ return v === null || ["string", "number", "boolean"].includes(typeof v);
84
+ }
85
+ function makeNullable(schema) {
86
+ if (schema.type === "null") return schema;
87
+ if (Array.isArray(schema.type)) {
88
+ if (!schema.type.includes("null")) schema.type = [...schema.type, "null"];
89
+ return schema;
90
+ }
91
+ if (typeof schema.type === "string") {
92
+ schema.type = [schema.type, "null"];
93
+ } else {
94
+ schema.type = ["null"];
95
+ }
96
+ return schema;
97
+ }
98
+ function isGenerated(col) {
99
+ return !!col.primary || !!col.autoIncrement || col.generated != null;
100
+ }
101
+ function shouldIncludeColumn(col, mode) {
102
+ if (mode === "read") return true;
103
+ if (mode === "create") return !isGenerated(col);
104
+ if (mode === "update") return true;
105
+ return true;
106
+ }
107
+ function shouldRequire(col, mode) {
108
+ if (mode === "update") return false;
109
+ if (!col.notNull) return false;
110
+ if (mode === "create" && col.default != null) return false;
111
+ return true;
112
+ }
113
+ function schemaFromEntity(ctor, opts = {}) {
114
+ const bag = readMetalDecoratorBagFromConstructor(ctor);
115
+ if (!bag || !Array.isArray(bag.columns) || bag.columns.length === 0) return void 0;
116
+ const mode = opts.mode ?? "read";
117
+ const name = opts.name ?? defaultSchemaName(ctor, opts.stripEntitySuffix ?? true);
118
+ const schema = {
119
+ title: name,
120
+ type: "object",
121
+ properties: {},
122
+ additionalProperties: opts.additionalProperties ?? true
123
+ };
124
+ const required = [];
125
+ for (const entry of bag.columns) {
126
+ const prop = entry.propertyName;
127
+ const col = entry.column;
128
+ if (!shouldIncludeColumn(col, mode)) continue;
129
+ const propSchema = columnTypeToSchema(col);
130
+ if (!col.notNull) makeNullable(propSchema);
131
+ if (isLiteralDefault(col.default)) propSchema.default = col.default;
132
+ if (mode === "read" && col.primary) propSchema.readOnly = true;
133
+ schema.properties[prop] = propSchema;
134
+ if (shouldRequire(col, mode)) required.push(prop);
135
+ }
136
+ if (required.length) schema.required = required;
137
+ if ((opts.includeRelations ?? "none") === "inline") {
138
+ for (const r of bag.relations ?? []) {
139
+ const rel = r.relation;
140
+ if (typeof rel?.target !== "function") continue;
141
+ let target;
142
+ try {
143
+ target = rel.target();
144
+ } catch {
145
+ continue;
146
+ }
147
+ if (typeof target !== "function") continue;
148
+ const targetName = defaultSchemaName(target, true);
149
+ schema.properties[r.propertyName] = { $ref: `#/components/schemas/${targetName}` };
150
+ }
151
+ }
152
+ return schema;
153
+ }
154
+
155
+ // src/metal/registerMetalEntities.ts
156
+ function deepMerge(a, b) {
157
+ if (Array.isArray(a) || Array.isArray(b)) return b ?? a;
158
+ if (a && typeof a === "object" && b && typeof b === "object") {
159
+ const out = { ...a };
160
+ for (const [k, v] of Object.entries(b)) out[k] = deepMerge(out[k], v);
161
+ return out;
162
+ }
163
+ return b ?? a;
164
+ }
165
+ function registerMetalEntities(openapi, entities, opts = {}) {
166
+ openapi.components ??= {};
167
+ openapi.components.schemas ??= {};
168
+ const mergeMode = opts.merge ?? "merge";
169
+ for (const ctor of entities) {
170
+ const s = schemaFromEntity(ctor, opts);
171
+ if (!s) continue;
172
+ const name = s.title || ctor.name;
173
+ const existing = openapi.components.schemas[name];
174
+ if (!existing || mergeMode === "override") {
175
+ openapi.components.schemas[name] = s;
176
+ } else {
177
+ openapi.components.schemas[name] = deepMerge(existing, s);
178
+ }
179
+ }
180
+ }
181
+ export {
182
+ METAL_METADATA_KEY,
183
+ ensureSymbolMetadata,
184
+ readMetalDecoratorBagFromConstructor,
185
+ registerMetalEntities,
186
+ schemaFromEntity
187
+ };
188
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/metal/symbolMetadata.ts","../../src/metal/readMetalBag.ts","../../src/metal/schemaFromEntity.ts","../../src/metal/registerMetalEntities.ts"],"sourcesContent":["export function ensureSymbolMetadata(): symbol {\n const s = Symbol as unknown as { metadata?: symbol };\n if (!s.metadata) {\n s.metadata = Symbol(\"Symbol.metadata\");\n }\n return s.metadata;\n}\n","import { ensureSymbolMetadata } from \"./symbolMetadata.js\";\n\nexport const METAL_METADATA_KEY = \"metal-orm:decorators\";\n\nexport type MetalColumnDef = {\n type: string;\n args?: unknown[];\n dialectTypes?: unknown;\n notNull?: boolean;\n primary?: boolean;\n tsType?: unknown;\n unique?: boolean;\n default?: unknown;\n autoIncrement?: boolean;\n generated?: unknown;\n check?: unknown;\n references?: unknown;\n comment?: string;\n};\n\nexport type MetalRelationMetadata = {\n kind: string;\n propertyKey: string;\n target?: (...args: any[]) => any;\n};\n\nexport type MetalDecoratorBag = {\n columns: Array<{ propertyName: string; column: MetalColumnDef }>;\n relations: Array<{ propertyName: string; relation: MetalRelationMetadata }>;\n};\n\nexport function readMetalDecoratorBagFromConstructor(ctor: object): MetalDecoratorBag | undefined {\n const metadataSymbol = ensureSymbolMetadata();\n const metadata = Reflect.get(ctor, metadataSymbol) as Record<PropertyKey, unknown> | undefined;\n return metadata?.[METAL_METADATA_KEY] as MetalDecoratorBag | undefined;\n}\n","import { readMetalDecoratorBagFromConstructor, type MetalColumnDef, type MetalDecoratorBag } from \"./readMetalBag.js\";\n\nexport type JsonSchema = Record<string, any>;\n\nexport type EntitySchemaMode = \"read\" | \"create\" | \"update\";\n\nexport interface SchemaFromEntityOptions {\n name?: string;\n stripEntitySuffix?: boolean;\n mode?: EntitySchemaMode;\n additionalProperties?: boolean;\n includeRelations?: \"none\" | \"inline\";\n}\n\nfunction defaultSchemaName(ctor: Function, strip: boolean) {\n const raw = ctor.name || \"AnonymousEntity\";\n return strip ? raw.replace(/Entity$/i, \"\") || raw : raw;\n}\n\nfunction columnTypeToSchema(col: MetalColumnDef): JsonSchema {\n const t = String(col.type).toLowerCase();\n const s: JsonSchema = {};\n\n if ([\"varchar\", \"text\", \"string\", \"char\", \"citext\"].includes(t)) {\n s.type = \"string\";\n const a0 = Array.isArray(col.args) ? col.args[0] : undefined;\n if (typeof a0 === \"number\" && Number.isFinite(a0) && a0 > 0) s.maxLength = a0;\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"uuid\"].includes(t)) {\n s.type = \"string\";\n s.format = \"uuid\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"timestamp\", \"timestamptz\", \"datetime\"].includes(t)) {\n s.type = \"string\";\n s.format = \"date-time\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n if ([\"date\"].includes(t)) {\n s.type = \"string\";\n s.format = \"date\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"bool\", \"boolean\"].includes(t)) {\n s.type = \"boolean\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"int\", \"int4\", \"integer\", \"smallint\", \"int2\", \"serial\", \"bigserial\"].includes(t)) {\n s.type = \"integer\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"bigint\", \"int8\"].includes(t)) {\n s.type = \"string\";\n s.format = \"int64\";\n s.pattern = \"^-?\\\\d+$\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"float\", \"float4\", \"float8\", \"double\", \"decimal\", \"numeric\", \"real\"].includes(t)) {\n s.type = \"number\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n if ([\"json\", \"jsonb\"].includes(t)) {\n s.type = [\"object\", \"array\", \"string\", \"number\", \"boolean\", \"null\"];\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n }\n\n s.type = \"string\";\n if (typeof col.comment === \"string\") s.description = col.comment;\n return s;\n}\n\nfunction isLiteralDefault(v: unknown) {\n return v === null || [\"string\", \"number\", \"boolean\"].includes(typeof v);\n}\n\nfunction makeNullable(schema: JsonSchema): JsonSchema {\n if (schema.type === \"null\") return schema;\n if (Array.isArray(schema.type)) {\n if (!schema.type.includes(\"null\")) schema.type = [...schema.type, \"null\"];\n return schema;\n }\n if (typeof schema.type === \"string\") {\n schema.type = [schema.type, \"null\"];\n } else {\n schema.type = [\"null\"];\n }\n return schema;\n}\n\nfunction isGenerated(col: MetalColumnDef) {\n return !!col.primary || !!col.autoIncrement || col.generated != null;\n}\n\nfunction shouldIncludeColumn(col: MetalColumnDef, mode: \"read\" | \"create\" | \"update\") {\n if (mode === \"read\") return true;\n if (mode === \"create\") return !isGenerated(col);\n if (mode === \"update\") return true;\n return true;\n}\n\nfunction shouldRequire(col: MetalColumnDef, mode: \"read\" | \"create\" | \"update\") {\n if (mode === \"update\") return false;\n if (!col.notNull) return false;\n if (mode === \"create\" && col.default != null) return false;\n return true;\n}\n\nexport function schemaFromEntity(ctor: Function, opts: SchemaFromEntityOptions = {}): JsonSchema | undefined {\n const bag = readMetalDecoratorBagFromConstructor(ctor);\n if (!bag || !Array.isArray(bag.columns) || bag.columns.length === 0) return undefined;\n\n const mode = opts.mode ?? \"read\";\n const name = opts.name ?? defaultSchemaName(ctor, opts.stripEntitySuffix ?? true);\n\n const schema: JsonSchema = {\n title: name,\n type: \"object\",\n properties: {},\n additionalProperties: opts.additionalProperties ?? true\n };\n\n const required: string[] = [];\n\n for (const entry of bag.columns) {\n const prop = entry.propertyName;\n const col = entry.column;\n\n if (!shouldIncludeColumn(col, mode)) continue;\n\n const propSchema = columnTypeToSchema(col);\n\n if (!col.notNull) makeNullable(propSchema);\n\n if (isLiteralDefault(col.default)) propSchema.default = col.default;\n\n if (mode === \"read\" && col.primary) propSchema.readOnly = true;\n\n (schema.properties as any)[prop] = propSchema;\n\n if (shouldRequire(col, mode)) required.push(prop);\n }\n\n if (required.length) schema.required = required;\n\n if ((opts.includeRelations ?? \"none\") === \"inline\") {\n for (const r of bag.relations ?? []) {\n const rel = r.relation;\n if (typeof rel?.target !== \"function\") continue;\n\n let target: any;\n try {\n target = rel.target();\n } catch {\n continue;\n }\n if (typeof target !== \"function\") continue;\n\n const targetName = defaultSchemaName(target, true);\n (schema.properties as any)[r.propertyName] = { $ref: `#/components/schemas/${targetName}` };\n }\n }\n\n return schema;\n}\n","import { schemaFromEntity, type SchemaFromEntityOptions, type JsonSchema } from \"./schemaFromEntity.js\";\n\nfunction deepMerge(a: any, b: any): any {\n if (Array.isArray(a) || Array.isArray(b)) return b ?? a;\n if (a && typeof a === \"object\" && b && typeof b === \"object\") {\n const out: any = { ...a };\n for (const [k, v] of Object.entries(b)) out[k] = deepMerge(out[k], v);\n return out;\n }\n return b ?? a;\n}\n\nexport interface RegisterMetalEntitiesOptions extends SchemaFromEntityOptions {\n merge?: \"override\" | \"merge\";\n}\n\nexport function registerMetalEntities(\n openapi: any,\n entities: Function[],\n opts: RegisterMetalEntitiesOptions = {}\n) {\n openapi.components ??= {};\n openapi.components.schemas ??= {};\n\n const mergeMode = opts.merge ?? \"merge\";\n\n for (const ctor of entities) {\n const s = schemaFromEntity(ctor, opts);\n if (!s) continue;\n\n const name = s.title || ctor.name;\n const existing = openapi.components.schemas[name];\n\n if (!existing || mergeMode === \"override\") {\n openapi.components.schemas[name] = s;\n } else {\n openapi.components.schemas[name] = deepMerge(existing, s);\n }\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,33 @@
1
+ export declare const METAL_METADATA_KEY = "metal-orm:decorators";
2
+ export type MetalColumnDef = {
3
+ type: string;
4
+ args?: unknown[];
5
+ dialectTypes?: unknown;
6
+ notNull?: boolean;
7
+ primary?: boolean;
8
+ tsType?: unknown;
9
+ unique?: boolean;
10
+ default?: unknown;
11
+ autoIncrement?: boolean;
12
+ generated?: unknown;
13
+ check?: unknown;
14
+ references?: unknown;
15
+ comment?: string;
16
+ };
17
+ export type MetalRelationMetadata = {
18
+ kind: string;
19
+ propertyKey: string;
20
+ target?: (...args: any[]) => any;
21
+ };
22
+ export type MetalDecoratorBag = {
23
+ columns: Array<{
24
+ propertyName: string;
25
+ column: MetalColumnDef;
26
+ }>;
27
+ relations: Array<{
28
+ propertyName: string;
29
+ relation: MetalRelationMetadata;
30
+ }>;
31
+ };
32
+ export declare function readMetalDecoratorBagFromConstructor(ctor: object): MetalDecoratorBag | undefined;
33
+ //# sourceMappingURL=readMetalBag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readMetalBag.d.ts","sourceRoot":"","sources":["../../src/metal/readMetalBag.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,cAAc,CAAA;KAAE,CAAC,CAAC;IACjE,SAAS,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,qBAAqB,CAAA;KAAE,CAAC,CAAC;CAC7E,CAAC;AAEF,wBAAgB,oCAAoC,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAIhG"}
@@ -0,0 +1,6 @@
1
+ import { type SchemaFromEntityOptions } from "./schemaFromEntity.js";
2
+ export interface RegisterMetalEntitiesOptions extends SchemaFromEntityOptions {
3
+ merge?: "override" | "merge";
4
+ }
5
+ export declare function registerMetalEntities(openapi: any, entities: Function[], opts?: RegisterMetalEntitiesOptions): void;
6
+ //# sourceMappingURL=registerMetalEntities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registerMetalEntities.d.ts","sourceRoot":"","sources":["../../src/metal/registerMetalEntities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,uBAAuB,EAAmB,MAAM,uBAAuB,CAAC;AAYxG,MAAM,WAAW,4BAA6B,SAAQ,uBAAuB;IAC3E,KAAK,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;CAC9B;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,GAAG,EACZ,QAAQ,EAAE,QAAQ,EAAE,EACpB,IAAI,GAAE,4BAAiC,QAoBxC"}
@@ -0,0 +1,11 @@
1
+ export type JsonSchema = Record<string, any>;
2
+ export type EntitySchemaMode = "read" | "create" | "update";
3
+ export interface SchemaFromEntityOptions {
4
+ name?: string;
5
+ stripEntitySuffix?: boolean;
6
+ mode?: EntitySchemaMode;
7
+ additionalProperties?: boolean;
8
+ includeRelations?: "none" | "inline";
9
+ }
10
+ export declare function schemaFromEntity(ctor: Function, opts?: SchemaFromEntityOptions): JsonSchema | undefined;
11
+ //# sourceMappingURL=schemaFromEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaFromEntity.d.ts","sourceRoot":"","sources":["../../src/metal/schemaFromEntity.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE7C,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5D,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CACtC;AAgHD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAE,uBAA4B,GAAG,UAAU,GAAG,SAAS,CAwD3G"}
@@ -0,0 +1,2 @@
1
+ export declare function ensureSymbolMetadata(): symbol;
2
+ //# sourceMappingURL=symbolMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbolMetadata.d.ts","sourceRoot":"","sources":["../../src/metal/symbolMetadata.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,IAAI,MAAM,CAM7C"}
@@ -0,0 +1,34 @@
1
+ export interface AuthResult {
2
+ principal: any;
3
+ scopes?: string[];
4
+ }
5
+ export interface AuthSchemeRuntime {
6
+ name: string;
7
+ authenticate(req: any): Promise<AuthResult | null>;
8
+ challenge(res: any): void;
9
+ authorize?(auth: AuthResult, requiredScopes: string[]): boolean;
10
+ }
11
+ export declare function createBearerJwtRuntime(options: {
12
+ getToken: (req: any) => string | undefined;
13
+ verify?: (token: string) => Promise<any>;
14
+ getScopes?: (payload: any) => string[];
15
+ }): {
16
+ name: string;
17
+ authenticate(req: any): Promise<{
18
+ principal: any;
19
+ scopes: string[];
20
+ } | null>;
21
+ challenge(res: any): void;
22
+ authorize(auth: AuthResult, requiredScopes: string[]): boolean;
23
+ };
24
+ export declare function createApiKeyHeaderRuntime(options: {
25
+ headerName: string;
26
+ validate: (key: string) => Promise<any>;
27
+ }): {
28
+ name: string;
29
+ authenticate(req: any): Promise<{
30
+ principal: any;
31
+ } | null>;
32
+ challenge(res: any): void;
33
+ };
34
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/runtime/auth/runtime.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,GAAG,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACnD,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;CACjE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAC;IAC3C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC;CACxC;;sBAK2B,GAAG;;;;mBAYZ,GAAG;oBAIF,UAAU,kBAAkB,MAAM,EAAE;EAMvD;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACzC;;sBAK2B,GAAG;;;mBAWZ,GAAG;EAIrB"}
@@ -0,0 +1,3 @@
1
+ import type { AdornBucket } from "./types.js";
2
+ export declare function getBucket(metadata: DecoratorMetadata): AdornBucket;
3
+ //# sourceMappingURL=bucket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bucket.d.ts","sourceRoot":"","sources":["../../../src/runtime/metadata/bucket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,WAAW,CAalE"}
@@ -0,0 +1,2 @@
1
+ export declare const ADORN_META: unique symbol;
2
+ //# sourceMappingURL=key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key.d.ts","sourceRoot":"","sources":["../../../src/runtime/metadata/key.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,eAA+B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AdornBucket } from "./types.js";
2
+ export declare function readAdornBucket(ctor: Function): AdornBucket | null;
3
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../../src/runtime/metadata/read.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,WAAW,GAAG,IAAI,CAalE"}
@@ -0,0 +1,21 @@
1
+ export type HttpMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "OPTIONS" | "HEAD";
2
+ export interface RouteOperation {
3
+ httpMethod: HttpMethod;
4
+ path: string;
5
+ methodName: string;
6
+ operationId?: string;
7
+ use?: Array<string | ExpressMw>;
8
+ auth?: AuthMeta | "public";
9
+ }
10
+ export interface AuthMeta {
11
+ scheme: string;
12
+ scopes?: string[];
13
+ optional?: boolean;
14
+ }
15
+ export type ExpressMw = (req: any, res: any, next: (err?: any) => void) => any;
16
+ export interface AdornBucket {
17
+ basePath?: string;
18
+ controllerUse?: Array<string | ExpressMw>;
19
+ ops: RouteOperation[];
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/runtime/metadata/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,CAAC;AAEX,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC;AAE/E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1C,GAAG,EAAE,cAAc,EAAE,CAAC;CACvB"}