@alepha/devtools 0.16.0 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -5
- package/dist/index.browser.js +224 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.d.ts +349 -321
- package/dist/index.js +293 -186
- package/dist/index.js.map +1 -1
- package/package.json +30 -23
- package/src/assets.ts +6 -0
- package/src/{api/entities → entities}/logs.ts +2 -2
- package/src/index.browser.ts +11 -0
- package/src/index.shared.ts +15 -0
- package/src/index.ts +11 -37
- package/src/{api/providers → providers}/DevToolsMetadataProvider.ts +84 -47
- package/src/providers/DevToolsProvider.ts +280 -0
- package/src/{api/schemas → schemas}/DevActionMetadata.ts +8 -0
- package/src/{api/schemas → schemas}/DevEntityMetadata.ts +3 -0
- package/src/{api/schemas → schemas}/DevMetadata.ts +13 -2
- package/src/{api/schemas → schemas}/DevPageMetadata.ts +3 -0
- package/src/{api/schemas → schemas}/DevTopicMetadata.ts +1 -0
- package/src/ui/AppRouter.tsx +55 -59
- package/src/ui/components/DevLayout.tsx +104 -84
- package/src/ui/components/configuration/ConfigAtoms.page.tsx +5 -0
- package/src/ui/components/configuration/ConfigAtoms.tsx +511 -0
- package/src/ui/components/configuration/ConfigEnv.page.tsx +5 -0
- package/src/ui/components/configuration/ConfigEnv.tsx +230 -0
- package/src/ui/components/configuration/DevConfiguration.tsx +36 -0
- package/src/ui/components/configuration/index.ts +3 -0
- package/src/ui/components/dashboard/DevDashboard.tsx +482 -0
- package/src/ui/components/database/DatabaseEditor.page.tsx +23 -0
- package/src/ui/components/database/DatabaseEditor.tsx +399 -0
- package/src/ui/components/database/DatabaseErd.page.tsx +28 -0
- package/src/ui/components/database/DatabaseErd.tsx +107 -0
- package/src/ui/components/database/DevDatabase.tsx +36 -0
- package/src/ui/components/database/EntityNode.tsx +83 -0
- package/src/ui/components/explorer/DevExplorer.tsx +351 -0
- package/src/ui/components/explorer/ExplorerTree.tsx +178 -0
- package/src/ui/components/explorer/panels/DevPanelAction.tsx +499 -0
- package/src/ui/components/explorer/panels/DevPanelCache.tsx +73 -0
- package/src/ui/components/explorer/panels/DevPanelPage.tsx +96 -0
- package/src/ui/components/explorer/panels/DevPanelQueue.tsx +51 -0
- package/src/ui/components/explorer/panels/DevPanelTopic.tsx +56 -0
- package/src/ui/components/explorer/panels/index.ts +5 -0
- package/src/ui/components/graph/DevDependencyGraph.tsx +35 -60
- package/src/ui/components/graph/GraphControls.tsx +10 -11
- package/src/ui/components/graph/NodeDetails.tsx +22 -29
- package/src/ui/components/graph/ProviderNode.tsx +4 -4
- package/src/ui/components/graph/helpers.ts +1 -1
- package/src/ui/components/logs/DevLogs.tsx +661 -0
- package/src/ui/components/logs/index.ts +1 -0
- package/src/ui/components/shared/TreeView.tsx +189 -0
- package/src/ui/main.css +17 -0
- package/src/ui/main.ts +2 -6
- package/LICENSE +0 -21
- package/assets/devtools/actions.html +0 -21
- package/assets/devtools/actions.html.br +0 -0
- package/assets/devtools/actions.html.gz +0 -0
- package/assets/devtools/asset.BJSLFcNT.css +0 -1
- package/assets/devtools/asset.BJSLFcNT.css.br +0 -0
- package/assets/devtools/asset.BJSLFcNT.css.gz +0 -0
- package/assets/devtools/asset.BZV40eAE.css +0 -1
- package/assets/devtools/asset.BZV40eAE.css.br +0 -0
- package/assets/devtools/asset.BZV40eAE.css.gz +0 -0
- package/assets/devtools/atoms.html +0 -21
- package/assets/devtools/atoms.html.br +0 -0
- package/assets/devtools/atoms.html.gz +0 -0
- package/assets/devtools/caches.html +0 -21
- package/assets/devtools/caches.html.br +0 -0
- package/assets/devtools/caches.html.gz +0 -0
- package/assets/devtools/chunk.1h5GuATm.js +0 -1
- package/assets/devtools/chunk.1h5GuATm.js.br +0 -0
- package/assets/devtools/chunk.1h5GuATm.js.gz +0 -0
- package/assets/devtools/chunk.3PgxxOdM.js +0 -1
- package/assets/devtools/chunk.3PgxxOdM.js.br +0 -0
- package/assets/devtools/chunk.3PgxxOdM.js.gz +0 -0
- package/assets/devtools/chunk.A_W3H6Aa.js +0 -1
- package/assets/devtools/chunk.A_W3H6Aa.js.br +0 -0
- package/assets/devtools/chunk.A_W3H6Aa.js.gz +0 -0
- package/assets/devtools/chunk.B5tL0VjH.js +0 -1
- package/assets/devtools/chunk.B5tL0VjH.js.br +0 -0
- package/assets/devtools/chunk.B5tL0VjH.js.gz +0 -0
- package/assets/devtools/chunk.B8p_Szro.js +0 -1
- package/assets/devtools/chunk.B8p_Szro.js.br +0 -0
- package/assets/devtools/chunk.B8p_Szro.js.gz +0 -0
- package/assets/devtools/chunk.BANy8c2v.js +0 -1
- package/assets/devtools/chunk.BANy8c2v.js.br +0 -0
- package/assets/devtools/chunk.BANy8c2v.js.gz +0 -0
- package/assets/devtools/chunk.BKph0hv1.js +0 -1
- package/assets/devtools/chunk.BKph0hv1.js.br +0 -0
- package/assets/devtools/chunk.BKph0hv1.js.gz +0 -0
- package/assets/devtools/chunk.BUs1kuwE.js +0 -1
- package/assets/devtools/chunk.BUs1kuwE.js.br +0 -0
- package/assets/devtools/chunk.BUs1kuwE.js.gz +0 -0
- package/assets/devtools/chunk.BVIEr21R.js +0 -1
- package/assets/devtools/chunk.BVIEr21R.js.br +0 -0
- package/assets/devtools/chunk.BVIEr21R.js.gz +0 -0
- package/assets/devtools/chunk.Bb3re2d8.js +0 -1
- package/assets/devtools/chunk.Bb3re2d8.js.br +0 -2
- package/assets/devtools/chunk.Bb3re2d8.js.gz +0 -0
- package/assets/devtools/chunk.BjFrJKj1.js +0 -1
- package/assets/devtools/chunk.BjFrJKj1.js.br +0 -2
- package/assets/devtools/chunk.BjFrJKj1.js.gz +0 -0
- package/assets/devtools/chunk.BkXzz14p.js +0 -1
- package/assets/devtools/chunk.BkXzz14p.js.br +0 -0
- package/assets/devtools/chunk.BkXzz14p.js.gz +0 -0
- package/assets/devtools/chunk.BlqFPyLh.js +0 -1
- package/assets/devtools/chunk.BlqFPyLh.js.br +0 -0
- package/assets/devtools/chunk.BlqFPyLh.js.gz +0 -0
- package/assets/devtools/chunk.BymZ9jU5.js +0 -1
- package/assets/devtools/chunk.BymZ9jU5.js.br +0 -0
- package/assets/devtools/chunk.BymZ9jU5.js.gz +0 -0
- package/assets/devtools/chunk.C0BD3Ujz.js +0 -1
- package/assets/devtools/chunk.C0BD3Ujz.js.br +0 -0
- package/assets/devtools/chunk.C0BD3Ujz.js.gz +0 -0
- package/assets/devtools/chunk.C63rzhbT.js +0 -1
- package/assets/devtools/chunk.C63rzhbT.js.br +0 -0
- package/assets/devtools/chunk.C63rzhbT.js.gz +0 -0
- package/assets/devtools/chunk.CJrYVzjN.js +0 -9
- package/assets/devtools/chunk.CJrYVzjN.js.br +0 -0
- package/assets/devtools/chunk.CJrYVzjN.js.gz +0 -0
- package/assets/devtools/chunk.CPGX3Xpx.js +0 -1
- package/assets/devtools/chunk.CPGX3Xpx.js.br +0 -1
- package/assets/devtools/chunk.CPGX3Xpx.js.gz +0 -0
- package/assets/devtools/chunk.Cf-3skUw.js +0 -1
- package/assets/devtools/chunk.Cf-3skUw.js.br +0 -0
- package/assets/devtools/chunk.Cf-3skUw.js.gz +0 -0
- package/assets/devtools/chunk.D7JLxcoJ.js +0 -7
- package/assets/devtools/chunk.D7JLxcoJ.js.br +0 -0
- package/assets/devtools/chunk.D7JLxcoJ.js.gz +0 -0
- package/assets/devtools/chunk.D7e5mBY4.js +0 -1
- package/assets/devtools/chunk.D7e5mBY4.js.br +0 -0
- package/assets/devtools/chunk.D7e5mBY4.js.gz +0 -0
- package/assets/devtools/chunk.DClU9Z1_.js +0 -1
- package/assets/devtools/chunk.DClU9Z1_.js.br +0 -0
- package/assets/devtools/chunk.DClU9Z1_.js.gz +0 -0
- package/assets/devtools/chunk.DE_M8b3Z.js +0 -1
- package/assets/devtools/chunk.DE_M8b3Z.js.br +0 -0
- package/assets/devtools/chunk.DE_M8b3Z.js.gz +0 -0
- package/assets/devtools/chunk.DWASJDBE.js +0 -1
- package/assets/devtools/chunk.DWASJDBE.js.br +0 -0
- package/assets/devtools/chunk.DWASJDBE.js.gz +0 -0
- package/assets/devtools/chunk.DfzRLqwW.js +0 -1
- package/assets/devtools/chunk.DfzRLqwW.js.br +0 -0
- package/assets/devtools/chunk.DfzRLqwW.js.gz +0 -0
- package/assets/devtools/chunk.Dww1YQtc.js +0 -1
- package/assets/devtools/chunk.Dww1YQtc.js.br +0 -0
- package/assets/devtools/chunk.Dww1YQtc.js.gz +0 -0
- package/assets/devtools/chunk.HFLdduaf.js +0 -1
- package/assets/devtools/chunk.HFLdduaf.js.br +0 -0
- package/assets/devtools/chunk.HFLdduaf.js.gz +0 -0
- package/assets/devtools/chunk.J-htqECs.js +0 -1
- package/assets/devtools/chunk.J-htqECs.js.br +0 -2
- package/assets/devtools/chunk.J-htqECs.js.gz +0 -0
- package/assets/devtools/chunk.JjTGVewZ.js +0 -2
- package/assets/devtools/chunk.JjTGVewZ.js.br +0 -0
- package/assets/devtools/chunk.JjTGVewZ.js.gz +0 -0
- package/assets/devtools/chunk.OV_89czZ.js +0 -1
- package/assets/devtools/chunk.OV_89czZ.js.br +0 -0
- package/assets/devtools/chunk.OV_89czZ.js.gz +0 -0
- package/assets/devtools/chunk.YFkMUqFM.js +0 -1
- package/assets/devtools/chunk.YFkMUqFM.js.br +0 -0
- package/assets/devtools/chunk.YFkMUqFM.js.gz +0 -0
- package/assets/devtools/chunk._KdUFIrt.js +0 -1
- package/assets/devtools/chunk._KdUFIrt.js.br +0 -0
- package/assets/devtools/chunk._KdUFIrt.js.gz +0 -0
- package/assets/devtools/chunk.pjP6xqG8.js +0 -1
- package/assets/devtools/chunk.pjP6xqG8.js.br +0 -0
- package/assets/devtools/chunk.pjP6xqG8.js.gz +0 -0
- package/assets/devtools/chunk.uTFtY0ae.js +0 -2
- package/assets/devtools/chunk.uTFtY0ae.js.br +0 -0
- package/assets/devtools/chunk.uTFtY0ae.js.gz +0 -0
- package/assets/devtools/chunk.uyVen0u2.js +0 -1
- package/assets/devtools/chunk.uyVen0u2.js.br +0 -0
- package/assets/devtools/chunk.uyVen0u2.js.gz +0 -0
- package/assets/devtools/chunk.vHjNjQS8.js +0 -1
- package/assets/devtools/chunk.vHjNjQS8.js.br +0 -0
- package/assets/devtools/chunk.vHjNjQS8.js.gz +0 -0
- package/assets/devtools/db.html +0 -21
- package/assets/devtools/db.html.br +0 -0
- package/assets/devtools/db.html.gz +0 -0
- package/assets/devtools/entry.DhzNl8q_.js +0 -79
- package/assets/devtools/entry.DhzNl8q_.js.br +0 -0
- package/assets/devtools/entry.DhzNl8q_.js.gz +0 -0
- package/assets/devtools/env.html +0 -21
- package/assets/devtools/env.html.br +0 -0
- package/assets/devtools/env.html.gz +0 -0
- package/assets/devtools/graph.html +0 -22
- package/assets/devtools/graph.html.br +0 -0
- package/assets/devtools/graph.html.gz +0 -0
- package/assets/devtools/index.html +0 -21
- package/assets/devtools/index.html.br +0 -0
- package/assets/devtools/index.html.gz +0 -0
- package/assets/devtools/logs.html +0 -21
- package/assets/devtools/logs.html.br +0 -0
- package/assets/devtools/logs.html.gz +0 -0
- package/assets/devtools/queues.html +0 -21
- package/assets/devtools/queues.html.br +0 -0
- package/assets/devtools/queues.html.gz +0 -0
- package/assets/devtools/topics.html +0 -21
- package/assets/devtools/topics.html.br +0 -0
- package/assets/devtools/topics.html.gz +0 -0
- package/src/api/DevToolsProvider.ts +0 -157
- package/src/api/providers/DevToolsDatabaseProvider.ts +0 -27
- package/src/api/repositories/LogRepository.ts +0 -8
- package/src/api/schemas/DevCommandMetadata.ts +0 -9
- package/src/ui/components/DevAtomsViewer.tsx +0 -637
- package/src/ui/components/DevCacheInspector.tsx +0 -423
- package/src/ui/components/DevDashboard.tsx +0 -38
- package/src/ui/components/DevEnvExplorer.tsx +0 -462
- package/src/ui/components/DevLogViewer.tsx +0 -252
- package/src/ui/components/DevQueueMonitor.tsx +0 -51
- package/src/ui/components/DevTopicsViewer.tsx +0 -686
- package/src/ui/components/actions/ActionGroup.tsx +0 -37
- package/src/ui/components/actions/ActionItem.tsx +0 -138
- package/src/ui/components/actions/DevActionsExplorer.tsx +0 -132
- package/src/ui/components/actions/MethodBadge.tsx +0 -18
- package/src/ui/components/actions/SchemaViewer.tsx +0 -21
- package/src/ui/components/actions/TryItPanel.tsx +0 -140
- package/src/ui/components/actions/constants.ts +0 -7
- package/src/ui/components/actions/helpers.ts +0 -18
- package/src/ui/components/actions/index.ts +0 -8
- package/src/ui/components/db/ColumnBadge.tsx +0 -55
- package/src/ui/components/db/DevDbStudio.tsx +0 -485
- package/src/ui/components/db/constants.ts +0 -11
- package/src/ui/components/db/index.ts +0 -4
- package/src/ui/components/db/types.ts +0 -7
- package/src/ui/styles.css +0 -1
- /package/src/{api/schemas → schemas}/DevAtomMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevBucketMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevCacheMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevEnvMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevModuleMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevProviderMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevQueueMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevRealmMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevRouteMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevSchedulerMetadata.ts +0 -0
package/dist/index.js
CHANGED
|
@@ -1,46 +1,25 @@
|
|
|
1
|
-
import { $
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { $batch } from "alepha/batch";
|
|
5
|
-
import { $logger, JsonFormatterProvider } from "alepha/logger";
|
|
6
|
-
import { $entity, PG_CREATED_AT, PG_DEFAULT, PG_DELETED_AT, PG_IDENTITY, PG_PRIMARY_KEY, PG_REF, PG_SERIAL, PG_UPDATED_AT, PG_VERSION, Repository, RepositoryProvider, SqliteProvider, parseQueryString, pg } from "alepha/orm";
|
|
7
|
-
import { $action, $route, ServerProvider } from "alepha/server";
|
|
8
|
-
import { $serve } from "alepha/server/static";
|
|
1
|
+
import { $hook, $inject, $module, Alepha, t } from "alepha";
|
|
2
|
+
import { $action, $route, AlephaServer, ServerProvider } from "alepha/server";
|
|
3
|
+
import { $serve, AlephaServerStatic } from "alepha/server/static";
|
|
9
4
|
import { $bucket } from "alepha/bucket";
|
|
10
5
|
import { $cache } from "alepha/cache";
|
|
11
|
-
import {
|
|
6
|
+
import { DateTimeProvider } from "alepha/datetime";
|
|
7
|
+
import { $logger, MemoryDestinationProvider } from "alepha/logger";
|
|
8
|
+
import { PG_CREATED_AT, PG_DEFAULT, PG_DELETED_AT, PG_IDENTITY, PG_PRIMARY_KEY, PG_REF, PG_SERIAL, PG_UPDATED_AT, PG_VERSION, RepositoryProvider } from "alepha/orm";
|
|
12
9
|
import { $queue } from "alepha/queue";
|
|
10
|
+
import { $page } from "alepha/react/router";
|
|
13
11
|
import { $scheduler } from "alepha/scheduler";
|
|
14
12
|
import { $issuer } from "alepha/security";
|
|
15
13
|
import { $topic } from "alepha/topic";
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
name: "logs",
|
|
20
|
-
schema: t.object({
|
|
21
|
-
id: pg.primaryKey(),
|
|
22
|
-
level: t.enum([
|
|
23
|
-
"TRACE",
|
|
24
|
-
"DEBUG",
|
|
25
|
-
"INFO",
|
|
26
|
-
"WARN",
|
|
27
|
-
"ERROR"
|
|
28
|
-
]),
|
|
29
|
-
message: t.text({ size: "rich" }),
|
|
30
|
-
service: t.text(),
|
|
31
|
-
module: t.text(),
|
|
32
|
-
context: t.optional(t.text()),
|
|
33
|
-
app: t.optional(t.text()),
|
|
34
|
-
data: t.optional(t.json()),
|
|
35
|
-
timestamp: t.integer()
|
|
36
|
-
})
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
//#endregion
|
|
40
|
-
//#region src/api/providers/DevToolsMetadataProvider.ts
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { fileURLToPath } from "node:url";
|
|
16
|
+
//#region src/providers/DevToolsMetadataProvider.ts
|
|
41
17
|
var DevToolsMetadataProvider = class {
|
|
42
18
|
alepha = $inject(Alepha);
|
|
19
|
+
dateTime = $inject(DateTimeProvider);
|
|
43
20
|
log = $logger();
|
|
21
|
+
serverProvider = $inject(ServerProvider);
|
|
22
|
+
startedAt = this.dateTime.nowMillis();
|
|
44
23
|
getActions() {
|
|
45
24
|
return this.alepha.primitives($action).map((action) => {
|
|
46
25
|
const schema = action.schema;
|
|
@@ -55,13 +34,14 @@ var DevToolsMetadataProvider = class {
|
|
|
55
34
|
description: action.options.description,
|
|
56
35
|
summary: options.summary,
|
|
57
36
|
disabled: action.options.disabled,
|
|
58
|
-
secure:
|
|
37
|
+
secure: action.middlewares.some((m) => m?.name === "$secure") || void 0,
|
|
59
38
|
hide: options.hide,
|
|
60
39
|
body: schema?.body,
|
|
61
40
|
params: schema?.params,
|
|
62
41
|
query: schema?.query,
|
|
63
42
|
response: schema?.response,
|
|
64
|
-
bodyContentType: action.getBodyContentType()
|
|
43
|
+
bodyContentType: action.getBodyContentType(),
|
|
44
|
+
middlewares: action.middlewares.filter(Boolean).length ? action.middlewares.filter(Boolean) : void 0
|
|
65
45
|
};
|
|
66
46
|
});
|
|
67
47
|
}
|
|
@@ -83,12 +63,20 @@ var DevToolsMetadataProvider = class {
|
|
|
83
63
|
}));
|
|
84
64
|
}
|
|
85
65
|
getTopics() {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
66
|
+
const topicPrimitives = this.alepha.primitives($topic);
|
|
67
|
+
const topicMap = /* @__PURE__ */ new Map();
|
|
68
|
+
for (const topic of topicPrimitives) {
|
|
69
|
+
const existing = topicMap.get(topic.name);
|
|
70
|
+
if (existing) existing.subscribers++;
|
|
71
|
+
else topicMap.set(topic.name, {
|
|
72
|
+
name: topic.name,
|
|
73
|
+
description: topic.options.description,
|
|
74
|
+
schema: topic.options.schema,
|
|
75
|
+
provider: this.getProviderName(topic.options.provider),
|
|
76
|
+
subscribers: 1
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return Array.from(topicMap.values());
|
|
92
80
|
}
|
|
93
81
|
getBuckets() {
|
|
94
82
|
return this.alepha.primitives($bucket).map((bucket) => ({
|
|
@@ -123,7 +111,30 @@ var DevToolsMetadataProvider = class {
|
|
|
123
111
|
}));
|
|
124
112
|
}
|
|
125
113
|
getPages() {
|
|
126
|
-
return
|
|
114
|
+
return this.alepha.primitives($page).map((page) => {
|
|
115
|
+
const children = typeof page.options.children === "function" ? page.options.children() : page.options.children;
|
|
116
|
+
const childrenNames = Array.isArray(children) ? children.map((c) => c.name).filter(Boolean) : void 0;
|
|
117
|
+
return {
|
|
118
|
+
name: page.name,
|
|
119
|
+
label: page.options.label,
|
|
120
|
+
description: page.options.description,
|
|
121
|
+
path: page.options.path,
|
|
122
|
+
parentName: page.options.parent?.name,
|
|
123
|
+
params: page.options.schema?.params,
|
|
124
|
+
query: page.options.schema?.query,
|
|
125
|
+
hasComponent: !!page.options.component,
|
|
126
|
+
hasLazy: !!page.options.lazy,
|
|
127
|
+
hasResolve: !!page.options.resolve,
|
|
128
|
+
childrenNames: childrenNames?.length ? childrenNames : void 0,
|
|
129
|
+
hasChildren: !!page.options.children,
|
|
130
|
+
hasParent: !!page.options.parent,
|
|
131
|
+
hasErrorHandler: !!page.options.errorHandler,
|
|
132
|
+
static: typeof page.options.static === "boolean" ? page.options.static : !!page.options.static,
|
|
133
|
+
cache: page.options.cache,
|
|
134
|
+
client: page.options.client,
|
|
135
|
+
animation: page.options.animation
|
|
136
|
+
};
|
|
137
|
+
});
|
|
127
138
|
}
|
|
128
139
|
getProviders() {
|
|
129
140
|
const graph = this.alepha.graph();
|
|
@@ -203,7 +214,10 @@ var DevToolsMetadataProvider = class {
|
|
|
203
214
|
columns,
|
|
204
215
|
indexes,
|
|
205
216
|
foreignKeys,
|
|
206
|
-
constraints
|
|
217
|
+
constraints,
|
|
218
|
+
schema: entity.schema,
|
|
219
|
+
insertSchema: entity.insertSchema,
|
|
220
|
+
updateSchema: entity.updateSchema
|
|
207
221
|
};
|
|
208
222
|
});
|
|
209
223
|
} catch {
|
|
@@ -237,13 +251,6 @@ var DevToolsMetadataProvider = class {
|
|
|
237
251
|
if (t.schema.isUnion(field) && field.anyOf) return field.anyOf.some((type) => t.schema.isNull(type));
|
|
238
252
|
return false;
|
|
239
253
|
}
|
|
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
254
|
getRoutes() {
|
|
248
255
|
return [];
|
|
249
256
|
}
|
|
@@ -264,8 +271,22 @@ var DevToolsMetadataProvider = class {
|
|
|
264
271
|
currentValue: value
|
|
265
272
|
}));
|
|
266
273
|
}
|
|
274
|
+
getSystem() {
|
|
275
|
+
const isBun = typeof globalThis.Bun !== "undefined";
|
|
276
|
+
const port = Number(this.alepha.env.SERVER_PORT) || 3e3;
|
|
277
|
+
return {
|
|
278
|
+
alephaVersion: String(this.alepha.env.npm_package_version ?? "unknown"),
|
|
279
|
+
nodeVersion: isBun ? globalThis.Bun?.version ?? "unknown" : process.version,
|
|
280
|
+
runtime: isBun ? "bun" : "node",
|
|
281
|
+
mode: this.alepha.isProduction() ? "production" : "development",
|
|
282
|
+
port,
|
|
283
|
+
uptime: (this.dateTime.nowMillis() - this.startedAt) / 1e3,
|
|
284
|
+
memoryUsage: process.memoryUsage?.()?.rss ?? 0
|
|
285
|
+
};
|
|
286
|
+
}
|
|
267
287
|
getMetadata() {
|
|
268
288
|
return {
|
|
289
|
+
system: this.getSystem(),
|
|
269
290
|
actions: this.getActions(),
|
|
270
291
|
queues: this.getQueues(),
|
|
271
292
|
schedulers: this.getSchedulers(),
|
|
@@ -277,7 +298,6 @@ var DevToolsMetadataProvider = class {
|
|
|
277
298
|
providers: this.getProviders(),
|
|
278
299
|
modules: this.getModules(),
|
|
279
300
|
entities: this.getEntities(),
|
|
280
|
-
commands: this.getCommands(),
|
|
281
301
|
routes: this.getRoutes(),
|
|
282
302
|
envs: this.getEnvs(),
|
|
283
303
|
atoms: this.getAtoms()
|
|
@@ -289,37 +309,11 @@ var DevToolsMetadataProvider = class {
|
|
|
289
309
|
return provider.name || "custom";
|
|
290
310
|
}
|
|
291
311
|
};
|
|
292
|
-
|
|
293
312
|
//#endregion
|
|
294
|
-
//#region src/
|
|
295
|
-
|
|
296
|
-
get name() {
|
|
297
|
-
return "";
|
|
298
|
-
}
|
|
299
|
-
options = { path: ":memory:" };
|
|
300
|
-
async migrate() {
|
|
301
|
-
this.sqlite.exec(`
|
|
302
|
-
CREATE TABLE IF NOT EXISTS logs (
|
|
303
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
304
|
-
level TEXT NOT NULL,
|
|
305
|
-
message TEXT,
|
|
306
|
-
service TEXT,
|
|
307
|
-
module TEXT,
|
|
308
|
-
context TEXT,
|
|
309
|
-
app TEXT,
|
|
310
|
-
data TEXT,
|
|
311
|
-
timestamp INTEGER NOT NULL
|
|
312
|
-
)
|
|
313
|
-
`);
|
|
314
|
-
}
|
|
315
|
-
};
|
|
316
|
-
|
|
313
|
+
//#region src/assets.ts
|
|
314
|
+
const devtoolsAssets = { ui: join(fileURLToPath(import.meta.url), "../../assets/ui") };
|
|
317
315
|
//#endregion
|
|
318
|
-
//#region src/
|
|
319
|
-
var LogRepository = class extends Repository.of(logs, DevToolsDatabaseProvider) {};
|
|
320
|
-
|
|
321
|
-
//#endregion
|
|
322
|
-
//#region src/api/schemas/DevActionMetadata.ts
|
|
316
|
+
//#region src/schemas/DevActionMetadata.ts
|
|
323
317
|
const devActionMetadataSchema = t.object({
|
|
324
318
|
name: t.text(),
|
|
325
319
|
group: t.text(),
|
|
@@ -336,11 +330,14 @@ const devActionMetadataSchema = t.object({
|
|
|
336
330
|
params: t.optional(t.any()),
|
|
337
331
|
query: t.optional(t.any()),
|
|
338
332
|
response: t.optional(t.any()),
|
|
339
|
-
bodyContentType: t.optional(t.text())
|
|
333
|
+
bodyContentType: t.optional(t.text()),
|
|
334
|
+
middlewares: t.optional(t.array(t.object({
|
|
335
|
+
name: t.text(),
|
|
336
|
+
options: t.optional(t.any())
|
|
337
|
+
})))
|
|
340
338
|
});
|
|
341
|
-
|
|
342
339
|
//#endregion
|
|
343
|
-
//#region src/
|
|
340
|
+
//#region src/schemas/DevAtomMetadata.ts
|
|
344
341
|
const devAtomMetadataSchema = t.object({
|
|
345
342
|
name: t.text(),
|
|
346
343
|
description: t.optional(t.text()),
|
|
@@ -348,9 +345,8 @@ const devAtomMetadataSchema = t.object({
|
|
|
348
345
|
defaultValue: t.optional(t.any()),
|
|
349
346
|
currentValue: t.optional(t.any())
|
|
350
347
|
});
|
|
351
|
-
|
|
352
348
|
//#endregion
|
|
353
|
-
//#region src/
|
|
349
|
+
//#region src/schemas/DevBucketMetadata.ts
|
|
354
350
|
const devBucketMetadataSchema = t.object({
|
|
355
351
|
name: t.text(),
|
|
356
352
|
description: t.optional(t.text()),
|
|
@@ -358,26 +354,16 @@ const devBucketMetadataSchema = t.object({
|
|
|
358
354
|
maxSize: t.optional(t.number()),
|
|
359
355
|
provider: t.text()
|
|
360
356
|
});
|
|
361
|
-
|
|
362
357
|
//#endregion
|
|
363
|
-
//#region src/
|
|
358
|
+
//#region src/schemas/DevCacheMetadata.ts
|
|
364
359
|
const devCacheMetadataSchema = t.object({
|
|
365
360
|
name: t.text(),
|
|
366
361
|
ttl: t.optional(t.any()),
|
|
367
362
|
disabled: t.optional(t.boolean()),
|
|
368
363
|
provider: t.text()
|
|
369
364
|
});
|
|
370
|
-
|
|
371
|
-
//#endregion
|
|
372
|
-
//#region src/api/schemas/DevCommandMetadata.ts
|
|
373
|
-
const devCommandMetadataSchema = t.object({
|
|
374
|
-
name: t.text(),
|
|
375
|
-
description: t.optional(t.text()),
|
|
376
|
-
hidden: t.optional(t.boolean())
|
|
377
|
-
});
|
|
378
|
-
|
|
379
365
|
//#endregion
|
|
380
|
-
//#region src/
|
|
366
|
+
//#region src/schemas/DevEntityMetadata.ts
|
|
381
367
|
const devEntityColumnSchema = t.object({
|
|
382
368
|
name: t.text(),
|
|
383
369
|
type: t.text(),
|
|
@@ -419,36 +405,39 @@ const devEntityMetadataSchema = t.object({
|
|
|
419
405
|
columns: t.array(devEntityColumnSchema),
|
|
420
406
|
indexes: t.array(devEntityIndexSchema),
|
|
421
407
|
foreignKeys: t.array(devEntityForeignKeySchema),
|
|
422
|
-
constraints: t.array(devEntityConstraintSchema)
|
|
408
|
+
constraints: t.array(devEntityConstraintSchema),
|
|
409
|
+
schema: t.optional(t.any()),
|
|
410
|
+
insertSchema: t.optional(t.any()),
|
|
411
|
+
updateSchema: t.optional(t.any())
|
|
423
412
|
});
|
|
424
|
-
|
|
425
413
|
//#endregion
|
|
426
|
-
//#region src/
|
|
414
|
+
//#region src/schemas/DevEnvMetadata.ts
|
|
427
415
|
const devEnvMetadataSchema = t.object({
|
|
428
416
|
propertyKey: t.text(),
|
|
429
417
|
schema: t.any(),
|
|
430
418
|
values: t.record(t.text(), t.any()),
|
|
431
419
|
serviceName: t.optional(t.text())
|
|
432
420
|
});
|
|
433
|
-
|
|
434
421
|
//#endregion
|
|
435
|
-
//#region src/
|
|
422
|
+
//#region src/schemas/DevModuleMetadata.ts
|
|
436
423
|
const devModuleMetadataSchema = t.object({
|
|
437
424
|
name: t.text(),
|
|
438
425
|
providers: t.array(t.text())
|
|
439
426
|
});
|
|
440
|
-
|
|
441
427
|
//#endregion
|
|
442
|
-
//#region src/
|
|
428
|
+
//#region src/schemas/DevPageMetadata.ts
|
|
443
429
|
const devPageMetadataSchema = t.object({
|
|
444
430
|
name: t.text(),
|
|
431
|
+
label: t.optional(t.text()),
|
|
445
432
|
description: t.optional(t.text()),
|
|
446
433
|
path: t.optional(t.text()),
|
|
434
|
+
parentName: t.optional(t.text()),
|
|
447
435
|
params: t.optional(t.any()),
|
|
448
436
|
query: t.optional(t.any()),
|
|
449
437
|
hasComponent: t.boolean(),
|
|
450
438
|
hasLazy: t.boolean(),
|
|
451
439
|
hasResolve: t.boolean(),
|
|
440
|
+
childrenNames: t.optional(t.array(t.text())),
|
|
452
441
|
hasChildren: t.boolean(),
|
|
453
442
|
hasParent: t.boolean(),
|
|
454
443
|
hasErrorHandler: t.boolean(),
|
|
@@ -457,27 +446,24 @@ const devPageMetadataSchema = t.object({
|
|
|
457
446
|
client: t.optional(t.any()),
|
|
458
447
|
animation: t.optional(t.any())
|
|
459
448
|
});
|
|
460
|
-
|
|
461
449
|
//#endregion
|
|
462
|
-
//#region src/
|
|
450
|
+
//#region src/schemas/DevProviderMetadata.ts
|
|
463
451
|
const devProviderMetadataSchema = t.object({
|
|
464
452
|
name: t.text(),
|
|
465
453
|
module: t.optional(t.text()),
|
|
466
454
|
dependencies: t.array(t.text()),
|
|
467
455
|
aliases: t.optional(t.array(t.text()))
|
|
468
456
|
});
|
|
469
|
-
|
|
470
457
|
//#endregion
|
|
471
|
-
//#region src/
|
|
458
|
+
//#region src/schemas/DevQueueMetadata.ts
|
|
472
459
|
const devQueueMetadataSchema = t.object({
|
|
473
460
|
name: t.text(),
|
|
474
461
|
description: t.optional(t.text()),
|
|
475
462
|
schema: t.optional(t.any()),
|
|
476
463
|
provider: t.text()
|
|
477
464
|
});
|
|
478
|
-
|
|
479
465
|
//#endregion
|
|
480
|
-
//#region src/
|
|
466
|
+
//#region src/schemas/DevRealmMetadata.ts
|
|
481
467
|
const devRealmMetadataSchema = t.object({
|
|
482
468
|
name: t.text(),
|
|
483
469
|
description: t.optional(t.text()),
|
|
@@ -491,16 +477,14 @@ const devRealmMetadataSchema = t.object({
|
|
|
491
477
|
hasOnDeleteSession: t.boolean()
|
|
492
478
|
}))
|
|
493
479
|
});
|
|
494
|
-
|
|
495
480
|
//#endregion
|
|
496
|
-
//#region src/
|
|
481
|
+
//#region src/schemas/DevRouteMetadata.ts
|
|
497
482
|
const devRouteMetadataSchema = t.object({
|
|
498
483
|
method: t.text(),
|
|
499
484
|
path: t.text()
|
|
500
485
|
});
|
|
501
|
-
|
|
502
486
|
//#endregion
|
|
503
|
-
//#region src/
|
|
487
|
+
//#region src/schemas/DevSchedulerMetadata.ts
|
|
504
488
|
const devSchedulerMetadataSchema = t.object({
|
|
505
489
|
name: t.text(),
|
|
506
490
|
description: t.optional(t.text()),
|
|
@@ -508,19 +492,28 @@ const devSchedulerMetadataSchema = t.object({
|
|
|
508
492
|
interval: t.optional(t.any()),
|
|
509
493
|
lock: t.optional(t.boolean())
|
|
510
494
|
});
|
|
511
|
-
|
|
512
495
|
//#endregion
|
|
513
|
-
//#region src/
|
|
496
|
+
//#region src/schemas/DevTopicMetadata.ts
|
|
514
497
|
const devTopicMetadataSchema = t.object({
|
|
515
498
|
name: t.text(),
|
|
516
499
|
description: t.optional(t.text()),
|
|
517
500
|
schema: t.optional(t.any()),
|
|
518
|
-
provider: t.text()
|
|
501
|
+
provider: t.text(),
|
|
502
|
+
subscribers: t.integer()
|
|
519
503
|
});
|
|
520
|
-
|
|
521
504
|
//#endregion
|
|
522
|
-
//#region src/
|
|
505
|
+
//#region src/schemas/DevMetadata.ts
|
|
506
|
+
const devSystemSchema = t.object({
|
|
507
|
+
alephaVersion: t.text(),
|
|
508
|
+
nodeVersion: t.text(),
|
|
509
|
+
runtime: t.enum(["node", "bun"]),
|
|
510
|
+
mode: t.enum(["development", "production"]),
|
|
511
|
+
port: t.integer(),
|
|
512
|
+
uptime: t.number(),
|
|
513
|
+
memoryUsage: t.number()
|
|
514
|
+
});
|
|
523
515
|
const devMetadataSchema = t.object({
|
|
516
|
+
system: devSystemSchema,
|
|
524
517
|
actions: t.array(devActionMetadataSchema),
|
|
525
518
|
queues: t.array(devQueueMetadataSchema),
|
|
526
519
|
schedulers: t.array(devSchedulerMetadataSchema),
|
|
@@ -532,84 +525,53 @@ const devMetadataSchema = t.object({
|
|
|
532
525
|
providers: t.array(devProviderMetadataSchema),
|
|
533
526
|
modules: t.array(devModuleMetadataSchema),
|
|
534
527
|
entities: t.array(devEntityMetadataSchema),
|
|
535
|
-
commands: t.array(devCommandMetadataSchema),
|
|
536
528
|
routes: t.array(devRouteMetadataSchema),
|
|
537
529
|
envs: t.array(devEnvMetadataSchema),
|
|
538
530
|
atoms: t.array(devAtomMetadataSchema)
|
|
539
531
|
});
|
|
540
|
-
|
|
541
532
|
//#endregion
|
|
542
|
-
//#region src/
|
|
533
|
+
//#region src/providers/DevToolsProvider.ts
|
|
543
534
|
var DevToolsProvider = class {
|
|
544
535
|
log = $logger();
|
|
545
536
|
alepha = $inject(Alepha);
|
|
546
537
|
serverProvider = $inject(ServerProvider);
|
|
547
|
-
jsonFormatter = $inject(JsonFormatterProvider);
|
|
548
|
-
logs = $inject(LogRepository);
|
|
549
538
|
devCollectorProvider = $inject(DevToolsMetadataProvider);
|
|
539
|
+
memoryDestination = $inject(MemoryDestinationProvider);
|
|
550
540
|
onStart = $hook({
|
|
551
541
|
on: "start",
|
|
552
542
|
handler: () => {
|
|
553
|
-
this.log.info("Devtools OK", { url: `${this.serverProvider.hostname}/
|
|
554
|
-
}
|
|
555
|
-
});
|
|
556
|
-
batchLogs = $batch({
|
|
557
|
-
maxSize: 50,
|
|
558
|
-
maxDuration: [10, "seconds"],
|
|
559
|
-
schema: logs.insertSchema,
|
|
560
|
-
handler: async (entries) => {
|
|
561
|
-
await this.logs.createMany(entries);
|
|
543
|
+
this.log.info("Devtools OK", { url: `${this.serverProvider.hostname}/__devtools/` });
|
|
562
544
|
}
|
|
563
545
|
});
|
|
546
|
+
/**
|
|
547
|
+
* Capture all logs into memory so the devtools UI can display them.
|
|
548
|
+
* In dev mode, LogDestinationProvider is bound to ConsoleDestinationProvider,
|
|
549
|
+
* so MemoryDestinationProvider would otherwise never receive writes.
|
|
550
|
+
*/
|
|
564
551
|
onLog = $hook({
|
|
565
552
|
on: "log",
|
|
566
|
-
handler:
|
|
567
|
-
|
|
568
|
-
if (!this.alepha.isStarted()) return;
|
|
569
|
-
ev.entry.message = ev.entry.message?.slice(0, 2e3);
|
|
570
|
-
if (ev.entry.module === "alepha.devtools") return;
|
|
571
|
-
if (ev.entry.level === "TRACE" && ev.entry.module === "alepha.batch") return;
|
|
572
|
-
if (this.alepha.isProduction() && ev.entry.level === "TRACE") return;
|
|
573
|
-
const entry = {
|
|
574
|
-
...ev.entry,
|
|
575
|
-
data: ev.entry.data instanceof Error ? this.jsonFormatter.formatJsonError(ev.entry.data) : typeof ev.entry.data === "object" && !Array.isArray(ev.entry.data) ? ev.entry.data : { data: ev.entry.data }
|
|
576
|
-
};
|
|
577
|
-
await this.batchLogs.push(entry);
|
|
578
|
-
} catch (error) {
|
|
579
|
-
console.error(error, ev);
|
|
580
|
-
}
|
|
553
|
+
handler: ({ entry }) => {
|
|
554
|
+
this.memoryDestination.write("", entry);
|
|
581
555
|
}
|
|
582
556
|
});
|
|
583
557
|
uiRoute = $serve({
|
|
584
|
-
path: "/
|
|
585
|
-
root:
|
|
586
|
-
historyApiFallback: true
|
|
558
|
+
path: "/__devtools",
|
|
559
|
+
root: devtoolsAssets.ui,
|
|
560
|
+
historyApiFallback: true,
|
|
561
|
+
silent: true
|
|
587
562
|
});
|
|
588
563
|
metadataRoute = $route({
|
|
589
564
|
method: "GET",
|
|
590
|
-
path: "/
|
|
565
|
+
path: "/__devtools/api/metadata",
|
|
591
566
|
silent: true,
|
|
592
567
|
schema: { response: devMetadataSchema },
|
|
593
568
|
handler: () => {
|
|
594
569
|
return this.devCollectorProvider.getMetadata();
|
|
595
570
|
}
|
|
596
571
|
});
|
|
597
|
-
logsRoute = $route({
|
|
598
|
-
method: "GET",
|
|
599
|
-
path: "/devtools/api/logs",
|
|
600
|
-
silent: true,
|
|
601
|
-
schema: {
|
|
602
|
-
query: t.extend(pageQuerySchema, { search: t.optional(t.string()) }),
|
|
603
|
-
response: t.page(logs.schema)
|
|
604
|
-
},
|
|
605
|
-
handler: ({ query }) => {
|
|
606
|
-
query.sort ??= "-timestamp";
|
|
607
|
-
return this.logs.paginate(query, query.search ? { where: parseQueryString(query.search) } : {}, { count: true });
|
|
608
|
-
}
|
|
609
|
-
});
|
|
610
572
|
updateAtomRoute = $route({
|
|
611
573
|
method: "POST",
|
|
612
|
-
path: "/
|
|
574
|
+
path: "/__devtools/api/atoms",
|
|
613
575
|
silent: true,
|
|
614
576
|
schema: {
|
|
615
577
|
body: t.object({
|
|
@@ -627,15 +589,168 @@ var DevToolsProvider = class {
|
|
|
627
589
|
return { success: false };
|
|
628
590
|
}
|
|
629
591
|
});
|
|
592
|
+
logsRoute = $route({
|
|
593
|
+
method: "GET",
|
|
594
|
+
path: "/__devtools/api/logs",
|
|
595
|
+
silent: true,
|
|
596
|
+
schema: {
|
|
597
|
+
query: t.object({
|
|
598
|
+
level: t.optional(t.text()),
|
|
599
|
+
type: t.optional(t.text()),
|
|
600
|
+
module: t.optional(t.text()),
|
|
601
|
+
search: t.optional(t.text()),
|
|
602
|
+
since: t.optional(t.text()),
|
|
603
|
+
limit: t.optional(t.text()),
|
|
604
|
+
offset: t.optional(t.text())
|
|
605
|
+
}),
|
|
606
|
+
response: t.object({
|
|
607
|
+
logs: t.array(t.any()),
|
|
608
|
+
total: t.integer()
|
|
609
|
+
})
|
|
610
|
+
},
|
|
611
|
+
handler: ({ query }) => {
|
|
612
|
+
const levelOrder = [
|
|
613
|
+
"TRACE",
|
|
614
|
+
"DEBUG",
|
|
615
|
+
"INFO",
|
|
616
|
+
"WARN",
|
|
617
|
+
"ERROR"
|
|
618
|
+
];
|
|
619
|
+
let entries = this.memoryDestination.logs;
|
|
620
|
+
if (query.level) {
|
|
621
|
+
const minIndex = levelOrder.indexOf(query.level.toUpperCase());
|
|
622
|
+
if (minIndex >= 0) entries = entries.filter((e) => levelOrder.indexOf(e.level) >= minIndex);
|
|
623
|
+
}
|
|
624
|
+
if (query.type) {
|
|
625
|
+
const types = query.type.split(",").map((t) => t.trim());
|
|
626
|
+
entries = entries.filter((e) => {
|
|
627
|
+
if (!e.data || typeof e.data !== "object") return false;
|
|
628
|
+
const d = e.data;
|
|
629
|
+
for (const t of types) if (t === "http" || t === "http:request") {
|
|
630
|
+
if (d.status && d.method && d.path && d.duration) return true;
|
|
631
|
+
} else if (t === "db" || t === "db:query") {
|
|
632
|
+
if (d.type === "db:query") return true;
|
|
633
|
+
} else if (d.type === t) return true;
|
|
634
|
+
return false;
|
|
635
|
+
});
|
|
636
|
+
}
|
|
637
|
+
if (query.module) entries = entries.filter((e) => e.module === query.module);
|
|
638
|
+
if (query.search) {
|
|
639
|
+
const terms = query.search.toLowerCase().split(/\s+/);
|
|
640
|
+
entries = entries.filter((e) => {
|
|
641
|
+
const text = `${e.message} ${e.module} ${e.service}`.toLowerCase();
|
|
642
|
+
return terms.every((term) => text.includes(term));
|
|
643
|
+
});
|
|
644
|
+
}
|
|
645
|
+
if (query.since) {
|
|
646
|
+
const since = Number(query.since);
|
|
647
|
+
if (!Number.isNaN(since)) entries = entries.filter((e) => e.timestamp >= since);
|
|
648
|
+
}
|
|
649
|
+
const total = entries.length;
|
|
650
|
+
entries = entries.reverse();
|
|
651
|
+
const offset = query.offset ? Number(query.offset) : 0;
|
|
652
|
+
const limit = query.limit ? Number(query.limit) : 100;
|
|
653
|
+
entries = entries.slice(offset, offset + limit);
|
|
654
|
+
return {
|
|
655
|
+
logs: entries,
|
|
656
|
+
total
|
|
657
|
+
};
|
|
658
|
+
}
|
|
659
|
+
});
|
|
660
|
+
dbListRoute = $route({
|
|
661
|
+
method: "GET",
|
|
662
|
+
path: "/__devtools/api/db/:entity/records",
|
|
663
|
+
silent: true,
|
|
664
|
+
schema: {
|
|
665
|
+
params: t.object({ entity: t.text() }),
|
|
666
|
+
query: t.object({
|
|
667
|
+
page: t.optional(t.text()),
|
|
668
|
+
size: t.optional(t.text()),
|
|
669
|
+
sort: t.optional(t.text())
|
|
670
|
+
}),
|
|
671
|
+
response: t.record(t.text(), t.any())
|
|
672
|
+
},
|
|
673
|
+
handler: async ({ params, query }) => {
|
|
674
|
+
const repo = this.getRepository(params.entity);
|
|
675
|
+
if (!repo) return {
|
|
676
|
+
content: [],
|
|
677
|
+
page: { totalElements: 0 }
|
|
678
|
+
};
|
|
679
|
+
return repo.paginate({
|
|
680
|
+
page: query.page ? Number(query.page) : 0,
|
|
681
|
+
size: query.size ? Number(query.size) : 50,
|
|
682
|
+
sort: query.sort || void 0
|
|
683
|
+
}, {}, { count: true });
|
|
684
|
+
}
|
|
685
|
+
});
|
|
686
|
+
dbCreateRoute = $route({
|
|
687
|
+
method: "POST",
|
|
688
|
+
path: "/__devtools/api/db/:entity/records",
|
|
689
|
+
silent: true,
|
|
690
|
+
schema: {
|
|
691
|
+
params: t.object({ entity: t.text() }),
|
|
692
|
+
body: t.record(t.text(), t.any()),
|
|
693
|
+
response: t.record(t.text(), t.any())
|
|
694
|
+
},
|
|
695
|
+
handler: async ({ params, body }) => {
|
|
696
|
+
const repo = this.getRepository(params.entity);
|
|
697
|
+
if (!repo) return { error: "Entity not found" };
|
|
698
|
+
return repo.create(body);
|
|
699
|
+
}
|
|
700
|
+
});
|
|
701
|
+
dbUpdateRoute = $route({
|
|
702
|
+
method: "PUT",
|
|
703
|
+
path: "/__devtools/api/db/:entity/records/:id",
|
|
704
|
+
silent: true,
|
|
705
|
+
schema: {
|
|
706
|
+
params: t.object({
|
|
707
|
+
entity: t.text(),
|
|
708
|
+
id: t.text()
|
|
709
|
+
}),
|
|
710
|
+
body: t.record(t.text(), t.any()),
|
|
711
|
+
response: t.record(t.text(), t.any())
|
|
712
|
+
},
|
|
713
|
+
handler: async ({ params, body }) => {
|
|
714
|
+
const repo = this.getRepository(params.entity);
|
|
715
|
+
if (!repo) return { error: "Entity not found" };
|
|
716
|
+
const idValue = this.parseId(repo, params.id);
|
|
717
|
+
return repo.updateById(idValue, body);
|
|
718
|
+
}
|
|
719
|
+
});
|
|
720
|
+
dbDeleteRoute = $route({
|
|
721
|
+
method: "DELETE",
|
|
722
|
+
path: "/__devtools/api/db/:entity/records/:id",
|
|
723
|
+
silent: true,
|
|
724
|
+
schema: {
|
|
725
|
+
params: t.object({
|
|
726
|
+
entity: t.text(),
|
|
727
|
+
id: t.text()
|
|
728
|
+
}),
|
|
729
|
+
response: t.record(t.text(), t.any())
|
|
730
|
+
},
|
|
731
|
+
handler: async ({ params }) => {
|
|
732
|
+
const repo = this.getRepository(params.entity);
|
|
733
|
+
if (!repo) return { error: "Entity not found" };
|
|
734
|
+
const idValue = this.parseId(repo, params.id);
|
|
735
|
+
return repo.deleteById(idValue);
|
|
736
|
+
}
|
|
737
|
+
});
|
|
738
|
+
getRepository(entityName) {
|
|
739
|
+
try {
|
|
740
|
+
return this.alepha.inject(RepositoryProvider).getRepositories().find((r) => r.entity.name === entityName);
|
|
741
|
+
} catch {
|
|
742
|
+
return;
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
parseId(repo, rawId) {
|
|
746
|
+
const idType = repo.id.type;
|
|
747
|
+
if (idType?.type === "integer" || idType?.type === "number") return Number(rawId);
|
|
748
|
+
return rawId;
|
|
749
|
+
}
|
|
630
750
|
};
|
|
631
|
-
|
|
632
751
|
//#endregion
|
|
633
752
|
//#region src/index.ts
|
|
634
753
|
/**
|
|
635
|
-
* | type | quality | stability |
|
|
636
|
-
* |------|---------|-----------|
|
|
637
|
-
* | tooling | rare | experimental |
|
|
638
|
-
*
|
|
639
754
|
* Runtime inspection and debugging UI.
|
|
640
755
|
*
|
|
641
756
|
* **Features:**
|
|
@@ -652,24 +767,16 @@ var DevToolsProvider = class {
|
|
|
652
767
|
const AlephaDevtools = $module({
|
|
653
768
|
name: "alepha.devtools",
|
|
654
769
|
primitives: [],
|
|
655
|
-
services: [
|
|
656
|
-
DevToolsMetadataProvider,
|
|
657
|
-
DevToolsProvider,
|
|
658
|
-
DevToolsDatabaseProvider,
|
|
659
|
-
LogRepository
|
|
660
|
-
],
|
|
770
|
+
services: [DevToolsMetadataProvider, DevToolsProvider],
|
|
661
771
|
register: (alepha) => {
|
|
772
|
+
alepha.with(AlephaServer);
|
|
773
|
+
alepha.with(AlephaServerStatic);
|
|
662
774
|
alepha.with(DevToolsProvider);
|
|
663
|
-
alepha.with(DevToolsDatabaseProvider);
|
|
664
775
|
alepha.with(DevToolsMetadataProvider);
|
|
665
|
-
alepha.store.push("alepha.build.assets", "
|
|
776
|
+
alepha.store.push("alepha.build.assets", "alepha");
|
|
666
777
|
}
|
|
667
778
|
});
|
|
668
|
-
const $devtools = () => {
|
|
669
|
-
$context().alepha.with(AlephaDevtools);
|
|
670
|
-
return {};
|
|
671
|
-
};
|
|
672
|
-
|
|
673
779
|
//#endregion
|
|
674
|
-
export {
|
|
780
|
+
export { AlephaDevtools, DevToolsMetadataProvider, devActionMetadataSchema, devAtomMetadataSchema, devBucketMetadataSchema, devCacheMetadataSchema, devEntityColumnSchema, devEntityConstraintSchema, devEntityForeignKeySchema, devEntityIndexSchema, devEntityMetadataSchema, devEnvMetadataSchema, devMetadataSchema, devModuleMetadataSchema, devPageMetadataSchema, devProviderMetadataSchema, devQueueMetadataSchema, devRealmMetadataSchema, devRouteMetadataSchema, devSchedulerMetadataSchema, devSystemSchema, devTopicMetadataSchema };
|
|
781
|
+
|
|
675
782
|
//# sourceMappingURL=index.js.map
|