@alepha/devtools 0.11.11 → 0.12.0

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.
package/README.md CHANGED
@@ -17,14 +17,3 @@ Developer tools module for monitoring and debugging Alepha applications.
17
17
  This module provides comprehensive data collection capabilities for tracking application behavior,
18
18
  performance metrics, and debugging information in real-time.
19
19
 
20
- This module can be imported and used as follows:
21
-
22
- ```typescript
23
- import { Alepha, run } from "alepha";
24
- import { AlephaDevtools } from "alepha/devtools";
25
-
26
- const alepha = Alepha.create()
27
- .with(AlephaDevtools);
28
-
29
- run(alepha);
30
- ```
package/dist/index.cjs CHANGED
@@ -1,47 +1,47 @@
1
- let __alepha_core = require("@alepha/core");
1
+ let alepha = require("alepha");
2
2
  let node_path = require("node:path");
3
3
  let node_url = require("node:url");
4
- let __alepha_batch = require("@alepha/batch");
5
- let __alepha_logger = require("@alepha/logger");
6
- let __alepha_orm = require("@alepha/orm");
7
- let __alepha_server = require("@alepha/server");
8
- let __alepha_server_static = require("@alepha/server-static");
9
- let __alepha_bucket = require("@alepha/bucket");
10
- let __alepha_cache = require("@alepha/cache");
11
- let __alepha_queue = require("@alepha/queue");
12
- let __alepha_scheduler = require("@alepha/scheduler");
13
- let __alepha_security = require("@alepha/security");
14
- let __alepha_topic = require("@alepha/topic");
4
+ let alepha_batch = require("alepha/batch");
5
+ let alepha_logger = require("alepha/logger");
6
+ let alepha_orm = require("alepha/orm");
7
+ let alepha_server = require("alepha/server");
8
+ let alepha_server_static = require("alepha/server/static");
9
+ let alepha_bucket = require("alepha/bucket");
10
+ let alepha_cache = require("alepha/cache");
11
+ let alepha_queue = require("alepha/queue");
12
+ let alepha_scheduler = require("alepha/scheduler");
13
+ let alepha_security = require("alepha/security");
14
+ let alepha_topic = require("alepha/topic");
15
15
 
16
16
  //#region src/entities/logs.ts
