@alepha/devtools 0.11.4 → 0.11.6
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/dist/index.d.ts +408 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/{index.mjs → index.js} +63 -33
- package/dist/index.js.map +1 -0
- package/package.json +21 -19
- package/src/DevCollectorProvider.ts +107 -38
- package/src/index.ts +1 -1
- package/src/ui/AppRouter.tsx +33 -3
- package/src/ui/DevLogs.tsx +28 -26
- package/src/ui/main.server.ts +10 -0
- package/dist/index.d.mts +0 -370
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
import * as _alepha_core1 from "@alepha/core";
|
|
2
|
+
import { Alepha, Static } from "@alepha/core";
|
|
3
|
+
import * as _alepha_batch0 from "@alepha/batch";
|
|
4
|
+
import * as _alepha_logger0 from "@alepha/logger";
|
|
5
|
+
import * as _alepha_postgres0 from "@alepha/postgres";
|
|
6
|
+
import { NodeSqliteProvider } from "@alepha/postgres";
|
|
7
|
+
import { Repository } from "@alepha/postgres/src/services/Repository.ts";
|
|
8
|
+
import * as _alepha_server0 from "@alepha/server";
|
|
9
|
+
import { ServerProvider } from "@alepha/server";
|
|
10
|
+
import * as _alepha_server_static0 from "@alepha/server-static";
|
|
11
|
+
import * as typebox192 from "typebox";
|
|
12
|
+
import * as dayjs0 from "dayjs";
|
|
13
|
+
|
|
14
|
+
//#region src/schemas/DevActionMetadata.d.ts
|
|
15
|
+
declare const devActionMetadataSchema: typebox192.TObject<{
|
|
16
|
+
name: typebox192.TString;
|
|
17
|
+
group: typebox192.TString;
|
|
18
|
+
method: typebox192.TString;
|
|
19
|
+
path: typebox192.TString;
|
|
20
|
+
prefix: typebox192.TString;
|
|
21
|
+
fullPath: typebox192.TString;
|
|
22
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
23
|
+
summary: typebox192.TOptional<typebox192.TString>;
|
|
24
|
+
disabled: typebox192.TOptional<typebox192.TBoolean>;
|
|
25
|
+
secure: typebox192.TOptional<typebox192.TBoolean>;
|
|
26
|
+
hide: typebox192.TOptional<typebox192.TBoolean>;
|
|
27
|
+
body: typebox192.TOptional<typebox192.TAny>;
|
|
28
|
+
params: typebox192.TOptional<typebox192.TAny>;
|
|
29
|
+
query: typebox192.TOptional<typebox192.TAny>;
|
|
30
|
+
response: typebox192.TOptional<typebox192.TAny>;
|
|
31
|
+
bodyContentType: typebox192.TOptional<typebox192.TString>;
|
|
32
|
+
}>;
|
|
33
|
+
type DevActionMetadata = Static<typeof devActionMetadataSchema>;
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/schemas/DevBucketMetadata.d.ts
|
|
36
|
+
declare const devBucketMetadataSchema: typebox192.TObject<{
|
|
37
|
+
name: typebox192.TString;
|
|
38
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
39
|
+
mimeTypes: typebox192.TOptional<typebox192.TArray<typebox192.TString>>;
|
|
40
|
+
maxSize: typebox192.TOptional<typebox192.TNumber>;
|
|
41
|
+
provider: typebox192.TString;
|
|
42
|
+
}>;
|
|
43
|
+
type DevBucketMetadata = Static<typeof devBucketMetadataSchema>;
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/schemas/DevCacheMetadata.d.ts
|
|
46
|
+
declare const devCacheMetadataSchema: typebox192.TObject<{
|
|
47
|
+
name: typebox192.TString;
|
|
48
|
+
ttl: typebox192.TOptional<typebox192.TAny>;
|
|
49
|
+
disabled: typebox192.TOptional<typebox192.TBoolean>;
|
|
50
|
+
provider: typebox192.TString;
|
|
51
|
+
}>;
|
|
52
|
+
type DevCacheMetadata = Static<typeof devCacheMetadataSchema>;
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region src/schemas/DevMetadata.d.ts
|
|
55
|
+
declare const devMetadataSchema: typebox192.TObject<{
|
|
56
|
+
actions: typebox192.TArray<typebox192.TObject<{
|
|
57
|
+
name: typebox192.TString;
|
|
58
|
+
group: typebox192.TString;
|
|
59
|
+
method: typebox192.TString;
|
|
60
|
+
path: typebox192.TString;
|
|
61
|
+
prefix: typebox192.TString;
|
|
62
|
+
fullPath: typebox192.TString;
|
|
63
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
64
|
+
summary: typebox192.TOptional<typebox192.TString>;
|
|
65
|
+
disabled: typebox192.TOptional<typebox192.TBoolean>;
|
|
66
|
+
secure: typebox192.TOptional<typebox192.TBoolean>;
|
|
67
|
+
hide: typebox192.TOptional<typebox192.TBoolean>;
|
|
68
|
+
body: typebox192.TOptional<typebox192.TAny>;
|
|
69
|
+
params: typebox192.TOptional<typebox192.TAny>;
|
|
70
|
+
query: typebox192.TOptional<typebox192.TAny>;
|
|
71
|
+
response: typebox192.TOptional<typebox192.TAny>;
|
|
72
|
+
bodyContentType: typebox192.TOptional<typebox192.TString>;
|
|
73
|
+
}>>;
|
|
74
|
+
queues: typebox192.TArray<typebox192.TObject<{
|
|
75
|
+
name: typebox192.TString;
|
|
76
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
77
|
+
schema: typebox192.TOptional<typebox192.TAny>;
|
|
78
|
+
provider: typebox192.TString;
|
|
79
|
+
}>>;
|
|
80
|
+
schedulers: typebox192.TArray<typebox192.TObject<{
|
|
81
|
+
name: typebox192.TString;
|
|
82
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
83
|
+
cron: typebox192.TOptional<typebox192.TString>;
|
|
84
|
+
interval: typebox192.TOptional<typebox192.TAny>;
|
|
85
|
+
lock: typebox192.TOptional<typebox192.TBoolean>;
|
|
86
|
+
}>>;
|
|
87
|
+
topics: typebox192.TArray<typebox192.TObject<{
|
|
88
|
+
name: typebox192.TString;
|
|
89
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
90
|
+
schema: typebox192.TOptional<typebox192.TAny>;
|
|
91
|
+
provider: typebox192.TString;
|
|
92
|
+
}>>;
|
|
93
|
+
buckets: typebox192.TArray<typebox192.TObject<{
|
|
94
|
+
name: typebox192.TString;
|
|
95
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
96
|
+
mimeTypes: typebox192.TOptional<typebox192.TArray<typebox192.TString>>;
|
|
97
|
+
maxSize: typebox192.TOptional<typebox192.TNumber>;
|
|
98
|
+
provider: typebox192.TString;
|
|
99
|
+
}>>;
|
|
100
|
+
realms: typebox192.TArray<typebox192.TObject<{
|
|
101
|
+
name: typebox192.TString;
|
|
102
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
103
|
+
roles: typebox192.TOptional<typebox192.TArray<typebox192.TAny>>;
|
|
104
|
+
type: typebox192.TUnsafe<"internal" | "external">;
|
|
105
|
+
settings: typebox192.TOptional<typebox192.TObject<{
|
|
106
|
+
accessTokenExpiration: typebox192.TOptional<typebox192.TAny>;
|
|
107
|
+
refreshTokenExpiration: typebox192.TOptional<typebox192.TAny>;
|
|
108
|
+
hasOnCreateSession: typebox192.TBoolean;
|
|
109
|
+
hasOnRefreshSession: typebox192.TBoolean;
|
|
110
|
+
hasOnDeleteSession: typebox192.TBoolean;
|
|
111
|
+
}>>;
|
|
112
|
+
}>>;
|
|
113
|
+
caches: typebox192.TArray<typebox192.TObject<{
|
|
114
|
+
name: typebox192.TString;
|
|
115
|
+
ttl: typebox192.TOptional<typebox192.TAny>;
|
|
116
|
+
disabled: typebox192.TOptional<typebox192.TBoolean>;
|
|
117
|
+
provider: typebox192.TString;
|
|
118
|
+
}>>;
|
|
119
|
+
pages: typebox192.TArray<typebox192.TObject<{
|
|
120
|
+
name: typebox192.TString;
|
|
121
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
122
|
+
path: typebox192.TOptional<typebox192.TString>;
|
|
123
|
+
params: typebox192.TOptional<typebox192.TAny>;
|
|
124
|
+
query: typebox192.TOptional<typebox192.TAny>;
|
|
125
|
+
hasComponent: typebox192.TBoolean;
|
|
126
|
+
hasLazy: typebox192.TBoolean;
|
|
127
|
+
hasResolve: typebox192.TBoolean;
|
|
128
|
+
hasChildren: typebox192.TBoolean;
|
|
129
|
+
hasParent: typebox192.TBoolean;
|
|
130
|
+
hasErrorHandler: typebox192.TBoolean;
|
|
131
|
+
static: typebox192.TOptional<typebox192.TBoolean>;
|
|
132
|
+
cache: typebox192.TOptional<typebox192.TAny>;
|
|
133
|
+
client: typebox192.TOptional<typebox192.TAny>;
|
|
134
|
+
animation: typebox192.TOptional<typebox192.TAny>;
|
|
135
|
+
}>>;
|
|
136
|
+
providers: typebox192.TArray<typebox192.TObject<{
|
|
137
|
+
name: typebox192.TString;
|
|
138
|
+
module: typebox192.TOptional<typebox192.TString>;
|
|
139
|
+
dependencies: typebox192.TArray<typebox192.TString>;
|
|
140
|
+
aliases: typebox192.TOptional<typebox192.TArray<typebox192.TString>>;
|
|
141
|
+
}>>;
|
|
142
|
+
modules: typebox192.TArray<typebox192.TObject<{
|
|
143
|
+
name: typebox192.TString;
|
|
144
|
+
providers: typebox192.TArray<typebox192.TString>;
|
|
145
|
+
}>>;
|
|
146
|
+
}>;
|
|
147
|
+
type DevMetadata = Static<typeof devMetadataSchema>;
|
|
148
|
+
//#endregion
|
|
149
|
+
//#region src/schemas/DevModuleMetadata.d.ts
|
|
150
|
+
declare const devModuleMetadataSchema: typebox192.TObject<{
|
|
151
|
+
name: typebox192.TString;
|
|
152
|
+
providers: typebox192.TArray<typebox192.TString>;
|
|
153
|
+
}>;
|
|
154
|
+
type DevModuleMetadata = Static<typeof devModuleMetadataSchema>;
|
|
155
|
+
//#endregion
|
|
156
|
+
//#region src/schemas/DevPageMetadata.d.ts
|
|
157
|
+
declare const devPageMetadataSchema: typebox192.TObject<{
|
|
158
|
+
name: typebox192.TString;
|
|
159
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
160
|
+
path: typebox192.TOptional<typebox192.TString>;
|
|
161
|
+
params: typebox192.TOptional<typebox192.TAny>;
|
|
162
|
+
query: typebox192.TOptional<typebox192.TAny>;
|
|
163
|
+
hasComponent: typebox192.TBoolean;
|
|
164
|
+
hasLazy: typebox192.TBoolean;
|
|
165
|
+
hasResolve: typebox192.TBoolean;
|
|
166
|
+
hasChildren: typebox192.TBoolean;
|
|
167
|
+
hasParent: typebox192.TBoolean;
|
|
168
|
+
hasErrorHandler: typebox192.TBoolean;
|
|
169
|
+
static: typebox192.TOptional<typebox192.TBoolean>;
|
|
170
|
+
cache: typebox192.TOptional<typebox192.TAny>;
|
|
171
|
+
client: typebox192.TOptional<typebox192.TAny>;
|
|
172
|
+
animation: typebox192.TOptional<typebox192.TAny>;
|
|
173
|
+
}>;
|
|
174
|
+
type DevPageMetadata = Static<typeof devPageMetadataSchema>;
|
|
175
|
+
//#endregion
|
|
176
|
+
//#region src/schemas/DevProviderMetadata.d.ts
|
|
177
|
+
declare const devProviderMetadataSchema: typebox192.TObject<{
|
|
178
|
+
name: typebox192.TString;
|
|
179
|
+
module: typebox192.TOptional<typebox192.TString>;
|
|
180
|
+
dependencies: typebox192.TArray<typebox192.TString>;
|
|
181
|
+
aliases: typebox192.TOptional<typebox192.TArray<typebox192.TString>>;
|
|
182
|
+
}>;
|
|
183
|
+
type DevProviderMetadata = Static<typeof devProviderMetadataSchema>;
|
|
184
|
+
//#endregion
|
|
185
|
+
//#region src/schemas/DevQueueMetadata.d.ts
|
|
186
|
+
declare const devQueueMetadataSchema: typebox192.TObject<{
|
|
187
|
+
name: typebox192.TString;
|
|
188
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
189
|
+
schema: typebox192.TOptional<typebox192.TAny>;
|
|
190
|
+
provider: typebox192.TString;
|
|
191
|
+
}>;
|
|
192
|
+
type DevQueueMetadata = Static<typeof devQueueMetadataSchema>;
|
|
193
|
+
//#endregion
|
|
194
|
+
//#region src/schemas/DevRealmMetadata.d.ts
|
|
195
|
+
declare const devRealmMetadataSchema: typebox192.TObject<{
|
|
196
|
+
name: typebox192.TString;
|
|
197
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
198
|
+
roles: typebox192.TOptional<typebox192.TArray<typebox192.TAny>>;
|
|
199
|
+
type: typebox192.TUnsafe<"internal" | "external">;
|
|
200
|
+
settings: typebox192.TOptional<typebox192.TObject<{
|
|
201
|
+
accessTokenExpiration: typebox192.TOptional<typebox192.TAny>;
|
|
202
|
+
refreshTokenExpiration: typebox192.TOptional<typebox192.TAny>;
|
|
203
|
+
hasOnCreateSession: typebox192.TBoolean;
|
|
204
|
+
hasOnRefreshSession: typebox192.TBoolean;
|
|
205
|
+
hasOnDeleteSession: typebox192.TBoolean;
|
|
206
|
+
}>>;
|
|
207
|
+
}>;
|
|
208
|
+
type DevRealmMetadata = Static<typeof devRealmMetadataSchema>;
|
|
209
|
+
//#endregion
|
|
210
|
+
//#region src/schemas/DevSchedulerMetadata.d.ts
|
|
211
|
+
declare const devSchedulerMetadataSchema: typebox192.TObject<{
|
|
212
|
+
name: typebox192.TString;
|
|
213
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
214
|
+
cron: typebox192.TOptional<typebox192.TString>;
|
|
215
|
+
interval: typebox192.TOptional<typebox192.TAny>;
|
|
216
|
+
lock: typebox192.TOptional<typebox192.TBoolean>;
|
|
217
|
+
}>;
|
|
218
|
+
type DevSchedulerMetadata = Static<typeof devSchedulerMetadataSchema>;
|
|
219
|
+
//#endregion
|
|
220
|
+
//#region src/schemas/DevTopicMetadata.d.ts
|
|
221
|
+
declare const devTopicMetadataSchema: typebox192.TObject<{
|
|
222
|
+
name: typebox192.TString;
|
|
223
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
224
|
+
schema: typebox192.TOptional<typebox192.TAny>;
|
|
225
|
+
provider: typebox192.TString;
|
|
226
|
+
}>;
|
|
227
|
+
type DevTopicMetadata = Static<typeof devTopicMetadataSchema>;
|
|
228
|
+
//#endregion
|
|
229
|
+
//#region src/DevCollectorProvider.d.ts
|
|
230
|
+
declare class DevToolsDatabaseProvider extends NodeSqliteProvider {
|
|
231
|
+
get name(): string;
|
|
232
|
+
options: {
|
|
233
|
+
path: string;
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
declare const logs: _alepha_postgres0.EntityDescriptor<typebox192.TObject<{
|
|
237
|
+
id: _alepha_postgres0.PgAttr<_alepha_postgres0.PgAttr<typebox192.TInteger, typeof _alepha_postgres0.PG_PRIMARY_KEY>, typeof _alepha_postgres0.PG_DEFAULT>;
|
|
238
|
+
level: typebox192.TUnsafe<"SILENT" | "TRACE" | "DEBUG" | "INFO" | "WARN" | "ERROR">;
|
|
239
|
+
message: typebox192.TString;
|
|
240
|
+
service: typebox192.TString;
|
|
241
|
+
module: typebox192.TString;
|
|
242
|
+
context: typebox192.TOptional<typebox192.TString>;
|
|
243
|
+
app: typebox192.TOptional<typebox192.TString>;
|
|
244
|
+
data: typebox192.TOptional<typebox192.TRecord<string, typebox192.TAny>>;
|
|
245
|
+
timestamp: typebox192.TCodec<typebox192.TString, dayjs0.Dayjs>;
|
|
246
|
+
}>>;
|
|
247
|
+
declare class LogRepository extends Repository<typeof logs.schema> {
|
|
248
|
+
constructor();
|
|
249
|
+
}
|
|
250
|
+
declare class DevCollectorProvider {
|
|
251
|
+
protected readonly alepha: Alepha;
|
|
252
|
+
protected readonly serverProvider: ServerProvider;
|
|
253
|
+
protected readonly sqliteProvider: DevToolsDatabaseProvider;
|
|
254
|
+
protected readonly log: _alepha_logger0.Logger;
|
|
255
|
+
logs: LogRepository;
|
|
256
|
+
protected readonly onStart: _alepha_core1.HookDescriptor<"start">;
|
|
257
|
+
protected batchLogs: _alepha_batch0.BatchDescriptor<typebox192.TObject<{
|
|
258
|
+
level: typebox192.TUnsafe<"SILENT" | "TRACE" | "DEBUG" | "INFO" | "WARN" | "ERROR">;
|
|
259
|
+
message: typebox192.TString;
|
|
260
|
+
service: typebox192.TString;
|
|
261
|
+
module: typebox192.TString;
|
|
262
|
+
context: typebox192.TOptional<typebox192.TString>;
|
|
263
|
+
app: typebox192.TOptional<typebox192.TString>;
|
|
264
|
+
data: typebox192.TOptional<typebox192.TAny>;
|
|
265
|
+
timestamp: typebox192.TCodec<typebox192.TString, dayjs0.Dayjs>;
|
|
266
|
+
}>, Promise<void>>;
|
|
267
|
+
protected readonly onLog: _alepha_core1.HookDescriptor<"log">;
|
|
268
|
+
protected readonly uiRoute: _alepha_server_static0.ServeDescriptor;
|
|
269
|
+
protected readonly metadataRoute: _alepha_server0.RouteDescriptor<{
|
|
270
|
+
response: typebox192.TObject<{
|
|
271
|
+
actions: typebox192.TArray<typebox192.TObject<{
|
|
272
|
+
name: typebox192.TString;
|
|
273
|
+
group: typebox192.TString;
|
|
274
|
+
method: typebox192.TString;
|
|
275
|
+
path: typebox192.TString;
|
|
276
|
+
prefix: typebox192.TString;
|
|
277
|
+
fullPath: typebox192.TString;
|
|
278
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
279
|
+
summary: typebox192.TOptional<typebox192.TString>;
|
|
280
|
+
disabled: typebox192.TOptional<typebox192.TBoolean>;
|
|
281
|
+
secure: typebox192.TOptional<typebox192.TBoolean>;
|
|
282
|
+
hide: typebox192.TOptional<typebox192.TBoolean>;
|
|
283
|
+
body: typebox192.TOptional<typebox192.TAny>;
|
|
284
|
+
params: typebox192.TOptional<typebox192.TAny>;
|
|
285
|
+
query: typebox192.TOptional<typebox192.TAny>;
|
|
286
|
+
response: typebox192.TOptional<typebox192.TAny>;
|
|
287
|
+
bodyContentType: typebox192.TOptional<typebox192.TString>;
|
|
288
|
+
}>>;
|
|
289
|
+
queues: typebox192.TArray<typebox192.TObject<{
|
|
290
|
+
name: typebox192.TString;
|
|
291
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
292
|
+
schema: typebox192.TOptional<typebox192.TAny>;
|
|
293
|
+
provider: typebox192.TString;
|
|
294
|
+
}>>;
|
|
295
|
+
schedulers: typebox192.TArray<typebox192.TObject<{
|
|
296
|
+
name: typebox192.TString;
|
|
297
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
298
|
+
cron: typebox192.TOptional<typebox192.TString>;
|
|
299
|
+
interval: typebox192.TOptional<typebox192.TAny>;
|
|
300
|
+
lock: typebox192.TOptional<typebox192.TBoolean>;
|
|
301
|
+
}>>;
|
|
302
|
+
topics: typebox192.TArray<typebox192.TObject<{
|
|
303
|
+
name: typebox192.TString;
|
|
304
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
305
|
+
schema: typebox192.TOptional<typebox192.TAny>;
|
|
306
|
+
provider: typebox192.TString;
|
|
307
|
+
}>>;
|
|
308
|
+
buckets: typebox192.TArray<typebox192.TObject<{
|
|
309
|
+
name: typebox192.TString;
|
|
310
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
311
|
+
mimeTypes: typebox192.TOptional<typebox192.TArray<typebox192.TString>>;
|
|
312
|
+
maxSize: typebox192.TOptional<typebox192.TNumber>;
|
|
313
|
+
provider: typebox192.TString;
|
|
314
|
+
}>>;
|
|
315
|
+
realms: typebox192.TArray<typebox192.TObject<{
|
|
316
|
+
name: typebox192.TString;
|
|
317
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
318
|
+
roles: typebox192.TOptional<typebox192.TArray<typebox192.TAny>>;
|
|
319
|
+
type: typebox192.TUnsafe<"internal" | "external">;
|
|
320
|
+
settings: typebox192.TOptional<typebox192.TObject<{
|
|
321
|
+
accessTokenExpiration: typebox192.TOptional<typebox192.TAny>;
|
|
322
|
+
refreshTokenExpiration: typebox192.TOptional<typebox192.TAny>;
|
|
323
|
+
hasOnCreateSession: typebox192.TBoolean;
|
|
324
|
+
hasOnRefreshSession: typebox192.TBoolean;
|
|
325
|
+
hasOnDeleteSession: typebox192.TBoolean;
|
|
326
|
+
}>>;
|
|
327
|
+
}>>;
|
|
328
|
+
caches: typebox192.TArray<typebox192.TObject<{
|
|
329
|
+
name: typebox192.TString;
|
|
330
|
+
ttl: typebox192.TOptional<typebox192.TAny>;
|
|
331
|
+
disabled: typebox192.TOptional<typebox192.TBoolean>;
|
|
332
|
+
provider: typebox192.TString;
|
|
333
|
+
}>>;
|
|
334
|
+
pages: typebox192.TArray<typebox192.TObject<{
|
|
335
|
+
name: typebox192.TString;
|
|
336
|
+
description: typebox192.TOptional<typebox192.TString>;
|
|
337
|
+
path: typebox192.TOptional<typebox192.TString>;
|
|
338
|
+
params: typebox192.TOptional<typebox192.TAny>;
|
|
339
|
+
query: typebox192.TOptional<typebox192.TAny>;
|
|
340
|
+
hasComponent: typebox192.TBoolean;
|
|
341
|
+
hasLazy: typebox192.TBoolean;
|
|
342
|
+
hasResolve: typebox192.TBoolean;
|
|
343
|
+
hasChildren: typebox192.TBoolean;
|
|
344
|
+
hasParent: typebox192.TBoolean;
|
|
345
|
+
hasErrorHandler: typebox192.TBoolean;
|
|
346
|
+
static: typebox192.TOptional<typebox192.TBoolean>;
|
|
347
|
+
cache: typebox192.TOptional<typebox192.TAny>;
|
|
348
|
+
client: typebox192.TOptional<typebox192.TAny>;
|
|
349
|
+
animation: typebox192.TOptional<typebox192.TAny>;
|
|
350
|
+
}>>;
|
|
351
|
+
providers: typebox192.TArray<typebox192.TObject<{
|
|
352
|
+
name: typebox192.TString;
|
|
353
|
+
module: typebox192.TOptional<typebox192.TString>;
|
|
354
|
+
dependencies: typebox192.TArray<typebox192.TString>;
|
|
355
|
+
aliases: typebox192.TOptional<typebox192.TArray<typebox192.TString>>;
|
|
356
|
+
}>>;
|
|
357
|
+
modules: typebox192.TArray<typebox192.TObject<{
|
|
358
|
+
name: typebox192.TString;
|
|
359
|
+
providers: typebox192.TArray<typebox192.TString>;
|
|
360
|
+
}>>;
|
|
361
|
+
}>;
|
|
362
|
+
}>;
|
|
363
|
+
protected readonly logsRoute: _alepha_server0.RouteDescriptor<{
|
|
364
|
+
query: typebox192.TObject<{
|
|
365
|
+
page: typebox192.TOptional<typebox192.TInteger>;
|
|
366
|
+
size: typebox192.TOptional<typebox192.TInteger>;
|
|
367
|
+
sort: typebox192.TOptional<typebox192.TString>;
|
|
368
|
+
search: typebox192.TOptional<typebox192.TString>;
|
|
369
|
+
}>;
|
|
370
|
+
response: _alepha_core1.TPage<typebox192.TObject<{
|
|
371
|
+
level: typebox192.TUnsafe<"SILENT" | "TRACE" | "DEBUG" | "INFO" | "WARN" | "ERROR">;
|
|
372
|
+
message: typebox192.TString;
|
|
373
|
+
service: typebox192.TString;
|
|
374
|
+
module: typebox192.TString;
|
|
375
|
+
context: typebox192.TOptional<typebox192.TString>;
|
|
376
|
+
app: typebox192.TOptional<typebox192.TString>;
|
|
377
|
+
data: typebox192.TOptional<typebox192.TAny>;
|
|
378
|
+
timestamp: typebox192.TCodec<typebox192.TString, dayjs0.Dayjs>;
|
|
379
|
+
}>>;
|
|
380
|
+
}>;
|
|
381
|
+
getActions(): DevActionMetadata[];
|
|
382
|
+
getQueues(): DevQueueMetadata[];
|
|
383
|
+
getSchedulers(): DevSchedulerMetadata[];
|
|
384
|
+
getTopics(): DevTopicMetadata[];
|
|
385
|
+
getBuckets(): DevBucketMetadata[];
|
|
386
|
+
getRealms(): DevRealmMetadata[];
|
|
387
|
+
getCaches(): DevCacheMetadata[];
|
|
388
|
+
getPages(): DevPageMetadata[];
|
|
389
|
+
getProviders(): DevProviderMetadata[];
|
|
390
|
+
getModules(): DevModuleMetadata[];
|
|
391
|
+
getMetadata(): DevMetadata;
|
|
392
|
+
protected getProviderName(provider?: "memory" | any): string;
|
|
393
|
+
}
|
|
394
|
+
//#endregion
|
|
395
|
+
//#region src/index.d.ts
|
|
396
|
+
/**
|
|
397
|
+
* Developer tools module for monitoring and debugging Alepha applications.
|
|
398
|
+
*
|
|
399
|
+
* This module provides comprehensive data collection capabilities for tracking application behavior,
|
|
400
|
+
* performance metrics, and debugging information in real-time.
|
|
401
|
+
*
|
|
402
|
+
* @see {@link DevCollectorProvider}
|
|
403
|
+
* @module alepha.devtools
|
|
404
|
+
*/
|
|
405
|
+
declare const AlephaDevtools: _alepha_core1.Service<_alepha_core1.Module>;
|
|
406
|
+
//#endregion
|
|
407
|
+
export { AlephaDevtools, DevActionMetadata, DevBucketMetadata, DevCacheMetadata, DevCollectorProvider, DevMetadata, DevModuleMetadata, DevPageMetadata, DevProviderMetadata, DevQueueMetadata, DevRealmMetadata, DevSchedulerMetadata, DevTopicMetadata, devActionMetadataSchema, devBucketMetadataSchema, devCacheMetadataSchema, devMetadataSchema, devModuleMetadataSchema, devPageMetadataSchema, devProviderMetadataSchema, devQueueMetadataSchema, devRealmMetadataSchema, devSchedulerMetadataSchema, devTopicMetadataSchema };
|
|
408
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/schemas/DevActionMetadata.ts","../src/schemas/DevBucketMetadata.ts","../src/schemas/DevCacheMetadata.ts","../src/schemas/DevMetadata.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/DevCollectorProvider.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { $hook, $inject, $module, Alepha, t } from "@alepha/core";
|
|
1
|
+
import { $hook, $inject, $module, Alepha, pageQuerySchema, t } from "@alepha/core";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { $batch } from "@alepha/batch";
|
|
4
5
|
import { $bucket } from "@alepha/bucket";
|
|
5
6
|
import { $cache } from "@alepha/cache";
|
|
6
7
|
import { $logger, logEntrySchema } from "@alepha/logger";
|
|
8
|
+
import { $entity, NodeSqliteProvider, parseQueryString, pg } from "@alepha/postgres";
|
|
9
|
+
import { Repository } from "@alepha/postgres/src/services/Repository.ts";
|
|
7
10
|
import { $queue } from "@alepha/queue";
|
|
8
|
-
import { $page } from "@alepha/react";
|
|
9
11
|
import { $scheduler } from "@alepha/scheduler";
|
|
10
12
|
import { $realm } from "@alepha/security";
|
|
11
13
|
import { $action, $route, ServerProvider } from "@alepha/server";
|
|
@@ -148,28 +150,70 @@ const devMetadataSchema = t.object({
|
|
|
148
150
|
|
|
149
151
|
//#endregion
|
|
150
152
|
//#region src/DevCollectorProvider.ts
|
|
153
|
+
var DevToolsDatabaseProvider = class extends NodeSqliteProvider {
|
|
154
|
+
get name() {
|
|
155
|
+
return "devtools";
|
|
156
|
+
}
|
|
157
|
+
options = { path: ":memory:" };
|
|
158
|
+
};
|
|
159
|
+
const logs = $entity({
|
|
160
|
+
name: "logs",
|
|
161
|
+
schema: t.object({
|
|
162
|
+
id: pg.primaryKey(),
|
|
163
|
+
level: t.enum([
|
|
164
|
+
"SILENT",
|
|
165
|
+
"TRACE",
|
|
166
|
+
"DEBUG",
|
|
167
|
+
"INFO",
|
|
168
|
+
"WARN",
|
|
169
|
+
"ERROR"
|
|
170
|
+
]),
|
|
171
|
+
message: t.text({ size: "rich" }),
|
|
172
|
+
service: t.text(),
|
|
173
|
+
module: t.text(),
|
|
174
|
+
context: t.optional(t.text()),
|
|
175
|
+
app: t.optional(t.text()),
|
|
176
|
+
data: t.optional(t.json()),
|
|
177
|
+
timestamp: t.datetime()
|
|
178
|
+
})
|
|
179
|
+
});
|
|
180
|
+
var LogRepository = class extends Repository {
|
|
181
|
+
constructor() {
|
|
182
|
+
super(logs, DevToolsDatabaseProvider);
|
|
183
|
+
}
|
|
184
|
+
};
|
|
151
185
|
var DevCollectorProvider = class {
|
|
152
186
|
alepha = $inject(Alepha);
|
|
153
187
|
serverProvider = $inject(ServerProvider);
|
|
188
|
+
sqliteProvider = $inject(DevToolsDatabaseProvider);
|
|
154
189
|
log = $logger();
|
|
155
|
-
logs =
|
|
156
|
-
maxLogs = 1e4;
|
|
190
|
+
logs = $inject(LogRepository);
|
|
157
191
|
onStart = $hook({
|
|
158
192
|
on: "start",
|
|
159
193
|
handler: () => {
|
|
160
194
|
this.log.info(`Devtools available at ${this.serverProvider.hostname}/devtools/`);
|
|
161
195
|
}
|
|
162
196
|
});
|
|
197
|
+
batchLogs = $batch({
|
|
198
|
+
maxSize: 50,
|
|
199
|
+
maxDuration: [10, "seconds"],
|
|
200
|
+
schema: logEntrySchema,
|
|
201
|
+
handler: async (entries) => {
|
|
202
|
+
await this.logs.createMany(entries);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
163
205
|
onLog = $hook({
|
|
164
206
|
on: "log",
|
|
165
|
-
handler: (ev) => {
|
|
166
|
-
this.
|
|
167
|
-
if (
|
|
207
|
+
handler: async (ev) => {
|
|
208
|
+
if (!this.alepha.isReady()) return;
|
|
209
|
+
if (ev.entry.level === "TRACE" && ev.entry.module === "alepha.batch") return;
|
|
210
|
+
await this.batchLogs.push(ev.entry);
|
|
168
211
|
}
|
|
169
212
|
});
|
|
170
213
|
uiRoute = $serve({
|
|
171
214
|
path: "/devtools",
|
|
172
|
-
root: join(fileURLToPath(import.meta.url), "../../assets/devtools")
|
|
215
|
+
root: join(fileURLToPath(import.meta.url), "../../assets/devtools"),
|
|
216
|
+
historyApiFallback: true
|
|
173
217
|
});
|
|
174
218
|
metadataRoute = $route({
|
|
175
219
|
method: "GET",
|
|
@@ -184,14 +228,16 @@ var DevCollectorProvider = class {
|
|
|
184
228
|
method: "GET",
|
|
185
229
|
path: "/devtools/api/logs",
|
|
186
230
|
silent: true,
|
|
187
|
-
schema: {
|
|
188
|
-
|
|
189
|
-
|
|
231
|
+
schema: {
|
|
232
|
+
query: t.interface([pageQuerySchema], { search: t.optional(t.string()) }),
|
|
233
|
+
response: t.page(logEntrySchema)
|
|
234
|
+
},
|
|
235
|
+
handler: ({ query }) => {
|
|
236
|
+
query.sort ??= "-timestamp";
|
|
237
|
+
if (query.search) console.log(parseQueryString(query.search));
|
|
238
|
+
return this.logs.paginate(query, query.search ? { where: parseQueryString(query.search) } : {}, { count: true });
|
|
190
239
|
}
|
|
191
240
|
});
|
|
192
|
-
getLogs() {
|
|
193
|
-
return this.logs;
|
|
194
|
-
}
|
|
195
241
|
getActions() {
|
|
196
242
|
return this.alepha.descriptors($action).map((action) => {
|
|
197
243
|
const schema = action.schema;
|
|
@@ -274,23 +320,7 @@ var DevCollectorProvider = class {
|
|
|
274
320
|
}));
|
|
275
321
|
}
|
|
276
322
|
getPages() {
|
|
277
|
-
return
|
|
278
|
-
name: page.name,
|
|
279
|
-
description: page.options.description,
|
|
280
|
-
path: page.options.path,
|
|
281
|
-
params: page.options.schema?.params,
|
|
282
|
-
query: page.options.schema?.query,
|
|
283
|
-
hasComponent: !!page.options.component,
|
|
284
|
-
hasLazy: !!page.options.lazy,
|
|
285
|
-
hasResolve: !!page.options.resolve,
|
|
286
|
-
hasChildren: !!page.options.children,
|
|
287
|
-
hasParent: !!page.options.parent,
|
|
288
|
-
hasErrorHandler: !!page.options.errorHandler,
|
|
289
|
-
static: typeof page.options.static === "boolean" ? page.options.static : !!page.options.static,
|
|
290
|
-
cache: page.options.cache,
|
|
291
|
-
client: page.options.client,
|
|
292
|
-
animation: page.options.animation
|
|
293
|
-
}));
|
|
323
|
+
return [];
|
|
294
324
|
}
|
|
295
325
|
getProviders() {
|
|
296
326
|
const graph = this.alepha.graph();
|
|
@@ -351,10 +381,10 @@ const AlephaDevtools = $module({
|
|
|
351
381
|
services: [DevCollectorProvider],
|
|
352
382
|
register: (alepha) => {
|
|
353
383
|
alepha.with(DevCollectorProvider);
|
|
354
|
-
alepha.state.push("assets", "@alepha/devtools");
|
|
384
|
+
alepha.state.push("alepha.build.assets", "@alepha/devtools");
|
|
355
385
|
}
|
|
356
386
|
});
|
|
357
387
|
|
|
358
388
|
//#endregion
|
|
359
389
|
export { AlephaDevtools, DevCollectorProvider, devActionMetadataSchema, devBucketMetadataSchema, devCacheMetadataSchema, devMetadataSchema, devModuleMetadataSchema, devPageMetadataSchema, devProviderMetadataSchema, devQueueMetadataSchema, devRealmMetadataSchema, devSchedulerMetadataSchema, devTopicMetadataSchema };
|
|
360
|
-
//# sourceMappingURL=index.
|
|
390
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../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/DevCollectorProvider.ts","../src/index.ts"],"sourcesContent":["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 { $bucket } from \"@alepha/bucket\";\nimport { $cache } from \"@alepha/cache\";\nimport { $hook, $inject, Alepha, pageQuerySchema, t } from \"@alepha/core\";\nimport { $logger, type LogEntry, logEntrySchema } from \"@alepha/logger\";\nimport {\n $entity,\n NodeSqliteProvider,\n parseQueryString,\n pg,\n} from \"@alepha/postgres\";\nimport { Repository } from \"@alepha/postgres/src/services/Repository.ts\";\nimport { $queue } from \"@alepha/queue\";\nimport { $scheduler } from \"@alepha/scheduler\";\nimport { $realm } from \"@alepha/security\";\nimport { $action, $route, ServerProvider } from \"@alepha/server\";\nimport { $serve } from \"@alepha/server-static\";\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, devMetadataSchema } 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\nclass DevToolsDatabaseProvider extends NodeSqliteProvider {\n get name() {\n return \"devtools\";\n }\n options = {\n path: \":memory:\",\n };\n}\n\nconst logs = $entity({\n name: \"logs\",\n schema: t.object({\n id: pg.primaryKey(),\n level: t.enum([\"SILENT\", \"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\nclass LogRepository extends Repository<typeof logs.schema> {\n constructor() {\n super(logs, DevToolsDatabaseProvider);\n }\n}\n\nexport class DevCollectorProvider {\n protected readonly alepha = $inject(Alepha);\n protected readonly serverProvider = $inject(ServerProvider);\n protected readonly sqliteProvider = $inject(DevToolsDatabaseProvider);\n protected readonly log = $logger();\n\n logs = $inject(LogRepository);\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: logEntrySchema,\n handler: async (entries: LogEntry[]) => {\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 if (!this.alepha.isReady()) {\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 await this.batchLogs.push(ev.entry);\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.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.interface([pageQuerySchema], {\n search: t.optional(t.string()),\n }),\n response: t.page(logEntrySchema),\n },\n handler: ({ query }) => {\n query.sort ??= \"-timestamp\";\n if (query.search) {\n console.log(parseQueryString(query.search));\n }\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 // -------------------------------------------------------------------------------------------------------------------\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 { $module } from \"@alepha/core\";\nimport { DevCollectorProvider } from \"./DevCollectorProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./DevCollectorProvider.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 DevCollectorProvider}\n * @module alepha.devtools\n */\nexport const AlephaDevtools = $module({\n name: \"alepha.devtools\",\n descriptors: [],\n services: [DevCollectorProvider],\n register: (alepha) => {\n alepha.with(DevCollectorProvider);\n alepha.state.push(\"alepha.build.assets\", \"@alepha/devtools\");\n },\n});\n"],"mappings":"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"}
|