@buenojs/bueno 0.8.6 → 0.8.8

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 (398) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/README.md +132 -15
  3. package/dist/cache/index.d.ts +187 -0
  4. package/dist/cache/index.d.ts.map +1 -0
  5. package/dist/cli/bin.d.ts +8 -0
  6. package/dist/cli/bin.d.ts.map +1 -0
  7. package/dist/cli/bin.js +483 -155
  8. package/dist/cli/commands/add-frontend.d.ts +7 -0
  9. package/dist/cli/commands/add-frontend.d.ts.map +1 -0
  10. package/dist/cli/commands/build.d.ts +7 -0
  11. package/dist/cli/commands/build.d.ts.map +1 -0
  12. package/dist/cli/commands/dev.d.ts +7 -0
  13. package/dist/cli/commands/dev.d.ts.map +1 -0
  14. package/dist/cli/commands/generate.d.ts +7 -0
  15. package/dist/cli/commands/generate.d.ts.map +1 -0
  16. package/dist/cli/commands/help.d.ts +7 -0
  17. package/dist/cli/commands/help.d.ts.map +1 -0
  18. package/dist/cli/commands/index.d.ts +59 -0
  19. package/dist/cli/commands/index.d.ts.map +1 -0
  20. package/dist/cli/commands/migration.d.ts +7 -0
  21. package/dist/cli/commands/migration.d.ts.map +1 -0
  22. package/dist/cli/commands/new.d.ts +7 -0
  23. package/dist/cli/commands/new.d.ts.map +1 -0
  24. package/dist/cli/commands/start.d.ts +7 -0
  25. package/dist/cli/commands/start.d.ts.map +1 -0
  26. package/dist/cli/core/args.d.ts +61 -0
  27. package/dist/cli/core/args.d.ts.map +1 -0
  28. package/dist/cli/core/console.d.ts +135 -0
  29. package/dist/cli/core/console.d.ts.map +1 -0
  30. package/dist/cli/core/index.d.ts +10 -0
  31. package/dist/cli/core/index.d.ts.map +1 -0
  32. package/dist/cli/core/prompt.d.ts +63 -0
  33. package/dist/cli/core/prompt.d.ts.map +1 -0
  34. package/dist/cli/core/spinner.d.ts +111 -0
  35. package/dist/cli/core/spinner.d.ts.map +1 -0
  36. package/dist/cli/index.d.ts +47 -0
  37. package/dist/cli/index.d.ts.map +1 -0
  38. package/dist/cli/templates/database/index.d.ts +24 -0
  39. package/dist/cli/templates/database/index.d.ts.map +1 -0
  40. package/dist/cli/templates/database/mysql.d.ts +6 -0
  41. package/dist/cli/templates/database/mysql.d.ts.map +1 -0
  42. package/dist/cli/templates/database/none.d.ts +8 -0
  43. package/dist/cli/templates/database/none.d.ts.map +1 -0
  44. package/dist/cli/templates/database/postgresql.d.ts +6 -0
  45. package/dist/cli/templates/database/postgresql.d.ts.map +1 -0
  46. package/dist/cli/templates/database/sqlite.d.ts +6 -0
  47. package/dist/cli/templates/database/sqlite.d.ts.map +1 -0
  48. package/dist/cli/templates/deploy.d.ts +41 -0
  49. package/dist/cli/templates/deploy.d.ts.map +1 -0
  50. package/dist/cli/templates/docker.d.ts +30 -0
  51. package/dist/cli/templates/docker.d.ts.map +1 -0
  52. package/dist/cli/templates/frontend/index.d.ts +25 -0
  53. package/dist/cli/templates/frontend/index.d.ts.map +1 -0
  54. package/dist/cli/templates/frontend/none.d.ts +8 -0
  55. package/dist/cli/templates/frontend/none.d.ts.map +1 -0
  56. package/dist/cli/templates/frontend/react.d.ts +6 -0
  57. package/dist/cli/templates/frontend/react.d.ts.map +1 -0
  58. package/dist/cli/templates/frontend/solid.d.ts +6 -0
  59. package/dist/cli/templates/frontend/solid.d.ts.map +1 -0
  60. package/dist/cli/templates/frontend/svelte.d.ts +6 -0
  61. package/dist/cli/templates/frontend/svelte.d.ts.map +1 -0
  62. package/dist/cli/templates/frontend/vue.d.ts +6 -0
  63. package/dist/cli/templates/frontend/vue.d.ts.map +1 -0
  64. package/dist/cli/templates/generators/index.d.ts +29 -0
  65. package/dist/cli/templates/generators/index.d.ts.map +1 -0
  66. package/dist/cli/templates/generators/types.d.ts +32 -0
  67. package/dist/cli/templates/generators/types.d.ts.map +1 -0
  68. package/dist/cli/templates/index.d.ts +12 -0
  69. package/dist/cli/templates/index.d.ts.map +1 -0
  70. package/dist/cli/templates/project/api.d.ts +6 -0
  71. package/dist/cli/templates/project/api.d.ts.map +1 -0
  72. package/dist/cli/templates/project/default.d.ts +6 -0
  73. package/dist/cli/templates/project/default.d.ts.map +1 -0
  74. package/dist/cli/templates/project/fullstack.d.ts +14 -0
  75. package/dist/cli/templates/project/fullstack.d.ts.map +1 -0
  76. package/dist/cli/templates/project/index.d.ts +26 -0
  77. package/dist/cli/templates/project/index.d.ts.map +1 -0
  78. package/dist/cli/templates/project/minimal.d.ts +6 -0
  79. package/dist/cli/templates/project/minimal.d.ts.map +1 -0
  80. package/dist/cli/templates/project/types.d.ts +80 -0
  81. package/dist/cli/templates/project/types.d.ts.map +1 -0
  82. package/dist/cli/templates/project/website.d.ts +8 -0
  83. package/dist/cli/templates/project/website.d.ts.map +1 -0
  84. package/dist/cli/utils/fs.d.ts +137 -0
  85. package/dist/cli/utils/fs.d.ts.map +1 -0
  86. package/dist/cli/utils/index.d.ts +9 -0
  87. package/dist/cli/utils/index.d.ts.map +1 -0
  88. package/dist/cli/utils/strings.d.ts +86 -0
  89. package/dist/cli/utils/strings.d.ts.map +1 -0
  90. package/dist/cli/utils/version.d.ts +15 -0
  91. package/dist/cli/utils/version.d.ts.map +1 -0
  92. package/dist/config/env-validation.d.ts +49 -0
  93. package/dist/config/env-validation.d.ts.map +1 -0
  94. package/dist/config/env.d.ts +167 -0
  95. package/dist/config/env.d.ts.map +1 -0
  96. package/dist/config/index.d.ts +168 -0
  97. package/dist/config/index.d.ts.map +1 -0
  98. package/dist/config/loader.d.ts +81 -0
  99. package/dist/config/loader.d.ts.map +1 -0
  100. package/dist/config/merge.d.ts +66 -0
  101. package/dist/config/merge.d.ts.map +1 -0
  102. package/dist/config/types.d.ts +322 -0
  103. package/dist/config/types.d.ts.map +1 -0
  104. package/dist/config/validation.d.ts +100 -0
  105. package/dist/config/validation.d.ts.map +1 -0
  106. package/dist/container/forward-ref.d.ts +116 -0
  107. package/dist/container/forward-ref.d.ts.map +1 -0
  108. package/dist/container/index.d.ts +95 -0
  109. package/dist/container/index.d.ts.map +1 -0
  110. package/dist/context/index.d.ts +143 -0
  111. package/dist/context/index.d.ts.map +1 -0
  112. package/dist/database/index.d.ts +219 -0
  113. package/dist/database/index.d.ts.map +1 -0
  114. package/dist/database/migrations/index.d.ts +146 -0
  115. package/dist/database/migrations/index.d.ts.map +1 -0
  116. package/dist/database/orm/builder.d.ts +122 -0
  117. package/dist/database/orm/builder.d.ts.map +1 -0
  118. package/dist/database/orm/casts/index.d.ts +16 -0
  119. package/dist/database/orm/casts/index.d.ts.map +1 -0
  120. package/dist/database/orm/casts/types.d.ts +16 -0
  121. package/dist/database/orm/casts/types.d.ts.map +1 -0
  122. package/dist/database/orm/compiler.d.ts +90 -0
  123. package/dist/database/orm/compiler.d.ts.map +1 -0
  124. package/dist/database/orm/hooks/index.d.ts +53 -0
  125. package/dist/database/orm/hooks/index.d.ts.map +1 -0
  126. package/dist/database/orm/index.d.ts +21 -0
  127. package/dist/database/orm/index.d.ts.map +1 -0
  128. package/dist/database/orm/model-registry.d.ts +33 -0
  129. package/dist/database/orm/model-registry.d.ts.map +1 -0
  130. package/dist/database/orm/model.d.ts +245 -0
  131. package/dist/database/orm/model.d.ts.map +1 -0
  132. package/dist/database/orm/relationships/base.d.ts +69 -0
  133. package/dist/database/orm/relationships/base.d.ts.map +1 -0
  134. package/dist/database/orm/relationships/belongs-to-many.d.ts +47 -0
  135. package/dist/database/orm/relationships/belongs-to-many.d.ts.map +1 -0
  136. package/dist/database/orm/relationships/belongs-to.d.ts +17 -0
  137. package/dist/database/orm/relationships/belongs-to.d.ts.map +1 -0
  138. package/dist/database/orm/relationships/has-many.d.ts +14 -0
  139. package/dist/database/orm/relationships/has-many.d.ts.map +1 -0
  140. package/dist/database/orm/relationships/has-one.d.ts +14 -0
  141. package/dist/database/orm/relationships/has-one.d.ts.map +1 -0
  142. package/dist/database/orm/relationships/index.d.ts +10 -0
  143. package/dist/database/orm/relationships/index.d.ts.map +1 -0
  144. package/dist/database/orm/scopes/index.d.ts +36 -0
  145. package/dist/database/orm/scopes/index.d.ts.map +1 -0
  146. package/dist/database/schema/index.d.ts +155 -0
  147. package/dist/database/schema/index.d.ts.map +1 -0
  148. package/dist/events/__tests__/event-system.test.d.ts +2 -0
  149. package/dist/events/__tests__/event-system.test.d.ts.map +1 -0
  150. package/dist/events/config.d.ts +16 -0
  151. package/dist/events/config.d.ts.map +1 -0
  152. package/dist/events/example-usage.d.ts +12 -0
  153. package/dist/events/example-usage.d.ts.map +1 -0
  154. package/dist/events/index.d.ts +27 -0
  155. package/dist/events/index.d.ts.map +1 -0
  156. package/dist/events/manager.d.ts +33 -0
  157. package/dist/events/manager.d.ts.map +1 -0
  158. package/dist/events/registry.d.ts +31 -0
  159. package/dist/events/registry.d.ts.map +1 -0
  160. package/dist/events/types.d.ts +105 -0
  161. package/dist/events/types.d.ts.map +1 -0
  162. package/dist/frontend/api-routes.d.ts +189 -0
  163. package/dist/frontend/api-routes.d.ts.map +1 -0
  164. package/dist/frontend/bundler.d.ts +99 -0
  165. package/dist/frontend/bundler.d.ts.map +1 -0
  166. package/dist/frontend/console-client.d.ts +11 -0
  167. package/dist/frontend/console-client.d.ts.map +1 -0
  168. package/dist/frontend/console-stream.d.ts +138 -0
  169. package/dist/frontend/console-stream.d.ts.map +1 -0
  170. package/dist/frontend/dev-server.d.ts +174 -0
  171. package/dist/frontend/dev-server.d.ts.map +1 -0
  172. package/dist/frontend/file-router.d.ts +170 -0
  173. package/dist/frontend/file-router.d.ts.map +1 -0
  174. package/dist/frontend/frameworks/index.d.ts +41 -0
  175. package/dist/frontend/frameworks/index.d.ts.map +1 -0
  176. package/dist/frontend/frameworks/react.d.ts +32 -0
  177. package/dist/frontend/frameworks/react.d.ts.map +1 -0
  178. package/dist/frontend/frameworks/solid.d.ts +42 -0
  179. package/dist/frontend/frameworks/solid.d.ts.map +1 -0
  180. package/dist/frontend/frameworks/svelte.d.ts +57 -0
  181. package/dist/frontend/frameworks/svelte.d.ts.map +1 -0
  182. package/dist/frontend/frameworks/vue.d.ts +36 -0
  183. package/dist/frontend/frameworks/vue.d.ts.map +1 -0
  184. package/dist/frontend/hmr-client.d.ts +22 -0
  185. package/dist/frontend/hmr-client.d.ts.map +1 -0
  186. package/dist/frontend/hmr.d.ts +185 -0
  187. package/dist/frontend/hmr.d.ts.map +1 -0
  188. package/dist/frontend/index.d.ts +34 -0
  189. package/dist/frontend/index.d.ts.map +1 -0
  190. package/dist/frontend/islands.d.ts +135 -0
  191. package/dist/frontend/islands.d.ts.map +1 -0
  192. package/dist/frontend/isr.d.ts +143 -0
  193. package/dist/frontend/isr.d.ts.map +1 -0
  194. package/dist/frontend/layout.d.ts +140 -0
  195. package/dist/frontend/layout.d.ts.map +1 -0
  196. package/dist/frontend/ssr/react.d.ts +118 -0
  197. package/dist/frontend/ssr/react.d.ts.map +1 -0
  198. package/dist/frontend/ssr/solid.d.ts +141 -0
  199. package/dist/frontend/ssr/solid.d.ts.map +1 -0
  200. package/dist/frontend/ssr/svelte.d.ts +158 -0
  201. package/dist/frontend/ssr/svelte.d.ts.map +1 -0
  202. package/dist/frontend/ssr/vue.d.ts +161 -0
  203. package/dist/frontend/ssr/vue.d.ts.map +1 -0
  204. package/dist/frontend/ssr.d.ts +147 -0
  205. package/dist/frontend/ssr.d.ts.map +1 -0
  206. package/dist/frontend/types.d.ts +1902 -0
  207. package/dist/frontend/types.d.ts.map +1 -0
  208. package/dist/graphql/built-in-engine.d.ts +36 -0
  209. package/dist/graphql/built-in-engine.d.ts.map +1 -0
  210. package/dist/graphql/context-builder.d.ts +44 -0
  211. package/dist/graphql/context-builder.d.ts.map +1 -0
  212. package/dist/graphql/decorators.d.ts +162 -0
  213. package/dist/graphql/decorators.d.ts.map +1 -0
  214. package/dist/graphql/execution-pipeline.d.ts +67 -0
  215. package/dist/graphql/execution-pipeline.d.ts.map +1 -0
  216. package/dist/graphql/graphql-module.d.ts +70 -0
  217. package/dist/graphql/graphql-module.d.ts.map +1 -0
  218. package/dist/graphql/index.d.ts +48 -0
  219. package/dist/graphql/index.d.ts.map +1 -0
  220. package/dist/graphql/metadata.d.ts +37 -0
  221. package/dist/graphql/metadata.d.ts.map +1 -0
  222. package/dist/graphql/schema-builder.d.ts +34 -0
  223. package/dist/graphql/schema-builder.d.ts.map +1 -0
  224. package/dist/graphql/subscription-handler.d.ts +47 -0
  225. package/dist/graphql/subscription-handler.d.ts.map +1 -0
  226. package/dist/graphql/types.d.ts +252 -0
  227. package/dist/graphql/types.d.ts.map +1 -0
  228. package/dist/health/index.d.ts +176 -0
  229. package/dist/health/index.d.ts.map +1 -0
  230. package/dist/i18n/engine.d.ts +105 -0
  231. package/dist/i18n/engine.d.ts.map +1 -0
  232. package/dist/i18n/index.d.ts +13 -0
  233. package/dist/i18n/index.d.ts.map +1 -0
  234. package/dist/i18n/loader.d.ts +79 -0
  235. package/dist/i18n/loader.d.ts.map +1 -0
  236. package/dist/i18n/middleware.d.ts +96 -0
  237. package/dist/i18n/middleware.d.ts.map +1 -0
  238. package/dist/i18n/negotiator.d.ts +84 -0
  239. package/dist/i18n/negotiator.d.ts.map +1 -0
  240. package/dist/i18n/types.d.ts +129 -0
  241. package/dist/i18n/types.d.ts.map +1 -0
  242. package/dist/index.d.ts +48 -0
  243. package/dist/index.d.ts.map +1 -0
  244. package/dist/jobs/drivers/memory.d.ts +38 -0
  245. package/dist/jobs/drivers/memory.d.ts.map +1 -0
  246. package/dist/jobs/drivers/redis.d.ts +34 -0
  247. package/dist/jobs/drivers/redis.d.ts.map +1 -0
  248. package/dist/jobs/index.d.ts +12 -0
  249. package/dist/jobs/index.d.ts.map +1 -0
  250. package/dist/jobs/queue.d.ts +93 -0
  251. package/dist/jobs/queue.d.ts.map +1 -0
  252. package/dist/jobs/types.d.ts +193 -0
  253. package/dist/jobs/types.d.ts.map +1 -0
  254. package/dist/jobs/worker.d.ts +91 -0
  255. package/dist/jobs/worker.d.ts.map +1 -0
  256. package/dist/lock/index.d.ts +141 -0
  257. package/dist/lock/index.d.ts.map +1 -0
  258. package/dist/logger/index.d.ts +156 -0
  259. package/dist/logger/index.d.ts.map +1 -0
  260. package/dist/logger/transports/index.d.ts +371 -0
  261. package/dist/logger/transports/index.d.ts.map +1 -0
  262. package/dist/metrics/index.d.ts +163 -0
  263. package/dist/metrics/index.d.ts.map +1 -0
  264. package/dist/middleware/built-in.d.ts +50 -0
  265. package/dist/middleware/built-in.d.ts.map +1 -0
  266. package/dist/middleware/index.d.ts +40 -0
  267. package/dist/middleware/index.d.ts.map +1 -0
  268. package/dist/migrations/index.d.ts +10 -0
  269. package/dist/migrations/index.d.ts.map +1 -0
  270. package/dist/modules/filters.d.ts +150 -0
  271. package/dist/modules/filters.d.ts.map +1 -0
  272. package/dist/modules/guards.d.ts +188 -0
  273. package/dist/modules/guards.d.ts.map +1 -0
  274. package/dist/modules/index.d.ts +266 -0
  275. package/dist/modules/index.d.ts.map +1 -0
  276. package/dist/modules/interceptors.d.ts +242 -0
  277. package/dist/modules/interceptors.d.ts.map +1 -0
  278. package/dist/modules/lazy.d.ts +187 -0
  279. package/dist/modules/lazy.d.ts.map +1 -0
  280. package/dist/modules/lifecycle.d.ts +221 -0
  281. package/dist/modules/lifecycle.d.ts.map +1 -0
  282. package/dist/modules/metadata.d.ts +32 -0
  283. package/dist/modules/metadata.d.ts.map +1 -0
  284. package/dist/modules/pipes.d.ts +287 -0
  285. package/dist/modules/pipes.d.ts.map +1 -0
  286. package/dist/notification/channels/base.d.ts +32 -0
  287. package/dist/notification/channels/base.d.ts.map +1 -0
  288. package/dist/notification/channels/email.d.ts +37 -0
  289. package/dist/notification/channels/email.d.ts.map +1 -0
  290. package/dist/notification/channels/push.d.ts +37 -0
  291. package/dist/notification/channels/push.d.ts.map +1 -0
  292. package/dist/notification/channels/sms.d.ts +37 -0
  293. package/dist/notification/channels/sms.d.ts.map +1 -0
  294. package/dist/notification/channels/whatsapp.d.ts +37 -0
  295. package/dist/notification/channels/whatsapp.d.ts.map +1 -0
  296. package/dist/notification/index.d.ts +15 -0
  297. package/dist/notification/index.d.ts.map +1 -0
  298. package/dist/notification/service.d.ts +100 -0
  299. package/dist/notification/service.d.ts.map +1 -0
  300. package/dist/notification/types.d.ts +253 -0
  301. package/dist/notification/types.d.ts.map +1 -0
  302. package/dist/observability/__tests__/observability.test.d.ts +2 -0
  303. package/dist/observability/__tests__/observability.test.d.ts.map +1 -0
  304. package/dist/observability/breadcrumbs.d.ts +48 -0
  305. package/dist/observability/breadcrumbs.d.ts.map +1 -0
  306. package/dist/observability/index.d.ts +95 -0
  307. package/dist/observability/index.d.ts.map +1 -0
  308. package/dist/observability/interceptor.d.ts +19 -0
  309. package/dist/observability/interceptor.d.ts.map +1 -0
  310. package/dist/observability/service.d.ts +101 -0
  311. package/dist/observability/service.d.ts.map +1 -0
  312. package/dist/observability/trace.d.ts +21 -0
  313. package/dist/observability/trace.d.ts.map +1 -0
  314. package/dist/observability/types.d.ts +172 -0
  315. package/dist/observability/types.d.ts.map +1 -0
  316. package/dist/openapi/__tests__/decorators.test.d.ts +2 -0
  317. package/dist/openapi/__tests__/decorators.test.d.ts.map +1 -0
  318. package/dist/openapi/__tests__/document-builder.test.d.ts +2 -0
  319. package/dist/openapi/__tests__/document-builder.test.d.ts.map +1 -0
  320. package/dist/openapi/__tests__/route-scanner.test.d.ts +2 -0
  321. package/dist/openapi/__tests__/route-scanner.test.d.ts.map +1 -0
  322. package/dist/openapi/__tests__/schema-generator.test.d.ts +2 -0
  323. package/dist/openapi/__tests__/schema-generator.test.d.ts.map +1 -0
  324. package/dist/openapi/decorators.d.ts +173 -0
  325. package/dist/openapi/decorators.d.ts.map +1 -0
  326. package/dist/openapi/document-builder.d.ts +82 -0
  327. package/dist/openapi/document-builder.d.ts.map +1 -0
  328. package/dist/openapi/index.d.ts +48 -0
  329. package/dist/openapi/index.d.ts.map +1 -0
  330. package/dist/openapi/metadata.d.ts +36 -0
  331. package/dist/openapi/metadata.d.ts.map +1 -0
  332. package/dist/openapi/route-scanner.d.ts +34 -0
  333. package/dist/openapi/route-scanner.d.ts.map +1 -0
  334. package/dist/openapi/schema-generator.d.ts +53 -0
  335. package/dist/openapi/schema-generator.d.ts.map +1 -0
  336. package/dist/openapi/swagger-module.d.ts +57 -0
  337. package/dist/openapi/swagger-module.d.ts.map +1 -0
  338. package/dist/openapi/types.d.ts +344 -0
  339. package/dist/openapi/types.d.ts.map +1 -0
  340. package/dist/orm/index.d.ts +10 -0
  341. package/dist/orm/index.d.ts.map +1 -0
  342. package/dist/router/index.d.ts +73 -0
  343. package/dist/router/index.d.ts.map +1 -0
  344. package/dist/router/linear.d.ts +54 -0
  345. package/dist/router/linear.d.ts.map +1 -0
  346. package/dist/router/regex.d.ts +49 -0
  347. package/dist/router/regex.d.ts.map +1 -0
  348. package/dist/router/tree.d.ts +112 -0
  349. package/dist/router/tree.d.ts.map +1 -0
  350. package/dist/rpc/index.d.ts +321 -0
  351. package/dist/rpc/index.d.ts.map +1 -0
  352. package/dist/schema/index.d.ts +10 -0
  353. package/dist/schema/index.d.ts.map +1 -0
  354. package/dist/security/index.d.ts +126 -0
  355. package/dist/security/index.d.ts.map +1 -0
  356. package/dist/ssg/index.d.ts +73 -0
  357. package/dist/ssg/index.d.ts.map +1 -0
  358. package/dist/storage/index.d.ts +99 -0
  359. package/dist/storage/index.d.ts.map +1 -0
  360. package/dist/telemetry/index.d.ts +376 -0
  361. package/dist/telemetry/index.d.ts.map +1 -0
  362. package/dist/template/index.d.ts +7 -0
  363. package/dist/template/index.d.ts.map +1 -0
  364. package/dist/templates/engine.d.ts +60 -0
  365. package/dist/templates/engine.d.ts.map +1 -0
  366. package/dist/templates/index.d.ts +9 -0
  367. package/dist/templates/index.d.ts.map +1 -0
  368. package/dist/templates/loader.d.ts +45 -0
  369. package/dist/templates/loader.d.ts.map +1 -0
  370. package/dist/templates/renderers/markdown.d.ts +46 -0
  371. package/dist/templates/renderers/markdown.d.ts.map +1 -0
  372. package/dist/templates/renderers/simple.d.ts +35 -0
  373. package/dist/templates/renderers/simple.d.ts.map +1 -0
  374. package/dist/templates/types.d.ts +138 -0
  375. package/dist/templates/types.d.ts.map +1 -0
  376. package/dist/testing/index.d.ts +539 -0
  377. package/dist/testing/index.d.ts.map +1 -0
  378. package/dist/types/index.d.ts +116 -0
  379. package/dist/types/index.d.ts.map +1 -0
  380. package/dist/validation/index.d.ts +89 -0
  381. package/dist/validation/index.d.ts.map +1 -0
  382. package/dist/validation/schemas.d.ts +243 -0
  383. package/dist/validation/schemas.d.ts.map +1 -0
  384. package/dist/websocket/index.d.ts +252 -0
  385. package/dist/websocket/index.d.ts.map +1 -0
  386. package/package.json +3 -3
  387. package/src/cli/commands/add-frontend.ts +444 -0
  388. package/src/cli/commands/new.ts +23 -0
  389. package/src/cli/index.ts +1 -0
  390. package/src/cli/templates/frontend/react.ts +2 -1
  391. package/src/cli/templates/frontend/solid.ts +2 -1
  392. package/src/cli/templates/frontend/svelte.ts +2 -1
  393. package/src/cli/templates/frontend/vue.ts +2 -1
  394. package/src/cli/templates/project/api.ts +1 -1
  395. package/src/cli/templates/project/default.ts +1 -1
  396. package/src/cli/templates/project/fullstack.ts +14 -104
  397. package/src/cli/templates/project/website.ts +62 -11
  398. package/tsconfig.declaration.json +14 -0
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Observability Types
3
+ *
4
+ * Core interfaces for the error tracking and observability integration layer.
5
+ * Implement ErrorReporter to integrate with Sentry, Bugsnag, Datadog, etc.
6
+ */
7
+ /**
8
+ * A single breadcrumb entry recording an event that occurred before an error
9
+ */
10
+ export interface BreadcrumbEntry {
11
+ /** When this breadcrumb was recorded */
12
+ timestamp: Date;
13
+ /** Category of event */
14
+ type: "http" | "log" | "navigation" | "custom";
15
+ /** Severity level */
16
+ level: "debug" | "info" | "warning" | "error";
17
+ /** Human-readable description of the event */
18
+ message: string;
19
+ /** Optional structured data for context */
20
+ data?: Record<string, unknown>;
21
+ }
22
+ /**
23
+ * Request metadata captured at error time
24
+ */
25
+ export interface ErrorRequestContext {
26
+ /** HTTP method */
27
+ method: string;
28
+ /** Request path */
29
+ path: string;
30
+ /** Relevant request headers (sanitized) */
31
+ headers: Record<string, string>;
32
+ /** Client IP address */
33
+ ip: string;
34
+ /** User-Agent header if present */
35
+ userAgent?: string;
36
+ }
37
+ /**
38
+ * User identity snapshot (sourced from context.get('user'))
39
+ */
40
+ export interface ErrorUserContext {
41
+ id?: string | number;
42
+ email?: string;
43
+ [key: string]: unknown;
44
+ }
45
+ /**
46
+ * A captured error event with full context, ready for the reporter
47
+ */
48
+ export interface ErrorEvent {
49
+ /** Unique ID for this error event (for deduplication) */
50
+ id: string;
51
+ /** When the error occurred */
52
+ timestamp: Date;
53
+ /** The original Error object */
54
+ error: Error;
55
+ /** Severity level */
56
+ level: "fatal" | "error" | "warning";
57
+ /** HTTP request context (undefined for non-HTTP errors) */
58
+ request?: ErrorRequestContext;
59
+ /** W3C trace ID (from traceparent header or generated) */
60
+ traceId?: string;
61
+ /** W3C span ID */
62
+ spanId?: string;
63
+ /** Authenticated user at time of error */
64
+ user?: ErrorUserContext;
65
+ /** Recent events leading up to this error */
66
+ breadcrumbs: BreadcrumbEntry[];
67
+ /** Custom tags for categorization */
68
+ tags?: Record<string, string>;
69
+ /** Any additional context */
70
+ extra?: Record<string, unknown>;
71
+ }
72
+ /**
73
+ * A captured message event (non-error) for the reporter
74
+ */
75
+ export interface MessageEvent {
76
+ /** Unique ID */
77
+ id: string;
78
+ /** When the message was captured */
79
+ timestamp: Date;
80
+ /** The message text */
81
+ message: string;
82
+ /** Severity */
83
+ level: "debug" | "info" | "warning" | "error";
84
+ /** Optional extra context */
85
+ extra?: Record<string, unknown>;
86
+ }
87
+ /**
88
+ * Implement this interface to report errors to your platform (Sentry, Bugsnag, etc.).
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * class SentryReporter implements ErrorReporter {
93
+ * captureError(event: ErrorEvent) {
94
+ * Sentry.withScope(scope => {
95
+ * if (event.user) scope.setUser(event.user);
96
+ * if (event.traceId) scope.setTag('traceId', event.traceId);
97
+ * Sentry.captureException(event.error);
98
+ * });
99
+ * }
100
+ * async flush() { await Sentry.flush(2000); }
101
+ * }
102
+ * ```
103
+ */
104
+ export interface ErrorReporter {
105
+ /**
106
+ * Report an error event. Called asynchronously (non-blocking).
107
+ * Throw errors only if truly unrecoverable — they are caught and logged.
108
+ */
109
+ captureError(event: ErrorEvent): void | Promise<void>;
110
+ /**
111
+ * Report a non-error message. Optional.
112
+ */
113
+ captureMessage?(event: MessageEvent): void | Promise<void>;
114
+ /**
115
+ * Flush pending events. Called on application shutdown.
116
+ * Use this to ensure all buffered events are sent before process exit.
117
+ */
118
+ flush?(): Promise<void>;
119
+ }
120
+ /**
121
+ * Options for ObservabilityModule.forRoot()
122
+ */
123
+ export interface ObservabilityOptions {
124
+ /**
125
+ * The reporter that receives all captured error events.
126
+ * Required — without a reporter, no events are sent anywhere.
127
+ */
128
+ reporter: ErrorReporter;
129
+ /**
130
+ * Maximum number of breadcrumbs to retain in the ring buffer.
131
+ * Older breadcrumbs are evicted when the buffer is full.
132
+ * @default 20
133
+ */
134
+ breadcrumbsSize?: number;
135
+ /**
136
+ * Error classes to suppress — events with these types are not reported.
137
+ * Useful for suppressing expected errors like 404s or 401s.
138
+ *
139
+ * @example ignoreErrors: [NotFoundError, UnauthorizedError]
140
+ */
141
+ ignoreErrors?: Array<new (...args: unknown[]) => Error>;
142
+ /**
143
+ * HTTP status codes to suppress.
144
+ * Errors whose statusCode property matches are not reported.
145
+ * @example ignoreStatusCodes: [404, 401]
146
+ */
147
+ ignoreStatusCodes?: number[];
148
+ /**
149
+ * Custom tags attached to every error event.
150
+ * @example tags: { environment: 'production', version: '1.2.3' }
151
+ */
152
+ tags?: Record<string, string>;
153
+ /**
154
+ * Also capture unhandled promise rejections and uncaught exceptions
155
+ * at the process level (outside the HTTP request pipeline).
156
+ * @default false
157
+ */
158
+ captureUnhandled?: boolean;
159
+ }
160
+ /**
161
+ * Configuration values that can be set via environment variables.
162
+ * These are applied as defaults; ObservabilityOptions take precedence.
163
+ */
164
+ export interface ObservabilityConfig {
165
+ /** Enable/disable the observability system */
166
+ enabled?: boolean;
167
+ /** Maximum breadcrumb ring buffer size */
168
+ breadcrumbsSize?: number;
169
+ /** HTTP status codes to ignore (comma-separated in env) */
170
+ ignoreStatusCodes?: number[];
171
+ }
172
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/observability/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decorators.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.test.d.ts","sourceRoot":"","sources":["../../../src/openapi/__tests__/decorators.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=document-builder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-builder.test.d.ts","sourceRoot":"","sources":["../../../src/openapi/__tests__/document-builder.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=route-scanner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-scanner.test.d.ts","sourceRoot":"","sources":["../../../src/openapi/__tests__/route-scanner.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=schema-generator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-generator.test.d.ts","sourceRoot":"","sources":["../../../src/openapi/__tests__/schema-generator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * OpenAPI Decorators
3
+ *
4
+ * Decorators for documenting controllers, methods, parameters, and DTOs with OpenAPI metadata.
5
+ */
6
+ import type { ApiBodyOptions, ApiHeaderOptions, ApiKeySecurityOptions, ApiOperationOptions, ApiParamOptions, ApiPropertyOptions, ApiQueryOptions, ApiResponseOptions, SecuritySchemeOptions } from './types';
7
+ /**
8
+ * Mark one or more tags that apply to all operations in this controller
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * @Controller('/users')
13
+ * @ApiTags('users', 'accounts')
14
+ * class UserController { ... }
15
+ * ```
16
+ */
17
+ export declare function ApiTags(...tags: string[]): ClassDecorator;
18
+ /**
19
+ * Mark this controller with Bearer token authentication
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * @Controller('/api')
24
+ * @ApiBearerAuth()
25
+ * class ApiController { ... }
26
+ * ```
27
+ */
28
+ export declare function ApiBearerAuth(name?: string, options?: SecuritySchemeOptions): ClassDecorator | MethodDecorator;
29
+ /**
30
+ * Mark this controller with Basic authentication
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * @Controller('/api')
35
+ * @ApiBasicAuth()
36
+ * class ApiController { ... }
37
+ * ```
38
+ */
39
+ export declare function ApiBasicAuth(name?: string): ClassDecorator | MethodDecorator;
40
+ /**
41
+ * Mark this controller with API Key authentication
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * @Controller('/api')
46
+ * @ApiApiKey({ in: 'header', name: 'X-API-Key' })
47
+ * class ApiController { ... }
48
+ * ```
49
+ */
50
+ export declare function ApiApiKey(options: ApiKeySecurityOptions, name?: string): ClassDecorator | MethodDecorator;
51
+ /**
52
+ * Exclude this entire controller from OpenAPI documentation
53
+ *
54
+ * @example
55
+ * ```typescript
56
+ * @Controller('/internal')
57
+ * @ApiExcludeController()
58
+ * class InternalController { ... }
59
+ * ```
60
+ */
61
+ export declare function ApiExcludeController(): ClassDecorator;
62
+ /**
63
+ * Document the operation (HTTP method) with summary, description, and other metadata
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * @Get('/:id')
68
+ * @ApiOperation({ summary: 'Get user by ID', description: 'Retrieve a single user' })
69
+ * getUser(@Param('id') id: string) { ... }
70
+ * ```
71
+ */
72
+ export declare function ApiOperation(options: ApiOperationOptions): MethodDecorator;
73
+ /**
74
+ * Document an HTTP response from this operation
75
+ * Can be used multiple times for different status codes
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * @ApiResponse({ status: 200, description: 'Success', type: UserDto })
80
+ * @ApiResponse({ status: 404, description: 'Not found' })
81
+ * getUser() { ... }
82
+ * ```
83
+ */
84
+ export declare function ApiResponse(options: ApiResponseOptions): MethodDecorator;
85
+ /**
86
+ * Document a path parameter
87
+ * Can be used multiple times for different parameters
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * @Get('/:userId/posts/:postId')
92
+ * @ApiParam({ name: 'userId', type: 'string', description: 'User ID' })
93
+ * @ApiParam({ name: 'postId', type: 'string', description: 'Post ID' })
94
+ * getPost(@Param('userId') userId: string, @Param('postId') postId: string) { ... }
95
+ * ```
96
+ */
97
+ export declare function ApiParam(options: ApiParamOptions): MethodDecorator;
98
+ /**
99
+ * Document a query parameter
100
+ * Can be used multiple times for different parameters
101
+ *
102
+ * @example
103
+ * ```typescript
104
+ * @Get()
105
+ * @ApiQuery({ name: 'page', type: 'number', description: 'Page number', required: false })
106
+ * @ApiQuery({ name: 'limit', type: 'number', description: 'Items per page', required: false })
107
+ * getUsers(@Query('page') page?: number, @Query('limit') limit?: number) { ... }
108
+ * ```
109
+ */
110
+ export declare function ApiQuery(options: ApiQueryOptions): MethodDecorator;
111
+ /**
112
+ * Document an HTTP header
113
+ * Can be used multiple times for different headers
114
+ *
115
+ * @example
116
+ * ```typescript
117
+ * @Post()
118
+ * @ApiHeader({ name: 'X-Request-ID', description: 'Request ID', required: true })
119
+ * create() { ... }
120
+ * ```
121
+ */
122
+ export declare function ApiHeader(options: ApiHeaderOptions): MethodDecorator;
123
+ /**
124
+ * Document the request body
125
+ *
126
+ * @example
127
+ * ```typescript
128
+ * @Post()
129
+ * @ApiBody({ type: CreateUserDto, description: 'User data to create' })
130
+ * create(@Body() dto: CreateUserDto) { ... }
131
+ * ```
132
+ */
133
+ export declare function ApiBody(options: ApiBodyOptions): MethodDecorator;
134
+ /**
135
+ * Exclude this endpoint from OpenAPI documentation
136
+ *
137
+ * @example
138
+ * ```typescript
139
+ * @Get()
140
+ * @ApiExcludeEndpoint()
141
+ * internalOnly() { ... }
142
+ * ```
143
+ */
144
+ export declare function ApiExcludeEndpoint(): MethodDecorator;
145
+ /**
146
+ * Document a DTO property with type, description, validation rules, etc.
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * class CreateUserDto {
151
+ * @ApiProperty({ description: 'Email address', example: 'user@example.com' })
152
+ * email: string;
153
+ *
154
+ * @ApiProperty({ minLength: 2, maxLength: 50, description: 'Full name' })
155
+ * name: string;
156
+ * }
157
+ * ```
158
+ */
159
+ export declare function ApiProperty(options?: ApiPropertyOptions): PropertyDecorator;
160
+ /**
161
+ * Document an optional DTO property
162
+ * Equivalent to ApiProperty with required: false
163
+ *
164
+ * @example
165
+ * ```typescript
166
+ * class UserFilterDto {
167
+ * @ApiPropertyOptional({ description: 'Filter by name', example: 'John' })
168
+ * name?: string;
169
+ * }
170
+ * ```
171
+ */
172
+ export declare function ApiPropertyOptional(options?: Omit<ApiPropertyOptions, 'required'>): PropertyDecorator;
173
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/openapi/decorators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACX,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAGlB,qBAAqB,EACrB,MAAM,SAAS,CAAC;AAYjB;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,cAAc,CAOzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAW,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,cAAc,GAAG,eAAe,CAiBhH;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,SAAU,GAAG,cAAc,GAAG,eAAe,CAiB7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,SAAY,GAAG,cAAc,GAAG,eAAe,CAmB5G;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,cAAc,CAKrD;AAID;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,eAAe,CAI1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,eAAe,CAOxE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAOlE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAOlE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAOpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CAIhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,eAAe,CAIpD;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,iBAAiB,CAK3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,GAAG,iBAAiB,CAKrG"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * OpenAPI Document Builder
3
+ *
4
+ * Fluent API for building OpenAPI 3.1 documents with configuration for
5
+ * servers, security schemes, tags, and other top-level metadata.
6
+ */
7
+ import type { ApiKeySecurityOptions, OpenAPIDocument, SecuritySchemeOptions } from './types';
8
+ /**
9
+ * DocumentBuilder - Fluent API for constructing OpenAPI documents
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const document = new DocumentBuilder()
14
+ * .setTitle('My API')
15
+ * .setVersion('1.0.0')
16
+ * .setDescription('API description')
17
+ * .addBearerAuth()
18
+ * .addTag('users', 'User management endpoints')
19
+ * .build();
20
+ * ```
21
+ */
22
+ export declare class DocumentBuilder {
23
+ private document;
24
+ /**
25
+ * Set the API title
26
+ */
27
+ setTitle(title: string): this;
28
+ /**
29
+ * Set the API description
30
+ */
31
+ setDescription(description: string): this;
32
+ /**
33
+ * Set the API version
34
+ */
35
+ setVersion(version: string): this;
36
+ /**
37
+ * Set contact information
38
+ */
39
+ setContact(name: string, url?: string, email?: string): this;
40
+ /**
41
+ * Set license information
42
+ */
43
+ setLicense(name: string, url?: string): this;
44
+ /**
45
+ * Add a server
46
+ */
47
+ addServer(url: string, description?: string): this;
48
+ /**
49
+ * Add Bearer token authentication
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * builder.addBearerAuth('JWT')
54
+ * ```
55
+ */
56
+ addBearerAuth(name?: string, options?: SecuritySchemeOptions): this;
57
+ /**
58
+ * Add Basic authentication
59
+ */
60
+ addBasicAuth(name?: string, options?: SecuritySchemeOptions): this;
61
+ /**
62
+ * Add API Key authentication
63
+ */
64
+ addApiKey(options: ApiKeySecurityOptions, name?: string): this;
65
+ /**
66
+ * Add an OAuth2 security scheme
67
+ */
68
+ addOAuth2(name: string, authorizationUrl: string, tokenUrl?: string, refreshUrl?: string): this;
69
+ /**
70
+ * Add an OpenID Connect security scheme
71
+ */
72
+ addOpenIdConnect(name: string, url: string): this;
73
+ /**
74
+ * Add a tag for organizing operations
75
+ */
76
+ addTag(name: string, description?: string): this;
77
+ /**
78
+ * Build and return the final OpenAPI document
79
+ */
80
+ build(): OpenAPIDocument;
81
+ }
82
+ //# sourceMappingURL=document-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-builder.d.ts","sourceRoot":"","sources":["../../src/openapi/document-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACX,qBAAqB,EAErB,eAAe,EAIf,qBAAqB,EACrB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;GAaG;AACH,qBAAa,eAAe;IAC3B,OAAO,CAAC,QAAQ,CAYd;IAEF;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAS7B;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IASzC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASjC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5D;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5C;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAQlD;;;;;;;OAOG;IACH,aAAa,CACZ,IAAI,SAAW,EACf,OAAO,CAAC,EAAE,qBAAqB,GAC7B,IAAI;IAsBP;;OAEG;IACH,YAAY,CAAC,IAAI,SAAU,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAqBnE;;OAEG;IACH,SAAS,CACR,OAAO,EAAE,qBAAqB,EAC9B,IAAI,SAAY,GACd,IAAI;IAsBP;;OAEG;IACH,SAAS,CACR,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,QAAQ,CAAC,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GACjB,IAAI;IAuBP;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAgBjD;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAchD;;OAEG;IACH,KAAK,IAAI,eAAe;CAGxB"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * OpenAPI Module
3
+ *
4
+ * Auto-generate OpenAPI 3.1 specifications from Bueno controllers and decorators.
5
+ * Provides decorators for documenting API endpoints and a SwaggerModule for setup.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import {
10
+ * DocumentBuilder,
11
+ * SwaggerModule,
12
+ * ApiOperation,
13
+ * ApiResponse,
14
+ * ApiTags,
15
+ * } from '@buenojs/bueno/openapi';
16
+ *
17
+ * // 1. Document your controller
18
+ * @Controller('/users')
19
+ * @ApiTags('users')
20
+ * class UsersController {
21
+ * @Get()
22
+ * @ApiOperation({ summary: 'List all users' })
23
+ * @ApiResponse({ status: 200, description: 'Success', type: [User] })
24
+ * async getAll() { ... }
25
+ * }
26
+ *
27
+ * // 2. Create OpenAPI document
28
+ * const config = new DocumentBuilder()
29
+ * .setTitle('My API')
30
+ * .setVersion('1.0.0')
31
+ * .addBearerAuth()
32
+ * .build();
33
+ *
34
+ * const document = SwaggerModule.createDocument(app, config, [UsersController]);
35
+ *
36
+ * // 3. Setup Swagger UI
37
+ * SwaggerModule.setup('/api-docs', app, document);
38
+ * ```
39
+ */
40
+ export type { OpenAPIDocument, OpenAPIInfo, OpenAPIContact, OpenAPILicense, OpenAPIServer, OpenAPIPaths, OpenAPIPath, OpenAPIOperation, OpenAPIExternalDocs, OpenAPIParameter, OpenAPIRequestBody, OpenAPIMediaType, OpenAPIExample, OpenAPIResponse, OpenAPIHeader, OpenAPIResponses, OpenAPISchema, OpenAPIDiscriminator, OpenAPIXML, OpenAPIComponents, OpenAPISecurityScheme, OpenAPIOAuthFlows, OpenAPIOAuthFlow, OpenAPISecurity, OpenAPITag, SwaggerOptions, ApiOperationOptions, ApiResponseOptions, ApiParamOptions, ApiQueryOptions, ApiHeaderOptions, ApiBodyOptions, ApiPropertyOptions, SecuritySchemeOptions, ApiKeySecurityOptions, Constructor, } from './types';
41
+ export { DocumentBuilder } from './document-builder';
42
+ export { SchemaGenerator } from './schema-generator';
43
+ export { RouteScanner } from './route-scanner';
44
+ export { SwaggerModule } from './swagger-module';
45
+ export { ApiTags, ApiBearerAuth, ApiBasicAuth, ApiApiKey, ApiExcludeController, } from './decorators';
46
+ export { ApiOperation, ApiResponse, ApiParam, ApiQuery, ApiHeader, ApiBody, ApiExcludeEndpoint, } from './decorators';
47
+ export { ApiProperty, ApiPropertyOptional } from './decorators';
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/openapi/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAIH,YAAY,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,WAAW,GACX,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAKjD,OAAO,EACN,OAAO,EACP,aAAa,EACb,YAAY,EACZ,SAAS,EACT,oBAAoB,GACpB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACN,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,OAAO,EACP,kBAAkB,GAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * OpenAPI Metadata Storage
3
+ *
4
+ * Isolated metadata storage using WeakMap, following the same pattern as src/modules/metadata.ts
5
+ * This avoids circular dependencies and keeps metadata separate from the core module system.
6
+ */
7
+ import type { Constructor } from './types';
8
+ /**
9
+ * Set metadata on a class constructor
10
+ */
11
+ export declare function setApiMetadata(target: Constructor, key: string, value: unknown): void;
12
+ /**
13
+ * Get metadata from a class constructor
14
+ */
15
+ export declare function getApiMetadata<T>(target: Constructor, key: string): T | undefined;
16
+ /**
17
+ * Set metadata on a method prototype
18
+ */
19
+ export declare function setApiMethodMetadata(target: object, key: string, value: unknown): void;
20
+ /**
21
+ * Get metadata from a method prototype
22
+ */
23
+ export declare function getApiMethodMetadata<T>(target: object, key: string): T | undefined;
24
+ /**
25
+ * Set metadata on a property of a class prototype
26
+ */
27
+ export declare function setApiPropertyMetadata(target: object, propertyKey: string | symbol, value: unknown): void;
28
+ /**
29
+ * Get metadata from a property of a class prototype
30
+ */
31
+ export declare function getApiPropertyMetadata<T>(target: object, propertyKey: string | symbol): T | undefined;
32
+ /**
33
+ * Get all property metadata keys from a class prototype
34
+ */
35
+ export declare function getApiPropertyKeys(target: object): (string | symbol)[];
36
+ //# sourceMappingURL=metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/openapi/metadata.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAS3C;;GAEG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACZ,IAAI,CAKN;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC/B,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,GACT,CAAC,GAAG,SAAS,CAEf;AASD;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACZ,IAAI,CAKN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACrC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,GACT,CAAC,GAAG,SAAS,CAEf;AASD;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,KAAK,EAAE,OAAO,GACZ,IAAI,CAMN;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EACvC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,MAAM,GAC1B,CAAC,GAAG,SAAS,CAGf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAItE"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Route Scanner
3
+ *
4
+ * Scans controllers and extracts OpenAPI operation metadata from decorators.
5
+ * Combines HTTP method decorators, parameter documentation, and responses
6
+ * into OpenAPI operation objects.
7
+ */
8
+ import type { Constructor, OpenAPIPaths } from './types';
9
+ import { SchemaGenerator } from './schema-generator';
10
+ /**
11
+ * RouteScanner - Scans controllers and extracts OpenAPI operations
12
+ */
13
+ export declare class RouteScanner {
14
+ private schemaGenerator;
15
+ constructor(schemaGenerator: SchemaGenerator);
16
+ /**
17
+ * Scan all controllers and generate OpenAPI paths
18
+ */
19
+ scanControllers(controllers: Constructor[]): OpenAPIPaths;
20
+ /**
21
+ * Generate an OpenAPI operation for a single route
22
+ */
23
+ private generateOperation;
24
+ /**
25
+ * Convert a route pattern from :param format to {param} format (OpenAPI style)
26
+ * Handles optional params (:param?) and regex params (:param<regex>)
27
+ */
28
+ private convertPathToOpenAPI;
29
+ /**
30
+ * Get the schema generator instance
31
+ */
32
+ getSchemaGenerator(): SchemaGenerator;
33
+ }
34
+ //# sourceMappingURL=route-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-scanner.d.ts","sourceRoot":"","sources":["../../src/openapi/route-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACX,WAAW,EAGX,YAAY,EAGZ,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAQrD;;GAEG;AACH,qBAAa,YAAY;IACZ,OAAO,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAEpD;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,YAAY;IAyDzD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkLzB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAI5B;;OAEG;IACH,kBAAkB,IAAI,eAAe;CAGrC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Schema Generator
3
+ *
4
+ * Converts TypeScript class types and @ApiProperty decorators into OpenAPI schemas.
5
+ */
6
+ import type { Constructor, OpenAPISchema } from './types';
7
+ /**
8
+ * SchemaGenerator - Converts TypeScript types to OpenAPI schemas
9
+ */
10
+ export declare class SchemaGenerator {
11
+ private schemas;
12
+ private typeNames;
13
+ private typeCounter;
14
+ /**
15
+ * Generate an OpenAPI schema from a TypeScript type
16
+ * Supports classes, interfaces (via decorators), primitives, arrays
17
+ */
18
+ generateSchema(type: Constructor | string | Function): OpenAPISchema;
19
+ /**
20
+ * Generate schema for an object/class type
21
+ * Reads @ApiProperty metadata from class properties
22
+ */
23
+ private generateObjectSchema;
24
+ /**
25
+ * Generate schema from an @ApiProperty options object
26
+ */
27
+ private generatePropertySchema;
28
+ /**
29
+ * Generate schema for a primitive TypeScript type
30
+ */
31
+ private generatePrimitiveSchema;
32
+ /**
33
+ * Map string type names to OpenAPI schema
34
+ */
35
+ private mapStringType;
36
+ /**
37
+ * Check if type is a built-in TypeScript type
38
+ */
39
+ private isBuiltInType;
40
+ /**
41
+ * Get the name for a type (for referencing in components.schemas)
42
+ */
43
+ private getTypeName;
44
+ /**
45
+ * Get all generated schemas (for components.schemas)
46
+ */
47
+ getSchemas(): Record<string, OpenAPISchema>;
48
+ /**
49
+ * Clear cached schemas
50
+ */
51
+ clear(): void;
52
+ }
53
+ //# sourceMappingURL=schema-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-generator.d.ts","sourceRoot":"","sources":["../../src/openapi/schema-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAsB,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG9E;;GAEG;AACH,qBAAa,eAAe;IAC3B,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,WAAW,CAAK;IAExB;;;OAGG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa;IAiCpE;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsC5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkD9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAkBnB;;OAEG;IACH,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAQ3C;;OAEG;IACH,KAAK,IAAI,IAAI;CAKb"}