@buenojs/bueno 0.8.3 → 0.8.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 (218) hide show
  1. package/README.md +136 -16
  2. package/dist/cli/{index.js → bin.js} +3036 -1421
  3. package/dist/container/index.js +250 -0
  4. package/dist/context/index.js +219 -0
  5. package/dist/database/index.js +493 -0
  6. package/dist/frontend/index.js +7697 -0
  7. package/dist/health/index.js +364 -0
  8. package/dist/i18n/index.js +345 -0
  9. package/dist/index.js +11043 -6482
  10. package/dist/jobs/index.js +819 -0
  11. package/dist/lock/index.js +367 -0
  12. package/dist/logger/index.js +281 -0
  13. package/dist/metrics/index.js +289 -0
  14. package/dist/middleware/index.js +77 -0
  15. package/dist/migrations/index.js +571 -0
  16. package/dist/modules/index.js +3346 -0
  17. package/dist/notification/index.js +484 -0
  18. package/dist/observability/index.js +331 -0
  19. package/dist/openapi/index.js +776 -0
  20. package/dist/orm/index.js +1356 -0
  21. package/dist/router/index.js +886 -0
  22. package/dist/rpc/index.js +691 -0
  23. package/dist/schema/index.js +400 -0
  24. package/dist/telemetry/index.js +595 -0
  25. package/dist/template/index.js +640 -0
  26. package/dist/templates/index.js +640 -0
  27. package/dist/testing/index.js +1111 -0
  28. package/dist/types/index.js +60 -0
  29. package/package.json +121 -27
  30. package/src/cache/index.ts +2 -1
  31. package/src/cli/bin.ts +2 -2
  32. package/src/cli/commands/build.ts +183 -165
  33. package/src/cli/commands/dev.ts +96 -89
  34. package/src/cli/commands/generate.ts +142 -111
  35. package/src/cli/commands/help.ts +20 -16
  36. package/src/cli/commands/index.ts +3 -6
  37. package/src/cli/commands/migration.ts +124 -105
  38. package/src/cli/commands/new.ts +392 -438
  39. package/src/cli/commands/start.ts +81 -79
  40. package/src/cli/core/args.ts +68 -50
  41. package/src/cli/core/console.ts +89 -95
  42. package/src/cli/core/index.ts +4 -4
  43. package/src/cli/core/prompt.ts +65 -62
  44. package/src/cli/core/spinner.ts +23 -20
  45. package/src/cli/index.ts +46 -38
  46. package/src/cli/templates/database/index.ts +61 -0
  47. package/src/cli/templates/database/mysql.ts +14 -0
  48. package/src/cli/templates/database/none.ts +16 -0
  49. package/src/cli/templates/database/postgresql.ts +14 -0
  50. package/src/cli/templates/database/sqlite.ts +14 -0
  51. package/src/cli/templates/deploy.ts +29 -26
  52. package/src/cli/templates/docker.ts +41 -30
  53. package/src/cli/templates/frontend/index.ts +63 -0
  54. package/src/cli/templates/frontend/none.ts +17 -0
  55. package/src/cli/templates/frontend/react.ts +140 -0
  56. package/src/cli/templates/frontend/solid.ts +134 -0
  57. package/src/cli/templates/frontend/svelte.ts +131 -0
  58. package/src/cli/templates/frontend/vue.ts +130 -0
  59. package/src/cli/templates/generators/index.ts +339 -0
  60. package/src/cli/templates/generators/types.ts +56 -0
  61. package/src/cli/templates/index.ts +35 -2
  62. package/src/cli/templates/project/api.ts +81 -0
  63. package/src/cli/templates/project/default.ts +140 -0
  64. package/src/cli/templates/project/fullstack.ts +111 -0
  65. package/src/cli/templates/project/index.ts +95 -0
  66. package/src/cli/templates/project/minimal.ts +45 -0
  67. package/src/cli/templates/project/types.ts +94 -0
  68. package/src/cli/templates/project/website.ts +263 -0
  69. package/src/cli/utils/fs.ts +55 -41
  70. package/src/cli/utils/index.ts +3 -2
  71. package/src/cli/utils/strings.ts +47 -33
  72. package/src/cli/utils/version.ts +47 -0
  73. package/src/config/env-validation.ts +100 -0
  74. package/src/config/env.ts +169 -41
  75. package/src/config/index.ts +28 -20
  76. package/src/config/loader.ts +25 -16
  77. package/src/config/merge.ts +21 -10
  78. package/src/config/types.ts +545 -25
  79. package/src/config/validation.ts +215 -7
  80. package/src/container/forward-ref.ts +22 -22
  81. package/src/container/index.ts +34 -12
  82. package/src/context/index.ts +11 -1
  83. package/src/database/index.ts +7 -190
  84. package/src/database/orm/builder.ts +457 -0
  85. package/src/database/orm/casts/index.ts +130 -0
  86. package/src/database/orm/casts/types.ts +25 -0
  87. package/src/database/orm/compiler.ts +304 -0
  88. package/src/database/orm/hooks/index.ts +114 -0
  89. package/src/database/orm/index.ts +61 -0
  90. package/src/database/orm/model-registry.ts +59 -0
  91. package/src/database/orm/model.ts +821 -0
  92. package/src/database/orm/relationships/base.ts +146 -0
  93. package/src/database/orm/relationships/belongs-to-many.ts +179 -0
  94. package/src/database/orm/relationships/belongs-to.ts +56 -0
  95. package/src/database/orm/relationships/has-many.ts +45 -0
  96. package/src/database/orm/relationships/has-one.ts +41 -0
  97. package/src/database/orm/relationships/index.ts +11 -0
  98. package/src/database/orm/scopes/index.ts +55 -0
  99. package/src/events/__tests__/event-system.test.ts +235 -0
  100. package/src/events/config.ts +238 -0
  101. package/src/events/example-usage.ts +185 -0
  102. package/src/events/index.ts +278 -0
  103. package/src/events/manager.ts +385 -0
  104. package/src/events/registry.ts +182 -0
  105. package/src/events/types.ts +124 -0
  106. package/src/frontend/api-routes.ts +65 -23
  107. package/src/frontend/bundler.ts +76 -34
  108. package/src/frontend/console-client.ts +2 -2
  109. package/src/frontend/console-stream.ts +94 -38
  110. package/src/frontend/dev-server.ts +94 -46
  111. package/src/frontend/file-router.ts +61 -19
  112. package/src/frontend/frameworks/index.ts +37 -10
  113. package/src/frontend/frameworks/react.ts +10 -8
  114. package/src/frontend/frameworks/solid.ts +11 -9
  115. package/src/frontend/frameworks/svelte.ts +15 -9
  116. package/src/frontend/frameworks/vue.ts +13 -11
  117. package/src/frontend/hmr-client.ts +12 -10
  118. package/src/frontend/hmr.ts +146 -103
  119. package/src/frontend/index.ts +14 -5
  120. package/src/frontend/islands.ts +41 -22
  121. package/src/frontend/isr.ts +59 -37
  122. package/src/frontend/layout.ts +36 -21
  123. package/src/frontend/ssr/react.ts +74 -27
  124. package/src/frontend/ssr/solid.ts +54 -20
  125. package/src/frontend/ssr/svelte.ts +48 -14
  126. package/src/frontend/ssr/vue.ts +50 -18
  127. package/src/frontend/ssr.ts +83 -39
  128. package/src/frontend/types.ts +91 -56
  129. package/src/health/index.ts +21 -9
  130. package/src/i18n/engine.ts +305 -0
  131. package/src/i18n/index.ts +38 -0
  132. package/src/i18n/loader.ts +218 -0
  133. package/src/i18n/middleware.ts +164 -0
  134. package/src/i18n/negotiator.ts +162 -0
  135. package/src/i18n/types.ts +158 -0
  136. package/src/index.ts +179 -27
  137. package/src/jobs/drivers/memory.ts +315 -0
  138. package/src/jobs/drivers/redis.ts +459 -0
  139. package/src/jobs/index.ts +30 -0
  140. package/src/jobs/queue.ts +281 -0
  141. package/src/jobs/types.ts +295 -0
  142. package/src/jobs/worker.ts +380 -0
  143. package/src/logger/index.ts +1 -3
  144. package/src/logger/transports/index.ts +62 -22
  145. package/src/metrics/index.ts +25 -16
  146. package/src/migrations/index.ts +9 -0
  147. package/src/modules/filters.ts +13 -17
  148. package/src/modules/guards.ts +49 -26
  149. package/src/modules/index.ts +409 -298
  150. package/src/modules/interceptors.ts +58 -20
  151. package/src/modules/lazy.ts +11 -19
  152. package/src/modules/lifecycle.ts +15 -7
  153. package/src/modules/metadata.ts +15 -5
  154. package/src/modules/pipes.ts +94 -72
  155. package/src/notification/channels/base.ts +68 -0
  156. package/src/notification/channels/email.ts +105 -0
  157. package/src/notification/channels/push.ts +104 -0
  158. package/src/notification/channels/sms.ts +105 -0
  159. package/src/notification/channels/whatsapp.ts +104 -0
  160. package/src/notification/index.ts +48 -0
  161. package/src/notification/service.ts +354 -0
  162. package/src/notification/types.ts +344 -0
  163. package/src/observability/__tests__/observability.test.ts +483 -0
  164. package/src/observability/breadcrumbs.ts +114 -0
  165. package/src/observability/index.ts +136 -0
  166. package/src/observability/interceptor.ts +85 -0
  167. package/src/observability/service.ts +303 -0
  168. package/src/observability/trace.ts +37 -0
  169. package/src/observability/types.ts +196 -0
  170. package/src/openapi/__tests__/decorators.test.ts +335 -0
  171. package/src/openapi/__tests__/document-builder.test.ts +285 -0
  172. package/src/openapi/__tests__/route-scanner.test.ts +334 -0
  173. package/src/openapi/__tests__/schema-generator.test.ts +275 -0
  174. package/src/openapi/decorators.ts +328 -0
  175. package/src/openapi/document-builder.ts +274 -0
  176. package/src/openapi/index.ts +112 -0
  177. package/src/openapi/metadata.ts +112 -0
  178. package/src/openapi/route-scanner.ts +289 -0
  179. package/src/openapi/schema-generator.ts +256 -0
  180. package/src/openapi/swagger-module.ts +166 -0
  181. package/src/openapi/types.ts +398 -0
  182. package/src/orm/index.ts +10 -0
  183. package/src/rpc/index.ts +3 -1
  184. package/src/schema/index.ts +9 -0
  185. package/src/security/index.ts +15 -6
  186. package/src/ssg/index.ts +9 -8
  187. package/src/telemetry/index.ts +76 -22
  188. package/src/template/index.ts +7 -0
  189. package/src/templates/engine.ts +224 -0
  190. package/src/templates/index.ts +9 -0
  191. package/src/templates/loader.ts +331 -0
  192. package/src/templates/renderers/markdown.ts +212 -0
  193. package/src/templates/renderers/simple.ts +269 -0
  194. package/src/templates/types.ts +154 -0
  195. package/src/testing/index.ts +100 -27
  196. package/src/types/optional-deps.d.ts +347 -187
  197. package/src/validation/index.ts +92 -2
  198. package/src/validation/schemas.ts +536 -0
  199. package/tests/integration/fullstack.test.ts +4 -4
  200. package/tests/unit/database.test.ts +2 -72
  201. package/tests/unit/env-validation.test.ts +166 -0
  202. package/tests/unit/events.test.ts +910 -0
  203. package/tests/unit/i18n.test.ts +455 -0
  204. package/tests/unit/jobs.test.ts +493 -0
  205. package/tests/unit/notification.test.ts +988 -0
  206. package/tests/unit/observability.test.ts +453 -0
  207. package/tests/unit/orm/builder.test.ts +323 -0
  208. package/tests/unit/orm/casts.test.ts +179 -0
  209. package/tests/unit/orm/compiler.test.ts +220 -0
  210. package/tests/unit/orm/eager-loading.test.ts +285 -0
  211. package/tests/unit/orm/hooks.test.ts +191 -0
  212. package/tests/unit/orm/model.test.ts +373 -0
  213. package/tests/unit/orm/relationships.test.ts +303 -0
  214. package/tests/unit/orm/scopes.test.ts +74 -0
  215. package/tests/unit/templates-simple.test.ts +53 -0
  216. package/tests/unit/templates.test.ts +454 -0
  217. package/tests/unit/validation.test.ts +18 -24
  218. package/tsconfig.json +11 -3
