@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 +0 -11
- package/dist/index.cjs +145 -145
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +165 -165
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +165 -165
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/package.json +46 -69
- package/src/DevToolsProvider.ts +6 -6
- package/src/entities/logs.ts +2 -2
- package/src/index.ts +1 -1
- package/src/providers/DevToolsDatabaseProvider.ts +1 -1
- package/src/providers/DevToolsMetadataProvider.ts +9 -9
- package/src/repositories/LogRepository.ts +1 -1
- package/src/schemas/DevActionMetadata.ts +1 -1
- package/src/schemas/DevBucketMetadata.ts +1 -1
- package/src/schemas/DevCacheMetadata.ts +1 -1
- package/src/schemas/DevMetadata.ts +1 -1
- package/src/schemas/DevModuleMetadata.ts +1 -1
- package/src/schemas/DevPageMetadata.ts +1 -1
- package/src/schemas/DevProviderMetadata.ts +1 -1
- package/src/schemas/DevQueueMetadata.ts +1 -1
- package/src/schemas/DevRealmMetadata.ts +1 -1
- package/src/schemas/DevSchedulerMetadata.ts +1 -1
- package/src/schemas/DevTopicMetadata.ts +1 -1
- package/src/ui/components/DevLogViewer.tsx +5 -5
- package/src/ui/main.ts +1 -1
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
|
|
1
|
+
let alepha = require("alepha");
|
|
2
2
|
let node_path = require("node:path");
|
|
3
3
|
let node_url = require("node:url");
|
|
4
|
-
let
|
|
5
|
-
let
|
|
6
|
-
let
|
|
7
|
-
let
|
|
8
|
-
let
|
|
9
|
-
let
|
|
10
|
-
let
|
|
11
|
-
let
|
|
12
|
-
let
|
|
13
|
-
let
|
|
14
|
-
let
|
|
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,
|
|
17
|
+
const logs = (0, alepha_orm.$entity)({
|
|
18
18
|
name: "logs",
|
|
19
|
-
schema:
|
|
20
|
-
id:
|
|
21
|
-
level:
|
|
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:
|
|
29
|
-
service:
|
|
30
|
-
module:
|
|
31
|
-
context:
|
|
32
|
-
app:
|
|
33
|
-
data:
|
|
34
|
-
timestamp:
|
|
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,
|
|
42
|
-
log = (0,
|
|
41
|
+
alepha = (0, alepha.$inject)(alepha.Alepha);
|
|
42
|
+
log = (0, alepha_logger.$logger)();
|
|
43
43
|
getActions() {
|
|
44
|
-
return this.alepha.descriptors(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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 =
|
|
189
|
-
name:
|
|
190
|
-
group:
|
|
191
|
-
method:
|
|
192
|
-
path:
|
|
193
|
-
prefix:
|
|
194
|
-
fullPath:
|
|
195
|
-
description:
|
|
196
|
-
summary:
|
|
197
|
-
disabled:
|
|
198
|
-
secure:
|
|
199
|
-
hide:
|
|
200
|
-
body:
|
|
201
|
-
params:
|
|
202
|
-
query:
|
|
203
|
-
response:
|
|
204
|
-
bodyContentType:
|
|
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 =
|
|
210
|
-
name:
|
|
211
|
-
description:
|
|
212
|
-
mimeTypes:
|
|
213
|
-
maxSize:
|
|
214
|
-
provider:
|
|
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 =
|
|
220
|
-
name:
|
|
221
|
-
ttl:
|
|
222
|
-
disabled:
|
|
223
|
-
provider:
|
|
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 =
|
|
229
|
-
name:
|
|
230
|
-
providers:
|
|
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 =
|
|
236
|
-
name:
|
|
237
|
-
description:
|
|
238
|
-
path:
|
|
239
|
-
params:
|
|
240
|
-
query:
|
|
241
|
-
hasComponent:
|
|
242
|
-
hasLazy:
|
|
243
|
-
hasResolve:
|
|
244
|
-
hasChildren:
|
|
245
|
-
hasParent:
|
|
246
|
-
hasErrorHandler:
|
|
247
|
-
static:
|
|
248
|
-
cache:
|
|
249
|
-
client:
|
|
250
|
-
animation:
|
|
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 =
|
|
256
|
-
name:
|
|
257
|
-
module:
|
|
258
|
-
dependencies:
|
|
259
|
-
aliases:
|
|
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 =
|
|
265
|
-
name:
|
|
266
|
-
description:
|
|
267
|
-
schema:
|
|
268
|
-
provider:
|
|
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 =
|
|
274
|
-
name:
|
|
275
|
-
description:
|
|
276
|
-
roles:
|
|
277
|
-
type:
|
|
278
|
-
settings:
|
|
279
|
-
accessTokenExpiration:
|
|
280
|
-
refreshTokenExpiration:
|
|
281
|
-
hasOnCreateSession:
|
|
282
|
-
hasOnRefreshSession:
|
|
283
|
-
hasOnDeleteSession:
|
|
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 =
|
|
290
|
-
name:
|
|
291
|
-
description:
|
|
292
|
-
cron:
|
|
293
|
-
interval:
|
|
294
|
-
lock:
|
|
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 =
|
|
300
|
-
name:
|
|
301
|
-
description:
|
|
302
|
-
schema:
|
|
303
|
-
provider:
|
|
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 =
|
|
309
|
-
actions:
|
|
310
|
-
queues:
|
|
311
|
-
schedulers:
|
|
312
|
-
topics:
|
|
313
|
-
buckets:
|
|
314
|
-
realms:
|
|
315
|
-
caches:
|
|
316
|
-
pages:
|
|
317
|
-
providers:
|
|
318
|
-
modules:
|
|
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,
|
|
325
|
-
alepha = (0,
|
|
326
|
-
serverProvider = (0,
|
|
327
|
-
jsonFormatter = (0,
|
|
328
|
-
logs = (0,
|
|
329
|
-
devCollectorProvider = (0,
|
|
330
|
-
onStart = (0,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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:
|
|
382
|
-
response:
|
|
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,
|
|
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,
|
|
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
|
|
package/dist/index.cjs.map
CHANGED
|
@@ -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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"}
|