@alepha/devtools 0.13.6 → 0.13.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/devtools/asset.BZV40eAE.css +1 -0
- package/assets/devtools/asset.Bhpm0ujk.css +1 -0
- package/assets/devtools/chunk.17gtbQUO.js +1 -0
- package/assets/devtools/chunk.1mem8WHh.js +1 -0
- package/assets/devtools/chunk.B0aYes_4.js +1 -0
- package/assets/devtools/chunk.BULoWCgJ.js +7 -0
- package/assets/devtools/chunk.BYrPfJRg.js +1 -0
- package/assets/devtools/chunk.BjFrJKj1.js +1 -0
- package/assets/devtools/chunk.BlqFPyLh.js +1 -0
- package/assets/devtools/chunk.BmJ7-uBd.js +1 -0
- package/assets/devtools/chunk.BzE7YYkj.js +6 -0
- package/assets/devtools/chunk.C49FcqzR.js +1 -0
- package/assets/devtools/chunk.CBGZOsrp.js +9 -0
- package/assets/devtools/chunk.CHRbA_gU.js +1 -0
- package/assets/devtools/chunk.Ct58VlQl.js +1 -0
- package/assets/devtools/chunk.Cw2RCl4F.js +1 -0
- package/assets/devtools/chunk.CyQeq1kA.js +1 -0
- package/assets/devtools/chunk.CzbujtK7.js +1 -0
- package/assets/devtools/chunk.DA9XnVAa.js +1 -0
- package/assets/devtools/chunk.DEUHUxKv.js +1 -0
- package/assets/devtools/chunk.DGW-W4Kc.js +1 -0
- package/assets/devtools/chunk.DHWcJNNS.js +1 -0
- package/assets/devtools/chunk.DIfRZc20.js +1 -0
- package/assets/devtools/chunk.DJJIo7HU.js +1 -0
- package/assets/devtools/chunk.DJOi4_So.js +1 -0
- package/assets/devtools/chunk.DR0SHXXd.js +1 -0
- package/assets/devtools/chunk.DinJSUfH.js +1 -0
- package/assets/devtools/chunk.DooL4OcT.js +1 -0
- package/assets/devtools/chunk.Dry2LXOT.js +1 -0
- package/assets/devtools/chunk.IVvrfXp1.js +1 -0
- package/assets/devtools/chunk.OlMI8g2F.js +1 -0
- package/assets/devtools/chunk.Pj_uCbSv.js +1 -0
- package/assets/devtools/chunk.RTodzvo0.js +2 -0
- package/assets/devtools/chunk.YXYL4YAO.js +2 -0
- package/assets/devtools/chunk.fpKvkQeU.js +1 -0
- package/assets/devtools/chunk.qDx9cjbN.js +1 -0
- package/assets/devtools/chunk.rJToME5k.js +1 -0
- package/assets/devtools/chunk.rohGhT-A.js +1 -0
- package/assets/devtools/chunk.uyVen0u2.js +1 -0
- package/assets/devtools/entry.BY4L2Uc6.js +75 -0
- package/assets/devtools/index.html +11 -0
- package/dist/index.d.ts +249 -32
- package/dist/index.js +253 -22
- package/dist/index.js.map +1 -1
- package/package.json +18 -12
- package/src/{DevToolsProvider.ts → api/DevToolsProvider.ts} +29 -1
- package/src/{providers → api/providers}/DevToolsMetadataProvider.ts +210 -2
- package/src/api/schemas/DevAtomMetadata.ts +26 -0
- package/src/api/schemas/DevCommandMetadata.ts +9 -0
- package/src/api/schemas/DevEntityMetadata.ts +57 -0
- package/src/api/schemas/DevEnvMetadata.ts +22 -0
- package/src/{schemas → api/schemas}/DevMetadata.ts +10 -1
- package/src/api/schemas/DevRouteMetadata.ts +8 -0
- package/src/index.ts +23 -16
- package/src/ui/AppRouter.tsx +85 -2
- package/src/ui/components/DevAtomsViewer.tsx +636 -0
- package/src/ui/components/DevCacheInspector.tsx +423 -0
- package/src/ui/components/DevDashboard.tsx +188 -0
- package/src/ui/components/DevEnvExplorer.tsx +462 -0
- package/src/ui/components/DevLayout.tsx +65 -4
- package/src/ui/components/DevLogViewer.tsx +161 -163
- package/src/ui/components/DevQueueMonitor.tsx +51 -0
- package/src/ui/components/DevTopicsViewer.tsx +690 -0
- package/src/ui/components/actions/ActionGroup.tsx +37 -0
- package/src/ui/components/actions/ActionItem.tsx +138 -0
- package/src/ui/components/actions/DevActionsExplorer.tsx +132 -0
- package/src/ui/components/actions/MethodBadge.tsx +18 -0
- package/src/ui/components/actions/SchemaViewer.tsx +21 -0
- package/src/ui/components/actions/TryItPanel.tsx +140 -0
- package/src/ui/components/actions/constants.ts +7 -0
- package/src/ui/components/actions/helpers.ts +18 -0
- package/src/ui/components/actions/index.ts +8 -0
- package/src/ui/components/db/ColumnBadge.tsx +55 -0
- package/src/ui/components/db/DevDbStudio.tsx +485 -0
- package/src/ui/components/db/constants.ts +11 -0
- package/src/ui/components/db/index.ts +4 -0
- package/src/ui/components/db/types.ts +7 -0
- package/src/ui/components/graph/DevDependencyGraph.tsx +358 -0
- package/src/ui/components/graph/GraphControls.tsx +162 -0
- package/src/ui/components/graph/NodeDetails.tsx +181 -0
- package/src/ui/components/graph/ProviderNode.tsx +97 -0
- package/src/ui/components/graph/constants.ts +35 -0
- package/src/ui/components/graph/helpers.ts +443 -0
- package/src/ui/components/graph/index.ts +7 -0
- package/src/ui/components/graph/types.ts +28 -0
- package/src/ui/styles.css +0 -6
- package/src/ui/resources/wotfardregular/stylesheet.css +0 -12
- package/src/ui/resources/wotfardregular/wotfard-regular-webfont.eot +0 -0
- package/src/ui/resources/wotfardregular/wotfard-regular-webfont.ttf +0 -0
- package/src/ui/resources/wotfardregular/wotfard-regular-webfont.woff2 +0 -0
- /package/src/{entities → api/entities}/logs.ts +0 -0
- /package/src/{providers → api/providers}/DevToolsDatabaseProvider.ts +0 -0
- /package/src/{repositories → api/repositories}/LogRepository.ts +0 -0
- /package/src/{schemas → api/schemas}/DevActionMetadata.ts +0 -0
- /package/src/{schemas → api/schemas}/DevBucketMetadata.ts +0 -0
- /package/src/{schemas → api/schemas}/DevCacheMetadata.ts +0 -0
- /package/src/{schemas → api/schemas}/DevModuleMetadata.ts +0 -0
- /package/src/{schemas → api/schemas}/DevPageMetadata.ts +0 -0
- /package/src/{schemas → api/schemas}/DevProviderMetadata.ts +0 -0
- /package/src/{schemas → api/schemas}/DevQueueMetadata.ts +0 -0
- /package/src/{schemas → api/schemas}/DevRealmMetadata.ts +0 -0
- /package/src/{schemas → api/schemas}/DevSchedulerMetadata.ts +0 -0
- /package/src/{schemas → api/schemas}/DevTopicMetadata.ts +0 -0
package/dist/index.js
CHANGED
|
@@ -3,17 +3,18 @@ import { join } from "node:path";
|
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { $batch } from "alepha/batch";
|
|
5
5
|
import { $logger, JsonFormatterProvider } from "alepha/logger";
|
|
6
|
-
import { $entity, NodeSqliteProvider, Repository, parseQueryString, pg } from "alepha/orm";
|
|
6
|
+
import { $entity, NodeSqliteProvider, PG_CREATED_AT, PG_DEFAULT, PG_DELETED_AT, PG_IDENTITY, PG_PRIMARY_KEY, PG_REF, PG_SERIAL, PG_UPDATED_AT, PG_VERSION, Repository, RepositoryProvider, parseQueryString, pg } from "alepha/orm";
|
|
7
7
|
import { $action, $route, ServerProvider } from "alepha/server";
|
|
8
8
|
import { $serve } from "alepha/server/static";
|
|
9
9
|
import { $bucket } from "alepha/bucket";
|
|
10
10
|
import { $cache } from "alepha/cache";
|
|
11
|
+
import { $command } from "alepha/command";
|
|
11
12
|
import { $queue } from "alepha/queue";
|
|
12
13
|
import { $scheduler } from "alepha/scheduler";
|
|
13
14
|
import { $realm } from "alepha/security";
|
|
14
15
|
import { $topic } from "alepha/topic";
|
|
15
16
|
|
|
16
|
-
//#region src/entities/logs.ts
|
|
17
|
+
//#region src/api/entities/logs.ts
|
|
17
18
|
const logs = $entity({
|
|
18
19
|
name: "logs",
|
|
19
20
|
schema: t.object({
|
|
@@ -36,7 +37,7 @@ const logs = $entity({
|
|
|
36
37
|
});
|
|
37
38
|
|
|
38
39
|
//#endregion
|
|
39
|
-
//#region src/providers/DevToolsMetadataProvider.ts
|
|
40
|
+
//#region src/api/providers/DevToolsMetadataProvider.ts
|
|
40
41
|
var DevToolsMetadataProvider = class {
|
|
41
42
|
alepha = $inject(Alepha);
|
|
42
43
|
log = $logger();
|
|
@@ -128,7 +129,7 @@ var DevToolsMetadataProvider = class {
|
|
|
128
129
|
const graph = this.alepha.graph();
|
|
129
130
|
return Object.entries(graph).map(([name, info]) => ({
|
|
130
131
|
name,
|
|
131
|
-
module: info.module,
|
|
132
|
+
module: info.module ?? name,
|
|
132
133
|
dependencies: info.from,
|
|
133
134
|
aliases: info.as
|
|
134
135
|
}));
|
|
@@ -145,6 +146,124 @@ var DevToolsMetadataProvider = class {
|
|
|
145
146
|
providers: Array.from(providers)
|
|
146
147
|
}));
|
|
147
148
|
}
|
|
149
|
+
getEntities() {
|
|
150
|
+
try {
|
|
151
|
+
return this.alepha.inject(RepositoryProvider).getRepositories().map((repo) => {
|
|
152
|
+
const entity = repo.entity;
|
|
153
|
+
const schema = entity.schema;
|
|
154
|
+
const options = entity.options;
|
|
155
|
+
const columns = Object.entries(schema.properties).map(([name, field]) => {
|
|
156
|
+
const fieldSchema = field;
|
|
157
|
+
const refData = fieldSchema[PG_REF];
|
|
158
|
+
return {
|
|
159
|
+
name,
|
|
160
|
+
type: this.getColumnType(fieldSchema),
|
|
161
|
+
nullable: this.isNullable(fieldSchema),
|
|
162
|
+
primaryKey: PG_PRIMARY_KEY in fieldSchema,
|
|
163
|
+
identity: PG_IDENTITY in fieldSchema || PG_SERIAL in fieldSchema,
|
|
164
|
+
createdAt: PG_CREATED_AT in fieldSchema,
|
|
165
|
+
updatedAt: PG_UPDATED_AT in fieldSchema,
|
|
166
|
+
deletedAt: PG_DELETED_AT in fieldSchema,
|
|
167
|
+
version: PG_VERSION in fieldSchema,
|
|
168
|
+
hasDefault: PG_DEFAULT in fieldSchema,
|
|
169
|
+
ref: refData ? {
|
|
170
|
+
entity: refData.ref?.()?.entity?.name ?? "unknown",
|
|
171
|
+
column: refData.ref?.()?.name ?? "unknown",
|
|
172
|
+
onUpdate: refData.actions?.onUpdate,
|
|
173
|
+
onDelete: refData.actions?.onDelete
|
|
174
|
+
} : void 0
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
const indexes = (options.indexes ?? []).map((idx) => {
|
|
178
|
+
if (typeof idx === "string") return {
|
|
179
|
+
columns: [idx],
|
|
180
|
+
unique: false
|
|
181
|
+
};
|
|
182
|
+
return {
|
|
183
|
+
name: idx.name,
|
|
184
|
+
columns: idx.column ? [idx.column] : idx.columns ?? [],
|
|
185
|
+
unique: idx.unique ?? false
|
|
186
|
+
};
|
|
187
|
+
});
|
|
188
|
+
const foreignKeys = (options.foreignKeys ?? []).map((fk) => ({
|
|
189
|
+
name: fk.name,
|
|
190
|
+
columns: fk.columns.map(String),
|
|
191
|
+
foreignEntity: fk.foreignColumns?.[0]?.()?.entity?.name ?? "unknown",
|
|
192
|
+
foreignColumns: fk.foreignColumns?.map((fc) => fc?.()?.name ?? "unknown")
|
|
193
|
+
}));
|
|
194
|
+
const constraints = (options.constraints ?? []).map((c) => ({
|
|
195
|
+
name: c.name,
|
|
196
|
+
columns: c.columns.map(String),
|
|
197
|
+
unique: !!c.unique,
|
|
198
|
+
hasCheck: !!c.check
|
|
199
|
+
}));
|
|
200
|
+
return {
|
|
201
|
+
name: entity.name,
|
|
202
|
+
provider: repo.provider.constructor.name,
|
|
203
|
+
columns,
|
|
204
|
+
indexes,
|
|
205
|
+
foreignKeys,
|
|
206
|
+
constraints
|
|
207
|
+
};
|
|
208
|
+
});
|
|
209
|
+
} catch {
|
|
210
|
+
return [];
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
getColumnType(field) {
|
|
214
|
+
if (t.schema.isUnion(field) && field.anyOf) {
|
|
215
|
+
const nonNull = field.anyOf.find((type) => !t.schema.isNull(type));
|
|
216
|
+
if (nonNull) return this.getColumnType(nonNull);
|
|
217
|
+
}
|
|
218
|
+
const f = field;
|
|
219
|
+
if (t.schema.isUnsafe(field) && f.type === "string" && Array.isArray(f.enum)) return "enum";
|
|
220
|
+
if (t.schema.isString(field)) {
|
|
221
|
+
if (f.enum) return "enum";
|
|
222
|
+
if (f.format === "uuid") return "uuid";
|
|
223
|
+
if (f.format === "date-time") return "datetime";
|
|
224
|
+
if (f.format === "date") return "date";
|
|
225
|
+
if (f.format === "bigint") return "bigint";
|
|
226
|
+
return "text";
|
|
227
|
+
}
|
|
228
|
+
if (t.schema.isInteger(field)) return "integer";
|
|
229
|
+
if (t.schema.isNumber(field)) return "number";
|
|
230
|
+
if (t.schema.isBoolean(field)) return "boolean";
|
|
231
|
+
if (t.schema.isArray(field)) return "array";
|
|
232
|
+
if (t.schema.isObject(field)) return "json";
|
|
233
|
+
if (t.schema.isLiteral(field)) return "literal";
|
|
234
|
+
return "unknown";
|
|
235
|
+
}
|
|
236
|
+
isNullable(field) {
|
|
237
|
+
if (t.schema.isUnion(field) && field.anyOf) return field.anyOf.some((type) => t.schema.isNull(type));
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
getCommands() {
|
|
241
|
+
return this.alepha.primitives($command).filter((cmd) => !cmd.options.hide).map((command) => ({
|
|
242
|
+
name: command.name,
|
|
243
|
+
description: command.options.description,
|
|
244
|
+
hidden: command.options.hide
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
getRoutes() {
|
|
248
|
+
return [];
|
|
249
|
+
}
|
|
250
|
+
getEnvs() {
|
|
251
|
+
return this.alepha.getEnvSchemas().map((item, index) => ({
|
|
252
|
+
propertyKey: `env_${index}`,
|
|
253
|
+
schema: item.schema,
|
|
254
|
+
values: item.values,
|
|
255
|
+
serviceName: void 0
|
|
256
|
+
}));
|
|
257
|
+
}
|
|
258
|
+
getAtoms() {
|
|
259
|
+
return this.alepha.store.getAtoms(false).map(({ atom, value }) => ({
|
|
260
|
+
name: atom.key,
|
|
261
|
+
description: atom.options.description,
|
|
262
|
+
schema: atom.schema,
|
|
263
|
+
defaultValue: atom.options.default,
|
|
264
|
+
currentValue: value
|
|
265
|
+
}));
|
|
266
|
+
}
|
|
148
267
|
getMetadata() {
|
|
149
268
|
return {
|
|
150
269
|
actions: this.getActions(),
|
|
@@ -156,7 +275,12 @@ var DevToolsMetadataProvider = class {
|
|
|
156
275
|
caches: this.getCaches(),
|
|
157
276
|
pages: this.getPages(),
|
|
158
277
|
providers: this.getProviders(),
|
|
159
|
-
modules: this.getModules()
|
|
278
|
+
modules: this.getModules(),
|
|
279
|
+
entities: this.getEntities(),
|
|
280
|
+
commands: this.getCommands(),
|
|
281
|
+
routes: this.getRoutes(),
|
|
282
|
+
envs: this.getEnvs(),
|
|
283
|
+
atoms: this.getAtoms()
|
|
160
284
|
};
|
|
161
285
|
}
|
|
162
286
|
getProviderName(provider) {
|
|
@@ -167,7 +291,7 @@ var DevToolsMetadataProvider = class {
|
|
|
167
291
|
};
|
|
168
292
|
|
|
169
293
|
//#endregion
|
|
170
|
-
//#region src/providers/DevToolsDatabaseProvider.ts
|
|
294
|
+
//#region src/api/providers/DevToolsDatabaseProvider.ts
|
|
171
295
|
var DevToolsDatabaseProvider = class extends NodeSqliteProvider {
|
|
172
296
|
get name() {
|
|
173
297
|
return "devtools";
|
|
@@ -176,7 +300,7 @@ var DevToolsDatabaseProvider = class extends NodeSqliteProvider {
|
|
|
176
300
|
};
|
|
177
301
|
|
|
178
302
|
//#endregion
|
|
179
|
-
//#region src/repositories/LogRepository.ts
|
|
303
|
+
//#region src/api/repositories/LogRepository.ts
|
|
180
304
|
var LogRepository = class extends Repository {
|
|
181
305
|
constructor() {
|
|
182
306
|
super(logs, DevToolsDatabaseProvider);
|
|
@@ -184,7 +308,7 @@ var LogRepository = class extends Repository {
|
|
|
184
308
|
};
|
|
185
309
|
|
|
186
310
|
//#endregion
|
|
187
|
-
//#region src/schemas/DevActionMetadata.ts
|
|
311
|
+
//#region src/api/schemas/DevActionMetadata.ts
|
|
188
312
|
const devActionMetadataSchema = t.object({
|
|
189
313
|
name: t.text(),
|
|
190
314
|
group: t.text(),
|
|
@@ -205,7 +329,17 @@ const devActionMetadataSchema = t.object({
|
|
|
205
329
|
});
|
|
206
330
|
|
|
207
331
|
//#endregion
|
|
208
|
-
//#region src/schemas/
|
|
332
|
+
//#region src/api/schemas/DevAtomMetadata.ts
|
|
333
|
+
const devAtomMetadataSchema = t.object({
|
|
334
|
+
name: t.text(),
|
|
335
|
+
description: t.optional(t.text()),
|
|
336
|
+
schema: t.any(),
|
|
337
|
+
defaultValue: t.optional(t.any()),
|
|
338
|
+
currentValue: t.optional(t.any())
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
//#endregion
|
|
342
|
+
//#region src/api/schemas/DevBucketMetadata.ts
|
|
209
343
|
const devBucketMetadataSchema = t.object({
|
|
210
344
|
name: t.text(),
|
|
211
345
|
description: t.optional(t.text()),
|
|
@@ -215,7 +349,7 @@ const devBucketMetadataSchema = t.object({
|
|
|
215
349
|
});
|
|
216
350
|
|
|
217
351
|
//#endregion
|
|
218
|
-
//#region src/schemas/DevCacheMetadata.ts
|
|
352
|
+
//#region src/api/schemas/DevCacheMetadata.ts
|
|
219
353
|
const devCacheMetadataSchema = t.object({
|
|
220
354
|
name: t.text(),
|
|
221
355
|
ttl: t.optional(t.any()),
|
|
@@ -224,14 +358,77 @@ const devCacheMetadataSchema = t.object({
|
|
|
224
358
|
});
|
|
225
359
|
|
|
226
360
|
//#endregion
|
|
227
|
-
//#region src/schemas/
|
|
361
|
+
//#region src/api/schemas/DevCommandMetadata.ts
|
|
362
|
+
const devCommandMetadataSchema = t.object({
|
|
363
|
+
name: t.text(),
|
|
364
|
+
description: t.optional(t.text()),
|
|
365
|
+
hidden: t.optional(t.boolean())
|
|
366
|
+
});
|
|
367
|
+
|
|
368
|
+
//#endregion
|
|
369
|
+
//#region src/api/schemas/DevEntityMetadata.ts
|
|
370
|
+
const devEntityColumnSchema = t.object({
|
|
371
|
+
name: t.text(),
|
|
372
|
+
type: t.text(),
|
|
373
|
+
nullable: t.boolean(),
|
|
374
|
+
primaryKey: t.boolean(),
|
|
375
|
+
identity: t.boolean(),
|
|
376
|
+
createdAt: t.boolean(),
|
|
377
|
+
updatedAt: t.boolean(),
|
|
378
|
+
deletedAt: t.boolean(),
|
|
379
|
+
version: t.boolean(),
|
|
380
|
+
hasDefault: t.boolean(),
|
|
381
|
+
ref: t.optional(t.object({
|
|
382
|
+
entity: t.text(),
|
|
383
|
+
column: t.text(),
|
|
384
|
+
onUpdate: t.optional(t.text()),
|
|
385
|
+
onDelete: t.optional(t.text())
|
|
386
|
+
}))
|
|
387
|
+
});
|
|
388
|
+
const devEntityIndexSchema = t.object({
|
|
389
|
+
name: t.optional(t.text()),
|
|
390
|
+
columns: t.array(t.text()),
|
|
391
|
+
unique: t.boolean()
|
|
392
|
+
});
|
|
393
|
+
const devEntityForeignKeySchema = t.object({
|
|
394
|
+
name: t.optional(t.text()),
|
|
395
|
+
columns: t.array(t.text()),
|
|
396
|
+
foreignEntity: t.text(),
|
|
397
|
+
foreignColumns: t.array(t.text())
|
|
398
|
+
});
|
|
399
|
+
const devEntityConstraintSchema = t.object({
|
|
400
|
+
name: t.optional(t.text()),
|
|
401
|
+
columns: t.array(t.text()),
|
|
402
|
+
unique: t.boolean(),
|
|
403
|
+
hasCheck: t.boolean()
|
|
404
|
+
});
|
|
405
|
+
const devEntityMetadataSchema = t.object({
|
|
406
|
+
name: t.text(),
|
|
407
|
+
provider: t.text(),
|
|
408
|
+
columns: t.array(devEntityColumnSchema),
|
|
409
|
+
indexes: t.array(devEntityIndexSchema),
|
|
410
|
+
foreignKeys: t.array(devEntityForeignKeySchema),
|
|
411
|
+
constraints: t.array(devEntityConstraintSchema)
|
|
412
|
+
});
|
|
413
|
+
|
|
414
|
+
//#endregion
|
|
415
|
+
//#region src/api/schemas/DevEnvMetadata.ts
|
|
416
|
+
const devEnvMetadataSchema = t.object({
|
|
417
|
+
propertyKey: t.text(),
|
|
418
|
+
schema: t.any(),
|
|
419
|
+
values: t.record(t.text(), t.any()),
|
|
420
|
+
serviceName: t.optional(t.text())
|
|
421
|
+
});
|
|
422
|
+
|
|
423
|
+
//#endregion
|
|
424
|
+
//#region src/api/schemas/DevModuleMetadata.ts
|
|
228
425
|
const devModuleMetadataSchema = t.object({
|
|
229
426
|
name: t.text(),
|
|
230
427
|
providers: t.array(t.text())
|
|
231
428
|
});
|
|
232
429
|
|
|
233
430
|
//#endregion
|
|
234
|
-
//#region src/schemas/DevPageMetadata.ts
|
|
431
|
+
//#region src/api/schemas/DevPageMetadata.ts
|
|
235
432
|
const devPageMetadataSchema = t.object({
|
|
236
433
|
name: t.text(),
|
|
237
434
|
description: t.optional(t.text()),
|
|
@@ -251,7 +448,7 @@ const devPageMetadataSchema = t.object({
|
|
|
251
448
|
});
|
|
252
449
|
|
|
253
450
|
//#endregion
|
|
254
|
-
//#region src/schemas/DevProviderMetadata.ts
|
|
451
|
+
//#region src/api/schemas/DevProviderMetadata.ts
|
|
255
452
|
const devProviderMetadataSchema = t.object({
|
|
256
453
|
name: t.text(),
|
|
257
454
|
module: t.optional(t.text()),
|
|
@@ -260,7 +457,7 @@ const devProviderMetadataSchema = t.object({
|
|
|
260
457
|
});
|
|
261
458
|
|
|
262
459
|
//#endregion
|
|
263
|
-
//#region src/schemas/DevQueueMetadata.ts
|
|
460
|
+
//#region src/api/schemas/DevQueueMetadata.ts
|
|
264
461
|
const devQueueMetadataSchema = t.object({
|
|
265
462
|
name: t.text(),
|
|
266
463
|
description: t.optional(t.text()),
|
|
@@ -269,7 +466,7 @@ const devQueueMetadataSchema = t.object({
|
|
|
269
466
|
});
|
|
270
467
|
|
|
271
468
|
//#endregion
|
|
272
|
-
//#region src/schemas/DevRealmMetadata.ts
|
|
469
|
+
//#region src/api/schemas/DevRealmMetadata.ts
|
|
273
470
|
const devRealmMetadataSchema = t.object({
|
|
274
471
|
name: t.text(),
|
|
275
472
|
description: t.optional(t.text()),
|
|
@@ -285,7 +482,14 @@ const devRealmMetadataSchema = t.object({
|
|
|
285
482
|
});
|
|
286
483
|
|
|
287
484
|
//#endregion
|
|
288
|
-
//#region src/schemas/
|
|
485
|
+
//#region src/api/schemas/DevRouteMetadata.ts
|
|
486
|
+
const devRouteMetadataSchema = t.object({
|
|
487
|
+
method: t.text(),
|
|
488
|
+
path: t.text()
|
|
489
|
+
});
|
|
490
|
+
|
|
491
|
+
//#endregion
|
|
492
|
+
//#region src/api/schemas/DevSchedulerMetadata.ts
|
|
289
493
|
const devSchedulerMetadataSchema = t.object({
|
|
290
494
|
name: t.text(),
|
|
291
495
|
description: t.optional(t.text()),
|
|
@@ -295,7 +499,7 @@ const devSchedulerMetadataSchema = t.object({
|
|
|
295
499
|
});
|
|
296
500
|
|
|
297
501
|
//#endregion
|
|
298
|
-
//#region src/schemas/DevTopicMetadata.ts
|
|
502
|
+
//#region src/api/schemas/DevTopicMetadata.ts
|
|
299
503
|
const devTopicMetadataSchema = t.object({
|
|
300
504
|
name: t.text(),
|
|
301
505
|
description: t.optional(t.text()),
|
|
@@ -304,7 +508,7 @@ const devTopicMetadataSchema = t.object({
|
|
|
304
508
|
});
|
|
305
509
|
|
|
306
510
|
//#endregion
|
|
307
|
-
//#region src/schemas/DevMetadata.ts
|
|
511
|
+
//#region src/api/schemas/DevMetadata.ts
|
|
308
512
|
const devMetadataSchema = t.object({
|
|
309
513
|
actions: t.array(devActionMetadataSchema),
|
|
310
514
|
queues: t.array(devQueueMetadataSchema),
|
|
@@ -315,11 +519,16 @@ const devMetadataSchema = t.object({
|
|
|
315
519
|
caches: t.array(devCacheMetadataSchema),
|
|
316
520
|
pages: t.array(devPageMetadataSchema),
|
|
317
521
|
providers: t.array(devProviderMetadataSchema),
|
|
318
|
-
modules: t.array(devModuleMetadataSchema)
|
|
522
|
+
modules: t.array(devModuleMetadataSchema),
|
|
523
|
+
entities: t.array(devEntityMetadataSchema),
|
|
524
|
+
commands: t.array(devCommandMetadataSchema),
|
|
525
|
+
routes: t.array(devRouteMetadataSchema),
|
|
526
|
+
envs: t.array(devEnvMetadataSchema),
|
|
527
|
+
atoms: t.array(devAtomMetadataSchema)
|
|
319
528
|
});
|
|
320
529
|
|
|
321
530
|
//#endregion
|
|
322
|
-
//#region src/DevToolsProvider.ts
|
|
531
|
+
//#region src/api/DevToolsProvider.ts
|
|
323
532
|
var DevToolsProvider = class {
|
|
324
533
|
log = $logger();
|
|
325
534
|
alepha = $inject(Alepha);
|
|
@@ -346,6 +555,7 @@ var DevToolsProvider = class {
|
|
|
346
555
|
handler: async (ev) => {
|
|
347
556
|
try {
|
|
348
557
|
if (!this.alepha.isStarted()) return;
|
|
558
|
+
ev.entry.message = ev.entry.message?.slice(0, 2e3);
|
|
349
559
|
if (ev.entry.module === "alepha.devtools") return;
|
|
350
560
|
if (ev.entry.level === "TRACE" && ev.entry.module === "alepha.batch") return;
|
|
351
561
|
if (this.alepha.isProduction() && ev.entry.level === "TRACE") return;
|
|
@@ -361,7 +571,7 @@ var DevToolsProvider = class {
|
|
|
361
571
|
});
|
|
362
572
|
uiRoute = $serve({
|
|
363
573
|
path: "/devtools",
|
|
364
|
-
root: join(fileURLToPath(import.meta.url), "
|
|
574
|
+
root: join(fileURLToPath(import.meta.url), "../../../assets/devtools"),
|
|
365
575
|
historyApiFallback: true
|
|
366
576
|
});
|
|
367
577
|
metadataRoute = $route({
|
|
@@ -386,6 +596,26 @@ var DevToolsProvider = class {
|
|
|
386
596
|
return this.logs.paginate(query, query.search ? { where: parseQueryString(query.search) } : {}, { count: true });
|
|
387
597
|
}
|
|
388
598
|
});
|
|
599
|
+
updateAtomRoute = $route({
|
|
600
|
+
method: "POST",
|
|
601
|
+
path: "/devtools/api/atoms",
|
|
602
|
+
silent: true,
|
|
603
|
+
schema: {
|
|
604
|
+
body: t.object({
|
|
605
|
+
name: t.text(),
|
|
606
|
+
value: t.any()
|
|
607
|
+
}),
|
|
608
|
+
response: t.object({ success: t.boolean() })
|
|
609
|
+
},
|
|
610
|
+
handler: ({ body }) => {
|
|
611
|
+
const atomEntry = this.alepha.store.getAtoms(false).find((a) => a.atom.key === body.name);
|
|
612
|
+
if (atomEntry) {
|
|
613
|
+
this.alepha.store.set(atomEntry.atom, body.value);
|
|
614
|
+
return { success: true };
|
|
615
|
+
}
|
|
616
|
+
return { success: false };
|
|
617
|
+
}
|
|
618
|
+
});
|
|
389
619
|
};
|
|
390
620
|
|
|
391
621
|
//#endregion
|
|
@@ -409,6 +639,7 @@ const AlephaDevtools = $module({
|
|
|
409
639
|
LogRepository
|
|
410
640
|
],
|
|
411
641
|
register: (alepha) => {
|
|
642
|
+
if (!alepha.isViteDev()) return;
|
|
412
643
|
alepha.with(DevToolsProvider);
|
|
413
644
|
alepha.with(DevToolsDatabaseProvider);
|
|
414
645
|
alepha.with(DevToolsMetadataProvider);
|
|
@@ -417,5 +648,5 @@ const AlephaDevtools = $module({
|
|
|
417
648
|
});
|
|
418
649
|
|
|
419
650
|
//#endregion
|
|
420
|
-
export { AlephaDevtools, DevToolsMetadataProvider, devActionMetadataSchema, devBucketMetadataSchema, devCacheMetadataSchema, devMetadataSchema, devModuleMetadataSchema, devPageMetadataSchema, devProviderMetadataSchema, devQueueMetadataSchema, devRealmMetadataSchema, devSchedulerMetadataSchema, devTopicMetadataSchema };
|
|
651
|
+
export { AlephaDevtools, DevToolsMetadataProvider, devActionMetadataSchema, devBucketMetadataSchema, devCacheMetadataSchema, devCommandMetadataSchema, devEntityColumnSchema, devEntityConstraintSchema, devEntityForeignKeySchema, devEntityIndexSchema, devEntityMetadataSchema, devMetadataSchema, devModuleMetadataSchema, devPageMetadataSchema, devProviderMetadataSchema, devQueueMetadataSchema, devRealmMetadataSchema, devRouteMetadataSchema, devSchedulerMetadataSchema, devTopicMetadataSchema };
|
|
421
652
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"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.integer(),\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 actionPrimitives = this.alepha.primitives($action);\n\n return actionPrimitives.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 queuePrimitives = this.alepha.primitives($queue);\n\n return queuePrimitives.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 schedulerPrimitives = this.alepha.primitives($scheduler);\n\n return schedulerPrimitives.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 topicPrimitives = this.alepha.primitives($topic);\n\n return topicPrimitives.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 bucketPrimitives = this.alepha.primitives($bucket);\n\n return bucketPrimitives.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 realmPrimitives = this.alepha.primitives($realm);\n\n return realmPrimitives.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 cachePrimitives = this.alepha.primitives($cache);\n\n return cachePrimitives.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 pagePrimitives = this.alepha.primitives($page);\n //\n // return pagePrimitives.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 { $logger, JsonFormatterProvider, type LogEntry } 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(logs.schema),\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 primitives: [],\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.store.push(\"alepha.build.assets\", \"@alepha/devtools\");\n },\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["columns: DevEntityColumn[]","indexes: DevEntityIndex[]","foreignKeys: DevEntityForeignKey[]","constraints: DevEntityConstraint[]"],"sources":["../src/api/entities/logs.ts","../src/api/providers/DevToolsMetadataProvider.ts","../src/api/providers/DevToolsDatabaseProvider.ts","../src/api/repositories/LogRepository.ts","../src/api/schemas/DevActionMetadata.ts","../src/api/schemas/DevAtomMetadata.ts","../src/api/schemas/DevBucketMetadata.ts","../src/api/schemas/DevCacheMetadata.ts","../src/api/schemas/DevCommandMetadata.ts","../src/api/schemas/DevEntityMetadata.ts","../src/api/schemas/DevEnvMetadata.ts","../src/api/schemas/DevModuleMetadata.ts","../src/api/schemas/DevPageMetadata.ts","../src/api/schemas/DevProviderMetadata.ts","../src/api/schemas/DevQueueMetadata.ts","../src/api/schemas/DevRealmMetadata.ts","../src/api/schemas/DevRouteMetadata.ts","../src/api/schemas/DevSchedulerMetadata.ts","../src/api/schemas/DevTopicMetadata.ts","../src/api/schemas/DevMetadata.ts","../src/api/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.integer(),\n }),\n});\n\nexport type DevLogEntry = Static<typeof logs.schema>;\n","import { $inject, Alepha, type TObject, type TSchema, t } from \"alepha\";\nimport { $bucket } from \"alepha/bucket\";\nimport { $cache } from \"alepha/cache\";\nimport { $command } from \"alepha/command\";\nimport { $logger } from \"alepha/logger\";\nimport {\n PG_CREATED_AT,\n PG_DEFAULT,\n PG_DELETED_AT,\n PG_IDENTITY,\n PG_PRIMARY_KEY,\n PG_REF,\n PG_SERIAL,\n PG_UPDATED_AT,\n PG_VERSION,\n RepositoryProvider,\n} from \"alepha/orm\";\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 { DevAtomMetadata } from \"../schemas/DevAtomMetadata.ts\";\nimport type { DevBucketMetadata } from \"../schemas/DevBucketMetadata.ts\";\nimport type { DevCacheMetadata } from \"../schemas/DevCacheMetadata.ts\";\nimport type { DevCommandMetadata } from \"../schemas/DevCommandMetadata.ts\";\nimport type {\n DevEntityColumn,\n DevEntityConstraint,\n DevEntityForeignKey,\n DevEntityIndex,\n DevEntityMetadata,\n} from \"../schemas/DevEntityMetadata.ts\";\nimport type { DevEnvMetadata } from \"../schemas/DevEnvMetadata.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 { DevRouteMetadata } from \"../schemas/DevRouteMetadata.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 actionPrimitives = this.alepha.primitives($action);\n\n return actionPrimitives.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 queuePrimitives = this.alepha.primitives($queue);\n\n return queuePrimitives.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 schedulerPrimitives = this.alepha.primitives($scheduler);\n\n return schedulerPrimitives.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 topicPrimitives = this.alepha.primitives($topic);\n\n return topicPrimitives.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 bucketPrimitives = this.alepha.primitives($bucket);\n\n return bucketPrimitives.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 realmPrimitives = this.alepha.primitives($realm);\n\n return realmPrimitives.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 cachePrimitives = this.alepha.primitives($cache);\n\n return cachePrimitives.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 pagePrimitives = this.alepha.primitives($page);\n //\n // return pagePrimitives.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 ?? name,\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 getEntities(): DevEntityMetadata[] {\n try {\n const repositoryProvider = this.alepha.inject(RepositoryProvider);\n const repositories = repositoryProvider.getRepositories();\n\n return repositories.map((repo) => {\n const entity = repo.entity;\n const schema = entity.schema as TObject;\n const options = entity.options;\n\n // Extract columns from schema\n const columns: DevEntityColumn[] = Object.entries(\n schema.properties,\n ).map(([name, field]) => {\n const fieldSchema = field as TSchema & Record<symbol, any>;\n const refData = fieldSchema[PG_REF];\n\n return {\n name,\n type: this.getColumnType(fieldSchema),\n nullable: this.isNullable(fieldSchema),\n primaryKey: PG_PRIMARY_KEY in fieldSchema,\n identity: PG_IDENTITY in fieldSchema || PG_SERIAL in fieldSchema,\n createdAt: PG_CREATED_AT in fieldSchema,\n updatedAt: PG_UPDATED_AT in fieldSchema,\n deletedAt: PG_DELETED_AT in fieldSchema,\n version: PG_VERSION in fieldSchema,\n hasDefault: PG_DEFAULT in fieldSchema,\n ref: refData\n ? {\n entity: refData.ref?.()?.entity?.name ?? \"unknown\",\n column: refData.ref?.()?.name ?? \"unknown\",\n onUpdate: refData.actions?.onUpdate,\n onDelete: refData.actions?.onDelete,\n }\n : undefined,\n };\n });\n\n // Extract indexes\n const indexes: DevEntityIndex[] = (options.indexes ?? []).map(\n (idx: any) => {\n if (typeof idx === \"string\") {\n return { columns: [idx], unique: false };\n }\n return {\n name: idx.name,\n columns: idx.column ? [idx.column] : (idx.columns ?? []),\n unique: idx.unique ?? false,\n };\n },\n );\n\n // Extract foreign keys\n const foreignKeys: DevEntityForeignKey[] = (\n options.foreignKeys ?? []\n ).map((fk: any) => ({\n name: fk.name,\n columns: fk.columns.map(String),\n foreignEntity: fk.foreignColumns?.[0]?.()?.entity?.name ?? \"unknown\",\n foreignColumns: fk.foreignColumns?.map(\n (fc: any) => fc?.()?.name ?? \"unknown\",\n ),\n }));\n\n // Extract constraints\n const constraints: DevEntityConstraint[] = (\n options.constraints ?? []\n ).map((c: any) => ({\n name: c.name,\n columns: c.columns.map(String),\n unique: !!c.unique,\n hasCheck: !!c.check,\n }));\n\n return {\n name: entity.name,\n provider: repo.provider.constructor.name,\n columns,\n indexes,\n foreignKeys,\n constraints,\n };\n });\n } catch {\n // RepositoryProvider not available (ORM not used)\n return [];\n }\n }\n\n protected getColumnType(field: TSchema): string {\n // Handle optional/nullable wrappers (unions with null)\n if (t.schema.isUnion(field) && (field as any).anyOf) {\n const types = (field as any).anyOf as TSchema[];\n const nonNull = types.find((type) => !t.schema.isNull(type));\n if (nonNull) {\n return this.getColumnType(nonNull);\n }\n }\n\n const f = field as any;\n\n // Check for enum (t.enum wraps in Unsafe with type=string and enum array)\n if (\n t.schema.isUnsafe(field) &&\n f.type === \"string\" &&\n Array.isArray(f.enum)\n ) {\n return \"enum\";\n }\n\n // Use TypeBox's type guards\n if (t.schema.isString(field)) {\n if (f.enum) return \"enum\";\n if (f.format === \"uuid\") return \"uuid\";\n if (f.format === \"date-time\") return \"datetime\";\n if (f.format === \"date\") return \"date\";\n if (f.format === \"bigint\") return \"bigint\";\n return \"text\";\n }\n if (t.schema.isInteger(field)) return \"integer\";\n if (t.schema.isNumber(field)) return \"number\";\n if (t.schema.isBoolean(field)) return \"boolean\";\n if (t.schema.isArray(field)) return \"array\";\n if (t.schema.isObject(field)) return \"json\";\n if (t.schema.isLiteral(field)) return \"literal\";\n\n return \"unknown\";\n }\n\n protected isNullable(field: TSchema): boolean {\n if (t.schema.isUnion(field) && (field as any).anyOf) {\n const types = (field as any).anyOf as TSchema[];\n return types.some((type) => t.schema.isNull(type));\n }\n return false;\n }\n\n public getCommands(): DevCommandMetadata[] {\n const commandPrimitives = this.alepha.primitives($command);\n\n return commandPrimitives\n .filter((cmd) => !cmd.options.hide)\n .map((command) => ({\n name: command.name,\n description: command.options.description,\n hidden: command.options.hide,\n }));\n }\n\n public getRoutes(): DevRouteMetadata[] {\n // Routes are the base primitive - actions and pages are routes\n // Showing them separately would be redundant with actions\n return [];\n }\n\n public getEnvs(): DevEnvMetadata[] {\n const envSchemas = this.alepha.getEnvSchemas();\n\n return envSchemas.map((item, index) => ({\n propertyKey: `env_${index}`,\n schema: item.schema,\n values: item.values,\n serviceName: undefined,\n }));\n }\n\n public getAtoms(): DevAtomMetadata[] {\n const atomsWithValues = this.alepha.store.getAtoms(false);\n\n return atomsWithValues.map(({ atom, value }) => ({\n name: atom.key,\n description: atom.options.description,\n schema: atom.schema,\n defaultValue: atom.options.default,\n currentValue: value,\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 entities: this.getEntities(),\n commands: this.getCommands(),\n routes: this.getRoutes(),\n envs: this.getEnvs(),\n atoms: this.getAtoms(),\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 devAtomMetadataSchema = t.object({\n /**\n * The unique name/key of the atom\n */\n name: t.text(),\n /**\n * Optional description of the atom\n */\n description: t.optional(t.text()),\n /**\n * The schema for the atom value (TypeBox/JSON Schema)\n */\n schema: t.any(),\n /**\n * The default value defined for the atom\n */\n defaultValue: t.optional(t.any()),\n /**\n * The current value of the atom\n */\n currentValue: t.optional(t.any()),\n});\n\nexport type DevAtomMetadata = Static<typeof devAtomMetadataSchema>;\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 devCommandMetadataSchema = t.object({\n name: t.text(),\n description: t.optional(t.text()),\n hidden: t.optional(t.boolean()),\n});\n\nexport type DevCommandMetadata = Static<typeof devCommandMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devEntityColumnSchema = t.object({\n name: t.text(),\n type: t.text(),\n nullable: t.boolean(),\n primaryKey: t.boolean(),\n identity: t.boolean(),\n createdAt: t.boolean(),\n updatedAt: t.boolean(),\n deletedAt: t.boolean(),\n version: t.boolean(),\n hasDefault: t.boolean(),\n ref: t.optional(\n t.object({\n entity: t.text(),\n column: t.text(),\n onUpdate: t.optional(t.text()),\n onDelete: t.optional(t.text()),\n }),\n ),\n});\n\nexport const devEntityIndexSchema = t.object({\n name: t.optional(t.text()),\n columns: t.array(t.text()),\n unique: t.boolean(),\n});\n\nexport const devEntityForeignKeySchema = t.object({\n name: t.optional(t.text()),\n columns: t.array(t.text()),\n foreignEntity: t.text(),\n foreignColumns: t.array(t.text()),\n});\n\nexport const devEntityConstraintSchema = t.object({\n name: t.optional(t.text()),\n columns: t.array(t.text()),\n unique: t.boolean(),\n hasCheck: t.boolean(),\n});\n\nexport const devEntityMetadataSchema = t.object({\n name: t.text(),\n provider: t.text(),\n columns: t.array(devEntityColumnSchema),\n indexes: t.array(devEntityIndexSchema),\n foreignKeys: t.array(devEntityForeignKeySchema),\n constraints: t.array(devEntityConstraintSchema),\n});\n\nexport type DevEntityColumn = Static<typeof devEntityColumnSchema>;\nexport type DevEntityIndex = Static<typeof devEntityIndexSchema>;\nexport type DevEntityForeignKey = Static<typeof devEntityForeignKeySchema>;\nexport type DevEntityConstraint = Static<typeof devEntityConstraintSchema>;\nexport type DevEntityMetadata = Static<typeof devEntityMetadataSchema>;\n","import { type Static, t } from \"alepha\";\n\nexport const devEnvMetadataSchema = t.object({\n /**\n * The property name in the service where $env is defined\n */\n propertyKey: t.text(),\n /**\n * The schema for the environment variables (TypeBox/JSON Schema)\n */\n schema: t.any(),\n /**\n * The parsed values from the environment\n */\n values: t.record(t.text(), t.any()),\n /**\n * The service class name where this $env is defined\n */\n serviceName: t.optional(t.text()),\n});\n\nexport type DevEnvMetadata = Static<typeof devEnvMetadataSchema>;\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 devRouteMetadataSchema = t.object({\n method: t.text(),\n path: t.text(),\n});\n\nexport type DevRouteMetadata = Static<typeof devRouteMetadataSchema>;\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 { devAtomMetadataSchema } from \"./DevAtomMetadata.ts\";\nimport { devBucketMetadataSchema } from \"./DevBucketMetadata.ts\";\nimport { devCacheMetadataSchema } from \"./DevCacheMetadata.ts\";\nimport { devCommandMetadataSchema } from \"./DevCommandMetadata.ts\";\nimport { devEntityMetadataSchema } from \"./DevEntityMetadata.ts\";\nimport { devEnvMetadataSchema } from \"./DevEnvMetadata.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 { devRouteMetadataSchema } from \"./DevRouteMetadata.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 entities: t.array(devEntityMetadataSchema),\n commands: t.array(devCommandMetadataSchema),\n routes: t.array(devRouteMetadataSchema),\n envs: t.array(devEnvMetadataSchema),\n atoms: t.array(devAtomMetadataSchema),\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 { $logger, JsonFormatterProvider, type LogEntry } 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 ev.entry.message = ev.entry.message?.slice(0, 2000); // limit message size\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(logs.schema),\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 protected readonly updateAtomRoute = $route({\n method: \"POST\",\n path: \"/devtools/api/atoms\",\n silent: true,\n schema: {\n body: t.object({\n name: t.text(),\n value: t.any(),\n }),\n response: t.object({\n success: t.boolean(),\n }),\n },\n handler: ({ body }) => {\n const atoms = this.alepha.store.getAtoms(false);\n const atomEntry = atoms.find((a) => a.atom.key === body.name);\n\n if (atomEntry) {\n this.alepha.store.set(atomEntry.atom, body.value);\n return { success: true };\n }\n\n return { success: false };\n },\n });\n}\n","import { $module } from \"alepha\";\nimport { DevToolsProvider } from \"./api/DevToolsProvider.ts\";\nimport { DevToolsDatabaseProvider } from \"./api/providers/DevToolsDatabaseProvider.ts\";\nimport { DevToolsMetadataProvider } from \"./api/providers/DevToolsMetadataProvider.ts\";\nimport { LogRepository } from \"./api/repositories/LogRepository.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./api/providers/DevToolsMetadataProvider.ts\";\nexport * from \"./api/schemas/DevActionMetadata.ts\";\nexport * from \"./api/schemas/DevBucketMetadata.ts\";\nexport * from \"./api/schemas/DevCacheMetadata.ts\";\nexport * from \"./api/schemas/DevCommandMetadata.ts\";\nexport * from \"./api/schemas/DevEntityMetadata.ts\";\nexport * from \"./api/schemas/DevMetadata.ts\";\nexport * from \"./api/schemas/DevModuleMetadata.ts\";\nexport * from \"./api/schemas/DevPageMetadata.ts\";\nexport * from \"./api/schemas/DevProviderMetadata.ts\";\nexport * from \"./api/schemas/DevQueueMetadata.ts\";\nexport * from \"./api/schemas/DevRealmMetadata.ts\";\nexport * from \"./api/schemas/DevRouteMetadata.ts\";\nexport * from \"./api/schemas/DevSchedulerMetadata.ts\";\nexport * from \"./api/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 primitives: [],\n services: [\n DevToolsMetadataProvider,\n DevToolsProvider,\n DevToolsDatabaseProvider,\n LogRepository,\n ],\n register: (alepha) => {\n if (!alepha.isViteDev()) {\n return;\n }\n\n alepha.with(DevToolsProvider);\n alepha.with(DevToolsDatabaseProvider);\n alepha.with(DevToolsMetadataProvider);\n alepha.store.push(\"alepha.build.assets\", \"@alepha/devtools\");\n },\n});\n"],"mappings":"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"}
|