@@ -0,0 +1,289 @@
1
+ // @bun
2
+ var __defProp = Object.defineProperty;
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true,
8
+ configurable: true,
9
+ set: (newValue) => all[name] = () => newValue
10
+ });
11
+ };
12
+ var __legacyDecorateClassTS = function(decorators, target, key, desc) {
13
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
15
+ r = Reflect.decorate(decorators, target, key, desc);
16
+ else
17
+ for (var i = decorators.length - 1;i >= 0; i--)
18
+ if (d = decorators[i])
19
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
21
+ };
22
+ var __legacyMetadataTS = (k, v) => {
23
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
24
+ return Reflect.metadata(k, v);
25
+ };
26
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
27
+ var __require = import.meta.require;
28
+
29
+ // src/metrics/index.ts
30
+ function formatBytes(bytes) {
31
+ if (bytes === 0)
32
+ return "0 B";
33
+ const units = ["B", "KB", "MB", "GB", "TB"];
34
+ const i = Math.floor(Math.log(bytes) / Math.log(1024));
35
+ const value = bytes / Math.pow(1024, i);
36
+ if (i === 0)
37
+ return `${value} ${units[i]}`;
38
+ if (value >= 100)
39
+ return `${value.toFixed(1)} ${units[i]}`;
40
+ return `${value.toFixed(2)} ${units[i]}`;
41
+ }
42
+ function formatMicroseconds(microseconds) {
43
+ if (microseconds < 1000) {
44
+ return `${microseconds.toFixed(0)} \xB5s`;
45
+ }
46
+ const ms = microseconds / 1000;
47
+ if (ms < 1000) {
48
+ return `${ms.toFixed(2)} ms`;
49
+ }
50
+ const seconds = ms / 1000;
51
+ return `${seconds.toFixed(2)} s`;
52
+ }
53
+ function formatUptime(seconds) {
54
+ const days = Math.floor(seconds / 86400);
55
+ const hours = Math.floor(seconds % 86400 / 3600);
56
+ const minutes = Math.floor(seconds % 3600 / 60);
57
+ const secs = Math.floor(seconds % 60);
58
+ const parts = [];
59
+ if (days > 0)
60
+ parts.push(`${days}d`);
61
+ if (hours > 0)
62
+ parts.push(`${hours}h`);
63
+ if (minutes > 0)
64
+ parts.push(`${minutes}m`);
65
+ if (secs > 0 || parts.length === 0)
66
+ parts.push(`${secs}s`);
67
+ return parts.join(" ");
68
+ }
69
+ function getMetricsSummary(metrics) {
70
+ return {
71
+ memoryHeapUsed: formatBytes(metrics.memoryHeapUsed),
72
+ memoryHeapTotal: formatBytes(metrics.memoryHeapTotal),
73
+ memoryExternal: formatBytes(metrics.memoryExternal),
74
+ memoryRss: formatBytes(metrics.memoryRss),
75
+ cpuUser: formatMicroseconds(metrics.cpuUser),
76
+ cpuSystem: formatMicroseconds(metrics.cpuSystem),
77
+ uptime: formatUptime(metrics.uptime),
78
+ eventLoopLag: `${metrics.eventLoopLag.toFixed(2)} ms`,
79
+ timestamp: metrics.timestamp
80
+ };
81
+ }
82
+ async function measureEventLoopLag() {
83
+ const start = Bun.nanoseconds();
84
+ await new Promise((resolve) => setTimeout(resolve, 0));
85
+ const end = Bun.nanoseconds();
86
+ return (end - start) / 1e6;
87
+ }
88
+ async function measureEventLoopLagAverage(samples = 5) {
89
+ const measurements = [];
90
+ for (let i = 0;i < samples; i++) {
91
+ measurements.push(await measureEventLoopLag());
92
+ }
93
+ return measurements.reduce((a, b) => a + b, 0) / measurements.length;
94
+ }
95
+
96
+ class MetricsCollector {
97
+ history = [];
98
+ maxHistorySize;
99
+ measureEventLoopLagEnabled;
100
+ periodicTimer = null;
101
+ lastCpuUsage = undefined;
102
+ constructor(options = {}) {
103
+ this.maxHistorySize = options.maxHistorySize ?? 100;
104
+ this.measureEventLoopLagEnabled = options.measureEventLoopLag ?? true;
105
+ }
106
+ async collect() {
107
+ const memUsage = process.memoryUsage();
108
+ const cpuUsage = process.cpuUsage(this.lastCpuUsage);
109
+ this.lastCpuUsage = process.cpuUsage();
110
+ const uptime = process.uptime();
111
+ let eventLoopLag = 0;
112
+ if (this.measureEventLoopLagEnabled) {
113
+ eventLoopLag = await measureEventLoopLag();
114
+ }
115
+ const metrics = {
116
+ memoryHeapUsed: memUsage.heapUsed,
117
+ memoryHeapTotal: memUsage.heapTotal,
118
+ memoryExternal: memUsage.external,
119
+ memoryRss: memUsage.rss,
120
+ cpuUser: cpuUsage.user,
121
+ cpuSystem: cpuUsage.system,
122
+ uptime,
123
+ eventLoopLag,
124
+ timestamp: new Date().toISOString()
125
+ };
126
+ this.history.push(metrics);
127
+ if (this.history.length > this.maxHistorySize) {
128
+ this.history.shift();
129
+ }
130
+ return metrics;
131
+ }
132
+ startPeriodicCollection(intervalMs = 5000) {
133
+ if (this.periodicTimer !== null) {
134
+ throw new Error("Periodic collection is already running");
135
+ }
136
+ this.collect().catch(() => {});
137
+ this.periodicTimer = setInterval(() => {
138
+ this.collect().catch(() => {});
139
+ }, intervalMs);
140
+ }
141
+ stopPeriodicCollection() {
142
+ if (this.periodicTimer !== null) {
143
+ clearInterval(this.periodicTimer);
144
+ this.periodicTimer = null;
145
+ }
146
+ }
147
+ isCollecting() {
148
+ return this.periodicTimer !== null;
149
+ }
150
+ getHistory() {
151
+ return [...this.history];
152
+ }
153
+ getLatest() {
154
+ return this.history.length > 0 ? { ...this.history[this.history.length - 1] } : null;
155
+ }
156
+ getAverage() {
157
+ if (this.history.length === 0) {
158
+ return null;
159
+ }
160
+ const count = this.history.length;
161
+ let sumHeapUsed = 0;
162
+ let sumHeapTotal = 0;
163
+ let sumExternal = 0;
164
+ let sumRss = 0;
165
+ let sumCpuUser = 0;
166
+ let sumCpuSystem = 0;
167
+ let sumEventLoopLag = 0;
168
+ let minHeapUsed = Number.POSITIVE_INFINITY;
169
+ let maxHeapUsed = 0;
170
+ for (const m of this.history) {
171
+ sumHeapUsed += m.memoryHeapUsed;
172
+ sumHeapTotal += m.memoryHeapTotal;
173
+ sumExternal += m.memoryExternal;
174
+ sumRss += m.memoryRss;
175
+ sumCpuUser += m.cpuUser;
176
+ sumCpuSystem += m.cpuSystem;
177
+ sumEventLoopLag += m.eventLoopLag;
178
+ minHeapUsed = Math.min(minHeapUsed, m.memoryHeapUsed);
179
+ maxHeapUsed = Math.max(maxHeapUsed, m.memoryHeapUsed);
180
+ }
181
+ return {
182
+ avgMemoryHeapUsed: Math.round(sumHeapUsed / count),
183
+ avgMemoryHeapTotal: Math.round(sumHeapTotal / count),
184
+ avgMemoryExternal: Math.round(sumExternal / count),
185
+ avgMemoryRss: Math.round(sumRss / count),
186
+ avgCpuUser: Math.round(sumCpuUser / count),
187
+ avgCpuSystem: Math.round(sumCpuSystem / count),
188
+ avgEventLoopLag: Math.round(sumEventLoopLag / count * 100) / 100,
189
+ minMemoryHeapUsed: minHeapUsed === Number.POSITIVE_INFINITY ? 0 : minHeapUsed,
190
+ maxMemoryHeapUsed: maxHeapUsed,
191
+ sampleCount: count,
192
+ timeRange: {
193
+ start: this.history[0].timestamp,
194
+ end: this.history[count - 1].timestamp
195
+ }
196
+ };
197
+ }
198
+ reset() {
199
+ this.history = [];
200
+ this.lastCpuUsage = undefined;
201
+ }
202
+ getHistorySize() {
203
+ return this.history.length;
204
+ }
205
+ }
206
+ function toPrometheusFormat(metrics) {
207
+ const timestamp = Date.now();
208
+ const lines = [];
209
+ lines.push("# HELP process_memory_heap_used_bytes Heap memory used in bytes");
210
+ lines.push("# TYPE process_memory_heap_used_bytes gauge");
211
+ lines.push(`process_memory_heap_used_bytes ${metrics.memoryHeapUsed} ${timestamp}`);
212
+ lines.push("# HELP process_memory_heap_total_bytes Total heap memory in bytes");
213
+ lines.push("# TYPE process_memory_heap_total_bytes gauge");
214
+ lines.push(`process_memory_heap_total_bytes ${metrics.memoryHeapTotal} ${timestamp}`);
215
+ lines.push("# HELP process_memory_external_bytes External memory in bytes");
216
+ lines.push("# TYPE process_memory_external_bytes gauge");
217
+ lines.push(`process_memory_external_bytes ${metrics.memoryExternal} ${timestamp}`);
218
+ lines.push("# HELP process_memory_rss_bytes Resident Set Size in bytes");
219
+ lines.push("# TYPE process_memory_rss_bytes gauge");
220
+ lines.push(`process_memory_rss_bytes ${metrics.memoryRss} ${timestamp}`);
221
+ lines.push("# HELP process_cpu_user_seconds_total Total user CPU time");
222
+ lines.push("# TYPE process_cpu_user_seconds_total counter");
223
+ lines.push(`process_cpu_user_seconds_total ${(metrics.cpuUser / 1e6).toFixed(6)} ${timestamp}`);
224
+ lines.push("# HELP process_cpu_system_seconds_total Total system CPU time");
225
+ lines.push("# TYPE process_cpu_system_seconds_total counter");
226
+ lines.push(`process_cpu_system_seconds_total ${(metrics.cpuSystem / 1e6).toFixed(6)} ${timestamp}`);
227
+ lines.push("# HELP process_uptime_seconds Process uptime in seconds");
228
+ lines.push("# TYPE process_uptime_seconds gauge");
229
+ lines.push(`process_uptime_seconds ${metrics.uptime.toFixed(2)} ${timestamp}`);
230
+ lines.push("# HELP nodejs_eventloop_lag_ms Event loop lag in milliseconds");
231
+ lines.push("# TYPE nodejs_eventloop_lag_ms gauge");
232
+ lines.push(`nodejs_eventloop_lag_ms ${metrics.eventLoopLag.toFixed(2)} ${timestamp}`);
233
+ return lines.join(`
234
+ `);
235
+ }
236
+ function averagedMetricsToPrometheus(averaged) {
237
+ const timestamp = Date.now();
238
+ const lines = [];
239
+ lines.push("# HELP process_memory_heap_used_avg_bytes Average heap memory used");
240
+ lines.push("# TYPE process_memory_heap_used_avg_bytes gauge");
241
+ lines.push(`process_memory_heap_used_avg_bytes ${averaged.avgMemoryHeapUsed} ${timestamp}`);
242
+ lines.push("# HELP process_memory_heap_used_min_bytes Minimum heap memory used");
243
+ lines.push("# TYPE process_memory_heap_used_min_bytes gauge");
244
+ lines.push(`process_memory_heap_used_min_bytes ${averaged.minMemoryHeapUsed} ${timestamp}`);
245
+ lines.push("# HELP process_memory_heap_used_max_bytes Maximum heap memory used");
246
+ lines.push("# TYPE process_memory_heap_used_max_bytes gauge");
247
+ lines.push(`process_memory_heap_used_max_bytes ${averaged.maxMemoryHeapUsed} ${timestamp}`);
248
+ lines.push("# HELP process_eventloop_lag_avg_ms Average event loop lag");
249
+ lines.push("# TYPE process_eventloop_lag_avg_ms gauge");
250
+ lines.push(`process_eventloop_lag_avg_ms ${averaged.avgEventLoopLag.toFixed(2)} ${timestamp}`);
251
+ lines.push("# HELP process_metrics_sample_count Number of samples collected");
252
+ lines.push("# TYPE process_metrics_sample_count gauge");
253
+ lines.push(`process_metrics_sample_count ${averaged.sampleCount} ${timestamp}`);
254
+ return lines.join(`
255
+ `);
256
+ }
257
+ function createMetricsCollector(options) {
258
+ return new MetricsCollector(options);
259
+ }
260
+ async function collectMetrics() {
261
+ const memUsage = process.memoryUsage();
262
+ const cpuUsage = process.cpuUsage();
263
+ const uptime = process.uptime();
264
+ const eventLoopLag = await measureEventLoopLag();
265
+ return {
266
+ memoryHeapUsed: memUsage.heapUsed,
267
+ memoryHeapTotal: memUsage.heapTotal,
268
+ memoryExternal: memUsage.external,
269
+ memoryRss: memUsage.rss,
270
+ cpuUser: cpuUsage.user,
271
+ cpuSystem: cpuUsage.system,
272
+ uptime,
273
+ eventLoopLag,
274
+ timestamp: new Date().toISOString()
275
+ };
276
+ }
277
+ export {
278
+ toPrometheusFormat,
279
+ measureEventLoopLagAverage,
280
+ measureEventLoopLag,
281
+ getMetricsSummary,
282
+ formatUptime,
283
+ formatMicroseconds,
284
+ formatBytes,
285
+ createMetricsCollector,
286
+ collectMetrics,
287
+ averagedMetricsToPrometheus,
288
+ MetricsCollector
289
+ };
@@ -0,0 +1,77 @@
1
+ // @bun
2
+ var __defProp = Object.defineProperty;
3
+ var __export = (target, all) => {
4
+ for (var name in all)
5
+ __defProp(target, name, {
6
+ get: all[name],
7
+ enumerable: true,
8
+ configurable: true,
9
+ set: (newValue) => all[name] = () => newValue
10
+ });
11
+ };
12
+ var __legacyDecorateClassTS = function(decorators, target, key, desc) {
13
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
15
+ r = Reflect.decorate(decorators, target, key, desc);
16
+ else
17
+ for (var i = decorators.length - 1;i >= 0; i--)
18
+ if (d = decorators[i])
19
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
21
+ };
22
+ var __legacyMetadataTS = (k, v) => {
23
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
24
+ return Reflect.metadata(k, v);
25
+ };
26
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
27
+ var __require = import.meta.require;
28
+
29
+ // src/middleware/index.ts
30
+ var exports_middleware = {};
31
+ __export(exports_middleware, {
32
+ createPipeline: () => createPipeline,
33
+ compose: () => compose,
34
+ Pipeline: () => Pipeline
35
+ });
36
+ function compose(middleware) {
37
+ return async (context, handler) => {
38
+ let index = -1;
39
+ const dispatch = async (i) => {
40
+ if (i <= index) {
41
+ throw new Error("next() called multiple times");
42
+ }
43
+ index = i;
44
+ if (i >= middleware.length) {
45
+ return handler(context);
46
+ }
47
+ const fn = middleware[i];
48
+ return fn(context, async () => {
49
+ return dispatch(i + 1);
50
+ });
51
+ };
52
+ return dispatch(0);
53
+ };
54
+ }
55
+
56
+ class Pipeline {
57
+ middleware = [];
58
+ use(middleware) {
59
+ this.middleware.push(middleware);
60
+ return this;
61
+ }
62
+ async execute(context, handler) {
63
+ const fn = compose(this.middleware);
64
+ return fn(context, handler);
65
+ }
66
+ get length() {
67
+ return this.middleware.length;
68
+ }
69
+ }
70
+ function createPipeline() {
71
+ return new Pipeline;
72
+ }
73
+ export {
74
+ createPipeline,
75
+ compose,
76
+ Pipeline
77
+ };