17
- const logs = (0, __alepha_orm.$entity)({
17
+ const logs = (0, alepha_orm.$entity)({
18
18
  name: "logs",
19
- schema: __alepha_core.t.object({
20
- id: __alepha_orm.pg.primaryKey(),
21
- level: __alepha_core.t.enum([
19
+ schema: alepha.t.object({
20
+ id: alepha_orm.pg.primaryKey(),
21
+ level: alepha.t.enum([
22
22
  "TRACE",
23
23
  "DEBUG",
24
24
  "INFO",
25
25
  "WARN",
26
26
  "ERROR"
27
27
  ]),
28
- message: __alepha_core.t.text({ size: "rich" }),
29
- service: __alepha_core.t.text(),
30
- module: __alepha_core.t.text(),
31
- context: __alepha_core.t.optional(__alepha_core.t.text()),
32
- app: __alepha_core.t.optional(__alepha_core.t.text()),
33
- data: __alepha_core.t.optional(__alepha_core.t.json()),
34
- timestamp: __alepha_core.t.datetime()
28
+ message: alepha.t.text({ size: "rich" }),
29
+ service: alepha.t.text(),
30
+ module: alepha.t.text(),
31
+ context: alepha.t.optional(alepha.t.text()),
32
+ app: alepha.t.optional(alepha.t.text()),
33
+ data: alepha.t.optional(alepha.t.json()),
34
+ timestamp: alepha.t.datetime()
35
35
  })
36
36
  });
37
37
 
38
38
  //#endregion
39
39
  //#region src/providers/DevToolsMetadataProvider.ts
40
40
  var DevToolsMetadataProvider = class {
41
- alepha = (0, __alepha_core.$inject)(__alepha_core.Alepha);
42
- log = (0, __alepha_logger.$logger)();
41
+ alepha = (0, alepha.$inject)(alepha.Alepha);
42
+ log = (0, alepha_logger.$logger)();
43
43
  getActions() {
44
- return this.alepha.descriptors(__alepha_server.$action).map((action) => {
44
+ return this.alepha.descriptors(alepha_server.$action).map((action) => {
45
45
  const schema = action.schema;
46
46
  const options = action.options;
47
47
  return {
@@ -65,7 +65,7 @@ var DevToolsMetadataProvider = class {
65
65
  });
66
66
  }
67
67
  getQueues() {
68
- return this.alepha.descriptors(__alepha_queue.$queue).map((queue) => ({
68
+ return this.alepha.descriptors(alepha_queue.$queue).map((queue) => ({
69
69
  name: queue.name,
70
70
  description: queue.options.description,
71
71
  schema: queue.options.schema,
@@ -73,7 +73,7 @@ var DevToolsMetadataProvider = class {
73
73
  }));
74
74
  }
75
75
  getSchedulers() {
76
- return this.alepha.descriptors(__alepha_scheduler.$scheduler).map((scheduler) => ({
76
+ return this.alepha.descriptors(alepha_scheduler.$scheduler).map((scheduler) => ({
77
77
  name: scheduler.name,
78
78
  description: scheduler.options.description,
79
79
  cron: scheduler.options.cron,
@@ -82,7 +82,7 @@ var DevToolsMetadataProvider = class {
82
82
  }));
83
83
  }
84
84
  getTopics() {
85
- return this.alepha.descriptors(__alepha_topic.$topic).map((topic) => ({
85
+ return this.alepha.descriptors(alepha_topic.$topic).map((topic) => ({
86
86
  name: topic.name,
87
87
  description: topic.options.description,
88
88
  schema: topic.options.schema,
@@ -90,7 +90,7 @@ var DevToolsMetadataProvider = class {
90
90
  }));
91
91
  }
92
92
  getBuckets() {
93
- return this.alepha.descriptors(__alepha_bucket.$bucket).map((bucket) => ({
93
+ return this.alepha.descriptors(alepha_bucket.$bucket).map((bucket) => ({
94
94
  name: bucket.name,
95
95
  description: bucket.options.description,
96
96
  mimeTypes: bucket.options.mimeTypes,
@@ -99,7 +99,7 @@ var DevToolsMetadataProvider = class {
99
99
  }));
100
100
  }
101
101
  getRealms() {
102
- return this.alepha.descriptors(__alepha_security.$realm).map((realm) => ({
102
+ return this.alepha.descriptors(alepha_security.$realm).map((realm) => ({
103
103
  name: realm.name,
104
104
  description: realm.options.description,
105
105
  roles: realm.options.roles,
@@ -114,7 +114,7 @@ var DevToolsMetadataProvider = class {
114
114
  }));
115
115
  }
116
116
  getCaches() {
117
- return this.alepha.descriptors(__alepha_cache.$cache).map((cache) => ({
117
+ return this.alepha.descriptors(alepha_cache.$cache).map((cache) => ({
118
118
  name: cache.container,
119
119
  ttl: cache.options.ttl,
120
120
  disabled: cache.options.disabled,
@@ -168,7 +168,7 @@ var DevToolsMetadataProvider = class {
168
168
 
169
169
  //#endregion
170
170
  //#region src/providers/DevToolsDatabaseProvider.ts
171
- var DevToolsDatabaseProvider = class extends __alepha_orm.NodeSqliteProvider {
171
+ var DevToolsDatabaseProvider = class extends alepha_orm.NodeSqliteProvider {
172
172
  get name() {
173
173
  return "devtools";
174
174
  }
@@ -177,7 +177,7 @@ var DevToolsDatabaseProvider = class extends __alepha_orm.NodeSqliteProvider {
177
177
 
178
178
  //#endregion
179
179
  //#region src/repositories/LogRepository.ts
180
- var LogRepository = class extends __alepha_orm.Repository {
180
+ var LogRepository = class extends alepha_orm.Repository {
181
181
  constructor() {
182
182
  super(logs, DevToolsDatabaseProvider);
183
183
  }
@@ -185,155 +185,155 @@ var LogRepository = class extends __alepha_orm.Repository {
185
185
 
186
186
  //#endregion
187
187
  //#region src/schemas/DevActionMetadata.ts
188
- const devActionMetadataSchema = __alepha_core.t.object({
189
- name: __alepha_core.t.text(),
190
- group: __alepha_core.t.text(),
191
- method: __alepha_core.t.text(),
192
- path: __alepha_core.t.text(),
193
- prefix: __alepha_core.t.text(),
194
- fullPath: __alepha_core.t.text(),
195
- description: __alepha_core.t.optional(__alepha_core.t.text()),
196
- summary: __alepha_core.t.optional(__alepha_core.t.text()),
197
- disabled: __alepha_core.t.optional(__alepha_core.t.boolean()),
198
- secure: __alepha_core.t.optional(__alepha_core.t.boolean()),
199
- hide: __alepha_core.t.optional(__alepha_core.t.boolean()),
200
- body: __alepha_core.t.optional(__alepha_core.t.any()),
201
- params: __alepha_core.t.optional(__alepha_core.t.any()),
202
- query: __alepha_core.t.optional(__alepha_core.t.any()),
203
- response: __alepha_core.t.optional(__alepha_core.t.any()),
204
- bodyContentType: __alepha_core.t.optional(__alepha_core.t.text())
188
+ const devActionMetadataSchema = alepha.t.object({
189
+ name: alepha.t.text(),
190
+ group: alepha.t.text(),
191
+ method: alepha.t.text(),
192
+ path: alepha.t.text(),
193
+ prefix: alepha.t.text(),
194
+ fullPath: alepha.t.text(),
195
+ description: alepha.t.optional(alepha.t.text()),
196
+ summary: alepha.t.optional(alepha.t.text()),
197
+ disabled: alepha.t.optional(alepha.t.boolean()),
198
+ secure: alepha.t.optional(alepha.t.boolean()),
199
+ hide: alepha.t.optional(alepha.t.boolean()),
200
+ body: alepha.t.optional(alepha.t.any()),
201
+ params: alepha.t.optional(alepha.t.any()),
202
+ query: alepha.t.optional(alepha.t.any()),
203
+ response: alepha.t.optional(alepha.t.any()),
204
+ bodyContentType: alepha.t.optional(alepha.t.text())
205
205
  });
206
206
 
207
207
  //#endregion
208
208
  //#region src/schemas/DevBucketMetadata.ts
209
- const devBucketMetadataSchema = __alepha_core.t.object({
210
- name: __alepha_core.t.text(),
211
- description: __alepha_core.t.optional(__alepha_core.t.text()),
212
- mimeTypes: __alepha_core.t.optional(__alepha_core.t.array(__alepha_core.t.text())),
213
- maxSize: __alepha_core.t.optional(__alepha_core.t.number()),
214
- provider: __alepha_core.t.text()
209
+ const devBucketMetadataSchema = alepha.t.object({
210
+ name: alepha.t.text(),
211
+ description: alepha.t.optional(alepha.t.text()),
212
+ mimeTypes: alepha.t.optional(alepha.t.array(alepha.t.text())),
213
+ maxSize: alepha.t.optional(alepha.t.number()),
214
+ provider: alepha.t.text()
215
215
  });
216
216
 
217
217
  //#endregion
218
218
  //#region src/schemas/DevCacheMetadata.ts
219
- const devCacheMetadataSchema = __alepha_core.t.object({
220
- name: __alepha_core.t.text(),
221
- ttl: __alepha_core.t.optional(__alepha_core.t.any()),
222
- disabled: __alepha_core.t.optional(__alepha_core.t.boolean()),
223
- provider: __alepha_core.t.text()
219
+ const devCacheMetadataSchema = alepha.t.object({
220
+ name: alepha.t.text(),
221
+ ttl: alepha.t.optional(alepha.t.any()),
222
+ disabled: alepha.t.optional(alepha.t.boolean()),
223
+ provider: alepha.t.text()
224
224
  });
225
225
 
226
226
  //#endregion
227
227
  //#region src/schemas/DevModuleMetadata.ts
228
- const devModuleMetadataSchema = __alepha_core.t.object({
229
- name: __alepha_core.t.text(),
230
- providers: __alepha_core.t.array(__alepha_core.t.text())
228
+ const devModuleMetadataSchema = alepha.t.object({
229
+ name: alepha.t.text(),
230
+ providers: alepha.t.array(alepha.t.text())
231
231
  });
232
232
 
233
233
  //#endregion
234
234
  //#region src/schemas/DevPageMetadata.ts
235
- const devPageMetadataSchema = __alepha_core.t.object({
236
- name: __alepha_core.t.text(),
237
- description: __alepha_core.t.optional(__alepha_core.t.text()),
238
- path: __alepha_core.t.optional(__alepha_core.t.text()),
239
- params: __alepha_core.t.optional(__alepha_core.t.any()),
240
- query: __alepha_core.t.optional(__alepha_core.t.any()),
241
- hasComponent: __alepha_core.t.boolean(),
242
- hasLazy: __alepha_core.t.boolean(),
243
- hasResolve: __alepha_core.t.boolean(),
244
- hasChildren: __alepha_core.t.boolean(),
245
- hasParent: __alepha_core.t.boolean(),
246
- hasErrorHandler: __alepha_core.t.boolean(),
247
- static: __alepha_core.t.optional(__alepha_core.t.boolean()),
248
- cache: __alepha_core.t.optional(__alepha_core.t.any()),
249
- client: __alepha_core.t.optional(__alepha_core.t.any()),
250
- animation: __alepha_core.t.optional(__alepha_core.t.any())
235
+ const devPageMetadataSchema = alepha.t.object({
236
+ name: alepha.t.text(),
237
+ description: alepha.t.optional(alepha.t.text()),
238
+ path: alepha.t.optional(alepha.t.text()),
239
+ params: alepha.t.optional(alepha.t.any()),
240
+ query: alepha.t.optional(alepha.t.any()),
241
+ hasComponent: alepha.t.boolean(),
242
+ hasLazy: alepha.t.boolean(),
243
+ hasResolve: alepha.t.boolean(),
244
+ hasChildren: alepha.t.boolean(),
245
+ hasParent: alepha.t.boolean(),
246
+ hasErrorHandler: alepha.t.boolean(),
247
+ static: alepha.t.optional(alepha.t.boolean()),
248
+ cache: alepha.t.optional(alepha.t.any()),
249
+ client: alepha.t.optional(alepha.t.any()),
250
+ animation: alepha.t.optional(alepha.t.any())
251
251
  });
252
252
 
253
253
  //#endregion
254
254
  //#region src/schemas/DevProviderMetadata.ts
255
- const devProviderMetadataSchema = __alepha_core.t.object({
256
- name: __alepha_core.t.text(),
257
- module: __alepha_core.t.optional(__alepha_core.t.text()),
258
- dependencies: __alepha_core.t.array(__alepha_core.t.text()),
259
- aliases: __alepha_core.t.optional(__alepha_core.t.array(__alepha_core.t.text()))
255
+ const devProviderMetadataSchema = alepha.t.object({
256
+ name: alepha.t.text(),
257
+ module: alepha.t.optional(alepha.t.text()),
258
+ dependencies: alepha.t.array(alepha.t.text()),
259
+ aliases: alepha.t.optional(alepha.t.array(alepha.t.text()))
260
260
  });
261
261
 
262
262
  //#endregion
263
263
  //#region src/schemas/DevQueueMetadata.ts
264
- const devQueueMetadataSchema = __alepha_core.t.object({
265
- name: __alepha_core.t.text(),
266
- description: __alepha_core.t.optional(__alepha_core.t.text()),
267
- schema: __alepha_core.t.optional(__alepha_core.t.any()),
268
- provider: __alepha_core.t.text()
264
+ const devQueueMetadataSchema = alepha.t.object({
265
+ name: alepha.t.text(),
266
+ description: alepha.t.optional(alepha.t.text()),
267
+ schema: alepha.t.optional(alepha.t.any()),
268
+ provider: alepha.t.text()
269
269
  });
270
270
 
271
271
  //#endregion
272
272
  //#region src/schemas/DevRealmMetadata.ts
273
- const devRealmMetadataSchema = __alepha_core.t.object({
274
- name: __alepha_core.t.text(),
275
- description: __alepha_core.t.optional(__alepha_core.t.text()),
276
- roles: __alepha_core.t.optional(__alepha_core.t.array(__alepha_core.t.any())),
277
- type: __alepha_core.t.enum(["internal", "external"]),
278
- settings: __alepha_core.t.optional(__alepha_core.t.object({
279
- accessTokenExpiration: __alepha_core.t.optional(__alepha_core.t.any()),
280
- refreshTokenExpiration: __alepha_core.t.optional(__alepha_core.t.any()),
281
- hasOnCreateSession: __alepha_core.t.boolean(),
282
- hasOnRefreshSession: __alepha_core.t.boolean(),
283
- hasOnDeleteSession: __alepha_core.t.boolean()
273
+ const devRealmMetadataSchema = alepha.t.object({
274
+ name: alepha.t.text(),
275
+ description: alepha.t.optional(alepha.t.text()),
276
+ roles: alepha.t.optional(alepha.t.array(alepha.t.any())),
277
+ type: alepha.t.enum(["internal", "external"]),
278
+ settings: alepha.t.optional(alepha.t.object({
279
+ accessTokenExpiration: alepha.t.optional(alepha.t.any()),
280
+ refreshTokenExpiration: alepha.t.optional(alepha.t.any()),
281
+ hasOnCreateSession: alepha.t.boolean(),
282
+ hasOnRefreshSession: alepha.t.boolean(),
283
+ hasOnDeleteSession: alepha.t.boolean()
284
284
  }))
285
285
  });
286
286
 
287
287
  //#endregion
288
288
  //#region src/schemas/DevSchedulerMetadata.ts
289
- const devSchedulerMetadataSchema = __alepha_core.t.object({
290
- name: __alepha_core.t.text(),
291
- description: __alepha_core.t.optional(__alepha_core.t.text()),
292
- cron: __alepha_core.t.optional(__alepha_core.t.text()),
293
- interval: __alepha_core.t.optional(__alepha_core.t.any()),
294
- lock: __alepha_core.t.optional(__alepha_core.t.boolean())
289
+ const devSchedulerMetadataSchema = alepha.t.object({
290
+ name: alepha.t.text(),
291
+ description: alepha.t.optional(alepha.t.text()),
292
+ cron: alepha.t.optional(alepha.t.text()),
293
+ interval: alepha.t.optional(alepha.t.any()),
294
+ lock: alepha.t.optional(alepha.t.boolean())
295
295
  });
296
296
 
297
297
  //#endregion
298
298
  //#region src/schemas/DevTopicMetadata.ts
299
- const devTopicMetadataSchema = __alepha_core.t.object({
300
- name: __alepha_core.t.text(),
301
- description: __alepha_core.t.optional(__alepha_core.t.text()),
302
- schema: __alepha_core.t.optional(__alepha_core.t.any()),
303
- provider: __alepha_core.t.text()
299
+ const devTopicMetadataSchema = alepha.t.object({
300
+ name: alepha.t.text(),
301
+ description: alepha.t.optional(alepha.t.text()),
302
+ schema: alepha.t.optional(alepha.t.any()),
303
+ provider: alepha.t.text()
304
304
  });
305
305
 
306
306
  //#endregion
307
307
  //#region src/schemas/DevMetadata.ts
308
- const devMetadataSchema = __alepha_core.t.object({
309
- actions: __alepha_core.t.array(devActionMetadataSchema),
310
- queues: __alepha_core.t.array(devQueueMetadataSchema),
311
- schedulers: __alepha_core.t.array(devSchedulerMetadataSchema),
312
- topics: __alepha_core.t.array(devTopicMetadataSchema),
313
- buckets: __alepha_core.t.array(devBucketMetadataSchema),
314
- realms: __alepha_core.t.array(devRealmMetadataSchema),
315
- caches: __alepha_core.t.array(devCacheMetadataSchema),
316
- pages: __alepha_core.t.array(devPageMetadataSchema),
317
- providers: __alepha_core.t.array(devProviderMetadataSchema),
318
- modules: __alepha_core.t.array(devModuleMetadataSchema)
308
+ const devMetadataSchema = alepha.t.object({
309
+ actions: alepha.t.array(devActionMetadataSchema),
310
+ queues: alepha.t.array(devQueueMetadataSchema),
311
+ schedulers: alepha.t.array(devSchedulerMetadataSchema),
312
+ topics: alepha.t.array(devTopicMetadataSchema),
313
+ buckets: alepha.t.array(devBucketMetadataSchema),
314
+ realms: alepha.t.array(devRealmMetadataSchema),
315
+ caches: alepha.t.array(devCacheMetadataSchema),
316
+ pages: alepha.t.array(devPageMetadataSchema),
317
+ providers: alepha.t.array(devProviderMetadataSchema),
318
+ modules: alepha.t.array(devModuleMetadataSchema)
319
319
  });
320
320
 
321
321
  //#endregion
322
322
  //#region src/DevToolsProvider.ts
323
323
  var DevToolsProvider = class {
324
- log = (0, __alepha_logger.$logger)();
325
- alepha = (0, __alepha_core.$inject)(__alepha_core.Alepha);
326
- serverProvider = (0, __alepha_core.$inject)(__alepha_server.ServerProvider);
327
- jsonFormatter = (0, __alepha_core.$inject)(__alepha_logger.JsonFormatterProvider);
328
- logs = (0, __alepha_core.$inject)(LogRepository);
329
- devCollectorProvider = (0, __alepha_core.$inject)(DevToolsMetadataProvider);
330
- onStart = (0, __alepha_core.$hook)({
324
+ log = (0, alepha_logger.$logger)();
325
+ alepha = (0, alepha.$inject)(alepha.Alepha);
326
+ serverProvider = (0, alepha.$inject)(alepha_server.ServerProvider);
327
+ jsonFormatter = (0, alepha.$inject)(alepha_logger.JsonFormatterProvider);
328
+ logs = (0, alepha.$inject)(LogRepository);
329
+ devCollectorProvider = (0, alepha.$inject)(DevToolsMetadataProvider);
330
+ onStart = (0, alepha.$hook)({
331
331
  on: "start",
332
332
  handler: () => {
333
333
  this.log.info(`Devtools available at ${this.serverProvider.hostname}/devtools/`);
334
334
  }
335
335
  });
336
- batchLogs = (0, __alepha_batch.$batch)({
336
+ batchLogs = (0, alepha_batch.$batch)({
337
337
  maxSize: 50,
338
338
  maxDuration: [10, "seconds"],
339
339
  schema: logs.insertSchema,
@@ -341,7 +341,7 @@ var DevToolsProvider = class {
341
341
  await this.logs.createMany(entries);
342
342
  }
343
343
  });
344
- onLog = (0, __alepha_core.$hook)({
344
+ onLog = (0, alepha.$hook)({
345
345
  on: "log",
346
346
  handler: async (ev) => {
347
347
  try {
@@ -359,12 +359,12 @@ var DevToolsProvider = class {
359
359
  }
360
360
  }
361
361
  });
362
- uiRoute = (0, __alepha_server_static.$serve)({
362
+ uiRoute = (0, alepha_server_static.$serve)({
363
363
  path: "/devtools",
364
364
  root: (0, node_path.join)((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href), "../../assets/devtools"),
365
365
  historyApiFallback: true
366
366
  });
367
- metadataRoute = (0, __alepha_server.$route)({
367
+ metadataRoute = (0, alepha_server.$route)({
368
368
  method: "GET",
369
369
  path: "/devtools/api/metadata",
370
370
  silent: true,
@@ -373,17 +373,17 @@ var DevToolsProvider = class {
373
373
  return this.devCollectorProvider.getMetadata();
374
374
  }
375
375
  });
376
- logsRoute = (0, __alepha_server.$route)({
376
+ logsRoute = (0, alepha_server.$route)({
377
377
  method: "GET",
378
378
  path: "/devtools/api/logs",
379
379
  silent: true,
380
380
  schema: {
381
- query: __alepha_core.t.extend(__alepha_core.pageQuerySchema, { search: __alepha_core.t.optional(__alepha_core.t.string()) }),
382
- response: __alepha_core.t.page(__alepha_logger.logEntrySchema)
381
+ query: alepha.t.extend(alepha.pageQuerySchema, { search: alepha.t.optional(alepha.t.string()) }),
382
+ response: alepha.t.page(alepha_logger.logEntrySchema)
383
383
  },
384
384
  handler: ({ query }) => {
385
385
  query.sort ??= "-timestamp";
386
- return this.logs.paginate(query, query.search ? { where: (0, __alepha_orm.parseQueryString)(query.search) } : {}, { count: true });
386
+ return this.logs.paginate(query, query.search ? { where: (0, alepha_orm.parseQueryString)(query.search) } : {}, { count: true });
387
387
  }
388
388
  });
389
389
  };
@@ -399,7 +399,7 @@ var DevToolsProvider = class {
399
399
  * @see {@link DevToolsMetadataProvider}
400
400
  * @module alepha.devtools
401
401
  */
402
- const AlephaDevtools = (0, __alepha_core.$module)({
402
+ const AlephaDevtools = (0, alepha.$module)({
403
403
  name: "alepha.devtools",
404
404
  descriptors: [],
405
405
  services: [
@@ -408,11 +408,11 @@ const AlephaDevtools = (0, __alepha_core.$module)({
408
408
  DevToolsDatabaseProvider,
409
409
  LogRepository
410
410
  ],
411
- register: (alepha) => {
412
- alepha.with(DevToolsProvider);
413
- alepha.with(DevToolsDatabaseProvider);
414
- alepha.with(DevToolsMetadataProvider);
415
- alepha.state.push("alepha.build.assets", "@alepha/devtools");
411
+ register: (alepha$1) => {
412
+ alepha$1.with(DevToolsProvider);
413
+ alepha$1.with(DevToolsDatabaseProvider);
414
+ alepha$1.with(DevToolsMetadataProvider);
415
+ alepha$1.state.push("alepha.build.assets", "@alepha/devtools");
416
416
  }
417
417
  });
418
418
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["t","pg","Alepha","$action","$queue","$scheduler","$topic","$bucket","$realm","$cache","NodeSqliteProvider","Repository","t","t","t","t","t","t","t","t","t","t","t","Alepha","ServerProvider","JsonFormatterProvider","t","pageQuerySchema","logEntrySchema"],"sources":["../src/entities/logs.ts","../src/providers/DevToolsMetadataProvider.ts","../src/providers/DevToolsDatabaseProvider.ts","../src/repositories/LogRepository.ts","../src/schemas/DevActionMetadata.ts","../src/schemas/DevBucketMetadata.ts","../src/schemas/DevCacheMetadata.ts","../src/schemas/DevModuleMetadata.ts","../src/schemas/DevPageMetadata.ts","../src/schemas/DevProviderMetadata.ts","../src/schemas/DevQueueMetadata.ts","../src/schemas/DevRealmMetadata.ts","../src/schemas/DevSchedulerMetadata.ts","../src/schemas/DevTopicMetadata.ts","../src/schemas/DevMetadata.ts","../src/DevToolsProvider.ts","../src/index.ts"],"sourcesContent":["import { type Static, t } from \"@alepha/core\";\nimport { $entity, pg } from \"@alepha/orm\";\n\nexport const logs = $entity({\n name: \"logs\",\n schema: t.object({\n id: pg.primaryKey(),\n level: t.enum([\"TRACE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n message: t.text({\n size: \"rich\",\n }),\n service: t.text(),\n module: t.text(),\n context: t.optional(t.text()),\n app: t.optional(t.text()),\n data: t.optional(t.json()),\n timestamp: t.datetime(),\n }),\n});\n\nexport type DevLogEntry = Static<typeof logs.schema>;\n","import { $bucket } from \"@alepha/bucket\";\nimport { $cache } from \"@alepha/cache\";\nimport { $inject, Alepha } from \"@alepha/core\";\nimport { $logger } from \"@alepha/logger\";\nimport { $queue } from \"@alepha/queue\";\nimport { $scheduler } from \"@alepha/scheduler\";\nimport { $realm } from \"@alepha/security\";\nimport { $action } from \"@alepha/server\";\nimport { $topic } from \"@alepha/topic\";\nimport type { DevActionMetadata } from \"../schemas/DevActionMetadata.ts\";\nimport type { DevBucketMetadata } from \"../schemas/DevBucketMetadata.ts\";\nimport type { DevCacheMetadata } from \"../schemas/DevCacheMetadata.ts\";\nimport type { DevMetadata } from \"../schemas/DevMetadata.ts\";\nimport type { DevModuleMetadata } from \"../schemas/DevModuleMetadata.ts\";\nimport type { DevPageMetadata } from \"../schemas/DevPageMetadata.ts\";\nimport type { DevProviderMetadata } from \"../schemas/DevProviderMetadata.ts\";\nimport type { DevQueueMetadata } from \"../schemas/DevQueueMetadata.ts\";\nimport type { DevRealmMetadata } from \"../schemas/DevRealmMetadata.ts\";\nimport type { DevSchedulerMetadata } from \"../schemas/DevSchedulerMetadata.ts\";\nimport type { DevTopicMetadata } from \"../schemas/DevTopicMetadata.ts\";\n\nexport class DevToolsMetadataProvider {\n protected readonly alepha = $inject(Alepha);\n protected readonly log = $logger();\n\n public getActions(): DevActionMetadata[] {\n const actionDescriptors = this.alepha.descriptors($action);\n\n return actionDescriptors.map((action) => {\n const schema = action.schema;\n const options = action.options as any; // Allow accessing augmented properties\n\n return {\n name: action.name,\n group: action.group,\n method: action.method,\n path: action.path,\n prefix: action.prefix,\n fullPath: action.route.path,\n description: action.options.description,\n summary: options.summary,\n disabled: action.options.disabled,\n secure: options.secure,\n hide: options.hide,\n body: schema?.body,\n params: schema?.params,\n query: schema?.query,\n response: schema?.response,\n bodyContentType: action.getBodyContentType(),\n };\n });\n }\n\n public getQueues(): DevQueueMetadata[] {\n const queueDescriptors = this.alepha.descriptors($queue);\n\n return queueDescriptors.map((queue) => ({\n name: queue.name,\n description: queue.options.description,\n schema: queue.options.schema,\n provider: this.getProviderName(queue.options.provider),\n }));\n }\n\n public getSchedulers(): DevSchedulerMetadata[] {\n const schedulerDescriptors = this.alepha.descriptors($scheduler);\n\n return schedulerDescriptors.map((scheduler) => ({\n name: scheduler.name,\n description: scheduler.options.description,\n cron: scheduler.options.cron,\n interval: scheduler.options.interval,\n lock: scheduler.options.lock,\n }));\n }\n\n public getTopics(): DevTopicMetadata[] {\n const topicDescriptors = this.alepha.descriptors($topic);\n\n return topicDescriptors.map((topic) => ({\n name: topic.name,\n description: topic.options.description,\n schema: topic.options.schema,\n provider: this.getProviderName(topic.options.provider),\n }));\n }\n\n public getBuckets(): DevBucketMetadata[] {\n const bucketDescriptors = this.alepha.descriptors($bucket);\n\n return bucketDescriptors.map((bucket) => ({\n name: bucket.name,\n description: bucket.options.description,\n mimeTypes: bucket.options.mimeTypes,\n maxSize: bucket.options.maxSize,\n provider: this.getProviderName(bucket.options.provider),\n }));\n }\n\n public getRealms(): DevRealmMetadata[] {\n const realmDescriptors = this.alepha.descriptors($realm);\n\n return realmDescriptors.map((realm) => ({\n name: realm.name,\n description: realm.options.description,\n roles: realm.options.roles,\n type: \"secret\" in realm.options ? \"internal\" : \"external\",\n settings: {\n accessTokenExpiration: realm.options.settings?.accessToken?.expiration,\n refreshTokenExpiration:\n realm.options.settings?.refreshToken?.expiration,\n hasOnCreateSession: !!realm.options.settings?.onCreateSession,\n hasOnRefreshSession: !!realm.options.settings?.onRefreshSession,\n hasOnDeleteSession: !!realm.options.settings?.onDeleteSession,\n },\n }));\n }\n\n public getCaches(): DevCacheMetadata[] {\n const cacheDescriptors = this.alepha.descriptors($cache);\n\n return cacheDescriptors.map((cache) => ({\n name: cache.container,\n ttl: cache.options.ttl,\n disabled: cache.options.disabled,\n provider: this.getProviderName(cache.options.provider),\n }));\n }\n\n public getPages(): DevPageMetadata[] {\n // const pageDescriptors = this.alepha.descriptors($page);\n //\n // return pageDescriptors.map((page) => ({\n // name: page.name,\n // description: page.options.description,\n // path: page.options.path,\n // params: page.options.schema?.params,\n // query: page.options.schema?.query,\n // hasComponent: !!page.options.component,\n // hasLazy: !!page.options.lazy,\n // hasResolve: !!page.options.resolve,\n // hasChildren: !!page.options.children,\n // hasParent: !!page.options.parent,\n // hasErrorHandler: !!page.options.errorHandler,\n // static:\n // typeof page.options.static === \"boolean\"\n // ? page.options.static\n // : !!page.options.static,\n // cache: page.options.cache,\n // client: page.options.client,\n // animation: page.options.animation,\n // }));\n\n return [];\n }\n\n public getProviders(): DevProviderMetadata[] {\n const graph = this.alepha.graph();\n\n return Object.entries(graph).map(([name, info]) => ({\n name,\n module: info.module,\n dependencies: info.from,\n aliases: info.as,\n }));\n }\n\n public getModules(): DevModuleMetadata[] {\n const graph = this.alepha.graph();\n const moduleMap = new Map<string, Set<string>>();\n\n // Group providers by module\n for (const [providerName, info] of Object.entries(graph)) {\n if (info.module) {\n if (!moduleMap.has(info.module)) {\n moduleMap.set(info.module, new Set());\n }\n moduleMap.get(info.module)!.add(providerName);\n }\n }\n\n return Array.from(moduleMap.entries()).map(([name, providers]) => ({\n name,\n providers: Array.from(providers),\n }));\n }\n\n public getMetadata(): DevMetadata {\n return {\n actions: this.getActions(),\n queues: this.getQueues(),\n schedulers: this.getSchedulers(),\n topics: this.getTopics(),\n buckets: this.getBuckets(),\n realms: this.getRealms(),\n caches: this.getCaches(),\n pages: this.getPages(),\n providers: this.getProviders(),\n modules: this.getModules(),\n };\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n protected getProviderName(provider?: \"memory\" | any): string {\n if (!provider) {\n return \"default\";\n }\n if (provider === \"memory\") {\n return \"memory\";\n }\n return provider.name || \"custom\";\n }\n}\n","import { NodeSqliteProvider } from \"@alepha/orm\";\n\nexport class DevToolsDatabaseProvider extends NodeSqliteProvider {\n public get name() {\n return \"devtools\";\n }\n\n protected readonly options = {\n path: \":memory:\",\n };\n}\n","import { Repository } from \"@alepha/orm\";\nimport { logs } from \"../entities/logs.ts\";\nimport { DevToolsDatabaseProvider } from \"../providers/DevToolsDatabaseProvider.ts\";\n\nexport class LogRepository extends Repository<typeof logs.schema> {\n constructor() {\n super(logs, DevToolsDatabaseProvider);\n }\n}\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devActionMetadataSchema = t.object({\n name: t.text(),\n group: t.text(),\n method: t.text(),\n path: t.text(),\n prefix: t.text(),\n fullPath: t.text(),\n description: t.optional(t.text()),\n summary: t.optional(t.text()),\n disabled: t.optional(t.boolean()),\n secure: t.optional(t.boolean()),\n hide: t.optional(t.boolean()),\n body: t.optional(t.any()),\n params: t.optional(t.any()),\n query: t.optional(t.any()),\n response: t.optional(t.any()),\n bodyContentType: t.optional(t.text()),\n});\n\nexport type DevActionMetadata = Static<typeof devActionMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devBucketMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n mimeTypes: t.optional(t.array(t.text())),\n maxSize: t.optional(t.number()),\n provider: t.text(),\n});\n\nexport type DevBucketMetadata = Static<typeof devBucketMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devCacheMetadataSchema = t.object({\n name: t.text(),\n ttl: t.optional(t.any()),\n disabled: t.optional(t.boolean()),\n provider: t.text(),\n});\n\nexport type DevCacheMetadata = Static<typeof devCacheMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devModuleMetadataSchema = t.object({\n name: t.text(),\n providers: t.array(t.text()),\n});\n\nexport type DevModuleMetadata = Static<typeof devModuleMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devPageMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n path: t.optional(t.text()),\n params: t.optional(t.any()),\n query: t.optional(t.any()),\n hasComponent: t.boolean(),\n hasLazy: t.boolean(),\n hasResolve: t.boolean(),\n hasChildren: t.boolean(),\n hasParent: t.boolean(),\n hasErrorHandler: t.boolean(),\n static: t.optional(t.boolean()),\n cache: t.optional(t.any()),\n client: t.optional(t.any()),\n animation: t.optional(t.any()),\n});\n\nexport type DevPageMetadata = Static<typeof devPageMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devProviderMetadataSchema = t.object({\n name: t.text(),\n module: t.optional(t.text()),\n dependencies: t.array(t.text()),\n aliases: t.optional(t.array(t.text())),\n});\n\nexport type DevProviderMetadata = Static<typeof devProviderMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devQueueMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n schema: t.optional(t.any()),\n provider: t.text(),\n});\n\nexport type DevQueueMetadata = Static<typeof devQueueMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devRealmMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n roles: t.optional(t.array(t.any())),\n type: t.enum([\"internal\", \"external\"]),\n settings: t.optional(\n t.object({\n accessTokenExpiration: t.optional(t.any()),\n refreshTokenExpiration: t.optional(t.any()),\n hasOnCreateSession: t.boolean(),\n hasOnRefreshSession: t.boolean(),\n hasOnDeleteSession: t.boolean(),\n }),\n ),\n});\n\nexport type DevRealmMetadata = Static<typeof devRealmMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devSchedulerMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n cron: t.optional(t.text()),\n interval: t.optional(t.any()),\n lock: t.optional(t.boolean()),\n});\n\nexport type DevSchedulerMetadata = Static<typeof devSchedulerMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\n\nexport const devTopicMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n schema: t.optional(t.any()),\n provider: t.text(),\n});\n\nexport type DevTopicMetadata = Static<typeof devTopicMetadataSchema>;\n","import { type Static, t } from \"@alepha/core\";\nimport { devActionMetadataSchema } from \"./DevActionMetadata.ts\";\nimport { devBucketMetadataSchema } from \"./DevBucketMetadata.ts\";\nimport { devCacheMetadataSchema } from \"./DevCacheMetadata.ts\";\nimport { devModuleMetadataSchema } from \"./DevModuleMetadata.ts\";\nimport { devPageMetadataSchema } from \"./DevPageMetadata.ts\";\nimport { devProviderMetadataSchema } from \"./DevProviderMetadata.ts\";\nimport { devQueueMetadataSchema } from \"./DevQueueMetadata.ts\";\nimport { devRealmMetadataSchema } from \"./DevRealmMetadata.ts\";\nimport { devSchedulerMetadataSchema } from \"./DevSchedulerMetadata.ts\";\nimport { devTopicMetadataSchema } from \"./DevTopicMetadata.ts\";\n\nexport const devMetadataSchema = t.object({\n actions: t.array(devActionMetadataSchema),\n queues: t.array(devQueueMetadataSchema),\n schedulers: t.array(devSchedulerMetadataSchema),\n topics: t.array(devTopicMetadataSchema),\n buckets: t.array(devBucketMetadataSchema),\n realms: t.array(devRealmMetadataSchema),\n caches: t.array(devCacheMetadataSchema),\n pages: t.array(devPageMetadataSchema),\n providers: t.array(devProviderMetadataSchema),\n modules: t.array(devModuleMetadataSchema),\n // More metadata will be added here later\n});\n\nexport type DevMetadata = Static<typeof devMetadataSchema>;\n","import { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { $batch } from \"@alepha/batch\";\nimport { $hook, $inject, Alepha, pageQuerySchema, t } from \"@alepha/core\";\nimport {\n $logger,\n JsonFormatterProvider,\n type LogEntry,\n logEntrySchema,\n} from \"@alepha/logger\";\nimport { parseQueryString } from \"@alepha/orm\";\nimport { $route, ServerProvider } from \"@alepha/server\";\nimport { $serve } from \"@alepha/server-static\";\nimport { type DevLogEntry, logs } from \"./entities/logs.ts\";\nimport { DevToolsMetadataProvider } from \"./providers/DevToolsMetadataProvider.ts\";\nimport { LogRepository } from \"./repositories/LogRepository.ts\";\nimport { devMetadataSchema } from \"./schemas/DevMetadata.ts\";\n\nexport class DevToolsProvider {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n protected readonly serverProvider = $inject(ServerProvider);\n protected readonly jsonFormatter = $inject(JsonFormatterProvider);\n protected readonly logs = $inject(LogRepository);\n protected readonly devCollectorProvider = $inject(DevToolsMetadataProvider);\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: () => {\n this.log.info(\n `Devtools available at ${this.serverProvider.hostname}/devtools/`,\n );\n },\n });\n\n protected batchLogs = $batch({\n maxSize: 50,\n maxDuration: [10, \"seconds\"],\n schema: logs.insertSchema,\n handler: async (entries) => {\n await this.logs.createMany(entries);\n },\n });\n\n protected readonly onLog = $hook({\n on: \"log\",\n handler: async (ev: { message?: string; entry: LogEntry }) => {\n // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n // CAUTION: It's very easy to create an infinite loop here.\n // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n try {\n if (!this.alepha.isStarted()) {\n return;\n }\n\n if (ev.entry.module === \"alepha.devtools\") {\n // skip devtools logs to avoid infinite loop\n return;\n }\n\n if (ev.entry.level === \"TRACE\" && ev.entry.module === \"alepha.batch\") {\n // skip batch trace logs to avoid infinite loop\n return;\n }\n\n if (this.alepha.isProduction() && ev.entry.level === \"TRACE\") {\n // skip trace logs in production\n return;\n }\n\n const entry = {\n ...ev.entry,\n data:\n ev.entry.data instanceof Error\n ? this.jsonFormatter.formatJsonError(ev.entry.data)\n : typeof ev.entry.data === \"object\" &&\n !Array.isArray(ev.entry.data)\n ? ev.entry.data\n : { data: ev.entry.data },\n };\n\n await this.batchLogs.push(entry as DevLogEntry);\n } catch (error) {\n // DO TO NOT WITH THE LOGGER HERE TO AVOID INFINITE LOOP\n console.error(error, ev);\n }\n },\n });\n\n protected readonly uiRoute = $serve({\n path: \"/devtools\",\n root: join(fileURLToPath(import.meta.url), \"../../assets/devtools\"),\n historyApiFallback: true,\n });\n\n protected readonly metadataRoute = $route({\n method: \"GET\",\n path: \"/devtools/api/metadata\",\n silent: true,\n schema: {\n response: devMetadataSchema,\n },\n handler: () => {\n return this.devCollectorProvider.getMetadata();\n },\n });\n\n protected readonly logsRoute = $route({\n method: \"GET\",\n path: \"/devtools/api/logs\",\n silent: true,\n schema: {\n query: t.extend(pageQuerySchema, {\n search: t.optional(t.string()),\n }),\n response: t.page(logEntrySchema),\n },\n handler: ({ query }) => {\n query.sort ??= \"-timestamp\";\n return this.logs.paginate(\n query,\n query.search\n ? {\n where: parseQueryString(query.search),\n }\n : {},\n {\n count: true,\n },\n );\n },\n });\n}\n","import { $module } from \"@alepha/core\";\nimport { DevToolsProvider } from \"./DevToolsProvider.ts\";\nimport { DevToolsDatabaseProvider } from \"./providers/DevToolsDatabaseProvider.ts\";\nimport { DevToolsMetadataProvider } from \"./providers/DevToolsMetadataProvider.ts\";\nimport { LogRepository } from \"./repositories/LogRepository.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/DevToolsMetadataProvider.ts\";\nexport * from \"./schemas/DevActionMetadata.ts\";\nexport * from \"./schemas/DevBucketMetadata.ts\";\nexport * from \"./schemas/DevCacheMetadata.ts\";\nexport * from \"./schemas/DevMetadata.ts\";\nexport * from \"./schemas/DevModuleMetadata.ts\";\nexport * from \"./schemas/DevPageMetadata.ts\";\nexport * from \"./schemas/DevProviderMetadata.ts\";\nexport * from \"./schemas/DevQueueMetadata.ts\";\nexport * from \"./schemas/DevRealmMetadata.ts\";\nexport * from \"./schemas/DevSchedulerMetadata.ts\";\nexport * from \"./schemas/DevTopicMetadata.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Developer tools module for monitoring and debugging Alepha applications.\n *\n * This module provides comprehensive data collection capabilities for tracking application behavior,\n * performance metrics, and debugging information in real-time.\n *\n * @see {@link DevToolsMetadataProvider}\n * @module alepha.devtools\n */\nexport const AlephaDevtools = $module({\n name: \"alepha.devtools\",\n descriptors: [],\n services: [\n DevToolsMetadataProvider,\n DevToolsProvider,\n DevToolsDatabaseProvider,\n LogRepository,\n ],\n register: (alepha) => {\n alepha.with(DevToolsProvider);\n alepha.with(DevToolsDatabaseProvider);\n alepha.with(DevToolsMetadataProvider);\n alepha.state.push(\"alepha.build.assets\", \"@alepha/devtools\");\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["t","pg","Alepha","$action","$queue","$scheduler","$topic","$bucket","$realm","$cache","NodeSqliteProvider","Repository","t","t","t","t","t","t","t","t","t","t","t","Alepha","ServerProvider","JsonFormatterProvider","t","pageQuerySchema","logEntrySchema"],"sources":["../src/entities/logs.ts","../src/providers/DevToolsMetadataProvider.ts","../src/providers/DevToolsDatabaseProvider.ts","../src/repositories/LogRepository.ts","../src/schemas/DevActionMetadata.ts","../src/schemas/DevBucketMetadata.ts","../src/schemas/DevCacheMetadata.ts","../src/schemas/DevModuleMetadata.ts","../src/schemas/DevPageMetadata.ts","../src/schemas/DevProviderMetadata.ts","../src/schemas/DevQueueMetadata.ts","../src/schemas/DevRealmMetadata.ts","../src/schemas/DevSchedulerMetadata.ts","../src/schemas/DevTopicMetadata.ts","../src/schemas/DevMetadata.ts","../src/DevToolsProvider.ts","../src/index.ts"],"sourcesContent":["import { type Static, t } from \"alepha\";\nimport { $entity, pg } from \"alepha/orm\";\n\nexport const logs = $entity({\n name: \"logs\",\n schema: t.object({\n id: pg.primaryKey(),\n level: t.enum([\"TRACE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n message: t.text({\n size: \"rich\",\n }),\n service: t.text(),\n module: t.text(),\n context: t.optional(t.text()),\n app: t.optional(t.text()),\n data: t.optional(t.json()),\n timestamp: t.datetime(),\n }),\n});\n\nexport type DevLogEntry = Static<typeof logs.schema>;\n","import { $inject, Alepha } from \"alepha\";\nimport { $bucket } from \"alepha/bucket\";\nimport { $cache } from \"alepha/cache\";\nimport { $logger } from \"alepha/logger\";\nimport { $queue } from \"alepha/queue\";\nimport { $scheduler } from \"alepha/scheduler\";\nimport { $realm } from \"alepha/security\";\nimport { $action } from \"alepha/server\";\nimport { $topic } from \"alepha/topic\";\nimport type { DevActionMetadata } from \"../schemas/DevActionMetadata.ts\";\nimport type { DevBucketMetadata } from \"../schemas/DevBucketMetadata.ts\";\nimport type { DevCacheMetadata } from \"../schemas/DevCacheMetadata.ts\";\nimport type { DevMetadata } from \"../schemas/DevMetadata.ts\";\nimport type { DevModuleMetadata } from \"../schemas/DevModuleMetadata.ts\";\nimport type { DevPageMetadata } from \"../schemas/DevPageMetadata.ts\";\nimport type { DevProviderMetadata } from \"../schemas/DevProviderMetadata.ts\";\nimport type { DevQueueMetadata } from \"../schemas/DevQueueMetadata.ts\";\nimport type { DevRealmMetadata } from \"../schemas/DevRealmMetadata.ts\";\nimport type { DevSchedulerMetadata } from \"../schemas/DevSchedulerMetadata.ts\";\nimport type { DevTopicMetadata } from \"../schemas/DevTopicMetadata.ts\";\n\nexport class DevToolsMetadataProvider {\n protected readonly alepha = $inject(Alepha);\n protected readonly log = $logger();\n\n public getActions(): DevActionMetadata[] {\n const actionDescriptors = this.alepha.descriptors($action);\n\n return actionDescriptors.map((action) => {\n const schema = action.schema;\n const options = action.options as any; // Allow accessing augmented properties\n\n return {\n name: action.name,\n group: action.group,\n method: action.method,\n path: action.path,\n prefix: action.prefix,\n fullPath: action.route.path,\n description: action.options.description,\n summary: options.summary,\n disabled: action.options.disabled,\n secure: options.secure,\n hide: options.hide,\n body: schema?.body,\n params: schema?.params,\n query: schema?.query,\n response: schema?.response,\n bodyContentType: action.getBodyContentType(),\n };\n });\n }\n\n public getQueues(): DevQueueMetadata[] {\n const queueDescriptors = this.alepha.descriptors($queue);\n\n return queueDescriptors.map((queue) => ({\n name: queue.name,\n description: queue.options.description,\n schema: queue.options.schema,\n provider: this.getProviderName(queue.options.provider),\n }));\n }\n\n public getSchedulers(): DevSchedulerMetadata[] {\n const schedulerDescriptors = this.alepha.descriptors($scheduler);\n\n return schedulerDescriptors.map((scheduler) => ({\n name: scheduler.name,\n description: scheduler.options.description,\n cron: scheduler.options.cron,\n interval: scheduler.options.interval,\n lock: scheduler.options.lock,\n }));\n }\n\n public getTopics(): DevTopicMetadata[] {\n const topicDescriptors = this.alepha.descriptors($topic);\n\n return topicDescriptors.map((topic) => ({\n name: topic.name,\n description: topic.options.description,\n schema: topic.options.schema,\n provider: this.getProviderName(topic.options.provider),\n }));\n }\n\n public getBuckets(): DevBucketMetadata[] {\n const bucketDescriptors = this.alepha.descriptors($bucket);\n\n return bucketDescriptors.map((bucket) => ({\n name: bucket.name,\n description: bucket.options.description,\n mimeTypes: bucket.options.mimeTypes,\n maxSize: bucket.options.maxSize,\n provider: this.getProviderName(bucket.options.provider),\n }));\n }\n\n public getRealms(): DevRealmMetadata[] {\n const realmDescriptors = this.alepha.descriptors($realm);\n\n return realmDescriptors.map((realm) => ({\n name: realm.name,\n description: realm.options.description,\n roles: realm.options.roles,\n type: \"secret\" in realm.options ? \"internal\" : \"external\",\n settings: {\n accessTokenExpiration: realm.options.settings?.accessToken?.expiration,\n refreshTokenExpiration:\n realm.options.settings?.refreshToken?.expiration,\n hasOnCreateSession: !!realm.options.settings?.onCreateSession,\n hasOnRefreshSession: !!realm.options.settings?.onRefreshSession,\n hasOnDeleteSession: !!realm.options.settings?.onDeleteSession,\n },\n }));\n }\n\n public getCaches(): DevCacheMetadata[] {\n const cacheDescriptors = this.alepha.descriptors($cache);\n\n return cacheDescriptors.map((cache) => ({\n name: cache.container,\n ttl: cache.options.ttl,\n disabled: cache.options.disabled,\n provider: this.getProviderName(cache.options.provider),\n }));\n }\n\n public getPages(): DevPageMetadata[] {\n // const pageDescriptors = this.alepha.descriptors($page);\n //\n // return pageDescriptors.map((page) => ({\n // name: page.name,\n // description: page.options.description,\n // path: page.options.path,\n // params: page.options.schema?.params,\n // query: page.options.schema?.query,\n // hasComponent: !!page.options.component,\n // hasLazy: !!page.options.lazy,\n // hasResolve: !!page.options.resolve,\n // hasChildren: !!page.options.children,\n // hasParent: !!page.options.parent,\n // hasErrorHandler: !!page.options.errorHandler,\n // static:\n // typeof page.options.static === \"boolean\"\n // ? page.options.static\n // : !!page.options.static,\n // cache: page.options.cache,\n // client: page.options.client,\n // animation: page.options.animation,\n // }));\n\n return [];\n }\n\n public getProviders(): DevProviderMetadata[] {\n const graph = this.alepha.graph();\n\n return Object.entries(graph).map(([name, info]) => ({\n name,\n module: info.module,\n dependencies: info.from,\n aliases: info.as,\n }));\n }\n\n public getModules(): DevModuleMetadata[] {\n const graph = this.alepha.graph();\n const moduleMap = new Map<string, Set<string>>();\n\n // Group providers by module\n for (const [providerName, info] of Object.entries(graph)) {\n if (info.module) {\n if (!moduleMap.has(info.module)) {\n moduleMap.set(info.module, new Set());\n }\n moduleMap.get(info.module)!.add(providerName);\n }\n }\n\n return Array.from(moduleMap.entries()).map(([name, providers]) => ({\n name,\n providers: Array.from(providers),\n }));\n }\n\n public getMetadata(): DevMetadata {\n return {\n actions: this.getActions(),\n queues: this.getQueues(),\n schedulers: this.getSchedulers(),\n topics: this.getTopics(),\n buckets: this.getBuckets(),\n realms: this.getRealms(),\n caches: this.getCaches(),\n pages: this.getPages(),\n providers: this.getProviders(),\n modules: this.getModules(),\n };\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n protected getProviderName(provider?: \"memory\" | any): string {\n if (!provider) {\n return \"default\";\n }\n if (provider === \"memory\") {\n return \"memory\";\n }\n return provider.name || \"custom\";\n }\n}\n","import { NodeSqliteProvider } from \"alepha/orm\";\n\nexport class DevToolsDatabaseProvider extends NodeSqliteProvider {\n public get name() {\n return \"devtools\";\n }\n\n protected readonly options = {\n path: \":memory:\",\n };\n}\n","import { Repository } from \"alepha/orm\";\nimport { logs } from \"../entities/logs.ts\";\nimport { DevToolsDatabaseProvider } from \"../providers/DevToolsDatabaseProvider.ts\";\n\nexport class LogRepository extends Repository<typeof logs.schema> {\n constructor() {\n super(logs, DevToolsDatabaseProvider);\n }\n}\n","import { type Static, t } from \"alepha\";\n\nexport const devActionMetadataSchema = t.object({\n name: t.text(),\n group: t.text(),\n method: t.text(),\n path: t.text(),\n prefix: t.text(),\n fullPath: t.text(),\n description: t.optional(t.text()),\n summary: t.optional(t.text()),\n disabled: t.optional(t.boolean()),\n secure: t.optional(t.boolean()),\n hide: t.optional(t.boolean()),\n body: t.optional(t.any()),\n params: t.optional(t.any()),\n query: t.optional(t.any()),\n response: t.optional(t.any()),\n bodyContentType: t.optional(t.text()),\n});\n\nexport type DevActionMetadata = Static<typeof devActionMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devBucketMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n mimeTypes: t.optional(t.array(t.text())),\n maxSize: t.optional(t.number()),\n provider: t.text(),\n});\n\nexport type DevBucketMetadata = Static<typeof devBucketMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devCacheMetadataSchema = t.object({\n name: t.text(),\n ttl: t.optional(t.any()),\n disabled: t.optional(t.boolean()),\n provider: t.text(),\n});\n\nexport type DevCacheMetadata = Static<typeof devCacheMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devModuleMetadataSchema = t.object({\n name: t.text(),\n providers: t.array(t.text()),\n});\n\nexport type DevModuleMetadata = Static<typeof devModuleMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devPageMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n path: t.optional(t.text()),\n params: t.optional(t.any()),\n query: t.optional(t.any()),\n hasComponent: t.boolean(),\n hasLazy: t.boolean(),\n hasResolve: t.boolean(),\n hasChildren: t.boolean(),\n hasParent: t.boolean(),\n hasErrorHandler: t.boolean(),\n static: t.optional(t.boolean()),\n cache: t.optional(t.any()),\n client: t.optional(t.any()),\n animation: t.optional(t.any()),\n});\n\nexport type DevPageMetadata = Static<typeof devPageMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devProviderMetadataSchema = t.object({\n name: t.text(),\n module: t.optional(t.text()),\n dependencies: t.array(t.text()),\n aliases: t.optional(t.array(t.text())),\n});\n\nexport type DevProviderMetadata = Static<typeof devProviderMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devQueueMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n schema: t.optional(t.any()),\n provider: t.text(),\n});\n\nexport type DevQueueMetadata = Static<typeof devQueueMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devRealmMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n roles: t.optional(t.array(t.any())),\n type: t.enum([\"internal\", \"external\"]),\n settings: t.optional(\n t.object({\n accessTokenExpiration: t.optional(t.any()),\n refreshTokenExpiration: t.optional(t.any()),\n hasOnCreateSession: t.boolean(),\n hasOnRefreshSession: t.boolean(),\n hasOnDeleteSession: t.boolean(),\n }),\n ),\n});\n\nexport type DevRealmMetadata = Static<typeof devRealmMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devSchedulerMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n cron: t.optional(t.text()),\n interval: t.optional(t.any()),\n lock: t.optional(t.boolean()),\n});\n\nexport type DevSchedulerMetadata = Static<typeof devSchedulerMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devTopicMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n schema: t.optional(t.any()),\n provider: t.text(),\n});\n\nexport type DevTopicMetadata = Static<typeof devTopicMetadataSchema>;\n","import { type Static, t } from \"alepha\";\nimport { devActionMetadataSchema } from \"./DevActionMetadata.ts\";\nimport { devBucketMetadataSchema } from \"./DevBucketMetadata.ts\";\nimport { devCacheMetadataSchema } from \"./DevCacheMetadata.ts\";\nimport { devModuleMetadataSchema } from \"./DevModuleMetadata.ts\";\nimport { devPageMetadataSchema } from \"./DevPageMetadata.ts\";\nimport { devProviderMetadataSchema } from \"./DevProviderMetadata.ts\";\nimport { devQueueMetadataSchema } from \"./DevQueueMetadata.ts\";\nimport { devRealmMetadataSchema } from \"./DevRealmMetadata.ts\";\nimport { devSchedulerMetadataSchema } from \"./DevSchedulerMetadata.ts\";\nimport { devTopicMetadataSchema } from \"./DevTopicMetadata.ts\";\n\nexport const devMetadataSchema = t.object({\n actions: t.array(devActionMetadataSchema),\n queues: t.array(devQueueMetadataSchema),\n schedulers: t.array(devSchedulerMetadataSchema),\n topics: t.array(devTopicMetadataSchema),\n buckets: t.array(devBucketMetadataSchema),\n realms: t.array(devRealmMetadataSchema),\n caches: t.array(devCacheMetadataSchema),\n pages: t.array(devPageMetadataSchema),\n providers: t.array(devProviderMetadataSchema),\n modules: t.array(devModuleMetadataSchema),\n // More metadata will be added here later\n});\n\nexport type DevMetadata = Static<typeof devMetadataSchema>;\n","import { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { $hook, $inject, Alepha, pageQuerySchema, t } from \"alepha\";\nimport { $batch } from \"alepha/batch\";\nimport {\n $logger,\n JsonFormatterProvider,\n type LogEntry,\n logEntrySchema,\n} from \"alepha/logger\";\nimport { parseQueryString } from \"alepha/orm\";\nimport { $route, ServerProvider } from \"alepha/server\";\nimport { $serve } from \"alepha/server/static\";\nimport { type DevLogEntry, logs } from \"./entities/logs.ts\";\nimport { DevToolsMetadataProvider } from \"./providers/DevToolsMetadataProvider.ts\";\nimport { LogRepository } from \"./repositories/LogRepository.ts\";\nimport { devMetadataSchema } from \"./schemas/DevMetadata.ts\";\n\nexport class DevToolsProvider {\n protected readonly log = $logger();\n protected readonly alepha = $inject(Alepha);\n protected readonly serverProvider = $inject(ServerProvider);\n protected readonly jsonFormatter = $inject(JsonFormatterProvider);\n protected readonly logs = $inject(LogRepository);\n protected readonly devCollectorProvider = $inject(DevToolsMetadataProvider);\n\n protected readonly onStart = $hook({\n on: \"start\",\n handler: () => {\n this.log.info(\n `Devtools available at ${this.serverProvider.hostname}/devtools/`,\n );\n },\n });\n\n protected batchLogs = $batch({\n maxSize: 50,\n maxDuration: [10, \"seconds\"],\n schema: logs.insertSchema,\n handler: async (entries) => {\n await this.logs.createMany(entries);\n },\n });\n\n protected readonly onLog = $hook({\n on: \"log\",\n handler: async (ev: { message?: string; entry: LogEntry }) => {\n // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n // CAUTION: It's very easy to create an infinite loop here.\n // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n try {\n if (!this.alepha.isStarted()) {\n return;\n }\n\n if (ev.entry.module === \"alepha.devtools\") {\n // skip devtools logs to avoid infinite loop\n return;\n }\n\n if (ev.entry.level === \"TRACE\" && ev.entry.module === \"alepha.batch\") {\n // skip batch trace logs to avoid infinite loop\n return;\n }\n\n if (this.alepha.isProduction() && ev.entry.level === \"TRACE\") {\n // skip trace logs in production\n return;\n }\n\n const entry = {\n ...ev.entry,\n data:\n ev.entry.data instanceof Error\n ? this.jsonFormatter.formatJsonError(ev.entry.data)\n : typeof ev.entry.data === \"object\" &&\n !Array.isArray(ev.entry.data)\n ? ev.entry.data\n : { data: ev.entry.data },\n };\n\n await this.batchLogs.push(entry as DevLogEntry);\n } catch (error) {\n // DO TO NOT WITH THE LOGGER HERE TO AVOID INFINITE LOOP\n console.error(error, ev);\n }\n },\n });\n\n protected readonly uiRoute = $serve({\n path: \"/devtools\",\n root: join(fileURLToPath(import.meta.url), \"../../assets/devtools\"),\n historyApiFallback: true,\n });\n\n protected readonly metadataRoute = $route({\n method: \"GET\",\n path: \"/devtools/api/metadata\",\n silent: true,\n schema: {\n response: devMetadataSchema,\n },\n handler: () => {\n return this.devCollectorProvider.getMetadata();\n },\n });\n\n protected readonly logsRoute = $route({\n method: \"GET\",\n path: \"/devtools/api/logs\",\n silent: true,\n schema: {\n query: t.extend(pageQuerySchema, {\n search: t.optional(t.string()),\n }),\n response: t.page(logEntrySchema),\n },\n handler: ({ query }) => {\n query.sort ??= \"-timestamp\";\n return this.logs.paginate(\n query,\n query.search\n ? {\n where: parseQueryString(query.search),\n }\n : {},\n {\n count: true,\n },\n );\n },\n });\n}\n","import { $module } from \"alepha\";\nimport { DevToolsProvider } from \"./DevToolsProvider.ts\";\nimport { DevToolsDatabaseProvider } from \"./providers/DevToolsDatabaseProvider.ts\";\nimport { DevToolsMetadataProvider } from \"./providers/DevToolsMetadataProvider.ts\";\nimport { LogRepository } from \"./repositories/LogRepository.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/DevToolsMetadataProvider.ts\";\nexport * from \"./schemas/DevActionMetadata.ts\";\nexport * from \"./schemas/DevBucketMetadata.ts\";\nexport * from \"./schemas/DevCacheMetadata.ts\";\nexport * from \"./schemas/DevMetadata.ts\";\nexport * from \"./schemas/DevModuleMetadata.ts\";\nexport * from \"./schemas/DevPageMetadata.ts\";\nexport * from \"./schemas/DevProviderMetadata.ts\";\nexport * from \"./schemas/DevQueueMetadata.ts\";\nexport * from \"./schemas/DevRealmMetadata.ts\";\nexport * from \"./schemas/DevSchedulerMetadata.ts\";\nexport * from \"./schemas/DevTopicMetadata.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Developer tools module for monitoring and debugging Alepha applications.\n *\n * This module provides comprehensive data collection capabilities for tracking application behavior,\n * performance metrics, and debugging information in real-time.\n *\n * @see {@link DevToolsMetadataProvider}\n * @module alepha.devtools\n */\nexport const AlephaDevtools = $module({\n name: \"alepha.devtools\",\n descriptors: [],\n services: [\n DevToolsMetadataProvider,\n DevToolsProvider,\n DevToolsDatabaseProvider,\n LogRepository,\n ],\n register: (alepha) => {\n alepha.with(DevToolsProvider);\n alepha.with(DevToolsDatabaseProvider);\n alepha.with(DevToolsMetadataProvider);\n alepha.state.push(\"alepha.build.assets\", \"@alepha/devtools\");\n },\n});\n"],"mappings":"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"}