@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,193 @@
1
+ /**
2
+ * Background Jobs / Task Queue
3
+ *
4
+ * Type definitions for the job queue system.
5
+ * Supports Redis (production) and in-memory (development) drivers.
6
+ */
7
+ export type JobStatus = "pending" | "processing" | "completed" | "failed" | "delayed";
8
+ /**
9
+ * Represents a background job
10
+ */
11
+ export interface Job<T = unknown> {
12
+ /** Unique job identifier */
13
+ id: string;
14
+ /** Job name/type (e.g., "email.welcome", "image.resize") */
15
+ name: string;
16
+ /** Job payload data */
17
+ data: T;
18
+ /** Current status of the job */
19
+ status: JobStatus;
20
+ /** Number of times this job has been attempted */
21
+ attempts: number;
22
+ /** Maximum number of retry attempts */
23
+ maxRetries: number;
24
+ /** Error message if job failed */
25
+ error?: string;
26
+ /** Stack trace if job failed */
27
+ stackTrace?: string;
28
+ /** When the job was created (ISO 8601) */
29
+ createdAt: string;
30
+ /** When the job was last updated (ISO 8601) */
31
+ updatedAt: string;
32
+ /** When the job should start (ISO 8601, for delayed jobs) */
33
+ scheduledFor?: string;
34
+ /** When job processing started (ISO 8601) */
35
+ startedAt?: string;
36
+ /** When job processing completed (ISO 8601) */
37
+ completedAt?: string;
38
+ /** How long the job took to complete in milliseconds */
39
+ duration?: number;
40
+ /** Job priority (higher = process sooner) */
41
+ priority?: number;
42
+ /** Custom metadata attached to the job */
43
+ metadata?: Record<string, unknown>;
44
+ /** Worker that claimed this job */
45
+ workerId?: string;
46
+ /** When the job claim expires (for dead letter handling) */
47
+ claimExpiresAt?: string;
48
+ }
49
+ export interface JobQueueConfig {
50
+ /** Driver type: 'redis' for production, 'memory' for development */
51
+ driver?: "redis" | "memory";
52
+ /** Redis connection URL (required if driver is 'redis') */
53
+ url?: string;
54
+ /** Key prefix for all jobs (default: 'jobs:') */
55
+ keyPrefix?: string;
56
+ /** Maximum number of jobs to process concurrently (default: 10) */
57
+ concurrency?: number;
58
+ /** Maximum number of retry attempts (default: 3) */
59
+ maxRetries?: number;
60
+ /** Base delay in seconds for exponential backoff (default: 1) */
61
+ retryDelay?: number;
62
+ /** Number of jobs to claim in a single poll (default: 10) */
63
+ batchSize?: number;
64
+ /** Polling interval in milliseconds (default: 1000) */
65
+ pollInterval?: number;
66
+ /** Job timeout in milliseconds (default: 300000 / 5 minutes) */
67
+ jobTimeout?: number;
68
+ /** Enable metrics collection (default: true) */
69
+ enableMetrics?: boolean;
70
+ }
71
+ export interface QueueOptions {
72
+ /** Schedule job for later execution (ISO 8601 or Date) */
73
+ delay?: number | Date;
74
+ /** Job priority (default: 0) */
75
+ priority?: number;
76
+ /** Custom metadata */
77
+ metadata?: Record<string, unknown>;
78
+ /** Override default job timeout in milliseconds */
79
+ timeout?: number;
80
+ /** Maximum retries for this specific job */
81
+ maxRetries?: number;
82
+ }
83
+ /**
84
+ * Async handler function for processing jobs
85
+ */
86
+ export type JobHandler<T = unknown> = (job: Job<T>) => Promise<void>;
87
+ /**
88
+ * Metrics for job queue observability
89
+ */
90
+ export interface QueueMetrics {
91
+ /** Total jobs enqueued */
92
+ enqueued: number;
93
+ /** Jobs successfully completed */
94
+ processed: number;
95
+ /** Jobs that failed (exceeded max retries) */
96
+ failed: number;
97
+ /** Jobs currently in pending state */
98
+ pending: number;
99
+ /** Jobs currently being processed */
100
+ processing: number;
101
+ /** Average job processing time in milliseconds */
102
+ avgLatency: number;
103
+ /** Total processing time in milliseconds */
104
+ totalLatency: number;
105
+ /** Number of job retries that occurred */
106
+ retried: number;
107
+ /** Success rate (0.0 to 1.0) */
108
+ successRate: number;
109
+ /** Average number of attempts per job */
110
+ avgAttempts: number;
111
+ }
112
+ export type JobEventType = "enqueued" | "started" | "completed" | "failed" | "retried";
113
+ export interface JobEvent<T = unknown> {
114
+ type: JobEventType;
115
+ job: Job<T>;
116
+ timestamp: Date;
117
+ metadata?: Record<string, unknown>;
118
+ }
119
+ export interface JobClaimHandle {
120
+ /** Whether the claim was successfully acquired */
121
+ acquired: boolean;
122
+ /** Release the claim (job goes back to pending) */
123
+ release: () => Promise<boolean>;
124
+ /** Extend the claim TTL for long-running jobs */
125
+ extend: (ttl?: number) => Promise<boolean>;
126
+ /** Check if claim is still valid */
127
+ isValid: () => Promise<boolean>;
128
+ /** Get remaining TTL in milliseconds */
129
+ getRemainingTTL: () => Promise<number>;
130
+ /** The claim key */
131
+ key: string;
132
+ /** The claim value (unique identifier) */
133
+ value: string;
134
+ }
135
+ /**
136
+ * Interface that both Redis and Memory drivers must implement
137
+ */
138
+ export interface JobQueueDriver {
139
+ /**
140
+ * Initialize the driver (e.g., connect to Redis)
141
+ */
142
+ connect(): Promise<void>;
143
+ /**
144
+ * Disconnect from the driver
145
+ */
146
+ disconnect(): Promise<void>;
147
+ /**
148
+ * Check if connected
149
+ */
150
+ isConnected(): Promise<boolean>;
151
+ /**
152
+ * Enqueue a new job
153
+ */
154
+ enqueue<T = unknown>(name: string, data: T, options?: QueueOptions): Promise<string>;
155
+ /**
156
+ * Claim a batch of pending jobs for processing
157
+ */
158
+ claim(count: number, timeout: number): Promise<Job[]>;
159
+ /**
160
+ * Mark a job as completed
161
+ */
162
+ complete(jobId: string): Promise<void>;
163
+ /**
164
+ * Mark a job as failed
165
+ */
166
+ fail(jobId: string, error: string, stackTrace?: string): Promise<void>;
167
+ /**
168
+ * Schedule a job for retry
169
+ */
170
+ scheduleRetry(jobId: string, delayMs: number, error: string): Promise<void>;
171
+ /**
172
+ * Get a job by ID
173
+ */
174
+ getJob(jobId: string): Promise<Job | null>;
175
+ /**
176
+ * Get queue metrics
177
+ */
178
+ getMetrics(): Promise<QueueMetrics>;
179
+ /**
180
+ * Clear all jobs from the queue (use with caution!)
181
+ */
182
+ clear(): Promise<void>;
183
+ }
184
+ export interface HandlerRegistryEntry {
185
+ pattern: string;
186
+ handler: JobHandler<unknown>;
187
+ specificity: number;
188
+ }
189
+ export interface JobConfigValidationResult {
190
+ valid: boolean;
191
+ errors: string[];
192
+ }
193
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/jobs/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Job Worker
3
+ *
4
+ * Production-grade worker for processing background jobs.
5
+ * Designed to run in a separate process/worker.
6
+ * Supports graceful shutdown and exponential backoff polling.
7
+ */
8
+ import type { JobEvent, JobEventType, JobHandler, JobQueueConfig } from "./types";
9
+ export declare class JobWorker {
10
+ private driver;
11
+ private handlers;
12
+ private handlerRegistry;
13
+ private eventListeners;
14
+ private isRunning;
15
+ private pollInterval;
16
+ private concurrency;
17
+ private jobTimeout;
18
+ private maxBackoffDelay;
19
+ private currentBackoff;
20
+ private inFlightJobs;
21
+ private shutdownTimeout;
22
+ constructor(config?: JobQueueConfig);
23
+ /**
24
+ * Initialize the worker (connect to backend)
25
+ */
26
+ init(): Promise<void>;
27
+ /**
28
+ * Register a handler for a job type
29
+ * Supports wildcards: "email.*" matches "email.welcome", "email.reset", etc.
30
+ */
31
+ handle(pattern: string, handler: JobHandler<unknown>): void;
32
+ /**
33
+ * Remove a handler
34
+ */
35
+ unhandle(pattern: string): void;
36
+ /**
37
+ * Listen for worker events
38
+ */
39
+ on(eventType: JobEventType, listener: (event: JobEvent) => void): void;
40
+ /**
41
+ * Stop listening for events
42
+ */
43
+ off(eventType: JobEventType, listener: (event: JobEvent) => void): void;
44
+ /**
45
+ * Emit a worker event
46
+ */
47
+ private _emitEvent;
48
+ /**
49
+ * Find the best matching handler for a job
50
+ */
51
+ private findHandler;
52
+ /**
53
+ * Check if a pattern matches a job name (supports wildcards)
54
+ */
55
+ private _patternMatches;
56
+ /**
57
+ * Start the worker (blocks until stopped)
58
+ */
59
+ start(): Promise<void>;
60
+ /**
61
+ * Main polling loop
62
+ */
63
+ private _pollLoop;
64
+ /**
65
+ * Process a single job
66
+ */
67
+ private _processJob;
68
+ /**
69
+ * Stop the worker gracefully
70
+ * Waits for in-flight jobs to complete before shutdown
71
+ */
72
+ stop(): Promise<void>;
73
+ /**
74
+ * Get the number of jobs currently being processed
75
+ */
76
+ getInFlightCount(): number;
77
+ /**
78
+ * Get queue metrics
79
+ */
80
+ getMetrics(): Promise<import("./types").QueueMetrics>;
81
+ /**
82
+ * Check if worker is running
83
+ */
84
+ isActive(): boolean;
85
+ }
86
+ /**
87
+ * Create and start a worker from config
88
+ * Useful for CLI commands like: bueno queue:worker
89
+ */
90
+ export declare function startWorker(config?: JobQueueConfig): Promise<void>;
91
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/jobs/worker.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAGX,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,cAAc,EAEd,MAAM,SAAS,CAAC;AAIjB,qBAAa,SAAS;IACrB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAA+C;IAC/D,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,cAAc,CACX;IACX,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,eAAe,CAAS;gBAEpB,MAAM,GAAE,cAAmB;IAkBvC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B;;;OAGG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,IAAI;IAkB3D;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQ/B;;OAEG;IACH,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAOtE;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,IAAI;IAIvE;;OAEG;IACH,OAAO,CAAC,UAAU;IAmBlB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B;;OAEG;YACW,SAAS;IAiDvB;;OAEG;YACW,WAAW;IAyDzB;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0B3B;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACG,UAAU;IAIhB;;OAEG;IACH,QAAQ,IAAI,OAAO;CAGnB;AAID;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBxE"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Distributed Locking
3
+ *
4
+ * Redis-based distributed locks with in-memory fallback.
5
+ * Uses Bun 1.3+ native Redis client for production.
6
+ *
7
+ * Implementation based on Redis SET NX PX pattern with Lua scripts
8
+ * for safe lock release and extension.
9
+ */
10
+ export interface LockConfig {
11
+ driver?: "redis" | "memory";
12
+ url?: string;
13
+ keyPrefix?: string;
14
+ defaultTTL?: number;
15
+ retryCount?: number;
16
+ retryDelay?: number;
17
+ autoExtend?: boolean;
18
+ }
19
+ export interface LockOptions {
20
+ ttl?: number;
21
+ retryCount?: number;
22
+ retryDelay?: number;
23
+ }
24
+ export interface Lock {
25
+ key: string;
26
+ value: string;
27
+ acquired: boolean;
28
+ acquiredAt: number;
29
+ ttl: number;
30
+ expiresAt: number;
31
+ }
32
+ export interface LockHandle {
33
+ /** Whether the lock was successfully acquired */
34
+ acquired: boolean;
35
+ /** Release the lock */
36
+ release: () => Promise<boolean>;
37
+ /** Extend the lock TTL */
38
+ extend: (ttl?: number) => Promise<boolean>;
39
+ /** Check if lock is still held */
40
+ isValid: () => Promise<boolean>;
41
+ /** Get remaining TTL in milliseconds */
42
+ getRemainingTTL: () => Promise<number>;
43
+ /** The lock key */
44
+ key: string;
45
+ /** The lock value (unique identifier) */
46
+ value: string;
47
+ }
48
+ export declare class DistributedLock {
49
+ private driver;
50
+ private driverType;
51
+ private keyPrefix;
52
+ private defaultTTL;
53
+ private defaultRetryCount;
54
+ private defaultRetryDelay;
55
+ private _isConnected;
56
+ constructor(config?: LockConfig);
57
+ /**
58
+ * Connect to the lock backend (Redis only)
59
+ */
60
+ connect(): Promise<void>;
61
+ /**
62
+ * Disconnect from the lock backend
63
+ */
64
+ disconnect(): Promise<void>;
65
+ /**
66
+ * Check if connected
67
+ */
68
+ get isConnected(): boolean;
69
+ /**
70
+ * Get the driver type
71
+ */
72
+ getDriverType(): "redis" | "memory";
73
+ /**
74
+ * Generate a unique lock value
75
+ */
76
+ private generateLockValue;
77
+ /**
78
+ * Try to acquire a lock without retry
79
+ */
80
+ private tryAcquire;
81
+ /**
82
+ * Acquire a lock
83
+ * Returns a LockHandle that can be used to release or extend the lock
84
+ */
85
+ acquire(key: string, options?: LockOptions): Promise<LockHandle>;
86
+ /**
87
+ * Acquire a lock and execute a function
88
+ * Automatically releases the lock when done
89
+ */
90
+ withLock<T>(key: string, fn: (lock: LockHandle) => Promise<T>, options?: LockOptions): Promise<T>;
91
+ /**
92
+ * Acquire a lock with automatic extension for long-running operations
93
+ */
94
+ withAutoExtend<T>(key: string, fn: (lock: LockHandle) => Promise<T>, options?: LockOptions): Promise<T>;
95
+ /**
96
+ * Try to acquire a lock without waiting
97
+ * Returns immediately whether the lock was acquired
98
+ */
99
+ tryLock(key: string, options?: LockOptions): Promise<LockHandle>;
100
+ /**
101
+ * Check if a lock exists (anyone holds it)
102
+ */
103
+ isLocked(key: string): Promise<boolean>;
104
+ /**
105
+ * Force release a lock (dangerous - use with caution)
106
+ * This will release the lock regardless of ownership
107
+ */
108
+ forceRelease(key: string): Promise<void>;
109
+ private sleep;
110
+ }
111
+ export declare class LockAcquireError extends Error {
112
+ constructor(message: string);
113
+ }
114
+ export declare class LockTimeoutError extends Error {
115
+ constructor(message: string);
116
+ }
117
+ /**
118
+ * Create a distributed lock instance
119
+ */
120
+ export declare function createDistributedLock(config?: LockConfig): DistributedLock;
121
+ /**
122
+ * Create a Redis-based distributed lock
123
+ */
124
+ export declare function createRedisLock(url: string, options?: Omit<LockConfig, "driver" | "url">): DistributedLock;
125
+ /**
126
+ * Create an in-memory lock (for development/testing)
127
+ */
128
+ export declare function createMemoryLock(): DistributedLock;
129
+ /**
130
+ * Get the default lock instance
131
+ */
132
+ export declare function getDefaultLock(): DistributedLock;
133
+ /**
134
+ * Set the default lock instance
135
+ */
136
+ export declare function setDefaultLock(lock: DistributedLock): void;
137
+ /**
138
+ * Acquire a lock using the default instance
139
+ */
140
+ export declare function lock<T>(key: string, fn: () => Promise<T>, options?: LockOptions): Promise<T>;
141
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lock/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Structured Logging System
3
+ *
4
+ * Provides structured logging with JSON output, log levels,
5
+ * context-aware logging, and performance metrics.
6
+ */
7
+ export type LogLevel = "debug" | "info" | "warn" | "error" | "fatal";
8
+ export interface LogEntry {
9
+ level: LogLevel;
10
+ message: string;
11
+ timestamp: string;
12
+ context?: Record<string, unknown>;
13
+ error?: {
14
+ name: string;
15
+ message: string;
16
+ stack?: string;
17
+ };
18
+ duration?: number;
19
+ [key: string]: unknown;
20
+ }
21
+ export interface LoggerConfig {
22
+ level?: LogLevel;
23
+ pretty?: boolean;
24
+ timestamp?: boolean;
25
+ context?: Record<string, unknown>;
26
+ output?: "console" | "stdout" | ((entry: LogEntry) => void);
27
+ }
28
+ export interface LoggerContext {
29
+ requestId?: string;
30
+ userId?: string;
31
+ method?: string;
32
+ path?: string;
33
+ [key: string]: unknown;
34
+ }
35
+ export declare class Logger {
36
+ private level;
37
+ private pretty;
38
+ private timestamp;
39
+ private context;
40
+ private output;
41
+ constructor(config?: LoggerConfig);
42
+ /**
43
+ * Check if a log level should be logged
44
+ */
45
+ private shouldLog;
46
+ /**
47
+ * Serialize log entry to JSON
48
+ */
49
+ private serialize;
50
+ /**
51
+ * Pretty print log entry
52
+ */
53
+ private prettyPrint;
54
+ /**
55
+ * Create a log entry
56
+ */
57
+ private createEntry;
58
+ /**
59
+ * Log a debug message
60
+ */
61
+ debug(message: string, context?: Record<string, unknown>): void;
62
+ /**
63
+ * Log an info message
64
+ */
65
+ info(message: string, context?: Record<string, unknown>): void;
66
+ /**
67
+ * Log a warning message
68
+ */
69
+ warn(message: string, context?: Record<string, unknown>): void;
70
+ /**
71
+ * Log an error message
72
+ */
73
+ error(message: string, error?: Error | unknown, context?: Record<string, unknown>): void;
74
+ /**
75
+ * Log a fatal message
76
+ */
77
+ fatal(message: string, error?: Error | unknown, context?: Record<string, unknown>): void;
78
+ /**
79
+ * Create a child logger with additional context
80
+ */
81
+ child(context: Record<string, unknown>): Logger;
82
+ /**
83
+ * Set log level
84
+ */
85
+ setLevel(level: LogLevel): void;
86
+ /**
87
+ * Add context to the logger
88
+ */
89
+ addContext(context: Record<string, unknown>): void;
90
+ /**
91
+ * Time a function
92
+ */
93
+ time<T>(label: string, fn: () => T | Promise<T>): Promise<T>;
94
+ /**
95
+ * Create a timer
96
+ */
97
+ startTimer(label: string): () => number;
98
+ }
99
+ export interface RequestLogContext {
100
+ requestId?: string;
101
+ method: string;
102
+ path: string;
103
+ query?: string;
104
+ ip?: string;
105
+ userAgent?: string;
106
+ userId?: string;
107
+ }
108
+ export interface ResponseLogContext extends RequestLogContext {
109
+ statusCode: number;
110
+ duration: number;
111
+ contentLength?: number;
112
+ }
113
+ /**
114
+ * Create a request logger middleware
115
+ */
116
+ export declare function createRequestLogger(logger: Logger): (ctx: unknown, next: () => Promise<unknown>) => Promise<unknown>;
117
+ export declare class PerformanceLogger {
118
+ private logger;
119
+ private metrics;
120
+ constructor(logger: Logger);
121
+ /**
122
+ * Record a metric
123
+ */
124
+ record(name: string, value: number): void;
125
+ /**
126
+ * Get metric statistics
127
+ */
128
+ stats(name: string): {
129
+ count: number;
130
+ min: number;
131
+ max: number;
132
+ avg: number;
133
+ p99: number;
134
+ } | null;
135
+ /**
136
+ * Log all metrics
137
+ */
138
+ logMetrics(): void;
139
+ /**
140
+ * Clear all metrics
141
+ */
142
+ clear(): void;
143
+ }
144
+ /**
145
+ * Get the default logger instance
146
+ */
147
+ export declare function getLogger(): Logger;
148
+ /**
149
+ * Set the default logger instance
150
+ */
151
+ export declare function setLogger(logger: Logger): void;
152
+ /**
153
+ * Create a new logger
154
+ */
155
+ export declare function createLogger(config?: LoggerConfig): Logger;
156
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"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"}